mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2025-10-30 08:01:28 +00:00
Merge branch 'sealed-star-entry' into 'master'
Use rank percentage for Sealed Star entry, not grade See merge request kart-krew-dev/ring-racers-internal!2640
This commit is contained in:
commit
8a2dc00fe8
6 changed files with 40 additions and 26 deletions
|
|
@ -198,6 +198,8 @@ typedef enum
|
||||||
GRADE_S
|
GRADE_S
|
||||||
} gp_rank_e;
|
} gp_rank_e;
|
||||||
|
|
||||||
|
#define SEALED_STAR_ENTRY (370*FRACUNIT/400)
|
||||||
|
|
||||||
struct cupwindata_t
|
struct cupwindata_t
|
||||||
{
|
{
|
||||||
UINT8 best_placement;
|
UINT8 best_placement;
|
||||||
|
|
|
||||||
|
|
@ -4381,7 +4381,7 @@ void G_GetNextMap(void)
|
||||||
&& grandprixinfo.gamespeed >= KARTSPEED_NORMAL)
|
&& grandprixinfo.gamespeed >= KARTSPEED_NORMAL)
|
||||||
{
|
{
|
||||||
// On A rank pace? Then you get a chance for S rank!
|
// On A rank pace? Then you get a chance for S rank!
|
||||||
permitrank = (K_CalculateGPGrade(&grandprixinfo.rank) >= GRADE_A);
|
permitrank = (K_CalculateGPPercent(&grandprixinfo.rank) >= SEALED_STAR_ENTRY);
|
||||||
|
|
||||||
// If you're on Master, a win floats you to rank-restricted levels for free.
|
// If you're on Master, a win floats you to rank-restricted levels for free.
|
||||||
// (This is a different class of challenge!)
|
// (This is a different class of challenge!)
|
||||||
|
|
|
||||||
|
|
@ -7120,6 +7120,7 @@ static void K_DrawGPRankDebugger(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
grade = K_CalculateGPGrade(&grandprixinfo.rank);
|
grade = K_CalculateGPGrade(&grandprixinfo.rank);
|
||||||
|
fixed_t percent = K_CalculateGPPercent(&grandprixinfo.rank);
|
||||||
|
|
||||||
V_DrawThinString(0, 0, V_SNAPTOTOP|V_SNAPTOLEFT,
|
V_DrawThinString(0, 0, V_SNAPTOTOP|V_SNAPTOLEFT,
|
||||||
va("POS: %d / %d", grandprixinfo.rank.position, RANK_NEUTRAL_POSITION));
|
va("POS: %d / %d", grandprixinfo.rank.position, RANK_NEUTRAL_POSITION));
|
||||||
|
|
@ -7133,6 +7134,8 @@ static void K_DrawGPRankDebugger(void)
|
||||||
va("RINGS: %d / %d", grandprixinfo.rank.rings, grandprixinfo.rank.totalRings));
|
va("RINGS: %d / %d", grandprixinfo.rank.rings, grandprixinfo.rank.totalRings));
|
||||||
V_DrawThinString(0, 60, V_SNAPTOTOP|V_SNAPTOLEFT,
|
V_DrawThinString(0, 60, V_SNAPTOTOP|V_SNAPTOLEFT,
|
||||||
va("EMERALD: %s", (grandprixinfo.rank.specialWon == true) ? "YES" : "NO"));
|
va("EMERALD: %s", (grandprixinfo.rank.specialWon == true) ? "YES" : "NO"));
|
||||||
|
V_DrawThinString(0, 70, V_SNAPTOTOP|V_SNAPTOLEFT,
|
||||||
|
va("PERCENT: %.2f", FixedToFloat(percent)));
|
||||||
|
|
||||||
switch (grade)
|
switch (grade)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -548,13 +548,10 @@ void K_UpdateGPRank(gpRank_t *rankData)
|
||||||
rankData->Update();
|
rankData->Update();
|
||||||
}
|
}
|
||||||
|
|
||||||
/*--------------------------------------------------
|
|
||||||
gp_rank_e K_CalculateGPGrade(gpRank_t *rankData)
|
|
||||||
|
|
||||||
See header file for description.
|
|
||||||
--------------------------------------------------*/
|
|
||||||
gp_rank_e K_CalculateGPGrade(gpRank_t *rankData)
|
gp_rank_e K_CalculateGPGrade(gpRank_t *rankData)
|
||||||
{
|
{
|
||||||
|
INT32 retGrade = GRADE_E;
|
||||||
|
|
||||||
{
|
{
|
||||||
extern consvar_t cv_debugrank;
|
extern consvar_t cv_debugrank;
|
||||||
|
|
||||||
|
|
@ -564,6 +561,8 @@ gp_rank_e K_CalculateGPGrade(gpRank_t *rankData)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fixed_t percent = K_CalculateGPPercent(rankData);
|
||||||
|
|
||||||
static const fixed_t gradePercents[GRADE_A] = {
|
static const fixed_t gradePercents[GRADE_A] = {
|
||||||
7*FRACUNIT/20, // D: 35% or higher
|
7*FRACUNIT/20, // D: 35% or higher
|
||||||
10*FRACUNIT/20, // C: 50% or higher
|
10*FRACUNIT/20, // C: 50% or higher
|
||||||
|
|
@ -571,8 +570,31 @@ gp_rank_e K_CalculateGPGrade(gpRank_t *rankData)
|
||||||
17*FRACUNIT/20 // A: 85% or higher
|
17*FRACUNIT/20 // A: 85% or higher
|
||||||
};
|
};
|
||||||
|
|
||||||
INT32 retGrade = GRADE_E;
|
for (retGrade = GRADE_E; retGrade < GRADE_A; retGrade++)
|
||||||
|
{
|
||||||
|
if (percent < gradePercents[retGrade])
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (rankData->specialWon == true)
|
||||||
|
{
|
||||||
|
// Winning the Special Stage gives you
|
||||||
|
// a free grade increase.
|
||||||
|
retGrade++;
|
||||||
|
}
|
||||||
|
|
||||||
|
return static_cast<gp_rank_e>(retGrade);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*--------------------------------------------------
|
||||||
|
gp_rank_e K_CalculateGPGrade(gpRank_t *rankData)
|
||||||
|
|
||||||
|
See header file for description.
|
||||||
|
--------------------------------------------------*/
|
||||||
|
fixed_t K_CalculateGPPercent(gpRank_t *rankData)
|
||||||
|
{
|
||||||
rankData->scorePosition = 0;
|
rankData->scorePosition = 0;
|
||||||
rankData->scoreGPPoints = 0;
|
rankData->scoreGPPoints = 0;
|
||||||
rankData->scoreExp = 0;
|
rankData->scoreExp = 0;
|
||||||
|
|
@ -625,22 +647,8 @@ gp_rank_e K_CalculateGPGrade(gpRank_t *rankData)
|
||||||
rankData->scoreContinues;
|
rankData->scoreContinues;
|
||||||
|
|
||||||
const fixed_t percent = FixedDiv(rankData->scoreTotal, total);
|
const fixed_t percent = FixedDiv(rankData->scoreTotal, total);
|
||||||
for (retGrade = GRADE_E; retGrade < GRADE_A; retGrade++)
|
|
||||||
{
|
|
||||||
if (percent < gradePercents[retGrade])
|
|
||||||
{
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (rankData->specialWon == true)
|
return percent;
|
||||||
{
|
|
||||||
// Winning the Special Stage gives you
|
|
||||||
// a free grade increase.
|
|
||||||
retGrade++;
|
|
||||||
}
|
|
||||||
|
|
||||||
return static_cast<gp_rank_e>(retGrade);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*--------------------------------------------------
|
/*--------------------------------------------------
|
||||||
|
|
|
||||||
|
|
@ -159,6 +159,7 @@ void K_UpdateGPRank(gpRank_t *rankData);
|
||||||
--------------------------------------------------*/
|
--------------------------------------------------*/
|
||||||
|
|
||||||
gp_rank_e K_CalculateGPGrade(gpRank_t *rankData);
|
gp_rank_e K_CalculateGPGrade(gpRank_t *rankData);
|
||||||
|
fixed_t K_CalculateGPPercent(gpRank_t *rankData);
|
||||||
|
|
||||||
|
|
||||||
/*--------------------------------------------------
|
/*--------------------------------------------------
|
||||||
|
|
|
||||||
|
|
@ -400,14 +400,14 @@ static void Y_CalculateMatchData(UINT8 rankingsmode, void (*comparison)(INT32))
|
||||||
if (roundqueue.position == roundqueue.size-1)
|
if (roundqueue.position == roundqueue.size-1)
|
||||||
{
|
{
|
||||||
// On A rank pace? Then you get a chance for S rank!
|
// On A rank pace? Then you get a chance for S rank!
|
||||||
gp_rank_e rankforline = K_CalculateGPGrade(&grandprixinfo.rank);
|
fixed_t rankforline = K_CalculateGPPercent(&grandprixinfo.rank);
|
||||||
|
|
||||||
data.showrank = (rankforline >= GRADE_A);
|
data.showrank = (rankforline >= SEALED_STAR_ENTRY);
|
||||||
|
|
||||||
data.linemeter =
|
data.linemeter =
|
||||||
(std::min(rankforline, GRADE_A)
|
(std::min(rankforline, SEALED_STAR_ENTRY)
|
||||||
* (2 * TICRATE)
|
* (2 * TICRATE)
|
||||||
) / GRADE_A;
|
) / SEALED_STAR_ENTRY;
|
||||||
|
|
||||||
// G_NextMap will float you to rank-restricted stages on Master wins.
|
// G_NextMap will float you to rank-restricted stages on Master wins.
|
||||||
// Fudge the rank display.
|
// Fudge the rank display.
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue