SUPERCOLOR BONANZA COMMIT.

* Several new supercolours.
	- SKINCOLOR_SUPERSILVER1-5 (for fun) - "Silver"
	- SKINCOLOR_SUPERPERIDOT1-5 (nyeheheh) - "Peridot"
	- SKINCOLOR_SUPERCYAN1-5 (for fun) - "Cyan"
	- SKINCOLOR_SUPERPURPLE1-5 (for fun) - "Purple"
	- SKINCOLOR_SUPERRUST1-5 (mecha/metal sonic) - "Rust"
	- SKINCOLOR_SUPERTAN1-5 (shadow/silver the hedgehog) - "Tan"
* SKINCOLOR_SUPER1-5 renamed to SKINCOLOR_SUPERGOLD1-5, one index for darkest is changed - "Gold"
* SKINCOLOR_TSUPER1-5 renamed to SKINCOLOR_SUPERORANGE1-5, ported properly to the new palette - "Orange"
* SKINCOLOR_KSUPER1-5 renamed to SKINCOLOR_SUPERRED1-5, ported properly to the new palette - "Red"

* new S_SKIN attribute - supercolor - uses an entirely different function to get the names (R_GetSuperColorByName instead of R_GetColorByName)

* a fun little secret - typing "god on" in the console whilst super makes the player hyper (visual only, no sparkles - just rainbow flash) - can be removed if no fun is allowed
This commit is contained in:
toasterbabe 2016-08-10 19:48:20 +01:00
parent bc7389327a
commit 810e1ec041
11 changed files with 736 additions and 100 deletions

View File

@ -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[] = {

View File

@ -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

View File

@ -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,
SKINCOLOR_SUPERSILVER1 = MAXSKINCOLORS,
SKINCOLOR_SUPERSILVER2,
SKINCOLOR_SUPERSILVER3,
SKINCOLOR_SUPERSILVER4,
SKINCOLOR_SUPERSILVER5,
// Super Tails
SKINCOLOR_TSUPER1,
SKINCOLOR_TSUPER2,
SKINCOLOR_TSUPER3,
SKINCOLOR_TSUPER4,
SKINCOLOR_TSUPER5,
SKINCOLOR_SUPERRED1,
SKINCOLOR_SUPERRED2,
SKINCOLOR_SUPERRED3,
SKINCOLOR_SUPERRED4,
SKINCOLOR_SUPERRED5,
// Super Knuckles
SKINCOLOR_KSUPER1,
SKINCOLOR_KSUPER2,
SKINCOLOR_KSUPER3,
SKINCOLOR_KSUPER4,
SKINCOLOR_KSUPER5,
SKINCOLOR_SUPERORANGE1,
SKINCOLOR_SUPERORANGE2,
SKINCOLOR_SUPERORANGE3,
SKINCOLOR_SUPERORANGE4,
SKINCOLOR_SUPERORANGE5,
MAXTRANSLATIONS
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.

View File

@ -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)

View File

@ -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;

View File

@ -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))

View File

@ -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;
// 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
// ==========================================================================

View File

@ -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);

View File

@ -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)

View File

@ -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

View File

@ -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)