From 1a6e48de1eba6dde7df121b319524901bd94013e Mon Sep 17 00:00:00 2001
From: spherallic <spherallic@gmail.com>
Date: Thu, 16 Mar 2023 12:12:58 +0100
Subject: [PATCH] Update mobj floorz/ceilingz after FOF destruction

---
 src/p_floor.c | 14 ++++++++++++++
 1 file changed, 14 insertions(+)

diff --git a/src/p_floor.c b/src/p_floor.c
index 869384b534..261ce997b5 100644
--- a/src/p_floor.c
+++ b/src/p_floor.c
@@ -1212,6 +1212,19 @@ static boolean T_SectorHasEnemies(sector_t *sec)
 	return false;
 }
 
+static void T_UpdateMobjPlaneZ(sector_t *sec)
+{
+	msecnode_t *node = sec->touching_thinglist; // things touching this sector
+	mobj_t *mo;
+	while (node)
+	{
+		mo = node->m_thing;
+		mo->floorz = P_FloorzAtPos(mo->x, mo->y, mo->z, mo->height);
+		mo->ceilingz = P_CeilingzAtPos(mo->x, mo->y, mo->z, mo->height);
+		node = node->m_thinglist_next;
+	}
+}
+
 //
 // T_NoEnemiesThinker
 //
@@ -1938,6 +1951,7 @@ void EV_CrumbleChain(sector_t *sec, ffloor_t *rover)
 	// no longer exists (can't collide with again)
 	rover->fofflags &= ~FOF_EXISTS;
 	rover->master->frontsector->moved = true;
+	T_UpdateMobjPlaneZ(sec); // prevent objects from floating
 	P_RecalcPrecipInSector(sec);
 }
 
-- 
GitLab