- do not let P_AdjustFloorCeil use the return from P_CheckPosition if floorz is greater than ceilingz.

This can only happen if some thing gets placed somewhere it doesn't physically fit in and as a result of the floor move would be pushed into an even more invalid place.

See https://forum.zdoom.org/viewtopic.php?f=2&t=56764
This commit is contained in:
Christoph Oelckers 2017-06-05 12:20:59 +02:00
parent c7b895c8ff
commit 3b818171d5

View file

@ -5884,7 +5884,10 @@ bool P_AdjustFloorCeil(AActor *thing, FChangePosition *cpos)
} }
bool isgood = P_CheckPosition(thing, thing->Pos(), tm); bool isgood = P_CheckPosition(thing, thing->Pos(), tm);
if (!(thing->flags4 & MF4_ACTLIKEBRIDGE))
// This is essentially utterly broken because it even uses the return from a failed P_CheckPosition but the entire logic will break down if that isn't done.
// However, if tm.floorz is greater than tm.ceilingz we have a real problem that needs to be dealt with exolicitly.
if (!(thing->flags4 & MF4_ACTLIKEBRIDGE) && tm.floorz <= tm.ceilingz)
{ {
thing->floorz = tm.floorz; thing->floorz = tm.floorz;
thing->ceilingz = tm.ceilingz; thing->ceilingz = tm.ceilingz;