diff --git a/Source/diablo.cpp b/Source/diablo.cpp index bfd6e85b5..e42776052 100644 --- a/Source/diablo.cpp +++ b/Source/diablo.cpp @@ -1076,7 +1076,7 @@ void LoadAllGFX() IncProgress(); InitObjectGFX(); IncProgress(); - InitMissileGFX(); + InitMissileGFX(gbIsHellfire); IncProgress(); } @@ -1520,8 +1520,8 @@ void FreeGameMem() pLevelPieces = nullptr; pSpecialCels = std::nullopt; - FreeMissiles(); FreeMonsters(); + FreeMissileGFX(); FreeObjectGFX(); FreeMonsterSnd(); FreeTownerGFX(); @@ -1859,7 +1859,7 @@ void LoadGameLevel(bool firstflag, lvl_entry lvldir) } else { IncProgress(); IncProgress(); - InitMissileGFX(); + InitMissileGFX(gbIsHellfire); IncProgress(); IncProgress(); } @@ -1958,7 +1958,7 @@ void LoadGameLevel(bool firstflag, lvl_entry lvldir) IncProgress(); InitMonsters(); IncProgress(); - InitMissileGFX(); + InitMissileGFX(gbIsHellfire); IncProgress(); InitCorpses(); IncProgress(); diff --git a/Source/misdat.cpp b/Source/misdat.cpp index 384bc62ba..8c792ae4e 100644 --- a/Source/misdat.cpp +++ b/Source/misdat.cpp @@ -248,4 +248,22 @@ void MissileFileData::LoadGFX() } } +void InitMissileGFX(bool loadHellfireGraphics) +{ + for (size_t mi = 0; MissileSpriteData[mi].animFAmt != 0; mi++) { + if (!loadHellfireGraphics && mi > MFILE_SCBSEXPD) + break; + if (MissileSpriteData[mi].flags == MissileDataFlags::MonsterOwned) + continue; + MissileSpriteData[mi].LoadGFX(); + } +} + +void FreeMissileGFX() +{ + for (auto &missileData : MissileSpriteData) { + missileData.FreeGFX(); + } +} + } // namespace devilution diff --git a/Source/misdat.h b/Source/misdat.h index 864eb3e07..456bb26dc 100644 --- a/Source/misdat.h +++ b/Source/misdat.h @@ -158,4 +158,7 @@ struct MissileFileData { extern MissileData MissilesData[]; extern MissileFileData MissileSpriteData[]; +void InitMissileGFX(bool loadHellfireGraphics = false); +void FreeMissileGFX(); + } // namespace devilution diff --git a/Source/missiles.cpp b/Source/missiles.cpp index 411f9d1d1..cbca41d68 100644 --- a/Source/missiles.cpp +++ b/Source/missiles.cpp @@ -1182,37 +1182,6 @@ void SetMissDir(Missile &missile, int dir) SetMissAnim(missile, missile._miAnimType); } -void InitMissileGFX() -{ - for (int mi = 0; MissileSpriteData[mi].animFAmt != 0; mi++) { - if (!gbIsHellfire && mi > MFILE_SCBSEXPD) - break; - if (MissileSpriteData[mi].flags == MissileDataFlags::MonsterOwned) - continue; - MissileSpriteData[mi].LoadGFX(); - } -} - -void FreeMissiles() -{ - for (int mi = 0; MissileSpriteData[mi].animFAmt != 0; mi++) { - if (MissileSpriteData[mi].flags == MissileDataFlags::MonsterOwned) - continue; - - MissileSpriteData[mi].FreeGFX(); - } -} - -void FreeMissiles2() -{ - for (int mi = 0; MissileSpriteData[mi].animFAmt != 0; mi++) { - if (MissileSpriteData[mi].flags != MissileDataFlags::MonsterOwned) - continue; - - MissileSpriteData[mi].FreeGFX(); - } -} - void InitMissiles() { auto &myPlayer = Players[MyPlayerId]; diff --git a/Source/missiles.h b/Source/missiles.h index 16845c77f..8b8c767da 100644 --- a/Source/missiles.h +++ b/Source/missiles.h @@ -139,9 +139,6 @@ void DeleteMissile(int i); bool MonsterTrapHit(int m, int mindam, int maxdam, int dist, missile_id t, bool shift); bool PlayerMHit(int pnum, Monster *monster, int dist, int mind, int maxd, missile_id mtype, bool shift, int earflag, bool *blocked); void SetMissDir(Missile &missile, int dir); -void InitMissileGFX(); -void FreeMissiles(); -void FreeMissiles2(); void InitMissiles(); void AddHiveExplosion(Missile &missile, Point dst, Direction midir); void AddFireRune(Missile &missile, Point dst, Direction midir); diff --git a/Source/monster.cpp b/Source/monster.cpp index b0c234b92..a3515e3c9 100644 --- a/Source/monster.cpp +++ b/Source/monster.cpp @@ -4399,8 +4399,6 @@ void FreeMonsters() } } } - - FreeMissiles2(); } bool DirOK(int i, Direction mdir)