From c39a37f89aac0bc2c0fe337e7815a4877712a9f0 Mon Sep 17 00:00:00 2001
From: Rachael Alexanderson <eruanna@drdteam.org>
Date: Sun, 5 Mar 2017 09:58:07 -0500
Subject: [PATCH] - implemented "hazardcolor" and "hazardflash" properties.
 This affects strife's sector damage type that passively builds up over time.
 setting "hazardcolor" changes the gradual blend that is used when palette
 flash is disabled. setting "hazardflash" changes the flashing blend that is
 used when palette flash is turned on.

---
 src/g_level.cpp     |  2 ++
 src/g_level.h       |  2 ++
 src/g_levellocals.h |  3 +++
 src/g_mapinfo.cpp   | 16 ++++++++++++++++
 src/v_blend.cpp     | 11 +++++++++--
 5 files changed, 32 insertions(+), 2 deletions(-)

diff --git a/src/g_level.cpp b/src/g_level.cpp
index b0de51b43..427e17278 100644
--- a/src/g_level.cpp
+++ b/src/g_level.cpp
@@ -1462,6 +1462,8 @@ void G_InitLevelLocals ()
 	level.NextMap = info->NextMap;
 	level.NextSecretMap = info->NextSecretMap;
 	level.F1Pic = info->F1Pic;
+	level.hazardcolor = info->hazardcolor;
+	level.hazardflash = info->hazardflash;
 
 	compatflags.Callback();
 	compatflags2.Callback();
diff --git a/src/g_level.h b/src/g_level.h
index 06a91259a..854e53e0d 100644
--- a/src/g_level.h
+++ b/src/g_level.h
@@ -315,6 +315,8 @@ struct level_info_t
 	FName		Intermission;
 	FName		deathsequence;
 	FName		slideshow;
+	DWORD		hazardcolor;
+	DWORD		hazardflash;
 
 	// Redirection: If any player is carrying the specified item, then
 	// you go to the RedirectMap instead of this one.
diff --git a/src/g_levellocals.h b/src/g_levellocals.h
index 1b3d1dba2..9c77a64f9 100644
--- a/src/g_levellocals.h
+++ b/src/g_levellocals.h
@@ -43,6 +43,9 @@ struct FLevelLocals
 	DWORD		fadeto;					// The color the palette fades to (usually black)
 	DWORD		outsidefog;				// The fog for sectors with sky ceilings
 
+	DWORD		hazardcolor;			// what color strife hazard blends the screen color as
+	DWORD		hazardflash;			// what color strife hazard flashes the screen color as
+
 	FString		Music;
 	int			musicorder;
 	int			cdtrack;
diff --git a/src/g_mapinfo.cpp b/src/g_mapinfo.cpp
index 7a7960115..d928c789d 100644
--- a/src/g_mapinfo.cpp
+++ b/src/g_mapinfo.cpp
@@ -273,6 +273,8 @@ void level_info_t::Reset()
 	SndSeq = "";
 	BorderTexture = "";
 	teamdamage = 0.f;
+	hazardcolor = 0xff004200;
+	hazardflash = 0xff00ff00;
 	specialactions.Clear();
 	DefaultEnvironment = 0;
 	PrecacheSounds.Clear();
@@ -1200,6 +1202,20 @@ DEFINE_MAP_OPTION(defaultenvironment, false)
 	info->DefaultEnvironment = id;
 }
 
+DEFINE_MAP_OPTION(hazardcolor, true)
+{
+	parse.ParseAssign();
+	parse.sc.MustGetString();
+	info->hazardcolor = V_GetColor(NULL, parse.sc);
+}
+
+DEFINE_MAP_OPTION(hazardflash, true)
+{
+	parse.ParseAssign();
+	parse.sc.MustGetString();
+	info->hazardflash = V_GetColor(NULL, parse.sc);
+}
+
 
 //==========================================================================
 //
diff --git a/src/v_blend.cpp b/src/v_blend.cpp
index 41e6fe7ff..874e81ca1 100644
--- a/src/v_blend.cpp
+++ b/src/v_blend.cpp
@@ -51,6 +51,7 @@
 #include "colormatcher.h"
 #include "v_palette.h"
 #include "d_player.h"
+#include "g_levellocals.h"
 
 CVAR( Float, blood_fade_scalar, 1.0f, CVAR_ARCHIVE )	// [SP] Pulled from Skulltag - changed default from 0.5 to 1.0
 CVAR( Float, pickup_fade_scalar, 1.0f, CVAR_ARCHIVE )	// [SP] Uses same logic as blood_fade_scalar except for pickups
@@ -168,13 +169,19 @@ void V_AddPlayerBlend (player_t *CPlayer, float blend[4], float maxinvalpha, int
 		{
 			if (CPlayer->hazardcount > 16*TICRATE || (CPlayer->hazardcount & 8))
 			{
-				V_AddBlend (0.f, 1.f, 0.f, 0.125f, blend);
+				float r = ((level.hazardflash & 0xff0000) >> 16) / 255.f;
+				float g = ((level.hazardflash & 0xff00) >> 8) / 255.f;
+				float b = ((level.hazardflash & 0xff)) / 255.f;
+				V_AddBlend (r, g, b, 0.125f, blend);
 			}
 		}
 		else
 		{
 			cnt= MIN(CPlayer->hazardcount/8, 64);
-			V_AddBlend (0.f, 0.2571f, 0.f, cnt/93.2571428571f, blend);
+			float r = ((level.hazardcolor & 0xff0000) >> 16) / 255.f;
+			float g = ((level.hazardcolor & 0xff00) >> 8) / 255.f;
+			float b = ((level.hazardcolor & 0xff)) / 255.f;
+			V_AddBlend (r, g, b, cnt/93.2571428571f, blend);
 		}
 	}