From 0a7fe9569d350a4d59f21efa4d904b6aec3940cd Mon Sep 17 00:00:00 2001 From: toasterbabe Date: Fri, 23 Dec 2016 23:13:31 +0000 Subject: [PATCH] * Fixed issue where CA_BOUNCE users can harmlessly bounce on deathpits (and not Cakewalk style!) * Minor quality-of-life improvements to CA_BOUNCE handling. --- src/p_mobj.c | 6 +++--- src/p_user.c | 5 +++-- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/p_mobj.c b/src/p_mobj.c index 8d4ef4202..a6e012c73 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -3316,7 +3316,7 @@ static void P_PlayerZMovement(mobj_t *mo) } } - if (mo->player->pflags & PF_BOUNCING) + if (mo->player->pflags & PF_BOUNCING && !P_CheckDeathPitCollide(mo)) { fixed_t prevmomz = P_MobjFlip(mo)*abs(mo->momz); if (mo->eflags & MFE_UNDERWATER) @@ -3326,7 +3326,7 @@ static void P_PlayerZMovement(mobj_t *mo) S_StartSound(mo, sfx_boingf); P_DoJump(mo->player, false); P_SetPlayerMobjState(mo, S_PLAY_BOUNCE_LANDING); - mo->player->pflags |= PF_BOUNCING; + mo->player->pflags |= PF_BOUNCING|PF_THOKKED; mo->player->jumping = 0; mo->momz = (FixedMul(mo->momz, 3*FRACUNIT/2) + prevmomz)/2; clipmomz = false; @@ -4153,7 +4153,7 @@ static void P_PlayerMobjThinker(mobj_t *mobj) mobj->eflags &= ~MFE_JUSTSTEPPEDDOWN; if (mobj->state-states == S_PLAY_BOUNCE_LANDING) - goto animonly; + goto animonly; // no need for checkposition - doesn't move at ALL // Zoom tube if (mobj->tracer) diff --git a/src/p_user.c b/src/p_user.c index d1ba7d5e9..666e8d72d 100644 --- a/src/p_user.c +++ b/src/p_user.c @@ -4283,9 +4283,10 @@ static void P_DoJumpStuff(player_t *player, ticcmd_t *cmd) { P_SetPlayerMobjState(player->mo, S_PLAY_BOUNCE); player->pflags &= ~PF_JUMPED; - player->pflags |= PF_BOUNCING; + player->pflags |= PF_THOKKED|PF_BOUNCING; player->mo->momx >>= 1; player->mo->momy >>= 1; + player->mo->momz >>= 1; } break; case CA_TWINSPIN: @@ -6746,9 +6747,9 @@ static void P_MovePlayer(player_t *player) } else { - player->pflags |= PF_THOKKED; player->mo->momx >>= 1; player->mo->momy >>= 1; + player->mo->momz >>= 1; P_SetPlayerMobjState(player->mo, S_PLAY_FALL); } }