From e39c19f85e1744de9662adc9cf07e7b7a2ea7a62 Mon Sep 17 00:00:00 2001 From: staphen Date: Mon, 29 May 2023 16:23:34 -0400 Subject: [PATCH] Only sync monster animations after both monsters and missiles are loaded --- Source/loadsave.cpp | 20 ++++++++------------ 1 file changed, 8 insertions(+), 12 deletions(-) diff --git a/Source/loadsave.cpp b/Source/loadsave.cpp index e8383cc87..bd7aa486f 100644 --- a/Source/loadsave.cpp +++ b/Source/loadsave.cpp @@ -671,11 +671,6 @@ void LoadMonster(LoadHelper *file, Monster &monster) if (monster.mode == MonsterMode::Petrified) monster.animInfo.isPetrified = true; - - if (gbSkipSync) - return; - - SyncMonsterAnim(monster); } /** @@ -749,13 +744,6 @@ void LoadMissile(LoadHelper *file) if (Missiles.size() < Missiles.max_size()) { Missiles.push_back(missile); } - - // For petrified monsters, the data in missile.var1 must be used to - // load the appropriate animation data for the monster in missile.var2 - if (missile._mitype == MissileID::StoneCurse) { - Monster &monster = Monsters[missile.var2]; - SyncMonsterAnim(monster); - } } _object_id ConvertFromHellfireObject(_object_id type) @@ -2190,6 +2178,10 @@ void LoadGame(bool firstflag) file.Skip(MaxMissilesForSaveGame); for (int i = 0; i < tmpNummissiles; i++) LoadMissile(&file); + // For petrified monsters, the data in missile.var1 must be used to + // load the appropriate animation data for the monster in missile.var2 + for (size_t i = 0; i < ActiveMonsterCount; i++) + SyncMonsterAnim(Monsters[ActiveMonsters[i]]); for (int &objectId : ActiveObjects) objectId = file.NextLE(); for (int &objectId : AvailableObjects) @@ -2658,6 +2650,10 @@ void LoadLevel() if (monster.isUnique() && monster.lightId != NO_LIGHT) Lights[monster.lightId].isInvalid = false; } + if (!gbSkipSync) { + for (size_t i = 0; i < ActiveMonsterCount; i++) + SyncMonsterAnim(Monsters[ActiveMonsters[i]]); + } for (int &objectId : ActiveObjects) objectId = file.NextLE(); for (int &objectId : AvailableObjects)