diff --git a/Source/misdat.cpp b/Source/misdat.cpp index d11154799..cdfac62f1 100644 --- a/Source/misdat.cpp +++ b/Source/misdat.cpp @@ -16,115 +16,115 @@ namespace devilution { /** Data related to each missile ID. */ MissileData MissilesData[] = { // clang-format off - // mAddProc, mProc, name, mDraw, mType, mResist, mFileNum, mlSFX, miSFX, MovementDistribution; - { &AddArrow, &MI_Arrow, MIS_ARROW, true, 0, MISR_NONE, MFILE_ARROWS, SFX_NONE, SFX_NONE, MissileMovementDistribution::Blockable }, - { &AddFirebolt, &MI_Firebolt, MIS_FIREBOLT, true, 1, MISR_FIRE, MFILE_FIREBA, LS_FBOLT1, LS_FIRIMP2, MissileMovementDistribution::Blockable }, - { &AddGuardian, &MI_Guardian, MIS_GUARDIAN, true, 1, MISR_NONE, MFILE_GUARD, LS_GUARD, LS_GUARDLAN, MissileMovementDistribution::Disabled }, - { &AddRndTeleport, &MI_Teleport, MIS_RNDTELEPORT, false, 1, MISR_NONE, MFILE_NONE, LS_TELEPORT, SFX_NONE, MissileMovementDistribution::Disabled }, - { &AddLightball, &MI_Lightball, MIS_LIGHTBALL, true, 1, MISR_LIGHTNING, MFILE_LGHNING, SFX_NONE, SFX_NONE, MissileMovementDistribution::Unblockable }, - { &AddFirewall, &MI_Firewall, MIS_FIREWALL, true, 1, MISR_FIRE, MFILE_FIREWAL, LS_WALLLOOP, LS_FIRIMP2, MissileMovementDistribution::Disabled }, - { &AddFireball, &MI_Fireball, MIS_FIREBALL, true, 1, MISR_FIRE, MFILE_FIREBA, LS_FBOLT1, LS_FIRIMP2, MissileMovementDistribution::Blockable }, - { &AddLightctrl, &MI_Lightctrl, MIS_LIGHTCTRL, false, 1, MISR_LIGHTNING, MFILE_LGHNING, SFX_NONE, SFX_NONE, MissileMovementDistribution::Disabled }, - { &AddLightning, &MI_Lightning, MIS_LIGHTNING, true, 1, MISR_LIGHTNING, MFILE_LGHNING, LS_LNING1, LS_ELECIMP1, MissileMovementDistribution::Disabled }, - { &AddMisexp, &MI_Misexp, MIS_MISEXP, true, 2, MISR_NONE, MFILE_MAGBLOS, SFX_NONE, SFX_NONE, MissileMovementDistribution::Disabled }, - { &AddTown, &MI_Town, MIS_TOWN, true, 1, MISR_MAGIC, MFILE_PORTAL, LS_SENTINEL, LS_ELEMENTL, MissileMovementDistribution::Disabled }, - { &AddFlash, &MI_Flash, MIS_FLASH, true, 1, MISR_MAGIC, MFILE_BLUEXFR, LS_NOVA, LS_ELECIMP1, MissileMovementDistribution::Disabled }, - { &AddFlash2, &MI_Flash2, MIS_FLASH2, true, 1, MISR_MAGIC, MFILE_BLUEXBK, SFX_NONE, SFX_NONE, MissileMovementDistribution::Disabled }, - { &AddManashield, nullptr, MIS_MANASHIELD, false, 1, MISR_MAGIC, MFILE_MANASHLD, LS_MSHIELD, SFX_NONE, MissileMovementDistribution::Disabled }, - { &AddFiremove, &MI_Firemove, MIS_FIREMOVE, true, 1, MISR_FIRE, MFILE_FIREWAL, SFX_NONE, SFX_NONE, MissileMovementDistribution::Unblockable }, - { &AddChain, &MI_Chain, MIS_CHAIN, true, 1, MISR_LIGHTNING, MFILE_LGHNING, LS_LNING1, LS_ELECIMP1, MissileMovementDistribution::Disabled }, - { nullptr, nullptr, MIS_SENTINAL, true, 1, MISR_LIGHTNING, MFILE_LGHNING, SFX_NONE, SFX_NONE, MissileMovementDistribution::Disabled }, - { nullptr, nullptr, MIS_BLODSTAR, true, 2, MISR_NONE, MFILE_BLOOD, LS_BLODSTAR, LS_BLSIMPT, MissileMovementDistribution::Disabled }, - { nullptr, nullptr, MIS_BONE, true, 2, MISR_NONE, MFILE_BONE, SFX_NONE, SFX_NONE, MissileMovementDistribution::Disabled }, - { nullptr, nullptr, MIS_METLHIT, true, 2, MISR_NONE, MFILE_METLHIT, SFX_NONE, SFX_NONE, MissileMovementDistribution::Disabled }, - { &AddRhino, &MI_Rhino, MIS_RHINO, true, 2, MISR_NONE, MFILE_NONE, SFX_NONE, SFX_NONE, MissileMovementDistribution::Blockable }, - { &AddMagmaball, &MI_Firebolt, MIS_MAGMABALL, true, 1, MISR_FIRE, MFILE_MAGBALL, SFX_NONE, SFX_NONE, MissileMovementDistribution::Blockable }, - { &AddLightctrl, &MI_Lightctrl, MIS_LIGHTCTRL2, false, 1, MISR_LIGHTNING, MFILE_THINLGHT, SFX_NONE, SFX_NONE, MissileMovementDistribution::Disabled }, - { &AddLightning, &MI_Lightning, MIS_LIGHTNING2, true, 1, MISR_LIGHTNING, MFILE_THINLGHT, SFX_NONE, SFX_NONE, MissileMovementDistribution::Disabled }, - { &AddFlare, &MI_Firebolt, MIS_FLARE, true, 1, MISR_MAGIC, MFILE_FLARE, SFX_NONE, SFX_NONE, MissileMovementDistribution::Blockable }, - { &AddMisexp, &MI_Misexp, MIS_MISEXP2, true, 2, MISR_MAGIC, MFILE_FLAREEXP, SFX_NONE, SFX_NONE, MissileMovementDistribution::Disabled }, - { &AddTeleport, &MI_Teleport, MIS_TELEPORT, false, 1, MISR_NONE, MFILE_NONE, LS_ELEMENTL, SFX_NONE, MissileMovementDistribution::Disabled }, - { &AddLArrow, &MI_LArrow, MIS_FARROW, true, 0, MISR_FIRE, MFILE_FARROW, SFX_NONE, SFX_NONE, MissileMovementDistribution::Blockable }, - { nullptr, nullptr, MIS_DOOMSERP, false, 1, MISR_MAGIC, MFILE_DOOM, LS_DSERP, SFX_NONE, MissileMovementDistribution::Disabled }, - { nullptr, nullptr, MIS_FIREWALLA, true, 2, MISR_FIRE, MFILE_FIREWAL, SFX_NONE, SFX_NONE, MissileMovementDistribution::Disabled }, - { &AddStone, &MI_Stone, MIS_STONE, false, 1, MISR_MAGIC, MFILE_NONE, LS_SCURIMP, SFX_NONE, MissileMovementDistribution::Disabled }, - { nullptr, nullptr, MIS_NULL_1F, true, 1, MISR_NONE, MFILE_NONE, SFX_NONE, SFX_NONE, MissileMovementDistribution::Disabled }, - { nullptr, nullptr, MIS_INVISIBL, false, 1, MISR_NONE, MFILE_NONE, LS_INVISIBL, SFX_NONE, MissileMovementDistribution::Disabled }, - { &AddGolem, nullptr, MIS_GOLEM, false, 1, MISR_NONE, MFILE_NONE, LS_GOLUM, SFX_NONE, MissileMovementDistribution::Disabled }, - { nullptr, nullptr, MIS_ETHEREALIZE, true, 1, MISR_NONE, MFILE_ETHRSHLD, LS_ETHEREAL, SFX_NONE, MissileMovementDistribution::Disabled }, - { nullptr, nullptr, MIS_BLODBUR, true, 2, MISR_NONE, MFILE_BLODBUR, SFX_NONE, SFX_NONE, MissileMovementDistribution::Disabled }, - { &AddBoom, &MI_Boom, MIS_BOOM, true, 2, MISR_NONE, MFILE_NEWEXP, SFX_NONE, SFX_NONE, MissileMovementDistribution::Disabled }, - { &AddHeal, nullptr, MIS_HEAL, false, 1, MISR_NONE, MFILE_NONE, SFX_NONE, SFX_NONE, MissileMovementDistribution::Disabled }, - { &AddFirewallC, &MI_FirewallC, MIS_FIREWALLC, false, 1, MISR_FIRE, MFILE_FIREWAL, SFX_NONE, SFX_NONE, MissileMovementDistribution::Disabled }, - { &AddInfra, &MI_Infra, MIS_INFRA, false, 1, MISR_NONE, MFILE_NONE, LS_INFRAVIS, SFX_NONE, MissileMovementDistribution::Disabled }, - { &AddIdentify, nullptr, MIS_IDENTIFY, false, 1, MISR_NONE, MFILE_NONE, SFX_NONE, SFX_NONE, MissileMovementDistribution::Disabled }, - { &AddWave, &MI_Wave, MIS_WAVE, true, 1, MISR_FIRE, MFILE_FIREWAL, LS_FLAMWAVE, SFX_NONE, MissileMovementDistribution::Disabled }, - { &AddNova, &MI_Nova, MIS_NOVA, true, 1, MISR_LIGHTNING, MFILE_LGHNING, LS_NOVA, SFX_NONE, MissileMovementDistribution::Disabled }, - { &AddBlodboil, &MI_Blodboil, MIS_BLODBOIL, false, 1, MISR_NONE, MFILE_NONE, SFX_NONE, SFX_NONE, MissileMovementDistribution::Disabled }, - { &AddApoca, &MI_Apoca, MIS_APOCA, true, 1, MISR_MAGIC, MFILE_NEWEXP, LS_APOC, SFX_NONE, MissileMovementDistribution::Disabled }, - { &AddRepair, nullptr, MIS_REPAIR, false, 2, MISR_NONE, MFILE_NONE, SFX_NONE, SFX_NONE, MissileMovementDistribution::Disabled }, - { &AddRecharge, nullptr, MIS_RECHARGE, false, 2, MISR_NONE, MFILE_NONE, SFX_NONE, SFX_NONE, MissileMovementDistribution::Disabled }, - { &AddDisarm, nullptr, MIS_DISARM, false, 2, MISR_NONE, MFILE_NONE, LS_TRAPDIS, SFX_NONE, MissileMovementDistribution::Disabled }, - { &AddFlame, &MI_Flame, MIS_FLAME, true, 1, MISR_FIRE, MFILE_INFERNO, LS_SPOUTSTR, SFX_NONE, MissileMovementDistribution::Disabled }, - { &AddFlamec, &MI_Flamec, MIS_FLAMEC, false, 1, MISR_FIRE, MFILE_NONE, SFX_NONE, SFX_NONE, MissileMovementDistribution::Disabled }, - { nullptr, nullptr, MIS_FIREMAN, true, 2, MISR_NONE, MFILE_NONE, SFX_NONE, SFX_NONE, MissileMovementDistribution::Blockable }, - { nullptr, nullptr, MIS_KRULL, true, 0, MISR_FIRE, MFILE_KRULL, SFX_NONE, SFX_NONE, MissileMovementDistribution::Blockable }, - { &AddCbolt, &MI_Cbolt, MIS_CBOLT, true, 1, MISR_LIGHTNING, MFILE_MINILTNG, LS_CBOLT, SFX_NONE, MissileMovementDistribution::Blockable }, - { &AddHbolt, &MI_Hbolt, MIS_HBOLT, true, 1, MISR_NONE, MFILE_HOLY, LS_HOLYBOLT, LS_ELECIMP1, MissileMovementDistribution::Blockable }, - { &AddResurrect, nullptr, MIS_RESURRECT, false, 1, MISR_MAGIC, MFILE_NONE, SFX_NONE, LS_RESUR, MissileMovementDistribution::Disabled }, - { &AddTelekinesis, nullptr, MIS_TELEKINESIS, false, 1, MISR_NONE, MFILE_NONE, LS_ETHEREAL, SFX_NONE, MissileMovementDistribution::Disabled }, - { &AddLArrow, &MI_LArrow, MIS_LARROW, true, 0, MISR_LIGHTNING, MFILE_LARROW, SFX_NONE, SFX_NONE, MissileMovementDistribution::Blockable }, - { &AddAcid, &MI_Firebolt, MIS_ACID, true, 1, MISR_ACID, MFILE_ACIDBF, LS_ACID, SFX_NONE, MissileMovementDistribution::Blockable }, - { &AddMisexp, &MI_Acidsplat, MIS_MISEXP3, true, 2, MISR_ACID, MFILE_ACIDSPLA, SFX_NONE, SFX_NONE, MissileMovementDistribution::Disabled }, - { &AddAcidpud, &MI_Acidpud, MIS_ACIDPUD, true, 2, MISR_ACID, MFILE_ACIDPUD, LS_PUDDLE, SFX_NONE, MissileMovementDistribution::Disabled }, - { &AddHealOther, nullptr, MIS_HEALOTHER, false, 1, MISR_NONE, MFILE_NONE, SFX_NONE, SFX_NONE, MissileMovementDistribution::Disabled }, - { &AddElement, &MI_Element, MIS_ELEMENT, true, 1, MISR_FIRE, MFILE_FIRERUN, LS_ELEMENTL, SFX_NONE, MissileMovementDistribution::Unblockable }, - { &AddResurrectBeam, &MI_ResurrectBeam, MIS_RESURRECTBEAM, true, 1, MISR_NONE, MFILE_RESSUR1, SFX_NONE, SFX_NONE, MissileMovementDistribution::Disabled }, - { &AddBoneSpirit, &MI_Bonespirit, MIS_BONESPIRIT, true, 1, MISR_MAGIC, MFILE_SKLBALL, LS_BONESP, LS_BSIMPCT, MissileMovementDistribution::Blockable }, - { &AddWeapexp, &MI_Weapexp, MIS_WEAPEXP, true, 2, MISR_NONE, MFILE_NONE, SFX_NONE, SFX_NONE, MissileMovementDistribution::Disabled }, - { &AddRportal, &MI_Rportal, MIS_RPORTAL, true, 2, MISR_NONE, MFILE_RPORTAL, LS_SENTINEL, LS_ELEMENTL, MissileMovementDistribution::Disabled }, - { &AddBoom, &MI_Boom, MIS_BOOM2, true, 2, MISR_NONE, MFILE_FIREPLAR, SFX_NONE, SFX_NONE, MissileMovementDistribution::Disabled }, - { &AddDiabApoca, nullptr, MIS_DIABAPOCA, false, 2, MISR_NONE, MFILE_NONE, SFX_NONE, SFX_NONE, MissileMovementDistribution::Disabled }, - { &AddMana, nullptr, MIS_MANA, false, 1, MISR_NONE, MFILE_NONE, SFX_NONE, SFX_NONE, MissileMovementDistribution::Disabled }, - { &AddMagi, nullptr, MIS_MAGI, false, 1, MISR_NONE, MFILE_NONE, SFX_NONE, SFX_NONE, MissileMovementDistribution::Disabled }, - { &AddLightningWall, &MI_LightningWall, MIS_LIGHTWALL, true, 1, MISR_LIGHTNING, MFILE_LGHNING, LS_LMAG, LS_ELECIMP1, MissileMovementDistribution::Disabled }, - { &AddFirewallC, &MI_LightningWallC, MIS_LIGHTNINGWALL, false, 1, MISR_LIGHTNING, MFILE_LGHNING, SFX_NONE, SFX_NONE, MissileMovementDistribution::Disabled }, - { &AddNova, &MI_FireNova, MIS_IMMOLATION, true, 1, MISR_FIRE, MFILE_FIREBA, LS_FBOLT1, LS_FIRIMP2, MissileMovementDistribution::Disabled }, - { &AddSpecArrow, &MI_SpecArrow, MIS_SPECARROW, true, 0, MISR_NONE, MFILE_ARROWS, SFX_NONE, SFX_NONE, MissileMovementDistribution::Disabled }, - { &AddFireNova, &MI_Fireball, MIS_FIRENOVA, true, 1, MISR_FIRE, MFILE_FIREBA, IS_FBALLBOW, LS_FIRIMP2, MissileMovementDistribution::Blockable }, - { &AddLightningArrow, &MI_LightningArrow, MIS_LIGHTARROW, false, 1, MISR_LIGHTNING, MFILE_LGHNING, IS_FBALLBOW, SFX_NONE, MissileMovementDistribution::Disabled }, - { &AddCboltArrow, &MI_Cbolt, MIS_CBOLTARROW, true, 1, MISR_LIGHTNING, MFILE_MINILTNG, LS_CBOLT, SFX_NONE, MissileMovementDistribution::Blockable }, - { &AddHbolt, &MI_Hbolt, MIS_HBOLTARROW, true, 1, MISR_NONE, MFILE_HOLY, LS_HOLYBOLT, LS_ELECIMP1, MissileMovementDistribution::Blockable }, - { &AddWarp, &MI_Teleport, MIS_WARP, false, 1, MISR_NONE, MFILE_NONE, LS_ETHEREAL, SFX_NONE, MissileMovementDistribution::Disabled }, - { &AddReflection, nullptr, MIS_REFLECT, false, 1, MISR_NONE, MFILE_REFLECT, LS_MSHIELD, SFX_NONE, MissileMovementDistribution::Disabled }, - { &AddBerserk, nullptr, MIS_BERSERK, false, 1, MISR_NONE, MFILE_NONE, SFX_NONE, SFX_NONE, MissileMovementDistribution::Disabled }, - { &AddRing, &MI_FireRing, MIS_FIRERING, false, 1, MISR_FIRE, MFILE_FIREWAL, SFX_NONE, SFX_NONE, MissileMovementDistribution::Disabled }, - { &AddStealPotions, nullptr, MIS_STEALPOTS, false, 1, MISR_NONE, MFILE_NONE, SFX_NONE, SFX_NONE, MissileMovementDistribution::Disabled }, - { &AddManaTrap, nullptr, MIS_MANATRAP, false, 1, MISR_NONE, MFILE_NONE, IS_CAST7, SFX_NONE, MissileMovementDistribution::Disabled }, - { nullptr, nullptr, MIS_LIGHTRING, false, 1, MISR_LIGHTNING, MFILE_LGHNING, SFX_NONE, SFX_NONE, MissileMovementDistribution::Disabled }, - { &AddSearch, &MI_Search, MIS_SEARCH, false, 1, MISR_NONE, MFILE_NONE, SFX_NONE, SFX_NONE, MissileMovementDistribution::Disabled }, - { nullptr, nullptr, MIS_FLASHFR, false, 1, MISR_MAGIC, MFILE_BLUEXFR, SFX_NONE, LS_ELECIMP1, MissileMovementDistribution::Disabled }, - { nullptr, nullptr, MIS_FLASHBK, false, 1, MISR_MAGIC, MFILE_BLUEXBK, SFX_NONE, SFX_NONE, MissileMovementDistribution::Disabled }, - { nullptr, nullptr, MIS_IMMOLATION2, true, 1, MISR_FIRE, MFILE_FIREBA, LS_FBOLT1, LS_FIRIMP2, MissileMovementDistribution::Disabled }, - { &AddFireRune, &MI_Rune, MIS_RUNEFIRE, true, 1, MISR_NONE, MFILE_RUNE, SFX_NONE, SFX_NONE, MissileMovementDistribution::Disabled }, - { &AddLightningRune, &MI_Rune, MIS_RUNELIGHT, true, 1, MISR_NONE, MFILE_RUNE, SFX_NONE, SFX_NONE, MissileMovementDistribution::Disabled }, - { &AddGreatLightningRune, &MI_Rune, MIS_RUNENOVA, true, 1, MISR_NONE, MFILE_RUNE, SFX_NONE, SFX_NONE, MissileMovementDistribution::Disabled }, - { &AddImmolationRune, &MI_Rune, MIS_RUNEIMMOLAT, true, 1, MISR_NONE, MFILE_RUNE, SFX_NONE, SFX_NONE, MissileMovementDistribution::Disabled }, - { &AddStoneRune, &MI_Rune, MIS_RUNESTONE, true, 1, MISR_NONE, MFILE_RUNE, SFX_NONE, SFX_NONE, MissileMovementDistribution::Disabled }, - { &AddRuneExplosion, &MI_HiveExplode, MIS_HIVEEXP, true, 1, MISR_FIRE, MFILE_BIGEXP, LS_NESTXPLD, LS_NESTXPLD, MissileMovementDistribution::Disabled }, - { &AddHorkSpawn, &MI_HorkSpawn, MIS_HORKDMN, false, 2, MISR_NONE, MFILE_NONE, SFX_NONE, SFX_NONE, MissileMovementDistribution::Disabled }, - { &AddJester, nullptr, MIS_JESTER, false, 2, MISR_NONE, MFILE_NONE, SFX_NONE, SFX_NONE, MissileMovementDistribution::Disabled }, - { &AddHiveExplosion, nullptr, MIS_HIVEEXP2, false, 2, MISR_NONE, MFILE_NONE, SFX_NONE, SFX_NONE, MissileMovementDistribution::Disabled }, - { &AddFlare, &MI_Firebolt, MIS_LICH, true, 1, MISR_MAGIC, MFILE_LICH, SFX_NONE, SFX_NONE, MissileMovementDistribution::Blockable }, - { &AddFlare, &MI_Firebolt, MIS_PSYCHORB, true, 1, MISR_MAGIC, MFILE_BONEDEMON, SFX_NONE, SFX_NONE, MissileMovementDistribution::Blockable }, - { &AddFlare, &MI_Firebolt, MIS_NECROMORB, true, 1, MISR_MAGIC, MFILE_NECROMORB, SFX_NONE, SFX_NONE, MissileMovementDistribution::Blockable }, - { &AddFlare, &MI_Firebolt, MIS_ARCHLICH, true, 1, MISR_MAGIC, MFILE_ARCHLICH, SFX_NONE, SFX_NONE, MissileMovementDistribution::Blockable }, - { &AddFlare, &MI_Firebolt, MIS_BONEDEMON, true, 1, MISR_MAGIC, MFILE_BONEDEMON, SFX_NONE, SFX_NONE, MissileMovementDistribution::Blockable }, - { &AddMisexp, &MI_Misexp, MIS_EXYEL2, true, 2, MISR_NONE, MFILE_EXYEL2, LS_FIRIMP2, SFX_NONE, MissileMovementDistribution::Disabled }, - { &AddMisexp, &MI_Misexp, MIS_EXRED3, true, 2, MISR_NONE, MFILE_EXRED3, LS_FIRIMP2, SFX_NONE, MissileMovementDistribution::Disabled }, - { &AddMisexp, &MI_Misexp, MIS_EXBL2, true, 2, MISR_NONE, MFILE_EXBL2, LS_FIRIMP2, SFX_NONE, MissileMovementDistribution::Disabled }, - { &AddMisexp, &MI_Misexp, MIS_EXBL3, true, 2, MISR_NONE, MFILE_EXBL3, LS_FIRIMP2, SFX_NONE, MissileMovementDistribution::Disabled }, - { &AddMisexp, &MI_Misexp, MIS_EXORA1, true, 2, MISR_NONE, MFILE_EXORA1, LS_FIRIMP2, SFX_NONE, MissileMovementDistribution::Disabled }, + // mAddProc, mProc, name, mDraw, mType, damageType, mFileNum, mlSFX, miSFX, MovementDistribution; + { &AddArrow, &MI_Arrow, MIS_ARROW, true, 0, DamageType::Physical, MFILE_ARROWS, SFX_NONE, SFX_NONE, MissileMovementDistribution::Blockable }, + { &AddFirebolt, &MI_Firebolt, MIS_FIREBOLT, true, 1, DamageType::Fire, MFILE_FIREBA, LS_FBOLT1, LS_FIRIMP2, MissileMovementDistribution::Blockable }, + { &AddGuardian, &MI_Guardian, MIS_GUARDIAN, true, 1, DamageType::Physical, MFILE_GUARD, LS_GUARD, LS_GUARDLAN, MissileMovementDistribution::Disabled }, + { &AddRndTeleport, &MI_Teleport, MIS_RNDTELEPORT, false, 1, DamageType::Physical, MFILE_NONE, LS_TELEPORT, SFX_NONE, MissileMovementDistribution::Disabled }, + { &AddLightball, &MI_Lightball, MIS_LIGHTBALL, true, 1, DamageType::Lightning, MFILE_LGHNING, SFX_NONE, SFX_NONE, MissileMovementDistribution::Unblockable }, + { &AddFirewall, &MI_Firewall, MIS_FIREWALL, true, 1, DamageType::Fire, MFILE_FIREWAL, LS_WALLLOOP, LS_FIRIMP2, MissileMovementDistribution::Disabled }, + { &AddFireball, &MI_Fireball, MIS_FIREBALL, true, 1, DamageType::Fire, MFILE_FIREBA, LS_FBOLT1, LS_FIRIMP2, MissileMovementDistribution::Blockable }, + { &AddLightctrl, &MI_Lightctrl, MIS_LIGHTCTRL, false, 1, DamageType::Lightning, MFILE_LGHNING, SFX_NONE, SFX_NONE, MissileMovementDistribution::Disabled }, + { &AddLightning, &MI_Lightning, MIS_LIGHTNING, true, 1, DamageType::Lightning, MFILE_LGHNING, LS_LNING1, LS_ELECIMP1, MissileMovementDistribution::Disabled }, + { &AddMisexp, &MI_Misexp, MIS_MISEXP, true, 2, DamageType::Physical, MFILE_MAGBLOS, SFX_NONE, SFX_NONE, MissileMovementDistribution::Disabled }, + { &AddTown, &MI_Town, MIS_TOWN, true, 1, DamageType::Magic, MFILE_PORTAL, LS_SENTINEL, LS_ELEMENTL, MissileMovementDistribution::Disabled }, + { &AddFlash, &MI_Flash, MIS_FLASH, true, 1, DamageType::Magic, MFILE_BLUEXFR, LS_NOVA, LS_ELECIMP1, MissileMovementDistribution::Disabled }, + { &AddFlash2, &MI_Flash2, MIS_FLASH2, true, 1, DamageType::Magic, MFILE_BLUEXBK, SFX_NONE, SFX_NONE, MissileMovementDistribution::Disabled }, + { &AddManashield, nullptr, MIS_MANASHIELD, false, 1, DamageType::Magic, MFILE_MANASHLD, LS_MSHIELD, SFX_NONE, MissileMovementDistribution::Disabled }, + { &AddFiremove, &MI_Firemove, MIS_FIREMOVE, true, 1, DamageType::Fire, MFILE_FIREWAL, SFX_NONE, SFX_NONE, MissileMovementDistribution::Unblockable }, + { &AddChain, &MI_Chain, MIS_CHAIN, true, 1, DamageType::Lightning, MFILE_LGHNING, LS_LNING1, LS_ELECIMP1, MissileMovementDistribution::Disabled }, + { nullptr, nullptr, MIS_SENTINAL, true, 1, DamageType::Lightning, MFILE_LGHNING, SFX_NONE, SFX_NONE, MissileMovementDistribution::Disabled }, + { nullptr, nullptr, MIS_BLODSTAR, true, 2, DamageType::Physical, MFILE_BLOOD, LS_BLODSTAR, LS_BLSIMPT, MissileMovementDistribution::Disabled }, + { nullptr, nullptr, MIS_BONE, true, 2, DamageType::Physical, MFILE_BONE, SFX_NONE, SFX_NONE, MissileMovementDistribution::Disabled }, + { nullptr, nullptr, MIS_METLHIT, true, 2, DamageType::Physical, MFILE_METLHIT, SFX_NONE, SFX_NONE, MissileMovementDistribution::Disabled }, + { &AddRhino, &MI_Rhino, MIS_RHINO, true, 2, DamageType::Physical, MFILE_NONE, SFX_NONE, SFX_NONE, MissileMovementDistribution::Blockable }, + { &AddMagmaball, &MI_Firebolt, MIS_MAGMABALL, true, 1, DamageType::Fire, MFILE_MAGBALL, SFX_NONE, SFX_NONE, MissileMovementDistribution::Blockable }, + { &AddLightctrl, &MI_Lightctrl, MIS_LIGHTCTRL2, false, 1, DamageType::Lightning, MFILE_THINLGHT, SFX_NONE, SFX_NONE, MissileMovementDistribution::Disabled }, + { &AddLightning, &MI_Lightning, MIS_LIGHTNING2, true, 1, DamageType::Lightning, MFILE_THINLGHT, SFX_NONE, SFX_NONE, MissileMovementDistribution::Disabled }, + { &AddFlare, &MI_Firebolt, MIS_FLARE, true, 1, DamageType::Magic, MFILE_FLARE, SFX_NONE, SFX_NONE, MissileMovementDistribution::Blockable }, + { &AddMisexp, &MI_Misexp, MIS_MISEXP2, true, 2, DamageType::Magic, MFILE_FLAREEXP, SFX_NONE, SFX_NONE, MissileMovementDistribution::Disabled }, + { &AddTeleport, &MI_Teleport, MIS_TELEPORT, false, 1, DamageType::Physical, MFILE_NONE, LS_ELEMENTL, SFX_NONE, MissileMovementDistribution::Disabled }, + { &AddLArrow, &MI_LArrow, MIS_FARROW, true, 0, DamageType::Fire, MFILE_FARROW, SFX_NONE, SFX_NONE, MissileMovementDistribution::Blockable }, + { nullptr, nullptr, MIS_DOOMSERP, false, 1, DamageType::Magic, MFILE_DOOM, LS_DSERP, SFX_NONE, MissileMovementDistribution::Disabled }, + { nullptr, nullptr, MIS_FIREWALLA, true, 2, DamageType::Fire, MFILE_FIREWAL, SFX_NONE, SFX_NONE, MissileMovementDistribution::Disabled }, + { &AddStone, &MI_Stone, MIS_STONE, false, 1, DamageType::Magic, MFILE_NONE, LS_SCURIMP, SFX_NONE, MissileMovementDistribution::Disabled }, + { nullptr, nullptr, MIS_NULL_1F, true, 1, DamageType::Physical, MFILE_NONE, SFX_NONE, SFX_NONE, MissileMovementDistribution::Disabled }, + { nullptr, nullptr, MIS_INVISIBL, false, 1, DamageType::Physical, MFILE_NONE, LS_INVISIBL, SFX_NONE, MissileMovementDistribution::Disabled }, + { &AddGolem, nullptr, MIS_GOLEM, false, 1, DamageType::Physical, MFILE_NONE, LS_GOLUM, SFX_NONE, MissileMovementDistribution::Disabled }, + { nullptr, nullptr, MIS_ETHEREALIZE, true, 1, DamageType::Physical, MFILE_ETHRSHLD, LS_ETHEREAL, SFX_NONE, MissileMovementDistribution::Disabled }, + { nullptr, nullptr, MIS_BLODBUR, true, 2, DamageType::Physical, MFILE_BLODBUR, SFX_NONE, SFX_NONE, MissileMovementDistribution::Disabled }, + { &AddBoom, &MI_Boom, MIS_BOOM, true, 2, DamageType::Physical, MFILE_NEWEXP, SFX_NONE, SFX_NONE, MissileMovementDistribution::Disabled }, + { &AddHeal, nullptr, MIS_HEAL, false, 1, DamageType::Physical, MFILE_NONE, SFX_NONE, SFX_NONE, MissileMovementDistribution::Disabled }, + { &AddFirewallC, &MI_FirewallC, MIS_FIREWALLC, false, 1, DamageType::Fire, MFILE_FIREWAL, SFX_NONE, SFX_NONE, MissileMovementDistribution::Disabled }, + { &AddInfra, &MI_Infra, MIS_INFRA, false, 1, DamageType::Physical, MFILE_NONE, LS_INFRAVIS, SFX_NONE, MissileMovementDistribution::Disabled }, + { &AddIdentify, nullptr, MIS_IDENTIFY, false, 1, DamageType::Physical, MFILE_NONE, SFX_NONE, SFX_NONE, MissileMovementDistribution::Disabled }, + { &AddWave, &MI_Wave, MIS_WAVE, true, 1, DamageType::Fire, MFILE_FIREWAL, LS_FLAMWAVE, SFX_NONE, MissileMovementDistribution::Disabled }, + { &AddNova, &MI_Nova, MIS_NOVA, true, 1, DamageType::Lightning, MFILE_LGHNING, LS_NOVA, SFX_NONE, MissileMovementDistribution::Disabled }, + { &AddBlodboil, &MI_Blodboil, MIS_BLODBOIL, false, 1, DamageType::Physical, MFILE_NONE, SFX_NONE, SFX_NONE, MissileMovementDistribution::Disabled }, + { &AddApoca, &MI_Apoca, MIS_APOCA, true, 1, DamageType::Magic, MFILE_NEWEXP, LS_APOC, SFX_NONE, MissileMovementDistribution::Disabled }, + { &AddRepair, nullptr, MIS_REPAIR, false, 2, DamageType::Physical, MFILE_NONE, SFX_NONE, SFX_NONE, MissileMovementDistribution::Disabled }, + { &AddRecharge, nullptr, MIS_RECHARGE, false, 2, DamageType::Physical, MFILE_NONE, SFX_NONE, SFX_NONE, MissileMovementDistribution::Disabled }, + { &AddDisarm, nullptr, MIS_DISARM, false, 2, DamageType::Physical, MFILE_NONE, LS_TRAPDIS, SFX_NONE, MissileMovementDistribution::Disabled }, + { &AddFlame, &MI_Flame, MIS_FLAME, true, 1, DamageType::Fire, MFILE_INFERNO, LS_SPOUTSTR, SFX_NONE, MissileMovementDistribution::Disabled }, + { &AddFlamec, &MI_Flamec, MIS_FLAMEC, false, 1, DamageType::Fire, MFILE_NONE, SFX_NONE, SFX_NONE, MissileMovementDistribution::Disabled }, + { nullptr, nullptr, MIS_FIREMAN, true, 2, DamageType::Physical, MFILE_NONE, SFX_NONE, SFX_NONE, MissileMovementDistribution::Blockable }, + { nullptr, nullptr, MIS_KRULL, true, 0, DamageType::Fire, MFILE_KRULL, SFX_NONE, SFX_NONE, MissileMovementDistribution::Blockable }, + { &AddCbolt, &MI_Cbolt, MIS_CBOLT, true, 1, DamageType::Lightning, MFILE_MINILTNG, LS_CBOLT, SFX_NONE, MissileMovementDistribution::Blockable }, + { &AddHbolt, &MI_Hbolt, MIS_HBOLT, true, 1, DamageType::Physical, MFILE_HOLY, LS_HOLYBOLT, LS_ELECIMP1, MissileMovementDistribution::Blockable }, + { &AddResurrect, nullptr, MIS_RESURRECT, false, 1, DamageType::Magic, MFILE_NONE, SFX_NONE, LS_RESUR, MissileMovementDistribution::Disabled }, + { &AddTelekinesis, nullptr, MIS_TELEKINESIS, false, 1, DamageType::Physical, MFILE_NONE, LS_ETHEREAL, SFX_NONE, MissileMovementDistribution::Disabled }, + { &AddLArrow, &MI_LArrow, MIS_LARROW, true, 0, DamageType::Lightning, MFILE_LARROW, SFX_NONE, SFX_NONE, MissileMovementDistribution::Blockable }, + { &AddAcid, &MI_Firebolt, MIS_ACID, true, 1, DamageType::Acid, MFILE_ACIDBF, LS_ACID, SFX_NONE, MissileMovementDistribution::Blockable }, + { &AddMisexp, &MI_Acidsplat, MIS_MISEXP3, true, 2, DamageType::Acid, MFILE_ACIDSPLA, SFX_NONE, SFX_NONE, MissileMovementDistribution::Disabled }, + { &AddAcidpud, &MI_Acidpud, MIS_ACIDPUD, true, 2, DamageType::Acid, MFILE_ACIDPUD, LS_PUDDLE, SFX_NONE, MissileMovementDistribution::Disabled }, + { &AddHealOther, nullptr, MIS_HEALOTHER, false, 1, DamageType::Physical, MFILE_NONE, SFX_NONE, SFX_NONE, MissileMovementDistribution::Disabled }, + { &AddElement, &MI_Element, MIS_ELEMENT, true, 1, DamageType::Fire, MFILE_FIRERUN, LS_ELEMENTL, SFX_NONE, MissileMovementDistribution::Unblockable }, + { &AddResurrectBeam, &MI_ResurrectBeam, MIS_RESURRECTBEAM, true, 1, DamageType::Physical, MFILE_RESSUR1, SFX_NONE, SFX_NONE, MissileMovementDistribution::Disabled }, + { &AddBoneSpirit, &MI_Bonespirit, MIS_BONESPIRIT, true, 1, DamageType::Magic, MFILE_SKLBALL, LS_BONESP, LS_BSIMPCT, MissileMovementDistribution::Blockable }, + { &AddWeapexp, &MI_Weapexp, MIS_WEAPEXP, true, 2, DamageType::Physical, MFILE_NONE, SFX_NONE, SFX_NONE, MissileMovementDistribution::Disabled }, + { &AddRportal, &MI_Rportal, MIS_RPORTAL, true, 2, DamageType::Physical, MFILE_RPORTAL, LS_SENTINEL, LS_ELEMENTL, MissileMovementDistribution::Disabled }, + { &AddBoom, &MI_Boom, MIS_BOOM2, true, 2, DamageType::Physical, MFILE_FIREPLAR, SFX_NONE, SFX_NONE, MissileMovementDistribution::Disabled }, + { &AddDiabApoca, nullptr, MIS_DIABAPOCA, false, 2, DamageType::Physical, MFILE_NONE, SFX_NONE, SFX_NONE, MissileMovementDistribution::Disabled }, + { &AddMana, nullptr, MIS_MANA, false, 1, DamageType::Physical, MFILE_NONE, SFX_NONE, SFX_NONE, MissileMovementDistribution::Disabled }, + { &AddMagi, nullptr, MIS_MAGI, false, 1, DamageType::Physical, MFILE_NONE, SFX_NONE, SFX_NONE, MissileMovementDistribution::Disabled }, + { &AddLightningWall, &MI_LightningWall, MIS_LIGHTWALL, true, 1, DamageType::Lightning, MFILE_LGHNING, LS_LMAG, LS_ELECIMP1, MissileMovementDistribution::Disabled }, + { &AddFirewallC, &MI_LightningWallC, MIS_LIGHTNINGWALL, false, 1, DamageType::Lightning, MFILE_LGHNING, SFX_NONE, SFX_NONE, MissileMovementDistribution::Disabled }, + { &AddNova, &MI_FireNova, MIS_IMMOLATION, true, 1, DamageType::Fire, MFILE_FIREBA, LS_FBOLT1, LS_FIRIMP2, MissileMovementDistribution::Disabled }, + { &AddSpecArrow, &MI_SpecArrow, MIS_SPECARROW, true, 0, DamageType::Physical, MFILE_ARROWS, SFX_NONE, SFX_NONE, MissileMovementDistribution::Disabled }, + { &AddFireNova, &MI_Fireball, MIS_FIRENOVA, true, 1, DamageType::Fire, MFILE_FIREBA, IS_FBALLBOW, LS_FIRIMP2, MissileMovementDistribution::Blockable }, + { &AddLightningArrow, &MI_LightningArrow, MIS_LIGHTARROW, false, 1, DamageType::Lightning, MFILE_LGHNING, IS_FBALLBOW, SFX_NONE, MissileMovementDistribution::Disabled }, + { &AddCboltArrow, &MI_Cbolt, MIS_CBOLTARROW, true, 1, DamageType::Lightning, MFILE_MINILTNG, LS_CBOLT, SFX_NONE, MissileMovementDistribution::Blockable }, + { &AddHbolt, &MI_Hbolt, MIS_HBOLTARROW, true, 1, DamageType::Physical, MFILE_HOLY, LS_HOLYBOLT, LS_ELECIMP1, MissileMovementDistribution::Blockable }, + { &AddWarp, &MI_Teleport, MIS_WARP, false, 1, DamageType::Physical, MFILE_NONE, LS_ETHEREAL, SFX_NONE, MissileMovementDistribution::Disabled }, + { &AddReflection, nullptr, MIS_REFLECT, false, 1, DamageType::Physical, MFILE_REFLECT, LS_MSHIELD, SFX_NONE, MissileMovementDistribution::Disabled }, + { &AddBerserk, nullptr, MIS_BERSERK, false, 1, DamageType::Physical, MFILE_NONE, SFX_NONE, SFX_NONE, MissileMovementDistribution::Disabled }, + { &AddRing, &MI_FireRing, MIS_FIRERING, false, 1, DamageType::Fire, MFILE_FIREWAL, SFX_NONE, SFX_NONE, MissileMovementDistribution::Disabled }, + { &AddStealPotions, nullptr, MIS_STEALPOTS, false, 1, DamageType::Physical, MFILE_NONE, SFX_NONE, SFX_NONE, MissileMovementDistribution::Disabled }, + { &AddManaTrap, nullptr, MIS_MANATRAP, false, 1, DamageType::Physical, MFILE_NONE, IS_CAST7, SFX_NONE, MissileMovementDistribution::Disabled }, + { nullptr, nullptr, MIS_LIGHTRING, false, 1, DamageType::Lightning, MFILE_LGHNING, SFX_NONE, SFX_NONE, MissileMovementDistribution::Disabled }, + { &AddSearch, &MI_Search, MIS_SEARCH, false, 1, DamageType::Physical, MFILE_NONE, SFX_NONE, SFX_NONE, MissileMovementDistribution::Disabled }, + { nullptr, nullptr, MIS_FLASHFR, false, 1, DamageType::Magic, MFILE_BLUEXFR, SFX_NONE, LS_ELECIMP1, MissileMovementDistribution::Disabled }, + { nullptr, nullptr, MIS_FLASHBK, false, 1, DamageType::Magic, MFILE_BLUEXBK, SFX_NONE, SFX_NONE, MissileMovementDistribution::Disabled }, + { nullptr, nullptr, MIS_IMMOLATION2, true, 1, DamageType::Fire, MFILE_FIREBA, LS_FBOLT1, LS_FIRIMP2, MissileMovementDistribution::Disabled }, + { &AddFireRune, &MI_Rune, MIS_RUNEFIRE, true, 1, DamageType::Physical, MFILE_RUNE, SFX_NONE, SFX_NONE, MissileMovementDistribution::Disabled }, + { &AddLightningRune, &MI_Rune, MIS_RUNELIGHT, true, 1, DamageType::Physical, MFILE_RUNE, SFX_NONE, SFX_NONE, MissileMovementDistribution::Disabled }, + { &AddGreatLightningRune, &MI_Rune, MIS_RUNENOVA, true, 1, DamageType::Physical, MFILE_RUNE, SFX_NONE, SFX_NONE, MissileMovementDistribution::Disabled }, + { &AddImmolationRune, &MI_Rune, MIS_RUNEIMMOLAT, true, 1, DamageType::Physical, MFILE_RUNE, SFX_NONE, SFX_NONE, MissileMovementDistribution::Disabled }, + { &AddStoneRune, &MI_Rune, MIS_RUNESTONE, true, 1, DamageType::Physical, MFILE_RUNE, SFX_NONE, SFX_NONE, MissileMovementDistribution::Disabled }, + { &AddRuneExplosion, &MI_HiveExplode, MIS_HIVEEXP, true, 1, DamageType::Fire, MFILE_BIGEXP, LS_NESTXPLD, LS_NESTXPLD, MissileMovementDistribution::Disabled }, + { &AddHorkSpawn, &MI_HorkSpawn, MIS_HORKDMN, false, 2, DamageType::Physical, MFILE_NONE, SFX_NONE, SFX_NONE, MissileMovementDistribution::Disabled }, + { &AddJester, nullptr, MIS_JESTER, false, 2, DamageType::Physical, MFILE_NONE, SFX_NONE, SFX_NONE, MissileMovementDistribution::Disabled }, + { &AddHiveExplosion, nullptr, MIS_HIVEEXP2, false, 2, DamageType::Physical, MFILE_NONE, SFX_NONE, SFX_NONE, MissileMovementDistribution::Disabled }, + { &AddFlare, &MI_Firebolt, MIS_LICH, true, 1, DamageType::Magic, MFILE_LICH, SFX_NONE, SFX_NONE, MissileMovementDistribution::Blockable }, + { &AddFlare, &MI_Firebolt, MIS_PSYCHORB, true, 1, DamageType::Magic, MFILE_BONEDEMON, SFX_NONE, SFX_NONE, MissileMovementDistribution::Blockable }, + { &AddFlare, &MI_Firebolt, MIS_NECROMORB, true, 1, DamageType::Magic, MFILE_NECROMORB, SFX_NONE, SFX_NONE, MissileMovementDistribution::Blockable }, + { &AddFlare, &MI_Firebolt, MIS_ARCHLICH, true, 1, DamageType::Magic, MFILE_ARCHLICH, SFX_NONE, SFX_NONE, MissileMovementDistribution::Blockable }, + { &AddFlare, &MI_Firebolt, MIS_BONEDEMON, true, 1, DamageType::Magic, MFILE_BONEDEMON, SFX_NONE, SFX_NONE, MissileMovementDistribution::Blockable }, + { &AddMisexp, &MI_Misexp, MIS_EXYEL2, true, 2, DamageType::Physical, MFILE_EXYEL2, LS_FIRIMP2, SFX_NONE, MissileMovementDistribution::Disabled }, + { &AddMisexp, &MI_Misexp, MIS_EXRED3, true, 2, DamageType::Physical, MFILE_EXRED3, LS_FIRIMP2, SFX_NONE, MissileMovementDistribution::Disabled }, + { &AddMisexp, &MI_Misexp, MIS_EXBL2, true, 2, DamageType::Physical, MFILE_EXBL2, LS_FIRIMP2, SFX_NONE, MissileMovementDistribution::Disabled }, + { &AddMisexp, &MI_Misexp, MIS_EXBL3, true, 2, DamageType::Physical, MFILE_EXBL3, LS_FIRIMP2, SFX_NONE, MissileMovementDistribution::Disabled }, + { &AddMisexp, &MI_Misexp, MIS_EXORA1, true, 2, DamageType::Physical, MFILE_EXORA1, LS_FIRIMP2, SFX_NONE, MissileMovementDistribution::Disabled }, // clang-format on }; diff --git a/Source/misdat.h b/Source/misdat.h index 87ffec6dc..504c13270 100644 --- a/Source/misdat.h +++ b/Source/misdat.h @@ -22,12 +22,12 @@ enum mienemy_type : uint8_t { TARGET_BOTH, }; -enum missile_resistance : uint8_t { - MISR_NONE, - MISR_FIRE, - MISR_LIGHTNING, - MISR_MAGIC, - MISR_ACID, +enum class DamageType : uint8_t { + Physical, + Fire, + Lightning, + Magic, + Acid, }; typedef enum missile_graphic_id : uint8_t { @@ -120,7 +120,7 @@ struct MissileData { uint8_t mName; bool mDraw; uint8_t mType; - missile_resistance mResist; + DamageType damageType; uint8_t mFileNum; _sfx_id mlSFX; _sfx_id miSFX; diff --git a/Source/missiles.cpp b/Source/missiles.cpp index 949598715..f60d22361 100644 --- a/Source/missiles.cpp +++ b/Source/missiles.cpp @@ -229,7 +229,7 @@ bool MonsterMHit(int pnum, int monsterId, int mindam, int maxdam, int dist, miss dam = mindam + GenerateRnd(maxdam - mindam + 1); } - if (MissilesData[t].mType == 0 && MissilesData[t].mResist == MISR_NONE) { + if (MissilesData[t].mType == 0 && MissilesData[t].damageType == DamageType::Physical) { dam = player._pIBonusDamMod + dam * player._pIBonusDam / 100 + dam; if (player._pClass == HeroClass::Rogue) dam += player._pDamageMod; @@ -292,15 +292,15 @@ bool Plr2PlrMHit(const Player &player, int p, int mindam, int maxdam, int dist, } int8_t resper; - switch (MissilesData[mtype].mResist) { - case MISR_FIRE: + switch (MissilesData[mtype].damageType) { + case DamageType::Fire: resper = target._pFireResist; break; - case MISR_LIGHTNING: + case DamageType::Lightning: resper = target._pLghtResist; break; - case MISR_MAGIC: - case MISR_ACID: + case DamageType::Magic: + case DamageType::Acid: resper = target._pMagResist; break; default: @@ -340,7 +340,7 @@ bool Plr2PlrMHit(const Player &player, int p, int mindam, int maxdam, int dist, dam = target._pHitPoints / 3; } else { dam = mindam + GenerateRnd(maxdam - mindam + 1); - if (MissilesData[mtype].mType == 0 && MissilesData[mtype].mResist == MISR_NONE) + if (MissilesData[mtype].mType == 0 && MissilesData[mtype].damageType == DamageType::Physical) dam += player._pIBonusDamMod + player._pDamageMod + dam * player._pIBonusDam / 100; if (!shift) dam <<= 6; @@ -997,15 +997,15 @@ bool PlayerMHit(int pnum, Monster *monster, int dist, int mind, int maxd, missil blkper = clamp(blkper, 0, 100); int8_t resper; - switch (MissilesData[mtype].mResist) { - case MISR_FIRE: + switch (MissilesData[mtype].damageType) { + case DamageType::Fire: resper = player._pFireResist; break; - case MISR_LIGHTNING: + case DamageType::Lightning: resper = player._pLghtResist; break; - case MISR_MAGIC: - case MISR_ACID: + case DamageType::Magic: + case DamageType::Acid: resper = player._pMagResist; break; default: @@ -2675,21 +2675,21 @@ void MI_LArrow(Missile &missile) mind = GenerateRnd(10) + 1 + currlevel; maxd = GenerateRnd(10) + 1 + currlevel * 2; } - missile_resistance rst = MissilesData[missile._mitype].mResist; - MissilesData[missile._mitype].mResist = MISR_NONE; + DamageType rst = MissilesData[missile._mitype].damageType; + MissilesData[missile._mitype].damageType = DamageType::Physical; MoveMissileAndCheckMissileCol(missile, mind, maxd, true, false); - MissilesData[missile._mitype].mResist = rst; + MissilesData[missile._mitype].damageType = rst; if (missile._mirange == 0) { missile._mimfnum = 0; missile._mirange = missile._miAnimLen - 1; missile.position.StopMissile(); - rst = MissilesData[missile._mitype].mResist; + rst = MissilesData[missile._mitype].damageType; int eMind; int eMaxd; missile_graphic_id eAnim; - missile_resistance eRst; + DamageType eRst; switch (missile._mitype) { case MIS_LARROW: if (!missile.IsTrap()) { @@ -2702,7 +2702,7 @@ void MI_LArrow(Missile &missile) eMaxd = GenerateRnd(10) + 1 + currlevel * 2; } eAnim = MFILE_MINILTNG; - eRst = MISR_LIGHTNING; + eRst = DamageType::Lightning; break; case MIS_FARROW: if (!missile.IsTrap()) { @@ -2715,16 +2715,16 @@ void MI_LArrow(Missile &missile) eMaxd = GenerateRnd(10) + 1 + currlevel * 2; } eAnim = MFILE_MAGBLOS; - eRst = MISR_FIRE; + eRst = DamageType::Fire; break; default: app_fatal(StrCat("wrong missile ID ", static_cast(missile._mitype))); break; } SetMissAnim(missile, eAnim); - MissilesData[missile._mitype].mResist = eRst; + MissilesData[missile._mitype].damageType = eRst; CheckMissileCol(missile, eMind, eMaxd, false, missile.position.tile, true); - MissilesData[missile._mitype].mResist = rst; + MissilesData[missile._mitype].damageType = rst; } else { if (missile.position.tile != Point { missile.var1, missile.var2 }) { missile.var1 = missile.position.tile.x; @@ -3489,12 +3489,12 @@ void MI_Weapexp(Missile &missile) // BUGFIX: damage of missile should be encoded in missile struct; player can be dead/have left the game before missile arrives. mind = player._pIFMinDam; maxd = player._pIFMaxDam; - MissilesData[missile._mitype].mResist = MISR_FIRE; + MissilesData[missile._mitype].damageType = DamageType::Fire; } else { // BUGFIX: damage of missile should be encoded in missile struct; player can be dead/have left the game before missile arrives. mind = player._pILMinDam; maxd = player._pILMaxDam; - MissilesData[missile._mitype].mResist = MISR_LIGHTNING; + MissilesData[missile._mitype].damageType = DamageType::Lightning; } CheckMissileCol(missile, mind, maxd, false, missile.position.tile, false); if (missile.var1 == 0) { diff --git a/Source/monster.cpp b/Source/monster.cpp index 8395c5c95..76fcb771a 100644 --- a/Source/monster.cpp +++ b/Source/monster.cpp @@ -4606,12 +4606,12 @@ bool Monster::isWalking() const bool Monster::isImmune(missile_id missileType) const { - missile_resistance missileElement = MissilesData[missileType].mResist; + DamageType missileElement = MissilesData[missileType].damageType; - if (((resistance & IMMUNE_MAGIC) != 0 && missileElement == MISR_MAGIC) - || ((resistance & IMMUNE_FIRE) != 0 && missileElement == MISR_FIRE) - || ((resistance & IMMUNE_LIGHTNING) != 0 && missileElement == MISR_LIGHTNING) - || ((resistance & IMMUNE_ACID) != 0 && missileElement == MISR_ACID)) + if (((resistance & IMMUNE_MAGIC) != 0 && missileElement == DamageType::Magic) + || ((resistance & IMMUNE_FIRE) != 0 && missileElement == DamageType::Fire) + || ((resistance & IMMUNE_LIGHTNING) != 0 && missileElement == DamageType::Lightning) + || ((resistance & IMMUNE_ACID) != 0 && missileElement == DamageType::Acid)) return true; if (missileType == MIS_HBOLT && type().type != MT_DIABLO && data().monsterClass != MonsterClass::Undead) return true; @@ -4620,11 +4620,11 @@ bool Monster::isImmune(missile_id missileType) const bool Monster::isResistant(missile_id missileType) const { - missile_resistance missileElement = MissilesData[missileType].mResist; + DamageType missileElement = MissilesData[missileType].damageType; - if (((resistance & RESIST_MAGIC) != 0 && missileElement == MISR_MAGIC) - || ((resistance & RESIST_FIRE) != 0 && missileElement == MISR_FIRE) - || ((resistance & RESIST_LIGHTNING) != 0 && missileElement == MISR_LIGHTNING)) + if (((resistance & RESIST_MAGIC) != 0 && missileElement == DamageType::Magic) + || ((resistance & RESIST_FIRE) != 0 && missileElement == DamageType::Fire) + || ((resistance & RESIST_LIGHTNING) != 0 && missileElement == DamageType::Lightning)) return true; if (gbIsHellfire && missileType == MIS_HBOLT && IsAnyOf(type().type, MT_DIABLO, MT_BONEDEMN)) return true;