From 7c7bfe605442b21610680e59049120bacbaab7cb Mon Sep 17 00:00:00 2001 From: toaster Date: Wed, 13 Aug 2025 20:38:18 +0100 Subject: [PATCH] Adjust how major and minor challenges affect percieved challenge completion - The Chao Medal in the top right corner will be completely filled if you've unlocked everything, even if that was via skips - You basically never saw the silver Chao Medal. Major challenges *are* designed to be skipped if you don't want to, only 101% should be gruelling (complementary) - The Scroll Bar at the top will darken pixels of complete columns ever so slightly even if minor challenges aren't yet achieved, to make it easier to find conditions to go back and fulfil if you're truly hunting for everything --- src/k_menudraw.c | 11 +++-------- src/menus/extras-challenges.c | 13 ++++++++++++- 2 files changed, 15 insertions(+), 9 deletions(-) diff --git a/src/k_menudraw.c b/src/k_menudraw.c index 94357b020..80a5a20b6 100644 --- a/src/k_menudraw.c +++ b/src/k_menudraw.c @@ -7914,11 +7914,6 @@ static void M_DrawChallengeScrollBar(UINT8 *flashmap) V_DrawFill(barx + hilix, bary-1, hiliw, 1, 0); V_DrawFill(barx + hilix, bary+barh, hiliw, 1, 0); - INT32 mindiscouragement = 2; // skipping major unlocks is just a LITTLE cringe - if (challengesmenu.unlockcount[CMC_PERCENT] == 100 - && challengesmenu.unlockcount[CMC_MAJORSKIPPED] == 0) - mindiscouragement = 1; // so someone looking for 101% isn't hunting forever - // unbounded so that we can do the last remaining completionamount draw nextstep = numincolumn = completionamount = skiplevel = 0; for (i = 0; ; i++) @@ -7932,7 +7927,7 @@ static void M_DrawChallengeScrollBar(UINT8 *flashmap) if (completionamount >= numincolumn) { // If any have been skipped, we subtract a little for awareness... - completionamount = (skiplevel >= mindiscouragement) ? 9 : 10; + completionamount = skiplevel ? 9 : 10; } else { @@ -7978,9 +7973,9 @@ static void M_DrawChallengeScrollBar(UINT8 *flashmap) unlockable_t *ref = &unlockables[gamedata->challengegrid[i]]; - if (skiplevel < 2 && M_Achieved(ref->conditionset - 1) == false) + if (!skiplevel && M_Achieved(ref->conditionset - 1) == false) { - skiplevel = ref->majorunlock ? 2 : 1; + skiplevel = 1; } } diff --git a/src/menus/extras-challenges.c b/src/menus/extras-challenges.c index 64b07d8a8..c00d4e75b 100644 --- a/src/menus/extras-challenges.c +++ b/src/menus/extras-challenges.c @@ -82,6 +82,10 @@ static void M_UpdateChallengeGridVisuals(void) challengesmenu.unlockcount[CMC_UNLOCKED] = 0; challengesmenu.unlockcount[CMC_TOTAL] = 0; + challengesmenu.unlockcount[CMC_KEYED] = 0; + challengesmenu.unlockcount[CMC_MAJORSKIPPED] = 0; + +//#define MAJORDISTINCTION -- The "basic" medal is basically never seen because Major challenges are usually completed last before 101%. Correct that with this for (i = 0; i < MAXUNLOCKABLES; i++) { @@ -106,12 +110,14 @@ static void M_UpdateChallengeGridVisuals(void) challengesmenu.unlockcount[CMC_KEYED]++; +#ifdef MAJORDISTINCTION if (unlockables[i].majorunlock == false) { continue; } challengesmenu.unlockcount[CMC_MAJORSKIPPED]++; +#endif } challengesmenu.unlockcount[CMC_PERCENT] = @@ -125,7 +131,9 @@ static void M_UpdateChallengeGridVisuals(void) challengesmenu.unlockcount[CMC_MEDALFILLED] = (medalheight * ( challengesmenu.unlockcount[CMC_UNLOCKED] +#ifdef MAJORDISTINCTION - challengesmenu.unlockcount[CMC_MAJORSKIPPED] +#endif )) / challengesmenu.unlockcount[CMC_TOTAL]; if (challengesmenu.unlockcount[CMC_PERCENT] == 100) @@ -135,7 +143,10 @@ static void M_UpdateChallengeGridVisuals(void) challengesmenu.unlockcount[CMC_MEDALID] = 2; challengesmenu.unlockcount[CMC_PERCENT]++; // 101% } - else if (challengesmenu.unlockcount[CMC_MAJORSKIPPED] == 0) + else +#ifdef MAJORDISTINCTION + if (challengesmenu.unlockcount[CMC_MAJORSKIPPED] == 0) +#endif { challengesmenu.unlockcount[CMC_MEDALID] = 1; }