mirror of
https://git.do.srb2.org/STJr/SRB2.git
synced 2024-11-16 01:31:30 +00:00
Revamp statistics screen to put everything on the same page. http://imgur.com/a/kZrfm
* Also, inverted the direction of PGUP and PGDN.
This commit is contained in:
parent
b0ebb40913
commit
24192f54d1
1 changed files with 107 additions and 144 deletions
251
src/m_menu.c
251
src/m_menu.c
|
@ -277,7 +277,7 @@ static void M_ModeAttackEndGame(INT32 choice);
|
||||||
static void M_SetGuestReplay(INT32 choice);
|
static void M_SetGuestReplay(INT32 choice);
|
||||||
static void M_HandleChoosePlayerMenu(INT32 choice);
|
static void M_HandleChoosePlayerMenu(INT32 choice);
|
||||||
static void M_ChoosePlayer(INT32 choice);
|
static void M_ChoosePlayer(INT32 choice);
|
||||||
menu_t SP_GameStatsDef, SP_LevelStatsDef;
|
menu_t SP_LevelStatsDef;
|
||||||
static menu_t SP_TimeAttackDef, SP_ReplayDef, SP_GuestReplayDef, SP_GhostDef;
|
static menu_t SP_TimeAttackDef, SP_ReplayDef, SP_GuestReplayDef, SP_GhostDef;
|
||||||
static menu_t SP_NightsAttackDef, SP_NightsReplayDef, SP_NightsGuestReplayDef, SP_NightsGhostDef;
|
static menu_t SP_NightsAttackDef, SP_NightsReplayDef, SP_NightsGuestReplayDef, SP_NightsGhostDef;
|
||||||
|
|
||||||
|
@ -346,7 +346,6 @@ static void M_DrawLevelPlatterMenu(void);
|
||||||
static void M_DrawImageDef(void);
|
static void M_DrawImageDef(void);
|
||||||
static void M_DrawLoad(void);
|
static void M_DrawLoad(void);
|
||||||
static void M_DrawLevelStats(void);
|
static void M_DrawLevelStats(void);
|
||||||
static void M_DrawGameStats(void);
|
|
||||||
static void M_DrawTimeAttackMenu(void);
|
static void M_DrawTimeAttackMenu(void);
|
||||||
static void M_DrawNightsAttackMenu(void);
|
static void M_DrawNightsAttackMenu(void);
|
||||||
static void M_DrawSetupChoosePlayerMenu(void);
|
static void M_DrawSetupChoosePlayerMenu(void);
|
||||||
|
@ -377,7 +376,6 @@ static void M_HandleLevelPlatter(INT32 choice);
|
||||||
static void M_HandleSoundTest(INT32 choice);
|
static void M_HandleSoundTest(INT32 choice);
|
||||||
static void M_HandleImageDef(INT32 choice);
|
static void M_HandleImageDef(INT32 choice);
|
||||||
static void M_HandleLoadSave(INT32 choice);
|
static void M_HandleLoadSave(INT32 choice);
|
||||||
static void M_HandleGameStats(INT32 choice);
|
|
||||||
static void M_HandleLevelStats(INT32 choice);
|
static void M_HandleLevelStats(INT32 choice);
|
||||||
#ifndef NONET
|
#ifndef NONET
|
||||||
static void M_HandleConnectIP(INT32 choice);
|
static void M_HandleConnectIP(INT32 choice);
|
||||||
|
@ -880,11 +878,6 @@ enum
|
||||||
};
|
};
|
||||||
|
|
||||||
// Statistics
|
// Statistics
|
||||||
static menuitem_t SP_GameStatsMenu[] =
|
|
||||||
{
|
|
||||||
{IT_KEYHANDLER | IT_NOTHING, NULL, "", M_HandleGameStats, 0}, // dummy menuitem for the control func
|
|
||||||
};
|
|
||||||
|
|
||||||
static menuitem_t SP_LevelStatsMenu[] =
|
static menuitem_t SP_LevelStatsMenu[] =
|
||||||
{
|
{
|
||||||
{IT_KEYHANDLER | IT_NOTHING, NULL, "", M_HandleLevelStats, 0}, // dummy menuitem for the control func
|
{IT_KEYHANDLER | IT_NOTHING, NULL, "", M_HandleLevelStats, 0}, // dummy menuitem for the control func
|
||||||
|
@ -1482,17 +1475,6 @@ menu_t SP_LoadDef =
|
||||||
|
|
||||||
menu_t SP_LevelSelectDef = MAPPLATTERMENUSTYLE(NULL, SP_LevelSelectMenu);
|
menu_t SP_LevelSelectDef = MAPPLATTERMENUSTYLE(NULL, SP_LevelSelectMenu);
|
||||||
|
|
||||||
menu_t SP_GameStatsDef =
|
|
||||||
{
|
|
||||||
"M_STATS",
|
|
||||||
1,
|
|
||||||
&SP_MainDef,
|
|
||||||
SP_GameStatsMenu,
|
|
||||||
M_DrawGameStats,
|
|
||||||
280, 185,
|
|
||||||
0,
|
|
||||||
NULL
|
|
||||||
};
|
|
||||||
menu_t SP_LevelStatsDef =
|
menu_t SP_LevelStatsDef =
|
||||||
{
|
{
|
||||||
"M_STATS",
|
"M_STATS",
|
||||||
|
@ -5724,24 +5706,21 @@ static void M_Statistics(INT32 choice)
|
||||||
statsMapList[j++] = i;
|
statsMapList[j++] = i;
|
||||||
}
|
}
|
||||||
statsMapList[j] = -1;
|
statsMapList[j] = -1;
|
||||||
statsMax = j - 13 + numextraemblems;
|
statsMax = j - 11 + numextraemblems;
|
||||||
statsLocation = 0;
|
statsLocation = 0;
|
||||||
|
|
||||||
if (statsMax < 0)
|
if (statsMax < 0)
|
||||||
statsMax = 0;
|
statsMax = 0;
|
||||||
|
|
||||||
M_SetupNextMenu(&SP_GameStatsDef);
|
M_SetupNextMenu(&SP_LevelStatsDef);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void M_DrawStatsMaps(int location)
|
static void M_DrawStatsMaps(int location)
|
||||||
{
|
{
|
||||||
INT32 y = 76, i = -1;
|
INT32 y = 80, i = -1;
|
||||||
INT16 mnum;
|
INT16 mnum;
|
||||||
extraemblem_t *exemblem;
|
extraemblem_t *exemblem;
|
||||||
boolean dobottomarrow = (location < statsMax);
|
boolean dotopname = true, dobottomarrow = (location < statsMax);
|
||||||
|
|
||||||
V_DrawString(20, y-12, 0, "LEVEL NAME");
|
|
||||||
V_DrawString(248, y-12, 0, "EMBLEMS");
|
|
||||||
|
|
||||||
if (location)
|
if (location)
|
||||||
V_DrawString(10, y, V_YELLOWMAP, "\x1A");
|
V_DrawString(10, y, V_YELLOWMAP, "\x1A");
|
||||||
|
@ -5753,6 +5732,13 @@ static void M_DrawStatsMaps(int location)
|
||||||
--location;
|
--location;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
else if (dotopname)
|
||||||
|
{
|
||||||
|
V_DrawString(20, y, V_GREENMAP, "LEVEL NAME");
|
||||||
|
V_DrawString(248, y, V_GREENMAP, "EMBLEMS");
|
||||||
|
y += 8;
|
||||||
|
dotopname = false;
|
||||||
|
}
|
||||||
|
|
||||||
mnum = statsMapList[i];
|
mnum = statsMapList[i];
|
||||||
M_DrawMapEmblems(mnum+1, 292, y);
|
M_DrawMapEmblems(mnum+1, 292, y);
|
||||||
|
@ -5767,19 +5753,34 @@ static void M_DrawStatsMaps(int location)
|
||||||
if (y >= BASEVIDHEIGHT-8)
|
if (y >= BASEVIDHEIGHT-8)
|
||||||
goto bottomarrow;
|
goto bottomarrow;
|
||||||
}
|
}
|
||||||
|
if (dotopname && !location)
|
||||||
|
{
|
||||||
|
V_DrawString(20, y, V_GREENMAP, "LEVEL NAME");
|
||||||
|
V_DrawString(248, y, V_GREENMAP, "EMBLEMS");
|
||||||
|
y += 8;
|
||||||
|
}
|
||||||
|
else if (location)
|
||||||
|
--location;
|
||||||
|
|
||||||
// Extra Emblems
|
// Extra Emblems
|
||||||
for (i = -2; i < numextraemblems; ++i)
|
for (i = -2; i < numextraemblems; ++i)
|
||||||
{
|
{
|
||||||
|
if (i == -1)
|
||||||
|
{
|
||||||
|
V_DrawString(20, y, V_GREENMAP, "EXTRA EMBLEMS");
|
||||||
|
if (location)
|
||||||
|
{
|
||||||
|
y += 8;
|
||||||
|
location++;
|
||||||
|
}
|
||||||
|
}
|
||||||
if (location)
|
if (location)
|
||||||
{
|
{
|
||||||
--location;
|
--location;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (i == -1)
|
if (i >= 0)
|
||||||
V_DrawString(20, y, V_GREENMAP, "EXTRA EMBLEMS");
|
|
||||||
else if (i >= 0)
|
|
||||||
{
|
{
|
||||||
exemblem = &extraemblems[i];
|
exemblem = &extraemblems[i];
|
||||||
|
|
||||||
|
@ -5804,11 +5805,78 @@ bottomarrow:
|
||||||
|
|
||||||
static void M_DrawLevelStats(void)
|
static void M_DrawLevelStats(void)
|
||||||
{
|
{
|
||||||
M_DrawMenuTitle();
|
char beststr[40];
|
||||||
V_DrawCenteredString(BASEVIDWIDTH/2, 24, V_YELLOWMAP, "\x1C PAGE 2 OF 2 \x1D");
|
|
||||||
|
|
||||||
V_DrawString(72, 48, 0, va("x %d/%d", M_CountEmblems(), numemblems+numextraemblems));
|
tic_t besttime = 0;
|
||||||
V_DrawScaledPatch(40, 48-4, 0, W_CachePatchName("EMBLICON", PU_STATIC));
|
UINT32 bestscore = 0;
|
||||||
|
UINT32 bestrings = 0;
|
||||||
|
|
||||||
|
INT32 i;
|
||||||
|
INT32 mapsunfinished = 0;
|
||||||
|
boolean bestunfinished[3] = {false, false, false};
|
||||||
|
|
||||||
|
M_DrawMenuTitle();
|
||||||
|
|
||||||
|
V_DrawString(20, 24, V_YELLOWMAP, "Total Play Time:");
|
||||||
|
V_DrawCenteredString(BASEVIDWIDTH/2, 32, 0, va("%i hours, %i minutes, %i seconds",
|
||||||
|
G_TicsToHours(totalplaytime),
|
||||||
|
G_TicsToMinutes(totalplaytime, false),
|
||||||
|
G_TicsToSeconds(totalplaytime)));
|
||||||
|
|
||||||
|
for (i = 0; i < NUMMAPS; i++)
|
||||||
|
{
|
||||||
|
boolean mapunfinished = false;
|
||||||
|
|
||||||
|
if (!mapheaderinfo[i] || !(mapheaderinfo[i]->menuflags & LF2_RECORDATTACK))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (!mainrecords[i])
|
||||||
|
{
|
||||||
|
mapsunfinished++;
|
||||||
|
bestunfinished[0] = bestunfinished[1] = bestunfinished[2] = true;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (mainrecords[i]->score > 0)
|
||||||
|
bestscore += mainrecords[i]->score;
|
||||||
|
else
|
||||||
|
mapunfinished = bestunfinished[0] = true;
|
||||||
|
|
||||||
|
if (mainrecords[i]->time > 0)
|
||||||
|
besttime += mainrecords[i]->time;
|
||||||
|
else
|
||||||
|
mapunfinished = bestunfinished[1] = true;
|
||||||
|
|
||||||
|
if (mainrecords[i]->rings > 0)
|
||||||
|
bestrings += mainrecords[i]->rings;
|
||||||
|
else
|
||||||
|
mapunfinished = bestunfinished[2] = true;
|
||||||
|
|
||||||
|
if (mapunfinished)
|
||||||
|
mapsunfinished++;
|
||||||
|
}
|
||||||
|
|
||||||
|
V_DrawString(20, 48, 0, "Combined records:");
|
||||||
|
|
||||||
|
if (mapsunfinished)
|
||||||
|
V_DrawString(20, 56, V_REDMAP, va("(%d unfinished)", mapsunfinished));
|
||||||
|
else
|
||||||
|
V_DrawString(20, 56, V_GREENMAP, "(complete)");
|
||||||
|
|
||||||
|
V_DrawString(36, 64, 0, va("x %d/%d", M_CountEmblems(), numemblems+numextraemblems));
|
||||||
|
V_DrawSmallScaledPatch(20, 64, 0, W_CachePatchName("EMBLICON", PU_STATIC));
|
||||||
|
|
||||||
|
sprintf(beststr, "%u", bestscore);
|
||||||
|
V_DrawString(BASEVIDWIDTH/2, 48, V_YELLOWMAP, "SCORE:");
|
||||||
|
V_DrawRightAlignedString(BASEVIDWIDTH-16, 48, (bestunfinished[0] ? V_REDMAP : 0), beststr);
|
||||||
|
|
||||||
|
sprintf(beststr, "%i:%02i:%02i.%02i", G_TicsToHours(besttime), G_TicsToMinutes(besttime, false), G_TicsToSeconds(besttime), G_TicsToCentiseconds(besttime));
|
||||||
|
V_DrawString(BASEVIDWIDTH/2, 56, V_YELLOWMAP, "TIME:");
|
||||||
|
V_DrawRightAlignedString(BASEVIDWIDTH-16, 56, (bestunfinished[1] ? V_REDMAP : 0), beststr);
|
||||||
|
|
||||||
|
sprintf(beststr, "%u", bestrings);
|
||||||
|
V_DrawString(BASEVIDWIDTH/2, 64, V_YELLOWMAP, "RINGS:");
|
||||||
|
V_DrawRightAlignedString(BASEVIDWIDTH-16, 64, (bestunfinished[2] ? V_REDMAP : 0), beststr);
|
||||||
|
|
||||||
M_DrawStatsMaps(statsLocation);
|
M_DrawStatsMaps(statsLocation);
|
||||||
}
|
}
|
||||||
|
@ -5832,124 +5900,19 @@ static void M_HandleLevelStats(INT32 choice)
|
||||||
--statsLocation;
|
--statsLocation;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case KEY_PGUP:
|
|
||||||
S_StartSound(NULL, sfx_menu1);
|
|
||||||
statsLocation += (statsLocation+15 >= statsMax) ? statsMax-statsLocation : 15;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case KEY_PGDN:
|
case KEY_PGDN:
|
||||||
S_StartSound(NULL, sfx_menu1);
|
S_StartSound(NULL, sfx_menu1);
|
||||||
statsLocation -= (statsLocation < 15) ? statsLocation : 15;
|
statsLocation += (statsLocation+13 >= statsMax) ? statsMax-statsLocation : 13;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case KEY_PGUP:
|
||||||
|
S_StartSound(NULL, sfx_menu1);
|
||||||
|
statsLocation -= (statsLocation < 13) ? statsLocation : 13;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case KEY_ESCAPE:
|
case KEY_ESCAPE:
|
||||||
exitmenu = true;
|
exitmenu = true;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case KEY_LEFTARROW:
|
|
||||||
case KEY_RIGHTARROW:
|
|
||||||
case KEY_ENTER:
|
|
||||||
S_StartSound(NULL, sfx_menu1);
|
|
||||||
M_SetupNextMenu(&SP_GameStatsDef);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
if (exitmenu)
|
|
||||||
{
|
|
||||||
if (currentMenu->prevMenu)
|
|
||||||
M_SetupNextMenu(currentMenu->prevMenu);
|
|
||||||
else
|
|
||||||
M_ClearMenus(true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Handle GAME statistics.
|
|
||||||
static void M_DrawGameStats(void)
|
|
||||||
{
|
|
||||||
char beststr[40];
|
|
||||||
|
|
||||||
tic_t besttime = 0;
|
|
||||||
UINT32 bestscore = 0;
|
|
||||||
UINT32 bestrings = 0;
|
|
||||||
|
|
||||||
INT32 i;
|
|
||||||
INT32 mapsunfinished[3] = {0, 0, 0};
|
|
||||||
|
|
||||||
M_DrawMenuTitle();
|
|
||||||
V_DrawCenteredString(BASEVIDWIDTH/2, 24, V_YELLOWMAP, "\x1C PAGE 1 OF 2 \x1D");
|
|
||||||
|
|
||||||
V_DrawString(32, 60, V_YELLOWMAP, "Total Play Time:");
|
|
||||||
V_DrawRightAlignedString(BASEVIDWIDTH-32, 70, 0, va("%i hours, %i minutes, %i seconds",
|
|
||||||
G_TicsToHours(totalplaytime),
|
|
||||||
G_TicsToMinutes(totalplaytime, false),
|
|
||||||
G_TicsToSeconds(totalplaytime)));
|
|
||||||
|
|
||||||
for (i = 0; i < NUMMAPS; i++)
|
|
||||||
{
|
|
||||||
if (!mapheaderinfo[i] || !(mapheaderinfo[i]->menuflags & LF2_RECORDATTACK))
|
|
||||||
continue;
|
|
||||||
|
|
||||||
if (!mainrecords[i])
|
|
||||||
{
|
|
||||||
mapsunfinished[0]++;
|
|
||||||
mapsunfinished[1]++;
|
|
||||||
mapsunfinished[2]++;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (mainrecords[i]->score > 0)
|
|
||||||
bestscore += mainrecords[i]->score;
|
|
||||||
else
|
|
||||||
mapsunfinished[0]++;
|
|
||||||
|
|
||||||
if (mainrecords[i]->time > 0)
|
|
||||||
besttime += mainrecords[i]->time;
|
|
||||||
else
|
|
||||||
mapsunfinished[1]++;
|
|
||||||
|
|
||||||
if (mainrecords[i]->rings > 0)
|
|
||||||
bestrings += mainrecords[i]->rings;
|
|
||||||
else
|
|
||||||
mapsunfinished[2]++;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
V_DrawCenteredString(BASEVIDWIDTH/2, 90, 0, "* COMBINED RECORDS *");
|
|
||||||
|
|
||||||
sprintf(beststr, "%u", bestscore);
|
|
||||||
V_DrawString(32, 100, V_YELLOWMAP, "SCORE:");
|
|
||||||
V_DrawRightAlignedString(BASEVIDWIDTH-32, 100, 0, beststr);
|
|
||||||
if (mapsunfinished[0])
|
|
||||||
V_DrawRightAlignedString(BASEVIDWIDTH-32, 108, V_REDMAP, va("(%d unfinished)", mapsunfinished[0]));
|
|
||||||
|
|
||||||
sprintf(beststr, "%i:%02i:%02i.%02i", G_TicsToHours(besttime), G_TicsToMinutes(besttime, false), G_TicsToSeconds(besttime), G_TicsToCentiseconds(besttime));
|
|
||||||
V_DrawString(32, 120, V_YELLOWMAP, "TIME:");
|
|
||||||
V_DrawRightAlignedString(BASEVIDWIDTH-32, 120, 0, beststr);
|
|
||||||
if (mapsunfinished[1])
|
|
||||||
V_DrawRightAlignedString(BASEVIDWIDTH-32, 128, V_REDMAP, va("(%d unfinished)", mapsunfinished[1]));
|
|
||||||
|
|
||||||
sprintf(beststr, "%u", bestrings);
|
|
||||||
V_DrawString(32, 140, V_YELLOWMAP, "RINGS:");
|
|
||||||
V_DrawRightAlignedString(BASEVIDWIDTH-32, 140, 0, beststr);
|
|
||||||
if (mapsunfinished[2])
|
|
||||||
V_DrawRightAlignedString(BASEVIDWIDTH-32, 148, V_REDMAP, va("(%d unfinished)", mapsunfinished[2]));
|
|
||||||
}
|
|
||||||
|
|
||||||
static void M_HandleGameStats(INT32 choice)
|
|
||||||
{
|
|
||||||
boolean exitmenu = false; // exit to previous menu
|
|
||||||
|
|
||||||
switch (choice)
|
|
||||||
{
|
|
||||||
case KEY_ESCAPE:
|
|
||||||
exitmenu = true;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case KEY_LEFTARROW:
|
|
||||||
case KEY_RIGHTARROW:
|
|
||||||
case KEY_ENTER:
|
|
||||||
S_StartSound(NULL, sfx_menu1);
|
|
||||||
M_SetupNextMenu(&SP_LevelStatsDef);
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
if (exitmenu)
|
if (exitmenu)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue