Final Fantasy
Square's 1987 role-playing game for the Famicom, the first in the series.
Final Fantasy is a role-playing game by Square, released for the Famicom in Japan on 18 December 19871. Nintendo of America’s list of NES games dates its North American release to May 19902. Nintendo calls it the first game of the Final Fantasy series3. The player forms a party of four warriors and picks each one’s occupation from six, in any mix4. These Light Warriors set out to restore the light of four orbs, one for each element; Nintendo’s Japanese page calls them crystals5. Later in the quest each warrior can change class into an adult form that can use spells and weapons it couldn’t before6.
Hironobu Sakaguchi presented the concept at Square, and when only three people volunteered he recruited Koichi Ishii and Akitoshi Kawazu7. He has said the team made a deliberate effort to be different from Dragon Quest, and that the graphics and the crystal setting were Ishii’s work8. Nasir Gebelli, an Apple II programmer hired by Square’s president, programmed the game, though it was the first time he had programmed anything like an RPG9. Yoshitaka Amano designed the characters at Ishii’s suggestion10. Kenji Terada wrote the scenario11, and Nobuo Uematsu composed the music12.
Famicom Tsushin reviewed it in its issue of 25 December 1987. One of the four reviewers called it a tour de force that set out to surpass Dragon Quest; its leaning toward enthusiasts was a flaw, if any, that a willing player wouldn’t mind. Another called it well made in both story and design13. In 1994 Square’s publicity manager, Yusuke Hirata, put its sales at about 600,000 in Japan and 700,000 on the NES14,14. With its re-releases, Square Enix counted 1.99 million15 copies shipped by March 200315. Terada recalled it as a big hit that saved Square, then facing bankruptcy16. Announcing a remake in 2003, Jun Iwasaki, president of Square Electronic Arts, said the game and its sequel had established Square as a pioneering force in role-playing games17.
#How it plays
Fights come at random as the party walks. On the overworld’s open ground the chance is 10 in 256 per step (3 at sea)18,18, and each dungeon sets its own rate18. Every area draws from eight enemy groups, some far rarer than others19. A battle can open with the party surprised, losing its first round of commands, or striking first while the enemies lose theirs; the leader’s Agility and Luck tilt the odds20.
Each round, the four characters and up to nine enemies act in a freshly shuffled order, and no stat moves anyone up21. The NES manual says Agility sets the order22.
#Attacks
A physical attack is a flurry of swings, each rolled on its own and added into one total23. A character makes swings24 for hit rate 24. Hit rate climbs with level and with a better weapon, so a seasoned fighter strikes several times a turn24,25. FAST doubles the swings, and an unarmed Black Belt or Master gets twice as many24.
Most swings land. Each one hits on a roll from 0 to 200 at or below 168 + hit rate − evade26, held within 1–255, and a roll of 200 always misses26,27. Dark on the attacker makes swings miss more, and Dark on the defender makes them land more26. A character’s evade rises by 1 at each level-up that raises Agility28.
A swing that lands deals from the attacker’s damage stat to twice it, less the target’s absorb, and never less than 123. The damage stat grows by 1 when a level-up brings Strength to an even number, and by the weapon’s damage when one is equipped25. A critical adds the swing’s damage again with no absorb taken off; it happens when the hit roll is low enough, and never more often than a hit29.
Against a sleeping or stunned target, hit rate and evade both drop out, leaving the base chance of 168, and damage rises by a quarter30. An evasive enemy is easier to hit once it is asleep30.
The game’s own battle code bears these rules out. With a low hit rate against a target that barely dodges, one swing lands 221 hits and 4 criticals in 25631 over every state of the random table31. Dark on the attacker cuts the hits to 170, and against a sleeping target to 216, since the attacker’s hit rate no longer counts31. A strong attacker’s four swings land 1,020 of 1,024 swings, 109 of them critical32,32, and with FAST, eight swings land nearly every time32.
#Randomness
Battle rolls come from a fixed table of 256 bytes read in turn, so the sequence repeats every 256 draws33. Each draw is scaled into whatever range a roll needs, as 34,34. The table holds 0 twice and skips one value35. With the lowest crit chance, that doubled 0 makes a swing critical four times in 256 where an even table would give three31. Encounters draw from a second table, which holds every value once36,37.
#Spells
A damage spell never misses. It deals from its power to twice it, and its own roll can double that, less often against a target with high magic defense38. Elements scale the power, resist ×½, weak ×1.539, and also move the chance of doubling39. Nothing about the caster counts, so Intelligence adds nothing to their damage40.
#Running
A character’s RUN pits their Luck against a roll that grows with level, but the game reads the level from the wrong place, so the odds don’t follow the runner’s own level41. Running always works when the party strikes first, and some battles forbid it41. The NES manual says escape depends on Agility42. Enemies flee too, when their morale is low against the party leader’s level43.
#Bugs
Disch’s commented disassembly marks each of these:
- A weapon’s crit chance is its place in the item list. The crit rate in each weapon’s data is never read44.
- Slaying and elemental weapons hit like any other weapon. The bonus for a match with the target’s weakness can never trigger, for either side45.
- TMPR and SABR do nothing when cast on a character46.
- XFER and the other spells that change an enemy’s resistances or weaknesses do nothing to enemies47.
- An unarmed Black Belt or Master gets absorb equal to their level at each level-up, whatever armor they wear48.
#Development
Sakaguchi has said he began as the series’ main planner and took on directing too, as the team grew49.
Two accounts of the title disagree. In a 2015 talk reported by Famitsu, Sakaguchi said the name only had to abbreviate to “FF”, and that the first choice, Fighting Fantasy, was dropped because a board game had it. He denied the popular story that “Final” marked the team’s last project: they had their backs to the wall, he said, but any word starting with F would have done50. In 2009 Wired’s Chris Kohler reported Uematsu’s answer to the same question. Sakaguchi was going to quit, Uematsu told him, but the real reason was that Square was going bankrupt and the designers expected the game to be the company’s swan song51.
#Across the series
Final Fantasy II splits the single roll per swing in two: the attacker’s hit rolls against the defender’s evade rolls, whose successes cancel hits52.
Square Electronic Arts set Final Fantasy Origins, PlayStation remakes of the first two games, for North America on 8 April 200353. Nintendo of America released the Game Boy Advance collection Final Fantasy I & II: Dawn of Souls on 29 November 2004, with four bonus dungeons that the original lacks54. Square Enix’s Japanese site dates the Pixel Remaster’s release on Steam and smartphones to 29 July 2021, alongside those of the next two games55.
Mechanics
| Mechanic | Kind | How |
|---|---|---|
| Damage formula | Attack minus defense | each hit deals between the attacker's damage stat and twice it, less the target's armor, and never less than 1 |
| Hit chance | Hit rate against evade | most swings land unless the target's evade outweighs the attacker's hit rate |
| Multi-hit attack | Swings from a stat | a character swings more times per attack as their hit rate grows, and each swing can hit or crit |
| Critical hit | From equipment | the weapon's place in the item list, not its listed critical rate, sets how often it crits |
| Elemental weakness | Scaled power | spells hit a weakness harder and a resistance softer; elemental and slaying weapons get no bonus at all |
| Random number generator | Fixed table | battle rolls come from a fixed table, so they repeat every 256 draws |
| Random encounter | By area | fights come at random as the party walks, rarely at sea, at a rate each dungeon sets |
| Fleeing | Luck against level | running rests on Luck against a level the game misreads, and always works when the party strikes first |
| Turn order | Shuffled | everyone acts in a fresh random order each round, and no stat moves a character up |
Every claim about this game, by concept (68)
References
- ^Final Fantasy came out for the Famicom in Japan on 18 December 1987.PublisherNintendo, VC Final Fantasy · Famicom Tsushin 39 · Electronic Gaming Monthly 63
How we know
1987年12月18日にファミコンで発売されました
p. 1, first paragraph · archived copy ↗ 12月18日発売
p. 19, Final Fantasy title card · archived copy ↗ The original FF was launched in December 1987.
p. 172, interview with Yusuke Hirata · archived copy ↗ The quote matches our archived copy.
Checked by a second AI model, 2026-10-27.
- ^Nintendo of America's list of NES games dates Final Fantasy's North American release to May 1990, with Nintendo as licensee.PublisherNintendo, NES Games · Nintendo Power 17, Final Fantasy guide
How we know
Final Fantasy Nintendo May 1990
PDF p. 5 · archived copy ↗ Final Fantasy: TM&© 1990 Nintendo
p. 3, contents and credits · archived copy ↗ The quote matches our archived copy.
Checked by a second AI model, 2026-10-27.
- ^Nintendo calls Final Fantasy the first game of the role-playing series of that name.PublisherNintendo, VC Final Fantasy
How we know
RPGシリーズ『ファイナルファンタジー』の第1弾となるこのゲーム
p. 1, first paragraph · archived copy ↗ The quote matches our archived copy.
Checked by a second AI model, 2026-10-27.
- ^The player makes a party of four warriors, choosing each one's occupation from six, in any combination.ManualFinal Fantasy NES manual · Nintendo, VC Final Fantasy
How we know
There are six different occupations to choose from.
p. 34, Selecting Your Characters · archived copy ↗ Each of the Four Warriors in your party must have an occupation.
p. 35, Character Occupations · archived copy ↗ 4人の職業の組み合わせは自由で
p. 1, occupations · archived copy ↗ The quote matches our archived copy.
Checked by a second AI model, 2026-10-27.
- ^The four Light Warriors set out to restore the light of four orbs, which governed the elements of earth, fire, water, and wind; Nintendo's Japanese page calls them crystals.ManualFinal Fantasy NES manual · Nintendo Power 17, Final Fantasy guide · Nintendo, VC Final Fantasy
How we know
These are the Four Orbs that you must restore.
p. 13, The Menu Screen · archived copy ↗ four orbs of power controlled the four elements of Wind, Fire, Water and Earth, but then the light drained from the orbs
p. 8, Rise & Fall · archived copy ↗ 4つのクリスタルに、光を取り戻す旅に出ます
p. 1, story · archived copy ↗ The quote matches our archived copy.
Checked by a second AI model, 2026-10-27.
- ^Later in the game each character can change class into an adult form, which can buy some spells and equip some weapons it couldn't before; some classes gain magic this way.ManualFinal Fantasy NES manual
How we know
Each character will mature into an adult state after certain conditions are met. … After class change some characters will become magic users
p. 75, Class Change · archived copy ↗ The quote matches our archived copy.
Checked by a second AI model, 2026-10-27.
- ^Hironobu Sakaguchi presented the concept at Square, where only three people volunteered for the project, and he then recruited Koichi Ishii and Akitoshi Kawazu.Interview1UP, Sakaguchi on FFI
How we know
That's where I presented the concept for what became FF … only three people volunteered to help out with the project … that's how I got Koichi Ishii and Akitoshi Kawazu
Sakaguchi on Square's team system · archived copy ↗ The quote matches our archived copy.
Checked by a second AI model, 2026-10-27.
- ^Sakaguchi said the team made a deliberate effort to be different from Dragon Quest, and that the graphics and the setting with the crystals were Ishii's work.Interview1UP, Sakaguchi on FFI
How we know
We made a concerted effort to be different … The graphics were part of that effort, as was the game setting with the Crystals. That was all Ishii's work.
paragraph beginning "What was Sakaguchi aiming for" · archived copy ↗ The quote matches our archived copy.
Checked by a second AI model, 2026-10-27.
- ^Square's president hired the Apple II programmer Nasir Gebelli, who programmed the game; Sakaguchi said it was the first time Gebelli had programmed anything like an RPG.Interview1UP, Sakaguchi on FFI
How we know
The core FF project team was completed when Square's president hired Nasir Gebelli
paragraph beginning "The core FF project team" · archived copy ↗ It was the first time he had programmed anything like an RPG, though, so it was tough. … he did a great job getting a lot of performance out of the hardware
Sakaguchi on Gebelli · archived copy ↗ The quote matches our archived copy.
Checked by a second AI model, 2026-10-27.
- ^Yoshitaka Amano designed the characters, at Ishii's suggestion.Interview1UP, Sakaguchi on FFI
How we know
The addition of Yoshitaka Amano, character designer for the entire FF series, was another bit of serendipity.
paragraph beginning "The addition of Yoshitaka Amano" · archived copy ↗ He's the guy to go to for character design.
Sakaguchi on Amano · archived copy ↗ The quote matches our archived copy.
Checked by a second AI model, 2026-10-27.
- ^Kenji Terada wrote the scenario, at Sakaguchi's request.WebIGDA Japan, Terada seminar report
How we know
「ファイナルファンタジーI」「II」「III」のシナリオなどを手がけた寺田
opening section, paragraph 3 · archived copy ↗ 『ファイナルファンタジー』のシナリオを書いて欲しいと依頼を受けたのでした
section ファイナルファンタジーが生んだ、ゲームシナリオライターへの道 · archived copy ↗ The quote matches our archived copy.
- ^Nobuo Uematsu composed the music.MagazineElectronic Gaming Monthly 63 · IGDA Japan, Terada seminar report
How we know
The man responsible for all the FF music is Nobuo
p. 172, interview with Yusuke Hirata · archived copy ↗ 音楽を「ファイナルファンタジー」サウンドの代名詞ともいえる植松伸夫氏が担当することに
section ファイナルファンタジーが生んだ、ゲームシナリオライターへの道 · archived copy ↗ The quote matches our archived copy.
- ^In Famicom Tsushin's cross review of 25 December 1987, one reviewer called Final Fantasy a tour de force that, aware of Dragon Quest, showed the will to surpass it; being too geared to enthusiasts was a flaw, if any, that a player willing to enjoy the game wouldn't mind. Another called it a well-made RPG whose story and design both cleared the bar high.MagazineFamicom Tsushin 39
How we know
「ドラクエ」を超えようとする意欲がうかがえる … マニアックになりすぎているところが欠点といえば欠点だけど … 積極的にゲームを楽しもうという姿勢さえあれば気にならない
p. 19, Final Fantasy, first reviewer's column · archived copy ↗ 「ファイナルファンタジー」はよくできたRPGと言えるだろう … 水準を上の方でクリアーしている
p. 19, Final Fantasy, second reviewer's column · archived copy ↗ The quote matches our archived copy.
- ^ abSquare's publicity manager Yusuke Hirata told Electronic Gaming Monthly in 1994 that the game sold about 600,000 copies in Japan and its NES version about 700,000.MagazineElectronic Gaming Monthly 63
How we know
Approximately 600,000 were sold in Japan. The NES version sold better, registering sales of approximately 700,000.
p. 172, interview with Yusuke Hirata · archived copy ↗ The quote matches our archived copy.
- ^ abSquare Enix counted 1.99 million copies of Final Fantasy shipped by 31 March 2003 across its NES, PlayStation, and other versions, 1.21 million of them in Japan and 0.78 million abroad.PublisherSquare Enix IR shipments table 2004
How we know
NES/PS/Other 1,210 780 1,990
p. 27, table of titles shipping over 1 million · archived copy ↗ The quote matches our archived copy.
Checked by a second AI model, 2026-10-27.
- ^Terada recalled that Final Fantasy became a big hit and saved Square, which had been facing bankruptcy.WebIGDA Japan, Terada seminar report
How we know
大ヒットを記録し、倒産の危機を迎えていたスクウェアを救うことになった
section ファイナルファンタジーが生んだ、ゲームシナリオライターへの道, last paragraph · archived copy ↗ The quote matches our archived copy.
- ^Square Electronic Arts' president Jun Iwasaki said in 2003 that Final Fantasy and Final Fantasy II established Square as a pioneering force in the role-playing genre.WebGameSpot, Final Fantasy Origins release
How we know
Final Fantasy and Final Fantasy II established Square as a pioneering force in the role-playing game genre
news item, Iwasaki's statement · archived copy ↗ The quote matches our archived copy.
- ^ abcOn the overworld, a step onto a tile marked for fights starts a battle when the battle-step generator returns less than 10, or less than 3 aboard the ship; in dungeons and towns the threshold is a per-map rate.CodeDisch, FF1 disassembly
How we know
1187 @Fighting: 1188 LDA #10 ; 10 / 256 chance of getting in a random encounter normally ⋮ 1192 LDA #3 ; ... 3 / 256 chance instead (more infrequent battles at sea) ⋮ 1195 JSR BattleStepRNG ; get a random number for battle steps 1196 CMP tmp ; compare it to our chance 1197 BCC @DoEncounter ; if the random number < our odds -- do a random encounter
Final Fantasy Disassembly/bank_0F.asm lines 1187–1197 at cbb87d3 · upstream ↗ 3298SMMove_Battle: ⋮ 3302 JSR BattleStepRNG ; get a pseudo-random number from the battle step RNG 3303 CMP battlerate ; if that number is >= the battle rate for this map...
Final Fantasy Disassembly/bank_0F.asm lines 3298–3304 at cbb87d3 · upstream ↗ 3756 LDA lut_BattleRates+1, X ; get this map's rate (+1 because first entry is for overworld [unused]) 3757 STA battlerate ; and record it
Final Fantasy Disassembly/bank_0F.asm lines 3756–3757 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.
- ^
GetBattleFormationpicks one of the area's 8 formations by indexinglut_RNGwith a counter that rises by 1 per battle; the low 6 bits select formations 0–3 with 12 chances in 64 each, 4 and 5 with 6, 6 with 3, and 7 with 1.CodeDisch, FF1 disassemblyHow we know
1293 INC battlecounter ; increment the battle counter 1294 LDX battlecounter ; and put it in X 1295 LDA lut_RNG, X ; use it as seed to get a random number ⋮ 1297 AND #$3F ; drop the 2 high bits of the random number 1298 TAX ; and put in X 1299 LDY lut_FormationWeight, X ; use that to index the formation weight LUT to know which formation to use
Final Fantasy Disassembly/bank_0F.asm lines 1293–1299 at cbb87d3 · upstream ↗ 1357lut_FormationWeight: 1358 .BYTE 0,0,0,0,0,0, 0,0,0,0,0,0 ; 12/64 chance of formation 0 ⋮ 1365 .BYTE 7 ; 1/64
Final Fantasy Disassembly/bank_0F.asm lines 1357–1365 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.
- ^At the start of a battle, unless the formation is marked no-run, the game draws with of the party leader: below 11 the party is surprised and loses its first round of commands, and from 90 the party strikes first and the enemies skip the first round.CodeDisch, FF1 disassembly
How we know
383 AND #$01 ; see if "no run" bit is set. If it is, there is no strike first/surprised check ⋮ 389 ; S = (leaders_agility + leaders_luck) / 8 390 ; V = random[S+S, S+100] - surpised_rate ⋮ 393 ; if V >= 90, party strikes first ⋮ 399 LDA ch_agil 400 CLC 401 ADC ch_luck ⋮ 422 CMP #11 423 BCC @Surprised ; if < 11, SURPRISED! 424 CMP #90 ⋮ 430 INC btl_strikingfirst ; set flag ⋮ 437 JMP BattleLogicLoop_DoCombat ; skip over first round of player input, and just do combat
Final Fantasy Disassembly/bank_0C.asm lines 381–437 at cbb87d3 · upstream ↗ 3259 LDA btl_strikingfirst ; if the party is striking first 3260 BNE @NextTurn ; skip their turn
Final Fantasy Disassembly/bank_0C.asm lines 3259–3260 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.
- ^Each round,
DoBattleRoundlists the 9 enemy slots and 4 characters and shuffles them with 16 swaps of two random positions; no stat enters the order.CodeDisch, FF1 disassemblyHow we know
3181lut_InitialTurnOrder: 3182 .BYTE $00, $01, $02, $03, $04, $05, $06, $07, $08 ; enemy IDs 3183 .BYTE $80, $81, $82, $83 ; character IDs
Final Fantasy Disassembly/bank_0C.asm lines 3181–3183 at cbb87d3 · upstream ↗ 3199DoBattleRound: 3200 LDY #$0D ; initialize turn order buffer ⋮ 3211 ; Shuffle the turn order. This is done by looping 16 times, each time 3212 ; it will pick 2 random entries in the turn order table and swap them. ⋮ 3214 ; Note that this is suboptimal, since it's more likely for an entry to ⋮ 3227 JSR RandAX ; pick two random indexes ⋮ 3231 JSR RandAX ⋮ 3236 LDA btl_turnorder, Y ; swap those entries in the turn order
Final Fantasy Disassembly/bank_0C.asm lines 3199–3244 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.
- ^The NES manual says agility sets the order: "Each character's agility, regardless of enemy or ally, dictates the order of execution."ManualFinal Fantasy NES manual
How we know
Each character's agility, regardless of enemy or ally, dictates the order of execution.
p. 26, Battle Techniques, Run as a Strategy · archived copy ↗ Checked against the evidence by its author, an AI model, 2026-10-20.
Checked by a second AI model, 2026-10-21.
- ^ abEach swing that rolls under 200 also rolls damage from the base to , capped at 255; a hit subtracts the defender's absorb, with a minimum of 1, and the swings' damage adds up to one total.CodeDisch, FF1 disassembly
How we know
4312 LDA btl_attacker_strength ; base damage of attacker's strength valueFinal Fantasy Disassembly/bank_0C.asm lines 4312–4313 at cbb87d3 · upstream ↗ 3994 LDY #btlch_dmg ; IB damage 3995 LDA (btl_ib_charstat_ptr), Y 3996 STA btl_attacker_strength
Final Fantasy Disassembly/bank_0C.asm lines 3994–3996 at cbb87d3 · upstream ↗ 4482 : LDX $6BAD 4483 LDA #$00 4484 JSR RandAX 4485 CLC 4486 ADC $6BAD 4487 STA math_basedamage ; random between [basedmg, basedmg*2] ⋮ 4500 JSR MathBuf_Sub ; subtract defender's absorb ⋮ 4510 INC math_dmgcalc ⋮ 4520 JSR MathBuf_Add ⋮ 4526 JSR MathBuf_Add16 ; total damage += dmgcalc
Final Fantasy Disassembly/bank_0C.asm lines 4482–4526 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.
- ^ abcdAn attack swings times for hit rate , times a multiplier that FAST raises from 1 to 2; an unarmed Black Belt or Master swings twice as often.CodeDisch, FF1 disassembly
How we know
5657 LDA (btl_ob_charstat_ptr), Y ; num hits = hitrate / 32 + 1Final Fantasy Disassembly/bank_0C.asm lines 5656–5666 at cbb87d3 · upstream ↗ 4407 : LDA btl_attacker_numhits ; get proper number of hits (numhits * mult) 4408 LDX btl_attacker_numhitsmult ; the mult is essentially the multiplier for the FAST spell 4409 JSR MultiplyXA
Final Fantasy Disassembly/bank_0C.asm lines 4407–4415 at cbb87d3 · upstream ↗ 8618 INC btlmag_defender_numhitsmult ; Increase hit multiplier ⋮ 8625 LDA #$02 ; and max the multiplier at 2
Final Fantasy Disassembly/bank_0C.asm lines 8616–8627 at cbb87d3 · upstream ↗ 5745 LDY #btlch_numhits ; unarmed BB/master gets 2x as many hitsFinal Fantasy Disassembly/bank_0C.asm lines 5745–5748 at cbb87d3 · upstream ↗ 897 LDY #ch_hitrate - ch_stats ; assign Hit Rate bonus ⋮ 900 ADC lut_LvlUpHitRateBonus, X 901 JSR CapAAt200 ; cap hit rate at 200
Final Fantasy Disassembly/bank_0B.asm lines 897–901 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.
- ^ abA character's damage stat rises by 1 whenever a level-up raises Strength to an even number, and by the weapon's damage when it is equipped; the weapon's hit bonus adds to hit rate the same way.CodeDisch, FF1 disassembly
How we know
1060 LDY #ch_str - ch_stats ; damage goes up 1 pt for each 2pts of strength ⋮ 1066 LDY #ch_dmg - ch_stats ; if yes, add 1 to damage stat
Final Fantasy Disassembly/bank_0B.asm lines 1060–1072 at cbb87d3 · upstream ↗ 10921 ADC (tmp), Y ; add to it the weapon's hit bonus ⋮ 10927 ADC (tmp), Y ; add weapon's damage bonus
Final Fantasy Disassembly/bank_0F.asm lines 10919–10928 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.
- ^ abcA physical attack's hit chance starts at 168; Dark on the attacker costs 40, and Dark on the defender gives 40. Unless the defender is asleep or stunned, it then adds the attacker's hit rate and subtracts the defender's evade. The result is held within 1–255.CodeDisch, FF1 disassemblyrevised
How we know
4309 LDA #168 ; base hit chance of 168 ⋮ 4318 LDA btl_attacker_ailments ; if attacker has DARK status, penalty of 40 to their hit chance ⋮ 4326 : LDA btl_defender_ailments ; if defender has DARK, bonus of 40 to attacker's hit chance
Final Fantasy Disassembly/bank_0C.asm lines 4309–4332 at cbb87d3 · upstream ↗ 4378 LDA #MATHBUF_HITCHANCE ; add their hit rate to their hit chance ⋮ 4383 JSR CapXYAtFF ; cap at 255 ⋮ 4388 LDX btl_defender_evade ; the hit chance. ⋮ 4399 INC math_hitchance ; minimum hit chance of 1
Final Fantasy Disassembly/bank_0C.asm lines 4377–4399 at cbb87d3 · upstream ↗ Checked against the evidence by its author, an AI model, 2026-10-21.
Revised after a check by a second AI model, 2026-10-21.
- ^Each swing rolls 0–200 with
RandAX; a roll of 200 always misses, and any other roll hits when it is at most the hit chance.CodeDisch, FF1 disassemblyHow we know
4474 LDX #200 4475 JSR RandAX ; [0,200] ⋮ 4480 JMP @NextHitIteration ; skip if got 200 exactly (guaranteed miss) ⋮ 4484 JSR RandAX ⋮ 4493 CMP math_randhit ; if hit chance is < randhit value, then this was a miss. Jump ahead
Final Fantasy Disassembly/bank_0C.asm lines 4471–4494 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.
- ^A level-up that raises a character's Agility also raises their evade by 1, up to 200.CodeDisch, FF1 disassembly
How we know
1074 : LDY #ch_evade - ch_stats ; evade goes up 1 if agility went up 1075 LDA @statupbuffer+1 1076 BEQ :+ ; did agility go up? ⋮ 1080 CMP #201 ; cap at 200 1081 BEQ :+
Final Fantasy Disassembly/bank_0B.asm lines 1074–1082 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.
- ^A swing is critical when its roll is at most the crit chance, which is capped at the hit chance; a critical adds the swing's random damage again, with no absorb taken from it.CodeDisch, FF1 disassembly
How we know
4404 LDA math_hitchance ; crit chance cannot exceed hit chanceFinal Fantasy Disassembly/bank_0C.asm lines 4401–4405 at cbb87d3 · upstream ↗ 4515 LDA math_critchance ; see if hit value is <= crit chance (this will be impossible if the attack was a miss) ⋮ 4519 LDX math_basedamage ; add random damage to our total 4520 JSR MathBuf_Add 4521 INC battle_critsconnected
Final Fantasy Disassembly/bank_0C.asm lines 4514–4521 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.
- ^ abAgainst a sleeping or stunned defender, base damage rises by a quarter, and the attacker's hit rate and the defender's evade drop out, so the hit chance stays at 168 apart from Dark's 40 either way.CodeDisch, FF1 disassemblyrevised
How we know
4363 : LDA btl_defender_ailments 4364 AND #AIL_STUN | AIL_SLEEP 4365 BEQ @DefenderMobile ; if defender alseep or stunned.... 4366 LDA math_basedamage ; apply 25% bonus to base damage ⋮ 4379 LDX btl_attacker_hitrate ; This seems strange to me. Shouldn't this be done even if defender 4380 JSR MathBuf_Add ; is immobile? Is this BUGGED?
Final Fantasy Disassembly/bank_0C.asm lines 4363–4380 at cbb87d3 · upstream ↗ 4309 LDA #168 ; base hit chance of 168 ⋮ 4318 LDA btl_attacker_ailments ; if attacker has DARK status, penalty of 40 to their hit chance ⋮ 4326 : LDA btl_defender_ailments ; if defender has DARK, bonus of 40 to attacker's hit chance
Final Fantasy Disassembly/bank_0C.asm lines 4309–4332 at cbb87d3 · upstream ↗ Checked against the evidence by its author, an AI model, 2026-10-21.
Revised after a check by a second AI model, 2026-10-21.
- ^ abcdMeasured in the ROM over all 256 battle-RNG states, one swing with base damage 20, hit rate 10, and crit chance 1 against evade 6 and absorb 4 hits 221 times and is critical 4 times; with the attacker in Dark it hits 170 times, and against a sleeping defender 216 times.Verified“Final Fantasy (USA)” · Disch, FF1 disassembly
How we know
In the cartridge (“Final Fantasy (USA)”): bank $0C $A68C-$A8D3, the math of DoPhysicalAttack the probe runs, skipping the animation at $A775-$A7C8. We don't reproduce the bytes.
4310 STA math_hitchance ⋮ 4319 AND #AIL_DARK 4320 BEQ :+ 4321 LDA math_hitchance 4322 SEC 4323 SBC #40 4324 STA math_hitchance ⋮ 4327 AND #AIL_DARK 4328 BEQ :+ 4329 LDA math_hitchance ⋮ 4332 STA math_hitchance ⋮ 4364 AND #AIL_STUN | AIL_SLEEP ⋮
Final Fantasy Disassembly/bank_0C.asm lines 4307–4591 at cbb87d3 · upstream ↗ Measured by a script in MesenCE 2.2.1 (build 4b8a196), on Final Fantasy (USA) (SHA-1
e8f34d935760…). It fails if the result disagrees with the claim.The numbers come from the run; its author, an AI model, checked the script measures what the claim says, 2026-10-25.
Checked by a second AI model, 2026-10-21.
Checked by a second AI model, 2026-10-25.
- ^ abcMeasured the same way, four swings with base damage 40, hit rate 100, and crit chance 20 against evade 40 and absorb 10 land 1,020 of 1,024 swings, 109 of them critical, for 129–413 damage; with FAST, eight swings land 2,040 of 2,048, 213 critical.Verified“Final Fantasy (USA)” · Disch, FF1 disassembly
How we know
In the cartridge (“Final Fantasy (USA)”): bank $0C $A68C-$A8D3, as in hit-loop-measured. We don't reproduce the bytes.
4409 JSR MultiplyXA 4410 STA math_numhits
Final Fantasy Disassembly/bank_0C.asm lines 4407–4415 at cbb87d3 · upstream ↗ Measured by a script in MesenCE 2.2.1 (build 4b8a196), on Final Fantasy (USA) (SHA-1
e8f34d935760…). It fails if the result disagrees with the claim.The numbers come from the run; its author, an AI model, checked the script measures what the claim says, 2026-10-25.
Checked by a second AI model, 2026-10-21.
Checked by a second AI model, 2026-10-25.
- ^
BattleRNGreturns the next byte of a 256-byte table, indexed by a counter (btl_rngstate) that wraps, so battle draws repeat every 256 calls.CodeDisch, FF1 disassemblyHow we know
13817BattleRNG: 13818 LDX btl_rngstate 13819 INC btl_rngstate 13820 LDA @Scramble_lut, X 13821 RTS
Final Fantasy Disassembly/bank_0F.asm lines 13817–13824 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.
- ^ ab
RandAXscales a table byte into a range: .CodeDisch, FF1 disassemblyHow we know
5893 TXA ⋮ 5895 SBC $68AF ; subtract to get the range. ⋮ 5898 JSR BattleRNG_L 5899 LDX $68B6 5900 JSR MultiplyXA ; random()*range ⋮ 5902 TXA ; drop the low 8 bits, put high 8 bits in A (effectively: divide by 256)
Final Fantasy Disassembly/bank_0C.asm lines 5888–5905 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.
- ^
BattleRNG's table holds$00twice and never$95, so a battle draw is never$95.Code“Final Fantasy (USA)” · Disch, FF1 disassemblyHow we know
In the cartridge (“Final Fantasy (USA)”): bank $0F $FCF1-$FDF0, the table; `$00` sits at positions 97 and 110. We don't reproduce the bytes.
13811;; IMPORTANT NOTE!!!! ChaosDeath in bank B assumes that calling this routine 256 times consecutively will ⋮ 13823 @Scramble_lut: 13824 .INCBIN "bin/0F_FCF1_rngtable.bin"
Final Fantasy Disassembly/bank_0F.asm lines 13811–13824 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.
- ^
lut_RNG, the 256-byte table at$F100, holds every byte from$00to$FFexactly once.Code“Final Fantasy (USA)” · Disch, FF1 disassemblyHow we know
In the cartridge (“Final Fantasy (USA)”): bank $0F $F100-$F1FF, lut_RNG. We don't reproduce the bytes.
11326;; RNG scrambling lookup table [$F100 :: 0x3F110] ⋮ 11328;; This table is $100 bytes in size, and simply consists of every number ⋮ 11333lut_RNG: 11334 .INCBIN "bin/0F_F100_rngtable.bin"
Final Fantasy Disassembly/bank_0F.asm lines 11326–11334 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.
- ^
BattleStepRNGreturnslut_RNG[i]for a counter that steps by 1 per call; each time it wraps to 0, a sign byte gains$A0, and its top bit sets the direction of the next pass.CodeDisch, FF1 disassemblyHow we know
1315;; Random numbers are generated by stepping through a RNG LUT. Once it 1316;; cycles through the entire LUT, it cycles through it again -- potentially 1317;; in a reversed direction. Which direction it's going depends on battlestep_sign. ⋮ 1323BattleStepRNG: 1324 BIT battlestep_sign ; see if sign indicates a decrement 1325 BMI @Negative ⋮ 1339 ADC #$A0 1340 STA battlestep_sign ⋮ 1343 LDX battlestep ; put battlestep in X 1344 LDA lut_RNG, X ; use it to get a random number from the LUT
Final Fantasy Disassembly/bank_0F.asm lines 1315–1345 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.
- ^A damage spell always connects, for a random value from its power to ; its roll of 0–200 against 148 + the spell's hit rate − the target's magic defense doubles the damage instead of deciding a hit.CodeDisch, FF1 disassembly
How we know
8284 JSR BtlMag_MarkSpellConnected ; damage spells always connect 8285 JSR BtlMag_LoadBaseHitChance ; load base hit chance (since damage always hits, this becomes more of a "critical" chance)
Final Fantasy Disassembly/bank_0C.asm lines 8283–8286 at cbb87d3 · upstream ↗ 8208 LDA #<148 ; base hit chance of 148Final Fantasy Disassembly/bank_0C.asm lines 8207–8211 at cbb87d3 · upstream ↗ 8156 JSR MathBuf_Add ; math_hitchance += spell's base hit rate ⋮ 8160 JSR MathBuf_Sub ; math_hitchance -= defender's magdef ⋮ 8168 JSR MathBuf_Add ; math_basedamage = rand[ spelldamage, spelldamage*2 ]
Final Fantasy Disassembly/bank_0C.asm lines 8153–8171 at cbb87d3 · upstream ↗ 8328 BEQ :+ ; if the hit/crit roll was 200, this is NOT a crit ⋮ 8331 ASL math_basedamage ; ... do 2x damage
Final Fantasy Disassembly/bank_0C.asm lines 8325–8332 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.
- ^ 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.
- ^A damage spell's damage and its chance to double come from the spell's power, hit rate, and element, the target's magic defense, resistances, and weaknesses, and two random rolls. No stat of the caster enters either, so Intelligence adds nothing to spell damage.CodeDisch, FF1 disassembly
How we know
7116 LDY #MAGDATA_ELEMENT ; magic's element 7117 LDA (btl_magdataptr), Y 7118 STA btlmag_element ⋮ 7120 LDY #MAGDATA_HITRATE ; hit rate 7121 LDA (btl_magdataptr), Y 7122 STA btlmag_hitrate ⋮ 7124 LDY #MAGDATA_EFFECTIVITY ; and effectivity 7125 LDA (btl_magdataptr), Y 7126 STA btlmag_effectivity
Final Fantasy Disassembly/bank_0C.asm lines 7116–7126 at cbb87d3 · upstream ↗ 8283BtlMag_Effect_Damage: 8284 JSR BtlMag_MarkSpellConnected ; damage spells always connect 8285 JSR BtlMag_LoadBaseHitChance ; load base hit chance (since damage always hits, this becomes more of a "critical" chance) 8286 JSR PutEffectivityInDamageMathBuf ; Load spell effectivity into 'damage' math buffer ⋮ 8288 LDA btlmag_element 8289 AND btlmag_defender_elemresist ; see if the defender resists this element ⋮ 8295 : LDA btlmag_element 8296 AND btlmag_defender_elemweakness ; see if they are weak to the element ⋮ 8316 : JSR BtlMag_PrepHitAndDamage ; Get hit/damage stuff into math buffers
Final Fantasy Disassembly/bank_0C.asm lines 8283–8316 at cbb87d3 · upstream ↗ 8153BtlMag_PrepHitAndDamage: 8154 LDA #MATHBUF_HITCHANCE 8155 LDX btlmag_hitrate 8156 JSR MathBuf_Add ; math_hitchance += spell's base hit rate ⋮ 8158 LDA #MATHBUF_HITCHANCE 8159 LDX btlmag_defender_magdef 8160 JSR MathBuf_Sub ; math_hitchance -= defender's magdef ⋮ 8162 LDA #0 8163 LDX math_basedamage 8164 JSR RandAX ⋮ 8170 JSR Random_0_200 8171 JMP WriteAToMagRandHit ; math_magrandhit = rand[ 0, 200 ]
Final Fantasy Disassembly/bank_0C.asm lines 8153–8171 at cbb87d3 · upstream ↗ 8207BtlMag_LoadBaseHitChance: 8208 LDA #<148 ; base hit chance of 148 8209 STA math_hitchance
Final Fantasy Disassembly/bank_0C.asm lines 8207–8211 at cbb87d3 · upstream ↗ 8325BtlMag_ApplyDamage: 8326 LDA math_magrandhit 8327 CMP #200 8328 BEQ :+ ; if the hit/crit roll was 200, this is NOT a crit 8329 JSR BtlMag_DidSpellConnect ; See if the spell connected as a critical 8330 BCC :+ ; if yes... 8331 ASL math_basedamage ; ... do 2x damage ⋮ 8337 JSR MathBuf_Sub16 ; HP -= damage
Final Fantasy Disassembly/bank_0C.asm lines 8325–8338 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.
- ^ abA character's RUN always succeeds when the party strikes first and always fails in a formation marked no-run; otherwise it succeeds when the character's Luck exceeds
RandAX(0, level + 15), but the level is read from the wrong place: Disch notes the code reads another character's ailment byte or unrelated memory.CodeDisch, FF1 disassemblyHow we know
3755Battle_PlayerTryRun: ⋮ 3762 LDA btl_strikingfirst ; are we striking first? 3763 BNE @Success ; If yes, run success is guaranteed ⋮ 3766 AND #$01 ; if the 'no run' bit is set in the formation, 3767 BNE @Fail ; then failure is guaranteed. ⋮ 3771 ; Run if: Luck > random[0, level+15] ⋮ 3773 ; The problem is... the game is BUGGED and reads the wrong value for the level.. it ends up reading 3774 ; the ailment byte for 2 players after this one (for top 2 slots) or other garbage memory for the ⋮ 3781 LDA (btl_ib_charstat_ptr), Y ; BUGGED - Reading wrong value -- should be OB, not IB ⋮ 3788 JSR RandAX ; random[ 0, level+15 ]
Final Fantasy Disassembly/bank_0C.asm lines 3755–3790 at cbb87d3 · upstream ↗ 3807 LDA btl_mathbuf+2 ; success if low byte was nonzero (if luck > randomval) 3808 BNE @Success ; failure if zero (luck <= randomval) ⋮ 3811 LDA #BTLMSG_CANTRUN ; on failure, print 'Can't Run' ⋮ 3815 LDA #BTLMSG_CLOSECALL ; on success, print 'Close Call....' ⋮ 3819 STA btl_result ; Set the battle result to 3 (party ran)
Final Fantasy Disassembly/bank_0C.asm lines 3807–3819 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.
- ^The NES manual says running depends on agility: "There is no guarantee that your escape will be successful — it depends on your agility level."ManualFinal Fantasy NES manual
How we know
If you are overpowered, you can try to RUN. There is no guarantee that your escape will be successful — it depends on your agility level.
p. 19, RUN · archived copy ↗ Checked against the evidence by its author, an AI model, 2026-10-20.
Checked by a second AI model, 2026-10-21.
- ^On an active enemy's turn, it flees when its morale is below twice the party leader's level, or when morale minus twice that level plus
RandAX(0, 50) is below 80.CodeDisch, FF1 disassemblyHow we know
6780 STA $9E ; $9E = 2*level of party leader ⋮ 6785 ; V = X + Morale - L ⋮ 6788 ; X = random number between [$00,$32] ⋮ 6792 ; if V is less than $50, the enemy will run! ⋮ 6798 BCC @RunAway ; run if morale < 2*level_of_leader ⋮ 6801 LDX #$32 6802 JSR RandAX ; random between [$00-$32] ⋮ 6806 CMP #$50 6807 BCS Enemy_DoAi ; if >= $50, do not run
Final Fantasy Disassembly/bank_0C.asm lines 6778–6810 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.
- ^A character's crit chance is the equipped weapon's index number, not the crit rate in the weapon's data (no code we read touches that byte); an unarmed Black Belt or Master gets twice their level.CodeDisch, FF1 disassemblyrevised
How we know
5693 LDY #btlch_critrate 5694 AND #$7F 5695 STA (btl_ib_charstat_ptr), Y ; BUGGED - this sets the critical rate to the weapon index,
Final Fantasy Disassembly/bank_0C.asm lines 5692–5697 at cbb87d3 · upstream ↗ 27;; byte 2: Critial rate (BUGGED - not used .. see LoadOneCharacterIBStats for offending code)Final Fantasy Disassembly/bank_0C.asm line 27 at cbb87d3 · upstream ↗ 10917 LDY #0 ; zero Y (our source index) ⋮ 10921 ADC (tmp), Y ; add to it the weapon's hit bonus 10922 STA ch_hitrate, X ; and write it back 10923 INY ; inc source index ⋮ 10927 ADC (tmp), Y ; add weapon's damage bonus 10928 STA ch_dmg, X ; and write back
Final Fantasy Disassembly/bank_0F.asm lines 10916–10928 at cbb87d3 · upstream ↗ 5721 CMP #$02 5722 BEQ @BB_Master ; is it a black belt? 5723 CMP #$08 ⋮ 5727 LDY #btlch_wepgfx 5728 LDA (btl_ib_charstat_ptr), Y ; see if they have no weapon equipped 5729 BNE @Done ⋮ 5734 STA (btl_ib_charstat_ptr), Y ⋮ 5737 STA (btl_ib_charstat_ptr), Y ⋮ 5739 LDY #ch_level - ch_stats ; Unarmed BB's crit rate is 2x his level 5740 LDA (btl_ob_charstat_ptr), Y 5741 ASL A 5742 LDY #btlch_critrate ⋮
Final Fantasy Disassembly/bank_0C.asm lines 5719–5743 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.
Revised after a check by a second AI model, 2026-10-25.
- ^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.
- ^TMPR and SABR, whose spell effect adds the spell's power to the target's attack, do nothing when cast on a character: the routine that loads a character's stats for a spell doesn't load attack, and the routine that saves them back skips it.Code“Final Fantasy (USA)” · Disch, FF1 disassembly
How we know
In the cartridge (“Final Fantasy (USA)”): TMPR's 8-byte record in lut_MagicData (spell $0E, bank $0C $8250); its effect byte is $0D; SABR's record (spell $36, bank $0C $8390); its effect byte is $0D. We don't reproduce the bytes.
60MAGDATA_EFFECT = $04Final Fantasy Disassembly/Constants.inc lines 56–60 at cbb87d3 · upstream ↗ 8118 @jumptable_MagicEffect: 8119 .WORD Battle_ShowIneffective ; Spell has no in-battle effect ⋮ 8132 .WORD BtlMag_Effect_AttackUp2
Final Fantasy Disassembly/bank_0C.asm lines 8118–8132 at cbb87d3 · upstream ↗ 8645 LDA btlmag_effectivity ; Add the spell effectivity to the defender's attack power. 8646 CLC 8647 ADC btlmag_defender_strength 8648 BCC :+ 8649 LDA #$FF ; cap at 255 8650 : STA btlmag_defender_strength
Final Fantasy Disassembly/bank_0C.asm lines 8645–8650 at cbb87d3 · upstream ↗ 8027BtlMag_SavePlayerDefenderStats: ⋮ 8033 LDA btlmag_defender_ailments ⋮ 8037 LDA btlmag_defender_magdef ; magdef?? This is weird because not only does no magic actually change ⋮ 8042 LDA btlmag_defender_hp ; HP ⋮ 8050 LDA btlmag_defender_elemresist ; elemental resistence ⋮ 8052 STA (btl_entityptr_ibram), Y ⋮ 8054 LDA btlmag_defender_numhitsmult ; hit multiplier ⋮ 8056 STA (btl_entityptr_ibram), Y ⋮ 8058 LDA btlmag_defender_absorb ; absorb/defense ⋮ 8060 STA (btl_entityptr_ibram), Y ⋮ 8063 LDA btlmag_defender_evade 8064 STA (btl_entityptr_ibram), Y ⋮
Final Fantasy Disassembly/bank_0C.asm lines 8027–8070 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.
- ^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.
- ^At each level-up, an unarmed Black Belt or Master gets absorb equal to their level and a damage stat of twice their level, whatever armor they wear.CodeDisch, FF1 disassembly
How we know
174 LDY #ch_level - ch_stats ; reaches here if no weapon equipped. Get the level ⋮ 178 LDY #ch_absorb - ch_stats ; Absorb = Level -- BUGGED: This is the infamous BB Armor Bug ⋮ 183 LDY #ch_dmg - ch_stats ; Damage = 2*Level
Final Fantasy Disassembly/bank_0B.asm lines 174–184 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.
- ^Sakaguchi said that he began as the series' main planner and, as the team grew and needed a director, took that role too.InterviewSakaguchi, Famitsu 1998
How we know
In the beginning, I was the main planner, but when the production team increased, a director was needed, so I took that role as well.
answer to the first question · archived copy ↗ The quote matches our archived copy.
Checked by a second AI model, 2026-10-27.
- ^In a 2015 talk reported by Famitsu, Sakaguchi said the title was chosen to abbreviate as "FF", that Fighting Fantasy was dropped because a board game had the name, and that any word starting with F would have done; he denied the story that it was named Final because the team meant it as their last project, while granting that they had their backs to the wall.WebFamitsu, Sakaguchi talk 2015 · 1UP, Sakaguchi on FFI
How we know
最初は“ファイティングファンタジー”というタイトルにするつもりだったが、同名のボードゲームがあったため、変更したという … 確かに当時は背水の陣だったけれど、Fで始まる単語ならなんでもよかった
section 『ファイナルファンタジー』の誕生 · archived copy ↗ it was called Fighting Fantasy at the very start of it
Sakaguchi on Square's team system · archived copy ↗ The quote matches our archived copy.
- ^Wired's Chris Kohler reported in 2009 that Nobuo Uematsu told him Sakaguchi was going to quit, but that the real reason for the name was that Square was going bankrupt and the designers believed the game would be the company's swan song.WebWired, Uematsu on the name
How we know
It’s true that Sakaguchi was going to quit, he said, but the bigger reason, the real reason, was that Square was going to go bankrupt and the designers believed that it would be the company’s swan song.
paragraph beginning "So I asked Uematsu" · archived copy ↗ The quote matches our archived copy.
- ^Final Fantasy rolls once per swing against a single hit chance that already has the defender's evade subtracted; Final Fantasy II splits that into two sets of rolls, the attacker's against its hit % and the defender's against its evade %, and subtracts the defender's successes from the attacker's.CodeDisch, FF1 disassembly · everything8215, FF2 disassembly
How we know
4378 LDA #MATHBUF_HITCHANCE ; add their hit rate to their hit chance ⋮ 4388 LDX btl_defender_evade ; the hit chance.
Final Fantasy Disassembly/bank_0C.asm lines 4377–4399 at cbb87d3 · upstream ↗ 4474 LDX #200 4475 JSR RandAX ; [0,200] ⋮ 4484 JSR RandAX ⋮ 4493 CMP math_randhit ; if hit chance is < randhit value, then this was a miss. Jump ahead
Final Fantasy Disassembly/bank_0C.asm lines 4471–4494 at cbb87d3 · upstream ↗ 162600C/AFF9: 20 2C BC JSR $BC2C ; check for hit ⋮ 162660C/B006: B1 A1 LDA ($A1),Y ; target's evade multiplier ⋮ 162690C/B00B: B1 A1 LDA ($A1),Y ; target's evade % ⋮ 162790C/B020: 20 2C BC JSR $BC2C ; check for hit ⋮ 162850C/B02C: A5 52 LDA $52 ; subtract evaded hits
ff2j.asm lines 16260–16290 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.
- ^Square Electronic Arts announced in February 2003 that Final Fantasy Origins, PlayStation remakes of Final Fantasy and Final Fantasy II, would ship in North America on 8 April 2003.WebGameSpot, Final Fantasy Origins release
How we know
Final Fantasy Origins will begin shipping to North American retailers on April 8. The collection consists of remakes of both Final Fantasy and Final Fantasy II
news item, first paragraph · archived copy ↗ The quote matches our archived copy.
- ^Nintendo of America released Final Fantasy I & II: Dawn of Souls for the Game Boy Advance on 29 November 2004; its Final Fantasy adds four bonus dungeons not in the original.PublisherNintendo, Dawn of Souls press release
How we know
which launches today for Game Boy(R) Advance SP
press release, second paragraph · archived copy ↗ Players will discover a series of four bonus dungeons not found in the original game.
press release, on Final Fantasy I · archived copy ↗ The quote matches our archived copy.
Checked by a second AI model, 2026-10-27.
- ^Square Enix's Japanese site dates the Pixel Remaster of Final Fantasy, with those of Final Fantasy II and III, to 29 July 2021, on Steam and smartphones.PublisherSquare Enix, Pixel Remaster site
How we know
2021/7/29 Steam®/スマートフォンで本日発売! 『ファイナルファンタジー』 『ファイナルファンタジーII』 『ファイナルファンタジーIII』
news, entry for 2021/7/29 · archived copy ↗ The quote matches our archived copy.
Checked by a second AI model, 2026-10-27.
Sources
Code
- Disch. 2019. “Final Fantasy Disassembly.” Commit cbb87d3. BenWenger/FinalFantasyDisassembly @ cbb87d3 · licence, all uses
- 1990. “Final Fantasy (USA).” · licence, all uses
- everything8215. 2022. “Final Fantasy II (NES) disassembly and ROM info.” Commit 8d26190. everything8215/ff2 @ 8d26190 · licence, all uses
Primary
- Co., Nintendo and Ltd. 2009. “VC ファイナルファンタジー (Wii Virtual Console product page).” Nintendo Wii Virtual Console, VC ファイナルファンタジー, game introduction page. Nintendo Co., Ltd. original · archived · licence, all uses
- America, Nintendo of. n.d. “NES Games (Nintendo of America release list).” Nintendo of America. original · archived · licence, all uses
- America, Nintendo of. 1990. “Final Fantasy Explorer's Handbook (NES instruction booklet, North America).” Nintendo of America. original · archived · licence, all uses
- Kevin, Gifford, and Sakaguchi, Hironobu. 2011. “Hironobu Sakaguchi on Final Fantasy I's Roller-Coaster Development.” 1UP.com. Ziff Davis. original · archived · licence, all uses
- Co., Square Enix and Ltd. 2004. “Titles of game software with worldwide shipments exceeding 1 million copies (as of 31 March 2003).” Square Enix IR explanatory material, p. 27. Square Enix Co., Ltd. original · archived · licence, all uses
- Hironobu, Sakaguchi, and Coxon, Sachi. 1998. “Interview with Hironobu Sakaguchi (Shūkan Famitsu, 5 June 1998).” Shūkan Famitsu, 5 June 1998; English translation hosted at playstationjapan.tripod.com. ASCII Corporation. original · archived · licence, all uses
- America, Nintendo of. 2004. “Nintendo Ships Final Fantasy I & II: Dawn of Souls (press release).” Nintendo of America press release, reproduced by Nintendo World Report. Nintendo of America. original · archived · licence, all uses
- Co., Square Enix and Ltd. 2021. “ファイナルファンタジー ピクセルリマスター (official site news).” FINAL FANTASY PIXEL REMASTER official Japanese site, news. Square Enix Co., Ltd. original · archived · licence, all uses
Secondary
- Famicom Tsushin editors. 1987. “Famicom Tsushin, no. 39 (25 December 1987): Final Fantasy cross review.” Famicom Tsushin (ファミコン通信), no. 39, pp. 18-19. ASCII Corporation. original · archived · licence, all uses
- Electronic Gaming Monthly editors and Hirata, Yusuke. 1994. “Electronic Gaming Monthly, issue 63 (October 1994): Final Fantasy III feature and Square interview.” Electronic Gaming Monthly, issue 63, p. 172. Ziff Davis. original · archived · licence, all uses
- Nintendo Power editors. 1990. “Final Fantasy (Nintendo Power Player's Strategy Guide, Volume 17).” Nintendo Power, vol. 17 (Player's Strategy Guide, Final Fantasy). Nintendo of America. original · archived · licence, all uses
- OnoKenji and Terada, Kenji. 2016. “ゲームシナリオライターの活躍する場は無限大/寺田 憲史氏を迎えて開催されたSIG-GSセミナーレポート.” IGDA Japan, SIG-GS seminar report, 15 December 2016 (seminar held 26 November 2016 at Toyo Art School). NPO IGDA Japan. original · archived · licence, all uses
- Justin, Calvert,. 2003. “Final Fantasy Origins release date announced.” GameSpot news. CNET Networks. original · archived · licence, all uses
- staff, Famitsu and Sakaguchi, Hironobu. 2015. “『FF』はどのように世界に広がっていったのか? 坂口博信氏と浜村弘一ファミ通グループ代表が“国際日本ゲーム研究カンファレンス”にて語る.” Famitsu.com, report of the keynote talk at the International Japan Game Studies Conference, Ritsumeikan University, 23 May 2015. KADOKAWA / Famitsu. original · archived · licence, all uses
- Chris, Kohler,. 2009. “Why's It Called 'Final Fantasy'? Uematsu Explains.” Wired.com, Game|Life. Condé Nast. original · archived · licence, all uses