From 97dcc33f0dedfeba54e5a9411b6d8da850cb8dba Mon Sep 17 00:00:00 2001 From: AJ Martinez Date: Thu, 1 Feb 2024 23:31:35 -0700 Subject: [PATCH] Reset cheatchecks when respawns would decrease lap --- src/d_player.h | 1 + src/g_game.c | 4 ++++ src/k_kart.c | 1 + src/k_respawn.c | 7 ++++++- src/lua_playerlib.c | 4 ++++ src/p_saveg.c | 2 ++ 6 files changed, 18 insertions(+), 1 deletion(-) diff --git a/src/d_player.h b/src/d_player.h index ab6a1d917..a29de3368 100644 --- a/src/d_player.h +++ b/src/d_player.h @@ -954,6 +954,7 @@ struct player_t UINT8 finalfailsafe; // When you can't Ringshooter, force respawn as a last ditch effort! UINT8 lastsafelap; + UINT8 lastsafecheatcheck; fixed_t topAccel; // Reduced on straight wall collisions to give players extra recovery time diff --git a/src/g_game.c b/src/g_game.c index ae8df057a..cb1162ba1 100644 --- a/src/g_game.c +++ b/src/g_game.c @@ -2112,6 +2112,7 @@ void G_PlayerReborn(INT32 player, boolean betweenmaps) INT32 checkpointId; boolean enteredGame; UINT8 lastsafelap; + UINT8 lastsafecheatcheck; roundconditions_t roundconditions; boolean saveroundconditions; @@ -2220,6 +2221,7 @@ void G_PlayerReborn(INT32 player, boolean betweenmaps) khudfinish = 0; cheatchecknum = 0; lastsafelap = 0; + lastsafecheatcheck = 0; saveroundconditions = false; tallyactive = false; @@ -2267,6 +2269,7 @@ void G_PlayerReborn(INT32 player, boolean betweenmaps) saveroundconditions = true; lastsafelap = players[player].lastsafelap; + lastsafecheatcheck = players[player].lastsafecheatcheck; tallyactive = players[player].tally.active; if (tallyactive) @@ -2339,6 +2342,7 @@ void G_PlayerReborn(INT32 player, boolean betweenmaps) p->steering = steering; p->angleturn = playerangleturn; p->lastsafelap = lastsafelap; + p->lastsafecheatcheck = lastsafecheatcheck; // save player config truth reborn p->skincolor = skincolor; diff --git a/src/k_kart.c b/src/k_kart.c index 6740e07e0..39ef6e942 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -9578,6 +9578,7 @@ static waypoint_t *K_GetPlayerNextWaypoint(player_t *player) { player->respawn.wp = bestwaypoint; player->lastsafelap = player->laps; + player->lastsafecheatcheck = player->cheatchecknum; } } diff --git a/src/k_respawn.c b/src/k_respawn.c index 28f8d0403..058052d8e 100644 --- a/src/k_respawn.c +++ b/src/k_respawn.c @@ -317,7 +317,12 @@ void K_DoIngameRespawn(player_t *player) player->respawn.init = true; player->respawn.fast = true; player->respawn.returnspeed = 0; - player->laps = min(player->laps, player->lastsafelap); + + if (player->lastsafelap < player->laps) + { + player->laps = player->lastsafelap; + player->cheatchecknum = player->lastsafecheatcheck; + } player->respawn.airtimer = player->airtime; player->respawn.truedeath = !!(player->pflags & PF_FAULT); diff --git a/src/lua_playerlib.c b/src/lua_playerlib.c index fe2291cab..bda0f8b58 100644 --- a/src/lua_playerlib.c +++ b/src/lua_playerlib.c @@ -345,6 +345,8 @@ static int player_get(lua_State *L) lua_pushinteger(L, plr->finalfailsafe); else if (fastcmp(field,"lastsafelap")) lua_pushinteger(L, plr->lastsafelap); + else if (fastcmp(field,"lastsafecheatcheck")) + lua_pushinteger(L, plr->lastsafecheatcheck); else if (fastcmp(field,"topAccel")) lua_pushinteger(L, plr->topAccel); else if (fastcmp(field,"instaWhipCharge")) @@ -869,6 +871,8 @@ static int player_set(lua_State *L) plr->finalfailsafe = luaL_checkinteger(L, 3); else if (fastcmp(field,"lastsafelap")) plr->lastsafelap = luaL_checkinteger(L, 3); + else if (fastcmp(field,"lastsafecheatcheck")) + plr->lastsafecheatcheck = luaL_checkinteger(L, 3); else if (fastcmp(field,"topAccel")) plr->topAccel = luaL_checkinteger(L, 3); else if (fastcmp(field,"instaWhipCharge")) diff --git a/src/p_saveg.c b/src/p_saveg.c index 2cf06d1e2..0c3cc321f 100644 --- a/src/p_saveg.c +++ b/src/p_saveg.c @@ -572,6 +572,7 @@ static void P_NetArchivePlayers(savebuffer_t *save) WRITEUINT8(save->p, players[i].finalfailsafe); WRITEUINT8(save->p, players[i].lastsafelap); + WRITEUINT8(save->p, players[i].lastsafecheatcheck); WRITEFIXED(save->p, players[i].topAccel); @@ -1146,6 +1147,7 @@ static void P_NetUnArchivePlayers(savebuffer_t *save) players[i].finalfailsafe = READUINT8(save->p); players[i].lastsafelap = READUINT8(save->p); + players[i].lastsafecheatcheck = READUINT8(save->p); players[i].topAccel = READFIXED(save->p);