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
{
GRADE_INVALID = -1,
GRADE_E,
GRADE_D,
GRADE_C,

View file

@ -311,7 +311,7 @@ void level_tally_t::Init(player_t *player)
points = pointLimit = 0;
powerStones = 0;
rank = GRADE_E;
rank = GRADE_INVALID;
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';
// Only show grade if there were any bonuses
showGrade = (position > 0);
if (showGrade == false)
if (rank != GRADE_INVALID)
{
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;
break;
if (bonuses[i] != TALLY_BONUS_NA)
{
showGrade = true;
break;
}
}
}
}
if (showGrade == false)
{
rank = GRADE_INVALID;
}
lineCount = 0;
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++)
{
data.val[i] = UINT32_MAX;
data.grade[i] = GRADE_INVALID;
if (!playeringame[i] || players[i].spectator)
{
@ -205,6 +206,7 @@ static void Y_CalculateMatchData(UINT8 rankingsmode, void (*comparison)(INT32))
i = data.num[data.numplayers];
completed[i] = true;
data.grade[i] = players[i].tally.rank;
data.color[data.numplayers] = players[i].skincolor;
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

View file

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