From 493a7db1ee9e4ed76eec510ba65040349507c5df Mon Sep 17 00:00:00 2001
From: Hanicef <gustaf@hanicef.me>
Date: Wed, 14 Feb 2024 21:54:28 +0100
Subject: [PATCH] Fix thinker being added twice to mobj

---
 src/p_mobj.c | 9 +++------
 1 file changed, 3 insertions(+), 6 deletions(-)

diff --git a/src/p_mobj.c b/src/p_mobj.c
index 382e207d8..d457847ff 100644
--- a/src/p_mobj.c
+++ b/src/p_mobj.c
@@ -10867,9 +10867,6 @@ mobj_t *P_SpawnMobj(fixed_t x, fixed_t y, fixed_t z, mobjtype_t type, ...)
 	)))
 		mobj->flags2 |= MF2_DONTRESPAWN;
 
-	if (!(mobj->flags & MF_NOTHINK))
-		P_AddThinker(THINK_MOBJ, &mobj->thinker);
-
 	if (type == MT_PLAYER)
 	{
 		// when spawning MT_PLAYER, set mobj->player before calling MobjSpawn hook to prevent P_RemoveMobj from succeeding on player mobj.
@@ -10879,12 +10876,12 @@ mobj_t *P_SpawnMobj(fixed_t x, fixed_t y, fixed_t z, mobjtype_t type, ...)
 		va_end(args);
 	}
 
-	// increment mobj reference, so we don't get a dangling reference in case MobjSpawn calls P_RemoveMobj
-	mobj->thinker.references++;
-
 	if (!(mobj->flags & MF_NOTHINK) || (titlemapinaction && mobj->type == MT_ALTVIEWMAN))
 		P_AddThinker(THINK_MOBJ, &mobj->thinker);
 
+	// increment mobj reference, so we don't get a dangling reference in case MobjSpawn calls P_RemoveMobj
+	mobj->thinker.references++;
+
 	// DANGER! This can cause P_SpawnMobj to return NULL!
 	// Avoid using P_RemoveMobj on the newly created mobj in "MobjSpawn" Lua hooks!
 	status = LUA_HookMobj(mobj, MOBJ_HOOK(MobjSpawn));
-- 
GitLab