diff --git a/src/d_netcmd.c b/src/d_netcmd.c index 54ebdcebd..a1fae65f2 100644 --- a/src/d_netcmd.c +++ b/src/d_netcmd.c @@ -453,6 +453,7 @@ consvar_t cv_kartdebugcolorize = CVAR_INIT ("debugcolorize", "Off", CV_CHEAT, CV consvar_t cv_kartdebugdirector = CVAR_INIT ("debugdirector", "Off", CV_CHEAT, CV_OnOff, NULL); consvar_t cv_spbtest = CVAR_INIT ("spbtest", "Off", CV_CHEAT|CV_NETVAR, CV_OnOff, NULL); consvar_t cv_gptest = CVAR_INIT ("gptest", "Off", CV_CHEAT|CV_NETVAR, CV_OnOff, NULL); +consvar_t cv_debugrank = CVAR_INIT ("debugrank", "Off", CV_CHEAT, CV_OnOff, NULL); static CV_PossibleValue_t capsuletest_cons_t[] = { {CV_CAPSULETEST_OFF, "Off"}, diff --git a/src/d_netcmd.h b/src/d_netcmd.h index a126de023..e6c10fa11 100644 --- a/src/d_netcmd.h +++ b/src/d_netcmd.h @@ -96,6 +96,7 @@ extern consvar_t cv_kartdebugitem, cv_kartdebugamount, cv_kartdebugdistribution, extern consvar_t cv_kartdebugnodes, cv_kartdebugcolorize, cv_kartdebugdirector; extern consvar_t cv_spbtest, cv_gptest, cv_reducevfx; extern consvar_t cv_kartdebugwaypoints, cv_kartdebugbotpredict; +extern consvar_t cv_debugrank; typedef enum { CV_CAPSULETEST_OFF, diff --git a/src/k_hud.c b/src/k_hud.c index 7fe62a8a6..af93c6ef0 100644 --- a/src/k_hud.c +++ b/src/k_hud.c @@ -4798,6 +4798,58 @@ static void K_DrawWaypointDebugger(void) } } +static void K_DrawGPRankDebugger(void) +{ + gp_rank_e grade = GRADE_E; + char gradeChar = '?'; + + if (cv_debugrank.value == 0) + { + return; + } + + if (stplyr != &players[displayplayers[0]]) // only for p1 + { + return; + } + + if (grandprixinfo.gp == false) + { + return; + } + + grade = K_CalculateGPGrade(&g_gpRank); + + V_DrawThinString(0, 0, V_SNAPTOTOP|V_SNAPTOLEFT|V_6WIDTHSPACE|V_ALLOWLOWERCASE, + va("PTS: %d / %d", g_gpRank.winPoints, g_gpRank.totalPoints)); + V_DrawThinString(0, 10, V_SNAPTOTOP|V_SNAPTOLEFT|V_6WIDTHSPACE|V_ALLOWLOWERCASE, + va("LAPS: %d / %d", g_gpRank.laps, g_gpRank.totalLaps)); + V_DrawThinString(0, 20, V_SNAPTOTOP|V_SNAPTOLEFT|V_6WIDTHSPACE|V_ALLOWLOWERCASE, + va("CONTINUES: %d", g_gpRank.continuesUsed)); + V_DrawThinString(0, 30, V_SNAPTOTOP|V_SNAPTOLEFT|V_6WIDTHSPACE|V_ALLOWLOWERCASE, + va("CAPSULES: %d / %d", g_gpRank.capsules, g_gpRank.totalCapsules)); + V_DrawThinString(0, 40, V_SNAPTOTOP|V_SNAPTOLEFT|V_6WIDTHSPACE|V_ALLOWLOWERCASE, + va("RINGS: %d / %d", g_gpRank.rings, g_gpRank.totalRings)); + V_DrawThinString(0, 50, V_SNAPTOTOP|V_SNAPTOLEFT|V_6WIDTHSPACE|V_ALLOWLOWERCASE, + va("DIFFICULTY: %d / %d", g_gpRank.difficulty, g_gpRank.difficultyTarget)); + V_DrawThinString(0, 60, V_SNAPTOTOP|V_SNAPTOLEFT|V_6WIDTHSPACE|V_ALLOWLOWERCASE, + va("SPECIAL: %s", (g_gpRank.specialWon == true) ? "YES" : "NO")); + + switch (grade) + { + case GRADE_E: { gradeChar = 'E'; break; } + case GRADE_D: { gradeChar = 'D'; break; } + case GRADE_C: { gradeChar = 'C'; break; } + case GRADE_B: { gradeChar = 'B'; break; } + case GRADE_A: { gradeChar = 'A'; break; } + case GRADE_S: { gradeChar = 'S'; break; } + default: { break; } + } + + V_DrawThinString(0, 80, V_SNAPTOTOP|V_SNAPTOLEFT|V_6WIDTHSPACE|V_ALLOWLOWERCASE|V_YELLOWMAP, + va(" ** FINAL GRADE: %c", gradeChar)); +} + void K_drawKartHUD(void) { boolean islonesome = false; @@ -5069,39 +5121,5 @@ void K_drawKartHUD(void) K_DrawWaypointDebugger(); K_DrawDirectorDebugger(); - - if (grandprixinfo.gp == true) - { - gp_rank_e grade = K_CalculateGPGrade(&g_gpRank); - char gradeChar = '?'; - - V_DrawThinString(0, 0, V_SNAPTOTOP|V_SNAPTOLEFT|V_6WIDTHSPACE|V_ALLOWLOWERCASE, - va("PTS: %d / %d", g_gpRank.winPoints, g_gpRank.totalPoints)); - V_DrawThinString(0, 10, V_SNAPTOTOP|V_SNAPTOLEFT|V_6WIDTHSPACE|V_ALLOWLOWERCASE, - va("LAPS: %d / %d", g_gpRank.laps, g_gpRank.totalLaps)); - V_DrawThinString(0, 20, V_SNAPTOTOP|V_SNAPTOLEFT|V_6WIDTHSPACE|V_ALLOWLOWERCASE, - va("CONTINUES: %d", g_gpRank.continuesUsed)); - V_DrawThinString(0, 30, V_SNAPTOTOP|V_SNAPTOLEFT|V_6WIDTHSPACE|V_ALLOWLOWERCASE, - va("CAPSULES: %d / %d", g_gpRank.capsules, g_gpRank.totalCapsules)); - V_DrawThinString(0, 40, V_SNAPTOTOP|V_SNAPTOLEFT|V_6WIDTHSPACE|V_ALLOWLOWERCASE, - va("RINGS: %d / %d", g_gpRank.rings, g_gpRank.totalRings)); - V_DrawThinString(0, 50, V_SNAPTOTOP|V_SNAPTOLEFT|V_6WIDTHSPACE|V_ALLOWLOWERCASE, - va("DIFFICULTY: %d / %d", g_gpRank.difficulty, g_gpRank.difficultyTarget)); - V_DrawThinString(0, 60, V_SNAPTOTOP|V_SNAPTOLEFT|V_6WIDTHSPACE|V_ALLOWLOWERCASE, - va("SPECIAL: %s", (g_gpRank.specialWon == true) ? "YES" : "NO")); - - switch (grade) - { - case GRADE_E: { gradeChar = 'E'; break; } - case GRADE_D: { gradeChar = 'D'; break; } - case GRADE_C: { gradeChar = 'C'; break; } - case GRADE_B: { gradeChar = 'B'; break; } - case GRADE_A: { gradeChar = 'A'; break; } - case GRADE_S: { gradeChar = 'S'; break; } - default: { break; } - } - - V_DrawThinString(0, 80, V_SNAPTOTOP|V_SNAPTOLEFT|V_6WIDTHSPACE|V_ALLOWLOWERCASE|V_YELLOWMAP, - va(" ** FINAL GRADE: %c", gradeChar)); - } + K_DrawGPRankDebugger(); } diff --git a/src/k_kart.c b/src/k_kart.c index 6b1a54739..10ab61c8d 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -347,6 +347,7 @@ void K_RegisterKartStuff(void) CV_RegisterVar(&cv_kartdebugnodes); CV_RegisterVar(&cv_kartdebugcolorize); CV_RegisterVar(&cv_kartdebugdirector); + CV_RegisterVar(&cv_debugrank); CV_RegisterVar(&cv_spbtest); CV_RegisterVar(&cv_gptest); CV_RegisterVar(&cv_capsuletest); diff --git a/src/k_podium.c b/src/k_podium.c index c7d5a4af1..0ff0e23a5 100644 --- a/src/k_podium.c +++ b/src/k_podium.c @@ -45,13 +45,20 @@ #include "k_menu.h" #include "k_grandprix.h" +#include "k_rank.h" static struct podiumData_s { boolean ranking; + gpRank_t rankData; + gp_rank_e grade; + UINT8 state; + UINT8 delay; UINT8 fade; } podiumData; +#define PODIUM_STATES (9) // TODO: enum + /*-------------------------------------------------- boolean K_PodiumSequence(void) @@ -267,6 +274,14 @@ void K_FinishCeremony(void) void K_ResetCeremony(void) { memset(&podiumData, 0, sizeof(struct podiumData_s)); + + if (K_PodiumSequence() == false) + { + return; + } + + podiumData.rankData = g_gpRank; + podiumData.grade = K_CalculateGPGrade(&podiumData.rankData); } /*-------------------------------------------------- @@ -305,6 +320,19 @@ void K_CeremonyTicker(boolean run) { podiumData.fade++; } + else + { + if (podiumData.state < PODIUM_STATES) + { + podiumData.delay++; + + if (podiumData.delay > TICRATE) + { + podiumData.state++; + podiumData.delay = 0; + } + } + } } } @@ -317,7 +345,7 @@ boolean K_CeremonyResponder(event_t *event) { INT32 key = event->data1; - if (podiumData.ranking == false || podiumData.fade < 16) + if (podiumData.ranking == false || podiumData.state < PODIUM_STATES) { return false; } @@ -377,8 +405,88 @@ void K_CeremonyDrawer(void) { if (podiumData.ranking == true) { + char gradeChar = '?'; + INT32 x = 64; + INT32 y = 48; + INT32 i; + + switch (podiumData.grade) + { + case GRADE_E: { gradeChar = 'E'; break; } + case GRADE_D: { gradeChar = 'D'; break; } + case GRADE_C: { gradeChar = 'C'; break; } + case GRADE_B: { gradeChar = 'B'; break; } + case GRADE_A: { gradeChar = 'A'; break; } + case GRADE_S: { gradeChar = 'S'; break; } + default: { break; } + } + V_DrawFadeScreen(0xFF00, podiumData.fade); - V_DrawCenteredString(BASEVIDWIDTH / 2, 64, 0, "STUFF GOES HERE"); + + for (i = 0; i <= podiumData.state; i++) + { + switch (i) + { + case 1: + { + V_DrawString(x, y, V_SNAPTOTOP|V_SNAPTOLEFT|V_ALLOWLOWERCASE, + va("PTS: %d / %d", g_gpRank.winPoints, g_gpRank.totalPoints) + ); + break; + } + case 2: + { + V_DrawString(x, y, V_SNAPTOTOP|V_SNAPTOLEFT|V_ALLOWLOWERCASE, + va("LAPS: %d / %d", g_gpRank.laps, g_gpRank.totalLaps) + ); + break; + } + case 3: + { + V_DrawString(x, y, V_SNAPTOTOP|V_SNAPTOLEFT|V_ALLOWLOWERCASE, + va("CONTINUES: %d", g_gpRank.continuesUsed) + ); + break; + } + case 4: + { + V_DrawString(x, y, V_SNAPTOTOP|V_SNAPTOLEFT|V_ALLOWLOWERCASE, + va("CAPSULES: %d / %d", g_gpRank.capsules, g_gpRank.totalCapsules) + ); + break; + } + case 5: + { + V_DrawString(x, y, V_SNAPTOTOP|V_SNAPTOLEFT|V_ALLOWLOWERCASE, + va("RINGS: %d / %d", g_gpRank.rings, g_gpRank.totalRings) + ); + break; + } + case 6: + { + V_DrawString(x, y, V_SNAPTOTOP|V_SNAPTOLEFT|V_ALLOWLOWERCASE, + va("DIFFICULTY: %d / %d", g_gpRank.difficulty, g_gpRank.difficultyTarget) + ); + break; + } + case 7: + { + V_DrawString(x, y, V_SNAPTOTOP|V_SNAPTOLEFT|V_ALLOWLOWERCASE, + va("SPECIAL: %s", (g_gpRank.specialWon == true) ? "YES" : "NO") + ); + break; + } + case 8: + { + V_DrawString(x, y + 10, V_SNAPTOTOP|V_SNAPTOLEFT|V_ALLOWLOWERCASE, + va(" ** FINAL GRADE: %c", gradeChar) + ); + break; + } + } + + y += 10; + } } if (timeinmap < 16)