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

From Data Crystal
Jump to navigation Jump to search
(Adding Armor data; separating IDs and bitfields from their associated data structs)
 
(15 intermediate revisions by 2 users not shown)
Line 2: Line 2:
  
  
==Bitfields and IDs==
+
=Bitfields and IDs=
===Bitfields===
+
[[Final_Fantasy_I_%26_II:_Dawn_of_Souls:Bitfields__and_IDs|Bitfields and IDs]]
  
'''''Class Equip Bits'''''
+
=FF1 Animation Scripting Format=
$01 Knight/Paladin
+
[[Final_Fantasy_I_%26_II:_Dawn_of_Souls:FF1_Animation_Scripting|FF1 Animation Script Commands]]
0x02 Thief/Ninja
 
0x04 Monk/Master
 
0x08 Red Mage/Wizard
 
0x10 White Mage/Wizard
 
0x20 Black Mage/Wizard
 
  
'''''Element Bits'''''
+
=Event Script Commands=
0x01 Paralysis
+
[[Final_Fantasy_I_%26_II:_Dawn_of_Souls:Script_Commands|Command Table]]
0x02 Stone
 
0x04 Time
 
0x08 Death
 
0x10 Fire
 
0x20 Ice
 
0x40 Lightning
 
0x80 Quake
 
0x100 Poison
 
0x200 Darkness
 
0x400 Sleep
 
0x800 Silence
 
0x1000 Confuse
 
0x2000 Mind
 
  
'''''Status Effect Bits'''''
+
=Vehicle Starting Location=
  0x01 Death
+
  0x65278 Ship start location (X), 32 bits (=0x00000cb8)
  0x02 Stone
+
  0x6527C Ship start location (Y), 32 bits (=0x00000928)
  0x04 Poison
+
  0x65280 Airship start location (X), 32 bits (=0x00000d68)
  0x08 Blind
+
  0x65284 Airship start location (Y), 32 bits (=0x00000e68)
0x10 Stun
 
0x20 Sleep
 
0x40 Silence
 
0x80 Confusion
 
  
'''''Monster Family Bits'''''
 
0x01 Magical
 
0x02 Dragon
 
0x04 Giant
 
0x08 Undead
 
0x10 Werebeast
 
0x20 Aquatic
 
0x40 Spellcaster
 
0x80 Regenerating
 
  
===IDs===
+
=ROM Data Formats=
'''''Spell Type IDs'''''
+
==Monsters==
0x00 Warp/Exit
+
'''''Monster Data Tables'''''
0x01 Damage
 
0x02 Damage (Undead targets only)
 
0x03 Inflict negative status
 
0x04 Hits down
 
0x05 Morale down
 
0x06 (Unused)
 
0x07 Healing
 
0x08 Cure negative status
 
0x09 Defense up
 
0x0A Increase Elemental resistance
 
0x0B Attack, Hit Rate up
 
0x0C Increase Hit Multiplier
 
0x0D Attack up
 
0x0E Evade% down
 
0x0F HP Max
 
0x10 Evade% up
 
0x11 Nullify resistances
 
0x12 Inflict status (<300HP = 100% success)
 
0x13 Heal Fixed HP or MP
 
Heals HP, MP or both equal to the spell's Power 1.
 
Power 2 determines which to heal:
 
$01 - HP
 
$02 - MP
 
$03 - Both
 
0x14 Boost Max HP
 
0x15 Boost Max MP
 
0x16 Hit Rate up
 
0x17 Damage = Power 1
 
  
'''''Item Effect IDs'''''
+
  0×1DE044 — 0×1DF8A3: Bestiary
  $00 Sleep/Tent/Cottage effect
+
  0×223F4C — 0×2257AB: Monster Stats (mid-battle)
  $01 Max HP up by Power*10
+
  0×227054 — 0×2288B3: Monster Stats (battle start)
$02 Max MP up by Power
+
  0×22A880 — 0×22C0DF: Check for Regenerating family; Load Morale when PCs Flee; awarding XP/Gil/item drops on death
$03 Strength up by [1..Power]
+
  32*195
$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
 
  
'''''Battle Background IDs'''''
+
All four tables are identical in and of themselves.
$00 Fields
 
$01 Badlands
 
$02 Forest
 
$03 Burned Forest
 
$04 Deep Forest
 
$05 River
 
$06 Waterfall
 
$07 Lake
 
$08 Swamp
 
$09 Marsh
 
$0A Desert
 
$0B Ship
 
$0C Earth Cave
 
$0D Earth Cave Altar
 
$0E Sunken Shrine
 
$0F Sunken Shrine Altar
 
$10 Chaos Shrine
 
$11 Chaos Temple
 
$12 Chaos
 
$13 Giant's Cave
 
$14 Mt. Gulg
 
$15 Mt. Gulg Altar
 
$16 Ice Cave
 
