From 261f049f6c462be902b4503089d340fc7595ab8b Mon Sep 17 00:00:00 2001
From: MascaraSnake <jonassauer27@gmail.com>
Date: Sat, 25 Jan 2020 09:52:13 +0100
Subject: [PATCH 1/5] Add mapthing tag field (not used yet)

---
 src/doomdata.h    | 1 +
 src/lua_mobjlib.c | 4 ++++
 src/p_setup.c     | 4 ++++
 3 files changed, 9 insertions(+)

diff --git a/src/doomdata.h b/src/doomdata.h
index f6e7cb584..3ac3a9530 100644
--- a/src/doomdata.h
+++ b/src/doomdata.h
@@ -203,6 +203,7 @@ typedef struct
 	UINT16 options;
 	INT16 z;
 	UINT8 extrainfo;
+	INT16 tag;
 	struct mobj_s *mobj;
 } mapthing_t;
 
diff --git a/src/lua_mobjlib.c b/src/lua_mobjlib.c
index 90733b2c6..fb6486c6c 100644
--- a/src/lua_mobjlib.c
+++ b/src/lua_mobjlib.c
@@ -788,6 +788,8 @@ static int mapthing_get(lua_State *L)
 		number = mt->z;
 	else if(fastcmp(field,"extrainfo"))
 		number = mt->extrainfo;
+	else if(fastcmp(field,"tag"))
+		number = mt->tag;
 	else if(fastcmp(field,"mobj")) {
 		LUA_PushUserdata(L, mt->mobj, META_MOBJ);
 		return 1;
@@ -830,6 +832,8 @@ static int mapthing_set(lua_State *L)
 			return luaL_error(L, "mapthing_t extrainfo set %d out of range (%d - %d)", extrainfo, 0, 15);
 		mt->extrainfo = (UINT8)extrainfo;
 	}
+	else if (fastcmp(field,"tag"))
+		mt->tag = (INT16)luaL_checkinteger(L, 3);
 	else if(fastcmp(field,"mobj"))
 		mt->mobj = *((mobj_t **)luaL_checkudata(L, 3, META_MOBJ));
 	else
diff --git a/src/p_setup.c b/src/p_setup.c
index 3768bd47c..04d02fe46 100644
--- a/src/p_setup.c
+++ b/src/p_setup.c
@@ -1279,6 +1279,7 @@ static void P_LoadThings(UINT8 *data)
 		mt->type = READUINT16(data);
 		mt->options = READUINT16(data);
 		mt->extrainfo = (UINT8)(mt->type >> 12);
+		mt->tag = 0;
 
 		mt->type &= 4095;
 
@@ -1498,6 +1499,8 @@ static void ParseTextmapLinedefParameter(UINT32 i, char *param, char *val)
 
 static void ParseTextmapThingParameter(UINT32 i, char *param, char *val)
 {
+	if (fastcmp(param, "id"))
+		mapthings[i].tag = atol(val);
 	if (fastcmp(param, "x"))
 		mapthings[i].x = atol(val);
 	else if (fastcmp(param, "y"))
@@ -1690,6 +1693,7 @@ static void P_LoadTextmap(void)
 		mt->options = 0;
 		mt->z = 0;
 		mt->extrainfo = 0;
+		mt->tag = 0;
 		mt->mobj = NULL;
 
 		TextmapParse(mapthingsPos[i], i, ParseTextmapThingParameter);

From 37375972e2aab714a0b95dca979948c8487e0d7a Mon Sep 17 00:00:00 2001
From: MascaraSnake <jonassauer27@gmail.com>
Date: Sat, 25 Jan 2020 10:01:01 +0100
Subject: [PATCH 2/5] Use tag field to setup vertex slopes

---
 src/p_setup.c  | 12 ++++++++++++
 src/p_slopes.c |  6 +++---
 2 files changed, 15 insertions(+), 3 deletions(-)

diff --git a/src/p_setup.c b/src/p_setup.c
index 04d02fe46..1a045bee3 100644
--- a/src/p_setup.c
+++ b/src/p_setup.c
@@ -2770,6 +2770,18 @@ static void P_ConvertBinaryMap(void)
 			break;
 		}
 	}
