mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2025-10-30 08:01:28 +00:00
Update Challenge Menu UI
- Percentage for Challenges completion
- Smaller footprint in either top corner
- Uses mini rank numbers
- Rounds to new Key meter is now vertical
This commit is contained in:
parent
f29430f29c
commit
1a91f41dbb
5 changed files with 72 additions and 44 deletions
|
|
@ -75,8 +75,8 @@ static patch_t *kp_racefinish[6];
|
||||||
|
|
||||||
static patch_t *kp_positionnum[10][2][2]; // number, overlay or underlay, splitscreen
|
static patch_t *kp_positionnum[10][2][2]; // number, overlay or underlay, splitscreen
|
||||||
|
|
||||||
static patch_t *kp_facenum[MAXPLAYERS+1];
|
patch_t *kp_facenum[MAXPLAYERS+1];
|
||||||
patch_t *kp_facehighlight[8];
|
static patch_t *kp_facehighlight[8];
|
||||||
|
|
||||||
static patch_t *kp_nocontestminimap;
|
static patch_t *kp_nocontestminimap;
|
||||||
static patch_t *kp_spbminimap;
|
static patch_t *kp_spbminimap;
|
||||||
|
|
|
||||||
|
|
@ -81,6 +81,7 @@ extern patch_t *kp_button_right[2];
|
||||||
extern patch_t *kp_button_left[2];
|
extern patch_t *kp_button_left[2];
|
||||||
|
|
||||||
extern patch_t *kp_eggnum[6];
|
extern patch_t *kp_eggnum[6];
|
||||||
|
extern patch_t *kp_facenum[MAXPLAYERS+1];
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
} // extern "C"
|
} // extern "C"
|
||||||
|
|
|
||||||
|
|
@ -1206,7 +1206,7 @@ void M_DrawAddons(void);
|
||||||
|
|
||||||
#define CC_TOTAL 0
|
#define CC_TOTAL 0
|
||||||
#define CC_UNLOCKED 1
|
#define CC_UNLOCKED 1
|
||||||
#define CC_TALLY 2
|
#define CC_PERCENT 2
|
||||||
#define CC_ANIM 3
|
#define CC_ANIM 3
|
||||||
#define CC_CHAOANIM 4
|
#define CC_CHAOANIM 4
|
||||||
#define CC_CHAONOPE 5
|
#define CC_CHAONOPE 5
|
||||||
|
|
|
||||||
|
|
@ -5896,7 +5896,6 @@ static void M_DrawChallengePreview(INT32 x, INT32 y)
|
||||||
}
|
}
|
||||||
|
|
||||||
#define challengesgridstep 22
|
#define challengesgridstep 22
|
||||||
#define challengekeybarwidth 50
|
|
||||||
|
|
||||||
void M_DrawChallenges(void)
|
void M_DrawChallenges(void)
|
||||||
{
|
{
|
||||||
|
|
@ -6046,11 +6045,23 @@ challengedesc:
|
||||||
|
|
||||||
// Tally
|
// Tally
|
||||||
{
|
{
|
||||||
str = va("%d/%d",
|
INT32 textx = BASEVIDWIDTH - 24, texty = 20-challengesmenu.unlockcount[CC_ANIM];
|
||||||
challengesmenu.unlockcount[CC_UNLOCKED] + challengesmenu.unlockcount[CC_TALLY],
|
UINT8 numbers[3];
|
||||||
challengesmenu.unlockcount[CC_TOTAL]
|
numbers[0] = ((challengesmenu.unlockcount[CC_PERCENT] / 100) % 10);
|
||||||
);
|
numbers[1] = ((challengesmenu.unlockcount[CC_PERCENT] / 10) % 10);
|
||||||
V_DrawRightAlignedTimerString(BASEVIDWIDTH-7, 9-challengesmenu.unlockcount[CC_ANIM], 0, str);
|
numbers[2] = (challengesmenu.unlockcount[CC_PERCENT] % 10);
|
||||||
|
|
||||||
|
patch_t *percent = W_CachePatchName("K_SPDML1", PU_CACHE);
|
||||||
|
|
||||||
|
V_DrawScaledPatch(textx + 3, texty, 0, percent);
|
||||||
|
|
||||||
|
i = 3;
|
||||||
|
while (i)
|
||||||
|
{
|
||||||
|
i--;
|
||||||
|
textx -= 6;
|
||||||
|
V_DrawScaledPatch(textx, texty, 0, kp_facenum[numbers[i]]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Chao Keys
|
// Chao Keys
|
||||||
|
|
@ -6061,34 +6072,50 @@ challengedesc:
|
||||||
offs = -offs;
|
offs = -offs;
|
||||||
offs /= 2;
|
offs /= 2;
|
||||||
|
|
||||||
if (gamedata->chaokeys > 9)
|
fixed_t keyx = (3+offs)*FRACUNIT, keyy = 0;
|
||||||
{
|
|
||||||
offs -= 6;
|
|
||||||
if (gamedata->chaokeys > 99)
|
|
||||||
offs -= 2; // as far as we can go
|
|
||||||
}
|
|
||||||
|
|
||||||
fixed_t keyx = (8+offs)*FRACUNIT, keyy = 5*FRACUNIT;
|
|
||||||
|
|
||||||
const char *timerstr = va("%u", gamedata->chaokeys);
|
|
||||||
|
|
||||||
V_DrawTimerString((27+offs), 9-challengesmenu.unlockcount[CC_CHAOANIM], 0, timerstr);
|
|
||||||
|
|
||||||
K_drawButton(
|
K_drawButton(
|
||||||
(27 + offs + V_TimerStringWidth(timerstr, 0) + 2) << FRACBITS,
|
(21 + offs + 2) << FRACBITS,
|
||||||
11 << FRACBITS,
|
8 << FRACBITS,
|
||||||
0, kp_button_c[1],
|
0, kp_button_c[1],
|
||||||
M_MenuExtraHeld(pid)
|
M_MenuExtraHeld(pid)
|
||||||
);
|
);
|
||||||
|
|
||||||
offs = challengekeybarwidth;
|
#define challengekeybarheight 27
|
||||||
|
|
||||||
|
offs = challengekeybarheight;
|
||||||
if (gamedata->chaokeys < GDMAX_CHAOKEYS)
|
if (gamedata->chaokeys < GDMAX_CHAOKEYS)
|
||||||
offs = ((gamedata->pendingkeyroundoffset * challengekeybarwidth)/GDCONVERT_ROUNDSTOKEY);
|
offs = ((gamedata->pendingkeyroundoffset * challengekeybarheight)/GDCONVERT_ROUNDSTOKEY);
|
||||||
|
|
||||||
if (offs > 0)
|
if (offs > 0)
|
||||||
V_DrawFill(1, 25, offs, 2, 0);
|
V_DrawFill(1, 1 + (challengekeybarheight-offs), 2, offs, 0);
|
||||||
if (offs < challengekeybarwidth)
|
if (offs < challengekeybarheight)
|
||||||
V_DrawFadeFill(1+offs, 25, challengekeybarwidth-offs, 2, 0, 31, challengetransparentstrength);
|
V_DrawFadeFill(1, 1, 2, challengekeybarheight-offs, 0, 31, challengetransparentstrength);
|
||||||
|
|
||||||
|
#undef challengekeybarheight
|
||||||
|
|
||||||
|
{
|
||||||
|
INT32 textx = 4, texty = 20-challengesmenu.unlockcount[CC_CHAOANIM];
|
||||||
|
UINT8 numbers[4];
|
||||||
|
numbers[0] = ((gamedata->chaokeys / 100) % 10);
|
||||||
|
numbers[1] = ((gamedata->chaokeys / 10) % 10);
|
||||||
|
numbers[2] = (gamedata->chaokeys % 10);
|
||||||
|
|
||||||
|
numbers[3] = ((gamedata->chaokeys / 1000) % 10);
|
||||||
|
if (numbers[3] != 0)
|
||||||
|
{
|
||||||
|
V_DrawScaledPatch(textx - 1, texty, 0, kp_facenum[numbers[3]]);
|
||||||
|
textx += 5;
|
||||||
|
}
|
||||||
|
|
||||||
|
i = 0;
|
||||||
|
while (i < 3)
|
||||||
|
{
|
||||||
|
V_DrawScaledPatch(textx, texty, 0, kp_facenum[numbers[i]]);
|
||||||
|
textx += 6;
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (challengesmenu.currentunlock < MAXUNLOCKABLES && challengesmenu.chaokeyhold)
|
if (challengesmenu.currentunlock < MAXUNLOCKABLES && challengesmenu.chaokeyhold)
|
||||||
{
|
{
|
||||||
|
|
@ -6202,7 +6229,6 @@ challengedesc:
|
||||||
|
|
||||||
#undef challengetransparentstrength
|
#undef challengetransparentstrength
|
||||||
#undef challengesgridstep
|
#undef challengesgridstep
|
||||||
#undef challengekeybarwidth
|
|
||||||
|
|
||||||
// Statistics menu
|
// Statistics menu
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -54,6 +54,14 @@ menu_t MISC_StatisticsDef = {
|
||||||
|
|
||||||
struct challengesmenu_s challengesmenu;
|
struct challengesmenu_s challengesmenu;
|
||||||
|
|
||||||
|
static void M_UpdateChallengeGridVisuals(void)
|
||||||
|
{
|
||||||
|
// Currently only updates the completion %.
|
||||||
|
challengesmenu.unlockcount[CC_PERCENT] =
|
||||||
|
(100 * challengesmenu.unlockcount[CC_UNLOCKED])
|
||||||
|
/challengesmenu.unlockcount[CC_TOTAL];
|
||||||
|
}
|
||||||
|
|
||||||
static void M_ChallengesAutoFocus(UINT16 unlockid, boolean fresh)
|
static void M_ChallengesAutoFocus(UINT16 unlockid, boolean fresh)
|
||||||
{
|
{
|
||||||
UINT16 i;
|
UINT16 i;
|
||||||
|
|
@ -263,6 +271,8 @@ menu_t *M_InterruptMenuWithChallenges(menu_t *desiredmenu)
|
||||||
challengesmenu.unlockcount[CC_UNLOCKED]++;
|
challengesmenu.unlockcount[CC_UNLOCKED]++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
M_UpdateChallengeGridVisuals();
|
||||||
|
|
||||||
if (challengesmenu.pending)
|
if (challengesmenu.pending)
|
||||||
M_ChallengesAutoFocus(newunlock, true);
|
M_ChallengesAutoFocus(newunlock, true);
|
||||||
else if (newunlock >= MAXUNLOCKABLES && gamedata->pendingkeyrounds > 0
|
else if (newunlock >= MAXUNLOCKABLES && gamedata->pendingkeyrounds > 0
|
||||||
|
|
@ -312,7 +322,7 @@ static boolean M_CanKeyHiliTile(void)
|
||||||
|
|
||||||
// Not a hinted tile OR a fresh board.
|
// Not a hinted tile OR a fresh board.
|
||||||
if (!(challengesmenu.extradata[i].flags & CHE_HINT)
|
if (!(challengesmenu.extradata[i].flags & CHE_HINT)
|
||||||
&& (challengesmenu.unlockcount[CC_UNLOCKED] + challengesmenu.unlockcount[CC_TALLY] > 0))
|
&& (challengesmenu.unlockcount[CC_UNLOCKED] > 0))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
// Marked as major?
|
// Marked as major?
|
||||||
|
|
@ -520,7 +530,9 @@ void M_ChallengesTick(void)
|
||||||
Z_Free(challengesmenu.unlockcondition);
|
Z_Free(challengesmenu.unlockcondition);
|
||||||
challengesmenu.unlockcondition = M_BuildConditionSetString(challengesmenu.currentunlock);
|
challengesmenu.unlockcondition = M_BuildConditionSetString(challengesmenu.currentunlock);
|
||||||
|
|
||||||
challengesmenu.unlockcount[CC_TALLY]++;
|
challengesmenu.unlockcount[CC_UNLOCKED]++;
|
||||||
|
M_UpdateChallengeGridVisuals();
|
||||||
|
|
||||||
challengesmenu.unlockcount[CC_ANIM]++;
|
challengesmenu.unlockcount[CC_ANIM]++;
|
||||||
|
|
||||||
if (challengesmenu.extradata)
|
if (challengesmenu.extradata)
|
||||||
|
|
@ -582,15 +594,6 @@ void M_ChallengesTick(void)
|
||||||
}
|
}
|
||||||
else if (!challengesmenu.chaokeyhold)
|
else if (!challengesmenu.chaokeyhold)
|
||||||
{
|
{
|
||||||
|
|
||||||
// Tick down the tally. (currently not visible)
|
|
||||||
/*if ((challengesmenu.ticker & 1)
|
|
||||||
&& challengesmenu.unlockcount[CC_TALLY] > 0)
|
|
||||||
{
|
|
||||||
challengesmenu.unlockcount[CC_TALLY]--;
|
|
||||||
challengesmenu.unlockcount[CC_UNLOCKED]++;
|
|
||||||
}*/
|
|
||||||
|
|
||||||
if (challengesmenu.fade > 0)
|
if (challengesmenu.fade > 0)
|
||||||
{
|
{
|
||||||
// Fade decrease.
|
// Fade decrease.
|
||||||
|
|
@ -631,10 +634,8 @@ boolean M_ChallengesInputs(INT32 ch)
|
||||||
{
|
{
|
||||||
gamedata->unlocked[challengesmenu.currentunlock] = gamedata->unlockpending[challengesmenu.currentunlock] = false;
|
gamedata->unlocked[challengesmenu.currentunlock] = gamedata->unlockpending[challengesmenu.currentunlock] = false;
|
||||||
|
|
||||||
if (challengesmenu.unlockcount[CC_TALLY] > 0)
|
challengesmenu.unlockcount[CC_UNLOCKED]--;
|
||||||
challengesmenu.unlockcount[CC_TALLY]--;
|
M_UpdateChallengeGridVisuals();
|
||||||
else
|
|
||||||
challengesmenu.unlockcount[CC_UNLOCKED]--;
|
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue