diff --git a/Source/misdat.cpp b/Source/misdat.cpp index c09e37aad..f5baf4146 100644 --- a/Source/misdat.cpp +++ b/Source/misdat.cpp @@ -129,67 +129,67 @@ MissileDataStruct MissileData[] = { /** Data related to each missile graphic ID. */ MissileFileData MissileSpriteData[] = { // clang-format off - // name, animName, animFAmt, flags, animDelay[16], animLen[16], animWidth,' animWidth2 - { "Arrows", MFILE_ARROWS, 1, MissileDataFlags::NotAnimated, { 0 }, { 16 }, 96, 16 }, - { "Fireba", MFILE_FIREBA, 16, MissileDataFlags::None, { 0 }, { 14 }, 96, 16 }, - { "Guard", MFILE_GUARD, 3, MissileDataFlags::None, { 1 }, { 15, 14, 3 }, 96, 16 }, - { "Lghning", MFILE_LGHNING, 1, MissileDataFlags::None, { 0 }, { 8 }, 96, 16 }, - { "Firewal", MFILE_FIREWAL, 2, MissileDataFlags::None, { 0 }, { 13, 11 }, 128, 32 }, - { "MagBlos", MFILE_MAGBLOS, 1, MissileDataFlags::None, { 1 }, { 10 }, 128, 32 }, - { "Portal", MFILE_PORTAL, 2, MissileDataFlags::None, { 0, 1 }, { 16 }, 96, 16 }, - { "Bluexfr", MFILE_BLUEXFR, 1, MissileDataFlags::None, { 0 }, { 19 }, 160, 48 }, - { "Bluexbk", MFILE_BLUEXBK, 1, MissileDataFlags::None, { 0 }, { 19 }, 160, 48 }, - { "Manashld", MFILE_MANASHLD, 1, MissileDataFlags::NotAnimated, { 0 }, { 1 }, 96, 16 }, - { "Blood", MFILE_BLOOD, 4, MissileDataFlags::NoGraphics, { 0 }, { 15 }, 96, 16 }, - { "Bone", MFILE_BONE, 3, MissileDataFlags::NoGraphics, { 2 }, { 8 }, 128, 32 }, - { "Metlhit", MFILE_METLHIT, 3, MissileDataFlags::NoGraphics, { 2 }, { 10 }, 96, 16 }, - { "Farrow", MFILE_FARROW, 16, MissileDataFlags::None, { 0 }, { 4 }, 96, 16 }, - { "Doom", MFILE_DOOM, 9, MissileDataFlags::NoGraphics, { 1 }, { 15 }, 96, 16 }, - { " ", MFILE_0F, 1, MissileDataFlags::NoGraphics, { 0 }, { 0 }, 0, 0 }, - { "Blodbur", MFILE_BLODBUR, 2, MissileDataFlags::NoGraphics, { 2 }, { 8 }, 128, 32 }, - { "Newexp", MFILE_NEWEXP, 1, MissileDataFlags::None, { 1 }, { 15 }, 96, 16 }, - { "Shatter1", MFILE_SHATTER1, 1, MissileDataFlags::None, { 1 }, { 12 }, 128, 32 }, - { "Bigexp", MFILE_BIGEXP, 1, MissileDataFlags::None, { 0 }, { 15 }, 160, 48 }, - { "Inferno", MFILE_INFERNO, 1, MissileDataFlags::None, { 0 }, { 20 }, 96, 16 }, - { "Thinlght", MFILE_THINLGHT, 1, MissileDataFlags::NoGraphics, { 0 }, { 8 }, 96, 16 }, - { "Flare", MFILE_FLARE, 1, MissileDataFlags::None, { 0 }, { 16 }, 128, 32 }, - { "Flareexp", MFILE_FLAREEXP, 1, MissileDataFlags::None, { 0 }, { 7 }, 128, 32 }, - { "Magball", MFILE_MAGBALL, 8, MissileDataFlags::NoGraphics, { 1 }, { 16 }, 128, 32 }, - { "Krull", MFILE_KRULL, 1, MissileDataFlags::NoGraphics, { 0 }, { 14 }, 96, 16 }, - { "Miniltng", MFILE_MINILTNG, 1, MissileDataFlags::None, { 1 }, { 8 }, 64, 0 }, - { "Holy", MFILE_HOLY, 16, MissileDataFlags::None, { 1, 0 }, { 14 }, 96, 16 }, - { "Holyexpl", MFILE_HOLYEXPL, 1, MissileDataFlags::None, { 0 }, { 8 }, 160, 48 }, - { "Larrow", MFILE_LARROW, 16, MissileDataFlags::None, { 0 }, { 4 }, 96, 16 }, - { "Firarwex", MFILE_FIRARWEX, 1, MissileDataFlags::NoGraphics, { 0 }, { 6 }, 64, 0 }, - { "Acidbf", MFILE_ACIDBF, 16, MissileDataFlags::NoGraphics, { 0 }, { 8 }, 96, 16 }, - { "Acidspla", MFILE_ACIDSPLA, 1, MissileDataFlags::NoGraphics, { 0 }, { 8 }, 96, 16 }, - { "Acidpud", MFILE_ACIDPUD, 2, MissileDataFlags::NoGraphics, { 0 }, { 9, 4 }, 96, 16 }, - { "Ethrshld", MFILE_ETHRSHLD, 1, MissileDataFlags::NoGraphics, { 0 }, { 1 }, 96, 16 }, - { "Firerun", MFILE_FIRERUN, 8, MissileDataFlags::None, { 1 }, { 12 }, 96, 16 }, - { "Ressur1", MFILE_RESSUR1, 1, MissileDataFlags::None, { 0 }, { 16 }, 96, 16 }, - { "Sklball", MFILE_SKLBALL, 9, MissileDataFlags::None, { 1 }, { 16, 16, 16, 16, 16, 16, 16, 16, 8 }, 96, 16 }, - { "Rportal", MFILE_RPORTAL, 2, MissileDataFlags::None, { 0 }, { 16 }, 96, 16 }, - { "Fireplar", MFILE_FIREPLAR, 1, MissileDataFlags::NoGraphics, { 1 }, { 17 }, 160, 48 }, - { "Scubmisb", MFILE_SCUBMISB, 1, MissileDataFlags::NoGraphics, { 0 }, { 16 }, 96, 16 }, - { "Scbsexpb", MFILE_SCBSEXPB, 1, MissileDataFlags::NoGraphics, { 0 }, { 6 }, 128, 32 }, - { "Scubmisc", MFILE_SCUBMISC, 1, MissileDataFlags::NoGraphics, { 0 }, { 16 }, 96, 16 }, - { "Scbsexpc", MFILE_SCBSEXPC, 1, MissileDataFlags::NoGraphics, { 0 }, { 6 }, 128, 32 }, - { "Scubmisd", MFILE_SCUBMISD, 1, MissileDataFlags::NoGraphics, { 0 }, { 16 }, 96, 16 }, - { "Scbsexpd", MFILE_SCBSEXPD, 1, MissileDataFlags::NoGraphics, { 0 }, { 6 }, 128, 32 }, - { "spawns", MFILE_SPAWNS, 8, MissileDataFlags::NoGraphics, { 0 }, { 9 }, 96, 16 }, - { "reflect", MFILE_REFLECT, 1, MissileDataFlags::NotAnimated, { 0 }, { 1 }, 160, 64 }, - { "ms_ora", MFILE_LICH, 16, MissileDataFlags::NoGraphics, { 0 }, { 15 }, 96, 8 }, - { "ms_bla", MFILE_MSBLA, 16, MissileDataFlags::NoGraphics, { 0 }, { 15 }, 96, 8 }, - { "ms_reb", MFILE_NECROMORB, 16, MissileDataFlags::NoGraphics, { 0 }, { 15 }, 96, 8 }, - { "ms_yeb", MFILE_ARCHLICH, 16, MissileDataFlags::NoGraphics, { 0 }, { 15 }, 96, 8 }, - { "rglows1", MFILE_RUNE, 1, MissileDataFlags::None, { 0 }, { 10 }, 96, 8 }, - { "ex_yel2", MFILE_EXYEL2, 1, MissileDataFlags::NoGraphics, { 0 }, { 10 }, 220, 78 }, - { "ex_blu2", MFILE_EXBL2, 1, MissileDataFlags::NoGraphics, { 0 }, { 10 }, 212, 86 }, - { "ex_red3", MFILE_EXRED3, 1, MissileDataFlags::NoGraphics, { 0 }, { 7 }, 292, 114 }, - { "ms_blb", MFILE_BONEDEMON, 16, MissileDataFlags::NoGraphics, { 0 }, { 15 }, 96, 8 }, - { "ex_ora1", MFILE_EXORA1, 1, MissileDataFlags::NoGraphics, { 0 }, { 13 }, 96, -12 }, - { "ex_blu3", MFILE_EXBL3, 1, MissileDataFlags::NoGraphics, { 0 }, { 7 }, 292, 114 }, - { "", MFILE_NONE, 0, MissileDataFlags::None, { }, { }, 0, 0 }, + // name, animName, animFAmt, flags, animDelay[16], animLen[16], animWidth, animWidth2 + { "Arrows", MFILE_ARROWS, 1, MissileDataFlags::NotAnimated, { 0 }, { 16 }, 96, 16 }, + { "Fireba", MFILE_FIREBA, 16, MissileDataFlags::None, { 0 }, { 14 }, 96, 16 }, + { "Guard", MFILE_GUARD, 3, MissileDataFlags::None, { 1 }, { 15, 14, 3 }, 96, 16 }, + { "Lghning", MFILE_LGHNING, 1, MissileDataFlags::None, { 0 }, { 8 }, 96, 16 }, + { "Firewal", MFILE_FIREWAL, 2, MissileDataFlags::None, { 0 }, { 13, 11 }, 128, 32 }, + { "MagBlos", MFILE_MAGBLOS, 1, MissileDataFlags::None, { 1 }, { 10 }, 128, 32 }, + { "Portal", MFILE_PORTAL, 2, MissileDataFlags::None, { 0, 1 }, { 16 }, 96, 16 }, + { "Bluexfr", MFILE_BLUEXFR, 1, MissileDataFlags::None, { 0 }, { 19 }, 160, 48 }, + { "Bluexbk", MFILE_BLUEXBK, 1, MissileDataFlags::None, { 0 }, { 19 }, 160, 48 }, + { "Manashld", MFILE_MANASHLD, 1, MissileDataFlags::NotAnimated, { 0 }, { 1 }, 96, 16 }, + { nullptr, MFILE_BLOOD, 4, MissileDataFlags::None, { 0 }, { 15 }, 96, 16 }, + { nullptr, MFILE_BONE, 3, MissileDataFlags::None, { 2 }, { 8 }, 128, 32 }, + { nullptr, MFILE_METLHIT, 3, MissileDataFlags::None, { 2 }, { 10 }, 96, 16 }, + { "Farrow", MFILE_FARROW, 16, MissileDataFlags::None, { 0 }, { 4 }, 96, 16 }, + { "Doom", MFILE_DOOM, 9, MissileDataFlags::MonsterOwned, { 1 }, { 15 }, 96, 16 }, + { nullptr, MFILE_0F, 1, MissileDataFlags::MonsterOwned, { 0 }, { 0 }, 0, 0 }, + { nullptr, MFILE_BLODBUR, 2, MissileDataFlags::None, { 2 }, { 8 }, 128, 32 }, + { "Newexp", MFILE_NEWEXP, 1, MissileDataFlags::None, { 1 }, { 15 }, 96, 16 }, + { "Shatter1", MFILE_SHATTER1, 1, MissileDataFlags::None, { 1 }, { 12 }, 128, 32 }, + { "Bigexp", MFILE_BIGEXP, 1, MissileDataFlags::None, { 0 }, { 15 }, 160, 48 }, + { "Inferno", MFILE_INFERNO, 1, MissileDataFlags::None, { 0 }, { 20 }, 96, 16 }, + { "Thinlght", MFILE_THINLGHT, 1, MissileDataFlags::MonsterOwned, { 0 }, { 8 }, 96, 16 }, + { "Flare", MFILE_FLARE, 1, MissileDataFlags::None, { 0 }, { 16 }, 128, 32 }, + { "Flareexp", MFILE_FLAREEXP, 1, MissileDataFlags::None, { 0 }, { 7 }, 128, 32 }, + { "Magball", MFILE_MAGBALL, 8, MissileDataFlags::MonsterOwned, { 1 }, { 16 }, 128, 32 }, + { "Krull", MFILE_KRULL, 1, MissileDataFlags::MonsterOwned, { 0 }, { 14 }, 96, 16 }, + { "Miniltng", MFILE_MINILTNG, 1, MissileDataFlags::None, { 1 }, { 8 }, 64, 0 }, + { "Holy", MFILE_HOLY, 16, MissileDataFlags::None, { 1, 0 }, { 14 }, 96, 16 }, + { "Holyexpl", MFILE_HOLYEXPL, 1, MissileDataFlags::None, { 0 }, { 8 }, 160, 48 }, + { "Larrow", MFILE_LARROW, 16, MissileDataFlags::None, { 0 }, { 4 }, 96, 16 }, + { nullptr, MFILE_FIRARWEX, 1, MissileDataFlags::None, { 0 }, { 6 }, 64, 0 }, + { "Acidbf", MFILE_ACIDBF, 16, MissileDataFlags::MonsterOwned, { 0 }, { 8 }, 96, 16 }, + { "Acidspla", MFILE_ACIDSPLA, 1, MissileDataFlags::MonsterOwned, { 0 }, { 8 }, 96, 16 }, + { "Acidpud", MFILE_ACIDPUD, 2, MissileDataFlags::MonsterOwned, { 0 }, { 9, 4 }, 96, 16 }, + { nullptr, MFILE_ETHRSHLD, 1, MissileDataFlags::None, { 0 }, { 1 }, 96, 16 }, + { "Firerun", MFILE_FIRERUN, 8, MissileDataFlags::None, { 1 }, { 12 }, 96, 16 }, + { "Ressur1", MFILE_RESSUR1, 1, MissileDataFlags::None, { 0 }, { 16 }, 96, 16 }, + { "Sklball", MFILE_SKLBALL, 9, MissileDataFlags::None, { 1 }, { 16, 16, 16, 16, 16, 16, 16, 16, 8 }, 96, 16 }, + { "Rportal", MFILE_RPORTAL, 2, MissileDataFlags::None, { 0 }, { 16 }, 96, 16 }, + { "Fireplar", MFILE_FIREPLAR, 1, MissileDataFlags::MonsterOwned, { 1 }, { 17 }, 160, 48 }, + { "Scubmisb", MFILE_SCUBMISB, 1, MissileDataFlags::MonsterOwned, { 0 }, { 16 }, 96, 16 }, + { "Scbsexpb", MFILE_SCBSEXPB, 1, MissileDataFlags::MonsterOwned, { 0 }, { 6 }, 128, 32 }, + { "Scubmisc", MFILE_SCUBMISC, 1, MissileDataFlags::MonsterOwned, { 0 }, { 16 }, 96, 16 }, + { "Scbsexpc", MFILE_SCBSEXPC, 1, MissileDataFlags::MonsterOwned, { 0 }, { 6 }, 128, 32 }, + { "Scubmisd", MFILE_SCUBMISD, 1, MissileDataFlags::MonsterOwned, { 0 }, { 16 }, 96, 16 }, + { "Scbsexpd", MFILE_SCBSEXPD, 1, MissileDataFlags::MonsterOwned, { 0 }, { 6 }, 128, 32 }, + { "spawns", MFILE_SPAWNS, 8, MissileDataFlags::MonsterOwned, { 0 }, { 9 }, 96, 16 }, + { "reflect", MFILE_REFLECT, 1, MissileDataFlags::NotAnimated, { 0 }, { 1 }, 160, 64 }, + { "ms_ora", MFILE_LICH, 16, MissileDataFlags::MonsterOwned, { 0 }, { 15 }, 96, 8 }, + { "ms_bla", MFILE_MSBLA, 16, MissileDataFlags::MonsterOwned, { 0 }, { 15 }, 96, 8 }, + { "ms_reb", MFILE_NECROMORB, 16, MissileDataFlags::MonsterOwned, { 0 }, { 15 }, 96, 8 }, + { "ms_yeb", MFILE_ARCHLICH, 16, MissileDataFlags::MonsterOwned, { 0 }, { 15 }, 96, 8 }, + { "rglows1", MFILE_RUNE, 1, MissileDataFlags::None, { 0 }, { 10 }, 96, 8 }, + { "ex_yel2", MFILE_EXYEL2, 1, MissileDataFlags::MonsterOwned, { 0 }, { 10 }, 220, 78 }, + { "ex_blu2", MFILE_EXBL2, 1, MissileDataFlags::MonsterOwned, { 0 }, { 10 }, 212, 86 }, + { "ex_red3", MFILE_EXRED3, 1, MissileDataFlags::MonsterOwned, { 0 }, { 7 }, 292, 114 }, + { "ms_blb", MFILE_BONEDEMON, 16, MissileDataFlags::MonsterOwned, { 0 }, { 15 }, 96, 8 }, + { "ex_ora1", MFILE_EXORA1, 1, MissileDataFlags::MonsterOwned, { 0 }, { 13 }, 96, -12 }, + { "ex_blu3", MFILE_EXBL3, 1, MissileDataFlags::MonsterOwned, { 0 }, { 7 }, 292, 114 }, + { "", MFILE_NONE, 0, MissileDataFlags::None, { }, { }, 0, 0 }, // clang-format on }; @@ -233,7 +233,7 @@ void MissileFileData::LoadGFX() if (animData[0] != nullptr) return; - if (flags == MissileDataFlags::NoGraphics) + if (name == nullptr) return; char pszName[256]; diff --git a/Source/misdat.h b/Source/misdat.h index 949530fa3..d574b8396 100644 --- a/Source/misdat.h +++ b/Source/misdat.h @@ -124,9 +124,9 @@ typedef struct MissileData { enum class MissileDataFlags { // clang-format off - None = 0, - NoGraphics = 1 << 0, - NotAnimated = 1 << 1, + None = 0, + MonsterOwned = 1 << 0, + NotAnimated = 1 << 1, // clang-format on }; diff --git a/Source/missiles.cpp b/Source/missiles.cpp index b2f5b3b3d..605a16544 100644 --- a/Source/missiles.cpp +++ b/Source/missiles.cpp @@ -1182,20 +1182,30 @@ 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++) + 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++) + for (int mi = 0; MissileSpriteData[mi].animFAmt != 0; mi++) { + if (MissileSpriteData[mi].flags != MissileDataFlags::MonsterOwned) + continue; + MissileSpriteData[mi].FreeGFX(); + } } void InitMissiles()