Final Fantasy I & II: Dawn of Souls:ROM map

From Data Crystal
Revision as of 11:00, 20 March 2017 by Kea (talk | contribs)
Jump to navigation Jump to search

The following offsets have been determined for Final Fantasy I only. All offsets are given in hexadecimal format. All currently described ASM routines are in Thumb mode.

Formatting: No Formatting -- Code or data's purpose and functionality are unknown

Italics -- Area's general purpose is known but its workings are not well understood.

Bold -- Area's purpose and functionality are more or less fully understood

Bold & Italics --- Refers to "root" routines that handle medium-to-high level tasks and usually call many smaller routines

(Under Construction)

General Purpose Routines

Core Routines:

  • 000EFC-000F81 (000086) = Core division-related routines
  • 000F18 = General division routine. Given r0 = divident and r1 = divisor, checks for zero and calls software division
  • 000F2C = As above, but only returns remainder in r0
  • 000F68 = Divides r1 by r2; stores the product in [r0],[r0+8] and the remainder in [r0+4]


Game-Specific Routines:

  • 014E4C-014E6B (000020) = Uncompressed tile graphic size finder routine
  • 014E6C-0158E7 (000A7C) = Unknown (Short ASM routines)
  • 0158E8-0158FB (000014) = Chest State Determination Routine
  • 0158FC-01591B (000020) = Unknown ASM Routine (reads $02001DF0)

FF1 Stat Routines

  • 01591C-0159B3 (000098) = Total Attack Determination
  • 0159B4-015ACB (000118) = Total Defence Determination
  • 015ACC-015B8F (0000C4) = Total Evade Determination
  • 015B90-015C23 (000094) = Effective Max HP Determination
  • 015C24-015CB7 (000094) = Effective Max MP Determination
  • 015CB8-015D4B (000094) = Total Intellect Determination
  • 015D4C-015DDF (000094) = Total Agility Determination
  • 015DE0-015E73 (000094) = Total Stamina Determination
  • 015E74-015F07 (000094) = Total Strength Determination
  • 015F08-015F43 (00003C) = Current HP/MP Determination (And Possible Truncation)
  • 015F44-015F83 (000040) = Total Accuracy Determination

FF1 Animation Routines

  • 01E2FC-01E8C3 (0005C8) = Root Spell/Weapon Animation Handling
  • 01E8C4-01F12F (00086C) = Unknown Routines
  • 01F130-01F1A3 (000074) = Conditional Animation Effect Handling
  • 01F1A4-01F743 (0005A0) = Animation Chunk Storage Routine
  • 01F744-02B4B3 (00BD70) = Unknown/Animation-related routines; exact function undetermined
  • 02B4B4-02BE3F (00098C) = Unknown Routines

FF1 Text, Menu and Field Spell Routines

  • 02BE40-02BF7F (000140) = Base Menu Window Drawing Routine
  • 02BF80-02C0C3 (000144) = Base Text Printing Routine
  • 02C0C4-02C43F (00037C) = Two Unknown Routines
  • 02C440-02C7A7 (000368) = Base Number Printing Routine
  • 02C7A8-0302BB (003B14) = Unknown
  • 0302BC-0304DB (000220) = Out-of-Battle Spell Usability Pointer Table+Routines
  • 0304DC-0308BB (0003E0) = Out-of-Battle Spell Effect Pointer Table+Routines
  • 0308BC-038917 (00805C) = Unknown
  • 038918-039347 (000A30) = Root Status Screen Drawing Routine
  • 039348-03A1A7 (000E60) = Unknown Routines
  • 03A1A8-03A26B (0000C4) = Out-of-Battle Healing Spell Base Healing Determination
  • 03A26C-03A2FF (000094) = Armor Equipping: Writing to Memory
  • 03A300-03A37F (000080) = Armor Removing: Adding to Inventory

