From 9180b86e9e1300bb64a35fd9c366fc47ff7ad4a3 Mon Sep 17 00:00:00 2001
From: MascaraSnake <jonassauer27@gmail.com>
Date: Sun, 19 Sep 2021 16:12:06 +0200
Subject: [PATCH] No more unnecessary light level twiddling

---
 src/p_lights.c |  9 +++++++
 src/p_spec.c   | 68 +++-----------------------------------------------
 2 files changed, 13 insertions(+), 64 deletions(-)

diff --git a/src/p_lights.c b/src/p_lights.c
index 4775597dfc..aae26ecc49 100644
--- a/src/p_lights.c
+++ b/src/p_lights.c
@@ -96,6 +96,9 @@ fireflicker_t *P_SpawnAdjustableFireFlicker(sector_t *sector, INT16 lighta, INT1
 			flick->maxlight++;
 	}
 
+	// Make sure the starting light level is in range.
+	sector->lightlevel = max((INT16)flick->minlight, min((INT16)flick->maxlight, sector->lightlevel));
+
 	return flick;
 }
 
@@ -224,6 +227,9 @@ strobe_t *P_SpawnAdjustableStrobeFlash(sector_t *sector, INT16 lighta, INT16 lig
 	else
 		flash->count = 1;
 
+	// Make sure the starting light level is in range.
+	sector->lightlevel = max((INT16)flash->minlight, min((INT16)flash->maxlight, sector->lightlevel));
+
 	sector->lightingdata = flash;
 	return flash;
 }
@@ -295,6 +301,9 @@ glow_t *P_SpawnAdjustableGlowingLight(sector_t *sector, INT16 lighta, INT16 ligh
 		g->speed = (g->maxlight - g->minlight)/2;
 	}
 
+	// Make sure the starting light level is in range.
+	sector->lightlevel = max((INT16)g->minlight, min((INT16)g->maxlight, sector->lightlevel));
+
 	sector->lightingdata = g;
 
 	return g;
diff --git a/src/p_spec.c b/src/p_spec.c
index 833a67290f..17aa767eb7 100644
--- a/src/p_spec.c
+++ b/src/p_spec.c
@@ -2513,23 +2513,8 @@ static void P_ProcessLineSpecial(line_t *line, mobj_t *mo, sector_t *callsec)
 				if (line->flags & ML_NOCLIMB && line->backsector)
 				{
 					// Use front sector for min light level, back sector for max.
-					// This is tricky because P_SpawnAdjustableFireFlicker expects
-					// the maxsector (second argument) to also be the target
-					// sector, so we have to do some light level twiddling.
-					fireflicker_t *flick;
-					INT16 reallightlevel = sectors[secnum].lightlevel;
-					sectors[secnum].lightlevel = line->backsector->lightlevel;
-
-					flick = P_SpawnAdjustableFireFlicker(&sectors[secnum], line->frontsector->lightlevel, sectors[secnum].lightlevel,
+					P_SpawnAdjustableFireFlicker(&sectors[secnum], line->frontsector->lightlevel, line->backsector->lightlevel,
 						P_AproxDistance(line->dx, line->dy)>>FRACBITS);
-
-					// Make sure the starting light level is in range.
-					if (reallightlevel < flick->minlight)
-						reallightlevel = (INT16)flick->minlight;
-					else if (reallightlevel > flick->maxlight)
-						reallightlevel = (INT16)flick->maxlight;
-
-					sectors[secnum].lightlevel = reallightlevel;
 				}
 				else
 				{
@@ -2547,23 +2532,8 @@ static void P_ProcessLineSpecial(line_t *line, mobj_t *mo, sector_t *callsec)
 				if (line->flags & ML_NOCLIMB && line->backsector)
 				{
 					// Use front sector for min light level, back sector for max.
-					// This is tricky because P_SpawnAdjustableGlowingLight expects
-					// the maxsector (second argument) to also be the target
-					// sector, so we have to do some light level twiddling.
-					glow_t *glow;
-					INT16 reallightlevel = sectors[secnum].lightlevel;
-					sectors[secnum].lightlevel = line->backsector->lightlevel;
-
-					glow = P_SpawnAdjustableGlowingLight(&sectors[secnum], line->frontsector->lightlevel, sectors[secnum].lightlevel,
+					P_SpawnAdjustableGlowingLight(&sectors[secnum], line->frontsector->lightlevel, line->backsector->lightlevel,
 						P_AproxDistance(line->dx, line->dy)>>FRACBITS);
-
-					// Make sure the starting light level is in range.
-					if (reallightlevel < glow->minlight)
-						reallightlevel = (INT16)glow->minlight;
-					else if (reallightlevel > glow->maxlight)
-						reallightlevel = (INT16)glow->maxlight;
-
-					sectors[secnum].lightlevel = reallightlevel;
 				}
 				else
 				{
@@ -2581,23 +2551,8 @@ static void P_ProcessLineSpecial(line_t *line, mobj_t *mo, sector_t *callsec)
 				if (line->flags & ML_NOCLIMB && line->backsector)
 				{
 					// Use front sector for min light level, back sector for max.
-					// This is tricky because P_SpawnAdjustableGlowingLight expects
-					// the maxsector (second argument) to also be the target
-					// sector, so we have to do some light level twiddling.
-					strobe_t *flash;
-					INT16 reallightlevel = sectors[secnum].lightlevel;
-					sectors[secnum].lightlevel = line->backsector->lightlevel;
-
-					flash = P_SpawnAdjustableStrobeFlash(&sectors[secnum], line->frontsector->lightlevel, sectors[secnum].lightlevel,
+					P_SpawnAdjustableStrobeFlash(&sectors[secnum], line->frontsector->lightlevel, line->backsector->lightlevel,
 						abs(line->dx)>>FRACBITS, abs(line->dy)>>FRACBITS, false);
-
-					// Make sure the starting light level is in range.
-					if (reallightlevel < flash->minlight)
-						reallightlevel = (INT16)flash->minlight;
-					else if (reallightlevel > flash->maxlight)
-						reallightlevel = (INT16)flash->maxlight;
-
-					sectors[secnum].lightlevel = reallightlevel;
 				}
 				else
 				{
@@ -2615,23 +2570,8 @@ static void P_ProcessLineSpecial(line_t *line, mobj_t *mo, sector_t *callsec)
 				if (line->flags & ML_NOCLIMB && line->backsector)
 				{
 					// Use front sector for min light level, back sector for max.
-					// This is tricky because P_SpawnAdjustableGlowingLight expects
-					// the maxsector (second argument) to also be the target
-					// sector, so we have to do some light level twiddling.
-					strobe_t *flash;
-					INT16 reallightlevel = sectors[secnum].lightlevel;
-					sectors[secnum].lightlevel = line->backsector->lightlevel;
-
-					flash = P_SpawnAdjustableStrobeFlash(&sectors[secnum], line->frontsector->lightlevel, sectors[secnum].lightlevel,
+					P_SpawnAdjustableStrobeFlash(&sectors[secnum], line->frontsector->lightlevel, line->backsector->lightlevel,
 						abs(line->dx)>>FRACBITS, abs(line->dy)>>FRACBITS, true);
-
-					// Make sure the starting light level is in range.
-					if (reallightlevel < flash->minlight)
-						reallightlevel = (INT16)flash->minlight;
-					else if (reallightlevel > flash->maxlight)
-						reallightlevel = (INT16)flash->maxlight;
-
-					sectors[secnum].lightlevel = reallightlevel;
 				}
 				else
 				{
-- 
GitLab