Higher Sealed Star entry reqs for first entry

This commit is contained in:
Antonio Martinez 2025-09-14 21:48:31 -04:00
parent f61e98c1a8
commit c7e07576f8
5 changed files with 23 additions and 17 deletions

View file

@ -198,8 +198,6 @@ typedef enum
GRADE_S
} gp_rank_e;
#define SEALED_STAR_ENTRY (355*FRACUNIT/400)
struct cupwindata_t
{
UINT8 best_placement;

View file

@ -4421,7 +4421,7 @@ void G_GetNextMap(void)
&& grandprixinfo.gamespeed >= KARTSPEED_NORMAL)
{
// On A rank pace? Then you get a chance for S rank!
permitrank = (K_CalculateGPPercent(&grandprixinfo.rank) >= SEALED_STAR_ENTRY);
permitrank = (K_CalculateGPPercent(&grandprixinfo.rank) >= K_SealedStarEntryRequirement(&grandprixinfo.rank));
// If you're on Master, a win floats you to rank-restricted levels for free.
// (This is a different class of challenge!)

View file

@ -27,6 +27,7 @@
#include "k_race.h"
#include "command.h"
#include "k_objects.h"
#include "m_cond.h"
// I was ALMOST tempted to start tearing apart all
// of the map loading code and turning it into C++
@ -311,7 +312,7 @@ void gpRank_t::Init(void)
}
}
// Calculate players
// Calculate players
numPlayers = numHumans;
totalPlayers = K_GetGPPlayerCount(numHumans);
@ -588,6 +589,19 @@ gp_rank_e K_CalculateGPGrade(gpRank_t *rankData)
return static_cast<gp_rank_e>(retGrade);
}
fixed_t K_SealedStarEntryRequirement(gpRank_t *rankData)
{
fixed_t entry = 370*FRACUNIT/400;
if (gamedata->everseenspecial)
entry -= 350*FRACUNIT/400;
if (grandprixinfo.masterbots && grandprixinfo.rank.position <= 1)
entry = K_CalculateGPPercent(rankData);
return entry;
}
/*--------------------------------------------------
gp_rank_e K_CalculateGPGrade(gpRank_t *rankData)
@ -638,10 +652,10 @@ fixed_t K_CalculateGPPercent(gpRank_t *rankData)
rankData->scoreContinues -= (rankData->continuesUsed - RANK_CONTINUE_PENALTY_START) * continuesPenalty;
rankData->scoreTotal =
rankData->scoreTotal =
rankData->scorePosition +
// rankData->scoreGPPoints +
rankData->scoreExp +
rankData->scoreExp +
rankData->scorePrisons +
rankData->scoreRings +
rankData->scoreContinues;

View file

@ -159,6 +159,7 @@ void K_UpdateGPRank(gpRank_t *rankData);
--------------------------------------------------*/
gp_rank_e K_CalculateGPGrade(gpRank_t *rankData);
fixed_t K_SealedStarEntryRequirement(gpRank_t *rankData);
fixed_t K_CalculateGPPercent(gpRank_t *rankData);

View file

@ -398,21 +398,14 @@ static void Y_CalculateMatchData(UINT8 rankingsmode, void (*comparison)(INT32))
{
// On A rank pace? Then you get a chance for S rank!
fixed_t rankforline = K_CalculateGPPercent(&grandprixinfo.rank);
fixed_t required = K_SealedStarEntryRequirement(&grandprixinfo.rank);
data.showrank = (rankforline >= SEALED_STAR_ENTRY);
data.showrank = (rankforline >= required);
data.linemeter =
(std::min(rankforline, SEALED_STAR_ENTRY)
(std::min(rankforline, required)
* (2 * TICRATE)
) / SEALED_STAR_ENTRY;
// G_NextMap will float you to rank-restricted stages on Master wins.
// Fudge the rank display.
if (grandprixinfo.masterbots && grandprixinfo.rank.position <= 1)
{
data.showrank = true;
data.linemeter = 2*TICRATE;
}
) / required;
// A little extra time to take it all in
timer += TICRATE;