diff --git a/src/dsectoreffect.cpp b/src/dsectoreffect.cpp index 78e00e6b0..815b49dc4 100644 --- a/src/dsectoreffect.cpp +++ b/src/dsectoreffect.cpp @@ -60,6 +60,7 @@ void DSectorEffect::Destroy() } DSectorEffect::DSectorEffect (sector_t *sector) + : DThinker(STAT_SECTOREFFECT) { m_Sector = sector; } diff --git a/src/p_saveg.cpp b/src/p_saveg.cpp index 9715249d6..24e5ff9ee 100644 --- a/src/p_saveg.cpp +++ b/src/p_saveg.cpp @@ -539,7 +539,7 @@ void P_SerializeSounds(FSerializer &arc) //========================================================================== void CopyPlayer(player_t *dst, player_t *src, const char *name); -static void ReadOnePlayer(FSerializer &arc); +static void ReadOnePlayer(FSerializer &arc, bool skipload); static void ReadMultiplePlayers(FSerializer &arc, int numPlayers, int numPlayersNow, bool skipload); static void SpawnExtraPlayers(); @@ -596,7 +596,7 @@ void P_SerializePlayers(FSerializer &arc, bool skipload) // first player present, no matter what their name. if (numPlayers == 1) { - ReadOnePlayer(arc); + ReadOnePlayer(arc, skipload); } else { @@ -619,7 +619,7 @@ void P_SerializePlayers(FSerializer &arc, bool skipload) // //========================================================================== -static void ReadOnePlayer(FSerializer &arc) +static void ReadOnePlayer(FSerializer &arc, bool skipload) { int i; const char *name = NULL; @@ -638,7 +638,15 @@ static void ReadOnePlayer(FSerializer &arc) didIt = true; player_t playerTemp; playerTemp.Serialize(arc); - CopyPlayer(&players[i], &playerTemp, name); + if (!skipload) + { + CopyPlayer(&players[i], &playerTemp, name); + } + else + { + // we need the player actor, so that G_FinishTravel can destroy it later. + players[i].mo = playerTemp.mo; + } } else { @@ -752,6 +760,13 @@ static void ReadMultiplePlayers(FSerializer &arc, int numPlayers, int numPlayers } } } + else + { + for (i = 0; i < MAXPLAYERS; ++i) + { + players[i].mo = playertemp[i].mo; + } + } delete[] tempPlayerUsed; delete[] playertemp;