From 7b830fbddf7c6d4b3e7815e9b28914d5c815664c Mon Sep 17 00:00:00 2001
From: MascaraSnake <jonassauer27@gmail.com>
Date: Thu, 30 Dec 2021 19:28:01 +0100
Subject: [PATCH] Add "change sector's gravity" linedef executor in UDMF to
 replace linedef type 1

---
 extras/conf/udb/Includes/SRB222_linedefs.cfg | 37 ++++++++++++++++++++
 src/p_spec.c                                 | 30 ++++++++++++++++
 src/p_spec.h                                 |  7 ++++
 3 files changed, 74 insertions(+)

diff --git a/extras/conf/udb/Includes/SRB222_linedefs.cfg b/extras/conf/udb/Includes/SRB222_linedefs.cfg
index e8ec7de2b..e2e1d187a 100644
--- a/extras/conf/udb/Includes/SRB222_linedefs.cfg
+++ b/extras/conf/udb/Includes/SRB222_linedefs.cfg
@@ -3677,6 +3677,43 @@ udmf
 				enum = "setadd";
 			}
 		}
+
+		469
+		{
+			title = "Change Tagged Sector's Gravity";
+			prefix = "(469)";
+			arg0
+			{
+				title = "Target sector tag";
+				type = 13;
+			}
+			arg1
+			{
+				title = "Set/Multiply?";
+				type = 11;
+				enum
+				{
+					0 = "Set";
+					1 = "Multiply";
+				}
+			}
+			arg2
+			{
+				title = "Flip flag";
+				type = 11;
+				enum
+				{
+					0 = "Don't change";
+					1 = "Set";
+					2 = "Remove";
+				}
+			}
+			stringarg0
+			{
+				title = "Gravity value";
+				type = 2;
+			}
+		}
 	}
 
 	linedefexecplane
diff --git a/src/p_spec.c b/src/p_spec.c
index 604921445..2e6094ef2 100644
--- a/src/p_spec.c
+++ b/src/p_spec.c
@@ -3801,6 +3801,33 @@ static void P_ProcessLineSpecial(line_t *line, mobj_t *mo, sector_t *callsec)
 		}
 		break;
 
+		case 469: // Change sector gravity
+		{
+			fixed_t gravityvalue;
+
+			if (!udmf)
+				break;
+
+			if (!line->stringargs[0])
+				break;
+
+			gravityvalue = FloatToFixed(atof(line->stringargs[0]));
+
+			TAG_ITER_SECTORS(line->args[0], secnum)
+			{
+				if (line->args[1])
+					sectors[secnum].gravity = FixedMul(sectors[secnum].gravity, gravityvalue);
+				else
+					sectors[secnum].gravity = gravityvalue;
+
+				if (line->args[2] == TMF_ADD)
+					sectors[secnum].flags |= MSF_GRAVITYFLIP;
+				else if (line->args[2] == TMF_REMOVE)
+					sectors[secnum].flags &= ~MSF_GRAVITYFLIP;
+			}
+		}
+		break;
+
 		case 480: // Polyobj_DoorSlide
 		case 481: // Polyobj_DoorSwing
 			PolyDoor(line);
@@ -6112,6 +6139,9 @@ void P_SpawnSpecials(boolean fromnetsave)
 			ffloortype_e ffloorflags;
 
 			case 1: // Definable gravity per sector
+				if (udmf)
+					break;
+
 				sec = sides[*lines[i].sidenum].sector - sectors;
 				TAG_ITER_SECTORS(tag, s)
 				{
diff --git a/src/p_spec.h b/src/p_spec.h
index 82f858a05..c1f25b3d6 100644
--- a/src/p_spec.h
+++ b/src/p_spec.h
@@ -412,6 +412,13 @@ typedef enum
 	//TMP_FREEZETHINKERS = 1<<6,
 } textmappromptflags_t;
 
+typedef enum
+{
+	TMF_NOCHANGE = 0,
+	TMF_ADD      = 1,
+	TMF_REMOVE   = 2,
+} textmapsetflagflags_t;
+
 typedef enum
 {
 	TMSD_FRONT = 0,
-- 
GitLab