Skip to content

Commit beacc4a

Browse files
authored
Merge pull request #2 from Cheerfulbull/Cheerfulbull-patch-2
Update battle_troop.cpp
2 parents 4975fa9 + c13d6ed commit beacc4a

File tree

1 file changed

+23
-59
lines changed

1 file changed

+23
-59
lines changed

src/fheroes2/battle/battle_troop.cpp

+23-59
Original file line numberDiff line numberDiff line change
@@ -1377,68 +1377,32 @@ uint32_t Battle::Unit::CalculateSpellDamage( const Spell & spell, uint32_t spell
13771377
{
13781378
assert( spell.isDamage() );
13791379

1380-
// TODO: use fheroes2::getSpellDamage function to remove code duplication.
13811380
uint32_t dmg = fheroes2::getSpellDamage( spell, spellPoints, applyingHero );
1382-
1383-
switch ( GetID() ) {
1384-
case Monster::IRON_GOLEM:
1385-
case Monster::STEEL_GOLEM:
1386-
switch ( spell.GetID() ) {
1387-
// 50% damage
1388-
case Spell::COLDRAY:
1389-
case Spell::COLDRING:
1390-
case Spell::FIREBALL:
1391-
case Spell::FIREBLAST:
1392-
case Spell::LIGHTNINGBOLT:
1393-
case Spell::CHAINLIGHTNING:
1394-
case Spell::ELEMENTALSTORM:
1395-
case Spell::ARMAGEDDON:
1396-
dmg /= 2;
1397-
break;
1398-
default:
1399-
break;
1400-
}
1401-
break;
1402-
1403-
case Monster::WATER_ELEMENT:
1404-
switch ( spell.GetID() ) {
1405-
// 200% damage
1406-
case Spell::FIREBALL:
1407-
case Spell::FIREBLAST:
1408-
dmg *= 2;
1409-
break;
1410-
default:
1411-
break;
1412-
}
1413-
break;
1414-
1415-
case Monster::AIR_ELEMENT:
1416-
switch ( spell.GetID() ) {
1417-
// 200% damage
1418-
case Spell::ELEMENTALSTORM:
1419-
case Spell::LIGHTNINGBOLT:
1420-
case Spell::CHAINLIGHTNING:
1421-
dmg *= 2;
1422-
break;
1423-
default:
1424-
break;
1381+
for ( const fheroes2::MonsterAbility & targetAbility : fheroes2::getMonsterData( GetID() ).battleStats.abilities ) {
1382+
if ( targetAbility.type == fheroes2::MonsterAbilityType::ELEMENTAL_SPELL_DAMAGE_REDUCTION ) {
1383+
switch ( spell.GetID() ) {
1384+
// Reduced elemental spell damage
1385+
case Spell::COLDRAY:
1386+
case Spell::COLDRING:
1387+
case Spell::FIREBALL:
1388+
case Spell::FIREBLAST:
1389+
case Spell::LIGHTNINGBOLT:
1390+
case Spell::CHAINLIGHTNING:
1391+
case Spell::ELEMENTALSTORM:
1392+
case Spell::ARMAGEDDON:
1393+
dmg -= dmg * targetAbility.percentage / 100;
1394+
break;
1395+
default:
1396+
break;
1397+
}
14251398
}
1426-
break;
1427-
1428-
case Monster::FIRE_ELEMENT:
1429-
switch ( spell.GetID() ) {
1430-
// 200% damage
1431-
case Spell::COLDRAY:
1432-
case Spell::COLDRING:
1433-
dmg *= 2;
1434-
break;
1435-
default:
1436-
break;
1399+
}
1400+
for ( const fheroes2::MonsterWeakness & targetWeakness : fheroes2::getMonsterData( GetID() ).battleStats.weaknesses ) {
1401+
if ( targetWeakness.type == fheroes2::MonsterWeaknessType::EXTRA_DAMAGE_FROM_CERTAIN_SPELL ) {
1402+
if ( spell.GetID() == (int)targetWeakness.value ) {
1403+
dmg += dmg * targetWeakness.percentage / 100;
1404+
}
14371405
}
1438-
break;
1439-
1440-
default:
1441-
break;
14421406
}
14431407

14441408
// check artifact

0 commit comments

Comments
 (0)