From 99fc0c13cdfd676f742955b25dc2255ffa1585f9 Mon Sep 17 00:00:00 2001 From: Sally Coolatta Date: Sat, 13 Apr 2024 19:07:25 -0400 Subject: [PATCH 1/2] Draw Chaos Emerald again for Sealed Star --- src/k_podium.cpp | 200 ++++++++++++++++++++++++----------------------- 1 file changed, 102 insertions(+), 98 deletions(-) diff --git a/src/k_podium.cpp b/src/k_podium.cpp index 497db18df..e5ca26d8f 100644 --- a/src/k_podium.cpp +++ b/src/k_podium.cpp @@ -599,12 +599,12 @@ void podiumData_s::Draw(void) .text(va("%c", ('A' + p))); } } - // Do not draw any stats for GAME OVERed player - else if (gpRank_level_perplayer_t *const dta = &lvl->perPlayer[p]; dta->grade != GRADE_INVALID) + else { + gpRank_level_perplayer_t *const dta = &lvl->perPlayer[p]; srb2::Draw drawer_rank = drawer_perplayer.xy(2, 0); - if (lvl->event != GPEVENT_SPECIAL) + if (lvl->event != GPEVENT_SPECIAL && dta->grade != GRADE_INVALID) { drawer_rank .xy(0, -1) @@ -612,124 +612,128 @@ void podiumData_s::Draw(void) .patch(va("R_CUPRN%c", K_GetGradeChar(dta->grade))); } - srb2::Draw drawer_gametype = drawer_rank.xy(18, 0); - - switch (lvl->event) + // Do not draw any stats for GAME OVERed player + if (dta->grade != GRADE_INVALID || lvl->event == GPEVENT_SPECIAL) { - case GPEVENT_BONUS: + srb2::Draw drawer_gametype = drawer_rank.xy(18, 0); + + switch (lvl->event) { - drawer_gametype - .xy(0, 1) - .patch("K_CAPICO"); - - drawer_gametype - .xy(22, 1) - .align(srb2::Draw::Align::kCenter) - .font(srb2::Draw::Font::kPing) - .text(va("%d/%d", dta->prisons, lvl->totalPrisons)); - break; - } - case GPEVENT_SPECIAL: - { - srb2::Draw drawer_emerald = drawer_gametype; - UINT8 emeraldNum = g_podiumData.emeraldnum; - - boolean useWhiteFrame = ((leveltime & 1) || !dta->gotSpecialPrize); - patch_t *emeraldPatch = nullptr; - skincolornum_t emeraldColor = SKINCOLOR_NONE; - - if (emeraldNum == 0) + case GPEVENT_BONUS: { - // Prize -- todo, currently using fake Emerald - emeraldColor = SKINCOLOR_GOLD; + drawer_gametype + .xy(0, 1) + .patch("K_CAPICO"); + + drawer_gametype + .xy(22, 1) + .align(srb2::Draw::Align::kCenter) + .font(srb2::Draw::Font::kPing) + .text(va("%d/%d", dta->prisons, lvl->totalPrisons)); + break; } - else + case GPEVENT_SPECIAL: { - emeraldColor = static_cast( SKINCOLOR_CHAOSEMERALD1 + ((emeraldNum - 1) % 7) ); - } + srb2::Draw drawer_emerald = drawer_gametype; + UINT8 emeraldNum = g_podiumData.emeraldnum; - { - std::string emeraldName; - if (emeraldNum > 7) + boolean useWhiteFrame = ((leveltime & 1) || !dta->gotSpecialPrize); + patch_t *emeraldPatch = nullptr; + skincolornum_t emeraldColor = SKINCOLOR_NONE; + + if (emeraldNum == 0) { - emeraldName = (useWhiteFrame ? "K_SUPER2" : "K_SUPER1"); + // Prize -- todo, currently using fake Emerald + emeraldColor = SKINCOLOR_GOLD; } else { - emeraldName = (useWhiteFrame ? "K_EMERC" : "K_EMERW"); + emeraldColor = static_cast( SKINCOLOR_CHAOSEMERALD1 + ((emeraldNum - 1) % 7) ); } - emeraldPatch = static_cast( W_CachePatchName(emeraldName.c_str(), PU_CACHE) ); - } - - if (dta->gotSpecialPrize) - { - if (emeraldColor != SKINCOLOR_NONE) { - drawer_emerald = drawer_emerald.colormap( emeraldColor ); + std::string emeraldName; + if (emeraldNum > 7) + { + emeraldName = (useWhiteFrame ? "K_SUPER2" : "K_SUPER1"); + } + else + { + emeraldName = (useWhiteFrame ? "K_EMERC" : "K_EMERW"); + } + + emeraldPatch = static_cast( W_CachePatchName(emeraldName.c_str(), PU_CACHE) ); } + + if (dta->gotSpecialPrize) + { + if (emeraldColor != SKINCOLOR_NONE) + { + drawer_emerald = drawer_emerald.colormap( emeraldColor ); + } + } + else + { + drawer_emerald = drawer_emerald.colormap( TC_BLINK, SKINCOLOR_BLACK ); + } + + drawer_emerald + .xy(6 - (emeraldPatch->width * 0.5), 0) + .patch(emeraldPatch); + break; } - else + default: { - drawer_emerald = drawer_emerald.colormap( TC_BLINK, SKINCOLOR_BLACK ); + drawer_gametype + .xy(0, 1) + .patch("K_SPTLAP"); + + drawer_gametype + .xy(22, 1) + .align(srb2::Draw::Align::kCenter) + .font(srb2::Draw::Font::kPing) + .text(va("%d/%d", dta->lapPoints, lvl->totalLapPoints)); + break; + } + } + + if (singlePlayer) + { + srb2::Draw drawer_rings = drawer_gametype.xy(36, 0); + + if (lvl->event == GPEVENT_NONE) + { + drawer_rings + .xy(0, -1) + .patch("K_SRING1"); + + drawer_rings + .xy(22, 1) + .colormap(TC_RAINBOW, SKINCOLOR_YELLOW) + .align(srb2::Draw::Align::kCenter) + .font(srb2::Draw::Font::kPing) + .text(va("%d", dta->rings)); } - drawer_emerald - .xy(6 - (emeraldPatch->width * 0.5), 0) - .patch(emeraldPatch); - break; - } - default: - { - drawer_gametype - .xy(0, 1) - .patch("K_SPTLAP"); + srb2::Draw drawer_timer = drawer_rings.xy(36, 0); - drawer_gametype - .xy(22, 1) + drawer_timer + .xy(0, 0) + .patch("K_STTIMS"); + + drawer_timer + .xy(32, 1) .align(srb2::Draw::Align::kCenter) .font(srb2::Draw::Font::kPing) - .text(va("%d/%d", dta->lapPoints, lvl->totalLapPoints)); - break; + .text(lvl->time == UINT32_MAX ? + "--'--\"--" : va( + "%i'%02i\"%02i", + G_TicsToMinutes(lvl->time, true), + G_TicsToSeconds(lvl->time), + G_TicsToCentiseconds(lvl->time) + )); } } - - if (singlePlayer) - { - srb2::Draw drawer_rings = drawer_gametype.xy(36, 0); - - if (lvl->event == GPEVENT_NONE) - { - drawer_rings - .xy(0, -1) - .patch("K_SRING1"); - - drawer_rings - .xy(22, 1) - .colormap(TC_RAINBOW, SKINCOLOR_YELLOW) - .align(srb2::Draw::Align::kCenter) - .font(srb2::Draw::Font::kPing) - .text(va("%d", dta->rings)); - } - - srb2::Draw drawer_timer = drawer_rings.xy(36, 0); - - drawer_timer - .xy(0, 0) - .patch("K_STTIMS"); - - drawer_timer - .xy(32, 1) - .align(srb2::Draw::Align::kCenter) - .font(srb2::Draw::Font::kPing) - .text(lvl->time == UINT32_MAX ? - "--'--\"--" : va( - "%i'%02i\"%02i", - G_TicsToMinutes(lvl->time, true), - G_TicsToSeconds(lvl->time), - G_TicsToCentiseconds(lvl->time) - )); - } } drawer_perplayer = drawer_perplayer.x(56); From b654533bf64d2bea283c1e67a82c27af18a73e00 Mon Sep 17 00:00:00 2001 From: toaster Date: Mon, 15 Apr 2024 15:43:46 +0100 Subject: [PATCH 2/2] Don't add rings to total in GPEVENT_SPECIAL --- src/g_game.c | 2 +- src/k_tally.cpp | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/g_game.c b/src/g_game.c index 9b6950359..df9da2f3a 100644 --- a/src/g_game.c +++ b/src/g_game.c @@ -4532,7 +4532,7 @@ static void G_DoCompleted(void) { // Increase your total rings INT32 ringtotal = player->hudrings; - if (ringtotal > 0) + if (ringtotal > 0 && grandprixinfo.eventmode != GPEVENT_SPECIAL) { if (ringtotal > 20) ringtotal = 20; diff --git a/src/k_tally.cpp b/src/k_tally.cpp index 3102df5aa..2f32ca16a 100644 --- a/src/k_tally.cpp +++ b/src/k_tally.cpp @@ -331,7 +331,8 @@ void level_tally_t::Init(player_t *player) } } - if ((gametypes[gt]->rules & GTR_SPHERES) == 0) + if ((gametypes[gt]->rules & GTR_SPHERES) == 0 + && (!grandprixinfo.gp || grandprixinfo.eventmode != GPEVENT_SPECIAL)) { if (player->hudrings > 0) // Don't count negative rings {