From b56190d2c4f84c4ed6b127527ea39e3e648f68b6 Mon Sep 17 00:00:00 2001 From: Boondorl <59555366+Boondorl@users.noreply.github.com> Date: Tue, 26 Nov 2024 05:59:20 -0500 Subject: [PATCH] Fixed incorrect autooff behavior on ceiling bounce (#2837) * Fixed incorrect autooff behavior on ceiling bounce * Fixed incorrect Actor bouncing behavior --- src/playsim/p_map.cpp | 10 +++++++--- src/playsim/p_mobj.cpp | 2 +- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/playsim/p_map.cpp b/src/playsim/p_map.cpp index 84accbe76..ba9984051 100644 --- a/src/playsim/p_map.cpp +++ b/src/playsim/p_map.cpp @@ -3792,7 +3792,8 @@ bool P_BounceActor(AActor *mo, AActor *BlockingMobj, bool ontop) else // Don't run through this for MBF-style bounces { // The reflected velocity keeps only about 70% of its original speed - mo->Vel.Z = (mo->Vel.Z - 2. * dot) * mo->bouncefactor; + mo->Vel.Z -= 2. * dot; + mo->Vel *= mo->bouncefactor; } mo->PlayBounceSound(true); @@ -3803,8 +3804,11 @@ bool P_BounceActor(AActor *mo, AActor *BlockingMobj, bool ontop) } else if (mo->BounceFlags & (BOUNCE_AutoOff | BOUNCE_AutoOffFloorOnly)) { - if (!(mo->flags & MF_NOGRAVITY) && (mo->Vel.Z < 3.)) - mo->BounceFlags &= ~BOUNCE_TypeMask; + if (mo->Vel.Z >= 0 || (mo->BounceFlags & BOUNCE_AutoOff)) + { + if (!(mo->flags & MF_NOGRAVITY) && (mo->Vel.Z < 3.)) + mo->BounceFlags &= ~BOUNCE_TypeMask; + } } } if (mo->BounceFlags & BOUNCE_UseBounceState) diff --git a/src/playsim/p_mobj.cpp b/src/playsim/p_mobj.cpp index e25545f80..ad95f8ac6 100644 --- a/src/playsim/p_mobj.cpp +++ b/src/playsim/p_mobj.cpp @@ -1857,7 +1857,7 @@ bool AActor::FloorBounceMissile (secplane_t &plane, bool is3DFloor) if (norm.Z > 0 || (BounceFlags & BOUNCE_AutoOff)) { // AutoOff only works when bouncing off a floor, not a ceiling (or in compatibility mode.) - if (!(flags & MF_NOGRAVITY) && ((Vel | norm) < 3)) + if (!(flags & MF_NOGRAVITY) && (norm.Z < 0 || ((Vel | norm) < 3))) BounceFlags &= ~BOUNCE_TypeMask; } }