- changed P_ChangeSector so that for bridges it only keeps the floorz and ceilingz of the spawn position.

This is necessary to prevent moving sectors from altering the bridge's z-position. The bridge should remain at its current z, even if the sector change would cause floorz or ceilingz to be changed in a way that would make P_ZMovement adjust the bridge.
This commit is contained in:
Christoph Oelckers 2016-07-04 22:36:27 +02:00
parent 0b93e9b897
commit b81876698f

View file

@ -5466,14 +5466,25 @@ bool P_AdjustFloorCeil(AActor *thing, FChangePosition *cpos)
} }
bool isgood = P_CheckPosition(thing, thing->Pos(), tm); bool isgood = P_CheckPosition(thing, thing->Pos(), tm);
thing->floorz = tm.floorz; if (!(thing->flags4 & MF4_ACTLIKEBRIDGE))
thing->ceilingz = tm.ceilingz; {
thing->dropoffz = tm.dropoffz; // killough 11/98: remember dropoffs thing->floorz = tm.floorz;
thing->floorpic = tm.floorpic; thing->ceilingz = tm.ceilingz;
thing->floorterrain = tm.floorterrain; thing->dropoffz = tm.dropoffz; // killough 11/98: remember dropoffs
thing->floorsector = tm.floorsector; thing->floorpic = tm.floorpic;
thing->ceilingpic = tm.ceilingpic; thing->floorterrain = tm.floorterrain;
thing->ceilingsector = tm.ceilingsector; thing->floorsector = tm.floorsector;
thing->ceilingpic = tm.ceilingpic;
thing->ceilingsector = tm.ceilingsector;
}
else
{
// Bridges only keep the info at their spawn position
// This is necessary to prevent moving sectors from altering the bridge's z-position.
// The bridge should remain at its current z, even if the sector change would cause
// floorz or ceilingz to be changed in a way that would make P_ZMovement adjust the bridge.
P_FindFloorCeiling(thing, FFCF_ONLYSPAWNPOS);
}
// restore the PASSMOBJ flag but leave the other flags alone. // restore the PASSMOBJ flag but leave the other flags alone.
thing->flags2 = (thing->flags2 & ~MF2_PASSMOBJ) | flags2; thing->flags2 = (thing->flags2 & ~MF2_PASSMOBJ) | flags2;