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
This commit is contained in:
toaster 2025-08-13 20:38:18 +01:00
parent 56fe6580e2
commit 7c7bfe6054
2 changed files with 15 additions and 9 deletions

View file

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

View file

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