FF1 Shopping Routines

  • 043910-04465F (000D50) = Root Buying Window Logic
  • 044660-044B83 (000524) = Unknown Routines
  • 044B84-044BCB (000048) = Item/Armor/Weapon Sorting Order Loading Routine
  • 044BCC-044C3B (000070) = Buying: Does item already exist among team's gear?
  • 044C3C-044C6F (000034) = Buying: Does item already exist in inventory?
  • 044C70-0454E3 (000874) = Root Spell Buying Routine?
  • 0454E4-0456A3 (0001C0) = Spell Buying: Can purchaser learn this spell?
  • 0456A4-0456E3 (000040) = Class Usability for Given Spell Determination
  • 0456E4-045F9B (0008B8) = Unknown Routines
  • 045F9C-04714B (0011B0) = Root Buying/Selling Screen Drawing Routine
  • 04714C-0471DB (000090) = Unknown Shopping-Related Routine
  • 0471DC-047813 (000638) = Root Shop Data Loading Routine?

FF1 Encounter Selection and Chest Routines

  • 05AF34-05B1EF (0002BC) = Root Map Feature Data Loading and Processing Routine
  • 05B1F0-05B277 (000088) = Map Feature Chunk Processing: Special Tiles and Objects
  • 05B278-05B533 (0002BC) = Root Map Setup Routine?
  • 05B534-05B9E3 (0004B0) = Root Encounter Checker and Selector
   05B5BE = Overworld Encounter RN Check
   05B5D8 = OW Type Encounter Handling:
       05B626 = Normal world map area
       05B630 = Rivers
       05B638 = Ocean/shipside
       05B640 = Deserts
       05B64E = Swamps
   05B83E = Normal Dungeon Handling
   05B85C = Soul of Chaos Dungeon Handling
  • 05B9E4-05C4BF (000ADC) = Unknown Routines
  • 05C4C0-05C6A7 (0001E8) = Root Chest Opening Handling
  • 05C6A8-05C833 (00018C) = Unknown Routines
  • 05C834-05CA33 (000200) = Chest Logic Part 2?

FF1 Misc Routines 1

  • 0669B8-066A07 (000050) = Check for Fixed Encounter Square
  • 066A08-0696AB (002CA4) = Unknown
  • 0696AC-0696C3 (000018) = RNG Increment Subroutine
  • 0696C4-06981F (00015C) = Unknown
  • 069820-06A007 (0007E8) = Root Encounter Data Loading Routine
  • 06A008-06A190 (000188) = Unknown
  • 06A190-06A323 (000194) = Levelup: Determination of Gain/Strong Increase in one Stat
   06A1E0 = If gain not guranteed, roll 1/8 chance
   06A234 = HP Gain code
   06A264 = Warrior, Thief, Monk, Master cannot gain MP
   06A270 = MP Gain code

FF1 Battle Routines

