diff --git a/Source/misdat.cpp b/Source/misdat.cpp index ec722c858..460fd4cd1 100644 --- a/Source/misdat.cpp +++ b/Source/misdat.cpp @@ -130,80 +130,101 @@ MissileDataStruct MissileData[] = { MissileFileData MissileSpriteData[] = { // clang-format off // 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 }, + { "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 }; +namespace { + +template +std::array maybeAutofill(std::initializer_list list) +{ + assert(list.size() <= 16); + + std::array ret; + + if (list.size() == 1) { + ret.fill(*list.begin()); + } else { + int i = 0; + for (T x : list) + ret[i++] = x; + } + return ret; +} + +} // namespace + MissileFileData::MissileFileData(const char *name, uint8_t animName, uint8_t animFAmt, MissileDataFlags flags, - AutofillArray animDelay, AutofillArray animLen, - AutofillArray animWidth, AutofillArray animWidth2) + std::initializer_list animDelay, std::initializer_list animLen, + std::initializer_list animWidth, std::initializer_list animWidth2) : name(name) , animName(animName) , animFAmt(animFAmt) , flags(flags) - , animDelay(animDelay) - , animLen(animLen) - , animWidth(animWidth) - , animWidth2(animWidth2) + , animDelay(maybeAutofill(animDelay)) + , animLen(maybeAutofill(animLen)) + , animWidth(maybeAutofill(animWidth)) + , animWidth2(maybeAutofill(animWidth2)) { } diff --git a/Source/misdat.h b/Source/misdat.h index 3e7a36bd4..aad115e91 100644 --- a/Source/misdat.h +++ b/Source/misdat.h @@ -10,7 +10,6 @@ #include "engine.h" #include "effects.h" -#include "utils/autofill_array.h" #include "utils/stdcompat/cstddef.hpp" namespace devilution { @@ -137,10 +136,10 @@ struct MissileFileData { uint8_t animFAmt; MissileDataFlags flags; std::array, 16> animData; - AutofillArray animDelay = {}; - AutofillArray animLen = {}; - AutofillArray animWidth = {}; - AutofillArray animWidth2 = {}; + std::array animDelay = {}; + std::array animLen = {}; + std::array animWidth = {}; + std::array animWidth2 = {}; MissileFileData(const char *name, uint8_t animName, uint8_t animFAmt, MissileDataFlags flags) : name(name) @@ -151,8 +150,8 @@ struct MissileFileData { } MissileFileData(const char *name, uint8_t animName, uint8_t animFAmt, MissileDataFlags flags, - AutofillArray animDelay, AutofillArray animLen, - AutofillArray animWidth, AutofillArray animWidth2); + std::initializer_list animDelay, std::initializer_list animLen, + std::initializer_list animWidth, std::initializer_list animWidth2); void LoadGFX(); diff --git a/Source/utils/autofill_array.h b/Source/utils/autofill_array.h deleted file mode 100644 index dea6b6a47..000000000 --- a/Source/utils/autofill_array.h +++ /dev/null @@ -1,28 +0,0 @@ -#pragma once - -#include - -namespace devilution { - -template -struct AutofillArray : public std::array { - using std::array::array; - - explicit AutofillArray(T x) - { - std::array::fill(x); - } - - AutofillArray() - : AutofillArray(0) - { - } - - template - AutofillArray(const T &x, const Xs &...xs) - : std::array({ x, static_cast(xs)... }) - { - } -}; - -} //namespace devilution