Deprecated: Function get_magic_quotes_gpc() is deprecated in /home2/jludwig/public_html/finalfantasy/hacking/textpattern/lib/constants.php on line 29
Final Fantasy GBA Hacking Notes: Battle Records
JeffLudwig.com
GOG.com

Battle Records

Singular Battle Records

Battle Records table

This is the table that actually drives the monster configurations that your party will be confronted with over the course of the adventure.

Primary Table location: 0×2288b40xx22a587.

Data structure size: 0×14, or 20 bytes per record.

Number of records: 0×171, or 369 battle records.

I should note that there is a separate version of the table in 0×22d3e40×22f0b7. You will need to modify both to be sure of getting the changes you desire.

Another interesting tidbit is that the first 256 Battle Records (IDs 0×0000×0ff) are battles that may show up in the standard overworld map, or standard dungeons (defined as dungeons that were in the NES version of Final Fantasy). Battle records with IDs of 0×100 or greater may only be assigned to Dawn of Souls dungeons.

Battle Record Examples

Note that the Battle ID is not present in the Battle Record table, and is provided here merely for reference.

Battle ID Config Run? Preempt Zeroes Monster #1 Monster #2 Monster #3 Monster #4
000 00 00 04 00 00 03 05 00 01 00 00 00 ff 00 00 00 ff 00 00 00
          3-5 Goblins 0 Goblin Guards    
                 
00e 01 00 21 00 01 00 05 00 04 01 03 00 09 00 02 00 06 00 02 00
          0-5 Goblin Guards 1-3 Werewolves 0-2 Hill Gigases 0-2 Lizards
                 
022 02 01 37 00 1a 00 01 00 1d 01 02 00 ff 00 00 00 ff 00 00 00
          0-1 Hellhounds 1-2 Ogre Mages    
                 
04a 05 00 04 00 51 00 08 00 52 00 08 00 50 01 05 00 4f 00 08 00
          0-8 Cockatrices 0-8 Pyrolisks 1-5 King Mummies 0-8 Mummies
                 
07d 04 01 04 00 71 01 01 00 ff 00 00 00 ff 00 00 00 ff 00 00 00
          1 Astos      

Battle Record info, decoded

Battle Configuration byte

If you’ve played Final Fantasy at all, you may have noticed that certain monsters are larger than others. Others are really big. This forces the game engine to position monsters differently, based on the kinds of monsters that are present. This byte alerts the engine to the kinds of monsters present. Editing Battle Regions requires a knowledge of the sizes of the various critters in the game; the game knows which monsters are small, which are large, and which are boss-sized, and based on the Configuration byte will load valid monsters. If a battle record provides no valid monsters for its Battle Configuration, Very Bad Things will happen (game execution will probably freeze). Be careful!

  • 00 — Up to 9 small monsters displayed in a 3 by 3 configuration
  • 01 — Up to 2 large monsters at left, followed by up to 6 small monsters in a 2 by 3 configuration to their right
  • 02 — Up to 4 large monsters displayed in a 2 by 2 configuration
  • 03 — Displays one fiend-sized monster
  • 04 — Displays one small-sized monster in middle of screen, designating it as a mini-boss
  • 05 — Intelligently displays small monsters. Flying monsters are displayed after land-bound enemies, to ascertain that graphical anomalies don’t surface. I don’t believe that large monsters can be placed in this configuration, but I’m not 100% certain on this.
  • 06 — Displays one Dawn of Souls boss. This is not used for original Final Fantasy NES monsters.

“Run?” byte

It can’t get much simpler than this… this is 00 if you can run, and 01 if you can’t.

Preempt byte

This is the chance that your party won’t be able to react in the first round of battle against these monsters; higher values increase the chance of monsters striking first. I am not sure if this chance is out of 100, or some other hexidecimal friendly number.

Monsters #1 through #4

Each battle can feature up to four types of monsters. The final four groups of four bytes determine which monster is encountered, along with how many may appear. All four groups follow these same conventions, but again, it is unwise to have all of these monsters set to null (meaning ff 00 00 00, or any time that the final three bytes are 00 00 00).

The first byte is the Monster ID referenced. See the Bestiary article to look up individual Monster IDs.

The second byte is the minimum number of that monster that can be encountered. The third byte is the maximum number that can be encountered. The fourth byte is always 00. Again, make sure at least one monster has a “minimum encountered” value of at least 1; an encounter yielding no monsters is untested and could lead to Very Bad Things.

Advanced possibilities

It is safe to reference more monsters of a specific size than can be displayed; the excess monsters simply are ignored when setting up the battle.

Note Battle ID #4a above, this is a very interesting case! There is a potential of 29 monsters being placed (8 Cockatrices, 8 Pyrolisks, 5 King Mummies, and 8 Mummies). The monsters are placed in a first come, first served format. It loads Cockatrices first, then Pyrolisks, then King Mummies, and finally Mummies. Thus, it is possible that you will not face King Mummies (even though there is a minimum of one, as defined by the record), because it is very possible to encounter 9 or more Cockatrices and Pyrolisks combined.

ludmeister

Date published: 2011-12-15

Leave a comment ->

  1. It appears as if there isn’t any more onto your notes for the battle ID’s.

    Have you done any local world data such as scenery, land, water, cave entrance data? I’m hoping mainly for the RNG shrines that appear so I can get some custom changeable levels in there as well.

    I don’t think I found too much on that when debugging the game(if I do, I will send you an email for the information I have collected).

    I’m sure there are others that might be possibly working on a FFDoS editor, but I’m working on one right now. Looks dull but trying to get a lot implemented in it so I’m trying to get as much information on this as I possibly can. The majority of the credit would come from your notes, so don’t worry about the credit there.

    — Sting_Chameleon · May 5, 09:40 AM · #

  2. No, I haven’t done any real work on map data, or map binding. Your idea about new custom maps for RNG dungeon levels is very cool.

    It’s great that you’re working on a editor for Dawn of Souls! Please keep me updated on your progress.

    ludmeister · May 8, 10:16 AM · #

  3. Wrong page, but continuation of the convo.

    Well for the next few weeks, I’ll be forming all the data tables for text editing, and when I mean all, I mean every data table to come.

    I hope to find some information on map data soon. I might just meander through the internet and hopefully find out if someone has already done so. I’m sure by now this information has already been found.

    Also, this is the biggest and heaviest note collection on a single ROM I have ever found. It’s a tad bit slow to navigate from one end of the notes to another. Just for easier navigation reasons, will you be able to implement a drop-down combo box for quicker navigation from page to page?

    — Sting_Chameleon · May 12, 12:54 PM · #