Battle Menus

  • 06C26C-06C4A3 (000238) = Unknown (Loading equipped item's associated spell?)
  • 06C4A4-06CBD3 (000730) = Unknown Routines
  • 06CBD4-06D013 (000440) = In Battle: Populating Equip Menu
  • 06D014-06D1DF (0001CC) = Unknown Routines
  • 06D1E0-06D4B3 (0002D4) = Root Spell Menu Waiting Loop
  • 06D4B4-06DC5F (0007AC) = Root Physical Attack Animation Handling?
  • 06DC60-06DEFF (0002A0) = Unknown Animation-Related Routine (run when PC turn comes up, when opening battle menus...)
  • 06DF00-06EC5B (000D5C) = Unknown Routines
  • 06EC5C-06ED4F (0000F4) = In-Battle: Party Member HP Printing (and Tinting) Routine
  • 06ED50-06EFCF (000280) = In Battle: Party Member Name or Status Printing Routine
  • 06EFD0-06F08B (0000BC) = In Battle: Print Names of All Living Monster Types
  • 06F08C-06F1D7 (00014C) = In-Battle: Item Menu Population & Usability Determination
  • 06F1D8-06F2EF (000118) = In-Battle: Spell Menu Population & Usability Determination
  • 06F2F0-06F35F (000070) = In-Battle Spell Usability Routine
  • 06F360-06F46F (000110) = In-Battle Spell Menu: MP Info Box Writing Routine
  • 06F470-06F68B (00021C) = In-Battle Equip Menu: Equipment/Stats Names/Values Writing Routine"
  • 06F68C-06F7E3 (000158) = In-Battle Equip Change Submenu: Gear Names Printing
  • 06F7E4-06FB7B (000398) = Equip Change Submenu: Compare Current and Replacement Gear+Print
  • 06FB7C-06FC8B (000110) = Root Monster Listing / Player Name&HP / Player MP Text Update Routine
  • 06FC8C-06FDFB (000170) = In-Battle Equipment Swapping Handler
  • 06FDFC-06FEC7 (0000CC) = Printing Text for In-Battle Description Boxes?

Turn Structure and Graphics

  • 06FEC8-06FF1F (000058) = Inbattle Item Use: Storing Item ID/Type/Position to Memory
  • 06FF20-06FFBB (00009C) = Monster Listing Updater
  • 06FFBC-070027 (00006C) = Unit Check: Can Unit Act?
  • 070028-070127 (000100) = PC Pose Determination (store ROM data to memory)
  • 070128-070213 (0000EC) = PC Pose Determination 2 (store to unit data)
  • 070214-07028B (000078) = Unit can be Targeted Check Routine
  • 07028C-07040B (000180) = Post-Attack Action Cancel Check: Death/Stone, Sleep/Stun, Silence
  • 07040C-0704F3 (0000E8) = Root Monster Targeting Routine
  • 0704F4-07054B (000058) = PC Sprite Movement Parameters Handling Routine?
  • 07054C-0706FF (0001B4) = PC Sprite Movement/Animation Handling?
  • 070700-070897 (000198) = Unit X-Coord (with modifiers) Finder
  • 070898-070A5B (0001C4) = Unit Y-Coord (with modifiers) Finder
  • 070A5C-070B1F (0000C4) = Monster Palette Switching Routine
  • 070B20-070D67 (000248) = Acting Monster Palette Cycling Routine
  • 070D68-070E5F (0000F8) = Monster GFX Horizontal Flip Routine
  • 070E60-070EFB (00009C) = Multitargeting Pointers Handler Routine
  • 070EFC-0710FB (000200) = Multitargeting Routine - Determine Pointers' Positions?
  • 0710FC-07114F (000054) = (Called when exiting a multitarget selection)
  • 071150-071457 (000308) = Root "Miss"/Damage/Healing Numbers Printing Handling
  • 071458-0716EB (000294) = Physical Attack Animation Setup Routine
  • 0716EC-071827 (00013C) = Status Ailment Bubble Placement Routine
  • 071828-0718F3 (0000CC) = Post-Recovery Displayed Ailment Recalculation
  • 0718F4-0719AB (0000B8) = Status Ailment Bubble Redrawing
  • 0719AC-071A3B (000090) = PC Blink/Invis Effect Checking+Redrawing Routine
  • 071A3C-071B93 (000158) = Sleep/Paralyze Recovery Step (and optional redrawing)
  • 071B94-071BE3 (000050) = Animation Params Copying (called when a unit is affected by anything)
  • 071BE4-071C8B (0000A8) = Unknown Routines
  • 071C8C-071D3F (0000B4) = Victory Message: Text + Number String Construction Routine
  • 071D40-071E1F (0000E0) = Unknown (Periodic PC GFX-related routine)
  • 071E20-071EC7 (0000A8) = Unknown (Periodic routine; calls the above)
  • 071EC8-0720EF (000228) = Player Character Inbattle Stats Updater Routine
  • 0720F0-072173 (000084) = Monster Inbattle Stats Updater Routine
  • 072174-07221F (0000AC) = Unknown Routine
  • 072220-072357 (000138) = Graphics-Related Routine (called twice at battle start)