Here you’ll find all formula as found in the game

Magic

Classic

\[\text{Damage} =\left (\text{AttackerMag} + \text{Power} \right) \times \frac{265 - \text{TargetSpr}}{4} \times \frac{\text{Power}}{256} \times \frac{[0..32] + 240}{256}\]

Demi, Percent

\[\text{Damage} = \frac{\text{AttackPower} \times \text{TargetCurrentHP}}{16}\]

Demi power = 4
Percent = 15

GF

Classic damage:

\[\text{Damage} = \left (\text{LevelMod} \times \frac{\text{Level}}{10} + \text{Power} + \text{PowerMod} \right) \times \frac{265 - \text{TargetSpr}}{8} \times \frac{\text{Power}}{256} \times \frac{\text{Boost}}{100} \times \frac{100 + \text{SummonMagBonus}}{100} \times \frac{[0..32] + 240}{256}\]

Modifiers

Monsters

If monster: Damage = Damage / 2

Elem

If elem: Damage = Damage * (900 - ElemDef) / 100

Protective magic:

If Shell: Damage = Damage / 2

Diablos

\[\text{Damage} = \frac{\text{TargetMaxHP} \times \text{Level}}{\text{PowerMod} - \text{LevelMod} + 100}\]

Diablos PowerMod = 0
Diablos LevelMod = 0

Cactuar

\[\text{Damage} = 1000 \times \left(\frac{\text{AttackPower} \times \text{GFLevel}}{1000} + 1\right)\]

Cactuar AttackPower = 90

Moomba

\[\text{Damage} = \text{TargetCurrentHP} - 1\]

Angelo recover

\[\text{DamageHeal} = \frac{\text{Power} \times \text{TargetMaxHP}}{16}\]

Item

Curative item

\[\text{DamageHeal} = 50 \times \text{Powers}\]

Magic

Curative magic

\[\text{DamageHeal} = \text{Power} \times \frac{\text{Power} + \text{AttackerMagic} }{2} \times \frac{[0..32] + 240}{256}\]

Protective magic:

If Shell: DamageHeal = Damage / 2

Blue magic

White wind

\[\text{DamageHeal} = \text{QuistisMaxHP} - \text{QuistisCurrentHP}\]

Physical

Compute crit

v1 = 255 * (RELATED_TO_CRIT_BONUS + (unsigned __int8)BCI_LUCK[208 * p_attacker_slot_id]) / 255;

Stat

LCK & SPD

magicJunctionnedValue is the junction value defined in kernel.bin for the stat.

\[\text{charaStat} = \text{CapTo255}\left( \text{charaBasedStat} + \text{charaLvl} \times \text{stat}_0 + \frac{\text{charaLvl}}{\text{stat}_1} + \text{stat}_2 - \frac{\text{charaLvl}}{\text{stat}_3} + \frac{\text{magicJunctionnedValue} \times \text{magicAmount}}{100} \right)\]

STR & VIT & MAG & SPR

strBonus is 0 if we don’t compute STR

\[\text{statResult} = \frac{\text{charaLvl}^2}{\text{stat}_3}\] \[\text{statResult} = \text{CapTo255}\left( \text{charaBasedStat} + \text{strBonus} + \frac{\text{stat}_2 + \frac{\text{charaLvl} \times \text{stat}_0}{10} + \frac{\text{charaLvl}}{\text{stat}_1} - \left( \frac{\text{getLow32bit}(\text{statResult}) - \text{getHigh32bit}(\text{statResult})}{2} \right)}{4} + \frac{\text{magicJunctionnedValue} \times \text{magicAmount}}{100} \right)\]

HP

\[\text{charaHP} = \text{charaBaseMaxHP} + \text{charaLvl} \times \text{hp}_0 - \frac{10 \times \text{charaLvl}^2}{\text{hp}_1} + \text{hp}_2 + \text{magicAmount} \times \text{magicJunctionnedValue}\]