ACS: Fix enter triggers on intangible FOFs

This commit is contained in:
Sally Coolatta 2023-05-03 18:40:23 -04:00
parent 2cba1b7820
commit ce712ae68d

View file

@ -5730,6 +5730,9 @@ static void P_CheckMobj3DFloorAction(mobj_t *mo, sector_t *sec, boolean continuo
for (rover = sec->ffloors; rover; rover = rover->next) for (rover = sec->ffloors; rover; rover = rover->next)
{ {
fixed_t top = INT32_MIN;
fixed_t bottom = INT32_MAX;
roversec = rover->master->frontsector; roversec = rover->master->frontsector;
if (P_SectorActionIsContinuous(roversec) != continuous) if (P_SectorActionIsContinuous(roversec) != continuous)
@ -5744,6 +5747,14 @@ static void P_CheckMobj3DFloorAction(mobj_t *mo, sector_t *sec, boolean continuo
continue; continue;
} }
top = P_GetSpecialTopZ(mo, roversec, roversec);
bottom = P_GetSpecialBottomZ(mo, roversec, roversec);
if (mo->z > top || mo->z + mo->height < bottom)
{
continue;
}
if (P_AllowSpecialEnter(roversec, mo) == false) if (P_AllowSpecialEnter(roversec, mo) == false)
{ {
boolean floor = false; boolean floor = false;
@ -5751,12 +5762,12 @@ static void P_CheckMobj3DFloorAction(mobj_t *mo, sector_t *sec, boolean continuo
if (P_AllowSpecialFloor(roversec, mo) == true) if (P_AllowSpecialFloor(roversec, mo) == true)
{ {
floor = (P_GetMobjFeet(mo) == P_GetSpecialTopZ(mo, roversec, roversec)); floor = (P_GetMobjFeet(mo) == top);
} }
if (P_AllowSpecialCeiling(roversec, mo) == true) if (P_AllowSpecialCeiling(roversec, mo) == true)
{ {
ceiling = (P_GetMobjHead(mo) == P_GetSpecialBottomZ(mo, roversec, roversec)); ceiling = (P_GetMobjHead(mo) == bottom);
} }
if (floor == false && ceiling == false) if (floor == false && ceiling == false)