Kill saloon doors without a tracer, add height check for non-blocking doors

This commit is contained in:
Tatsuru 2020-12-06 14:11:08 -03:00
parent d004515d6a
commit 3b85abdee7
2 changed files with 10 additions and 2 deletions

View File

@ -982,7 +982,8 @@ static boolean PIT_CheckThing(mobj_t *thing)
if (thing->type == MT_SALOONDOOR && tmthing->player) if (thing->type == MT_SALOONDOOR && tmthing->player)
{ {
mobj_t *ref = (tmthing->player->powers[pw_carry] == CR_MINECART && tmthing->tracer && !P_MobjWasRemoved(tmthing->tracer)) ? tmthing->tracer : tmthing; mobj_t *ref = (tmthing->player->powers[pw_carry] == CR_MINECART && tmthing->tracer && !P_MobjWasRemoved(tmthing->tracer)) ? tmthing->tracer : tmthing;
if ((thing->flags2 & MF2_AMBUSH) || ref != tmthing) if (((thing->flags2 & MF2_AMBUSH) && (tmthing->z <= thing->z + thing->height) && (tmthing->z + tmthing->height >= thing->z))
|| ref != tmthing)
{ {
fixed_t dm = min(FixedHypot(ref->momx, ref->momy), 16*FRACUNIT); fixed_t dm = min(FixedHypot(ref->momx, ref->momy), 16*FRACUNIT);
angle_t ang = R_PointToAngle2(0, 0, ref->momx, ref->momy) - thing->angle; angle_t ang = R_PointToAngle2(0, 0, ref->momx, ref->momy) - thing->angle;
@ -995,7 +996,8 @@ static boolean PIT_CheckThing(mobj_t *thing)
if (thing->type == MT_SALOONDOORCENTER && tmthing->player) if (thing->type == MT_SALOONDOORCENTER && tmthing->player)
{ {
if ((thing->flags2 & MF2_AMBUSH) || (tmthing->player->powers[pw_carry] == CR_MINECART && tmthing->tracer && !P_MobjWasRemoved(tmthing->tracer))) if (((thing->flags2 & MF2_AMBUSH) && (tmthing->z <= thing->z + thing->height) && (tmthing->z + tmthing->height >= thing->z))
|| (tmthing->player->powers[pw_carry] == CR_MINECART && tmthing->tracer && !P_MobjWasRemoved(tmthing->tracer)))
return true; return true;
} }

View File

@ -9651,6 +9651,12 @@ static boolean P_MobjRegularThink(mobj_t *mobj)
break; break;
} }
case MT_SALOONDOOR: case MT_SALOONDOOR:
if (!mobj->tracer) // Door center is gone or not spawned?
{
P_RemoveMobj(mobj); // Die
return false;
}
P_SaloonDoorThink(mobj); P_SaloonDoorThink(mobj);
break; break;
case MT_MINECARTSPAWNER: case MT_MINECARTSPAWNER: