diff --git a/src/dehacked.c b/src/dehacked.c index c0bf96cc7..b1ec86055 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 e916a151f..033cc71b3 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 a7a722b42..4de83fda1 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, + 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. diff --git a/src/g_game.c b/src/g_game.c index 70b963912..c12d3b25d 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 6628d1317..f602794c9 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 89ef6a3ad..6ce9b8f48 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 c56888e0d..47688db03 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; + // 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 6d85bd6a5..60c3c9db6 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 7d7f7f093..9e63f0304 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<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 651950f05..d4944734c 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 b37a173e3..2a1c4956a 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)