diff --git a/src/dehacked.c b/src/dehacked.c
index c0bf96cc757df0ff82e25a787ce4f335f1c73338..b1ec8605511d6b489687548002ae0b0e9e15a0d3 100644
--- a/src/dehacked.c
+++ b/src/dehacked.c
@@ -6895,24 +6895,61 @@ static const char *COLOR_ENUMS[] = {
 	"MAGENTA",   	// SKINCOLOR_MAGENTA
 	"PINK",     	// SKINCOLOR_PINK
 	"ROSY",     	// SKINCOLOR_ROSY
+
 	// Super special awesome Super flashing colors!
-	"SUPER1",   	// SKINCOLOR_SUPER1
-	"SUPER2",   	// SKINCOLOR_SUPER2,
-	"SUPER3",   	// SKINCOLOR_SUPER3,
-	"SUPER4",   	// SKINCOLOR_SUPER4,
-	"SUPER5",   	// SKINCOLOR_SUPER5,
-	// Super Tails
-	"TSUPER1",  	// SKINCOLOR_TSUPER1,
-	"TSUPER2",  	// SKINCOLOR_TSUPER2,
-	"TSUPER3",  	// SKINCOLOR_TSUPER3,
-	"TSUPER4",  	// SKINCOLOR_TSUPER4,
-	"TSUPER5",  	// SKINCOLOR_TSUPER5,
-	// Super Knuckles
-	"KSUPER1",  	// SKINCOLOR_KSUPER1,
-	"KSUPER2",  	// SKINCOLOR_KSUPER2,
-	"KSUPER3",  	// SKINCOLOR_KSUPER3,
-	"KSUPER4",  	// SKINCOLOR_KSUPER4,
-	"KSUPER5"   	// SKINCOLOR_KSUPER5,
+	"SUPERSILVER1", // SKINCOLOR_SUPERSILVER1
+	"SUPERSILVER2", // SKINCOLOR_SUPERSILVER2,
+	"SUPERSILVER3", // SKINCOLOR_SUPERSILVER3,
+	"SUPERSILVER4", // SKINCOLOR_SUPERSILVER4,
+	"SUPERSILVER5", // SKINCOLOR_SUPERSILVER5,
+
+	"SUPERRED1", // SKINCOLOR_SUPERRED1
+	"SUPERRED2", // SKINCOLOR_SUPERRED2,
+	"SUPERRED3", // SKINCOLOR_SUPERRED3,
+	"SUPERRED4", // SKINCOLOR_SUPERRED4,
+	"SUPERRED5", // SKINCOLOR_SUPERRED5,
+
+	"SUPERORANGE1", // SKINCOLOR_SUPERORANGE1
+	"SUPERORANGE2", // SKINCOLOR_SUPERORANGE2,
+	"SUPERORANGE3", // SKINCOLOR_SUPERORANGE3,
+	"SUPERORANGE4", // SKINCOLOR_SUPERORANGE4,
+	"SUPERORANGE5", // SKINCOLOR_SUPERORANGE5,
+
+	"SUPERGOLD1", // SKINCOLOR_SUPERGOLD1
+	"SUPERGOLD2", // SKINCOLOR_SUPERGOLD2,
+	"SUPERGOLD3", // SKINCOLOR_SUPERGOLD3,
+	"SUPERGOLD4", // SKINCOLOR_SUPERGOLD4,
+	"SUPERGOLD5", // SKINCOLOR_SUPERGOLD5,
+
+	"SUPERPERIDOT1", // SKINCOLOR_SUPERPERIDOT1
+	"SUPERPERIDOT2", // SKINCOLOR_SUPERPERIDOT2,
+	"SUPERPERIDOT3", // SKINCOLOR_SUPERPERIDOT3,
+	"SUPERPERIDOT4", // SKINCOLOR_SUPERPERIDOT4,
+	"SUPERPERIDOT5", // SKINCOLOR_SUPERPERIDOT5,
+
+	"SUPERCYAN1", // SKINCOLOR_SUPERCYAN1
+	"SUPERCYAN2", // SKINCOLOR_SUPERCYAN2,
+	"SUPERCYAN3", // SKINCOLOR_SUPERCYAN3,
+	"SUPERCYAN4", // SKINCOLOR_SUPERCYAN4,
+	"SUPERCYAN5", // SKINCOLOR_SUPERCYAN5,
+
+	"SUPERPURPLE1",  	// SKINCOLOR_SUPERPURPLE1,
+	"SUPERPURPLE2",  	// SKINCOLOR_SUPERPURPLE2,
+	"SUPERPURPLE3",  	// SKINCOLOR_SUPERPURPLE3,
+	"SUPERPURPLE4",  	// SKINCOLOR_SUPERPURPLE4,
+	"SUPERPURPLE5",   	// SKINCOLOR_SUPERPURPLE5,
+
+	"SUPERRUST1", // SKINCOLOR_SUPERRUST1
+	"SUPERRUST2", // SKINCOLOR_SUPERRUST2,
+	"SUPERRUST3", // SKINCOLOR_SUPERRUST3,
+	"SUPERRUST4", // SKINCOLOR_SUPERRUST4,
+	"SUPERRUST5", // SKINCOLOR_SUPERRUST5,
+
+	"SUPERTAN1", // SKINCOLOR_SUPERTAN1
+	"SUPERTAN2", // SKINCOLOR_SUPERTAN2,
+	"SUPERTAN3", // SKINCOLOR_SUPERTAN3,
+	"SUPERTAN4", // SKINCOLOR_SUPERTAN4,
+	"SUPERTAN5" // SKINCOLOR_SUPERTAN5,
 };
 
 static const char *const POWERS_LIST[] = {
diff --git a/src/doomdata.h b/src/doomdata.h
index e916a151f72ed7b6d313f19b960d8c402eda00b5..033cc71b3e8c75413aeec0cb0ff0c71e80cb11fe 100644
--- a/src/doomdata.h
+++ b/src/doomdata.h
@@ -207,7 +207,7 @@ typedef struct
 
 #define ZSHIFT 4
 
-extern const char *Color_Names[MAXSKINCOLORS];
+extern const char *Color_Names[MAXSKINCOLORS + NUMSUPERCOLORS];
 extern const UINT8 Color_Opposite[MAXSKINCOLORS*2];
 
 #define NUMMAPS 1035
diff --git a/src/doomdef.h b/src/doomdef.h
index a7a722b42841020cc76a0234bbe7d87feae510d6..4de83fda1f4edf1f80bf5d4f2abe80906bc7068e 100644
--- a/src/doomdef.h
+++ b/src/doomdef.h
@@ -257,32 +257,69 @@ typedef enum
 	SKINCOLOR_MAGENTA,
 	SKINCOLOR_PINK,
 	SKINCOLOR_ROSY,
+	//SKINCOLOR_?
+	//SKINCOLOR_?
 
-	// Careful! MAXSKINCOLORS cannot be greater than 0x20!
+	// Careful! MAXSKINCOLORS cannot be greater than 0x20! Two slots left...
 	MAXSKINCOLORS,
 
 	// Super special awesome Super flashing colors!
-	SKINCOLOR_SUPER1 = MAXSKINCOLORS,
-	SKINCOLOR_SUPER2,
-	SKINCOLOR_SUPER3,
-	SKINCOLOR_SUPER4,
-	SKINCOLOR_SUPER5,
-
-	// Super Tails
-	SKINCOLOR_TSUPER1,
-	SKINCOLOR_TSUPER2,
-	SKINCOLOR_TSUPER3,
-	SKINCOLOR_TSUPER4,
-	SKINCOLOR_TSUPER5,
-
-	// Super Knuckles
-	SKINCOLOR_KSUPER1,
-	SKINCOLOR_KSUPER2,
-	SKINCOLOR_KSUPER3,
-	SKINCOLOR_KSUPER4,
-	SKINCOLOR_KSUPER5,
-
-	MAXTRANSLATIONS
+	SKINCOLOR_SUPERSILVER1 = MAXSKINCOLORS,
+	SKINCOLOR_SUPERSILVER2,
+	SKINCOLOR_SUPERSILVER3,
+	SKINCOLOR_SUPERSILVER4,
+	SKINCOLOR_SUPERSILVER5,
+
+	SKINCOLOR_SUPERRED1,
+	SKINCOLOR_SUPERRED2,
+	SKINCOLOR_SUPERRED3,
+	SKINCOLOR_SUPERRED4,
+	SKINCOLOR_SUPERRED5,
+
+	SKINCOLOR_SUPERORANGE1,
+	SKINCOLOR_SUPERORANGE2,
+	SKINCOLOR_SUPERORANGE3,
+	SKINCOLOR_SUPERORANGE4,
+	SKINCOLOR_SUPERORANGE5,
+
+	SKINCOLOR_SUPERGOLD1,
+	SKINCOLOR_SUPERGOLD2,
+	SKINCOLOR_SUPERGOLD3,
+	SKINCOLOR_SUPERGOLD4,
+	SKINCOLOR_SUPERGOLD5,
+
+	SKINCOLOR_SUPERPERIDOT1,
+	SKINCOLOR_SUPERPERIDOT2,
+	SKINCOLOR_SUPERPERIDOT3,
+	SKINCOLOR_SUPERPERIDOT4,
+	SKINCOLOR_SUPERPERIDOT5,
+
+	SKINCOLOR_SUPERCYAN1,
+	SKINCOLOR_SUPERCYAN2,
+	SKINCOLOR_SUPERCYAN3,
+	SKINCOLOR_SUPERCYAN4,
+	SKINCOLOR_SUPERCYAN5,
+
+	SKINCOLOR_SUPERPURPLE1,
+	SKINCOLOR_SUPERPURPLE2,
+	SKINCOLOR_SUPERPURPLE3,
+	SKINCOLOR_SUPERPURPLE4,
+	SKINCOLOR_SUPERPURPLE5,
+
+	SKINCOLOR_SUPERRUST1,
+	SKINCOLOR_SUPERRUST2,
+	SKINCOLOR_SUPERRUST3,
+	SKINCOLOR_SUPERRUST4,
+	SKINCOLOR_SUPERRUST5,
+
+	SKINCOLOR_SUPERTAN1,
+	SKINCOLOR_SUPERTAN2,
+	SKINCOLOR_SUPERTAN3,
+	SKINCOLOR_SUPERTAN4,
+	SKINCOLOR_SUPERTAN5,
+
+	MAXTRANSLATIONS,
+	NUMSUPERCOLORS = ((MAXTRANSLATIONS - MAXSKINCOLORS)/5)
 } skincolors_t;
 
 // State updates, number of tics / second.
