Welcome to Data Crystal's new home! Data Crystal is now part of the TCRF family (sort of).
The wiki has recently moved; please report any issues in Discord. Pardon the dust.

Final Fantasy I & II: Dawn of Souls/Notes: Difference between revisions

From Data Crystal
Jump to navigation Jump to search
(Starting the notes page off with the main consumable+weapon data structs)
 
m (Xkeeper moved page Final Fantasy I & II: Dawn of Souls:Notes to Final Fantasy I & II: Dawn of Souls/Notes: normalize subpages and titles)
 
(17 intermediate revisions by 2 users not shown)
Line 2: Line 2:




ROM Data Formats
=Bitfields and IDs=
----
[[Final_Fantasy_I_%26_II:_Dawn_of_Souls:Bitfields__and_IDs|Bitfields and IDs]]


== Items, Weapons and Armor Data ==
=FF1 Animation Scripting Format=
''Item Data Table''
[[Final_Fantasy_I_%26_II:_Dawn_of_Souls:FF1_Animation_Scripting|FF1 Animation Script Commands]]


0x19F07C — 0x19F33B
=Event Script Commands=
[[Final_Fantasy_I_%26_II:_Dawn_of_Souls:Script_Commands|Command Table]]


16*44
=Vehicle Starting Location=
  '''0x0-0x1''': Sorting Order
  0x65278 Ship start location (X), 32 bits (=0x00000cb8)
0x6527C Ship start location (Y), 32 bits (=0x00000928)
0x65280 Airship start location (X), 32 bits (=0x00000d68)
0x65284 Airship start location (Y), 32 bits (=0x00000e68)


'''0x2''': Effect
--------------------------------
$00 Sleep/Tent/Cottage effect
$00 Sleep/Tent/Cottage effect
$01 Max HP up by Power*10
$02 Max MP up by Power
$03 Strength up by [1..Power]
$04 Stamina up by [1..Power]
$05 Intellect up by [1..Power]
$06 Agility up by [1..Power]
$07 Luck up by [1..Power]
$08 Giant Tonic
$09 Faerie Tonic
$0A Strength Tonic
$0B Protect Drink
$0C Speed Drink
$0D Restore HP
$0E Restore MP
$0F Elixir/Megalixir (0 or 1)
$10 Phoenix Down
$11 Remedy
$12 Use (Power)th Spell effect


'''0x3''': Targeting
=ROM Data Formats=
--------------------------------
==Monsters==
0x00 Automatic
'''''Monster Data Tables'''''
0x01 All Enemies
0x02 One Enemy
0x04 User
0x08 All Allies
0x10 One Ally


  '''0x4''': Usage
  0×1DE044 — 0×1DF8A3: Bestiary
  --------------------------------
  0×223F4C — 0×2257AB: Monster Stats (mid-battle)
  $1 Field
  0×227054 — 0×2288B3: Monster Stats (battle start)
  $2 Battle
  0×22A880 — 0×22C0DF: Check for Regenerating family; Load Morale when PCs Flee; awarding XP/Gil/item drops on death
  $4 Anytime
  32*195


'''0x5''': Animation (PC Casters only; monsters use Spell ID as index)
All four tables are identical in and of themselves.
'''0x6-0x7''': Power
'''0x8-0xB''': Purchase Cost
'''0xC-0xF''': Sale Price


''Class Equip Bits''
0x00-01: EXP given
0x01 Knight/Paladin
0x02-03: Gil given
0x02 Thief/Ninja
0x04-05: Max HP
0x04 Monk/Master
0x06: Morale
0x08 Red Mage/Wizard
0x07: AI Index (unused)
0x10 White Mage/Wizard
0x08: Evasion
0x20 Black Mage/Wizard
0x09: Defence
0x0A: Number of hits
0x0B: Accuracy
0x0C: Attack
0x0D: Agility
0x0E: Intellect
0x0F: Critical Rate
0x10-11: Status Attack Element
0x12: Status Attack Ailment
0x13: Monster Family
0x14: Magic Defense
0x15: (Unused/Padding)
0x16-17: Elemental Weakness(es)
0x18-19: Elemental Resistance(s)
0x1A: Item Drop Type
0x1B: Dropped Item sub-ID
0x1C: Drop Chance (%)
0x1D-1F: (Unused/Padding)


