From c7e07576f809dd982f6ae96e92d3fd756a9eea15 Mon Sep 17 00:00:00 2001 From: Antonio Martinez Date: Sun, 14 Sep 2025 21:48:31 -0400 Subject: [PATCH] Higher Sealed Star entry reqs for first entry --- src/doomstat.h | 2 -- src/g_game.c | 2 +- src/k_rank.cpp | 20 +++++++++++++++++--- src/k_rank.h | 1 + src/y_inter.cpp | 15 ++++----------- 5 files changed, 23 insertions(+), 17 deletions(-) diff --git a/src/doomstat.h b/src/doomstat.h index 1ef94f77d..3ddf9779c 100644 --- a/src/doomstat.h +++ b/src/doomstat.h @@ -198,8 +198,6 @@ typedef enum GRADE_S } gp_rank_e; -#define SEALED_STAR_ENTRY (355*FRACUNIT/400) - struct cupwindata_t { UINT8 best_placement; diff --git a/src/g_game.c b/src/g_game.c index 204d6ed84..68b185f2f 100644 --- a/src/g_game.c +++ b/src/g_game.c @@ -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!) diff --git a/src/k_rank.cpp b/src/k_rank.cpp index 9cafd98a8..01d4a2a9f 100644 --- a/src/k_rank.cpp +++ b/src/k_rank.cpp @@ -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(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; diff --git a/src/k_rank.h b/src/k_rank.h index 1c256996b..cbbcff366 100644 --- a/src/k_rank.h +++ b/src/k_rank.h @@ -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); diff --git a/src/y_inter.cpp b/src/y_inter.cpp index 316a432f4..a613cf3ff 100644 --- a/src/y_inter.cpp +++ b/src/y_inter.cpp @@ -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;