diff --git a/src/dehacked.c b/src/dehacked.c index e361bbc8e..142a14efc 100644 --- a/src/dehacked.c +++ b/src/dehacked.c @@ -6269,13 +6269,9 @@ static const char *const STATE_LIST[] = { // array length left dynamic for sanit "S_EMBLEM26", // Chaos Emeralds - "S_EMERALD_CHAOS1", - "S_EMERALD_CHAOS2", - "S_EMERALD_CHAOS3", - "S_EMERALD_CHAOS4", - "S_EMERALD_CHAOS5", - "S_EMERALD_CHAOS6", - "S_EMERALD_CHAOS7", + "S_CHAOSEMERALD1", + "S_CHAOSEMERALD2", + "S_CHAOSEMERALD_UNDER", // Emerald hunt shards "S_SHRD1", @@ -10775,67 +10771,67 @@ static const char *COLOR_ENUMS[] = { // Rejigged for Kart. // Special super colors // Super Sonic Yellow - "SUPER1", // SKINCOLOR_SUPER1 - "SUPER2", // SKINCOLOR_SUPER2, - "SUPER3", // SKINCOLOR_SUPER3, - "SUPER4", // SKINCOLOR_SUPER4, - "SUPER5", // SKINCOLOR_SUPER5, + "SUPERSILVER1", + "SUPERSILVER2", + "SUPERSILVER3", + "SUPERSILVER4", + "SUPERSILVER5", - // Super Tails Orange - "TSUPER1", // SKINCOLOR_TSUPER1, - "TSUPER2", // SKINCOLOR_TSUPER2, - "TSUPER3", // SKINCOLOR_TSUPER3, - "TSUPER4", // SKINCOLOR_TSUPER4, - "TSUPER5", // SKINCOLOR_TSUPER5, + "SUPERRED1", + "SUPERRED2", + "SUPERRED3", + "SUPERRED4", + "SUPERRED5", - // Super Knuckles Red - "KSUPER1", // SKINCOLOR_KSUPER1, - "KSUPER2", // SKINCOLOR_KSUPER2, - "KSUPER3", // SKINCOLOR_KSUPER3, - "KSUPER4", // SKINCOLOR_KSUPER4, - "KSUPER5", // SKINCOLOR_KSUPER5, + "SUPERORANGE1", + "SUPERORANGE2", + "SUPERORANGE3", + "SUPERORANGE4", + "SUPERORANGE5", - // Hyper Sonic Pink - "PSUPER1", // SKINCOLOR_PSUPER1, - "PSUPER2", // SKINCOLOR_PSUPER2, - "PSUPER3", // SKINCOLOR_PSUPER3, - "PSUPER4", // SKINCOLOR_PSUPER4, - "PSUPER5", // SKINCOLOR_PSUPER5, + "SUPERGOLD1", + "SUPERGOLD2", + "SUPERGOLD3", + "SUPERGOLD4", + "SUPERGOLD5", - // Hyper Sonic Blue - "BSUPER1", // SKINCOLOR_BSUPER1, - "BSUPER2", // SKINCOLOR_BSUPER2, - "BSUPER3", // SKINCOLOR_BSUPER3, - "BSUPER4", // SKINCOLOR_BSUPER4, - "BSUPER5", // SKINCOLOR_BSUPER5, + "SUPERPERIDOT1", + "SUPERPERIDOT2", + "SUPERPERIDOT3", + "SUPERPERIDOT4", + "SUPERPERIDOT5", - // Aqua Super - "ASUPER1", // SKINCOLOR_ASUPER1, - "ASUPER2", // SKINCOLOR_ASUPER2, - "ASUPER3", // SKINCOLOR_ASUPER3, - "ASUPER4", // SKINCOLOR_ASUPER4, - "ASUPER5", // SKINCOLOR_ASUPER5, + "SUPERSKY1", + "SUPERSKY2", + "SUPERSKY3", + "SUPERSKY4", + "SUPERSKY5", - // Hyper Sonic Green - "GSUPER1", // SKINCOLOR_GSUPER1, - "GSUPER2", // SKINCOLOR_GSUPER2, - "GSUPER3", // SKINCOLOR_GSUPER3, - "GSUPER4", // SKINCOLOR_GSUPER4, - "GSUPER5", // SKINCOLOR_GSUPER5, + "SUPERPURPLE1", + "SUPERPURPLE2", + "SUPERPURPLE3", + "SUPERPURPLE4", + "SUPERPURPLE5", - // Hyper Sonic White - "WSUPER1", // SKINCOLOR_WSUPER1, - "WSUPER2", // SKINCOLOR_WSUPER2, - "WSUPER3", // SKINCOLOR_WSUPER3, - "WSUPER4", // SKINCOLOR_WSUPER4, - "WSUPER5", // SKINCOLOR_WSUPER5, + "SUPERRUST1", + "SUPERRUST2", + "SUPERRUST3", + "SUPERRUST4", + "SUPERRUST5", - // Creamy Super (Shadow?) - "CSUPER1", // SKINCOLOR_CSUPER1, - "CSUPER2", // SKINCOLOR_CSUPER2, - "CSUPER3", // SKINCOLOR_CSUPER3, - "CSUPER4", // SKINCOLOR_CSUPER4, - "CSUPER5" // SKINCOLOR_CSUPER5, + "SUPERTAN1", + "SUPERTAN2", + "SUPERTAN3", + "SUPERTAN4", + "SUPERTAN5", + + "CHAOSEMERALD1", + "CHAOSEMERALD2", + "CHAOSEMERALD3", + "CHAOSEMERALD4", + "CHAOSEMERALD5", + "CHAOSEMERALD6", + "CHAOSEMERALD7" }; static const char *const POWERS_LIST[] = { diff --git a/src/doomdef.h b/src/doomdef.h index c301640ad..c51cf4a5f 100644 --- a/src/doomdef.h +++ b/src/doomdef.h @@ -386,6 +386,14 @@ typedef enum SKINCOLOR_SUPERTAN4, SKINCOLOR_SUPERTAN5, + SKINCOLOR_CHAOSEMERALD1, + SKINCOLOR_CHAOSEMERALD2, + SKINCOLOR_CHAOSEMERALD3, + SKINCOLOR_CHAOSEMERALD4, + SKINCOLOR_CHAOSEMERALD5, + SKINCOLOR_CHAOSEMERALD6, + SKINCOLOR_CHAOSEMERALD7, + SKINCOLOR_FIRSTFREESLOT, SKINCOLOR_LASTFREESLOT = SKINCOLOR_FIRSTFREESLOT + NUMCOLORFREESLOTS - 1, diff --git a/src/info.c b/src/info.c index d32980537..2f9b1faf1 100644 --- a/src/info.c +++ b/src/info.c @@ -139,13 +139,7 @@ char sprnames[NUMSPRITES + 1][5] = "NCHP", // NiGHTS chip "NSTR", // NiGHTS star "EMBM", // Emblem - "EMC1", // Chaos Emeralds - "EMC2", - "EMC3", - "EMC4", - "EMC5", - "EMC6", - "EMC7", + "EMRC", // Chaos Emeralds "SHRD", // Emerald Hunt // Interactive Objects @@ -1907,13 +1901,9 @@ state_t states[NUMSTATES] = {SPR_EMBM, 25, -1, {NULL}, 0, 0, S_NULL}, // S_EMBLEM26 // Chaos Emeralds - {SPR_EMC1, FF_FULLBRIGHT, -1, {NULL}, 0, 0, S_NULL}, // S_EMERALD_CHAOS1 - {SPR_EMC2, FF_FULLBRIGHT, -1, {NULL}, 0, 0, S_NULL}, // S_EMERALD_CHAOS2 - {SPR_EMC3, FF_FULLBRIGHT, -1, {NULL}, 0, 0, S_NULL}, // S_EMERALD_CHAOS3 - {SPR_EMC4, FF_FULLBRIGHT, -1, {NULL}, 0, 0, S_NULL}, // S_EMERALD_CHAOS4 - {SPR_EMC5, FF_FULLBRIGHT, -1, {NULL}, 0, 0, S_NULL}, // S_EMERALD_CHAOS5 - {SPR_EMC6, FF_FULLBRIGHT, -1, {NULL}, 0, 0, S_NULL}, // S_EMERALD_CHAOS6 - {SPR_EMC7, FF_FULLBRIGHT, -1, {NULL}, 0, 0, S_NULL}, // S_EMERALD_CHAOS7 + {SPR_EMRC, FF_FULLBRIGHT, 1, {NULL}, 0, 0, S_CHAOSEMERALD2}, // S_CHAOSEMERALD1 + {SPR_EMRC, FF_FULLBRIGHT|FF_TRANSADD, 1, {NULL}, 0, 0, S_CHAOSEMERALD1}, // S_CHAOSEMERALD2 + {SPR_EMRC, FF_FULLBRIGHT|1, -1, {NULL}, 1, 0, S_NULL}, // S_CHAOSEMERALD_UNDER // Emerald hunt shards {SPR_SHRD, 0, -1, {NULL}, 0, 0, S_NULL}, // S_SHRD1 @@ -3757,14 +3747,14 @@ state_t states[NUMSTATES] = {SPR_CAPS, 0, -1, {NULL}, 0, 0, S_NULL}, // S_EGGCAPSULE // Orbiting Chaos Emeralds/Ideya for NiGHTS - {SPR_EMC1, FF_FULLBRIGHT, 1, {A_OrbitNights}, ANG2*2, 0, S_ORBITEM1}, // S_ORBITEM1 - {SPR_EMC2, FF_FULLBRIGHT, 1, {A_OrbitNights}, ANG2*2, 0, S_ORBITEM2}, // S_ORBITEM2 - {SPR_EMC3, FF_FULLBRIGHT, 1, {A_OrbitNights}, ANG2*2, 0, S_ORBITEM3}, // S_ORBITEM3 - {SPR_EMC4, FF_FULLBRIGHT, 1, {A_OrbitNights}, ANG2*2, 0, S_ORBITEM4}, // S_ORBITEM4 - {SPR_EMC5, FF_FULLBRIGHT, 1, {A_OrbitNights}, ANG2*2, 0, S_ORBITEM5}, // S_ORBITEM5 - {SPR_EMC6, FF_FULLBRIGHT, 1, {A_OrbitNights}, ANG2*2, 0, S_ORBITEM6}, // S_ORBITEM6 - {SPR_EMC7, FF_FULLBRIGHT, 1, {A_OrbitNights}, ANG2*2, 0, S_ORBITEM7}, // S_ORBITEM7 - {SPR_EMC1, FF_FULLBRIGHT, 1, {A_OrbitNights}, ANG2*2, 0, S_ORBITEM8}, // S_ORBITEM8 + {SPR_EMRC, FF_FULLBRIGHT, 1, {A_OrbitNights}, ANG2*2, 0, S_ORBITEM1}, // S_ORBITEM1 + {SPR_EMRC, FF_FULLBRIGHT, 1, {A_OrbitNights}, ANG2*2, 0, S_ORBITEM2}, // S_ORBITEM2 + {SPR_EMRC, FF_FULLBRIGHT, 1, {A_OrbitNights}, ANG2*2, 0, S_ORBITEM3}, // S_ORBITEM3 + {SPR_EMRC, FF_FULLBRIGHT, 1, {A_OrbitNights}, ANG2*2, 0, S_ORBITEM4}, // S_ORBITEM4 + {SPR_EMRC, FF_FULLBRIGHT, 1, {A_OrbitNights}, ANG2*2, 0, S_ORBITEM5}, // S_ORBITEM5 + {SPR_EMRC, FF_FULLBRIGHT, 1, {A_OrbitNights}, ANG2*2, 0, S_ORBITEM6}, // S_ORBITEM6 + {SPR_EMRC, FF_FULLBRIGHT, 1, {A_OrbitNights}, ANG2*2, 0, S_ORBITEM7}, // S_ORBITEM7 + {SPR_EMRC, FF_FULLBRIGHT, 1, {A_OrbitNights}, ANG2*2, 0, S_ORBITEM8}, // S_ORBITEM8 {SPR_IDYA, FF_TRANS20|FF_FULLBRIGHT, 1, {A_OrbitNights}, ANG2*2, 0, S_ORBIDYA1}, // S_ORBIDYA1 {SPR_IDYA, FF_TRANS20|FF_FULLBRIGHT|1, 1, {A_OrbitNights}, ANG2*2, 0, S_ORBIDYA2}, // S_ORBIDYA2 {SPR_IDYA, FF_TRANS20|FF_FULLBRIGHT|2, 1, {A_OrbitNights}, ANG2*2, 0, S_ORBIDYA3}, // S_ORBIDYA3 @@ -8237,7 +8227,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = { // MT_EMERALD -1, // doomednum - S_EMERALD_CHAOS1, // spawnstate + S_CHAOSEMERALD1, // spawnstate 1000, // spawnhealth S_NULL, // seestate sfx_None, // seesound @@ -18960,7 +18950,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = { // MT_GOTEMERALD -1, // doomednum - S_EMERALD_CHAOS1, // spawnstate + S_CHAOSEMERALD1, // spawnstate 1000, // spawnhealth S_NULL, // seestate sfx_None, // seesound @@ -28805,7 +28795,15 @@ skincolor_t skincolors[MAXSKINCOLORS] = { {"Super Tan 2", {0x00, 0x50, 0x50, 0x51, 0x51, 0x52, 0x52, 0x52, 0x54, 0x54, 0x54, 0x54, 0x55, 0x56, 0x57, 0xf5}, SKINCOLOR_BROWN, 13, V_BROWNMAP, false}, // SKINCOLOR_SUPERTAN2 {"Super Tan 3", {0x50, 0x51, 0x51, 0x52, 0x52, 0x52, 0x54, 0x54, 0x54, 0x54, 0x55, 0x56, 0x57, 0xf5, 0xf7, 0xf9}, SKINCOLOR_BROWN, 12, V_BROWNMAP, false}, // SKINCOLOR_SUPERTAN3 {"Super Tan 4", {0x51, 0x52, 0x52, 0x52, 0x52, 0x54, 0x54, 0x54, 0x55, 0x56, 0x57, 0xf5, 0xf7, 0xf9, 0xfb, 0xed}, SKINCOLOR_BROWN, 11, V_BROWNMAP, false}, // SKINCOLOR_SUPERTAN4 - {"Super Tan 5", {0x52, 0x52, 0x54, 0x54, 0x54, 0x55, 0x56, 0x57, 0xf5, 0xf7, 0xf9, 0xfb, 0xed, 0xee, 0xef, 0xef}, SKINCOLOR_BROWN, 10, V_BROWNMAP, false} // SKINCOLOR_SUPERTAN5 + {"Super Tan 5", {0x52, 0x52, 0x54, 0x54, 0x54, 0x55, 0x56, 0x57, 0xf5, 0xf7, 0xf9, 0xfb, 0xed, 0xee, 0xef, 0xef}, SKINCOLOR_BROWN, 10, V_BROWNMAP, false}, // SKINCOLOR_SUPERTAN5 + + {"Chaos Emerald 1", { 0, 88, 188, 98, 114, 116, 117, 119, 0, 0, 0, 0, 0, 0, 0, 0}, SKINCOLOR_NONE, 0, 0, false}, // SKINCOLOR_CHAOSEMERALD1 + {"Chaos Emerald 2", { 0, 80, 82, 74, 65, 52, 56, 60, 0, 0, 0, 0, 0, 0, 0, 0}, SKINCOLOR_NONE, 0, 0, false}, // SKINCOLOR_CHAOSEMERALD2 + {"Chaos Emerald 3", { 0, 252, 201, 179, 182, 183, 185, 187, 0, 0, 0, 0, 0, 0, 0, 0}, SKINCOLOR_NONE, 0, 0, false}, // SKINCOLOR_CHAOSEMERALD3 + {"Chaos Emerald 4", { 0, 144, 146, 147, 149, 165, 167, 169, 0, 0, 0, 0, 0, 0, 0, 0}, SKINCOLOR_NONE, 0, 0, false}, // SKINCOLOR_CHAOSEMERALD4 + {"Chaos Emerald 5", { 0, 1, 144, 4, 9, 170, 14, 21, 0, 0, 0, 0, 0, 0, 0, 0}, SKINCOLOR_NONE, 0, 0, false}, // SKINCOLOR_CHAOSEMERALD5 + {"Chaos Emerald 6", { 0, 208, 50, 32, 34, 37, 40, 44, 0, 0, 0, 0, 0, 0, 0, 0}, SKINCOLOR_NONE, 0, 0, false}, // SKINCOLOR_CHAOSEMERALD6 + {"Chaos Emerald 7", { 0, 120, 121, 140, 133, 135, 149, 156, 0, 0, 0, 0, 0, 0, 0, 0}, SKINCOLOR_NONE, 0, 0, false} // SKINCOLOR_CHAOSEMERALD7 }; /** Patches the mobjinfo, state, and skincolor tables. diff --git a/src/info.h b/src/info.h index 84ea30757..1bcd03b56 100644 --- a/src/info.h +++ b/src/info.h @@ -410,13 +410,7 @@ typedef enum sprite SPR_NCHP, // NiGHTS chip SPR_NSTR, // NiGHTS star SPR_EMBM, // Emblem - SPR_EMC1, // Chaos Emeralds - SPR_EMC2, - SPR_EMC3, - SPR_EMC4, - SPR_EMC5, - SPR_EMC6, - SPR_EMC7, + SPR_EMRC, // Chaos Emeralds SPR_SHRD, // Emerald Hunt // Interactive Objects @@ -2122,13 +2116,9 @@ typedef enum state S_EMBLEM26, // Chaos Emeralds - S_EMERALD_CHAOS1, - S_EMERALD_CHAOS2, - S_EMERALD_CHAOS3, - S_EMERALD_CHAOS4, - S_EMERALD_CHAOS5, - S_EMERALD_CHAOS6, - S_EMERALD_CHAOS7, + S_CHAOSEMERALD1, + S_CHAOSEMERALD2, + S_CHAOSEMERALD_UNDER, // Emerald hunt shards S_SHRD1, diff --git a/src/k_battle.c b/src/k_battle.c index a9924b1de..1f0db486c 100644 --- a/src/k_battle.c +++ b/src/k_battle.c @@ -308,6 +308,7 @@ mobj_t *K_SpawnChaosEmerald(mobj_t *parent, angle_t angle, SINT8 flip, UINT32 em { boolean validEmerald = true; mobj_t *emerald = P_SpawnMobjFromMobj(parent, 0, 0, 0, MT_EMERALD); + mobj_t *overlay; P_Thrust(emerald, FixedAngle(P_RandomFixed() * 180) + angle, @@ -322,25 +323,25 @@ mobj_t *K_SpawnChaosEmerald(mobj_t *parent, angle_t angle, SINT8 flip, UINT32 em switch (emeraldType) { case EMERALD_CHAOS1: - P_SetMobjState(emerald, S_EMERALD_CHAOS1); + emerald->color = SKINCOLOR_CHAOSEMERALD1; break; case EMERALD_CHAOS2: - P_SetMobjState(emerald, S_EMERALD_CHAOS2); + emerald->color = SKINCOLOR_CHAOSEMERALD2; break; case EMERALD_CHAOS3: - P_SetMobjState(emerald, S_EMERALD_CHAOS3); + emerald->color = SKINCOLOR_CHAOSEMERALD3; break; case EMERALD_CHAOS4: - P_SetMobjState(emerald, S_EMERALD_CHAOS4); + emerald->color = SKINCOLOR_CHAOSEMERALD4; break; case EMERALD_CHAOS5: - P_SetMobjState(emerald, S_EMERALD_CHAOS5); + emerald->color = SKINCOLOR_CHAOSEMERALD5; break; case EMERALD_CHAOS6: - P_SetMobjState(emerald, S_EMERALD_CHAOS6); + emerald->color = SKINCOLOR_CHAOSEMERALD6; break; case EMERALD_CHAOS7: - P_SetMobjState(emerald, S_EMERALD_CHAOS7); + emerald->color = SKINCOLOR_CHAOSEMERALD7; break; default: CONS_Printf("Invalid emerald type %d\n", emeraldType); @@ -353,6 +354,11 @@ mobj_t *K_SpawnChaosEmerald(mobj_t *parent, angle_t angle, SINT8 flip, UINT32 em emerald->extravalue1 = emeraldType; } + overlay = P_SpawnMobjFromMobj(emerald, 0, 0, 0, MT_OVERLAY); + P_SetTarget(&overlay->target, emerald); + P_SetMobjState(overlay, S_CHAOSEMERALD_UNDER); + overlay->color = emerald->color; + return emerald; } diff --git a/src/k_hud.c b/src/k_hud.c index 330bfb8fe..dac19ffa6 100644 --- a/src/k_hud.c +++ b/src/k_hud.c @@ -88,7 +88,7 @@ static patch_t *kp_rankbumper; static patch_t *kp_tinybumper[2]; static patch_t *kp_ranknobumpers; static patch_t *kp_rankcapsule; -static patch_t *kp_rankemeralds[7]; +static patch_t *kp_rankemerald; static patch_t *kp_battlewin; static patch_t *kp_battlecool; @@ -351,13 +351,7 @@ void K_LoadKartHUDGraphics(void) kp_tinybumper[1] = W_CachePatchName("K_BLNB", PU_HUDGFX); kp_ranknobumpers = W_CachePatchName("K_NOBLNS", PU_HUDGFX); kp_rankcapsule = W_CachePatchName("K_CAPICO", PU_HUDGFX); - - sprintf(buffer, "K_EMERCx"); - for (i = 0; i < 7; i++) - { - buffer[7] = '0'+(i+1); - kp_rankemeralds[i] = (patch_t *) W_CachePatchName(buffer, PU_HUDGFX); - } + kp_rankemerald = W_CachePatchName("K_EMERC", PU_HUDGFX); // Battle graphics kp_battlewin = W_CachePatchName("K_BWIN", PU_HUDGFX); @@ -1633,10 +1627,12 @@ static boolean K_drawKartPositionFaces(void) for (j = 0; j < 7; j++) { UINT32 emeraldFlag = (1 << j); + UINT16 emeraldColor = SKINCOLOR_CHAOSEMERALD1 + j; if (players[rankplayer[i]].powers[pw_emeralds] & emeraldFlag) { - V_DrawScaledPatch(emeraldx, Y+7, V_HUDTRANS|V_SLIDEIN|V_SNAPTOLEFT, kp_rankemeralds[j]); + colormap = R_GetTranslationColormap(TC_DEFAULT, emeraldColor, GTC_CACHE); + V_DrawMappedPatch(emeraldx, Y+7, V_HUDTRANS|V_SLIDEIN|V_SNAPTOLEFT, kp_rankemerald, colormap); emeraldx += 7; } } @@ -1661,6 +1657,41 @@ static boolean K_drawKartPositionFaces(void) return false; } +static void K_drawKartEmeralds(void) +{ + static const INT32 emeraldOffsets[7][2] = { + {27, 0}, + {18, 15}, + {36, 15}, + {9, 0}, + {45, 0}, + {0, 15}, + {54, 15} + }; + + const INT32 startx = BASEVIDWIDTH - 88; + const INT32 starty = BASEVIDHEIGHT - 32; + + UINT8 *colormap; + INT32 i; + + for (i = 0; i < 7; i++) + { + UINT32 emeraldFlag = (1 << i); + UINT16 emeraldColor = SKINCOLOR_CHAOSEMERALD1 + i; + + if (stplyr->powers[pw_emeralds] & emeraldFlag) + { + colormap = R_GetTranslationColormap(TC_DEFAULT, emeraldColor, GTC_CACHE); + V_DrawMappedPatch( + startx + emeraldOffsets[i][0], starty + emeraldOffsets[i][1], + V_HUDTRANS|V_SLIDEIN|V_SNAPTOBOTTOM|V_SNAPTORIGHT, + kp_rankemerald, colormap + ); + } + } +} + // // HU_DrawTabRankings -- moved here to take advantage of kart stuff! // @@ -4137,6 +4168,6 @@ void K_drawKartHUD(void) if (gametype == GT_BATTLE) { - V_DrawRightAlignedString(BASEVIDWIDTH - 10, BASEVIDHEIGHT - 18, V_SPLITSCREEN|V_SNAPTOBOTTOM|V_SNAPTORIGHT, va("Emeralds: %d / 7", K_NumEmeralds(stplyr))); + K_drawKartEmeralds(); } }