From 0caabbe355bcb412ea730a48d8e2947c6685dfeb Mon Sep 17 00:00:00 2001 From: Christoph Oelckers Date: Fri, 9 Nov 2018 19:06:54 +0100 Subject: [PATCH] - clear spechit before leaving P_CheckPosition. Otherwise this may contain residual data from the last call. One can only hope that this doesn't cause other side effects - this entire code is one horrendous mess of bad ideas. --- src/p_map.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/p_map.cpp b/src/p_map.cpp index e092ef80f..148e1fd18 100644 --- a/src/p_map.cpp +++ b/src/p_map.cpp @@ -1809,6 +1809,10 @@ bool P_CheckPosition(AActor *thing, const DVector2 &pos, FCheckPosition &tm, boo tm.abovemidtex = false; validcount++; + // Remove all old entries before returning. + spechit.Clear(); + portalhit.Clear(); + if ((thing->flags & MF_NOCLIP) && !(thing->flags & MF_SKULLFLY)) return true; @@ -1886,13 +1890,15 @@ bool P_CheckPosition(AActor *thing, const DVector2 &pos, FCheckPosition &tm, boo // being considered for collision with the player. validcount++; + // Clear out any residual garbage left behind by PIT_CheckThing induced recursions etc. + spechit.Clear(); + portalhit.Clear(); + thing->BlockingMobj = NULL; thing->Height = realHeight; if (actorsonly || (thing->flags & MF_NOCLIP)) return (thing->BlockingMobj = thingblocker) == NULL; - spechit.Clear(); - portalhit.Clear(); FMultiBlockLinesIterator it(pcheck, pos.X, pos.Y, thing->Z(), thing->Height, thing->radius, newsec); FMultiBlockLinesIterator::CheckResult lcres;