Strife save game target loading glitch


Strife includes a fix to the Doom problem of monsters falling asleep when save games are reloaded. It works around the inability to save mutual references between mobj_t structures by instead causing any monster that had a non-null target at the time of the save game to begin targeting the player when it is loaded. This has roughly the same effect as full pointer swizzling, since monster infighting is not generally allowed in Strife.

However, in applying this change, the Strife programmers forgot that the player's body might not be loaded from the save game and spawned into the map until after many or even all of the monsters have been restored. This causes any monster loaded before the player to have its target field set instead to a dummy player object which was spawned when the map was reloaded from the WAD file cache just before the save file was processed. While this player object has been removed from the level, it is not freed from memory due to another subtle glitch in the Doom engine.

The affected monsters will thus either fall asleep or will appear to ignore the player until their attentions are deliberately attracted anew, as they are intent on chasing a different object than the player's actual body. The monsters which are affected by this problem will appear effectively randomized, and are determined by the ordering of Doom's internal thinker list.