The damage calculation formula[edit]
Table 1: Damage calculation variables
Description
I1 = 0.05 × (
Attack -
Defense) (if A ≥ D)
I2 = 0.10, 0.25, 0.50 for basic, advanced, expert
Archery
= 0.10, 0.20, 0.30 for basic, advanced, expert
Offense
I3 = 0.05 × I2 × hero level for Archery/Offense
specialty
= 0.03 × (hero
÷ creature level) for
Adela's
bless
I4 = 1.00 for
lucky strikes
I5 = 1.00 for
Death Blow,
Ballista double damage
= 1.00 if
Elemental attacks opposite
Elemental type
= 0.50 for
hate
= 0.05 ×
hexes travelled for
Cavaliers,
Champions
R1 = 0.025 × (
Defense -
Attack) (if D ≥ A)
R2 = 0.05, 0.10, 0.15 for basic, advanced, expert
Armorer
R3 = 0.05 × R2 × hero level for Armorer
specialty
R4 = 0.15 for
Shield, 0.30 at advanced, expert level
= 0.25 for
Air Shield, 0.50 at advanced, expert level
= 0.50 for shooter with (basic)
Forgetfulness
R5 = 0.50 if attacker has
range or
melee penalty
R6 = 0.50 if target is behind a wall (
obstacle penalty)
R7 = 0.50 for retaliation after being
Blinded
= 0.75 for retaliation after advanced
Blind
R8 = 0.50 for Psychic Elemental vs.
mind spell immunity
= 0.50 for Magic Elemental vs. lvl 1-5
spell immunity
= 0.50 if target is
petrified
= 0.75 for retaliation after being
paralyzed
Mathematical formula for calculating the final damage (DMGf) is:
DMGf = DMGb × (1 + I1 + I2+ I3 + I4 + I5) × (1 - R1)×(1 - R2 - R3)×(1 - R4)×(1 - R5)×(1 - R6)×(1 - R7)×(1 - R8)
Primary determinant for the final damage is the base damage (DMGb), which is affected by the number of attacking creatures and their damage range. All other variables are basically modifiers of the base damage. Variables are denoted as I if they (i)ncrease damage and as R if they (r)educe it. I1 and R1 are mutually exclusive, but all other variables may simultaneously affect the final damage (DMGf). A brief summary of the variables have been given in the table on the right. To summarize the above formula, the content in the first parentheses increase the base damage by multiplying it with a modifier varying from 1.00 to 8.00, and the content in the second parentheses reduces the damage with a modifier varying from ~0.01 to 1.00.
Attack-Defense difference – variables I1 and R1[edit]
The Attack-Defense difference (ADD), denoted by I1 and R1 in the formula, is typically the main modifier of the base damage. It is calculated as the difference between the attacker's attack value and the defender's defense value. These are determined by adding up the attack skill of the attacking hero and of the attacking creature type, and by adding up defense skill of the defending hero and defending creature type. Spells and creature abilities that affect attack or defense values, such as
Bloodlust or
disease, are also taken into account in this part of the formula, as are any bonuses from
native terrain or hero's
creature specialties.
If the attacking creature's total attack value is higher than the defending creature's total defense value (i.e., the difference is positive), then the attacking creature receives a 5% bonus to its base damage for every point the attack value is higher. If the difference is negative, then the attacking creature receives a 2.5% penalty to its total damage for every point the attack value is lower. A positive ADD therefore increases damage, meaning that the variable I1 in the formula is positive whereas R1 is 0. Conversely, a negative ADD decreases damage, meaning that R1 is positive whereas I1 is 0. An Attack-Defense difference of 0 does not modify base damage.
The ADD can modify base damage only up to +300% (400% damage dealt) if ADD is postivie, and up to -70% (30% damage dealt) if ADD is negative. These limits are reached by a positive ADD of +60 and a negative ADD of -28. This means that a high attack skill can grant no more than +300% bonus damage, whereas a high defense skill can grant no more than a -70% penalty. Thus, the Attack-Defense difference can modify a base damage of 100 to no more than 400, and to no less than 30.
Secondary skill factors – variables I2 and I3[edit]
Variable I2 represents
secondary skill modifier of either
Archery or
Offense depending on the attack type. Creatures able to
attack from the distance gain bonus from the Archery secondary skill when using their ability, and if a creature engages into
melee combat, it gains bonus to its damage from Offense secondary skill. For ranged attacks, Archery secondary skill may give 0, 0.10, 0.25 or 0.50 for I2 depending on what level the skill is (if any). Similarly, Offense may give 0, 0.10, 0.20 or 0.30 to melee attacks. Because creatures cannot peform ranged and melee attacks at the same time, Archery and Offense modifiers cannot affect damage simultaneously.
Variable R3 is related to Archery and Offense modifiers through heroes who specilize in these skills. There are three heroes specializing in Archery or Offense; Orrin specializes in Archery, while Gundula and Crag Hack specialize Offense. They receive additional bonus from Archery or Offense secondary skill, as calculated with the following formula:
I3 = 0.05 × hero level × I2
As can be seen from the formula, the specialty bonus requires that the hero has the appropriate secondary skill, otherwise I2 becomes 0, which leads I3</code> to become 0 as well. In other words, Orrin does not receive his specialty bonus if he does not have Archery secondary skill; same applies to Gundula and Crag Hack with Offense. By default these heroes start with the skill they specialize in, but in custom maps the map-maker may change the starting skills.
A special case of the variable I3 is
Adela and her
Bless specialty. Adela's Bless maximizes base damage as usual, but also deals extra damage according to the following formula:
I3 = 0.03 × hero level ÷ creature level
Because of the division, Adela's Bless bonus is greater for low-tier creatures. Her Bless grants +3% damage per her level to 1st level creatures, whereas it grants +0.6% per her level for 5th level creatures.
Luck as combat modifier – variable I4[edit]
The
luck variable may be either 0 or 1.00, depending on whether or not the attacking creatures gets "a lucky strike". This is determined by the combat variable luck, which may be 0 (neutral), +1 (positive), +2 (good) or +3 (excellent). These values determine how often lucky strikes occur. These probabilities are, respectively, 0/24 (0%), 1/24 (4.17%), 1/12 (8.33%) and 1/8 (12.5%). Luck may be affected by artifacts, adventure map locations, spells and the
Luck secondary skill.
Creature abilities – variable I5[edit]
The final variable capable of increasing total damage is I5, which denotes creature specialties from
Cavaliers and Champions,
Dread Knights,
Ballistas,
elementals, and creatures that
hate each other. Dread Knights may deliver
Death Blows, which gives variable I5 a value of 1.00, effectively doubling base damage (though not necessarily total damage). The I5 variable is also 1.00 for a Ballista whose shots deal double (base) damage. Additionally, there are a few creatures who
hate each other, which gives I5 a value of 0.50 when they attack each other. This is true for
Angels and
Devils,
Titans and
Black Dragons, and
Genies and
Efreeti. Although
Fire Elementals and
Water Elementals, as well as
Air Elementals and
Earth Elementals do not hate each other, they also do double base damage against each other (i.e., I5 = 1.00). Finally, the jousting specialty of Cavaliers and Champions lets them deal 5% extra damage for every hex they travel during the combat turn in which they attack their target:
I5 = 0.05 × squares travelled
Defense variables[edit]
Secondary skill factors – variables R2 and R3[edit]
Similarly to the variables I2 and I3 variables R2 and R3 denote how
Armorer and specializing in the skill affects the value of final damage. The reduction due to Armorer is not dependable on the attack type, but is the same for both ranged and melee damage. R2 can receive values 0, 0.05, 0.10 or 0.15, respectively indicating that a hero does not posses the skill, has it on basic, advanced or expert level. The three heroes with an Armorer specialty -
Mephala,
Neela and
Tazar - increase the effectiveness of Armorer secondary skill by 5% for every level. Thus, as can be seen from the following formula, they double the effectiveness of the Armorer skill when they reach level 20:
R3 = 0.05 × Hero level × R2
Armorer has two unexpected side effects. First, heroes with Armorer take extra damage from
arrow towers. The damage reduction is reversed, as if the sign within the parenthesis would be plus instead of minus. Second, damage is reduced by 1 if creatures from a hero with Armorer take an amount of damage that is exactly an integer value. Thus, if 100
Peasants attack a stack of Peasants commanded by a hero with basic Armorer (and the ADD is 0), damage is not 100 × 1 ×(1 - 0.05) = 95, but 94. If the attack had instead been performed by 99 Peasants, the damage would be 99 × 1 ×(1 - 0.05) = 94.05, which is not an integer value and therefore rounded off in the usual way, that is, to 94.
Magic shields - Variable R4[edit]
There are many spells that modify damage, but most do so by increasing or decreasing the attack and defense skills of allied or enemy troops.
Stone Skin, for example, increases an allied unit's defense skill, and therefore modifies damage by affecting variable R1. The only spells that modify damage directly are
Shield,
Air Shield, and
Forgetfulness. Shield reduces all
melee damage done to the hero's troops by 15% (R4 = 0.15), or even by 30% when cast with advanced or expert proficiency.
Air shield reduces all
ranged damage done to the hero's troops by 25% (R4 = 0.25), or by 50% when cast with advanced or expert proficiency. Similarly to Armorer and arrow towers, also Air Shield actually increases the damage from arrow towers instead if decreasing it.
Range and Melee penalty - variable R5[edit]
Ranged units do only 50% damage (R5 = 0.50) to targets that are situated at a distance of ten or more
hexes on the combat field. This range penalty is negated by
Sharpshooters and by heroes carrying the
Golden Bow or
Bow of the Sharpshooter. When a target occupies two hexes, it is possible for a range penalty to apply to the second hex, but not to the first hex the creature is standing on.
When a hex adjacent to a ranged unit is occupied by an enemy unit, the ranged unit is unable to shoot (i.e., blocked). It has to resort to melee attacks. This typically reduces its damage by 50% (R5 = 0.50). However,
Beholders,
Evil Eyes,
Medusas,
Medusa Queens,
Magi,
Arch Magi,
Zealots,
Enchanters and
Titans are the only ranged units that do not suffer from this
melee penalty.
Obstacle Penalty - variable R6[edit]
Ranged units that during a siege attack a target behind the wall receive an
obstacle penalty if the wall protecing the target is not destroyed. As a result, their damage is reduced by 50% (R6 = 0.50). This damage is halved once again if a range penalty applies. The obstacle penalty is negated by
Arch Magi and
Sharpshooters, and by heroes carrying the
Golden Bow or
Bow of the Sharpshooter.
Mind spells - variable R7[edit]
The spell
Blind is deactivated when a blinded creature stack is attacked. Any retaliation against this attack will not be at full strength. It will be at only 50% strength (R7 = 0.50) when Blind is cast with basic or no proficiency, and at 25% (R7 = 0.25) when cast with advanced proficiency. An attack that deactivates expert Blind cannot be retaliated against, but the targeted creature stack does retain its ability to retaliate against another attack in that same combat round.
Unicorns and
War Unicorns cast Blind with basic proficiency, unless the battle takes place on
Magic Plains.
Additionally, when
Forgetfulness cast with basic or no proficiency, it causes half of an enemy creature stack to forget to use its ranged attack, effectively halving its ranged damage (R7 = 0.50).
Creature Specialties - variable R8[edit]
Damage may also be reduced by some special abilities from creatures:
A special case of damage calculation concerns the spell and creature ability
Fire Shield.
Efreet Sultans and any creatures that have Fire Shield cast on them counter-inflict damage from
meleeattacks. This is calculated as follows:
Fire Shield damage = FS × DMGb × (1 + I1 + I2 + I3 + I4 + I5)
FS is a percentage that equals 0.20 for Efreet Sultans and (basic) Fire Shield, 0.25 for advanced Fire Shield, and 0.30 for expert Fire Shield.
Example[edit]
On
lava terrain, one hundred
Archangels that benefit from basic
Bless cast by a level 14
Adela with expert
Offense and an Attack Skill of 8 deliver a
lucky strike against a stack of
petrified Arch Devilsthat adopted a defensive stance right after a level 20
Tazar with advanced
Armorer and 14 Defense casted expert
Shield and expert
Stone Skin at the beginning of the present combat round. How much damage do the Archangels inflict?
First, base damage (DMGb) is calculated. Because Bless has been cast with basic (rather than advanced or expert) proficiency and Archangels always deal a fixed amount of damage, base damage is equal to 100 × 50 = 5000.
This base damage is modified by several I and R variables. Let’s calculate I1 and R1 first. The Archangels have a base Attack Skill of 30, to which +8 Attack from Adela is added, for a total of 38. The Arch Devils have a base Defense Skill of 28, to which +14 Defense from Tazar is added, +6 due to Stone Skin and +1 due to
Native Terrain, for a total of 49. Because the Arch Devils adopted a defensive stance only after Stone Skin was cast, they receive a 20% Defense bonus over a Defense Skill of 49 (rather than 43), meaning their defense is 1.2 × 49 = 58.8, which is rounded down to 58. This is 58 - 38 points higher than the Attack Skill of the Archangels, meaning that I1 = 0 and R1 = 20 × 0.025 = 0.5.
Because Adela has learned expert Offense, I2 = 0.30.
Adela’s Bless specialty at Hero level 14 means that I3 = 0.03 × 14 / 7 = 0.06.
Because the Archangels deliver a lucky strike, I4 = 1.00
Archangels hate Arch Devils, so I5 = 0.50.
Because Tazar has learned advanced Armorer, R2 = 0.10.
Tazar’s Armorer specialty at Hero level 20 means that R3 = 0.05 × 20 × 0.10 = 0.10.
Tazar has cast expert Shield, meaning that R4 = 0.30.
Because the Arch Devils are petrified, R5 = 0.50
Substituting these values in the damage formula above shows that total damage is equal to 100 × 50 × (1 + 0.30 + 0.06 + 1.00 + 0.50) × (1 - 0.50) × (1 - 0.10 - 0.10) × (1 - 0.30) × (1 - 0.50) = 2002.
However, because this damage is exactly 2002 (i.e., an integer value) and Tazar has learned Armorer, damage is reduced by one additional damage point, for a total of 2001.