diff --git a/src/console.c b/src/console.c
index 1c864039686de9feebebaf30f0c98af2d4d6787d..fe447b10ab7543dc5bdce8939d314c7c85a48531 100644
--- a/src/console.c
+++ b/src/console.c
@@ -249,7 +249,7 @@ void CON_ReSetupBackColormap(UINT16 num)
 		j = pal[i] + pal[i+1] + pal[i+2];
 		cwhitemap[k] = (UINT8)(15 - (j>>6));
 		corangemap[k] = (UINT8)(63 - (j>>6));
-		cbluemap[k] = (UINT8)(143 - (j>>6));
+		cbluemap[k] = (UINT8)(159 - (j>>6));
 		cgreenmap[k] = (UINT8)(111 - (j>>6));
 		cgraymap[k] = (UINT8)(31 - (j>>6));
 		credmap[k] = (UINT8)(47 - (j>>6));
@@ -284,7 +284,7 @@ static void CON_SetupBackColormap(void)
 		j = pal[i] + pal[i+1] + pal[i+2];
 		cwhitemap[k] = (UINT8)(15 - (j>>6));
 		corangemap[k] = (UINT8)(63 - (j>>6));
-		cbluemap[k] = (UINT8)(143 - (j>>6));
+		cbluemap[k] = (UINT8)(159 - (j>>6));
 		cgreenmap[k] = (UINT8)(111 - (j>>6));
 		cgraymap[k] = (UINT8)(31 - (j>>6));
 		credmap[k] = (UINT8)(47 - (j>>6));
@@ -308,15 +308,15 @@ static void CON_SetupBackColormap(void)
 
 	yellowmap[3] = (UINT8)73;
 	yellowmap[9] = (UINT8)66;
-	purplemap[3] = (UINT8)168;
-	purplemap[9] = (UINT8)170;
+	purplemap[3] = (UINT8)184;
+	purplemap[9] = (UINT8)186;
 	lgreenmap[3] = (UINT8)102;
 	lgreenmap[9] = (UINT8)106;
-	bluemap[3]   = (UINT8)131;
-	bluemap[9]   = (UINT8)142;
+	bluemap[3]   = (UINT8)147;
+	bluemap[9]   = (UINT8)158;
 	graymap[3]   = (UINT8)10;
 	graymap[9]   = (UINT8)15;
-	redmap[3]    = (UINT8)194;
+	redmap[3]    = (UINT8)210;
 	redmap[9]    = (UINT8)32;
 	orangemap[3] = (UINT8)52;
 	orangemap[9] = (UINT8)57;
@@ -1472,3 +1472,4 @@ void CON_Drawer(void)
 	else if (gamestate == GS_LEVEL || gamestate == GS_INTERMISSION || gamestate == GS_CUTSCENE || gamestate == GS_CREDITS)
 		CON_DrawHudlines();
 }
+
diff --git a/src/d_main.c b/src/d_main.c
index a959a86328e09d4a501c3c9b2eea52e197ed478d..709cbea7be31f44bae01076eb3cd72963cc6cdf1 100644
--- a/src/d_main.c
+++ b/src/d_main.c
@@ -1121,10 +1121,10 @@ void D_SRB2Main(void)
 #if 1 // md5s last updated 12/14/14
 
 	// Check MD5s of autoloaded files
-	W_VerifyFileMD5(0, ASSET_HASH_SRB2_SRB); // srb2.srb/srb2.wad
-	W_VerifyFileMD5(1, ASSET_HASH_ZONES_DTA); // zones.dta
-	W_VerifyFileMD5(2, ASSET_HASH_PLAYER_DTA); // player.dta
-	W_VerifyFileMD5(3, ASSET_HASH_RINGS_DTA); // rings.dta
+	//W_VerifyFileMD5(0, ASSET_HASH_SRB2_SRB); // srb2.srb/srb2.wad
+	//W_VerifyFileMD5(1, ASSET_HASH_ZONES_DTA); // zones.dta
+	//W_VerifyFileMD5(2, ASSET_HASH_PLAYER_DTA); // player.dta
+	//W_VerifyFileMD5(3, ASSET_HASH_RINGS_DTA); // rings.dta
 	//W_VerifyFileMD5(4, "0c66790502e648bfce90fdc5bb15722e"); // patch.dta
 	// don't check music.dta because people like to modify it, and it doesn't matter if they do
 	// ...except it does if they slip maps in there, and that's what W_VerifyNMUSlumps is for.
