diff --git a/src/k_kart.c b/src/k_kart.c index fe4e79938..b1035cfc5 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -9507,6 +9507,29 @@ void K_KartUpdatePosition(player_t *player) player->position = position; } +void K_UpdateAllPlayerPositions(void) +{ + INT32 i; + + // First loop: Ensure all players' distance to the finish line are all accurate + for (i = 0; i < MAXPLAYERS; i++) + { + if (playeringame[i] && players[i].mo && !P_MobjWasRemoved(players[i].mo)) + { + K_UpdateDistanceFromFinishLine(&players[i]); + } + } + + // Second loop: Ensure all player positions reflect everyone's distances + for (i = 0; i < MAXPLAYERS; i++) + { + if (playeringame[i] && players[i].mo && !P_MobjWasRemoved(players[i].mo)) + { + K_KartUpdatePosition(&players[i]); + } + } +} + // // K_StripItems // diff --git a/src/k_kart.h b/src/k_kart.h index fdc9cb2de..fc364624a 100644 --- a/src/k_kart.h +++ b/src/k_kart.h @@ -139,6 +139,7 @@ INT32 K_GetKartDriftSparkValueForStage(player_t *player, UINT8 stage); void K_SpawnDriftBoostExplosion(player_t *player, int stage); void K_SpawnDriftElectricSparks(player_t *player, int color, boolean shockwave); void K_KartUpdatePosition(player_t *player); +void K_UpdateAllPlayerPositions(void); SINT8 K_GetTotallyRandomResult(UINT8 useodds); mobj_t *K_CreatePaperItem(fixed_t x, fixed_t y, fixed_t z, angle_t angle, SINT8 flip, UINT8 type, UINT8 amount); void K_DropItems(player_t *player); diff --git a/src/p_mobj.c b/src/p_mobj.c index eb676f660..251577a20 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -11951,6 +11951,8 @@ void P_AfterPlayerSpawn(INT32 playernum) if (CheckForReverseGravity) P_CheckGravity(mobj, false); + + K_UpdateAllPlayerPositions(); } // spawn it at a playerspawn mapthing diff --git a/src/p_tick.c b/src/p_tick.c index 9b4e987bf..22f9187be 100644 --- a/src/p_tick.c +++ b/src/p_tick.c @@ -532,10 +532,12 @@ void P_Ticker(boolean run) // Increment jointime and quittime even if paused for (i = 0; i < MAXPLAYERS; i++) + { if (playeringame[i]) { players[i].jointime++; } + } if (objectplacing) { @@ -602,32 +604,16 @@ void P_Ticker(boolean run) ps_playerthink_time = I_GetPreciseTime(); -#define PLAYERCONDITION(i) (playeringame[i] && players[i].mo && !P_MobjWasRemoved(players[i].mo)) - // First loop: Ensure all players' distance to the finish line are all accurate - for (i = 0; i < MAXPLAYERS; i++) - { - if (!PLAYERCONDITION(i)) - continue; - K_UpdateDistanceFromFinishLine(&players[i]); - } - - // Second loop: Ensure all player positions reflect everyone's distances - for (i = 0; i < MAXPLAYERS; i++) - { - if (!PLAYERCONDITION(i)) - continue; - K_KartUpdatePosition(&players[i]); - } + K_UpdateAllPlayerPositions(); // OK! Now that we got all of that sorted, players can think! for (i = 0; i < MAXPLAYERS; i++) { - if (!PLAYERCONDITION(i)) + if (!(playeringame[i] && players[i].mo && !P_MobjWasRemoved(players[i].mo))) continue; P_PlayerThink(&players[i]); K_KartPlayerHUDUpdate(&players[i]); } -#undef PLAYERCONDITION ps_playerthink_time = I_GetPreciseTime() - ps_playerthink_time; } @@ -869,19 +855,11 @@ void P_PreTicker(INT32 frames) R_UpdateMobjInterpolators(); - // First loop: Ensure all players' distance to the finish line are all accurate - for (i = 0; i < MAXPLAYERS; i++) - if (playeringame[i] && players[i].mo && !P_MobjWasRemoved(players[i].mo)) - K_UpdateDistanceFromFinishLine(&players[i]); - - // Second loop: Ensure all player positions reflect everyone's distances - for (i = 0; i < MAXPLAYERS; i++) - if (playeringame[i] && players[i].mo && !P_MobjWasRemoved(players[i].mo)) - K_KartUpdatePosition(&players[i]); - - // OK! Now that we got all of that sorted, players can think! LUA_HOOK(PreThinkFrame); + K_UpdateAllPlayerPositions(); + + // OK! Now that we got all of that sorted, players can think! for (i = 0; i < MAXPLAYERS; i++) if (playeringame[i] && players[i].mo && !P_MobjWasRemoved(players[i].mo)) { diff --git a/src/p_user.c b/src/p_user.c index 0a2c5b548..f5cb57df2 100644 --- a/src/p_user.c +++ b/src/p_user.c @@ -1284,7 +1284,7 @@ void P_DoPlayerExit(player_t *player) if ((gametyperules & GTR_CIRCUIT)) // If in Race Mode, allow { - K_KartUpdatePosition(player); + K_UpdateAllPlayerPositions(); if (cv_kartvoices.value) {