$17 Citadel of Trials
 
$18 Mirage Tower
 
$19 Waterfall Cave
 
$1A Castle
 
$1B Marsh Cave
 
$1C Floating Fortress
 
$1D Floating Fortress Altar
 
$1E City
 
$1F Lava Shrine
 
$20 Dark Woods
 
$21 Sunset Plains
 
$22 Sunset Lake
 
$23 Sunset Forest
 
$24 Sunset Desert
 
$25 Sunset Marsh
 
$26 Sunset Swamp
 
  
==ROM Data Formats==
+
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)
  
===Items, Weapons and Armor Data===
+
'''''Monster Attack Animation Table'''''
'''''Item Data Table'''''
 
  
0x19F07C 0x19F33B
+
0x223540 0x223603
 +
1*195
  
16*44
+
  0x00: Attack Animation ID - 0x2D
  '''0x0-0x1''': Sorting Order
 
'''0x2''': Item Effect
 
'''0x3''': Targeting
 
  
'''0x4''': Usage
+
'''''Monster AI Index Table'''''
  --------------------------------
+
  0x22F0B8 — 0x22F17A
  $1 Field
+
  1*195
$2 Battle
 
$4 Anytime
 
  
'''0x5''': Animation (PC Casters only; monsters use Spell ID as index)
+
'''''Monster AI Definitions'''''
'''0x6-0x7''': Power
+
  0x22F17C — 0x22F5CB
  '''0x8-0xB''': Purchase Cost
+
  16*69
  '''0xC-0xF''': Sale Price
 
  
 +
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
  
'''''Weapon Data Table'''''
+
'''''Monster GFX Pointer Table'''''
 +
0x2227DC — 0x2230FF
 +
12*195
  
0x19F33C — 0x19FA75
+
0x0: Palette Pointer
 +
0x4: Tile Arrangement Data Pointer
 +
0x8: Monster tile Data Pointer
  
28*65
+
'''''Monster Size Table'''''
  
  '''0x00-0x01''': Sorting Order
+
  0x223644 — 0x223706
  '''0x02''': Who Equips (Base classes)
+
  1*195
'''0x03''': Who Equips (Advanced classes)
 
'''0x04''': Attack
 
'''0x05''': Accuracy
 
'''0x06''': Evade
 
'''0x07''': Spell cast when used
 
'''0x08-09''': Elemental infusion
 
'''0x0A''': Monster Family effectiveness
 
'''0x0B''': Strength Modifier
 
'''0x0C''': Stamina Modifier
 
'''0x0D''': Agility Modifier
 
'''0x0E''': Intellect Modifier
 
'''0x0F''': Critical Rate (chance out of 200)
 
'''0x10''': HP Boost (%)
 
'''0x11''': MP Boost (%)
 
'''0x12-13''': [Unused]
 
'''0x14-17''': Purchase Cost
 
'''0x18-1B''': Sale Price
 
  
'''''Armor Data Table'''''
+
0x00: Monster Size
 +
  $00: Small (eg Goblin)
 +
  $01: Big (eg Troll)
 +
  $02: Fiend/Chaos
 +
  $03: Soul of Chaos Boss
  
0x19FA58 — 0x1A021B
+
==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.
  
28*71
+
===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.
  
'''0x00-01''': Sorting Order
+
When given a Tile ID:
  '''0x02''': Who equips (base classes)
+
  Take low 4 bits, multiply by 4
  '''0x03''': Who equips (advanced classes)
+
  Take upper 12 bits, multiply by 256
  '''0x04''': Defence
+
  Add together, add to TSA tile pointer
  '''0x05''': Weight
+
  If map type is 0x1 and you're outside a room, add (0x1000); save result in r12
'''0x06''': Evade
+
    This way, if you're in a room or not you'll load different GFX
  '''0x07''': Spell cast when used
+
  load [r12], [r12+2] (top left/right of tile)
'''0x08-09''': Elemental resistance(s)
+
  load [r12+0x80], [r12+0x82] (bottom left/right of tile)
  '''0x0A''': Strength Modifier
+
  Storing to tile map as 'background' tiles
'''0x0B''': Stamina Modifier
+
 
'''0x0C''': Agility Modifier
+
  load [r12+0x40], [r12+0x42]
'''0x0D''': Intellect Modifier
+
  load [r12+0xC0], [r12+0xC2] - These are for the 'foreground' tiles
'''0x0E''': HP Boost (%)
+
 
  '''0x0F''': MP Boost (%)
+
{{Internal Data|game=Final Fantasy I & II: Dawn of Souls}}
  '''0x10-13''': [Unused]
 
  '''0x14-17''': Purchase Cost
 
'''0x18-1B''': Sale Price
 

Latest revision as of 20:49, 14 July 2019


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


Internal Data for Final Fantasy I & II: Dawn of Souls

ROM MapRAM MapText TableNotesTutorials