Breath of Fire II/ROM map

From Data Crystal
< Breath of Fire II
Revision as of 09:48, 2 January 2017 by Hexad (talk | contribs) (Added item and spell info tables, experience tables, shop data, and game script data.)
Jump to navigation Jump to search

Chip tiny.png The following article is a ROM map for Breath of Fire II.

The following ROM data was obtained from an old Gamefaqs thread (link) by a user called StarryKnights.

Characters starting information

Initial data for the game's characters. Information block starts at x00:087C ($C0:087C) and ends at x00:0D3B ($C0:0D3B) (Assuming no header). 
Each entry is 64 bytes long.  This data follows the RAM PC data setup from the RAM map, though, much of this start up data goes unused.

Layout:

01-04: Character Name
05: Unused (In-game compared to RAM, setting this value to 20 would make the PC sprite into Valerie)
06: Unused (PC Status)
07: Character's PC Number
    00 - Ryu
    01 - Bow
    02 - Rand
    03 - Katt
    04 - Nina
    05 - Jean
    06 - Sten
    07 - Spar
    08 - Bleu
    09 - Kid Ryu
    0A - Kid Bow (Zombie in battle)

08: Initial level
09-10: Unused (Current health)
11-12: Initial Max HP
13-14: Unused (Current AP)
15-16: Initial Max AP
17: Shaman Form
18: Initial Strength
19: Initial Stamina
20-21: Initial Agility
22: Initial Condition
23-24: Initial Weapon (Value 11 tells the game that you have a weapon equipped)
25-26: Initial Shield (Value 21 tells the game that you have a piece of armor equipped)
27-28: Initial Armor (Value 21 tells the game that you have a piece of armor equipped)
29-30: Initial Helmet(Value 21 tells the game that you have a piece of armor equipped)
31-32: Initial Accessory 1 (Although set to 00 00 on most characters, this is bugged as you're not supposed to be able to unequip 'nothing')
33-34: Initial Accessory 2 (Although set to 00 00 on most characters, this is bugged as you're not supposed to be able to unequip 'nothing')
35-36: Unused (Current Attack)
37-38: Unused (Current Defense)
39-40: Unused (Current Vigor)
41: Unused (Current Wisdom)
42-43: Unused (Current Luck)
44: Initial Guts
45: Initial Wisdom Base
46: Initial Luck Base
47-49: Initial EXP
50-64: Unused

There are three sets of characters in this data block. 
First Set: Normal game, for the most part. 
Second Set: Consists solely of Kid Ryu and Kid Bow. Adult Ryu and Adult Bow inherit their stats from their kid forms. (Worth noting if you want to change their starting stats)
Third Set: What I can only surmise are the team's stats during the title screen demos.



Stat gain tables

Stat Gain Tables:
----
Hex offset (HiROM Address)
x05:71B0 - x05:5DEF ($C5:71B0 - $C5:5DEF)

4 bytes, split into 8 half-bytes in this order with a max increase of '15 (F)' per stat: 

Byte 1: HP, AP
Byte 2: Strength, Stamina
Byte 3: Unused, Agility
Byte 4: Wisdom, Luck

Almost every character seems to have extra level gains for levels they don't join at. These are not used at all due to the initial data. 
Also, it seems Bleu's stats uses the Monster Table as her level up data so she doesn't have her 'own' to modify without some serious stat table moving.

Guts gain upon level is consistently the same for every level up.  Each PC's gain starts at: 
x01:8FE5 ($81:8FE5)



Enemy information

Enemy Stats:
----
x05:9000 - 05:A8FF (C5:9000 - C5:A8FF)

Bytes 1-8: Enemy Name
9-10: Max HP
11-12: Max AP
13: Luck
14-15: Attack
16-17: Defense
18-19: Agility
20: Drop rate???
21-22: Experience
23-24: Zenny
25: Item set
26-32: Unknown

For detailed information on how drop rates and item sets work, check out Ben Siron's handbook that explains many of the game's mechanics: link

Spell gains table

Pointers: 5AA00-5AA011

5AA12-5AADE

Pairs of bytes. First is for level the spell is gained on, the second is the spell gained. 00 terminates.

Spell Info Table

584F0-58A20

Each spell is 16 bytes long
Bytes 1-8: Spell Name.
Bytes 9 and 10: Spell cost.
Bytes 11 and 12: These are tricky, the first 15 bits are used for a description pointer, and the
most significant bit appears to be used on spells with beneficial effects(Cure, Antdt, Renew, Etc).
Byte 13: Spell element. These elements are set by bits and are, in order: Ability down, fire, lightning,
       ice/water, wind, unknown/unused, earth, physical/non-elemental.
Byte 14: Targeting and special switches.
 Bit 1: Unknown. used only on the spell 8.0.
 Bit 2: By default, will cast on opposing party.
 Bit 3: Unknown. Used on Dispell, Recover, IdiotLzr, Hunt, and Whodini.
 Bit 4: Usable outside of battle.
 Bit 5: Usable during battle.
 Bit 6: Auto-confirm spell. This is more used more for spells that target an entire party.
 Bit 7: Auto target opposing party.
 Bit 8: Sets the spell to show green numbers. This will not make a spell heal, but will cause 0 damage,
       and shows green numbers.
Byte 15: Other switches. Most of this byte has unknown usages, but these are known effects.
 Bits 1-4: These bits have an unknown effect.
 Bit 5: used as a trigger effect, used specifically on G.Drgn when it's first learned and Anfini during Deathevn.
 Bit 6: unknown, but is used in various spells
 Bit 7: set to consume all of the users AP and is only used in Ryu's dragon spells. This also changes the
       animation Ryu uses when casting, and will crash if it is changed. This does not change how much AP is actually
       used when casting the spell.
 Bit 8: set when the spell requires a check against the characters mood.
Byte 16: When a spell requires a mood check, this is the value a characters mood must be before using.

Item Info Table


Bytes 1-8: Item name.
Bytes 9 and 10: Item cost.
Bytes 11 and 12: Item description pointer, and similar to spell's description, the most significant bit is
       set for beneficial effects, when an item can be used as such.
Byte 13: Targeting and special switches. these switches appear to be exactly the same as said byte in the spells
Byte 14: Who can equip this item, if possible. each bit represents different characters with Nina and Bleu sharing bits.
Byte 15: Attack power for weapons, and defense power for armor. 
Byte 16: This has a number of uses depending on what item it is being used for. For unequipables and weapons, it appears to
       identify what spells are cast when an item is used. For armors, the least significant 6 bits are used for armor
       weight, which allows for a max weight of 63. For values less than 0x40, items get equipped into the armor slot.
       Values 0x40 to 0x7F go into the shield slot. 0x80 to 0xBF go into the helmet slot. Anything above 0xC0 becomes
       unequipable.

Experience Tables

56680-571AF

Each level is 3 bytes each and starts at level 2.

All characters have individual experience tables except for Bleu, who shares Nina's table.

Each character table is 294 bytes long (98 levels * 3 bytes each).

The experience tables for individual characters are in the same order as the are in the 
ROM character information, so Ryu first, then Bow, Rand, Katt, Nina/Bleu, Jean, Sten, and Spar.

Shop data

3FA60-3FBBF

Shops use item slot numbers for what items to sell and is terminated by a value of 00.

The ROM uses 3FA60 when referencing the shop data, but the data appears to start around 3FAC9
and appears to mostly be in numerical order, by item slot number.

Game Script


The game script starts at 290000 and continues to 2CADA4, but this data uses simple compression.
with it's data starting at 22D000 through 22D531, and the actual pointer data starting at 22DE00.
22DDF2 through 22DDF7 contain values of when to switch banks, 2 bytes each.

The data itself is mostly ASCII coding, with some special formatting.