Damage Dealt
In the previous section, we covered numerous functions. From here on, we will incorporate those functions into equations. Since these formulas are long, we will break them down into more digestible chunks.
Of importance is that our testing seems accurate at normal to high damage values, but we have seen errors when we use almost no Attack Power + Low Potency DoT + Small amount of DET. This will not affect standard gameplay, but it is important for testing purposes.
Level Correction
When your level is lower than the target’s level, you deal 2.5% less damage per difference in level. If there is a cap to this reduction, it has not shown within 30 levels. There is also an accuracy penalty of unknown value when below the target’s level.
Direct Damage (D)
D1 = ⌊ Potency × f(ATK) × f(DET) ⌋ /100 ⌋ /1000 ⌋
D2 = ⌊ D1 × f(TNC) ⌋ /1000 ⌋ × f(WD) ⌋ /100 ⌋ × Trait ⌋ /100 ⌋
D3 = ⌊ D2 × CRIT? ⌋ /1000 ⌋ × DH? ⌋ /100 ⌋
D = ⌊ D3 × rand[95,105] ⌋ /100 ⌋ × buff_1 ⌋ × buff_2 ⌋
There is a lot to unpack here! The first thing to notice is that this string of formulas could just be combined into one formula, but it is easier to read when partitioned as such.
Most of this formula is straightforward, but there are a few question mark notations that have not been explained. These question marks indicate that the value of that variable changes based on a random event.
CRIT?: If you do not critical hit, CRIT? = 1000. If you critical hit, CRIT? = f(CRIT).
DH?: If you do not direct hit, DH? = 100. If you direct hit, DH? = 125
rand[95,105]: A random value between, and including, 95 to 105.
Since buffs are multiplied against each other, it is technically better to stack them when possible. For example, if you have two 30% damage increasing buffs (1.3 × 1.3), you will increase your damage by 1.69 * instead of 1.6 *.
Damage-Over-Time
Physical
D1 = ⌊ Potency × f(ATK) × f(DET) ⌋ /100 ⌋ /1000 ⌋
D2 = ⌊ D1 × f(TNC) ⌋ /1000 ⌋ × f(SPD) ⌋ /1000 ⌋ × f(WD) ⌋ /100 ⌋ × Trait ⌋ /100 ⌋ + 1
D3 = ⌊ D2 × rand[95,105] ⌋ /100 ⌋
D = ⌊ D3 × CRIT? ⌋ /1000 ⌋ × DH? ⌋ /100 ⌋ × buff_1 ⌋ × buff_2 ⌋
Magical
D1 = ⌊ Potency × f(WD) ⌋ /100 ⌋ × f(ATK) ⌋ /100 ⌋ × f(SPD) ⌋ /1000 ⌋
D2 = ⌊ D1 × f(DET) ⌋ /1000 ⌋ × f(TNC) ⌋ /1000 ⌋ × Trait ⌋ /100 ⌋ + 1
D3 = ⌊ D2 × rand[95,105] ⌋ /100 ⌋
D = ⌊ D3 × CRIT? ⌋ /1000 ⌋ × DH? ⌋ /100 ⌋ × buff_1 ⌋ × buff_2 ⌋
Compared to direct damage, damage-over-time has three differences:
- It includes f(SPD) in its damage calculations. The placement of f(SPD) is unconfirmed since DoT order of operations has been troublesome to pinpoint.
- Its randomisation component applies before critical hit and direct hit bonuses1.
- There is a +1 to damage before randomisation, critical hit, direct hit, or buffs occur.
DoT order of operation is difficult to pin down. In 4.0, Shadowflare and Bio/Miasma generated different damage values despite all of these having the same potency. Between jobs, the formula seems to change as well. This is our best interpretation of 5.0 DoT samples.
1 This was deduced by recording a direct damage parse (~80k samples) and listing each unique damage value. For direct damage, the number of unique entries for critical hit and direct hit exceeded the number of normal hit entries. For damage-over-time, the number of unique entries were equal across critical hit, direct hit, and normal hits.
Auto-Attacks
D1 = ⌊ Potency × f(ATK) × f(DET) ⌋ /100 ⌋ /1000 ⌋
D2 = ⌊ D1 × f(TNC) ⌋ /1000 ⌋ × f(SPD) ⌋ /1000 ⌋× f(AUTO) ⌋ /100 ⌋ × Trait ⌋ /100 ⌋
D3 = ⌊ D2 × CRIT? ⌋ /1000 ⌋ × DH? ⌋ /100 ⌋
D = ⌊ D3 × rand[95,105] ⌋ /100 ⌋ × buff_1 ⌋ × buff_2 ⌋
Auto-attacks essentially take the form of Direct Damage with two exceptions:
- Like DoT damage, they incorporate f(SPD)
- They replace f(WD) with f(AUTO).
The potency of melee “Attack” autos is 110 potency. The potency of Physical Ranged “Shot” autos is 100 potency.
Dancers use melee “Attack” autos instead of Physical Ranged “Shot” autos.
Tests showing this were done by LePaw Van Effectrix and Fürst
Damage Taken
The primary difference between physical and magical damage taken is the substitution of f(DEF) for f(MDEF) and elemental resistance (Not shown). Even though Square Enix hid elemental resistance from the character window and removed it from equipment, it is still a relevant stat.
Encounters, such as Ultimate Coil and Ultima, use elemental resistance to punish players when they incorrectly perform a mechanic. The actual order of operations is untested, but the general idea is still relevant.
Physical Damage Taken
PDT1 = ⌊ Raw Damage × ( 100 - f(DEF) ) ⌋ /100 ⌋
PDT2 = ⌊ PDT1 × ( 2000 - f(TNC) ) ⌋ /1000 ⌋
PDT3 = ⌊ PDT2 × ( 100 - f(BLK) ) ⌋ /100 ⌋
PDT = ⌊ PDT3 × rand[95,105] ⌋ /100 ⌋ × ( 1 - buff_1 ) ⌋ × ( 1 - buff_2 ) ⌋
Magical Damage Taken
MDT1 = ⌊ Raw Damage × ( 100 - f(MDEF) ) ⌋ /100 ⌋
MDT2 = ⌊ MDT1 × ( 2000 - f(TNC) ) ⌋ /1000 ⌋
MDT3 = ⌊ MDT2 × ( 100 - f(BLK) ) ⌋ /100 ⌋
MDT = ⌊ MDT3 × rand[95,105] ⌋ /100 ⌋ × ( 1 - buff_1 ) ⌋ × ( 1 - buff_2 ) ⌋
Healing
Direct Heals
H1 = ⌊ Potency × f(HMP) × f(DET) ⌋ /100 ⌋ /1000 ⌋
H2 = ⌊ H1 × f(TNC) ⌋ /1000 ⌋ × f(WD) ⌋ /100 ⌋ × Trait ⌋ /100 ⌋
H3 = ⌊ H2 × CRIT? ⌋ /1000 ⌋
H = ⌊ H3 × rand[97,103] ⌋ /100 ⌋ × buff_1 ⌋ × buff_2 ⌋
The Direct Heals formula looks similar to Direct Damage with f(HMP) substituting for f(ATK) and DH? removed. Furthermore, randomisation range is reduced from +/-5% to +/-3%.
Tenacity only affects outgoing heals from tanks; it does not affect incoming heals on tanks.
Healing-Over-Time
H1 = ⌊ Potency × f(HMP) × f(DET) ⌋ /100 ⌋ /1000 ⌋
H2 = ⌊ H1 × f(TNC) ⌋ /1000 ⌋ × f(SPD) ⌋ /1000 ⌋× f(WD) ⌋ /100 ⌋ × Trait ⌋ /100 ⌋
H3 = ⌊ H2 × rand[97,103] ⌋ /100 ⌋
H = ⌊ H3 × CRIT? ⌋ /1000 ⌋ × buff_1 ⌋ × buff_2 ⌋
Healing-Over-Time’s order of operation was tested more extensively than Direct Heals.