diff --git a/Source/loadsave.cpp b/Source/loadsave.cpp index 95971c59a..7bfed91aa 100644 --- a/Source/loadsave.cpp +++ b/Source/loadsave.cpp @@ -655,7 +655,7 @@ void LoadMissile(LoadHelper *file, int i) pMissile->_miDelFlag = file->NextBool32(); pMissile->_miAnimType = file->NextLE(); file->Skip(3); // Alignment - pMissile->_miAnimFlags = file->NextLE(); + pMissile->_miAnimFlags = static_cast(file->NextLE()); file->Skip(4); // Skip pointer _miAnimData pMissile->_miAnimDelay = file->NextLE(); pMissile->_miAnimLen = file->NextLE(); @@ -1304,7 +1304,7 @@ void SaveMissile(SaveHelper *file, int i) file->WriteLE(pMissile->_miDelFlag ? 1 : 0); file->WriteLE(pMissile->_miAnimType); file->Skip(3); // Alignment - file->WriteLE(pMissile->_miAnimFlags); + file->WriteLE(static_cast(pMissile->_miAnimFlags)); file->Skip(4); // Skip pointer _miAnimData file->WriteLE(pMissile->_miAnimDelay); file->WriteLE(pMissile->_miAnimLen); diff --git a/Source/misdat.cpp b/Source/misdat.cpp index 307225fe0..11a33ab88 100644 --- a/Source/misdat.cpp +++ b/Source/misdat.cpp @@ -129,71 +129,71 @@ MissileDataStruct MissileData[] = { /** Data related to each missile graphic ID. */ MissileFileData MissileSpriteData[] = { // clang-format off - // name, animName, animFAmt, flags, animDelay[16], animLen[16], animWidth[16], animWidth2[16] - { "Arrows", MFILE_ARROWS, 1, MFLAG_LOCK_ANIMATION, 0, 16, 96, 16 }, - { "Fireba", MFILE_FIREBA, 16, 0, 0, 14, 96, 16 }, - { "Guard", MFILE_GUARD, 3, 0, 1, { 15, 14, 3 }, 96, 16 }, - { "Lghning", MFILE_LGHNING, 1, 0, 0, 8, 96, 16 }, - { "Firewal", MFILE_FIREWAL, 2, 0, 0, { 13, 11 }, 128, 32 }, - { "MagBlos", MFILE_MAGBLOS, 1, 0, 1, 10, 128, 32 }, - { "Portal", MFILE_PORTAL, 2, 0, { 0, 1 }, 16, 96, 16 }, - { "Bluexfr", MFILE_BLUEXFR, 1, 0, 0, 19, 160, 48 }, - { "Bluexbk", MFILE_BLUEXBK, 1, 0, 0, 19, 160, 48 }, - { "Manashld", MFILE_MANASHLD, 1, MFLAG_LOCK_ANIMATION, 0, 1, 96, 16 }, - { "Blood", MFILE_BLOOD, 4, 0, 0, { 15, 8, 8, 8 }, { 96, 128, 128, 128 }, { 16, 32, 32, 32 } }, - { "Bone", MFILE_BONE, 3, 0, 2, 8, 128, 32 }, - { "Metlhit", MFILE_METLHIT, 3, 0, 2, 10, 96, 16 }, - { "Farrow", MFILE_FARROW, 16, 0, 0, 4, 96, 16 }, - { "Doom", MFILE_DOOM, 9, MFLAG_HIDDEN, 1, 15, 96, 16 }, - { " ", MFILE_0F, 1, MFLAG_HIDDEN, 0, 0, 0, 0 }, - { "Blodbur", MFILE_BLODBUR, 2, 0, 2, 8, 128, 32 }, - { "Newexp", MFILE_NEWEXP, 1, 0, 1, 15, 96, 16 }, - { "Shatter1", MFILE_SHATTER1, 1, 0, 1, 12, 128, 32 }, - { "Bigexp", MFILE_BIGEXP, 1, 0, 0, 15, 160, 48 }, - { "Inferno", MFILE_INFERNO, 1, 0, 0, 20, 96, 16 }, - { "Thinlght", MFILE_THINLGHT, 1, MFLAG_HIDDEN, 0, 8, 96, 16 }, - { "Flare", MFILE_FLARE, 1, 0, 0, 16, 128, 32 }, - { "Flareexp", MFILE_FLAREEXP, 1, 0, 0, 7, 128, 32 }, - { "Magball", MFILE_MAGBALL, 8, MFLAG_HIDDEN, 1, 16, 128, 32 }, - { "Krull", MFILE_KRULL, 1, MFLAG_HIDDEN, 0, 14, 96, 16 }, - { "Miniltng", MFILE_MINILTNG, 1, 0, 1, 8, 64, 0 }, - { "Holy", MFILE_HOLY, 16, 0, { 1, 0 }, 14, 96, 16 }, - { "Holyexpl", MFILE_HOLYEXPL, 1, 0, 0, 8, 160, 48 }, - { "Larrow", MFILE_LARROW, 16, 0, 0, 4, 96, 16 }, - { "Firarwex", MFILE_FIRARWEX, 1, 0, 0, 6, 64, 0 }, - { "Acidbf", MFILE_ACIDBF, 16, MFLAG_HIDDEN, 0, 8, 96, 16 }, - { "Acidspla", MFILE_ACIDSPLA, 1, MFLAG_HIDDEN, 0, 8, 96, 16 }, - { "Acidpud", MFILE_ACIDPUD, 2, MFLAG_HIDDEN, 0, { 9, 4 }, 96, 16 }, - { "Ethrshld", MFILE_ETHRSHLD, 1, 0, 0, 1, 96, 16 }, - { "Firerun", MFILE_FIRERUN, 8, 0, 1, 12, 96, 16 }, - { "Ressur1", MFILE_RESSUR1, 1, 0, 0, 16, 96, 16 }, - { "Sklball", MFILE_SKLBALL, 9, 0, 1, { 16, 16, 16, 16, 16, 16, 16, 16, 8 }, 96, 16 }, - { "Rportal", MFILE_RPORTAL, 2, 0, 0, 16, 96, 16 }, - { "Fireplar", MFILE_FIREPLAR, 1, MFLAG_HIDDEN, 1, 17, 160, 48 }, - { "Scubmisb", MFILE_SCUBMISB, 1, MFLAG_HIDDEN, 0, 16, 96, 16 }, - { "Scbsexpb", MFILE_SCBSEXPB, 1, MFLAG_HIDDEN, 0, 6, 128, 32 }, - { "Scubmisc", MFILE_SCUBMISC, 1, MFLAG_HIDDEN, 0, 16, 96, 16 }, - { "Scbsexpc", MFILE_SCBSEXPC, 1, MFLAG_HIDDEN, 0, 6, 128, 32 }, - { "Scubmisd", MFILE_SCUBMISD, 1, MFLAG_HIDDEN, 0, 16, 96, 16 }, - { "Scbsexpd", MFILE_SCBSEXPD, 1, MFLAG_HIDDEN, 0, 6, 128, 32 }, - { "spawns", MFILE_SPAWNS, 8, MFLAG_HIDDEN, 0, 9, 96, 16 }, - { "reflect", MFILE_REFLECT, 1, MFLAG_LOCK_ANIMATION, 0, 1, 160, 64 }, - { "ms_ora", MFILE_LICH, 16, MFLAG_HIDDEN, 0, 15, 96, 8 }, - { "ms_bla", MFILE_MSBLA, 16, MFLAG_HIDDEN, 0, 15, 96, 8 }, - { "ms_reb", MFILE_NECROMORB, 16, MFLAG_HIDDEN, 0, 15, 96, 8 }, - { "ms_yeb", MFILE_ARCHLICH, 16, MFLAG_HIDDEN, 0, 15, 96, 8 }, - { "rglows1", MFILE_RUNE, 1, 0, 0, 10, 96, 8 }, - { "ex_yel2", MFILE_EXYEL2, 1, MFLAG_HIDDEN, 0, 10, 220, 78 }, - { "ex_blu2", MFILE_EXBL2, 1, MFLAG_HIDDEN, 0, 10, 212, 86 }, - { "ex_red3", MFILE_EXRED3, 1, MFLAG_HIDDEN, 0, 7, 292, 114 }, - { "ms_blb", MFILE_BONEDEMON, 16, MFLAG_HIDDEN, 0, 15, 96, 8 }, - { "ex_ora1", MFILE_EXORA1, 1, MFLAG_HIDDEN, 0, 13, 96, -12 }, - { "ex_blu3", MFILE_EXBL3, 1, MFLAG_HIDDEN, 0, 7, 292, 114 }, - { "", MFILE_NONE, 0, 0 }, + // name, animName, animFAmt, flags, animDelay[16], animLen[16], animWidth[16], animWidth2[16] + { "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::None, 0, { 15, 8, 8, 8 }, { 96, 128, 128, 128 }, { 16, 32, 32, 32 } }, + { "Bone", MFILE_BONE, 3, MissileDataFlags::None, 2, 8, 128, 32 }, + { "Metlhit", MFILE_METLHIT, 3, MissileDataFlags::None, 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::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::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::None, 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::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::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, }, // clang-format on }; -MissileFileData::MissileFileData(const char *name, uint8_t animName, uint8_t animFAmt, uint32_t flags, +MissileFileData::MissileFileData(const char *name, uint8_t animName, uint8_t animFAmt, MissileDataFlags flags, AutofillArray animDelay, AutofillArray animLen, AutofillArray animWidth, AutofillArray animWidth2) : name(name) @@ -212,7 +212,7 @@ void MissileFileData::LoadGFX() if (animData[0] != nullptr) return; - if ((flags & MFLAG_HIDDEN) != 0) + if (flags == MissileDataFlags::NoGraphics) return; char pszName[256]; diff --git a/Source/misdat.h b/Source/misdat.h index 3a2ba634a..20f802c0f 100644 --- a/Source/misdat.h +++ b/Source/misdat.h @@ -123,18 +123,24 @@ typedef struct MissileData { MissileMovementDistrubution MovementDistribution; } MissileDataStruct; +enum class MissileDataFlags { + None = 0, + NoGraphics = 1 << 0, + NotAnimated = 1 << 1, +}; + struct MissileFileData { const char *name; uint8_t animName; uint8_t animFAmt; - uint32_t flags; + MissileDataFlags flags; std::array, 16> animData; AutofillArray animDelay = {}; AutofillArray animLen = {}; AutofillArray animWidth = {}; AutofillArray animWidth2 = {}; - MissileFileData(const char *name, uint8_t animName, uint8_t animFAmt, uint32_t flags) + MissileFileData(const char *name, uint8_t animName, uint8_t animFAmt, MissileDataFlags flags) : name(name) , animName(animName) , animFAmt(animFAmt) @@ -142,7 +148,7 @@ struct MissileFileData { { } - MissileFileData(const char *name, uint8_t animName, uint8_t animFAmt, uint32_t flags, + MissileFileData(const char *name, uint8_t animName, uint8_t animFAmt, MissileDataFlags flags, AutofillArray animDelay, AutofillArray animLen, AutofillArray animWidth, AutofillArray animWidth2); diff --git a/Source/missiles.cpp b/Source/missiles.cpp index bc1e5d08d..645f78b4d 100644 --- a/Source/missiles.cpp +++ b/Source/missiles.cpp @@ -2377,7 +2377,7 @@ void InitMissileAnimationFromMonster(MissileStruct &mis, int midir, const Monste { const AnimStruct &anim = mon.MType->GetAnimData(graphic); mis._mimfnum = midir; - mis._miAnimFlags = 0; + mis._miAnimFlags = MissileDataFlags::None; const auto &celSprite = *anim.CelSpritesForDirections[midir]; mis._miAnimData = celSprite.Data(); mis._miAnimDelay = anim.Rate; @@ -4733,7 +4733,7 @@ void ProcessMissiles() for (int i = 0; i < ActiveMissileCount; i++) { auto &missile = Missiles[ActiveMissiles[i]]; MissileData[missile._mitype].mProc(ActiveMissiles[i]); - if ((missile._miAnimFlags & MFLAG_LOCK_ANIMATION) != 0) + if (missile._miAnimFlags == MissileDataFlags::NotAnimated) continue; missile._miAnimCnt++; diff --git a/Source/missiles.h b/Source/missiles.h index 72041af15..77b941606 100644 --- a/Source/missiles.h +++ b/Source/missiles.h @@ -94,7 +94,7 @@ struct MissileStruct { int _mispllvl; bool _miDelFlag; // Indicate whether the missile should be deleted uint8_t _miAnimType; - int _miAnimFlags; + MissileDataFlags _miAnimFlags; const byte *_miAnimData; int _miAnimDelay; // Tick length of each frame in the current animation int _miAnimLen; // Number of frames in current animation