K_SpawnKartMissile: try to step down for stairs

This commit is contained in:
James R 2023-08-12 15:34:51 -07:00
parent 57a73dd1b0
commit ba77b97aaa

View file

@ -4768,14 +4768,15 @@ static mobj_t *K_SpawnKartMissile(mobj_t *source, mobjtype_t type, angle_t an, I
th->momy = FixedMul(finalspeed, FINESINE(an>>ANGLETOFINESHIFT)); th->momy = FixedMul(finalspeed, FINESINE(an>>ANGLETOFINESHIFT));
th->momz = source->momz; th->momz = source->momz;
P_CheckPosition(th, x, y, NULL); // Get floorz and ceilingz
P_SetOrigin(th, x, y, z);
if (P_MobjWasRemoved(th)) if (P_MobjWasRemoved(th))
return NULL; return NULL;
if ((P_IsObjectFlipped(th) if ((P_IsObjectFlipped(th)
? tm.ceilingz - source->ceilingz ? th->ceilingz - source->ceilingz
: tm.floorz - source->floorz) > P_GetThingStepUp(th, x, y)) : th->floorz - source->floorz) > P_GetThingStepUp(th, x, y))
{ {
// Assuming this is on the boundary of a sector and // Assuming this is on the boundary of a sector and
// the wall is too tall... I'm not bothering with // the wall is too tall... I'm not bothering with
@ -4795,6 +4796,26 @@ static mobj_t *K_SpawnKartMissile(mobj_t *source, mobjtype_t type, angle_t an, I
return NULL; return NULL;
} }
if (P_IsObjectOnGround(source))
{
// If the player is on the ground, make sure the
// missile spawns on the ground, so it smoothly
// travels down stairs.
// FIXME: This needs a more elegant solution because
// if multiple stairs are crossed, the height
// difference in the end is too great (this affects
// slopes too).
const fixed_t tz = P_IsObjectFlipped(th) ? th->ceilingz - th->height : th->floorz;
if (abs(tz - z) <= P_GetThingStepUp(th, x, y))
{
z = tz;
th->z = z;
}
}
if (source->player != NULL) if (source->player != NULL)
{ {
th->cusval = source->player->itemscale; th->cusval = source->player->itemscale;