Wiki/Combat/Damage Calculation

Damage Calculation

Every attack resolves through a pipeline: total attack power determines the weapon damage range, then an action multiplier scales it, and finally the target's defence reduces the result.

Total Attack

Total attack is the sum of three components that vary by combat style.

totalAttack = skillLevel + weaponPower + attributeBonus

Attribute Bonus by Style

StyleAttributeDamage per Point
MeleeStrength1
RangedDexterity1
MagicIntelligence1

Weapon Damage Range

Once total attack is known, the weapon damage range is derived:

damageMin = 1 + floor(totalAttack / 5)
damageMax = 5 + floor(totalAttack / 2)

The actual roll is a uniform random integer between damageMin and damageMax (inclusive).

Action Multiplier

Each combat action has a damageMultiplier that scales the rolled damage. A Light Attack uses 0.6x, Normal Attack 1.0x, Heavy Attack 1.5x, and talent abilities range from 0.5x to 2.5x. See the Combat Actions page for the full table.

scaledDamage = floor(rolledDamage × actionMultiplier)

Defence Reduction

Defence uses a diminishing-returns curve that applies identically in all combat contexts: open-world, encounter sites, expeditions, raids, and PvP. Physical attacks check defence; magic attacks check magicDefence.

reduction = defence / (defence + 100) // diminishing returns

At 100 defence, reduction is 50%. At 200, it is ~67%. The curve approaches but never reaches 100%.

Final Damage

finalDamage = max(1, floor(scaledDamage × (1 - reduction)))

Damage is always at least 1. If the attack is a critical hit, the crit multiplier is applied before defence reduction (see Critical Hits).

Constants Reference

ConstantValueDescription
MIN_DAMAGE1Minimum damage any attack can deal (after all reductions)
ENCOUNTER_TURN_COST50Turn cost to initiate a single encounter
MELEE_DAMAGE_PER_STRENGTH1Bonus melee damage per point of Strength
RANGED_DAMAGE_PER_DEXTERITY1Bonus ranged damage per point of Dexterity
MAGIC_DAMAGE_PER_INTELLIGENCE1Bonus magic damage per point of Intelligence
EVASION_TO_SPEED_DIVISOR10Evasion points per 1 speed (for initiative)