From 0da0cf4909bac7aea4e916a96648d09e821a00a5 Mon Sep 17 00:00:00 2001 From: Ashnal Date: Mon, 6 Oct 2025 18:16:03 -0400 Subject: [PATCH 1/3] last place can get points now --- src/k_grandprix.cpp | 2 +- src/y_inter.cpp | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/k_grandprix.cpp b/src/k_grandprix.cpp index 7891306b2..0efcdf9da 100644 --- a/src/k_grandprix.cpp +++ b/src/k_grandprix.cpp @@ -60,7 +60,7 @@ INT16 K_CalculateGPRankPoints(UINT16 exp, UINT8 position, UINT8 numplayers) { INT16 points; - if (position >= numplayers || position == 0) + if (position > numplayers || position == 0) { // Invalid position, no points return 0; diff --git a/src/y_inter.cpp b/src/y_inter.cpp index 00752ce83..cceb14a7e 100644 --- a/src/y_inter.cpp +++ b/src/y_inter.cpp @@ -295,8 +295,7 @@ static void Y_CalculateMatchData(UINT8 rankingsmode, void (*comparison)(INT32)) { UINT8 pointgetters = numplayersingame + spectateGriefed; - if (data.pos[data.numplayers] < pointgetters - && !(players[i].pflags & PF_NOCONTEST)) + if (data.pos[data.numplayers] <= pointgetters) { data.increase[i] = K_CalculateGPRankPoints((&players[i])->exp, data.pos[data.numplayers], pointgetters); From 9e0920f45e97e222dd0056a4f9e3c7b70ab9d540 Mon Sep 17 00:00:00 2001 From: Ashnal Date: Mon, 6 Oct 2025 18:36:33 -0400 Subject: [PATCH 2/3] properly calculate exp for remaining grading points when a player no contests --- src/p_user.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/p_user.c b/src/p_user.c index d95a3b0fc..aa6ef741a 100644 --- a/src/p_user.c +++ b/src/p_user.c @@ -3988,6 +3988,16 @@ void P_DoTimeOver(player_t *player) CON_LogMessage(va(M_GetText("%s ran out of time.\n"), player_names[player-players])); } + // iterate through remaining gradingpoints and update gradingfactor and exp for current position, as if you crossed all of them + const UINT32 numgradingpoints = K_GetNumGradingPoints(); + const UINT32 remaininggradingpoints = numgradingpoints - player->gradingpointnum; + for (UINT32 i = 0; i < remaininggradingpoints; i++) + { + player->gradingfactor += K_GetGradingFactorAdjustment(player, player->gradingpointnum); + player->gradingpointnum++; + player->exp = K_GetEXP(player); + } + player->pflags |= PF_NOCONTEST; K_UpdatePowerLevelsFinalize(player, false); From 644ead272b45724141b28e78dcff4401b13cf80f Mon Sep 17 00:00:00 2001 From: Ashnal Date: Mon, 6 Oct 2025 18:48:50 -0400 Subject: [PATCH 3/3] lets not do that actually, as a penalty --- src/p_user.c | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/src/p_user.c b/src/p_user.c index aa6ef741a..0ce7d3775 100644 --- a/src/p_user.c +++ b/src/p_user.c @@ -3988,15 +3988,17 @@ void P_DoTimeOver(player_t *player) CON_LogMessage(va(M_GetText("%s ran out of time.\n"), player_names[player-players])); } + // actually, lets not do the below, because its a suitable penalty to not be granted the increase from remaining gradingpoints + // iterate through remaining gradingpoints and update gradingfactor and exp for current position, as if you crossed all of them - const UINT32 numgradingpoints = K_GetNumGradingPoints(); - const UINT32 remaininggradingpoints = numgradingpoints - player->gradingpointnum; - for (UINT32 i = 0; i < remaininggradingpoints; i++) - { - player->gradingfactor += K_GetGradingFactorAdjustment(player, player->gradingpointnum); - player->gradingpointnum++; - player->exp = K_GetEXP(player); - } + // const UINT32 numgradingpoints = K_GetNumGradingPoints(); + // const UINT32 remaininggradingpoints = numgradingpoints - player->gradingpointnum; + // for (UINT32 i = 0; i < remaininggradingpoints; i++) + // { + // player->gradingfactor += K_GetGradingFactorAdjustment(player, player->gradingpointnum); + // player->gradingpointnum++; + // player->exp = K_GetEXP(player); + // } player->pflags |= PF_NOCONTEST; K_UpdatePowerLevelsFinalize(player, false);