Successfully cause landing events when the ground moves up to hit you, as opposed to just when you move down to the ground.

This commit is contained in:
toaster 2019-07-17 23:25:49 +01:00
parent 82acf2de6b
commit 1d5e8e249e
2 changed files with 12 additions and 1 deletions

View file

@ -2820,7 +2820,7 @@ boolean P_SceneryTryMove(mobj_t *thing, fixed_t x, fixed_t y)
static boolean P_ThingHeightClip(mobj_t *thing) static boolean P_ThingHeightClip(mobj_t *thing)
{ {
boolean floormoved; boolean floormoved;
fixed_t oldfloorz = thing->floorz; fixed_t oldfloorz = thing->floorz, oldz = thing->z;
ffloor_t *oldfloorrover = thing->floorrover; ffloor_t *oldfloorrover = thing->floorrover;
ffloor_t *oldceilingrover = thing->ceilingrover; ffloor_t *oldceilingrover = thing->ceilingrover;
boolean onfloor = P_IsObjectOnGround(thing);//(thing->z <= thing->floorz); boolean onfloor = P_IsObjectOnGround(thing);//(thing->z <= thing->floorz);
@ -2879,6 +2879,12 @@ static boolean P_ThingHeightClip(mobj_t *thing)
thing->z = thing->ceilingz - thing->height; thing->z = thing->ceilingz - thing->height;
} }
if (thing->z != oldz)
{
if (thing->player)
P_PlayerHitFloor(thing->player, false);
}
// debug: be sure it falls to the floor // debug: be sure it falls to the floor
thing->eflags &= ~MFE_ONGROUND; thing->eflags &= ~MFE_ONGROUND;

View file

@ -2069,6 +2069,7 @@ boolean P_PlayerHitFloor(player_t *player, boolean dorollstuff)
P_ReturnThrustY(missile, throwang, mu)); // side to side component P_ReturnThrustY(missile, throwang, mu)); // side to side component
P_Thrust(missile, player->drawangle, mu2); // forward component P_Thrust(missile, player->drawangle, mu2); // forward component
P_SetObjectMomZ(missile, (4 + ((i&1)<<1))*FRACUNIT, true); P_SetObjectMomZ(missile, (4 + ((i&1)<<1))*FRACUNIT, true);
missile->momz += player->mo->pmomz;
missile->fuse = TICRATE/2; missile->fuse = TICRATE/2;
missile->extravalue2 = ev; missile->extravalue2 = ev;
@ -4418,6 +4419,10 @@ static void P_DoSpinAbility(player_t *player, ticcmd_t *cmd)
{ {
player->mo->z += P_MobjFlip(player->mo); player->mo->z += P_MobjFlip(player->mo);
P_SetObjectMomZ(player->mo, player->mindash, false); P_SetObjectMomZ(player->mo, player->mindash, false);
if (P_MobjFlip(player->mo)*player->mo->pmomz > 0)
player->mo->momz += player->mo->pmomz; // Add the platform's momentum to your jump.
else
player->mo->pmomz = 0;
if (player->mo->eflags & MFE_UNDERWATER) if (player->mo->eflags & MFE_UNDERWATER)
player->mo->momz >>= 1; player->mo->momz >>= 1;
#if 0 #if 0