From 29d5af61c1f7cff83e5e59117ff6ceef00d698c1 Mon Sep 17 00:00:00 2001
From: toasterbabe <rollerorbital@gmail.com>
Date: Thu, 20 Apr 2017 13:15:32 +0100
Subject: [PATCH] Correcting gamma to match base SRB2.

---
 src/v_video.c | 34 +++++++++++++++++++++++++++++-----
 1 file changed, 29 insertions(+), 5 deletions(-)

diff --git a/src/v_video.c b/src/v_video.c
index 9e6a2745ee..3c025d306b 100644
--- a/src/v_video.c
+++ b/src/v_video.c
@@ -118,7 +118,6 @@ http://http.developer.nvidia.com/GPUGems2/gpugems2_chapter24.html
 Please check it out if you're trying to maintain this.
 toast 18/04/17
 */
-
 float Cubepal[2][2][2][3];
 
 // returns whether to apply cube, selectively avoiding expensive operations
@@ -174,7 +173,7 @@ static boolean InitCube(void)
 		|| diffcons(cv_ggamma)
 		|| diffcons(cv_cgamma)
 		|| diffcons(cv_bgamma)
-		|| diffcons(cv_mgamma))
+		|| diffcons(cv_mgamma)) // set the gamma'd/hued positions (saturation is done later)
 	{
 		float mod, tempgammamul, tempgammaoffs;
 
@@ -304,6 +303,31 @@ static boolean InitCube(void)
 	return true;
 }
 
+/*
+So it turns out that the way gamma was implemented previously, the default
+colour profile of the game was messed up. Since this bad decision has been
+around for a long time, and the intent is to keep the base game looking the
+same, I'm not gonna be the one to remove this base modification.
+toast 20/04/17
+*/
+const UINT8 correctiontable[256] =
+	{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,
+	17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,
+	33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,
+	49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,
+	65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,
+	81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,
+	97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,
+	113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,
+	128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,
+	144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,
+	160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,
+	176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,
+	192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,
+	208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,
+	224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,
+	240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255};
+
 // keep a copy of the palette so that we can get the RGB value for a color index at any time.
 static void LoadPalette(const char *lumpname)
 {
@@ -319,9 +343,9 @@ static void LoadPalette(const char *lumpname)
 	pal = W_CacheLumpNum(lumpnum, PU_CACHE);
 	for (i = 0; i < palsize; i++)
 	{
-		pLocalPalette[i].s.red = *pal++;
-		pLocalPalette[i].s.green = *pal++;
-		pLocalPalette[i].s.blue = *pal++;
+		pLocalPalette[i].s.red = correctiontable[*pal++];
+		pLocalPalette[i].s.green = correctiontable[*pal++];
+		pLocalPalette[i].s.blue = correctiontable[*pal++];
 		pLocalPalette[i].s.alpha = 0xFF;
 
 		// lerp of colour cubing!
-- 
GitLab