From 72e2c24fdb714698f1a3c23f1c9035e5a387d3b4 Mon Sep 17 00:00:00 2001
From: MascaraSnake <jonassauer27@gmail.com>
Date: Mon, 20 Dec 2021 23:28:18 +0100
Subject: [PATCH] Adapt some reserved tags to UDMF

---
 extras/conf/udb/Includes/SRB222_things.cfg | 15 +++++++++
 src/info.c                                 |  2 +-
 src/info.h                                 |  2 ++
 src/p_enemy.c                              | 36 +++++++++++++++++++++-
 src/p_inter.c                              |  3 +-
 src/p_setup.c                              |  9 ++++++
 6 files changed, 64 insertions(+), 3 deletions(-)

diff --git a/extras/conf/udb/Includes/SRB222_things.cfg b/extras/conf/udb/Includes/SRB222_things.cfg
index 86fe6b1a5..0efe006fb 100644
--- a/extras/conf/udb/Includes/SRB222_things.cfg
+++ b/extras/conf/udb/Includes/SRB222_things.cfg
@@ -258,6 +258,11 @@ doom
 			sprite = "TRETA1";
 			width = 16;
 			height = 32;
+			arg0
+			{
+				title = "Death trigger tag";
+				type = 15;
+			}
 		}
 		111
 		{
@@ -2704,6 +2709,11 @@ doom
 			sprite = "KOOPA0";
 			width = 16;
 			height = 48;
+			arg0
+			{
+				title = "Death trigger tag";
+				type = 15;
+			}
 		}
 		1807
 		{
@@ -2711,6 +2721,11 @@ doom
 			sprite = "MAXEA0";
 			width = 8;
 			height = 16;
+			arg0
+			{
+				title = "Death trigger tag";
+				type = 15;
+			}
 		}
 		1808
 		{
diff --git a/src/info.c b/src/info.c
index f44659bda..d456d2afe 100644
--- a/src/info.c
+++ b/src/info.c
@@ -899,7 +899,7 @@ state_t states[NUMSTATES] =
 	{SPR_TRET, FF_FULLBRIGHT|2, 7, {A_Pain}, 0, 0, S_TURRETSHOCK7},       // S_TURRETSHOCK6
 	{SPR_TRET, FF_FULLBRIGHT|3, 7, {NULL}, 0, 0, S_TURRETSHOCK8},         // S_TURRETSHOCK7
 	{SPR_TRET, FF_FULLBRIGHT|4, 7, {NULL}, 0, 0, S_TURRETSHOCK9},         // S_TURRETSHOCK8
-	{SPR_TRET, FF_FULLBRIGHT|4, 7, {A_LinedefExecute}, LE_TURRET, 0, S_XPLD1}, // S_TURRETSHOCK9
+	{SPR_TRET, FF_FULLBRIGHT|4, 7, {A_LinedefExecuteFromArg}, 0, 0, S_XPLD1}, // S_TURRETSHOCK9
 
 	{SPR_TURR, 0, 1, {A_Look}, 1, 0, S_TURRETPOPDOWN8},          // S_TURRETLOOK
 	{SPR_TURR, 0, 0, {A_FaceTarget}, 0, 0, S_TURRETPOPUP1},  // S_TURRETSEE
diff --git a/src/info.h b/src/info.h
index 28965f4b3..d5fcc8504 100644
--- a/src/info.h
+++ b/src/info.h
@@ -150,6 +150,7 @@ enum actionnum
 	A_BOSS3PATH,
 	A_BOSS3SHOCKTHINK,
 	A_LINEDEFEXECUTE,
+	A_LINEDEFEXECUTEFROMARG,
 	A_PLAYSEESOUND,
 	A_PLAYATTACKSOUND,
 	A_PLAYACTIVESOUND,
@@ -409,6 +410,7 @@ void A_Boss3TakeDamage();
 void A_Boss3Path();
 void A_Boss3ShockThink();
 void A_LinedefExecute();
+void A_LinedefExecuteFromArg();
 void A_PlaySeeSound();
 void A_PlayAttackSound();
 void A_PlayActiveSound();
diff --git a/src/p_enemy.c b/src/p_enemy.c
index c02ca38be..a4607b497 100644
--- a/src/p_enemy.c
+++ b/src/p_enemy.c
@@ -173,6 +173,7 @@ void A_Boss3TakeDamage(mobj_t *actor);
 void A_Boss3Path(mobj_t *actor);
 void A_Boss3ShockThink(mobj_t *actor);
 void A_LinedefExecute(mobj_t *actor);
+void A_LinedefExecuteFromArg(mobj_t *actor);
 void A_PlaySeeSound(mobj_t *actor);
 void A_PlayAttackSound(mobj_t *actor);
 void A_PlayActiveSound(mobj_t *actor);
@@ -4049,7 +4050,8 @@ bossjustdie:
 		}
 		case MT_KOOPA:
 		{
-			EV_DoCeiling(LE_KOOPA, NULL, raiseToHighest);
+			if (mo->spawnpoint)
+				EV_DoCeiling(mo->spawnpoint->args[0], NULL, raiseToHighest);
 			return;
 		}
 		case MT_FANG:
