Browse Source

Change missile_resistance into class DamageType

pull/5656/head
Anders Jenbo 3 years ago
parent
commit
0c5fd01067
  1. 218
      Source/misdat.cpp
  2. 14
      Source/misdat.h
  3. 46
      Source/missiles.cpp
  4. 18
      Source/monster.cpp

218
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
};

14
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;

46
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<int>(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) {

18
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;

Loading…
Cancel
Save