From c1c7607cb0a1e359cdce4db3cd252c1004e100ee Mon Sep 17 00:00:00 2001
From: spherallic <spherallic@gmail.com>
Date: Thu, 2 Dec 2021 01:52:45 +0100
Subject: [PATCH] Add toggle for linedef action 401 to not change the ceiling
 texture.

---
 extras/conf/SRB2-22.cfg |  7 ++++---
 src/p_ceilng.c          | 11 ++++++++---
 2 files changed, 12 insertions(+), 6 deletions(-)

diff --git a/extras/conf/SRB2-22.cfg b/extras/conf/SRB2-22.cfg
index 0ca8a67155..4ed68e1ca4 100644
--- a/extras/conf/SRB2-22.cfg
+++ b/extras/conf/SRB2-22.cfg
@@ -1992,7 +1992,7 @@ linedeftypes
 			title = "Set Tagged Sector's Floor Height/Texture";
 			prefix = "(400)";
 			flags8text = "[3] Set delay by backside sector";
-			flags64text = "[6] Keep floor flat";
+			flags64text = "[6] Don't change floor texture";
 		}
 
 		401
@@ -2000,6 +2000,7 @@ linedeftypes
 			title = "Set Tagged Sector's Ceiling Height/Texture";
 			prefix = "(401)";
 			flags8text = "[3] Set delay by backside sector";
+			flags64text = "[6] Don't change ceiling texture";
 		}
 
 		402
@@ -2090,7 +2091,7 @@ linedeftypes
 			prefix = "(403)";
 			flags2text = "[1] Trigger linedef executor";
 			flags8text = "[3] Set delay by backside sector";
-			flags64text = "[6] Change floor flat";
+			flags64text = "[6] Change floor texture";
 		}
 
 		404
@@ -2099,7 +2100,7 @@ linedeftypes
 			prefix = "(404)";
 			flags2text = "[1] Trigger linedef executor";
 			flags8text = "[3] Set delay by backside sector";
-			flags64text = "[6] Change ceiling flat";
+			flags64text = "[6] Change ceiling texture";
 		}
 
 		405
diff --git a/src/p_ceilng.c b/src/p_ceilng.c
index 43f3cc1d52..e28f9b5b10 100644
--- a/src/p_ceilng.c
+++ b/src/p_ceilng.c
@@ -67,7 +67,8 @@ void T_MoveCeiling(ceiling_t *ceiling)
 				switch (ceiling->type)
 				{
 					case instantMoveCeilingByFrontSector:
-						ceiling->sector->ceilingpic = ceiling->texture;
+						if (ceiling->texture > -1)
+							ceiling->sector->ceilingpic = ceiling->texture;
 						ceiling->sector->ceilingdata = NULL;
 						ceiling->sector->ceilspeed = 0;
 						P_RemoveThinker(&ceiling->thinker);
@@ -186,7 +187,8 @@ void T_MoveCeiling(ceiling_t *ceiling)
 						break;
 
 					case instantMoveCeilingByFrontSector:
-						ceiling->sector->ceilingpic = ceiling->texture;
+						if (ceiling->texture > -1)
+							ceiling->sector->ceilingpic = ceiling->texture;
 						ceiling->sector->ceilingdata = NULL;
 						ceiling->sector->ceilspeed = 0;
 						P_RemoveThinker(&ceiling->thinker);
@@ -512,7 +514,10 @@ INT32 EV_DoCeiling(line_t *line, ceiling_e type)
 					ceiling->direction = -1;
 					ceiling->bottomheight = line->frontsector->ceilingheight;
 				}
-				ceiling->texture = line->frontsector->ceilingpic;
+				if (line->flags & ML_NOCLIMB)
+					ceiling->texture = -1;
+				else
+					ceiling->texture = line->frontsector->ceilingpic;
 				break;
 
 			case moveCeilingByFrontTexture:
-- 
GitLab