Difference between revisions of "Final Fantasy Tactics A2: Grimoire of the Rift"
(Continued copying notes.) |
|||
Line 4: | Line 4: | ||
All address ranges are inclusive. | All address ranges are inclusive. | ||
− | Special Units: | + | Special Units: |
− | + | 0x053D5BEC - 0x053D6863 (0x1C bytes long) | |
− | + | Job Data: | |
− | + | 0x053D6864 - 0x053D963B (0x48 bytes long) | |
− | Ability | + | Ability Sets: |
− | + | 0x053D963C - 0x053D9ABB (0x0C bytes long) | |
− | Equipment Data: 0x053FB748 - 0x053FF7A7 (0x28 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 == | == Job Data == | ||
Line 44: | Line 58: | ||
| 0x08 || 2 || uint16 || Enemy Sprite || | | 0x08 || 2 || uint16 || Enemy Sprite || | ||
Map sprite of enemy characters. | Map sprite of enemy characters. | ||
− | Does not change the sprite on the top screen. | + | *Does not change the sprite on the top screen. |
*Overridden by unique characters. | *Overridden by unique characters. | ||
*Refer to the sprite list for values. Identical to friendly sprite value. | *Refer to the sprite list for values. Identical to friendly sprite value. | ||
Line 69: | Line 83: | ||
*0x04 = Monster | *0x04 = Monster | ||
*0x05 = Monster | *0x05 = Monster | ||
+ | |||
*Overridden by unique characters. | *Overridden by unique characters. | ||
|- | |- | ||
Line 179: | Line 194: | ||
'''Notes on Equipment''' | '''Notes on Equipment''' | ||
+ | |||
The five bytes represents a big-endian binary array. For example... | The five bytes represents a big-endian binary array. For example... | ||
Line 260: | Line 276: | ||
|- | |- | ||
|0x23||Accessories | |0x23||Accessories | ||
+ | |} | ||
+ | |||
+ | == Ability Sets == | ||
+ | {| class="wikitable" | ||
+ | |- | ||
+ | ! Offset !! Length !! Type !! Name !! Description | ||
+ | |- | ||
+ | | 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. | ||
+ | *See ability set list. | ||
+ | |- | ||
+ | | 0x02 || 2 || uint16 || Last Ability || | ||
+ | The last ability in the set (eg. Gauge in Arts of War). | ||
+ | *See ability set list. | ||
+ | |- | ||
+ | | 0x04 || 8 || ? || Unknown || | ||
+ | |} | ||
+ | |||
+ | == Ability Table == | ||
+ | {| class="wikitable" | ||
+ | |- | ||
+ | ! Offset !! Length !! Type !! Name !! Description | ||
+ | |- | ||
+ | | 0x00 || 2 || uint16 || Ability || | ||
+ | Index of the ability. | ||
+ | *See ability list. | ||
+ | |- | ||
+ | | 0x02 || 7 || ? || Unknown || | ||
+ | |- | ||
+ | | 0x09 || 1 || uint8 || Maximum AP || | ||
+ | AP required to Master the skill. | ||
+ | |} | ||
+ | |||
+ | == Ability Data == | ||
+ | {| class="wikitable" | ||
+ | |- | ||
+ | ! Offset !! Length !! Type !! Name !! Description | ||
+ | |- | ||
+ | | 0x00 || 2 || uint16 || Unknown || | ||
+ | |- | ||
+ | | 0x02 || 1 || uint8 || Element || | ||
+ | Values: | ||
+ | *0x00 = Neutral | ||
+ | *0x01 = Fire | ||
+ | *0x02 = Air | ||
+ | *0x03 = Earth | ||
+ | *0x04 = Water | ||
+ | *0x05 = Ice | ||
+ | *0x06 = Thunder | ||
+ | *0x07 = Holy | ||
+ | *0x08 = Dark | ||
+ | |- | ||
+ | | 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): | ||
+ | *0x0000 = Anything? | ||
+ | *0x8000 = Anything? | ||
+ | *0x8200 = Bladed Weapons Only | ||
+ | *0x1300 = Cannons Only | ||
+ | *0x1A00 = Shield Only | ||
+ | *0x1100 = ? (Reckless Abandon only) | ||
+ | |- | ||
+ | | 0x0A || 1 || uint8 || Other Requirements || | ||
+ | Again, not too sure. | ||
+ | |||
+ | Values: | ||
+ | *0x00 = None | ||
+ | *0x01 = Standing in water | ||
+ | *0x02 = Standing on a 'natural' tile | ||
+ | *0x03 = Standing on an 'artificial' tile | ||
+ | *0x04 = Standing on a grassy tile | ||
+ | *0x05 = Standing on a barren tile | ||
+ | *0x06 = Clear weather. | ||
+ | *0x07 = Rainy weather. | ||
+ | *0x08 = Snowy weather. | ||
+ | *0x09 = Misty weather. | ||
+ | *0x0A = On a Chocobo (Chocobo Knights) | ||
+ | *0x0B = Prime'd (Flintlocks) | ||
+ | *0x16 - 0x2D = One for every Beastmaster skill | ||
+ | |- | ||
+ | | 0x0B || 1 || uint8 || Target Type || | ||
+ | Works in tandem with range and radius. Not too sure what certain combinations are capable of doing. | ||
+ | |||
+ | Values: | ||
+ | *0x00 = Normal | ||
+ | *0x01 = Linear both ways (Chocobo Rush) | ||
+ | *0x02 = Linear (Earth Render) | ||
+ | *0x04 = Surrounding 4 tiles | ||
+ | *0x05 = All units | ||
+ | *0x06 = Fan shape (Dragoon's breath attacks) | ||
+ | *0x07 = Weapon Based (range and AoE) | ||
+ | *0x08 = Self | ||
+ | Other values are buggy/for monsters. | ||
+ | |- | ||
+ | | 0x0C || 1 || uint8 || Range || | ||
+ | Having zero range is usually combined with certain target types. | ||
+ | |- | ||
+ | | 0x0D || 1 || uint8 || Radius || | ||
+ | Values: | ||
+ | *0x00 = Used with certain target types | ||
+ | *0x01 = Single tile | ||
+ | *0x05 = Black Magick sized diamond | ||
+ | *0x0D = Summoning Magick sized diamond | ||
+ | Other values seem to have no effect. | ||
+ | |- | ||
+ | | 0x0E || 2 || uint8? || Unknown || | ||
+ | Something to do with the 'tier' of the ability? | ||
+ | |- | ||
+ | | 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 || 4 || ? || 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. | ||
|} | |} |
Revision as of 04:47, 22 December 2012
Please note that everything comes from the US version of the game.
ROM Addresses
All address ranges are inclusive.
Special Units:
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 | Description |
---|---|---|---|---|
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:
Values:
|
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 | 4 | pointer? | Unknown |
Seems to match with race. |
0x35 | 13 | ? | Unknown |
Lots of stuff. |
0x42 | 1 | uint8 | Unknown |
Seems to have something to do with playability/job switchable? |
0x43 | 5 | uint8 | 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 | Description |
---|---|---|---|---|
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 | Description |
---|---|---|---|---|
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 | Description |
---|---|---|---|---|
0x00 | 2 | uint16 | Unknown | |
0x02 | 1 | uint8 | Element |
Values:
|
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. Values:
|
0x0B | 1 | uint8 | Target Type |
Works in tandem with range and radius. Not too sure what certain combinations are capable of doing. Values:
Other values are buggy/for monsters. |
0x0C | 1 | uint8 | Range |
Having zero range is usually combined with certain target types. |
0x0D | 1 | uint8 | Radius |
Values:
Other values seem to have no effect. |
0x0E | 2 | uint8? | Unknown |
Something to do with the 'tier' of the ability? |
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 | 4 | ? | 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. |