From cc6820187cee5b7b351dc4fc2292bc7b16e760e0 Mon Sep 17 00:00:00 2001
From: MascaraSnake <jonassauer27@gmail.com>
Date: Fri, 12 Jun 2020 10:17:52 +0200
Subject: [PATCH] Handle splat flag for laser FOFs

---
 extras/conf/udb/Includes/SRB222_linedefs.cfg | 10 +++++++---
 src/p_setup.c                                |  9 ++++++++-
 src/p_spec.c                                 |  7 +++++--
 src/p_spec.h                                 |  6 ++++++
 4 files changed, 26 insertions(+), 6 deletions(-)

diff --git a/extras/conf/udb/Includes/SRB222_linedefs.cfg b/extras/conf/udb/Includes/SRB222_linedefs.cfg
index 448e98dc77..84ff063859 100644
--- a/extras/conf/udb/Includes/SRB222_linedefs.cfg
+++ b/extras/conf/udb/Includes/SRB222_linedefs.cfg
@@ -2152,9 +2152,13 @@ udmf
 			}
 			arg2
 			{
-				title = "Damage bosses?";
-				type = 11;
-				enum = "yesno";
+				title = "Flags";
+				type = 12;
+				enum
+				{
+					1 = "Don't damage bosses";
+					2 = "Cut cyan flat pixels";
+				}
 			}
 		}
 
diff --git a/src/p_setup.c b/src/p_setup.c
index c72887c7a8..2ae01f8693 100644
--- a/src/p_setup.c
+++ b/src/p_setup.c
@@ -3373,12 +3373,19 @@ static void P_ConvertBinaryMap(void)
 			break;
 		case 258: //FOF: Laser
 			lines[i].args[0] = lines[i].tag;
+
+			//Alpha
 			if (sides[lines[i].sidenum[0]].toptexture > 0)
 				lines[i].args[1] = sides[lines[i].sidenum[0]].toptexture;
 			else
 				lines[i].args[1] = 128;
+
+			//Flags
 			if (lines[i].flags & ML_EFFECT1)
-				lines[i].args[2] = 1;
+				lines[i].args[2] = TMFL_NOBOSSES;
+			if (lines[i].flags & ML_EFFECT6)
+				lines[i].args[2] = TMFL_SPLAT;
+
 			break;
 		case 259: //Custom FOF
 			if (lines[i].sidenum[1] == 0xffff)
diff --git a/src/p_spec.c b/src/p_spec.c
index 214e7e1c08..66ad1893a8 100644
--- a/src/p_spec.c
+++ b/src/p_spec.c
@@ -6927,8 +6927,11 @@ void P_SpawnSpecials(boolean fromnetsave)
 				break;
 
 			case 258: // Laser block
-				P_AddLaserThinker(lines[i].args[0], lines + i, !!(lines[i].args[2]));
-				P_AddFakeFloorsByLine(i, lines[i].args[1], FF_EXISTS|FF_RENDERALL|FF_NOSHADE|FF_EXTRA|FF_CUTEXTRA|FF_TRANSLUCENT, secthinkers);
+				ffloorflags = FF_EXISTS|FF_RENDERALL|FF_NOSHADE|FF_EXTRA|FF_CUTEXTRA|FF_TRANSLUCENT;
+				P_AddLaserThinker(lines[i].args[0], lines + i, !!(lines[i].args[2] & TMFL_NOBOSSES));
+				if (lines[i].args[2] & TMFL_SPLAT)
+					ffloorflags |= FF_SPLAT;
+				P_AddFakeFloorsByLine(i, lines[i].args[1], ffloorflags, secthinkers);
 				break;
 
 			case 259: // Custom FOF
diff --git a/src/p_spec.h b/src/p_spec.h
index 59aeb9f4d8..661b747387 100644
--- a/src/p_spec.h
+++ b/src/p_spec.h
@@ -97,6 +97,12 @@ typedef enum
 	TMFB_ONLYBOTTOM  = 1<<2,
 } textmapfofbustflags_t;
 
+typedef enum
+{
+	TMFL_NOBOSSES = 1,
+	TMFL_SPLAT    = 1<<1,
+} textmapfoflaserflags_t;
+
 // GETSECSPECIAL (specialval, section)
 //
 // Pulls out the special # from a particular section.
-- 
GitLab