Merge branch 'intermission-grade' into 'master'

Show rank on intermission

See merge request KartKrew/Kart!1689
This commit is contained in:
Oni 2023-12-14 23:31:28 +00:00
commit d68b5e7e10
4 changed files with 46 additions and 7 deletions

View file

@ -170,6 +170,7 @@ struct recorddata_t
typedef enum typedef enum
{ {
GRADE_INVALID = -1,
GRADE_E, GRADE_E,
GRADE_D, GRADE_D,
GRADE_C, GRADE_C,

View file

@ -311,7 +311,7 @@ void level_tally_t::Init(player_t *player)
points = pointLimit = 0; points = pointLimit = 0;
powerStones = 0; powerStones = 0;
rank = GRADE_E; rank = GRADE_INVALID;
if (player->spectator == false && player->bot == false && game_over == false) if (player->spectator == false && player->bot == false && game_over == false)
{ {
@ -475,19 +475,27 @@ void level_tally_t::Init(player_t *player)
header[sizeof header - 1] = '\0'; header[sizeof header - 1] = '\0';
// Only show grade if there were any bonuses // Only show grade if there were any bonuses
showGrade = (position > 0); if (rank != GRADE_INVALID)
if (showGrade == false)
{ {
for (int i = 0; i < TALLY_WINDOW_SIZE; i++) showGrade = (position > 0);
if (showGrade == false)
{ {
if (bonuses[i] != TALLY_BONUS_NA) for (int i = 0; i < TALLY_WINDOW_SIZE; i++)
{ {
showGrade = true; if (bonuses[i] != TALLY_BONUS_NA)
break; {
showGrade = true;
break;
}
} }
} }
} }
if (showGrade == false)
{
rank = GRADE_INVALID;
}
lineCount = 0; lineCount = 0;
for (int i = 0; i < TALLY_WINDOW_SIZE; i++) for (int i = 0; i < TALLY_WINDOW_SIZE; i++)
{ {

View file

@ -171,6 +171,7 @@ static void Y_CalculateMatchData(UINT8 rankingsmode, void (*comparison)(INT32))
for (i = 0; i < MAXPLAYERS; i++) for (i = 0; i < MAXPLAYERS; i++)
{ {
data.val[i] = UINT32_MAX; data.val[i] = UINT32_MAX;
data.grade[i] = GRADE_INVALID;
if (!playeringame[i] || players[i].spectator) if (!playeringame[i] || players[i].spectator)
{ {
@ -205,6 +206,7 @@ static void Y_CalculateMatchData(UINT8 rankingsmode, void (*comparison)(INT32))
i = data.num[data.numplayers]; i = data.num[data.numplayers];
completed[i] = true; completed[i] = true;
data.grade[i] = players[i].tally.rank;
data.color[data.numplayers] = players[i].skincolor; data.color[data.numplayers] = players[i].skincolor;
data.character[data.numplayers] = players[i].skin; data.character[data.numplayers] = players[i].skin;
@ -736,7 +738,33 @@ void Y_PlayerStandingsDrawer(y_data_t *standings, INT32 xoffset)
); );
} }
} }
}
else if (standings->grade[pnum] != GRADE_INVALID)
{
patch_t *gradePtc = W_CachePatchName(va("R_INRNK%c", K_GetGradeChar(standings->grade[pnum])), PU_PATCH);
patch_t *gradeBG = NULL;
UINT16 gradeColor = SKINCOLOR_NONE;
UINT8 *gradeClm = NULL;
gradeColor = K_GetGradeColor(standings->grade[pnum]);
if (gradeColor != SKINCOLOR_NONE)
{
gradeClm = R_GetTranslationColormap(TC_DEFAULT, gradeColor, GTC_CACHE);
}
if (datarightofcolumn)
{
gradeBG = W_CachePatchName("R_INRNKR", PU_PATCH);
V_DrawMappedPatch(x + 118, y, 0, gradeBG, gradeClm);
V_DrawMappedPatch(x + 118 + 4, y - 1, 0, gradePtc, gradeClm);
}
else
{
gradeBG = W_CachePatchName("R_INRNKL", PU_PATCH);
V_DrawMappedPatch(x - 12, y, 0, gradeBG, gradeClm);
V_DrawMappedPatch(x - 12 + 3, y - 1, 0, gradePtc, gradeClm);
}
} }
// Reverse the jitter offset // Reverse the jitter offset

View file

@ -41,6 +41,8 @@ typedef struct
INT16 increase[MAXPLAYERS]; // how much did the score increase by? INT16 increase[MAXPLAYERS]; // how much did the score increase by?
UINT8 jitter[MAXPLAYERS]; // wiggle UINT8 jitter[MAXPLAYERS]; // wiggle
SINT8 grade[MAXPLAYERS]; // grade, if not a bot
UINT8 mainplayer; // Most successful local player UINT8 mainplayer; // Most successful local player
INT32 linemeter; // For GP only INT32 linemeter; // For GP only
} y_data_t; } y_data_t;