Final Fantasy Tactics A2: Grimoire of the Rift
Please note that everything comes from the US version of the game.
ROM Addresses
All address ranges are inclusive.
Special Unit Graphics:
0x053D5BEC - 0x053D6863 (0x1C bytes long)
Job Data:
0x053D6864 - 0x053D963B (0x48 bytes long)
Ability Sets:
0x053D963C - 0x053D9ABB (0x0C bytes long)
Ability Table:
0x053D9ABC - 0x053DBC93 (0x0C bytes long)
Ability Data:
0x053DBC94 - 0x053E638B (0x34 bytes long)
Ability Animations:
0x053E638C - 0x053EB09B (0x18 bytes long)
Equipment Data:
0x053FB748 - 0x053FF7A7 (0x28 bytes long)
Job Data
Offset | Length | Type | Name | Details |
---|---|---|---|---|
0x00 | 2 | uint16 | Portrait |
The unit's portrait.
|
0x02 | 2 | uint16 | Enemy Portrait |
The unit's portrait if on the opposing team.
|
0x04 | 2 | uint16 | Sprite |
Map sprite of the character.
|
0x06 | 2 | uint16 | Unknown |
Seems to have no effect on sprites. |
0x08 | 2 | uint16 | Enemy Sprite |
Map sprite of enemy characters.
|
0x0A | 2 | uint16 | Unknown |
Seems to have no effect on sprites. |
0x0C | 1 | uint8 | Palette |
Value:
|
0x0D | 1 | uint8 | Enemy Palette |
Value:
|
0x0E | 1 | uint8 | Race |
Value:
|
0x0F | 1 | uint8 | Move Type |
Value:
|
0x10 | 1 | uint8 | Stand Type |
Value:
|
0x11 | 1 | uint8 | Move |
Unknown maximum. |
0x12 | 1 | uint8 | Jump |
Unknown maximum. |
0x13 | 14 | uint8 | Stats |
Offsets:
See notes on stats. |
0x21 | 8 | uint8 | Affinities |
Offsets:
Value:
|
0x29 | 1 | uint8 | Evasion |
Evasion = 100% - [Value] |
0x2A | 1 | uint8 | Unknown |
Divisible by 5, varies between 10 and 30. |
0x2B | 1 | uint8 | Unknown | |
0x2C | 1 | uint8 | Unknown | |
0x2D | 1 | uint8 | Resilience |
Resilience = 100% - [Value] |
0x2E | 2 | uint16 | Ability Set |
The job's corresponding ability set (eg. Arts of War). |
0x30 | 1 | uint8 | Unarmed Bonus |
This is not divided by 4 and added as is. |
0x31 | 1 | uint8 | Unknown |
Seems to match with race. |
0x32 | 1 | uint8 | Unknown |
Value:
|
0x33 | 1 | uint8 | Gender |
Value:
|
0x34 | 11 | ? | Unknown |
Lots of stuff. |
0x3A | 1 | uint8 | Top Screen Sprite |
The sprite which appears in the top screen indicating turn order. |
0x40 | 1 | uint8 | Enemy Top Screen Sprite |
The sprite for enemies in the top screen. |
0x41 | 1 | uint8 | Unknown | |
0x42 | 1 | bin | Properties |
A big endian binary array of properties. Offset:
|
0x43 | 5 | bin | Equipment |
See notes on equipment. |
Notes on Stats
Base stats are given on recruitment and never change. A character at level 1 has base stats, growths apply when it levels. Stat growths are applied with every level up in that job, with variance (random chance of less or more growths). Stats cap at 999. Stats displayed in-game are quartered and rounded down.
Base speed is 50 + [value]. This means that 50 is the minimum base speed possible. The maximum speed is 149. Speed growth is stored as a percentage representing the chance of gaining 1 speed per level in that job.
Notes on Equipment
The five bytes represents a big-endian binary array. For example...
84 00 00 EC 0E = 00100001 00000000 00000000 00110111 01110000
Each bit represents whether the corresponded equipment type can be equipped by that job.
Index | Equip Type |
---|---|
0x00 | None |
0x01 | Knives |
0x02 | Swords |
0x03 | Blades |
0x04 | Sabers |
0x05 | Knightswords |
0x06 | Rapiers |
0x07 | Greatswords |
0x08 | Broadswords |
0x09 | Katana |
0x0A | Spears |
0x0B | Rods |
0x0C | Staves |
0x0D | Poles |
0x0E | Knuckles |
0x0F | Bows |
0x10 | Greatbows |
0x11 | Guns |
0x12 | Instruments |
0x13 | Cannons |
0x14 | ? |
0x15 | Axes |
0x16 | Hammers |
0x17 | Maces |
0x18 | Cards |
0x19 | Books |
0x1A | Shields |
0x1B | Helmets |
0x1C | Ribbons |
0x1D | Hats |
0x1E | Heavy Armor |
0x1F | Light Armor |
0x20 | Cloth Armor |
0x21 | Shoes |
0x22 | Armguards |
0x23 | Accessories |
Ability Sets
Offset | Length | Type | Name | Details |
---|---|---|---|---|
0x00 | 2 | uint16 | First Ability |
The first ability in the set (eg. First Aid in Arts of War). Every ability between and including this and the last ability is included in this set.
|
0x02 | 2 | uint16 | Last Ability |
The last ability in the set (eg. Gauge in Arts of War).
|
0x04 | 8 | ? | Unknown |
Ability Table
Offset | Length | Type | Name | Details |
---|---|---|---|---|
0x00 | 2 | uint16 | Ability |
Index of the ability.
|
0x02 | 7 | ? | Unknown | |
0x09 | 1 | uint8 | Maximum AP |
AP required to Master the skill. |
Ability Data
Offset | Length | Type | Name | Details |
---|---|---|---|---|
0x00 | 2 | uint16 | Unknown | |
0x02 | 1 | uint8 | Element |
Value:
|
0x03 | 1 | uint8 | MP Cost | |
0x04 | 2 | uint8? | Unknown | |
0x06 | 2 | uint16 | Damage Bonus |
Fixed damage value added on top of Attack/Magick. |
0x08 | 2 | uint16 | Weapon Required |
Not too sure about this one. Values (Big Endian):
|
0x0A | 1 | uint8 | Other Requirements |
Again, not too sure. Value:
|
0x0B | 1 | uint8 | Target Type |
Works in tandem with range and radius. Not too sure what certain combinations are capable of doing. Value:
Other values are buggy/for monsters. |
0x0C | 1 | uint8 | Range |
Having zero range is usually combined with certain target types. |
0x0D | 1 | uint8 | Radius |
Value:
Other values seem to have no effect. |
0x0E | 1 | uint8 | Unknown |
Something to do with the 'tier' of the ability? |
0x0F | 1 | uint8 | Extra Menu/Command? |
Value:
|
0x10 | 16 | uint16/8 | Effects |
There are four effect slots, each one 4 bytes long. Each effect consists of a 2 byte indicator (ie. Poison) and two 1 byte modifiers (ie. half accuracy). Still need to decode what values mean what. Empty slots are filled with 0s. |
0x20 | 2 | bin | Properties |
Big endian binary array containing booleans for random properties. Maybe some law stuff mixed in. Offset:
|
0x22 | 1 | uint8 | Unknown | |
0x23 | 1 | uint8 | Unknown | |
0x24 | 16 | uint8 | Current AP Index |
There are eight slots. Each slot has 1 byte corresponding with race and 1 byte corresponding with the index at which the current AP amount is stored in the RAM. For example, First Aid has 01 98 02 6E, meaning for the Hume race it's AP is stored at '98' and for the Bangaa race it's AP is stored at '6E'. Anyone who has tried race swapping knows that AP data is shared between races. Empty slots are filled with 0s. |