From 6949afc334ac423250f61fc7ba64cc0262409efc Mon Sep 17 00:00:00 2001 From: Christoph Oelckers Date: Sat, 14 May 2016 15:05:06 +0200 Subject: [PATCH] - fixed: For allowing an unblocking move, PIT_CheckThing used the wrong actor's position. This was causing monster pile-ups with moving ceilings. - don't let P_PushUp move any actors with the same z as the pushing actor. This should solve most monster pile-ups, but the entire logic here needs some serious rethinking. The only reason this doesn't cause more problems is some fudging in several other places. --- src/p_map.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/p_map.cpp b/src/p_map.cpp index 22004b897..8fd274437 100644 --- a/src/p_map.cpp +++ b/src/p_map.cpp @@ -1140,7 +1140,7 @@ bool PIT_CheckThing(FMultiBlockThingsIterator &it, FMultiBlockThingsIterator::Ch DVector3 oldpos = tm.thing->PosRelative(thing); // Both actors already overlap. To prevent them from remaining stuck allow the move if it // takes them further apart or the move does not change the position (when called from P_ChangeSector.) - if (oldpos.X == thing->X() && oldpos.Y == thing->Y()) + if (tm.pos.X == tm.thing->X() && tm.pos.Y == tm.thing->Y()) { unblocking = true; } @@ -5487,7 +5487,7 @@ void P_FindAboveIntersectors(AActor *actor) // not what is wanted here. continue; } - if (thing->Z() >= actor->Z() && + if (thing->Z() > actor->Z() && thing->Z() <= actor->Top()) { // Thing intersects above the base intersectors.Push(thing);