- 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.
This commit is contained in:
Christoph Oelckers 2016-05-14 15:05:06 +02:00
parent ebca170e73
commit 6949afc334

View file

@ -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);