User:DoctorOkay/Projects/Battle Mechanics

From FFXI Wiki


This page is gonna be a working space for me to collect and centralize as many of the existing articles on FFXI Battle Mechanics and calculations in an effort to make a "simple" (lol) primer on mechanics for FFXI.

Pages With Formulas

  • Cure Formula
    • Final = floor(floor(floor((Base + JP + Raetic) × Cure Potency Equip) × Cure Received Equip) × Daywx)
  • Community Red Mage Guide
    • Duration Formula: ((Spell base × Saboteur) + (6s × RDM Group 2 Merit Point Level) + (3s × RDM Relic Head Group 2 Merit Point Level Augment) + RDM Enfeebling Job Points + RDM Stymie Job Points + Gear that list Seconds) × (Augments Composure Bonus) × (Duration listed on Gear) × (Duration Augments on Gear)
    • Potency Formula: floor(floor((Base Potency × Saboteur) + {dStat Modifier}) × (Enfeebling Magic Effect+ Gear))
    • Enhancing Duration Formula: (Base Duration + (6s × RDM Group 2 Merit Point Level) + (3s × RDM Relic Hands Group 2 Merit Point Level Augment) + RDM Job Points + Gear that list Seconds) × (Augments Composure Bonus) × (Duration listed on Gear + Naturalist's Roll) × (Duration Augments on Gear) × (Rune Fencer Gifts)
  • Damage Taken
    • Physical Damage Taken
      • Formula 1: Uncorrected Damage = (Monster Base Damage + Monster fSTR)×(Monster Average pDIF)
      • Formula 2: Corrected Damage = Uncorrected Damage × (100% -% Physical Damage Taken -% Damage Taken)
      • Formula 3: Shield Blocked Damage = Corrected Damage × (Base + Defense/200)Question
      • Formula 4: Corrected Damage = Uncorrected Damage × (100% -% Physical Damage Taken -% Damage Taken -% Burtgang || Epeolatry)
    • Magical Damage Taken
  • Physical Damage
    • Physical Damage = Base Damage * pDIF
      • Formula 5: Magic Damage You Take = Floor( (Magic Damage you would have Taken)×(100% -% Magic Damage Taken -% Damage Taken) )÷( 1 + MDB÷100 )
      • Formula 6: Magic Damage You Take = Floor( (Magic Damage you would have Taken)×(100% (-% Magic Damage Taken -% Damage Taken) -% Aegis Magic Damage Taken )÷( 1 + MDB÷100 ) )
    • Breath Damage Taken
      • Formula 7:Corrected Damage = (Breath Base Damage)×(1 -% Breath Damage Taken -% Damage Taken -%Augmented Magic Damage Taken)
    • Killer Effects and Circles
      • Formula 8: Final Damage = Corrected Damage × (1 - Circle Bonus) × (1 - Intimidation Rate÷2)***
  • Walz Efficiency
    • HP/TP = HP Restored ÷ TP Spent = ( (User's CHR + Target's VIT)×M + B ) ÷ ( TP Base - TP Reduction )
    • HP/Time = HP Restored ÷ Recast = ( (User's CHR + Target's VIT)×M + B ) ÷ ( Recast Base - Recast Reduction )
    • HP/Time = HP Restored ÷ Recast = ( (User's CHR + Target's VIT)×M + B ) ÷ ( (Recast Base - Recast Reduction) × 0.8 )
  • Monster TP Gain
Delay → Base TP Calculations
 Modified Delay  TP gained
  <180  50+((Delay-180)×15)÷180
  180~450  50+((Delay-180)×65)÷270
  450~480  115+((Delay-450)×15)÷30
  480~530  130+((Delay-480)×15)÷30
  >530  145+((Delay-530)×35)÷470
    • Monster TP gained per hit = floor( Base Monster TP × Inhibit TP' × dAGI × (1 - Subtle Blow÷100), .1) Note: There may actually be multiple flooring steps.
    • dAGI = Player AGI - Monster AGI
    • TP Modifier = 1-(dAGI+30)÷200
    • TP Modifier = 1 - Subtle Blow÷100 - Subtle Blow II÷100
    • TP Modifier = 1 - Inhibit TP÷100
  • Cursna
    • Doom Removal Rate = Base Rate * (1+(y/100)) Verification Needed
    • Base Rate = (10+(Total Healing Magic Skill / 30))
    • y = Total Cursna+ stat from gear
  • Enmity
    • CE gained = HP Restored × CE Modifier
    • VE gained = 6 × CE gained
  • Shield Skill
    • PercentDamageBlocked = SizeDamageReduction + (ShieldDEF / ((max(ShieldItemLevel, 99) - 99) / 10 + 2))
    • FinalDamageTaken = (IncomingBaseDamage - ShieldDefenseBonus) × (1 - PercentDamageBlocked/100) × (1 - PDT/100)
    • BlockRate = SizeBaseBlockRate + ((ShieldSkill - AttackerCombatSkill) × 0.2325)
    • AttackerSkill = ((-1 × (ActualBlockRate - SizeBaseBlockRate) ÷ 0.2325) + ShieldSkill
  • Spell Recast
    • Recast = (Initial Recast) × (1 - (Haste÷1024) + (Slow÷1024)) × Floor(Fast Cast% ÷ 2) × (Job Ability Modifier 1) × (Job Ability Modifier 2) × ...
  • Tactical Points
Delay → TP calculation
 Modified Delay  TP gained
  ≤180  61+[(Delay-180)×63÷360]
  181~540  61+[(Delay-180)×88÷360]
  541~630  149+[(Delay-540)×20÷360]
  631~720  154+[(Delay-630)×28÷360]
  721~900  161+[(Delay-720)×24÷360]
  >901  173+[(Delay-900)×28÷360]
  • Weapon Skill Damage
    • Damage = Base Damage × pDIF
    • Melee WS Base Damage = floor(( Weapon Base Damage + fSTR + WSC ) × fTP)
    • Ranged WS Base Damage = floor(( Weapon Base Damage + (Ammo Damage) + fSTR(2) + WSC ) × fTP)
    • WS Damage = WS Base Damage × pDIF
    • Base Magical WS Damage = floor(((152 + floor((WeaponLevel - 99) × 2.45) + WSC) × fTP) + dSTAT + MDMG Stat)
    • Base Magical WS Damage × (MAB / MDB) × WSD × WSD Boost JT × Weather+Day Bonus × Affinity × Weapon Skill Potency Bonus × Augmented Weapon Skill Potency Bonus × Staff × Potency Multipliers × Resist × Resistance Rank Reduction × TMDA
    • Damage = (Base Damage × pDIF) + (Base Damage × pDIF × modifiers of magic damage)
  • Hit Rate
    • Hit Rate (%) = 75 + floor( (Accuracy - Evasion)÷2 ) - 2×(dLVL)
      • dLVL = Attacked Monster's Level - Attacking Player's Level
  • Magic Damage (golden example)
    • Damage Dealt = D × MTDR × Staff × Affinity × Resist × Resistance Rank Reduction × MB × MBB × Day & Weather × MAB/MDB × TMDA × Potency Multipliers
    • D = mDMG + V + (dINT × M)
    • dINT = 134: D = mDMG + V100 + (34 × M100-199)
    • MTDR = 0.9 - 0.05T
    • MB = 1.25 + (0.1 × X)
    • MBB = 1.0 + Gear + Atma/Atmacite + AMII Merits + Trait
    • cMAB = 1 + (caster Magic Attack Bonus ÷ 100)
    • tMDB = 1 + (target Magic Defense Bonus ÷ 100)
    • MAB/MDB = cMAB ÷ tMDB
  • FSTR
fSTR
 ΔSTR range  fSTR approximation
12 or greater (ΔSTR + 4) / 4
6 to 11 (ΔSTR + 6) / 4
1 to 5 (ΔSTR + 7) / 4
-2 to 0 (ΔSTR + 8) / 4
-7 to -3 (ΔSTR + 9) / 4
-15 to -8 (ΔSTR + 10) / 4
-21 to -16 (ΔSTR + 12) / 4
-22 or less (ΔSTR + 13) / 4
fSTR2
 ΔSTR range  fSTR2 approximation
12 or greater (ΔSTR + 4) / 2
6 to 11 (ΔSTR + 6) / 2
1 to 5 (ΔSTR + 7) / 2
-2 to 0 (ΔSTR + 8) / 2
-7 to -3 (ΔSTR + 9) / 2
-15 to -8 (ΔSTR + 10) / 2
-21 to -16 (ΔSTR + 12) / 2
-22 or less (ΔSTR + 13) / 2
  • Physical Damage
    • Physical Damage = Base Damage * pDIF
  • Base Damage
    • For normal attack: Base Damage = D + (aD) + fSTR
    • For weapon skill: Base Damage = floor((D + (aD) + fSTR + WSC)* fTP)
  • pDIF
    • Ratio = Attacker's Attack/ Target's Defense
    • melee: cRatio = Ratio - (target's level - attacker's level) × 0.05
    • ranged: cRatio = Ratio - (target's level - attacker's level) × 0.025
    • If you critical hit: wRatio = (cRatio + 1)
    • If you do not critical hit: wRatio = (cRatio + 0)
wRatio UL Equation Min Max
0 ≤ wRatio < 0.5 wRatio + 0.5 0.5 < 1
0.5 ≤ wRatio < 0.7 1 1 1
0.7 ≤ wRatio < 1.2 wRatio + .3 1 < 1.5
1.2 ≤ wRatio < 1.5 (wRatio × 0.25) + wRatio 1.5 < 1.875
1.5 ≤ wRatio wRatio + 0.375 1.875 (varies)
wRatio LL Equation Min Max
0 ≤ wRatio < 0.38 0 0.5 < 1
0.38 ≤ wRatio < 1.25 (wRatio) × (1176/1024) - (448/1024) 0 < 4083/4096
1.25 ≤ wRatio < 1.51 1 1 1
1.51 ≤ wRatio < 2.44 (wRatio) × (1176/1024) - (755/1024) 0.9968359375 2.064882813
2.44 ≤ wRatio wRatio - 0.375 2.065 (varies)
dDEX Crit Rate
 0-6  +0%
 7-13  +1%
 14-19  +2%
 20-29  +3%
 30-39  +4%
 40-50  +(dDEX-35)%
    • Critical Hit Damage = (Base Damage + fSTR) * Critical pDIF * (Sum of Direct Modifiers)

The Basics (Melee)

The result of an attack is basically the answer to two questions

  1. Did the attack hit the enemy? and
  2. If so, how much damage did I do?

Naturally, the way that is figured out is very complex. Let's first set our sights on whether we even hit an enemy or not

hitRate = 75 + floor((self.accuracy - target.evasion) / 2) - 2 * (self.level - target.level)

This gives us an integer value that will be interpreted as a % chance to hit. Meaning that every time you swing you sword/axe/club/dagger/what-have-you, you'll hit hitRate% of the time.

The actual mechanic of how this works is kind of irrelevant, but I believe that each individual attack is evaluated using something like the formula above and it just flips a bit on whether the character hits or not. hitRate is more of an abstraction than reflective of source code.

Okay, so you've hit. Well done, I'm proud of you. How much damage did you do? Now... that's where things get a little bit messy.

Starting simply, here is the formula for physical damage: physicalDamage = baseDamage * pDIF

I wish I could say that baseDamage was the easy one to figure out, but sadly, no. It is calculated via a formula: baseDamage = D + (aD) + fSTR

Let's go term by term here. D is the listed damage for the weapon you're currently swinging. Easy-peasy. aD is the "ammo damage" if you are using a ranged weapon. Since we are meleeing here, we can ignore it. Now on to fSTR...

fSTR is well.... complicated? The first step in calculating fSTR is easy enough. That is simply: dSTR = self.STR - target.VIT. So then, depending on the value of dSTR, there are various calculations that can be made. Let's go to the table.

There are also upper and lower bounds to dSTR to consider.