/** * @file spelldat.h * * Interface of all spell data. */ #pragma once #include #include "effects.h" namespace devilution { #define MAX_SPELLS 52 enum class SpellType : uint8_t { Skill, FIRST = Skill, Spell, Scroll, Charges, LAST = Charges, Invalid, }; enum spell_id : int8_t { SPL_NULL, SPL_FIREBOLT, SPL_HEAL, SPL_LIGHTNING, SPL_FLASH, SPL_IDENTIFY, SPL_FIREWALL, SPL_TOWN, SPL_STONE, SPL_INFRA, SPL_RNDTELEPORT, SPL_MANASHIELD, SPL_FIREBALL, SPL_GUARDIAN, SPL_CHAIN, SPL_WAVE, SPL_DOOMSERP, SPL_BLODRIT, SPL_NOVA, SPL_INVISIBIL, SPL_FLAME, SPL_GOLEM, SPL_BLODBOIL, SPL_TELEPORT, SPL_APOCA, SPL_ETHEREALIZE, SPL_REPAIR, SPL_RECHARGE, SPL_DISARM, SPL_ELEMENT, SPL_CBOLT, SPL_HBOLT, SPL_RESURRECT, SPL_TELEKINESIS, SPL_HEALOTHER, SPL_FLARE, SPL_BONESPIRIT, SPL_LASTDIABLO = SPL_BONESPIRIT, SPL_MANA, SPL_MAGI, SPL_JESTER, SPL_LIGHTWALL, SPL_IMMOLAT, SPL_WARP, SPL_REFLECT, SPL_BERSERK, SPL_FIRERING, SPL_SEARCH, SPL_RUNEFIRE, SPL_RUNELIGHT, SPL_RUNENOVA, SPL_RUNEIMMOLAT, SPL_RUNESTONE, SPL_LAST = SPL_RUNESTONE, SPL_INVALID = -1, }; enum class MagicType : uint8_t { Fire, Lightning, Magic, }; enum class MissileID : int8_t { // clang-format off Arrow, Firebolt, Guardian, Phasing, NovaBall, FireWall, Fireball, LightningControl, Lightning, MagmaBallExplosion, TownPortal, FlashBottom, FlashTop, ManaShield, FlameWave, ChainLightning, ChainBall, // unused BloodHit, // unused BoneHit, // unused MetalHit, // unused Rhino, MagmaBall, ThinLightningControl, ThinLightning, BloodStar, BloodStarExplosion, Teleport, FireArrow, DoomSerpents, // unused FireOnly, // unused StoneCurse, BloodRitual, // unused Invisibility, // unused Golem, Etherealize, Spurt, // unused ApocalypseBoom, Healing, FireWallControl, Infravision, Identify, FlameWaveControl, Nova, Rage, // BloodBoil in Diablo Apocalypse, ItemRepair, StaffRecharge, TrapDisarm, Inferno, InfernoControl, FireMan, // unused Krull, // unused ChargedBolt, HolyBolt, Resurrect, Telekinesis, LightningArrow, Acid, AcidSplat, AcidPuddle, HealOther, Elemental, ResurrectBeam, BoneSpirit, WeaponExplosion, RedPortal, DiabloApocalypseBoom, DiabloApocalypse, Mana, Magi, LightningWall, LightningWallControl, Immolation, SpectralArrow, FireballBow, LightningBow, ChargedBoltBow, HolyBoltBow, Warp, Reflect, Berserk, RingOfFire, StealPotions, StealMana, RingOfLightning, // unused Search, Aura, // unused Aura2, // unused SpiralFireball, // unused RuneOfFire, RuneOfLight, RuneOfNova, RuneOfImmolation, RuneOfStone, BigExplosion, HorkSpawn, Jester, OpenNest, OrangeFlare, BlueFlare, RedFlare, YellowFlare, BlueFlare2, YellowExplosion, RedExplosion, BlueExplosion, BlueExplosion2, OrangeExplosion, Null = -1, // clang-format on }; struct SpellData { spell_id sName; uint8_t sManaCost; MagicType sType; const char *sNameText; int8_t sBookLvl; int8_t sStaffLvl; bool sTargeted; bool sTownSpell; int16_t sMinInt; _sfx_id sSFX; MissileID sMissiles[3]; uint8_t sManaAdj; uint8_t sMinMana; uint8_t sStaffMin; uint8_t sStaffMax; uint32_t sBookCost; uint16_t sStaffCost; }; extern const SpellData spelldata[]; } // namespace devilution