Browse Source

Refactor MisFileData

MisFileData: make pinnedMem private
pull/2583/head
Vladimir Olteanu 5 years ago committed by Anders Jenbo
parent
commit
3364a4e00c
  1. 4
      Source/dead.cpp
  2. 218
      Source/misdat.cpp
  3. 65
      Source/misdat.h
  4. 82
      Source/missiles.cpp
  5. 6
      Source/scrollrt.cpp

4
Source/dead.cpp

@ -46,14 +46,14 @@ void InitDead()
}
for (auto &dead : Dead[nd].data)
dead = MissileSpriteData[MFILE_BLODBUR].mAnimData[0];
dead = MissileSpriteData[MFILE_BLODBUR].animData[0];
Dead[nd].frame = 8;
Dead[nd].width = 128;
Dead[nd].translationPaletteIndex = 0;
nd++;
for (auto &dead : Dead[nd].data)
dead = MissileSpriteData[MFILE_SHATTER1].mAnimData[0];
dead = MissileSpriteData[MFILE_SHATTER1].animData[0];
Dead[nd].frame = 12;
Dead[nd].width = 128;

218
Source/misdat.cpp

@ -6,6 +6,8 @@
#include "misdat.h"
#include "missiles.h"
#include "engine/load_file.hpp"
#include "engine/cel_header.hpp"
namespace devilution {
@ -127,68 +129,162 @@ MissileDataStruct MissileData[] = {
/** Data related to each missile graphic ID. */
MisFileData MissileSpriteData[] = {
// clang-format off
// mName, mAnimName, mAnimFAmt, mFlags, mAnimData[16], mAnimDelay[16], mAnimLen[16], mAnimWidth[16], mAnimWidth2[16]
{ "Arrows", MFILE_ARROWS, 1, 2, { nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
{ "Fireba", MFILE_FIREBA, 16, 0, { nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14 }, { 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96 }, { 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16 } },
{ "Guard", MFILE_GUARD, 3, 0, { nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr }, { 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 15, 14, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 96, 96, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 16, 16, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
{ "Lghning", MFILE_LGHNING, 1, 0, { nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
{ "Firewal", MFILE_FIREWAL, 2, 0, { nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 13, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
{ "MagBlos", MFILE_MAGBLOS, 1, 0, { nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr }, { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
{ "Portal", MFILE_PORTAL, 2, 0, { nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr }, { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 16, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 96, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 16, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
{ "Bluexfr", MFILE_BLUEXFR, 1, 0, { nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
{ "Bluexbk", MFILE_BLUEXBK, 1, 0, { nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
{ "Manashld", MFILE_MANASHLD, 1, 2, { nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
{ "Blood", MFILE_BLOOD, 4, 0, { nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 15, 8, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 96, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 16, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
{ "Bone", MFILE_BONE, 3, 0, { nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr }, { 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 8, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
{ "Metlhit", MFILE_METLHIT, 3, 0, { nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr }, { 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 10, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 96, 96, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 16, 16, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
{ "Farrow", MFILE_FARROW, 16, 0, { nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4 }, { 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96 }, { 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16 } },
{ "Doom", MFILE_DOOM, 9, 1, { nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr }, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0 }, { 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 0, 0, 0 }, { 96, 96, 96, 96, 96, 96, 96, 96, 96, 0, 0, 0, 0, 0, 0, 0 }, { 16, 16, 16, 16, 16, 16, 16, 16, 16, 0, 0, 0, 0, 0, 0, 0 } },
{ " ", MFILE_0F, 1, 1, { nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
{ "Blodbur", MFILE_BLODBUR, 2, 0, { nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr }, { 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
{ "Newexp", MFILE_NEWEXP, 1, 0, { nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr }, { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
{ "Shatter1", MFILE_SHATTER1, 1, 0, { nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr }, { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
{ "Bigexp", MFILE_BIGEXP, 1, 0, { nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
{ "Inferno", MFILE_INFERNO, 1, 0, { nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
{ "Thinlght", MFILE_THINLGHT, 1, 1, { nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
{ "Flare", MFILE_FLARE, 1, 0, { nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
{ "Flareexp", MFILE_FLAREEXP, 1, 0, { nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
{ "Magball", MFILE_MAGBALL, 8, 1, { nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr }, { 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0 }, { 16, 16, 16, 16, 16, 16, 16, 16, 0, 0, 0, 0, 0, 0, 0, 0 }, { 128, 128, 128, 128, 128, 128, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0 }, { 32, 32, 32, 32, 32, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0 } },
{ "Krull", MFILE_KRULL, 1, 1, { nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
{ "Miniltng", MFILE_MINILTNG, 1, 0, { nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr }, { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
{ "Holy", MFILE_HOLY, 16, 0, { nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr }, { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14 }, { 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96 }, { 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16 } },
{ "Holyexpl", MFILE_HOLYEXPL, 1, 0, { nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
{ "Larrow", MFILE_LARROW, 16, 0, { nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4 }, { 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96 }, { 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16 } },
{ "Firarwex", MFILE_FIRARWEX, 1, 0, { nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
{ "Acidbf", MFILE_ACIDBF, 16, 1, { nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8 }, { 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96 }, { 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16 } },
{ "Acidspla", MFILE_ACIDSPLA, 1, 1, { nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
{ "Acidpud", MFILE_ACIDPUD, 2, 1, { nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 9, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 96, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 16, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
{ "Ethrshld", MFILE_ETHRSHLD, 1, 0, { nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
{ "Firerun", MFILE_FIRERUN, 8, 0, { nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr }, { 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0 }, { 12, 12, 12, 12, 12, 12, 12, 12, 0, 0, 0, 0, 0, 0, 0, 0 }, { 96, 96, 96, 96, 96, 96, 96, 96, 0, 0, 0, 0, 0, 0, 0, 0 }, { 16, 16, 16, 16, 16, 16, 16, 16, 0, 0, 0, 0, 0, 0, 0, 0 } },
{ "Ressur1", MFILE_RESSUR1, 1, 0, { nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
{ "Sklball", MFILE_SKLBALL, 9, 0, { nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr }, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0 }, { 16, 16, 16, 16, 16, 16, 16, 16, 8, 0, 0, 0, 0, 0, 0, 0 }, { 96, 96, 96, 96, 96, 96, 96, 96, 96, 0, 0, 0, 0, 0, 0, 0 }, { 16, 16, 16, 16, 16, 16, 16, 16, 16, 0, 0, 0, 0, 0, 0, 0 } },
{ "Rportal", MFILE_RPORTAL, 2, 0, { nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 16, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 96, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 16, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
{ "Fireplar", MFILE_FIREPLAR, 1, 1, { nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr }, { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
{ "Scubmisb", MFILE_SCUBMISB, 1, 1, { nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
{ "Scbsexpb", MFILE_SCBSEXPB, 1, 1, { nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
{ "Scubmisc", MFILE_SCUBMISC, 1, 1, { nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
{ "Scbsexpc", MFILE_SCBSEXPC, 1, 1, { nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
{ "Scubmisd", MFILE_SCUBMISD, 1, 1, { nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
{ "Scbsexpd", MFILE_SCBSEXPD, 1, 1, { nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
{ "spawns", MFILE_SPAWNS, 8, 1, { nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0 }, { 96, 96, 96, 96, 96, 96, 96, 96, 0, 0, 0, 0, 0, 0, 0, 0 }, { 16, 16, 16, 16, 16, 16, 16, 16, 0, 0, 0, 0, 0, 0, 0, 0 } },
{ "reflect", MFILE_REFLECT, 1, 2, { nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
{ "ms_ora", MFILE_LICH, 16, 1, { nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15 }, { 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96 }, { 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8 } },
{ "ms_bla", MFILE_MSBLA, 16, 1, { nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15 }, { 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96 }, { 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8 } },
{ "ms_reb", MFILE_NECROMORB, 16, 1, { nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15 }, { 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96 }, { 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8 } },
{ "ms_yeb", MFILE_ARCHLICH, 16, 1, { nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15 }, { 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96 }, { 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8 } },
{ "rglows1", MFILE_RUNE, 1, 0, { nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
{ "ex_yel2", MFILE_EXYEL2, 1, 1, { nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
{ "ex_blu2", MFILE_EXBL2, 1, 1, { nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 212, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
{ "ex_red3", MFILE_EXRED3, 1, 1, { nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 292, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
{ "ms_blb", MFILE_BONEDEMON, 16, 1, { nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15 }, { 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96 }, { 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8 } },
{ "ex_ora1", MFILE_EXORA1, 1, 1, { nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { -12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
{ "ex_blu3", MFILE_EXBL3, 1, 1, { nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 292, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
{ "", MFILE_NONE, 0, 0, { nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
// 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 },
// clang-format on
};
MisFileData::MisFileData(const char *name, uint8_t animName, uint8_t animFAmt, uint32_t flags,
std::array<uint8_t, 16> animDelay, std::array<uint8_t, 16> animLen,
std::array<int16_t, 16> animWidth, std::array<int16_t, 16> animWidth2)
: name(name)
, animName(animName)
, animFAmt(animFAmt)
, flags(flags)
, animDelay(animDelay)
, animLen(animLen)
, animWidth(animWidth)
, animWidth2(animWidth2)
{
if (flags & MFLAG_ALLOW_SPECIAL)
pinnedMem.reserve(1);
else
pinnedMem.reserve(animFAmt);
}
namespace {
template <typename T>
constexpr std::array<T, 16> duplicate(T value, unsigned count)
{
std::array<T, 16> ret = {};
for (unsigned i = 0; i < count; i++)
ret[i] = value;
return ret;
}
} //namespace
MisFileData::MisFileData(const char *name, uint8_t animName, uint8_t animFAmt, uint32_t flags,
uint8_t animDelay, uint8_t animLen,
int16_t animWidth, int16_t animWidth2)
: MisFileData(name, animName, animFAmt, flags,
duplicate<uint8_t>(animDelay, animFAmt), duplicate<uint8_t>(animLen, animFAmt),
duplicate<int16_t>(animWidth, animFAmt), duplicate<int16_t>(animWidth2, animFAmt))
{
}
MisFileData::MisFileData(const char *name, uint8_t animName, uint8_t animFAmt, uint32_t flags,
uint8_t animDelay, std::array<uint8_t, 16> animLen,
int16_t animWidth, int16_t animWidth2)
: MisFileData(name, animName, animFAmt, flags,
duplicate<uint8_t>(animDelay, animFAmt), animLen,
duplicate<int16_t>(animWidth, animFAmt), duplicate<int16_t>(animWidth2, animFAmt))
{
}
MisFileData::MisFileData(const char *name, uint8_t animName, uint8_t animFAmt, uint32_t flags,
std::array<uint8_t, 16> animDelay, uint8_t animLen,
int16_t animWidth, int16_t animWidth2)
: MisFileData(name, animName, animFAmt, flags,
animDelay, duplicate<uint8_t>(animLen, animFAmt),
duplicate<int16_t>(animWidth, animFAmt), duplicate<int16_t>(animWidth2, animFAmt))
{
}
MisFileData::MisFileData(const char *name, uint8_t animName, uint8_t animFAmt, uint32_t flags,
uint8_t animDelay, std::array<uint8_t, 16> animLen,
std::array<int16_t, 16> animWidth, std::array<int16_t, 16> animWidth2)
: MisFileData(name, animName, animFAmt, flags,
duplicate<uint8_t>(animDelay, animFAmt), animLen,
animWidth, animWidth2)
{
}
void MisFileData::LoadGFX()
{
if (animData[0] != nullptr)
return;
char pszName[256];
if ((flags & MFLAG_ALLOW_SPECIAL) != 0) {
sprintf(pszName, "Missiles\\%s.CL2", name);
auto file = LoadFileInMem(pszName);
for (int i = 0; i < animFAmt; i++)
animData[i] = CelGetFrame(file.get(), i);
pinnedMem.push_back(std::move(file));
} else if (animFAmt == 1) {
sprintf(pszName, "Missiles\\%s.CL2", name);
auto file = LoadFileInMem(pszName);
animData[0] = file.get();
pinnedMem.push_back(std::move(file));
} else {
for (unsigned i = 0; i < animFAmt; i++) {
sprintf(pszName, "Missiles\\%s%u.CL2", name, i + 1);
auto file = LoadFileInMem(pszName);
animData[i] = file.get();
pinnedMem.push_back(std::move(file));
}
}
}
} // namespace devilution

65
Source/misdat.h

@ -6,6 +6,7 @@
#pragma once
#include <cstdint>
#include <vector>
#include "engine.h"
#include "effects.h"
@ -121,19 +122,59 @@ typedef struct MissileData {
MissileMovementDistrubution MovementDistribution;
} MissileDataStruct;
typedef struct MisFileData {
const char *mName;
uint8_t mAnimName;
uint8_t mAnimFAmt;
uint32_t mFlags;
byte *mAnimData[16];
uint8_t mAnimDelay[16];
uint8_t mAnimLen[16];
int16_t mAnimWidth[16];
int16_t mAnimWidth2[16];
} MisFileDataStruct;
struct MisFileData {
const char *name;
uint8_t animName;
uint8_t animFAmt;
uint32_t flags;
std::array<byte *, 16> animData = {};
std::array<uint8_t, 16> animDelay = {};
std::array<uint8_t, 16> animLen = {};
std::array<int16_t, 16> animWidth = {};
std::array<int16_t, 16> animWidth2 = {};
private:
std::vector<std::unique_ptr<byte[]>> pinnedMem;
public:
MisFileData(const char *name, uint8_t animName, uint8_t animFAmt, uint32_t flags)
: name(name)
, animName(animName)
, animFAmt(animFAmt)
, flags(flags)
{
}
MisFileData(const char *name, uint8_t animName, uint8_t animFAmt, uint32_t flags,
std::array<uint8_t, 16> animDelay, std::array<uint8_t, 16> animLen,
std::array<int16_t, 16> animWidth, std::array<int16_t, 16> animWidth2);
MisFileData(const char *name, uint8_t animName, uint8_t animFAmt, uint32_t flags,
uint8_t animDelay, uint8_t animLen,
int16_t animWidth, int16_t animWidth2);
MisFileData(const char *name, uint8_t animName, uint8_t animFAmt, uint32_t flags,
uint8_t animDelay, std::array<uint8_t, 16> animLen,
int16_t animWidth, int16_t animWidth2);
MisFileData(const char *name, uint8_t animName, uint8_t animFAmt, uint32_t flags,
std::array<uint8_t, 16> animDelay, uint8_t animLen,
int16_t animWidth, int16_t animWidth2);
MisFileData(const char *name, uint8_t animName, uint8_t animFAmt, uint32_t flags,
uint8_t animDelay, std::array<uint8_t, 16> animLen,
std::array<int16_t, 16> animWidth, std::array<int16_t, 16> animWidth2);
void LoadGFX();
void FreeGFX()
{
animData = {};
pinnedMem.clear();
}
};
extern MissileDataStruct MissileData[];
extern MisFileDataStruct MissileSpriteData[];
extern MisFileData MissileSpriteData[];
} // namespace devilution

82
Source/missiles.cpp

@ -488,7 +488,7 @@ void CheckMissileCol(int i, int mindam, int maxdam, bool shift, Point position,
&blocked)) {
if (gbIsHellfire && blocked) {
int dir = Missiles[i]._mimfnum + (GenerateRnd(2) != 0 ? 1 : -1);
int mAnimFAmt = MissileSpriteData[Missiles[i]._miAnimType].mAnimFAmt;
int mAnimFAmt = MissileSpriteData[Missiles[i]._miAnimType].animFAmt;
if (dir < 0)
dir = mAnimFAmt - 1;
else if (dir > mAnimFAmt)
@ -523,7 +523,7 @@ void CheckMissileCol(int i, int mindam, int maxdam, bool shift, Point position,
&blocked)) {
if (gbIsHellfire && blocked) {
int dir = Missiles[i]._mimfnum + (GenerateRnd(2) != 0 ? 1 : -1);
int mAnimFAmt = MissileSpriteData[Missiles[i]._miAnimType].mAnimFAmt;
int mAnimFAmt = MissileSpriteData[Missiles[i]._miAnimType].animFAmt;
if (dir < 0)
dir = mAnimFAmt - 1;
else if (dir > mAnimFAmt)
@ -572,7 +572,7 @@ void CheckMissileCol(int i, int mindam, int maxdam, bool shift, Point position,
&blocked)) {
if (gbIsHellfire && blocked) {
int dir = Missiles[i]._mimfnum + (GenerateRnd(2) != 0 ? 1 : -1);
int mAnimFAmt = MissileSpriteData[Missiles[i]._miAnimType].mAnimFAmt;
int mAnimFAmt = MissileSpriteData[Missiles[i]._miAnimType].animFAmt;
if (dir < 0)
dir = mAnimFAmt - 1;
else if (dir > mAnimFAmt)
@ -614,36 +614,16 @@ void SetMissAnim(int mi, int animtype)
}
Missiles[mi]._miAnimType = animtype;
Missiles[mi]._miAnimFlags = MissileSpriteData[animtype].mFlags;
Missiles[mi]._miAnimData = MissileSpriteData[animtype].mAnimData[dir];
Missiles[mi]._miAnimDelay = MissileSpriteData[animtype].mAnimDelay[dir];
Missiles[mi]._miAnimLen = MissileSpriteData[animtype].mAnimLen[dir];
Missiles[mi]._miAnimWidth = MissileSpriteData[animtype].mAnimWidth[dir];
Missiles[mi]._miAnimWidth2 = MissileSpriteData[animtype].mAnimWidth2[dir];
Missiles[mi]._miAnimFlags = MissileSpriteData[animtype].flags;
Missiles[mi]._miAnimData = MissileSpriteData[animtype].animData[dir];
Missiles[mi]._miAnimDelay = MissileSpriteData[animtype].animDelay[dir];
Missiles[mi]._miAnimLen = MissileSpriteData[animtype].animLen[dir];
Missiles[mi]._miAnimWidth = MissileSpriteData[animtype].animWidth[dir];
Missiles[mi]._miAnimWidth2 = MissileSpriteData[animtype].animWidth2[dir];
Missiles[mi]._miAnimCnt = 0;
Missiles[mi]._miAnimFrame = 1;
}
void FreeMissileGFX(int mi)
{
if ((MissileSpriteData[mi].mFlags & MFLAG_ALLOW_SPECIAL) != 0) {
if (MissileSpriteData[mi].mAnimData[0] != nullptr) {
auto *p = (DWORD *)MissileSpriteData[mi].mAnimData[0];
p -= MissileSpriteData[mi].mAnimFAmt;
delete[] p;
MissileSpriteData[mi].mAnimData[0] = nullptr;
}
return;
}
for (int i = 0; i < MissileSpriteData[mi].mAnimFAmt; i++) {
if (MissileSpriteData[mi].mAnimData[i] != nullptr) {
delete[] MissileSpriteData[mi].mAnimData[i];
MissileSpriteData[mi].mAnimData[i] = nullptr;
}
}
}
bool MissilesFoundTarget(int mi, Point *position, int rad)
{
rad = std::min(rad, 19);
@ -1229,50 +1209,32 @@ void SetMissDir(int mi, int dir)
void LoadMissileGFX(BYTE mi)
{
MisFileData *mfd = &MissileSpriteData[mi];
if (mfd->mAnimData[0] != nullptr)
return;
char pszName[256];
if ((mfd->mFlags & MFLAG_ALLOW_SPECIAL) != 0) {
sprintf(pszName, "Missiles\\%s.CL2", mfd->mName);
byte *file = LoadFileInMem(pszName).release();
for (int i = 0; i < mfd->mAnimFAmt; i++)
mfd->mAnimData[i] = CelGetFrame(file, i);
} else if (mfd->mAnimFAmt == 1) {
sprintf(pszName, "Missiles\\%s.CL2", mfd->mName);
mfd->mAnimData[0] = LoadFileInMem(pszName).release();
} else {
for (unsigned i = 0; i < mfd->mAnimFAmt; i++) {
sprintf(pszName, "Missiles\\%s%u.CL2", mfd->mName, i + 1);
mfd->mAnimData[i] = LoadFileInMem(pszName).release();
}
}
MissileSpriteData[mi].LoadGFX();
}
void InitMissileGFX()
{
for (int mi = 0; MissileSpriteData[mi].mAnimFAmt != 0; mi++) {
for (int mi = 0; MissileSpriteData[mi].animFAmt != 0; mi++) {
if (!gbIsHellfire && mi > MFILE_SCBSEXPD)
break;
if ((MissileSpriteData[mi].mFlags & MFLAG_HIDDEN) == 0)
if ((MissileSpriteData[mi].flags & MFLAG_HIDDEN) == 0)
LoadMissileGFX(mi);
}
}
void FreeMissiles()
{
for (int mi = 0; MissileSpriteData[mi].mAnimFAmt != 0; mi++) {
if ((MissileSpriteData[mi].mFlags & MFLAG_HIDDEN) == 0)
FreeMissileGFX(mi);
for (int mi = 0; MissileSpriteData[mi].animFAmt != 0; mi++) {
if ((MissileSpriteData[mi].flags & MFLAG_HIDDEN) == 0)
MissileSpriteData[mi].FreeGFX();
}
}
void FreeMissiles2()
{
for (int mi = 0; MissileSpriteData[mi].mAnimFAmt != 0; mi++) {
if ((MissileSpriteData[mi].mFlags & MFLAG_HIDDEN) != 0)
FreeMissileGFX(mi);
for (int mi = 0; MissileSpriteData[mi].animFAmt != 0; mi++) {
if ((MissileSpriteData[mi].flags & MFLAG_HIDDEN) != 0)
MissileSpriteData[mi].FreeGFX();
}
}
@ -2500,7 +2462,7 @@ void AddFlare(int mi, Point src, Point dst, int midir, int8_t mienemy, int id, i
SetMissAnim(mi, MFILE_SCUBMISC);
}
if (MissileSpriteData[Missiles[mi]._miAnimType].mAnimFAmt == 16) {
if (MissileSpriteData[Missiles[mi]._miAnimType].animFAmt == 16) {
SetMissDir(mi, GetDirection16(src, dst));
}
}
@ -2986,7 +2948,7 @@ void AddResurrectBeam(int mi, Point /*src*/, Point dst, int /*midir*/, int8_t /*
Missiles[mi].position.tile = dst;
Missiles[mi].position.start = Missiles[mi].position.tile;
Missiles[mi].position.velocity = { 0, 0 };
Missiles[mi]._mirange = MissileSpriteData[MFILE_RESSUR1].mAnimLen[0];
Missiles[mi]._mirange = MissileSpriteData[MFILE_RESSUR1].animLen[0];
}
void AddTelekinesis(int mi, Point /*src*/, Point /*dst*/, int /*midir*/, int8_t /*mienemy*/, int id, int /*dam*/)
@ -3078,7 +3040,7 @@ int AddMissile(Point src, Point dst, int midir, int mitype, int8_t micaster, int
Missiles[mi]._mispllvl = spllvl;
Missiles[mi]._mimfnum = midir;
if (Missiles[mi]._miAnimType == MFILE_NONE || MissileSpriteData[Missiles[mi]._miAnimType].mAnimFAmt < 8)
if (Missiles[mi]._miAnimType == MFILE_NONE || MissileSpriteData[Missiles[mi]._miAnimType].animFAmt < 8)
SetMissDir(mi, 0);
else
SetMissDir(mi, midir);
@ -4805,7 +4767,7 @@ void missiles_process_charge()
int mi = ActiveMissiles[i];
MissileStruct *mis = &Missiles[mi];
mis->_miAnimData = MissileSpriteData[mis->_miAnimType].mAnimData[mis->_mimfnum];
mis->_miAnimData = MissileSpriteData[mis->_miAnimType].animData[mis->_mimfnum];
if (mis->_mitype != MIS_RHINO)
continue;

6
Source/scrollrt.cpp

@ -417,10 +417,10 @@ void DrawMonster(const Surface &out, int x, int y, int mx, int my, const Monster
*/
void DrawPlayerIconHelper(const Surface &out, int pnum, missile_graphic_id missileGraphicId, int x, int y, bool lighting)
{
x += CalculateWidth2(Players[pnum].AnimInfo.pCelSprite->Width()) - MissileSpriteData[missileGraphicId].mAnimWidth2[0];
x += CalculateWidth2(Players[pnum].AnimInfo.pCelSprite->Width()) - MissileSpriteData[missileGraphicId].animWidth2[0];
int width = MissileSpriteData[missileGraphicId].mAnimWidth[0];
byte *pCelBuff = MissileSpriteData[missileGraphicId].mAnimData[0];
int width = MissileSpriteData[missileGraphicId].animWidth[0];
byte *pCelBuff = MissileSpriteData[missileGraphicId].animData[0];
CelSprite cel { pCelBuff, width };

Loading…
Cancel
Save