Elemental weakness
An attack's element, matched against what the target is weak to, resists, or absorbs, changes the damage it deals.
On this page
An elemental weakness changes an attack’s damage when its element matches one the target is weak to. Final Fantasy scales a spell’s power by 1.5 for a weakness and halves it for a resistance1; Final Fantasy II adds 20 to a weapon’s attack instead2. In Final Fantasy III the element multiplies the damage3, Final Fantasy IV adds a 4× tier and immunity4, and Final Fantasy VI lets an absorbed element heal5.
- Flat bonusFinal Fantasy II (1988). A weapon the target is weak to hits as if it were 20 points stronger.2
- Scaled powerFinal Fantasy (1987). Spells hit a weakness harder and a resistance softer; elemental and slaying weapons get no bonus at all.1,6,7
- Damage multiplierFinal Fantasy III (1990). An attack of an element the target is weak to deals double damage.3Final Fantasy IV (1991). A strong weakness quadruples the damage, and some enemies are immune to an element.8,4
- Multiplier with absorbFinal Fantasy VI (1994). Absorb heals, then nullify, halve, and weak doubles.5
Games
| Game | Year | How | Note |
|---|---|---|---|
| Final Fantasy II | 1988 | Flat bonus | a weapon the target is weak to hits as if it were 20 points stronger |
| Final Fantasy | 1987 | Scaled power | spells hit a weakness harder and a resistance softer; elemental and slaying weapons get no bonus at all |
| Final Fantasy III | 1990 | Damage multiplier | an attack of an element the target is weak to deals double damage |
| Final Fantasy IV | 1991 | Damage multiplier | a strong weakness quadruples the damage, and some enemies are immune to an element |
| Final Fantasy VI | 1994 | Multiplier with absorb | absorb heals, then nullify, halve, and weak doubles |
Every claim about this mechanic, by game (8)
References
- ^ abA resisted element halves a damage spell's power and drops the 148 from its doubling chance; a weakness multiplies the power by 1.5 and adds 40 to the chance.CodeDisch, FF1 disassembly
How we know
8289 AND btlmag_defender_elemresist ; see if the defender resists this element ⋮ 8291 JSR BtlMag_ZeroHitChance ; ... zero the hit/crit chance 8292 LSR math_basedamage+1 ; and halve the damage ⋮ 8296 AND btlmag_defender_elemweakness ; see if they are weak to the element ⋮ 8300 JSR MathBuf_Add ; crit bonus of +40 ⋮ 8302 ; damage *= 1.5
Final Fantasy Disassembly/bank_0C.asm lines 8288–8313 at cbb87d3 · upstream ↗ Checked against the evidence by its author, an AI model, 2026-10-20.
Checked by a second AI model, 2026-10-21.
- ^ abWhen the weapon's type bonus matches the target's type, or the weapon's element matches one of the target's weak elements, the attack power gains 20 before the damage is rolled.Codeeverything8215, FF2 disassembly
How we know
163320C/B086: B1 9F LDA ($9F),Y ; main hand attack power ⋮ 163370C/B090: B1 9F LDA ($9F),Y ; main hand type bonus 163380C/B092: A0 15 LDY #$15 163390C/B094: 31 A1 AND ($A1),Y ; target type 163400C/B096: D0 0A BNE $B0A2 163410C/B098: A0 1B LDY #$1B 163420C/B09A: B1 9F LDA ($9F),Y ; main hand element 163430C/B09C: A0 16 LDY #$16 163440C/B09E: 31 A1 AND ($A1),Y ; target weak elements 163450C/B0A0: F0 0D BEQ $B0AF 163460C/B0A2: 18 CLC 163470C/B0A3: A5 44 LDA $44 ⋮
ff2j.asm lines 16331–16360 at 8d26190 · upstream ↗ Checked against the evidence by its author, an AI model, 2026-10-21.
Checked by a second AI model, 2026-10-21.
- ^ abA physical attack whose element is one of the target's weak elements gets multiplier code 4; one in the target's byte the disassembly calls absorbed elements gets 1, as does any attack when that byte is exactly 2; otherwise 2. The damage routine halves the code, so a weakness doubles the damage and the other byte halves it.Codeeverything8215, FF3 disassembly
How we know
821530/9FF1: A0 12 LDY #$12 821630/9FF3: B1 70 LDA ($70),Y ; target's weak elements 821730/9FF5: 2D 40 74 AND $7440 821830/9FF8: F0 04 BEQ $9FFE ; branch if not weak 821930/9FFA: A9 04 LDA #$04 ; 4x multiplier 822030/9FFC: D0 12 BNE $A010 822130/9FFE: AD 2A 74 LDA $742A ; absorbed elements 822231/A001: C9 02 CMP #$02 822331/A003: F0 05 BEQ $A00A 822431/A005: 2D 40 74 AND $7440 822531/A008: F0 04 BEQ $A00E 822631/A00A: A9 01 LDA #$01 ; 1x multiplier ⋮
ff3j.asm lines 8215–8229 at 1acef81 · upstream ↗ 11979; $27: damage multiplier (gets divided by 2)ff3j.asm line 11979 at 1acef81 · upstream ↗ 1199831/BB5C: A5 27 LDA $27 ; attack multiplier 1199931/BB5E: 4A LSR 1200031/BB5F: D0 0F BNE $BB70 1200131/BB61: 46 19 LSR $19 ; divide by 2 1200231/BB63: 66 18 ROR $18 ⋮ 1200931/BB70: 85 1A STA $1A ; apply multiplier 1201031/BB72: 20 F5 FC JSR $FCF5 ; multiply (16-bit)
ff3j.asm lines 11998–12010 at 1acef81 · upstream ↗ Checked against the evidence by its author, an AI model, 2026-10-25.
Checked by a second AI model, 2026-10-21.
Checked by a second AI model, 2026-10-25.
- ^ abFinal Fantasy III's physical attack has two elemental outcomes besides normal, double for a weakness and half for the target's other element byte; Final Fantasy IV adds very weak (4×) and immune (0) to weak (2×) and strong (½).Codeeverything8215, FF3 disassembly · everything8215, FF4 disassembly
How we know
821630/9FF3: B1 70 LDA ($70),Y ; target's weak elements ⋮ 821930/9FFA: A9 04 LDA #$04 ; 4x multiplier ⋮ 822130/9FFE: AD 2A 74 LDA $742A ; absorbed elements ⋮ 822631/A00A: A9 01 LDA #$01 ; 1x multiplier ⋮ 822831/A00E: A9 02 LDA #$02 ; 2x multiplier
ff3j.asm lines 8216–8228 at 1acef81 · upstream ↗ 227 beq @c65a ; branch if not very weak 228 lda #$08 ; 4x elemental damage multiplier ⋮ 234 lda #$04 ; 2x elemental damage multiplier ⋮ 240 lda #$00 ; 0x elemental damage multiplier ⋮ 246 lda #$01 ; 1/2x elemental damage multiplier
battle/fight.asm lines 222–247 at a360e2e · upstream ↗ Checked against the evidence by its author, an AI model, 2026-10-21.
Checked by a second AI model, 2026-10-21.
- ^ abA damage element that the target absorbs turns the damage into healing; one it nullifies makes the damage 0; one it halves halves it; one it is weak to doubles it, unless the damage is already 32,768 or more. The checks run in that order and the first match applies.Codeeverything8215, FF6 disassembly
How we know
40@0bd3: lda $11a1 41 beq @0c1e ⋮ 46 lda near wTargetProp2::ElemAbsorb,y 47 bit $11a1 48 beq @0bf2 49 lda $f2 50 eor #$01 51 sta $f2 52 bra @0c1e 53@0bf2: lda near wTargetProp2::ElemNull,y 54 bit $11a1 55 beq @0c00 ⋮
src/battle/calc_dmg.asm lines 40–72 at 8130132 · upstream ↗ 125@0c76: phy 126 php 127 rol 128 eor $f2 129 lsr 130 bcc @0c82 ; branch if damage taken
src/battle/calc_dmg.asm lines 125–130 at 8130132 · upstream ↗ Checked against the evidence by its author, an AI model, 2026-10-21.
Checked by a second AI model, 2026-10-21.
- ^A physical attack gains 40 hit chance and 4 base damage when its category or element matches the defender's, but neither side of a battle can trigger it: a character's attack reads the character's own category and weakness bytes instead of the weapon's, and a monster's attack is matched against a character's, and all four bytes are always 0.CodeDisch, FF1 disassembly
How we know
4334 : LDA btl_attacker_category ; see if attacker category matches defender category 4335 AND btl_defender_category ⋮ 4338 LDA btl_attacker_element ; see if attacker element matches defender elemental weakness 4339 AND btl_defender_elemweakness ⋮ 4345 LDA #MATHBUF_HITCHANCE ; +40 bonus to hit chance ⋮ 4354 LDA math_basedamage ; and +4 bonus to base damage
Final Fantasy Disassembly/bank_0C.asm lines 4334–4357 at cbb87d3 · upstream ↗ 3998 LDY #btlch_category ; BUGGED - this is pulling a player's category (always 0). It should be ⋮ 4002 LDY #btlch_elemweak ; BUGGED - uses player elemental weakness as attack element. This is always 0
Final Fantasy Disassembly/bank_0C.asm lines 3998–4004 at cbb87d3 · upstream ↗ 4167 LDY #btlch_category ; IB: assigned category. Always zero? Players don't have categories. ⋮ 4171 LDY #btlch_elemweak ; IB: elemental weakness. (Always zero?)
Final Fantasy Disassembly/bank_0C.asm lines 4166–4172 at cbb87d3 · upstream ↗ 5668 ; Players start with no elemental weakness or assigned category 5669 LDA #$00 5670 LDY #btlch_category 5671 STA (btl_ib_charstat_ptr), Y 5672 LDY #btlch_elemweak 5673 STA (btl_ib_charstat_ptr), Y
Final Fantasy Disassembly/bank_0C.asm lines 5668–5673 at cbb87d3 · upstream ↗ Checked against the evidence by its author, an AI model, 2026-10-20.
Checked by a second AI model, 2026-10-21.
- ^Spells that change an enemy's elemental resistance or weakness, such as XFER, have no effect on enemies; the change is never saved, and attacks read those bytes from the enemy's data in ROM.CodeDisch, FF1 disassembly
How we know
7976;; This routine does not save 'btlmag_defender_elemresist' anywhere, and therefore 7977;; spells which change enemy resistence (like XFER, AFIR, etc) have no effect when cast 7978;; on enemies. ⋮ 7982BtlMag_SaveEnemyDefenderStats: ⋮ 7986 LDA btlmag_defender_hp ; update their HP ⋮ 7988 STA (btl_entityptr_ibram), Y ⋮ 7990 INY 7991 STA (btl_entityptr_ibram), Y ⋮ 7994 LDA btlmag_defender_absorb 7995 STA (btl_entityptr_ibram), Y ⋮ 7997 LDA btlmag_defender_numhitsmult ; their hit multiplier ⋮ 7999 STA (btl_entityptr_ibram), Y ⋮
Final Fantasy Disassembly/bank_0C.asm lines 7975–8017 at cbb87d3 · upstream ↗ 7898 INY ; Y = ENROMSTAT_ELEMWEAK 7899 LDA (btl_entityptr_obrom), Y ; elemental weakness from ROM 7900 STA btlmag_defender_elemweakness 7901 INY ; Y = ENROMSTAT_ELEMRESIST 7902 LDA (btl_entityptr_obrom), Y ; elemental resistance from ROM 7903 STA btlmag_defender_elemresist ; BUGGED - loaded from ROM instead of RAM. Contributes to XFER bug
Final Fantasy Disassembly/bank_0C.asm lines 7898–7903 at cbb87d3 · upstream ↗ 4044 LDY #ENROMSTAT_ELEMWEAK ; elemental weakness from ROM 4045 LDA ($86), Y ; BUGGED - it should be taking this from enemy RAM stats, not from ROM stats
Final Fantasy Disassembly/bank_0C.asm lines 4044–4046 at cbb87d3 · upstream ↗ Checked against the evidence by its author, an AI model, 2026-10-25.
Checked by a second AI model, 2026-10-21.
Checked by a second AI model, 2026-10-25.
- ^A physical attack's element is tested against the target's very weak, weak, immune, and strong elements in that order, and the first match sets a damage multiplier of 4×, 2×, 0, or ½.Codeeverything8215, FF4 disassembly
How we know
223; get elemental multiplier 224 lda $2699 ; attack element 225 sta $3600 226 and $2721 227 beq @c65a ; branch if not very weak 228 lda #$08 ; 4x elemental damage multiplier ⋮ 232 and $2720 ; branch if not weak 233 beq @c669 234 lda #$04 ; 2x elemental damage multiplier ⋮ 238 and $2726 ; branch if not immune 239 beq @c678 240 lda #$00 ; 0x elemental damage multiplier ⋮
battle/fight.asm lines 222–247 at a360e2e · upstream ↗ Checked against the evidence by its author, an AI model, 2026-10-21.
Checked by a second AI model, 2026-10-21.
Sources
Code
- Disch. 2019. “Final Fantasy Disassembly.” Commit cbb87d3. BenWenger/FinalFantasyDisassembly @ cbb87d3 · licence, all uses
- everything8215. 2022. “Final Fantasy II (NES) disassembly and ROM info.” Commit 8d26190. everything8215/ff2 @ 8d26190 · licence, all uses
- everything8215. 2022. “Final Fantasy III (NES) disassembly and ROM info.” Commit 1acef81. everything8215/ff3 @ 1acef81 · licence, all uses
- everything8215. 2022. “Final Fantasy IV Disassembly.” Commit a360e2e. everything8215/ff4 @ a360e2e · licence, all uses
- everything8215. 2026. “Final Fantasy VI Disassembly.” Commit 8130132. everything8215/ff6 @ 8130132 · licence, all uses