diff --git a/src/g_game.c b/src/g_game.c
index 70b9639125e357d0cb81fa88f670d7412b255eec..c12d3b25def8d7987083c88eb194bf77b8a4852b 100644
--- a/src/g_game.c
+++ b/src/g_game.c
@@ -4345,8 +4345,14 @@ void G_GhostTicker(void)
 		// Tick ghost colors (Super and Mario Invincibility flashing)
 		switch(g->color)
 		{
-		case GHC_SUPER: // Super Sonic (P_DoSuperStuff)
-			g->mo->color = SKINCOLOR_SUPER1;
+		case GHC_SUPER: // Super (P_DoSuperStuff)
+			if (g->mo->skin)
+			{
+				skin_t *skin = (skin_t *)g->mo->skin;
+				g->mo->color = skin->supercolor;
+			}
+			else
+				g->mo->color = SKINCOLOR_SUPERGOLD1;
 			g->mo->color += abs( ( (signed)( (unsigned)leveltime >> 1 ) % 9) - 4);
 			break;
 		case GHC_INVINCIBLE: // Mario invincibility (P_CheckInvincibilityTimer)
diff --git a/src/hardware/hw_md2.c b/src/hardware/hw_md2.c
index 6628d131720e3f11ec250c72e080d76eb6593b81..f602794c9abd98eeb51a34cd13468bfeb27dad87 100644
--- a/src/hardware/hw_md2.c
+++ b/src/hardware/hw_md2.c
@@ -1035,32 +1035,151 @@ static void HWR_CreateBlendedTexture(GLPatch_t *gpatch, GLPatch_t *blendgpatch,
 		case SKINCOLOR_ROSY:
 			blendcolor = V_GetColor(202);
 			break;
-		case SKINCOLOR_SUPER1:
+
+		case SKINCOLOR_SUPERSILVER1: // Super white
+			blendcolor = V_GetColor(0);
+			break;
+		case SKINCOLOR_SUPERSILVER2:
+			blendcolor = V_GetColor(2);
+			break;
+		case SKINCOLOR_SUPERSILVER3:
+			blendcolor = V_GetColor(4);
+			break;
+		case SKINCOLOR_SUPERSILVER4:
+			blendcolor = V_GetColor(7);
+			break;
+		case SKINCOLOR_SUPERSILVER5:
+			blendcolor = V_GetColor(10);
+			break;
+
+		case SKINCOLOR_SUPERRED1: // Super red
+			blendcolor = V_GetColor(208);
+			break;
+		case SKINCOLOR_SUPERRED2:
+			blendcolor = V_GetColor(210);
+			break;
+		case SKINCOLOR_SUPERRED3:
+			blendcolor = V_GetColor(32);
+			break;
+		case SKINCOLOR_SUPERRED4:
+			blendcolor = V_GetColor(33);
+			break;
+		case SKINCOLOR_SUPERRED5:
+			blendcolor = V_GetColor(35);
+			break;
+
+		case SKINCOLOR_SUPERORANGE1: // Super orange
+			blendcolor = V_GetColor(208);
+			break;
+		case SKINCOLOR_SUPERORANGE2:
+			blendcolor = V_GetColor(48);
+			break;
+		case SKINCOLOR_SUPERORANGE3:
+			blendcolor = V_GetColor(50);
+			break;
+		case SKINCOLOR_SUPERORANGE4:
+			blendcolor = V_GetColor(54);
+			break;
+		case SKINCOLOR_SUPERORANGE5:
+			blendcolor = V_GetColor(58);
+			break;
+
+		case SKINCOLOR_SUPERGOLD1: // Super gold
 			blendcolor = V_GetColor(80);
 			break;
-		case SKINCOLOR_SUPER2:
+		case SKINCOLOR_SUPERGOLD2:
 			blendcolor = V_GetColor(83);
 			break;
-		case SKINCOLOR_SUPER3:
+		case SKINCOLOR_SUPERGOLD3:
 			blendcolor = V_GetColor(73);
 			break;
-		case SKINCOLOR_SUPER4:
+		case SKINCOLOR_SUPERGOLD4:
 			blendcolor = V_GetColor(64);
 			break;
-		case SKINCOLOR_SUPER5:
+		case SKINCOLOR_SUPERGOLD5:
 			blendcolor = V_GetColor(67);
 			break;
 
-		case SKINCOLOR_TSUPER1:
-		case SKINCOLOR_TSUPER2:
-		case SKINCOLOR_TSUPER3:
-		case SKINCOLOR_TSUPER4:
-		case SKINCOLOR_TSUPER5:
-		case SKINCOLOR_KSUPER1:
-		case SKINCOLOR_KSUPER2:
-		case SKINCOLOR_KSUPER3:
-		case SKINCOLOR_KSUPER4:
-		case SKINCOLOR_KSUPER5:
+		case SKINCOLOR_SUPERPERIDOT1: // Super peridot
+			blendcolor = V_GetColor(88);
+			break;
+		case SKINCOLOR_SUPERPERIDOT2:
+			blendcolor = V_GetColor(188);
+			break;
+		case SKINCOLOR_SUPERPERIDOT3:
+			blendcolor = V_GetColor(189);
+			break;
+		case SKINCOLOR_SUPERPERIDOT4:
+			blendcolor = V_GetColor(190);
+			break;
+		case SKINCOLOR_SUPERPERIDOT5:
+			blendcolor = V_GetColor(191);
+			break;
+
+		case SKINCOLOR_SUPERCYAN1: // Super cyan
+			blendcolor = V_GetColor(128);
+			break;
+		case SKINCOLOR_SUPERCYAN2:
+			blendcolor = V_GetColor(131);
+			break;
+		case SKINCOLOR_SUPERCYAN3:
+			blendcolor = V_GetColor(133);
+			break;
+		case SKINCOLOR_SUPERCYAN4:
+			blendcolor = V_GetColor(134);
+			break;
+		case SKINCOLOR_SUPERCYAN5:
+			blendcolor = V_GetColor(136);
+			break;
+
+		case SKINCOLOR_SUPERPURPLE1: // Super purple
+			blendcolor = V_GetColor(144);
+			break;
+		case SKINCOLOR_SUPERPURPLE2:
+			blendcolor = V_GetColor(162);
+			break;
+		case SKINCOLOR_SUPERPURPLE3:
+			blendcolor = V_GetColor(164);
+			break;
+		case SKINCOLOR_SUPERPURPLE4:
+			blendcolor = V_GetColor(166);
+			break;
+		case SKINCOLOR_SUPERPURPLE5:
+			blendcolor = V_GetColor(168);
+			break;
+
+		case SKINCOLOR_SUPERRUST1: // Super rust
+			blendcolor = V_GetColor(51);
+			break;
+		case SKINCOLOR_SUPERRUST2:
+			blendcolor = V_GetColor(54);
+			break;
+		case SKINCOLOR_SUPERRUST3:
+			blendcolor = V_GetColor(68);
+			break;
+		case SKINCOLOR_SUPERRUST4:
+			blendcolor = V_GetColor(70);
+			break;
+		case SKINCOLOR_SUPERRUST5:
+			blendcolor = V_GetColor(234);
+			break;
+
+		case SKINCOLOR_SUPERTAN1: // Super tan
+			blendcolor = V_GetColor(80);
+			break;
+		case SKINCOLOR_SUPERTAN2:
+			blendcolor = V_GetColor(82);
+			break;
+		case SKINCOLOR_SUPERTAN3:
+			blendcolor = V_GetColor(84);
+			break;
+		case SKINCOLOR_SUPERTAN4:
+			blendcolor = V_GetColor(87);
+			break;
+		case SKINCOLOR_SUPERTAN5:
+			blendcolor = V_GetColor(247);
+			break;
+
 		default:
 			blendcolor = V_GetColor(255);
 			break;
diff --git a/src/p_user.c b/src/p_user.c
index 89ef6a3ad155b1345d3b3ee87f219bf031638510..6ce9b8f48444f33084b05c763deb76cf153f152e 100644
--- a/src/p_user.c
+++ b/src/p_user.c
@@ -3415,14 +3415,9 @@ static void P_DoSuperStuff(player_t *player)
 			player->mo->health--;
 		}
 
-		// future todo: a skin option for this, and possibly more colors
-		switch (player->skin)
-		{
-			case 1:  /* Tails    */ player->mo->color = SKINCOLOR_TSUPER1; break;
-			case 2:  /* Knux     */ player->mo->color = SKINCOLOR_KSUPER1; break;
-			default: /* everyone */ player->mo->color = SKINCOLOR_SUPER1; break;
-		}
-		player->mo->color += abs( ( (signed)( (unsigned)leveltime >> 1 ) % 9) - 4);
+		player->mo->color = (player->pflags & PF_GODMODE)
+		? (SKINCOLOR_SUPERSILVER1 + 5*((leveltime >> 1) % 7)) // A wholesome easter egg.
+		: skins[player->skin].supercolor + (unsigned)abs( ( (signed)(leveltime >> 1) % 9) - 4); // This is where super flashing is handled.
 
 		if ((cmd->forwardmove != 0 || cmd->sidemove != 0 || player->pflags & (PF_CARRIED|PF_ROPEHANG|PF_ITEMHANG|PF_MACESPIN))
 		&& !(leveltime % TICRATE) && (player->mo->momx || player->mo->momy))
diff --git a/src/r_draw.c b/src/r_draw.c
index c56888e0d2933848731f46c84d7eed39c5b165b5..47688db03d84f632d1e9b32eeb0408d3121ec534 100644
--- a/src/r_draw.c
+++ b/src/r_draw.c
@@ -135,7 +135,7 @@ static UINT8** translationtablecache[MAXSKINS + 4] = {NULL};
 
 // See also the enum skincolors_t
 // TODO Callum: Can this be translated?
-const char *Color_Names[MAXSKINCOLORS] =
+const char *Color_Names[MAXSKINCOLORS + NUMSUPERCOLORS] =
 {
 	"None",     	// SKINCOLOR_NONE
 	"White",    	// SKINCOLOR_WHITE
@@ -166,7 +166,17 @@ const char *Color_Names[MAXSKINCOLORS] =
 	"Lavender", 	// SKINCOLOR_LAVENDER
 	"Magenta",   	// SKINCOLOR_MAGENTA
 	"Pink",     	// SKINCOLOR_PINK
-	"Rosy"			// SKINCOLOR_ROSY
+	"Rosy",			// SKINCOLOR_ROSY
+	// Super behaves by different rules (one name per 5 colours), and will be accessed exclusively via R_GetSuperColorByName instead of R_GetColorByName.
+	"Silver",		// SKINCOLOR_SUPERSILVER1
+	"Red",			// SKINCOLOR_SUPERRED1
+	"Orange",		// SKINCOLOR_SUPERORANGE1
+	"Gold",			// SKINCOLOR_SUPERGOLD1
+	"Peridot",		// SKINCOLOR_SUPERPERIDOT1
+	"Cyan",			// SKINCOLOR_SUPERCYAN1
+	"Purple",		// SKINCOLOR_SUPERPURPLE1
+	"Rust",			// SKINCOLOR_SUPERRUST1
+	"Tan"			// SKINCOLOR_SUPERTAN1
 };
 
 /*
@@ -573,49 +583,186 @@ static void R_GenerateTranslationColormap(UINT8 *dest_colormap, INT32 skinnum, U
 		break;
 
 	// Super colors, from lightest to darkest!
-	case SKINCOLOR_SUPER1:
-		// Super White
+
+	// Super silvers.
+	case SKINCOLOR_SUPERSILVER1:
+		for (i = 0; i < 12; i++)
+			dest_colormap[starttranscolor + i] = (UINT8)0;
+		for (; i < 14; i++)
+			dest_colormap[starttranscolor + i] = (UINT8)1;
+		for (; i < 16; i++)
+			dest_colormap[starttranscolor + i] = (UINT8)(i-12);
+		break;
+
+	case SKINCOLOR_SUPERSILVER2:
+		for (i = 0; i < 3; i++)
+			dest_colormap[starttranscolor + i] = (UINT8)(i);
+		dest_colormap[starttranscolor + (i++)] = (UINT8)2;
+		for (; i < 8; i++)
+			dest_colormap[starttranscolor + i] = (UINT8)3;
+		for (; i < 14; i++)
+			dest_colormap[starttranscolor + i] = (UINT8)4;
+		for (; i < 16; i++)
+			dest_colormap[starttranscolor + i] = (UINT8)(i-9);
+		break;
+
+	case SKINCOLOR_SUPERSILVER3:
+		dest_colormap[starttranscolor] = (UINT8)1;
+		for (i = 1; i < 3; i++)
+			dest_colormap[starttranscolor + i] = (UINT8)2;
+		for (; i < 6; i++)
+			dest_colormap[starttranscolor + i] = (UINT8)3;
+		for (; i < 12; i++)
+			dest_colormap[starttranscolor + i] = (UINT8)4;
+		for (; i < 16; i++)
+			dest_colormap[starttranscolor + i] = (UINT8)(5 + ((i-12)*2));
+		break;
+
+	case SKINCOLOR_SUPERSILVER4:
+		dest_colormap[starttranscolor] = (UINT8)2;
+		for (i = 1; i < 3; i++)
+			dest_colormap[starttranscolor + i] = (UINT8)3;
+		for (; i < 9; i++)
+			dest_colormap[starttranscolor + i] = (UINT8)4;
+		for (; i < 16; i++)
+			dest_colormap[starttranscolor + i] = (UINT8)(5 + ((i-9)*2));
+		break;
+
+	case SKINCOLOR_SUPERSILVER5:
+		for (i = 0; i < 2; i++)
+			dest_colormap[starttranscolor + i] = (UINT8)3;
+		for (; i < 8; i++)
+			dest_colormap[starttranscolor + i] = (UINT8)4;
+		for (; i < 16; i++)
+			dest_colormap[starttranscolor + i] = (UINT8)(5 + ((i-8)*2));
+		break;
+
+	// Super reds.
+	case SKINCOLOR_SUPERRED1:
+		for (i = 0; i < 10; i++)
+			dest_colormap[starttranscolor + i] = (UINT8)0;
+		for (; i < 16; i++)
+			dest_colormap[starttranscolor + i] = (UINT8)(208 + ((i-10) >> 1));
+		break;
+
+	case SKINCOLOR_SUPERRED2:
+		for (i = 0; i < 3; i++)
+			dest_colormap[starttranscolor + i] = (UINT8)0;
+		for (; i < 12; i++)
+			dest_colormap[starttranscolor + i] = (UINT8)(208 + ((i-3) / 3));
+		for (; i < 16; i++)
+			dest_colormap[starttranscolor + i] = (UINT8)(32 + ((i-12) >> 1));
+		break;
+
+	case SKINCOLOR_SUPERRED3:
+		for (i = 0; i < 2; i++)
+			dest_colormap[starttranscolor + i] = (UINT8)0;
+		for (; i < 8; i++)
+			dest_colormap[starttranscolor + i] = (UINT8)(208 + ((i-2) >> 1));
+		for (; i < 16; i++)
+			dest_colormap[starttranscolor + i] = (UINT8)(32 + ((i-8) >> 1));
+		break;
+
+	case SKINCOLOR_SUPERRED4:
+		dest_colormap[starttranscolor] = (UINT8)0;
+		for (i = 1; i < 6; i++)
+			dest_colormap[starttranscolor + i] = (UINT8)(208 + (i >> 1));
+		for (; i < 16; i++)
+			dest_colormap[starttranscolor + i] = (UINT8)(32 + ((i-6) >> 1));
+		break;
+
+	case SKINCOLOR_SUPERRED5:
+		dest_colormap[starttranscolor] = (UINT8)208;
+		for (i = 1; i < 4; i++)
+			dest_colormap[starttranscolor + i] = (UINT8)(209 + (i >> 1));
+		for (; i < 16; i++)
+			dest_colormap[starttranscolor + i] = (UINT8)(32 + ((i-4) >> 1));
+		break;
+
+	// Super oranges.
+	case SKINCOLOR_SUPERORANGE1:
+		for (i = 0; i < 10; i++)
+			dest_colormap[starttranscolor + i] = (UINT8)0;
+		dest_colormap[starttranscolor + (i++)] = (UINT8)208;
+		for (; i < 16; i++)
+			dest_colormap[starttranscolor + i] = (UINT8)(48 + (i-11));
+		break;
+
+	case SKINCOLOR_SUPERORANGE2:
+		for (i = 0; i < 4; i++)
+			dest_colormap[starttranscolor + i] = (UINT8)0;
+		for (; i < 6; i++)
+			dest_colormap[starttranscolor + i] = (UINT8)208;
+		for (; i < 16; i++)
+			dest_colormap[starttranscolor + i] = (UINT8)(48 + ((i-6) >> 1));
+		break;
+
+	case SKINCOLOR_SUPERORANGE3:
+		for (i = 0; i < 2; i++)
+			dest_colormap[starttranscolor + i] = (UINT8)0;
+		for (; i < 4; i++)
+			dest_colormap[starttranscolor + i] = (UINT8)208;
+		for (; i < 16; i++)
+			dest_colormap[starttranscolor + i] = (UINT8)(48 + ((i-4) >> 1));
+		break;
+
+	case SKINCOLOR_SUPERORANGE4:
+		dest_colormap[starttranscolor] = (UINT8)0;
+		dest_colormap[starttranscolor + 1] = (UINT8)208;
+		for (i = 2; i < 13; i++)
+			dest_colormap[starttranscolor + i] = (UINT8)(48 + (i-2));
+		for (; i < 16; i++)
+			dest_colormap[starttranscolor + i] = (UINT8)(68 + (i-13));
+		break;
+
+	case SKINCOLOR_SUPERORANGE5:
+		dest_colormap[starttranscolor] = (UINT8)208;
+		for (i = 1; i < 12; i++)
+			dest_colormap[starttranscolor + i] = (UINT8)(48 + (i-1));
+		for (; i < 16; i++)
+			dest_colormap[starttranscolor + i] = (UINT8)(68 + (i-12));
+		break;
+
+	// Super golds.
+	case SKINCOLOR_SUPERGOLD1:
 		for (i = 0; i < 10; i++)
 			dest_colormap[starttranscolor + i] = (UINT8)0; // True white
 		for (; i < 12; i++) // White-yellow fade
-			dest_colormap[starttranscolor + i] = (UINT8)(80);
+			dest_colormap[starttranscolor + i] = (UINT8)80;
 		for (; i < 15; i++) // White-yellow fade
 			dest_colormap[starttranscolor + i] = (UINT8)(81 + (i-12));
-		dest_colormap[starttranscolor + 15] = (UINT8)(72);
+		dest_colormap[starttranscolor + 15] = (UINT8)72;
 		break;
 
-	case SKINCOLOR_SUPER2:
-		// Super Bright
+	case SKINCOLOR_SUPERGOLD2:
 		dest_colormap[starttranscolor] = (UINT8)(0);
 		for (i = 1; i < 4; i++) // White-yellow fade
 			dest_colormap[starttranscolor + i] = (UINT8)(80 + (i-1));
 		for (; i < 6; i++) // Yellow
-			dest_colormap[starttranscolor + i] = (UINT8)(83);
+			dest_colormap[starttranscolor + i] = (UINT8)83;
 		for (; i < 8; i++) // Yellow
-			dest_colormap[starttranscolor + i] = (UINT8)(72);
+			dest_colormap[starttranscolor + i] = (UINT8)72;
 		for (; i < 14; i++) // Yellow
-			dest_colormap[starttranscolor + i] = (UINT8)(73);
+			dest_colormap[starttranscolor + i] = (UINT8)73;
 		for (; i < 16; i++) // With a fine golden finish! :3
 			dest_colormap[starttranscolor + i] = (UINT8)(64 + (i-14));
 		break;
 
-	case SKINCOLOR_SUPER3:
-		// Super Yellow
+	case SKINCOLOR_SUPERGOLD3:
 		for (i = 0; i < 2; i++) // White-yellow fade
 			dest_colormap[starttranscolor + i] = (UINT8)(81 + i);
 		for (; i < 4; i++)
-			dest_colormap[starttranscolor + i] = (UINT8)(83);
+			dest_colormap[starttranscolor + i] = (UINT8)83;
 		for (; i < 6; i++) // Yellow
-			dest_colormap[starttranscolor + i] = (UINT8)(72);
+			dest_colormap[starttranscolor + i] = (UINT8)72;
 		for (; i < 12; i++) // Yellow
-			dest_colormap[starttranscolor + i] = (UINT8)(73);
+			dest_colormap[starttranscolor + i] = (UINT8)73;
 		for (; i < 16; i++) // With a fine golden finish! :3
 			dest_colormap[starttranscolor + i] = (UINT8)(64 + (i-12));
 		break;
 
-	case SKINCOLOR_SUPER4:
-		// "The SSNTails"
-		dest_colormap[starttranscolor] = 83; // Golden shine
+	case SKINCOLOR_SUPERGOLD4: // "The SSNTails"
+		dest_colormap[starttranscolor] = (UINT8)83; // Golden shine
 		for (i = 1; i < 3; i++) // Yellow
 			dest_colormap[starttranscolor + i] = (UINT8)(72);
 		for (; i < 9; i++) // Yellow
@@ -624,30 +771,309 @@ static void R_GenerateTranslationColormap(UINT8 *dest_colormap, INT32 skinnum, U
 			dest_colormap[starttranscolor + i] = (UINT8)(64 + (i-9));
 		break;
 
-	case SKINCOLOR_SUPER5:
-		// Golden Delicious
+	case SKINCOLOR_SUPERGOLD5: // Golden Delicious
 		for (i = 0; i < 2; i++) // Yellow
 			dest_colormap[starttranscolor + i] = (UINT8)(72);
 		for (; i < 8; i++) // Yellow
 			dest_colormap[starttranscolor + i] = (UINT8)(73);
-		for (; i < 15; i++) // With a fine golden finish! :3
+		for (; i < 16; i++) // With a fine golden finish! :3
 			dest_colormap[starttranscolor + i] = (UINT8)(64 + (i-8));
-		dest_colormap[starttranscolor + 15] = (UINT8)63;
-		break;
-
-	// Super Tails and Knuckles, who really should be dummied out by now
-	case SKINCOLOR_TSUPER1:
-	case SKINCOLOR_TSUPER2:
-	case SKINCOLOR_TSUPER3:
-	case SKINCOLOR_TSUPER4:
-	case SKINCOLOR_TSUPER5:
-	case SKINCOLOR_KSUPER1:
-	case SKINCOLOR_KSUPER2:
-	case SKINCOLOR_KSUPER3:
-	case SKINCOLOR_KSUPER4:
-	case SKINCOLOR_KSUPER5:
-		for (i = 0; i < SKIN_RAMP_LENGTH; i++)
-			dest_colormap[starttranscolor + i] = 0xFF;
+		break;
+
+	// Super peridots. (nyeheheheh)
+	case SKINCOLOR_SUPERPERIDOT1:
+		for (i = 0; i < 10; i++)
+			dest_colormap[starttranscolor + i] = (UINT8)0;
+		for (; i < 13; i++)
+			dest_colormap[starttranscolor + i] = (UINT8)88;
+		for (; i < 16; i++)
+			dest_colormap[starttranscolor + i] = (UINT8)188;
+		break;
+
+	case SKINCOLOR_SUPERPERIDOT2:
+		dest_colormap[starttranscolor] = (UINT8)(0);
+		for (i = 1; i < 4; i++)
+			dest_colormap[starttranscolor + i] = (UINT8)88;
+		for (; i < 8; i++)
+			dest_colormap[starttranscolor + i] = (UINT8)188;
+		for (; i < 14; i++)
+			dest_colormap[starttranscolor + i] = (UINT8)189;
+		for (; i < 16; i++)
+			dest_colormap[starttranscolor + i] = (UINT8)190;
+		break;
+
+	case SKINCOLOR_SUPERPERIDOT3:
+		for (i = 0; i < 2; i++)
+			dest_colormap[starttranscolor + i] = (UINT8)88;
+		for (; i < 6; i++)
+			dest_colormap[starttranscolor + i] = (UINT8)188;
+		for (; i < 12; i++)
+			dest_colormap[starttranscolor + i] = (UINT8)189;
+		for (; i < 16; i++)
+			dest_colormap[starttranscolor + i] = (UINT8)(190 + ((i-12) >> 1));
+		break;
+
+	case SKINCOLOR_SUPERPERIDOT4:
+		dest_colormap[starttranscolor] = (UINT8)88;
+		for (i = 1; i < 3; i++)
+			dest_colormap[starttranscolor + i] = (UINT8)188;
+		for (; i < 9; i++)
+			dest_colormap[starttranscolor + i] = (UINT8)189;
+		for (; i < 13; i++)
+			dest_colormap[starttranscolor + i] = (UINT8)(190 + ((i-9) >> 1));
+		for (; i < 15; i++)
+			dest_colormap[starttranscolor + i] = (UINT8)94;
+		dest_colormap[starttranscolor + i] = (UINT8)95;
+		break;
+
+	case SKINCOLOR_SUPERPERIDOT5:
+		for (i = 0; i < 2; i++)
+			dest_colormap[starttranscolor + i] = (UINT8)188;
+		for (; i < 8; i++)
+			dest_colormap[starttranscolor + i] = (UINT8)189;
+		for (; i < 12; i++)
+			dest_colormap[starttranscolor + i] = (UINT8)(190 + ((i-8) >> 1));
+		for (; i < 14; i++)
+			dest_colormap[starttranscolor + i] = (UINT8)94;
+		dest_colormap[starttranscolor + (i++)] = (UINT8)95;
+		dest_colormap[starttranscolor + i] = (UINT8)119;
+		break;
+
+	// Super cyans.
+	case SKINCOLOR_SUPERCYAN1:
+		for (i = 0; i < 10; i++)
+			dest_colormap[starttranscolor + i] = (UINT8)0;
+		for (; i < 12; i++)
+			dest_colormap[starttranscolor + i] = (UINT8)128;
+		for (; i < 16; i++)
+			dest_colormap[starttranscolor + i] = (UINT8)(129 + (i-12));
+		break;
+
+	case SKINCOLOR_SUPERCYAN2:
+		dest_colormap[starttranscolor] = (UINT8)0;
+		for (i = 1; i < 4; i++)
+			dest_colormap[starttranscolor + i] = (UINT8)(128 + (i-1));
+		for (; i < 8; i++)
+			dest_colormap[starttranscolor + i] = (UINT8)(131 + ((i-4) >> 1));
+		for (; i < 14; i++)
+			dest_colormap[starttranscolor + i] = (UINT8)133;
+		for (; i < 16; i++)
+			dest_colormap[starttranscolor + i] = (UINT8)134;
+		break;
+
+	case SKINCOLOR_SUPERCYAN3:
+		for (i = 0; i < 2; i++)
+			dest_colormap[starttranscolor + i] = (UINT8)(129 + i);
+		for (; i < 6; i++)
+			dest_colormap[starttranscolor + i] = (UINT8)(131 + ((i-2) >> 1));
+		for (; i < 12; i++)
+			dest_colormap[starttranscolor + i] = (UINT8)133;
+		for (; i < 16; i++)
+			dest_colormap[starttranscolor + i] = (UINT8)(134 + ((i-12) >> 1));
+		break;
+
+	case SKINCOLOR_SUPERCYAN4:
+		dest_colormap[starttranscolor] = (UINT8)131;
+		for (i = 1; i < 3; i++)
+			dest_colormap[starttranscolor + i] = (UINT8)132;
+		for (; i < 9; i++)
+			dest_colormap[starttranscolor + i] = (UINT8)133;
+		for (; i < 13; i++)
+			dest_colormap[starttranscolor + i] = (UINT8)(134 + ((i-9) >> 1));
+		for (; i < 16; i++)
+			dest_colormap[starttranscolor + i] = (UINT8)(136 + (i-13));
+		break;
+
+	case SKINCOLOR_SUPERCYAN5:
+		for (i = 0; i < 2; i++)
+			dest_colormap[starttranscolor + i] = (UINT8)132;
+		for (; i < 8; i++)
+			dest_colormap[starttranscolor + i] = (UINT8)133;
+		for (; i < 12; i++)
+			dest_colormap[starttranscolor + i] = (UINT8)(134 + ((i-8) >> 1));
+		for (; i < 16; i++)
+			dest_colormap[starttranscolor + i] = (UINT8)(136 + (i-12));
+		break;
+
+	// Super purples.
+	case SKINCOLOR_SUPERPURPLE1:
+		for (i = 0; i < 10; i++)
+			dest_colormap[starttranscolor + i] = (UINT8)0;
+		for (; i < 12; i++)
+			dest_colormap[starttranscolor + i] = (UINT8)144;
+		for (; i < 16; i++)
+			dest_colormap[starttranscolor + i] = (UINT8)(160 + (i-12));
+		break;
+
+	case SKINCOLOR_SUPERPURPLE2:
+		dest_colormap[starttranscolor] = (UINT8)0;
+		dest_colormap[starttranscolor + 1] = (UINT8)144;
+		for (i = 2; i < 4; i++)
+			dest_colormap[starttranscolor + i] = (UINT8)(160 + (i-2));
+		for (; i < 8; i++)
+			dest_colormap[starttranscolor + i] = (UINT8)(162 + ((i-4) >> 1));
+		for (; i < 14; i++)
+			dest_colormap[starttranscolor + i] = (UINT8)164;
+		for (; i < 16; i++)
+			dest_colormap[starttranscolor + i] = (UINT8)165;
+		break;
+
+	case SKINCOLOR_SUPERPURPLE3:
+		for (i = 0; i < 2; i++)
+			dest_colormap[starttranscolor + i] = (UINT8)(160 + i);
+		for (; i < 6; i++)
+			dest_colormap[starttranscolor + i] = (UINT8)(162 + ((i-2) >> 1));
+		for (; i < 12; i++)
+			dest_colormap[starttranscolor + i] = (UINT8)164;
+		for (; i < 16; i++)
+			dest_colormap[starttranscolor + i] = (UINT8)(165 + ((i-12) >> 1));
+		break;
+
+	case SKINCOLOR_SUPERPURPLE4:
+		dest_colormap[starttranscolor] = (UINT8)162;
+		for (i = 1; i < 3; i++)
+			dest_colormap[starttranscolor + i] = (UINT8)163;
+		for (; i < 9; i++)
+			dest_colormap[starttranscolor + i] = (UINT8)164;
+		for (; i < 13; i++)
+			dest_colormap[starttranscolor + i] = (UINT8)(165 + ((i-9) >> 1));
+		for (; i < 16; i++)
+			dest_colormap[starttranscolor + i] = (UINT8)(167 + (i-13));
+		break;
+
+	case SKINCOLOR_SUPERPURPLE5:
+		for (i = 0; i < 2; i++)
+			dest_colormap[starttranscolor + i] = (UINT8)163;
+		for (; i < 8; i++)
+			dest_colormap[starttranscolor + i] = (UINT8)164;
+		for (; i < 12; i++)
+			dest_colormap[starttranscolor + i] = (UINT8)(165 + ((i-8) >> 1));
+		for (; i < 15; i++)
+			dest_colormap[starttranscolor + i] = (UINT8)(167 + (i-12));
+		dest_colormap[starttranscolor + i] = (UINT8)253;
+		break;
+
+	// Super rusts.
+	case SKINCOLOR_SUPERRUST1:
+		for (i = 0; i < 2; i++)
+			dest_colormap[starttranscolor + i] = (UINT8)0;
+		for (; i < 5; i++)
+			dest_colormap[starttranscolor + i] = (UINT8)208;
+		for (; i < 7; i++)
+			dest_colormap[starttranscolor + i] = (UINT8)48;
+		for (; i < 10; i++)
+			dest_colormap[starttranscolor + i] = (UINT8)(49 + (i-7));
+		for (; i < 12; i++)
+			dest_colormap[starttranscolor + i] = (UINT8)(55 + ((i-10)*3));
+		for (; i < 16; i++)
+			dest_colormap[starttranscolor + i] = (UINT8)(68 + (i-11));
+		break;
+
+	case SKINCOLOR_SUPERRUST2:
+		for (i = 0; i < 4; i++)
+			dest_colormap[starttranscolor + i] = (UINT8)48;
+		for (; i < 9; i++)
+			dest_colormap[starttranscolor + i] = (UINT8)(49 + (i-4));
+		for (; i < 11; i++)
+			dest_colormap[starttranscolor + i] = (UINT8)(56 + ((i-9)*2));
+		for (; i < 15; i++)
+			dest_colormap[starttranscolor + i] = (UINT8)(68 + (i-11));
+		dest_colormap[starttranscolor + i] = (UINT8)71;
+		break;
+
+	case SKINCOLOR_SUPERRUST3:
+		dest_colormap[starttranscolor] = (UINT8)49;
+		for (i = 1; i < 3; i++)
+			dest_colormap[starttranscolor + i] = (UINT8)50;
+		for (; i < 5; i++)
+			dest_colormap[starttranscolor + i] = (UINT8)(51 + (i-3));
+		for (; i < 8; i++)
+			dest_colormap[starttranscolor + i] = (UINT8)(54 + (i-5));
+		dest_colormap[starttranscolor + (i++)] = (UINT8)58;
+		for (; i < 15; i++)
+			dest_colormap[starttranscolor + i] = (UINT8)(68 + ((i-7) >> 1));
+		dest_colormap[starttranscolor + i] = (UINT8)46;
+		break;
+
+	case SKINCOLOR_SUPERRUST4:
+		dest_colormap[starttranscolor] = (UINT8)83;
+		dest_colormap[starttranscolor + 1] = (UINT8)72;
+		for (i = 2; i < 6; i++)
+			dest_colormap[starttranscolor + i] = (UINT8)(64 + (i-2));
+		for (; i < 14; i++)
+			dest_colormap[starttranscolor + i] = (UINT8)(68 + ((i-6) >> 1));
+		for (; i < 16; i++)
+			dest_colormap[starttranscolor + i] = (UINT8)46;
+		break;
+
+	case SKINCOLOR_SUPERRUST5:
+		for (i = 0; i < 3; i++)
+			dest_colormap[starttranscolor + i] = (UINT8)(64 + i);
+		for (; i < 7; i++)
+			dest_colormap[starttranscolor + i] = (UINT8)(67 + ((i-3) >> 1));
+		for (; i < 12; i++)
+			dest_colormap[starttranscolor + i] = (UINT8)(233 + (i-7));
+		for (; i < 16; i++)
+			dest_colormap[starttranscolor + i] = (UINT8)(238 + ((i-12) >> 1));
+		break;
+
+	case SKINCOLOR_SUPERTAN1:
+		for (i = 0; i < 10; i++)
+			dest_colormap[starttranscolor + i] = (UINT8)0;
+		for (; i < 16; i++)
+			dest_colormap[starttranscolor + i] = (UINT8)(80 + ((i-10) >> 1));
+		break;
+
+	case SKINCOLOR_SUPERTAN2:
+		dest_colormap[starttranscolor] = (UINT8)0;
+		for (i = 1; i < 7; i++)
+			dest_colormap[starttranscolor + i] = (UINT8)(80 + ((i-1) >> 1));
+		dest_colormap[starttranscolor + (i++)] = (UINT8)82;
+		for (; i < 12; i++)
+			dest_colormap[starttranscolor + i] = (UINT8)84;
+		for (; i < 15; i++)
+			dest_colormap[starttranscolor + i] = (UINT8)(85 + (i-12));
+		dest_colormap[starttranscolor + i] = (UINT8)245;
+		break;
+
+	case SKINCOLOR_SUPERTAN3:
+		dest_colormap[starttranscolor] = (UINT8)80;
+		for (i = 1; i < 5; i++)
+			dest_colormap[starttranscolor + i] = (UINT8)(81 + ((i-1) >> 1));
+		dest_colormap[starttranscolor + (i++)] = (UINT8)82;
+		for (; i < 10; i++)
+			dest_colormap[starttranscolor + i] = (UINT8)84;
+		for (; i < 13; i++)
+			dest_colormap[starttranscolor + i] = (UINT8)(85 + (i-10));
+		for (; i < 16; i++)
+			dest_colormap[starttranscolor + i] = (UINT8)(245 + ((i-13)*2));
+		break;
+
+	case SKINCOLOR_SUPERTAN4:
+		dest_colormap[starttranscolor] = (UINT8)81;
+		for (i = 1; i < 5; i++)
+			dest_colormap[starttranscolor + i] = (UINT8)82;
+		for (; i < 8; i++)
+			dest_colormap[starttranscolor + i] = (UINT8)84;
+		for (; i < 11; i++)
+			dest_colormap[starttranscolor + i] = (UINT8)(85 + (i-8));
+		for (; i < 15; i++)
+			dest_colormap[starttranscolor + i] = (UINT8)(245 + ((i-11)*2));
+		dest_colormap[starttranscolor + i] = (UINT8)237;
+		break;
+
+	case SKINCOLOR_SUPERTAN5:
+		for (i = 0; i < 2; i++)
+			dest_colormap[starttranscolor + i] = (UINT8)82;
+		for (; i < 5; i++)
+			dest_colormap[starttranscolor + i] = (UINT8)84;
+		for (; i < 8; i++)
+			dest_colormap[starttranscolor + i] = (UINT8)(85 + (i-5));
+		for (; i < 12; i++)
+			dest_colormap[starttranscolor + i] = (UINT8)(245 + (i-8));
+		for (; i < 15; i++)
+			dest_colormap[starttranscolor + i] = (UINT8)(237 + (i-12));
+		dest_colormap[starttranscolor + i] = (UINT8)239;
 		break;
 
 	default:
@@ -731,6 +1157,17 @@ UINT8 R_GetColorByName(const char *name)
 	return 0;
 }
 
+UINT8 R_GetSuperColorByName(const char *name)
+{
+	UINT8 color = (UINT8)atoi(name);
+	if (color > MAXSKINCOLORS && color < MAXTRANSLATIONS)
+		return color;
+	for (color = 0; color < NUMSUPERCOLORS; color++)
+		if (!stricmp(Color_Names[color + MAXSKINCOLORS], name))
+			return ((color*5) + MAXSKINCOLORS);
+	return 0;
+}
+
 // ==========================================================================
 //               COMMON DRAWER FOR 8 AND 16 BIT COLOR MODES
 // ==========================================================================
diff --git a/src/r_draw.h b/src/r_draw.h
index 6d85bd6a538fec09a225b669dce6f1e54cdab00e..60c3c9db6edeccb2afa25e9a25ed8347be149c12 100644
--- a/src/r_draw.h
+++ b/src/r_draw.h
@@ -111,6 +111,7 @@ void R_InitTranslationTables(void);
 UINT8* R_GetTranslationColormap(INT32 skinnum, skincolors_t color, UINT8 flags);
 void R_FlushTranslationColormapCache(void);
 UINT8 R_GetColorByName(const char *name);
+UINT8 R_GetSuperColorByName(const char *name);
 
 // Custom player skin translation
 void R_InitViewBuffer(INT32 width, INT32 height);
diff --git a/src/r_things.c b/src/r_things.c
index 7d7f7f093d3fb799a8c3ef3d82e604a904cf0afe..9e63f0304732cbf08edc6011287bb93b7b4d7a0e 100644
--- a/src/r_things.c
+++ b/src/r_things.c
@@ -2288,6 +2288,7 @@ static void Sk_SetDefaultValue(skin_t *skin)
 
 	skin->starttranscolor = 96;
 	skin->prefcolor = SKINCOLOR_GREEN;
+	skin->supercolor = SKINCOLOR_SUPERGOLD1;
 	skin->prefoppositecolor = 0; // use tables
 
 	skin->normalspeed = 36<<FRACBITS;
@@ -2658,6 +2659,8 @@ void R_AddSkins(UINT16 wadnum)
 			GETSKINCOLOR(prefcolor)
 			GETSKINCOLOR(prefoppositecolor)
 #undef GETSKINCOLOR
+			else if (!stricmp(stoken, "supercolor"))
+				skin->supercolor = R_GetSuperColorByName(value);
 
 #define GETFLOAT(field) else if (!stricmp(stoken, #field)) skin->field = FLOAT_TO_FIXED(atof(value));
 			GETFLOAT(jumpfactor)
diff --git a/src/r_things.h b/src/r_things.h
index 651950f053a517f41e9592c7b91374ed6a36e65d..d4944734cb9faa41d53a9d7a2c5a19b6551cb87a 100644
--- a/src/r_things.h
+++ b/src/r_things.h
@@ -103,6 +103,7 @@ typedef struct
 	// Definable color translation table
 	UINT8 starttranscolor;
 	UINT8 prefcolor;
+	UINT8 supercolor;
 	UINT8 prefoppositecolor; // if 0 use tables instead
 
 	fixed_t highresscale; // scale of highres, default is 0.5
diff --git a/src/st_stuff.c b/src/st_stuff.c
index b37a173e3f297b5cdca2167b8d460d9b1564a105..2a1c4956aded41da85a1e433eacc22c9be5e6dc5 100644
--- a/src/st_stuff.c
+++ b/src/st_stuff.c
@@ -893,7 +893,7 @@ static void ST_drawFirstPersonHUD(void)
 // [21:42] <+Rob> Beige - Lavender - Steel Blue - Peach - Orange - Purple - Silver - Yellow - Pink - Red - Blue - Green - Cyan - Gold
 static skincolors_t linkColor[14] =
 {SKINCOLOR_BEIGE,  SKINCOLOR_LAVENDER, SKINCOLOR_AZURE, SKINCOLOR_PEACH, SKINCOLOR_ORANGE,
- SKINCOLOR_MAGENTA, SKINCOLOR_SILVER,   SKINCOLOR_SUPER4,    SKINCOLOR_PINK,  SKINCOLOR_RED,
+ SKINCOLOR_MAGENTA, SKINCOLOR_SILVER,   SKINCOLOR_SUPERGOLD4,    SKINCOLOR_PINK,  SKINCOLOR_RED,
  SKINCOLOR_BLUE,   SKINCOLOR_GREEN,    SKINCOLOR_CYAN,      SKINCOLOR_GOLD};
 
 static void ST_drawNightsRecords(void)
@@ -1299,7 +1299,7 @@ static void ST_drawNiGHTSHUD(void)
 				nightsnum, SKINCOLOR_RED);
 		else
 			ST_DrawNightsOverlayNum(160 + numbersize, STRINGY(12), SPLITFLAGS(V_SNAPTOTOP), realnightstime,
-				nightsnum, SKINCOLOR_SUPER4);
+				nightsnum, SKINCOLOR_SUPERGOLD4);
 
 		// Show exact time in debug
 		if (cv_debug & DBG_NIGHTSBASIC)