@@ -8307,6 +8309,38 @@ void A_LinedefExecute(mobj_t *actor)
 	P_LinedefExecute((INT16)tagnum, actor, actor->subsector->sector);
 }
 
+// Function: A_LinedefExecuteFromArg
+//
+// Description: Object's location is used to set the calling sector. The tag used is the spawnpoint mapthing's args[var1].
+//
+// var1 = mapthing arg to take tag from
+// var2 = unused
+//
+void A_LinedefExecuteFromArg(mobj_t *actor)
+{
+	INT32 tagnum;
+	INT32 locvar1 = var1;
+
+	if (LUA_CallAction(A_LINEDEFEXECUTEFROMARG, actor))
+		return;
+
+	if (!actor->spawnpoint)
+		return;
+
+	if (locvar1 < 0 || locvar1 > NUMMAPTHINGARGS)
+	{
+		CONS_Debug(DBG_GAMELOGIC, "A_LinedefExecuteFromArg: Invalid mapthing arg %d\n", locvar1);
+		return;
+	}
+
+	tagnum = actor->spawnpoint->args[locvar1];
+
+	CONS_Debug(DBG_GAMELOGIC, "A_LinedefExecuteFromArg: Running mobjtype %d's sector with tag %d\n", actor->type, tagnum);
+
+	// tag 32768 displayed in map editors is actually tag -32768, tag 32769 is -32767, 65535 is -1 etc.
+	P_LinedefExecute((INT16)tagnum, actor, actor->subsector->sector);
+}
+
 // Function: A_PlaySeeSound
 //
 // Description: Plays the object's seesound.
diff --git a/src/p_inter.c b/src/p_inter.c
index d84cb8ce5..62f6080bc 100644
--- a/src/p_inter.c
+++ b/src/p_inter.c
@@ -1387,7 +1387,8 @@ void P_TouchSpecialThing(mobj_t *special, mobj_t *toucher, boolean heightcheck)
 				if (player->bot && player->bot != BOT_MPAI)
 					return;
 
-				EV_DoElevator(LE_AXE, NULL, bridgeFall);
+				if (special->spawnpoint)
+					EV_DoElevator(special->spawnpoint->args[0], NULL, bridgeFall);
 
 				// scan the remaining thinkers to find koopa
 				for (th = thlist[THINK_MOBJ].next; th != &thlist[THINK_MOBJ]; th = th->next)
diff --git a/src/p_setup.c b/src/p_setup.c
index 25250b449..46b47100c 100644
--- a/src/p_setup.c
+++ b/src/p_setup.c
@@ -4873,6 +4873,9 @@ static void P_ConvertBinaryMap(void)
 	{
 		switch (mapthings[i].type)
 		{
+		case 110: //THZ Turret
+			mapthings[i].args[0] = LE_TURRET;
+			break;
 		case 754: //Push point
 		case 755: //Pull point
 		{
@@ -5048,6 +5051,12 @@ static void P_ConvertBinaryMap(void)
 		case 1714: //Ideya anchor point
 			mapthings[i].args[0] = mapthings[i].extrainfo;
 			break;
+		case 1806: //King Bowser
+			mapthings[i].args[0] = LE_KOOPA;
+			break;
+		case 1807: //Axe
+			mapthings[i].args[0] = LE_AXE;
+			break;
 		default:
 			break;
 		}