diff --git a/src/dehacked.c b/src/dehacked.c
index 760ae84b3c20cd55b325cfe7c5c3c0c345f75b50..b22f7b867eb1f62957e5eb0d2df7b03a954f1ed0 100644
--- a/src/dehacked.c
+++ b/src/dehacked.c
@@ -7309,30 +7309,31 @@ static const char *COLOR_ENUMS[] = {
 	"SILVER",   	// SKINCOLOR_SILVER
 	"GREY",	    	// SKINCOLOR_GREY
 	"BLACK",    	// SKINCOLOR_BLACK
-	"CYAN",     	// SKINCOLOR_CYAN
-	"AQUA",     	// SKINCOLOR_AQUA
-	"TEAL",     	// SKINCOLOR_TEAL
-	"AZURE",    	// SKINCOLOR_AZURE
-	"BLUE",     	// SKINCOLOR_BLUE
-	"PEACH",    	// SKINCOLOR_PEACH
-	"TAN",      	// SKINCOLOR_TAN
-	"PINK",     	// SKINCOLOR_PINK
-	"ROSY",     	// SKINCOLOR_ROSY
-	"LAVENDER", 	// SKINCOLOR_LAVENDER
-	"PURPLE",   	// SKINCOLOR_PURPLE
-	"MAGENTA",   	// SKINCOLOR_MAGENTA
-	"ORANGE",   	// SKINCOLOR_ORANGE
-	"RUST",     	// SKINCOLOR_RUST
 	"BEIGE",    	// SKINCOLOR_BEIGE
+	"PEACH",    	// SKINCOLOR_PEACH
 	"BROWN",    	// SKINCOLOR_BROWN
 	"RED",      	// SKINCOLOR_RED
 	"CRIMSON",     	// SKINCOLOR_CRIMSON
-	"EMERALD",  	// SKINCOLOR_EMERALD
-	"GREEN",    	// SKINCOLOR_GREEN
-	"ZIM",      	// SKINCOLOR_ZIM
-	"PERIDOT",    	// SKINCOLOR_PERIDOT
+	"ORANGE",   	// SKINCOLOR_ORANGE
+	"RUST",     	// SKINCOLOR_RUST
+	"GOLD",      	// SKINCOLOR_GOLD
 	"YELLOW",   	// SKINCOLOR_YELLOW
-	"GOLD"      	// SKINCOLOR_GOLD
+	"TAN",      	// SKINCOLOR_TAN
+	"MOSS",      	// SKINCOLOR_MOSS
+	"PERIDOT",    	// SKINCOLOR_PERIDOT
+	"GREEN",    	// SKINCOLOR_GREEN
+	"EMERALD",  	// SKINCOLOR_EMERALD
+	"AQUA",     	// SKINCOLOR_AQUA
+	"TEAL",     	// SKINCOLOR_TEAL
+	"CYAN",     	// SKINCOLOR_CYAN
+	"BLUE",     	// SKINCOLOR_BLUE
+	"AZURE",    	// SKINCOLOR_AZURE
+	"PASTEL",		// SKINCOLOR_PASTEL
+	"PURPLE",   	// SKINCOLOR_PURPLE
+	"LAVENDER", 	// SKINCOLOR_LAVENDER
+	"MAGENTA",   	// SKINCOLOR_MAGENTA
+	"PINK",     	// SKINCOLOR_PINK
+	"ROSY"     	// SKINCOLOR_ROSY
 };
 
 static const char *const POWERS_LIST[] = {
@@ -8769,3 +8770,4 @@ void LUA_SetActionByName(void *state, const char *actiontocompare)
 }
 
 #endif // HAVE_BLUA
+
diff --git a/src/doomdef.h b/src/doomdef.h
index d6af0f1a0a5237efc814c9c9f815dfa05ee285ae..88fc206a2e0e9c51f1bea463256e8752c2fa5973 100644
--- a/src/doomdef.h
+++ b/src/doomdef.h
@@ -230,30 +230,31 @@ typedef enum
 	SKINCOLOR_SILVER,
 	SKINCOLOR_GREY,
 	SKINCOLOR_BLACK,
-	SKINCOLOR_CYAN,
-	SKINCOLOR_AQUA,
-	SKINCOLOR_TEAL,
-	SKINCOLOR_AZURE,
-	SKINCOLOR_BLUE,
-	SKINCOLOR_PEACH,
-	SKINCOLOR_TAN,
-	SKINCOLOR_PINK,
-	SKINCOLOR_ROSY,
-	SKINCOLOR_LAVENDER,
-	SKINCOLOR_PURPLE,
-	SKINCOLOR_MAGENTA,
-	SKINCOLOR_ORANGE,
-	SKINCOLOR_RUST,
 	SKINCOLOR_BEIGE,
+	SKINCOLOR_PEACH,
 	SKINCOLOR_BROWN,
 	SKINCOLOR_RED,
 	SKINCOLOR_CRIMSON,
-	SKINCOLOR_EMERALD,
-	SKINCOLOR_GREEN,
-	SKINCOLOR_ZIM,
-	SKINCOLOR_PERIDOT,
-	SKINCOLOR_YELLOW,
+	SKINCOLOR_ORANGE,
+	SKINCOLOR_RUST,
 	SKINCOLOR_GOLD,
+	SKINCOLOR_YELLOW,
+	SKINCOLOR_TAN,
+	SKINCOLOR_MOSS,
+	SKINCOLOR_PERIDOT,
+	SKINCOLOR_GREEN,
+	SKINCOLOR_EMERALD,
+	SKINCOLOR_AQUA,
+	SKINCOLOR_TEAL,
+	SKINCOLOR_CYAN,
+	SKINCOLOR_BLUE,
+	SKINCOLOR_AZURE,
+	SKINCOLOR_PASTEL,
+	SKINCOLOR_PURPLE,
+	SKINCOLOR_LAVENDER,
+	SKINCOLOR_MAGENTA,
+	SKINCOLOR_PINK,
+	SKINCOLOR_ROSY,
 
 	// Careful! MAXSKINCOLORS cannot be greater than 0x20!
 	MAXSKINCOLORS,
@@ -498,3 +499,4 @@ extern const char *compdate, *comptime, *comprevision;
 //#define REDSANALOG
 
 #endif // __DOOMDEF__
+
diff --git a/src/hardware/hw_defs.h b/src/hardware/hw_defs.h
index 70d776d9e962c219d3449bdd3db262e6017962db..5a39fead179b76e2a0bf6ec6c13fa34e5f839e14 100644
--- a/src/hardware/hw_defs.h
+++ b/src/hardware/hw_defs.h
@@ -46,8 +46,8 @@ typedef unsigned char   FBOOLEAN;
 #define HWR_PATCHES_CHROMAKEY_COLORINDEX   0
 #define HWR_CHROMAKEY_EQUIVALENTCOLORINDEX 1
 #else
-#define HWR_PATCHES_CHROMAKEY_COLORINDEX   247
-#define HWR_CHROMAKEY_EQUIVALENTCOLORINDEX 220
+#define HWR_PATCHES_CHROMAKEY_COLORINDEX   255
+#define HWR_CHROMAKEY_EQUIVALENTCOLORINDEX 130
 #endif
 
 // the chroma key color shows on border sprites, set it to black
@@ -229,3 +229,4 @@ enum hwdfiltermode
 
 
 #endif //_HWR_DEFS_
