Mobj cross-references not always fully restored after loading a save
In some cases (investigate exactly when), mobj cross-references — links to other mobjs — are not fully restored after loading a saved game. This is particularly problematic in Hexen, where hubs use the save mechanism when switching between maps. This leads to various potential crashes and other gameplay issues because action functions may assume that certain pointers are valid even though they have been reset to null.
Savegames should use an improved mechanism that ensures all cross-references between objects (and thinkers?) are restored correctly. The private thinker IDs should be very helpful here, as they are persistent across saves.
All Games|Client|SaveGame: Restore object links via a new mechanism
After a save has been loaded, object cross-references haven't always
been correctly restored to what they were when the save was made.
The previous method of validating the cross-references was extended
to actually restore all cross-references to point to the correct
mobjs using the private thinker IDs.
While this obsoletes the cross-reference restoration done by
MapStateReaders, the old code still is necessary when loading saves
that don't contain the ObjectState info file.
Also noteworthy is that private IDs are persistent across a save