+
+	for (i = 0; i < nummapthings; i++)
+	{
+		switch (mapthings[i].type)
+		{
+		case 750:
+			mapthings[i].tag = mapthings[i].angle;
+			break;
+		default:
+			break;
+		}
+	}
 }
 
 /** Compute MD5 message digest for bytes read from memory source
diff --git a/src/p_slopes.c b/src/p_slopes.c
index 46feb8c94..10cccd224 100644
--- a/src/p_slopes.c
+++ b/src/p_slopes.c
@@ -428,11 +428,11 @@ static pslope_t *MakeViaMapthings(INT16 tag1, INT16 tag2, INT16 tag3, UINT8 flag
 		if (mt->type != 750) // Haha, I'm hijacking the old Chaos Spawn thingtype for something!
 			continue;
 
-		if (!vertices[0] && mt->angle == tag1)
+		if (!vertices[0] && mt->tag == tag1)
 			vertices[0] = mt;
-		else if (!vertices[1] && mt->angle == tag2)
+		else if (!vertices[1] && mt->tag == tag2)
 			vertices[1] = mt;
-		else if (!vertices[2] && mt->angle == tag3)
+		else if (!vertices[2] && mt->tag == tag3)
 			vertices[2] = mt;
 	}
 

From 5656d77c828ff8d7eded00da271d8271676fda10 Mon Sep 17 00:00:00 2001
From: MascaraSnake <jonassauer27@gmail.com>
Date: Sat, 25 Jan 2020 10:15:20 +0100
Subject: [PATCH 3/5] Use tag instead of angle for polyobject spawn points and
 anchors

---
 src/p_polyobj.c | 6 +++---
 src/p_setup.c   | 3 +++
 2 files changed, 6 insertions(+), 3 deletions(-)

diff --git a/src/p_polyobj.c b/src/p_polyobj.c
index cd0a44bb4..133e1b601 100644
--- a/src/p_polyobj.c
+++ b/src/p_polyobj.c
@@ -708,9 +708,9 @@ static void Polyobj_moveToSpawnSpot(mapthing_t *anchor)
 	vertex_t  dist, sspot;
 	size_t i;
 
-	if (!(po = Polyobj_GetForNum(anchor->angle)))
+	if (!(po = Polyobj_GetForNum(anchor->tag)))
 	{
-		CONS_Debug(DBG_POLYOBJ, "Bad polyobject %d for anchor point\n", anchor->angle);
+		CONS_Debug(DBG_POLYOBJ, "Bad polyobject %d for anchor point\n", anchor->tag);
 		return;
 	}
 
@@ -1562,7 +1562,7 @@ void Polyobj_InitLevel(void)
 		{
 			qitem = (mobjqitem_t *)M_QueueIterator(&spawnqueue);
 
-			Polyobj_spawnPolyObj(i, qitem->mo, qitem->mo->spawnpoint->angle);
+			Polyobj_spawnPolyObj(i, qitem->mo, qitem->mo->spawnpoint->tag);
 		}
 
 		// move polyobjects to spawn points
diff --git a/src/p_setup.c b/src/p_setup.c
index 1a045bee3..d79bd328a 100644
--- a/src/p_setup.c
+++ b/src/p_setup.c
@@ -2776,6 +2776,9 @@ static void P_ConvertBinaryMap(void)
 		switch (mapthings[i].type)
 		{
 		case 750:
+		case 760:
+		case 761:
+		case 762:
 			mapthings[i].tag = mapthings[i].angle;
 			break;
 		default:

From d947558576fb35486ebbf0f43edcb0a44088d493 Mon Sep 17 00:00:00 2001
From: MascaraSnake <jonassauer27@gmail.com>
Date: Sat, 25 Jan 2020 10:26:38 +0100
Subject: [PATCH 4/5] Use tag instead of angle for skyboxes

---
 src/p_mobj.c  | 10 ++++++++--
 src/p_setup.c |  3 +++
 2 files changed, 11 insertions(+), 2 deletions(-)

diff --git a/src/p_mobj.c b/src/p_mobj.c
index a8599ceb5..107a56818 100644
--- a/src/p_mobj.c
+++ b/src/p_mobj.c
@@ -12643,10 +12643,16 @@ static boolean P_SetupSpawnedMapThing(mapthing_t *mthing, mobj_t *mobj, boolean
 		break;
 	}
 	case MT_SKYBOX:
+		if (mthing->tag < 0 || mthing->tag > 15)
+		{
+			CONS_Debug(DBG_GAMELOGIC, "P_SetupSpawnedMapThing: Skybox ID %d of mapthing %s is not between 0 and 15!\n", mthing->tag, sizeu1((size_t)(mthing - mapthings)));
+			break;
+		}
+
 		if (mthing->options & MTF_OBJECTSPECIAL)
-			skyboxcenterpnts[mthing->extrainfo] = mobj;
+			skyboxcenterpnts[mthing->tag % 16] = mobj;
 		else
-			skyboxviewpnts[mthing->extrainfo] = mobj;
+			skyboxviewpnts[mthing->tag % 16] = mobj;
 		break;
 	case MT_EGGSTATUE:
 		if (mthing->options & MTF_EXTRA)
diff --git a/src/p_setup.c b/src/p_setup.c
index d79bd328a..75923051b 100644
--- a/src/p_setup.c
+++ b/src/p_setup.c
@@ -2781,6 +2781,9 @@ static void P_ConvertBinaryMap(void)
 		case 762:
 			mapthings[i].tag = mapthings[i].angle;
 			break;
+		case 780:
+			mapthings[i].tag = mapthings[i].extrainfo;
+			break;
 		default:
 			break;
 		}

From 3775e6447e32b5ff1dc0869aeee93222d1118c99 Mon Sep 17 00:00:00 2001
From: MascaraSnake <jonassauer27@gmail.com>
Date: Sat, 25 Jan 2020 15:37:23 +0100
Subject: [PATCH 5/5] Skyboxes: Remove obsolete modulo operation

---
 src/p_mobj.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/p_mobj.c b/src/p_mobj.c
index 107a56818..c2b6c65a1 100644
--- a/src/p_mobj.c
+++ b/src/p_mobj.c
@@ -12650,9 +12650,9 @@ static boolean P_SetupSpawnedMapThing(mapthing_t *mthing, mobj_t *mobj, boolean
 		}
 
 		if (mthing->options & MTF_OBJECTSPECIAL)
-			skyboxcenterpnts[mthing->tag % 16] = mobj;
+			skyboxcenterpnts[mthing->tag] = mobj;
 		else
-			skyboxviewpnts[mthing->tag % 16] = mobj;
+			skyboxviewpnts[mthing->tag] = mobj;
 		break;
 	case MT_EGGSTATUE:
 		if (mthing->options & MTF_EXTRA)