From 0cbbaece3b68e09cfa85a3c63811cbb46a235963 Mon Sep 17 00:00:00 2001 From: Boondorl <59555366+Boondorl@users.noreply.github.com> Date: Thu, 19 Jan 2023 11:44:57 -0500 Subject: [PATCH] Fixed BlockingLine giving erroneous results Fixed BlockingLine not clearing properly when xy velocity is 0 --- src/playsim/p_mobj.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/playsim/p_mobj.cpp b/src/playsim/p_mobj.cpp index 22961bd67..8ba0ef3ba 100644 --- a/src/playsim/p_mobj.cpp +++ b/src/playsim/p_mobj.cpp @@ -1971,6 +1971,7 @@ static double P_XYMovement (AActor *mo, DVector2 scroll) FCheckPosition tm(!!(mo->flags2 & MF2_RIP)); DAngle oldangle = mo->Angles.Yaw; + line_t* blocker = nullptr; do { if (mo->Level->i_compatflags & COMPATF_WALLRUN) pushtime++; @@ -1986,7 +1987,7 @@ static double P_XYMovement (AActor *mo, DVector2 scroll) { // blocked move AActor *BlockingMobj = mo->BlockingMobj; - line_t *BlockingLine = mo->BlockingLine; + line_t *BlockingLine = blocker = mo->BlockingLine; // [ZZ] if (!BlockingLine && !BlockingMobj) // hit floor or ceiling while XY movement - sector actions @@ -2188,6 +2189,9 @@ static double P_XYMovement (AActor *mo, DVector2 scroll) } } while (++step <= steps); + // Correctly update whether the Actor was truly blocked by a wall or not + mo->BlockingLine = blocker; + // Friction if (player && player->mo == mo && player->cheats & CF_NOVELOCITY) @@ -4057,6 +4061,7 @@ void AActor::Tick () // Handle X and Y velocities BlockingMobj = nullptr; + BlockingLine = nullptr; sector_t* oldBlockingCeiling = BlockingCeiling; sector_t* oldBlockingFloor = BlockingFloor; Blocking3DFloor = nullptr;