+
diff --git a/src/m_menu.c b/src/m_menu.c
index 111be9479fa404fccfc0551af6d40e458a6bf228..f115e9d44a5842153fee4a2285d3a9f12a6c5086 100644
--- a/src/m_menu.c
+++ b/src/m_menu.c
@@ -2820,7 +2820,7 @@ static void M_DrawSlider(INT32 x, INT32 y, const consvar_t *cv)
 void M_DrawTextBox(INT32 x, INT32 y, INT32 width, INT32 boxlines)
 {
 	// Solid color textbox.
-	V_DrawFill(x+5, y+5, width*8+6, boxlines*8+6, 143);
+	V_DrawFill(x+5, y+5, width*8+6, boxlines*8+6, 159);
 	//V_DrawFill(x+8, y+8, width*8, boxlines*8, 31);
 /*
 	patch_t *p;
@@ -7409,3 +7409,4 @@ static void M_HandleFogColor(INT32 choice)
 	}
 }
 #endif
+
diff --git a/src/r_draw.c b/src/r_draw.c
index 81bcc943893fd6ef4bc42b58e097463f615c6a45..420b96c1d134861911eb8ae6ef595a3417bfe2ea 100644
--- a/src/r_draw.c
+++ b/src/r_draw.c
@@ -131,68 +131,70 @@ static UINT8** translationtablecache[MAXSKINS + 4] = {NULL};
 // TODO Callum: Can this be translated?
 const char *Color_Names[MAXSKINCOLORS] =
 {
-	"None",      // SKINCOLOR_NONE
-	"White",     // SKINCOLOR_WHITE
-	"Silver",    // SKINCOLOR_SILVER
-	"Grey",      // SKINCOLOR_GREY
-	"Black",     // SKINCOLOR_BLACK
-	"Cyan",      // SKINCOLOR_CYAN
-	"Aqua",      // SKINCOLOR_AQUAMARINE
-	"Teal",      // SKINCOLOR_TEAL
-	"Azure",     // SKINCOLOR_AZURE
-	"Blue",      // SKINCOLOR_BLUE
-	"Peach",     // SKINCOLOR_PEACH
-	"Tan",       // SKINCOLOR_TAN
-	"Pink",      // SKINCOLOR_PINK
-	"Rosy",      // SKINCOLOR_ROSY
-	"Lavender",  // SKINCOLOR_LAVENDER
-	"Purple",    // SKINCOLOR_PURPLE
-	"Magenta",   // SKINCOLOR_MAGENTA
-	"Orange",    // SKINCOLOR_ORANGE
-	"Rust",      // SKINCOLOR_RUST
-	"Beige",     // SKINCOLOR_BEIGE
-	"Brown",     // SKINCOLOR_BROWN
-	"Red",       // SKINCOLOR_RED
-	"Crimson",   // SKINCOLOR_CRIMSON
-	"Emerald",   // SKINCOLOR_EMERALD
-	"Green",     // SKINCOLOR_GREEN
-	"Zim",       // SKINCOLOR_ZIM
-	"Peridot",   // SKINCOLOR_PERIDOT
-	"Yellow",    // SKINCOLOR_YELLOW
-	"Gold"       // SKINCOLOR_GOLD
+	"None",     	// SKINCOLOR_NONE
+	"White",    	// SKINCOLOR_WHITE
+	"Silver",   	// SKINCOLOR_SILVER
+	"Grey",	    	// SKINCOLOR_GREY
+	"Black",    	// SKINCOLOR_BLACK
+	"Beige",    	// SKINCOLOR_BEIGE
+	"Peach",    	// SKINCOLOR_PEACH
+	"Brown",    	// SKINCOLOR_BROWN
+	"Red",      	// SKINCOLOR_RED
+	"Crimson",     	// SKINCOLOR_CRIMSON
+	"Orange",   	// SKINCOLOR_ORANGE
+	"Rust",     	// SKINCOLOR_RUST
+	"Gold",      	// SKINCOLOR_GOLD
+	"Yellow",   	// SKINCOLOR_YELLOW
+	"Tan",      	// SKINCOLOR_TAN
+	"Moss",      	// SKINCOLOR_MOSS
+	"Peridot",    	// SKINCOLOR_PERIDOT
+	"Green",    	// SKINCOLOR_GREEN
+	"Emerald",  	// SKINCOLOR_EMERALD
+	"Aqua",     	// SKINCOLOR_AQUA
+	"Teal",     	// SKINCOLOR_TEAL
+	"Cyan",     	// SKINCOLOR_CYAN
+	"Blue",     	// SKINCOLOR_BLUE
+	"Azure",    	// SKINCOLOR_AZURE
+	"Pastel",		// SKINCOLOR_PASTEL
+	"Purple",   	// SKINCOLOR_PURPLE
+	"Lavender", 	// SKINCOLOR_LAVENDER
+	"Magenta",   	// SKINCOLOR_MAGENTA
+	"Pink",     	// SKINCOLOR_PINK
+	"Rosy"     	// SKINCOLOR_ROSY
 };
 
 const UINT8 Color_Opposite[MAXSKINCOLORS*2] =
 {
-	SKINCOLOR_NONE,8,   // SKINCOLOR_NONE
-	SKINCOLOR_BLACK,10, // SKINCOLOR_WHITE
-	SKINCOLOR_GREY,4,   // SKINCOLOR_SILVER
-	SKINCOLOR_SILVER,12,// SKINCOLOR_GREY
-	SKINCOLOR_WHITE,8,  // SKINCOLOR_BLACK
-	SKINCOLOR_NONE,8,   // SKINCOLOR_CYAN
-	SKINCOLOR_NONE,8,   // SKINCOLOR_AQUA
-	SKINCOLOR_NONE,8,   // SKINCOLOR_TEAL
-	SKINCOLOR_NONE,8,   // SKINCOLOR_AZURE
-	SKINCOLOR_ORANGE,9, // SKINCOLOR_BLUE
-	SKINCOLOR_NONE,8,   // SKINCOLOR_PEACH
-	SKINCOLOR_NONE,8,   // SKINCOLOR_TAN
-	SKINCOLOR_NONE,8,   // SKINCOLOR_PINK
-	SKINCOLOR_NONE,8,   // SKINCOLOR_ROSY
-	SKINCOLOR_NONE,8,   // SKINCOLOR_LAVENDER
-	SKINCOLOR_NONE,8,   // SKINCOLOR_PURPLE
-	SKINCOLOR_NONE,8,   // SKINCOLOR_MAGENTA
-	SKINCOLOR_BLUE,12,  // SKINCOLOR_ORANGE
-	SKINCOLOR_NONE,8,   // SKINCOLOR_RUST
-	SKINCOLOR_NONE,8,   // SKINCOLOR_BEIGE
-	SKINCOLOR_NONE,8,   // SKINCOLOR_BROWN
-	SKINCOLOR_GREEN,5,  // SKINCOLOR_RED
-	SKINCOLOR_NONE,8,   // SKINCOLOR_CRIMSON
-	SKINCOLOR_NONE,8,   // SKINCOLOR_EMERALD
-	SKINCOLOR_RED,11,   // SKINCOLOR_GREEN
-	SKINCOLOR_MAGENTA,3, // SKINCOLOR_ZIM
-	SKINCOLOR_NONE,8,   // SKINCOLOR_PERIDOT
-	SKINCOLOR_NONE,8,   // SKINCOLOR_YELLOW
-	SKINCOLOR_NONE,8    // SKINCOLOR_GOLD
+	SKINCOLOR_NONE,8,   	// SKINCOLOR_NONE
+	SKINCOLOR_BLACK,10, 	// SKINCOLOR_WHITE
+	SKINCOLOR_GREY,4,   	// SKINCOLOR_SILVER
+	SKINCOLOR_SILVER,12,	// SKINCOLOR_GREY
+	SKINCOLOR_WHITE,8,  	// SKINCOLOR_BLACK
+	SKINCOLOR_BEIGE,8,   	// SKINCOLOR_BEIGE - needs new offset
+	SKINCOLOR_BROWN,8,   	// SKINCOLOR_PEACH - ditto
+	SKINCOLOR_PEACH,8,   	// SKINCOLOR_BROWN - ditto
+	SKINCOLOR_GREEN,5,  	// SKINCOLOR_RED
+	SKINCOLOR_CYAN,8,   	// SKINCOLOR_CRIMSON - ditto
+	SKINCOLOR_BLUE,12,  	// SKINCOLOR_ORANGE
+	SKINCOLOR_TAN,8,   		// SKINCOLOR_RUST - ditto
+	SKINCOLOR_LAVENDER,8,    // SKINCOLOR_GOLD - ditto
+	SKINCOLOR_TEAL,8,   	// SKINCOLOR_YELLOW - ditto
+	SKINCOLOR_RUST,8,   	// SKINCOLOR_TAN - ditto
+	SKINCOLOR_MAGENTA,3, 	// SKINCOLOR_MOSS
+	SKINCOLOR_PURPLE,8,   	// SKINCOLOR_PERIDOT - ditto
+	SKINCOLOR_RED,11,   	// SKINCOLOR_GREEN
+	SKINCOLOR_PASTEL,8,   	// SKINCOLOR_EMERALD - ditto
+	SKINCOLOR_ROSY,8,   	// SKINCOLOR_AQUA - ditto
+	SKINCOLOR_YELLOW,8,   	// SKINCOLOR_TEAL - ditto
+	SKINCOLOR_CRIMSON,8,   	// SKINCOLOR_CYAN - ditto
+	SKINCOLOR_ORANGE,9, 	// SKINCOLOR_BLUE
+	SKINCOLOR_PINK,8,   	// SKINCOLOR_AZURE - ditto
+	SKINCOLOR_EMERALD,8,   	// SKINCOLOR_PASTEL - ditto
+	SKINCOLOR_PERIDOT,8,   	// SKINCOLOR_PURPLE - ditto
+	SKINCOLOR_GOLD,8,   	// SKINCOLOR_LAVENDER - ditto
+	SKINCOLOR_MOSS,8,   	// SKINCOLOR_MAGENTA - ditto
+	SKINCOLOR_AZURE,8,   	// SKINCOLOR_PINK - ditto
+	SKINCOLOR_AQUA,8   	// SKINCOLOR_ROSY - ditto
 };
 
 CV_PossibleValue_t Color_cons_t[MAXSKINCOLORS+1];
@@ -242,30 +244,31 @@ static void R_GenerateTranslationColormap(UINT8 *dest_colormap, INT32 skinnum, U
 		0x03, // SKINCOLOR_SILVER
 		0x08, // SKINCOLOR_GREY
 		0x18, // SKINCOLOR_BLACK
-		0x70, // SKINCOLOR_CYAN
-		0xf8, // SKINCOLOR_AQUA
-		0x7c, // SKINCOLOR_TEAL
-		0x9a, // SKINCOLOR_AZURE
-		0x82, // SKINCOLOR_BLUE
-		0xc8, // SKINCOLOR_PEACH
-		0x54, // SKINCOLOR_TAN
-		0xc0, // SKINCOLOR_PINK
-		0xb8, // SKINCOLOR_ROSY
-		0xb0, // SKINCOLOR_LAVENDER
-		0x90, // SKINCOLOR_PURPLE
-		0xa3, // SKINCOLOR_MAGENTA
-		0x31, // SKINCOLOR_ORANGE
-		0x3a, // SKINCOLOR_RUST
-		0xe0, // SKINCOLOR_BEIGE
-		0xd0, // SKINCOLOR_BROWN
+		0xf0, // SKINCOLOR_BEIGE
+		0xd8, // SKINCOLOR_PEACH
+		0xe0, // SKINCOLOR_BROWN
 		0x21, // SKINCOLOR_RED
 		0x28, // SKINCOLOR_CRIMSON
-		0xf0, // SKINCOLOR_EMERALD
-		0x60, // SKINCOLOR_GREEN
-		0x58, // SKINCOLOR_ZIM
-		0xac, // SKINCOLOR_PERIDOT
-		0x48, // SKINCOLOR_YELLOW
+		0x31, // SKINCOLOR_ORANGE
+		0x3a, // SKINCOLOR_RUST
 		0x40, // SKINCOLOR_GOLD
+		0x48, // SKINCOLOR_YELLOW
+		0x54, // SKINCOLOR_TAN
+		0x58, // SKINCOLOR_MOSS
+		0xbc, // SKINCOLOR_PERIDOT
+		0x60, // SKINCOLOR_GREEN
+		0x70, // SKINCOLOR_EMERALD
+		0x78, // SKINCOLOR_AQUA
+		0x8c, // SKINCOLOR_TEAL
+		0x80, // SKINCOLOR_CYAN
+		0x92, // SKINCOLOR_BLUE
+		0xaa, // SKINCOLOR_AZURE
+		0xa0, // SKINCOLOR_PASTEL
+		0xa0, // SKINCOLOR_PURPLE
+		0xc0, // SKINCOLOR_LAVENDER
+		0xb3, // SKINCOLOR_MAGENTA
+		0xd0, // SKINCOLOR_PINK
+		0xc8, // SKINCOLOR_ROSY
 	};
 	INT32 i;
 	INT32 starttranscolor;
@@ -283,7 +286,7 @@ static void R_GenerateTranslationColormap(UINT8 *dest_colormap, INT32 skinnum, U
 		if (skinnum == TC_BOSS)
 			dest_colormap[31] = 0;
 		else if (skinnum == TC_METALSONIC)
-			dest_colormap[143] = 0;
+			dest_colormap[159] = 0;
 
 		return;
 	}
@@ -309,243 +312,253 @@ static void R_GenerateTranslationColormap(UINT8 *dest_colormap, INT32 skinnum, U
 			dest_colormap[starttranscolor + i] = (UINT8)(skinbasecolors[color - 1] + i);
 		break;
 
+	case SKINCOLOR_WHITE:
 	case SKINCOLOR_CYAN:
 		// 12 color ramp
 		for (i = 0; i < SKIN_RAMP_LENGTH; i++)
 			dest_colormap[starttranscolor + i] = (UINT8)(skinbasecolors[color - 1] + (12*i/SKIN_RAMP_LENGTH));
 		break;
 
-	case SKINCOLOR_MAGENTA:
-		// 9 color ramp
-		for (i = 0; i < SKIN_RAMP_LENGTH; i++)
-			dest_colormap[starttranscolor + i] = (UINT8)(skinbasecolors[color - 1] + (9*i/SKIN_RAMP_LENGTH));
-		break;
-
-	case SKINCOLOR_WHITE:
 	case SKINCOLOR_BLACK:
-	case SKINCOLOR_PINK:
+	case SKINCOLOR_MOSS:
+	case SKINCOLOR_EMERALD:
 	case SKINCOLOR_LAVENDER:
-	case SKINCOLOR_ZIM:
+	case SKINCOLOR_PINK:
 		// 8 color ramp
 		for (i = 0; i < SKIN_RAMP_LENGTH; i++)
 			dest_colormap[starttranscolor + i] = (UINT8)(skinbasecolors[color - 1] + (i >> 1));
 		break;
 
-	case SKINCOLOR_AQUA:
-		// 10 colors
+	case SKINCOLOR_BEIGE:
+		// 13 colors
 		for (i = 0; i < SKIN_RAMP_LENGTH; i++)
 		{
-			if (10*i/16 >= 8)
-				dest_colormap[starttranscolor + i] = (UINT8)(0x6C + (10*i/SKIN_RAMP_LENGTH) - 8); // Darkest
+			if (i == 15)
+				dest_colormap[starttranscolor + i] = 0xed; // Darkest
+			else if (i <= 6)
+				dest_colormap[starttranscolor + i] = (UINT8)(skinbasecolors[color - 1] + ((i + 1) >> 1)); // Brightest
 			else
-				dest_colormap[starttranscolor + i] = (UINT8)(skinbasecolors[color - 1] + (10*i/SKIN_RAMP_LENGTH));
+				dest_colormap[starttranscolor + i] = (UINT8)(skinbasecolors[color - 1] + i - 3);
 		}
 		break;
-
-	case SKINCOLOR_TEAL:
-		// 6 colors
+		
+	case SKINCOLOR_PEACH:
+		// 11 colors
 		for (i = 0; i < SKIN_RAMP_LENGTH; i++)
 		{
-			if (6*i/16 == 0)
-				dest_colormap[starttranscolor + i] = 0xf8; // Lightest
-			else if (6*i/16 == 5)
-				dest_colormap[starttranscolor + i] = 0x7a; // Darkest
+			if (i == 0)
+				dest_colormap[starttranscolor + i] = 0xD0; // Lightest 1
+			else if (i == 1)
+				dest_colormap[starttranscolor + i] = 0x30; // Lightest 2
+			else if (i <= 11)
+				dest_colormap[starttranscolor + i] = (UINT8)(skinbasecolors[color - 1] + (i >> 1) - 1);
 			else
-				dest_colormap[starttranscolor + i] = (UINT8)(skinbasecolors[color - 1] + (6*i/SKIN_RAMP_LENGTH) - 1);
+				dest_colormap[starttranscolor + i] = (UINT8)(skinbasecolors[color - 1] + i - 7); // Darkest
 		}
 		break;
-
-	case SKINCOLOR_AZURE:
-		// 8 colors
+		
+	case SKINCOLOR_RED:
+		// 16 colors
 		for (i = 0; i < SKIN_RAMP_LENGTH; i++)
 		{
-			if (8*i/16 <= 1)
-				dest_colormap[starttranscolor + i] = (UINT8)(0x80 + 8*i/16); // Lightest
+			if (i == 13)
+				dest_colormap[starttranscolor + i] = 0x47; // Semidark
+			else if (i > 13)
+				dest_colormap[starttranscolor + i] = (UINT8)(skinbasecolors[color - 1] + i - 1); // Darkest
 			else
-				dest_colormap[starttranscolor + i] = (UINT8)(skinbasecolors[color - 1] + (8*i/SKIN_RAMP_LENGTH) - 2); // main
+				dest_colormap[starttranscolor + i] = (UINT8)(skinbasecolors[color - 1] + i);
 		}
 		break;
 
-	case SKINCOLOR_BLUE:
+	case SKINCOLOR_CRIMSON:
+		// 9 colors
 		for (i = 0; i < SKIN_RAMP_LENGTH; i++)
 		{
-			if (i == 14)
-				dest_colormap[starttranscolor + i] = 0xED;
-			else if (i == 15)
-				dest_colormap[starttranscolor + i] = 0x1F;
+			if (i/2 == 6)
+				dest_colormap[starttranscolor + i] = 0x47; // Semidark
+			else if (i/2 == 7)
+				dest_colormap[starttranscolor + i] = (UINT8)(skinbasecolors[color - 1] + i - 8); // Darkest
 			else
-				dest_colormap[starttranscolor + i] = (UINT8)(skinbasecolors[color - 1] + i);
+				dest_colormap[starttranscolor + i] = (UINT8)(skinbasecolors[color - 1] + (i >> 1));
 		}
 		break;
 
-	case SKINCOLOR_PEACH:
-		// 10 colors
+	case SKINCOLOR_ORANGE:
 		for (i = 0; i < SKIN_RAMP_LENGTH; i++)
 		{
-			if (10*i/16 == 0)
-				dest_colormap[starttranscolor + i] = 0xC0; // Lightest
-			else if (10*i/16 == 1)
-				dest_colormap[starttranscolor + i] = 0x30; // Second
+			if (i == 15)
+				dest_colormap[starttranscolor + i] = 0x2c; // Darkest
 			else
-				dest_colormap[starttranscolor + i] = (UINT8)(skinbasecolors[color - 1] + (10*i/SKIN_RAMP_LENGTH) - 2); // main
+				dest_colormap[starttranscolor + i] = (UINT8)(skinbasecolors[color - 1] + i);
 		}
 		break;
 
-	case SKINCOLOR_TAN:
-		// 8 colors
+	case SKINCOLOR_RUST:
+		// 10 colors
 		for (i = 0; i < SKIN_RAMP_LENGTH; i++)
 		{
-			if (8*i/16 == 0)
-				dest_colormap[starttranscolor + i] = 0x51; // Lightest 1
-			else if (8*i/16 == 5)
-				dest_colormap[starttranscolor + i] = 0xE5; // Darkest 1
-			else if (8*i/16 == 6)
-				dest_colormap[starttranscolor + i] = 0xE9; // Darkest 2
-			else if (8*i/16 == 7)
-				dest_colormap[starttranscolor + i] = 0xDD; // Darkest 3
+			if (i <= 11)
+				dest_colormap[starttranscolor + i] = (UINT8)(skinbasecolors[color - 1] + (i >> 1));
+			else if (i == 12)
+				dest_colormap[starttranscolor + i] = 0x2c; // Darkest 4
+			else if (i == 13)
+				dest_colormap[starttranscolor + i] = 0xfe; // Darkest 3
 			else
-				dest_colormap[starttranscolor + i] = (UINT8)(skinbasecolors[color - 1] + (8*i/SKIN_RAMP_LENGTH) - 1); // main
+				dest_colormap[starttranscolor + i] = 0x2d + i - 14; // Darkest 2 and 1
 		}
 		break;
 
-	case SKINCOLOR_ROSY:
-		// 15 colors
+	case SKINCOLOR_GOLD:
+		// 10 colors
 		for (i = 0; i < SKIN_RAMP_LENGTH; i++)
 		{
-			if (15*i/16 == 0)
-				dest_colormap[starttranscolor + i] = 0xEC; // Lightest
-			else if (15*i/16 == 12)
-				dest_colormap[starttranscolor + i] = 0x47; // Dark Shade
-			else if (15*i/16 >= 13)
-				dest_colormap[starttranscolor + i] = (UINT8)(0x2E + (15*i/SKIN_RAMP_LENGTH) - 13); // Darkest
-			else if (15*i/16 >= 9)
-				dest_colormap[starttranscolor + i] = (UINT8)(0x2B + (15*i/SKIN_RAMP_LENGTH) - 9); // Darkish
+			if (i == 0)
+				dest_colormap[starttranscolor + i] = 0x50; // Lightest 1
+			else if (i == 1)
+				dest_colormap[starttranscolor + i] = 0x53; // Lightest 2
+			else if (i/2 == 7)
+				dest_colormap[starttranscolor + i] = (UINT8)(skinbasecolors[color - 1] + i - 8); //Darkest
 			else
-				dest_colormap[starttranscolor + i] = (UINT8)(skinbasecolors[color - 1] + (15*i/SKIN_RAMP_LENGTH) - 1); // main
+				dest_colormap[starttranscolor + i] = (UINT8)(skinbasecolors[color - 1] + (i >> 1) - 1);
 		}
 		break;
 
-	case SKINCOLOR_PURPLE:
+	case SKINCOLOR_YELLOW:
 		// 10 colors
 		for (i = 0; i < SKIN_RAMP_LENGTH; i++)
 		{
-			if (i <= 3)
-				dest_colormap[starttranscolor + i] = (UINT8)(skinbasecolors[color - 1] + i); // Lightest
+			if (i == 0)
+				dest_colormap[starttranscolor + i] = 0x53; // Lightest
+			else if (i == 15)
+				dest_colormap[starttranscolor + i] = 0xed; // Darkest
 			else
-				dest_colormap[starttranscolor + i] = (UINT8)(skinbasecolors[color - 1] + (8*i/SKIN_RAMP_LENGTH) + 2); // main
+				dest_colormap[starttranscolor + i] = (UINT8)(skinbasecolors[color - 1] + (i >> 1));
 		}
 		break;
 
-	case SKINCOLOR_ORANGE:
+	case SKINCOLOR_TAN:
+		// 8 colors
 		for (i = 0; i < SKIN_RAMP_LENGTH; i++)
 		{
-			if (i == 15)
-				dest_colormap[starttranscolor + i] = 0xEE;
+			if (i/2 == 0)
+				dest_colormap[starttranscolor + i] = 0x51; // Lightest
+			else if (i/2 == 5)
+				dest_colormap[starttranscolor + i] = 0xf5; // Darkest 1
+			else if (i/2 == 6)
+				dest_colormap[starttranscolor + i] = 0xf9; // Darkest 2
+			else if (i/2 == 7)
+				dest_colormap[starttranscolor + i] = 0xed; // Darkest 3
 			else
-				dest_colormap[starttranscolor + i] = (UINT8)(skinbasecolors[color - 1] + i);
+				dest_colormap[starttranscolor + i] = (UINT8)(skinbasecolors[color - 1] + (i >> 1) - 1);
 		}
 		break;
 
-	case SKINCOLOR_RUST:
-		// 9 colors
+	case SKINCOLOR_PERIDOT:
+		// 8 colors
 		for (i = 0; i < SKIN_RAMP_LENGTH; i++)
 		{
-			if (9*i/16 == 6)
-				dest_colormap[starttranscolor + i] = 0xEE;
-			else if (9*i/16 == 7)
-				dest_colormap[starttranscolor + i] = 0xEF;
-			else if (9*i/16 == 8)
-				dest_colormap[starttranscolor + i] = 0x47;
+			if (i/2 == 0)
+				dest_colormap[starttranscolor + i] = 0x58; // Lightest
+			else if (i/2 == 7)
+				dest_colormap[starttranscolor + i] = 0x77; // Darkest
+			else if (i/2 >= 5)
+				dest_colormap[starttranscolor + i] = (UINT8)(0x5e + (i >> 1) - 5); // Semidark
 			else
-				dest_colormap[starttranscolor + i] = (UINT8)(skinbasecolors[color - 1] + (9*i/SKIN_RAMP_LENGTH));
+				dest_colormap[starttranscolor + i] = (UINT8)(skinbasecolors[color - 1] + (i >> 1) - 1);
 		}
 		break;
 
-	case SKINCOLOR_BEIGE:
-		// 13 colors
+	case SKINCOLOR_AQUA:
+		// 10 colors
 		for (i = 0; i < SKIN_RAMP_LENGTH; i++)
 		{
-			if (13*i/16 == 12)
-				dest_colormap[starttranscolor + i] = 0xDD; // darkest
+			if (i == 0)
+				dest_colormap[starttranscolor + i] = 0x78; // Lightest
+			else if (i >= 14)
+				dest_colormap[starttranscolor + i] = (UINT8)(0x76 + i - 14); // Darkest
 			else
-				dest_colormap[starttranscolor + i] = (UINT8)(skinbasecolors[color - 1] + (13*i/SKIN_RAMP_LENGTH)); // Neon green
+				dest_colormap[starttranscolor + i] = (UINT8)(skinbasecolors[color - 1] + (i >> 1) + 1);
 		}
 		break;
 
-	case SKINCOLOR_RED:
+	case SKINCOLOR_TEAL:
+		// 6 colors
 		for (i = 0; i < SKIN_RAMP_LENGTH; i++)
 		{
-			if (i == 13)
-				dest_colormap[starttranscolor + i] = 0x47;
-			else if (i > 13)
-				dest_colormap[starttranscolor + i] = (UINT8)(skinbasecolors[color - 1] + i - 1);
+			if (i <= 1)
+				dest_colormap[starttranscolor + i] = 0x78; // Lightest
+			else if (i >= 13)
+				dest_colormap[starttranscolor + i] = 0x8a; // Darkest
 			else
-				dest_colormap[starttranscolor + i] = (UINT8)(skinbasecolors[color - 1] + i);
+				dest_colormap[starttranscolor + i] = (UINT8)(skinbasecolors[color - 1] + ((i - 1)/3));
 		}
 		break;
 
-	case SKINCOLOR_CRIMSON:
-		// 9 colors
+	case SKINCOLOR_AZURE:
+		// 8 colors
 		for (i = 0; i < SKIN_RAMP_LENGTH; i++)
 		{
-			if (9*i/16 == 6)
-				dest_colormap[starttranscolor + i] = 0x47;
-			else if (9*i/16 > 6)
-				dest_colormap[starttranscolor + i] = (UINT8)(skinbasecolors[color - 1] + (9*i/SKIN_RAMP_LENGTH) - 1);
+			if (i <= 3)
+				dest_colormap[starttranscolor + i] = (UINT8)(0x90 + i/2); // Lightest
 			else
-				dest_colormap[starttranscolor + i] = (UINT8)(skinbasecolors[color - 1] + (9*i/SKIN_RAMP_LENGTH));
+				dest_colormap[starttranscolor + i] = (UINT8)(skinbasecolors[color - 1] + (i >> 1) - 2);
 		}
 		break;
 
-	case SKINCOLOR_EMERALD:
-		// 8 colors
+	case SKINCOLOR_BLUE:
+		// 16 colors
 		for (i = 0; i < SKIN_RAMP_LENGTH; i++)
 		{
-			if (8*i/16 == 7)
-				dest_colormap[starttranscolor + i] = 0x6E; // Darkest
+			if (i == 15)
+				dest_colormap[starttranscolor + i] = 0x1F; //Darkest 1
+			else if (i == 14)
+				dest_colormap[starttranscolor + i] = 0xfd; //Darkest 2
 			else
-				dest_colormap[starttranscolor + i] = (UINT8)(skinbasecolors[color - 1] + (8*i/SKIN_RAMP_LENGTH)); // Neon green
+				dest_colormap[starttranscolor + i] = (UINT8)(skinbasecolors[color - 1] + i);
 		}
 		break;
 
-	case SKINCOLOR_PERIDOT:
-		// 8 colors
+	case SKINCOLOR_PASTEL:
+		// 10 colors
 		for (i = 0; i < SKIN_RAMP_LENGTH; i++)
 		{
-			if (8*i/16 == 0)
-				dest_colormap[starttranscolor + i] = 0x58; // Lightest
-			else if (8*i/16 == 7)
-				dest_colormap[starttranscolor + i] = 0x6D; // Darkest
-			else if (8*i/16 >= 5)
-				dest_colormap[starttranscolor + i] = (UINT8)(0x5E + (8*i/SKIN_RAMP_LENGTH) - 5); // Darkish
+			if (i >= 12)
+				dest_colormap[starttranscolor + i] = (UINT8)(skinbasecolors[color - 1] + i - 7); // Darkest
+			else if (i <= 1)
+				dest_colormap[starttranscolor + i] = 0x90; // Lightest
 			else
-				dest_colormap[starttranscolor + i] = (UINT8)(skinbasecolors[color - 1] + (8*i/SKIN_RAMP_LENGTH) - 1); // main
+				dest_colormap[starttranscolor + i] = (UINT8)(skinbasecolors[color - 1] + (i >> 1) - 1);
 		}
 		break;
 
-	case SKINCOLOR_YELLOW:
+	case SKINCOLOR_PURPLE:
 		// 10 colors
 		for (i = 0; i < SKIN_RAMP_LENGTH; i++)
 		{
-			if (i == 0)
-				dest_colormap[starttranscolor + i] = 0x53; // Lightest
-			else if (i == 15)
-				dest_colormap[starttranscolor + i] = 0xDD; // Darkest
+			if (i <= 3)
+				dest_colormap[starttranscolor + i] = (UINT8)(skinbasecolors[color - 1] + i); // Lightest
 			else
-				dest_colormap[starttranscolor + i] = (UINT8)(skinbasecolors[color - 1] + (8*i/SKIN_RAMP_LENGTH));
+				dest_colormap[starttranscolor + i] = (UINT8)(skinbasecolors[color - 1] + (i >> 1) + 2);
 		}
 		break;
 
-	case SKINCOLOR_GOLD:
-		// 10 colors
+	case SKINCOLOR_MAGENTA:
+		// 9 colors
+		for (i = 0; i < SKIN_RAMP_LENGTH; i++)
+			if (i == 0)
+				dest_colormap[starttranscolor + i] = (UINT8)(skinbasecolors[color - 1]); // Lightest
+			else
+				dest_colormap[starttranscolor + i] = (UINT8)(skinbasecolors[color - 1] + (i >> 1) + 1);
+		break;
+
+	case SKINCOLOR_ROSY:
+		// 9 colors
 		for (i = 0; i < SKIN_RAMP_LENGTH; i++)
 		{
-			if (10*i/16 == 0)
-				dest_colormap[starttranscolor + i] = 0x50; // Lightest
-			else if (10*i/16 == 1)
-				dest_colormap[starttranscolor + i] = 0x53; // Second
+			if (i == 0)
+				dest_colormap[starttranscolor + i] = 0xfc; // Lightest
 			else
-				dest_colormap[starttranscolor + i] = (UINT8)(skinbasecolors[color - 1] + (10*i/SKIN_RAMP_LENGTH) - 2); // main
+				dest_colormap[starttranscolor + i] = (UINT8)(skinbasecolors[color - 1] + ((i - 1) >> 1));
 		}
 		break;
 
@@ -612,67 +625,19 @@ static void R_GenerateTranslationColormap(UINT8 *dest_colormap, INT32 skinnum, U
 		dest_colormap[starttranscolor + 15] = (UINT8)63;
 		break;
 
-	// Super Tails
+	// Super Tails and Knuckles, who really should be dummied out by now
 	case SKINCOLOR_TSUPER1:
-		for (i = 0; i < 10; i++) // white
-			dest_colormap[starttranscolor + i] = 120;
-		for (; i < SKIN_RAMP_LENGTH; i++) // orange
-			dest_colormap[starttranscolor + i] = (UINT8)(80 + (i-10));
-		break;
-
 	case SKINCOLOR_TSUPER2:
-		for (i = 0; i < 4; i++) // white
-			dest_colormap[starttranscolor + i] = 120;
-		for (; i < SKIN_RAMP_LENGTH; i++) // orange
-			dest_colormap[starttranscolor + i] = (UINT8)(80 + ((i-4)>>1));
-		break;
-
 	case SKINCOLOR_TSUPER3:
-		dest_colormap[starttranscolor] = 120; // pure white
-		dest_colormap[starttranscolor+1] = 120;
-		for (i = 2; i < SKIN_RAMP_LENGTH; i++) // orange
-			dest_colormap[starttranscolor + i] = (UINT8)(80 + ((i-2)>>1));
-		break;
-
 	case SKINCOLOR_TSUPER4:
-		dest_colormap[starttranscolor] = 120; // pure white
-		for (i = 1; i < 9; i++) // orange
-			dest_colormap[starttranscolor + i] = (UINT8)(80 + (i-1));
-		for (; i < SKIN_RAMP_LENGTH; i++) // gold
-			dest_colormap[starttranscolor + i] = (UINT8)(115 + (5*(i-9)/7));
-		break;
-
 	case SKINCOLOR_TSUPER5:
-		for (i = 0; i < 8; i++) // orange
-			dest_colormap[starttranscolor + i] = (UINT8)(80 + i);
-		for (; i < SKIN_RAMP_LENGTH; i++) // gold
-			dest_colormap[starttranscolor + i] = (UINT8)(115 + (5*(i-8)/8));
-		break;
-
-	// Super Knuckles
 	case SKINCOLOR_KSUPER1:
-		for (i = 0; i < SKIN_RAMP_LENGTH; i++)
-			dest_colormap[starttranscolor + i] = (UINT8)(120 + (i >> 2));
-		break;
-
 	case SKINCOLOR_KSUPER2:
-		for (i = 0; i < SKIN_RAMP_LENGTH; i++)
-			dest_colormap[starttranscolor + i] = (UINT8)(120 + (6*i/SKIN_RAMP_LENGTH));
-		break;
-
 	case SKINCOLOR_KSUPER3:
-		for (i = 0; i < SKIN_RAMP_LENGTH; i++)
-			dest_colormap[starttranscolor + i] = (UINT8)(120 + (i >> 1));
-		break;
-
 	case SKINCOLOR_KSUPER4:
-		for (i = 0; i < SKIN_RAMP_LENGTH; i++)
-			dest_colormap[starttranscolor + i] = (UINT8)(121 + (i >> 1));
-		break;
-
 	case SKINCOLOR_KSUPER5:
 		for (i = 0; i < SKIN_RAMP_LENGTH; i++)
-			dest_colormap[starttranscolor + i] = (UINT8)(122 + (i >> 1));
+			dest_colormap[starttranscolor + i] = 0xFF;
 		break;
 
 	default:
@@ -986,3 +951,4 @@ void R_DrawViewBorder(void)
 // ==========================================================================
 
 #include "r_draw16.c"
+
diff --git a/src/r_draw8.c b/src/r_draw8.c
index e0264ba921a1b2ee3ec7824ba86ffe17a5a86db9..d6c1095745a6aa462fe27d6f864ae471fc2ee7ca 100644
--- a/src/r_draw8.c
+++ b/src/r_draw8.c
@@ -105,7 +105,7 @@ void R_DrawColumn_8(void)
 	}
 }
 
-#define TRANSPARENTPIXEL 247
+#define TRANSPARENTPIXEL 255
 
 void R_Draw2sMultiPatchColumn_8(void)
 {
@@ -947,3 +947,4 @@ void R_DrawColumnShadowed_8(void)
 	if (dc_yl <= realyh)
 		walldrawerfunc();		// R_DrawWallColumn_8 for the appropriate architecture
 }
+