''Weapon Data Table''
'''''Monster Attack Animation Table'''''


0x19F33C 0x19FA75
0x223540 0x223603
1*195


28*65
  0x00: Attack Animation ID - 0x2D
  '''0x00-0x01''': Sorting Order


'''0x02''': Who Equips (Base classes)
'''''Monster AI Index Table'''''
'''0x03''': Who Equips (Advanced classes)
  0x22F0B8 — 0x22F17A
  '''0x04''': Attack
1*195
'''0x05''': Accuracy
 
  '''0x06''': Evade
'''''Monster AI Definitions'''''
  '''0x07''': Spell cast when used
  0x22F17C — 0x22F5CB
  '''0x08-09''': Elemental infusion
16*69
  '''0x0A''': Monster Family effectiveness
 
  '''0x0B''': Strength Modifier
0x00: Chance to cast a spell, out of 200; can't cast if Silenced
  '''0x0C''': Stamina Modifier
  0x01: Chance to cast a monster ability, out of 128, if a spell wasn't cast
'''0x0D''': Agility Modifier
  0x02-09: Spell queue. Each spell in the queue is cast in order. When an FF byte is reached, the queue loops
  '''0x0E''': Intellect Modifier
  0x0A: FF terminator
'''0x0F''': Critical Rate (chance out of 200)
  0x0B-0E: Ability queue. Expressed as (Spell ID - 0x41), so Icestorm 1 is the first legal ability
'''0x10''': HP Boost (%)
  0x0F: FF terminator
  '''0x11''': MP Boost (%)
 
  '''0x12-13''': [Unused]
'''''Monster GFX Pointer Table'''''
  '''0x14-17''': Purchase Cost
0x2227DC — 0x2230FF
  '''0x18-1B''': Sale Price
12*195
 
0x0: Palette Pointer
0x4: Tile Arrangement Data Pointer
  0x8: Monster tile Data Pointer
 
'''''Monster Size Table'''''
 
0x223644 — 0x223706
1*195
 
0x00: Monster Size
  $00: Small (eg Goblin)
  $01: Big (eg Troll)
  $02: Fiend/Chaos
  $03: Soul of Chaos Boss
 
==TSA/Tile Arrangement==
All TSA data begins with a 12-byte header.
Bytes +$4-$5 indicate how many TSA tiles are in this TSA structure.
Byte +$6 indicates how large each TSA tile is in bytes by indexing to a table at 0x81AE280
Other values in the header are of unknown use.
Each TSA tile follows the usual GBA format for TSA:
Each TSA tile is two bytes; top nybble is palette ID; next two bits define flips:
+ 400  horizontal flip
+ 800  vertical flip
The remaining 10 bits index to the 8x8 tile graphics found in raw GFX data.
 
===TSA in maps===
All tiles in maps in Final Fantasy 1 are in units of 16x16 tiles. To construct these tiles, the game assembles two layers of 8x8 physical tiles, one for a background and the other for a foreground.
 
When given a Tile ID:
Take low 4 bits, multiply by 4
Take upper 12 bits, multiply by 256
  Add together, add to TSA tile pointer
If map type is 0x1 and you're outside a room, add (0x1000); save result in r12
    This way, if you're in a room or not you'll load different GFX
load [r12], [r12+2] (top left/right of tile)
  load [r12+0x80], [r12+0x82] (bottom left/right of tile)
  Storing to tile map as 'background' tiles
 
load [r12+0x40], [r12+0x42]
  load [r12+0xC0], [r12+0xC2] - These are for the 'foreground' tiles
 
{{Internal Data|game=Final Fantasy I & II: Dawn of Souls}}

Latest revision as of 02:41, 24 January 2024

Chip tiny.png The following article is a Notes Page for Final Fantasy I & II: Dawn of Souls.


Bitfields and IDs

Bitfields and IDs

