From 9b2a4d52b28553ebf8197d3ab7c1450a4ffa2ad5 Mon Sep 17 00:00:00 2001 From: GenericHeroGuy Date: Tue, 14 Oct 2025 15:01:02 +0200 Subject: [PATCH] Fix player pointer relinking being utterly broken Courtesy of be5d651d --- src/p_saveg.c | 75 ++++++++++++++++++++++++++------------------------- 1 file changed, 38 insertions(+), 37 deletions(-) diff --git a/src/p_saveg.c b/src/p_saveg.c index bd3d78c7c..b1d5820e3 100644 --- a/src/p_saveg.c +++ b/src/p_saveg.c @@ -3699,49 +3699,50 @@ static void P_RelinkPointers(void) if (!RelinkMobj(&mobj->terrainOverlay)) CONS_Debug(DBG_GAMELOGIC, "terrainOverlay not found on %d\n", mobj->type); } - for (i = 0; i < MAXPLAYERS; i++) + } + + for (i = 0; i < MAXPLAYERS; i++) + { + if (!playeringame[i]) + continue; + if (players[i].awayviewmobj) { - if (!playeringame[i]) - continue; - if ( players[i].awayviewmobj) + if (!RelinkMobj(&players[i].awayviewmobj)) + CONS_Debug(DBG_GAMELOGIC, "awayviewmobj not found on player %d\n", i); + } + if (players[i].followmobj) + { + if (!RelinkMobj(&players[i].followmobj)) + CONS_Debug(DBG_GAMELOGIC, "followmobj not found on player %d\n", i); + } + if (players[i].follower) + { + if (!RelinkMobj(&players[i].follower)) + CONS_Debug(DBG_GAMELOGIC, "follower not found on player %d\n", i); + } + if (players[i].currentwaypoint) + { + temp = (UINT32)(size_t)players[i].currentwaypoint; + players[i].currentwaypoint = K_GetWaypointFromIndex(temp); + if (players[i].currentwaypoint == NULL) { - if (!RelinkMobj(&players[i].awayviewmobj)) - CONS_Debug(DBG_GAMELOGIC, "awayviewmobj not found on player %d\n", i); + CONS_Debug(DBG_GAMELOGIC, "currentwaypoint not found on player %d\n", i); } - if (players[i].followmobj) + } + if (players[i].nextwaypoint) + { + temp = (UINT32)(size_t)players[i].nextwaypoint; + players[i].nextwaypoint = K_GetWaypointFromIndex(temp); + if (players[i].nextwaypoint == NULL) { - if (!RelinkMobj(&players[i].followmobj)) - CONS_Debug(DBG_GAMELOGIC, "followmobj not found on player %d\n", i); - } - if (players[i].follower) - { - if (!RelinkMobj(&players[i].follower)) - CONS_Debug(DBG_GAMELOGIC, "follower not found on player %d\n", i); - } - if (players[i].currentwaypoint) - { - temp = (UINT32)(size_t)players[i].currentwaypoint; - players[i].currentwaypoint = K_GetWaypointFromIndex(temp); - if (players[i].currentwaypoint == NULL) - { - CONS_Debug(DBG_GAMELOGIC, "currentwaypoint not found on player %d\n", i); - } - } - if (players[i].nextwaypoint) - { - temp = (UINT32)(size_t)players[i].nextwaypoint; - players[i].nextwaypoint = K_GetWaypointFromIndex(temp); - if (players[i].nextwaypoint == NULL) - { - CONS_Debug(DBG_GAMELOGIC, "nextwaypoint not found on player %d\n", i); - } - } - if (players[i].shieldtracer) - { - if (!RelinkMobj(&players[i].shieldtracer)) - CONS_Debug(DBG_GAMELOGIC, "shieldtracer not found on player %d\n", i); + CONS_Debug(DBG_GAMELOGIC, "nextwaypoint not found on player %d\n", i); } } + if (players[i].shieldtracer) + { + if (!RelinkMobj(&players[i].shieldtracer)) + CONS_Debug(DBG_GAMELOGIC, "shieldtracer not found on player %d\n", i); + } } }