- delete thinkers before starting to restore the savegame data to avoid interference of the old thinkers' Destroy() method with the newly loaded data.

Note that even with this change it is still not possible to unarchive any thinker pointers before the thinker list has been loaded as it would create broken lists.
This commit is contained in:
Christoph Oelckers 2016-06-01 11:43:56 +02:00
parent 978e522fb4
commit 26a15d0ccc
4 changed files with 10 additions and 5 deletions

View file

@ -152,11 +152,6 @@ void DThinker::SerializeAll(FArchive &arc, bool hubLoad)
}
else
{
if (hubLoad)
DestroyMostThinkers();
else
DestroyAllThinkers();
// Prevent the constructor from inserting thinkers into a list.
bSerialOverride = true;

View file

@ -1479,6 +1479,7 @@ void G_SerializeLevel (FArchive &arc, bool hubLoad)
int i = level.totaltime;
Renderer->StartSerialize(arc);
if (arc.IsLoading()) P_DestroyThinkers(hubLoad);
arc << level.flags
<< level.flags2

View file

@ -519,6 +519,14 @@ void P_SerializeThinkers (FArchive &arc, bool hubLoad)
DThinker::SerializeAll (arc, hubLoad);
}
void P_DestroyThinkers(bool hubLoad)
{
if (hubLoad)
DThinker::DestroyMostThinkers();
else
DThinker::DestroyAllThinkers();
}
//==========================================================================
//
// ArchiveSounds

View file

@ -43,6 +43,7 @@ struct PNGHandle;
void P_SerializePlayers (FArchive &arc, bool fakeload);
void P_SerializeWorldActors(FArchive &arc);
void P_SerializeWorld (FArchive &arc);
void P_DestroyThinkers(bool hubLoad);
void P_SerializeThinkers (FArchive &arc, bool);
void P_SerializePolyobjs (FArchive &arc);
void P_SerializeSubsectors(FArchive &arc);