FF1 Animation Scripting Format

FF1 Animation Script Commands

Event Script Commands

Command Table

Vehicle Starting Location

0x65278 Ship start location (X), 32 bits (=0x00000cb8)
0x6527C Ship start location (Y), 32 bits (=0x00000928)
0x65280 Airship start location (X), 32 bits (=0x00000d68)
0x65284 Airship start location (Y), 32 bits (=0x00000e68)


ROM Data Formats

Monsters

Monster Data Tables

0×1DE044 — 0×1DF8A3: Bestiary
0×223F4C — 0×2257AB: Monster Stats (mid-battle)
0×227054 — 0×2288B3: Monster Stats (battle start)
0×22A880 — 0×22C0DF: Check for Regenerating family; Load Morale when PCs Flee; awarding XP/Gil/item drops on death
32*195

All four tables are identical in and of themselves.

0x00-01: EXP given
0x02-03: Gil given
0x04-05: Max HP
0x06: Morale
0x07: AI Index (unused)
0x08: Evasion
0x09: Defence
0x0A: Number of hits
0x0B: Accuracy
0x0C: Attack
0x0D: Agility
0x0E: Intellect
0x0F: Critical Rate
0x10-11: Status Attack Element
0x12: Status Attack Ailment
0x13: Monster Family
0x14: Magic Defense
0x15: (Unused/Padding)
0x16-17: Elemental Weakness(es)
0x18-19: Elemental Resistance(s)
0x1A: Item Drop Type
0x1B: Dropped Item sub-ID
0x1C: Drop Chance (%)
0x1D-1F: (Unused/Padding)

Monster Attack Animation Table

0x223540 — 0x223603
1*195
0x00: Attack Animation ID - 0x2D

Monster AI Index Table

0x22F0B8 — 0x22F17A
1*195

Monster AI Definitions

0x22F17C — 0x22F5CB
16*69
0x00: Chance to cast a spell, out of 200; can't cast if Silenced
0x01: Chance to cast a monster ability, out of 128, if a spell wasn't cast
0x02-09: Spell queue. Each spell in the queue is cast in order. When an FF byte is reached, the queue loops
0x0A: FF terminator
0x0B-0E: Ability queue. Expressed as (Spell ID - 0x41), so Icestorm 1 is the first legal ability
0x0F: FF terminator

Monster GFX Pointer Table

0x2227DC — 0x2230FF
12*195
0x0: Palette Pointer
0x4: Tile Arrangement Data Pointer
0x8: Monster tile Data Pointer

Monster Size Table

0x223644 — 0x223706
1*195
0x00: Monster Size
 $00: Small (eg Goblin)
 $01: Big (eg Troll)
 $02: Fiend/Chaos
 $03: Soul of Chaos Boss

TSA/Tile Arrangement

All TSA data begins with a 12-byte header.

Bytes +$4-$5 indicate how many TSA tiles are in this TSA structure.
Byte +$6 indicates how large each TSA tile is in bytes by indexing to a table at 0x81AE280
Other values in the header are of unknown use.

Each TSA tile follows the usual GBA format for TSA:

Each TSA tile is two bytes; top nybble is palette ID; next two bits define flips:
+ 400   horizontal flip
+ 800   vertical flip
The remaining 10 bits index to the 8x8 tile graphics found in raw GFX data.

TSA in maps

All tiles in maps in Final Fantasy 1 are in units of 16x16 tiles. To construct these tiles, the game assembles two layers of 8x8 physical tiles, one for a background and the other for a foreground.

When given a Tile ID:

Take low 4 bits, multiply by 4
Take upper 12 bits, multiply by 256
Add together, add to TSA tile pointer
If map type is 0x1 and you're outside a room, add (0x1000); save result in r12
   This way, if you're in a room or not you'll load different GFX
load [r12], [r12+2] (top left/right of tile)
load [r12+0x80], [r12+0x82] (bottom left/right of tile)
Storing to tile map as 'background' tiles
load [r12+0x40], [r12+0x42]
load [r12+0xC0], [r12+0xC2] - These are for the 'foreground' tiles