| 0x0000 | 2 bytes | Offset to GF attack name |
| 0x0002 | 2 bytes | Offset to GF attack description |
| 0x0004 | 2 bytes | Attack animation — id of the effect / animation dispatched at runtime (the engine “special action”) |
| 0x0006 | 1 byte | Attack type |
| 0x0007 | 1 byte | GF power (used in damage formula) |
| 0x0008 | 1 byte | Status window flags — all 16 GFs use 0x80 (ally status panel hidden while targeting) |
| 0x0009 | 1 byte | Target info — target mask for the GF attack, via getTargetMaskFromInfo |
| 0x000A | 1 byte | Attack Flags |
| 0x000B | 1 bytes | HIT_TYPE_TARGET_ANIMATION_TO_PLAY |
| 0x000C | 1 bytes | Hit count |
| 0x000D | 1 byte | Element |
| 0x000E | 2 bytes | Status1 |
| 0x0010 | 4 bytes | Status2 |
| 0x0014 | 1 byte | GF HP Modifier 1(GF_LVLxGF_HP_MODIFIER_1) |
| 0x0015 | 1 byte | GF HP Modifier 2(10xGF_LVLxGF_LVL/GF_HP_MODIFIER_2) |
| 0x0016 | 1 byte | GF HP Modifier 3(GF_HP_MODIFIER_3) |
| 0x0017 | 1 bytes | Padding (always 0x00) |
| 0x0018 | 1 bytes | GF Next level modifier 1(10xGF_LVLxGF_LVL_MODIFIER_1) |
| 0x0019 | 1 bytes | GF Next level modifier 2(GF_LVLxGF_LVLxGF_LVL_MODIFIER_2/256) |
| 0x001A | 1 byte | Status attack accuracy — unused (dead byte). Deep-audited in IDA: 0 field xrefs, 0 direct-address xrefs, and all register-relative accesses checked too (the base-pointer case that hides menu reads) — the only 3 functions holding a GF-entry pointer (getAddressGfAttackName, GFAbilityLearnComplete, the ~15 KB GF/junction menu sub_4F81F0) read only offset 0 or 0x1B, never 0x1A; no aliases or bulk copies read it either. The GF summon’s real status-attack accuracy is the next byte, 0x1B |
| 0x001B | 1 byte | GF summon status-attack accuracy — structurally the first ability slot’s byte+0 (abilityData[0].abilityUnlocker), but Battle_applyDamage’s GF case reads it as HIT_ATTACK_ACCURACY for the summon’s status roll (the dedicated 0x1A byte above is dead). 0 = the summon inflicts no status (e.g. Ifrit). BuildGFAbilityList never reads this byte for ability learning |
| 0x001C | 1 byte | Ability 1 level/prereq — 1-100 = the GF must be at least this level; 101-121 = instead of a level, ability slot (value-101) on this same GF must already be fully learned first (a same-GF unlock chain), via BuildGFAbilityList |
| 0x001D | 1 byte | Ability 1 alt prereq slot — points at another ability slot (0-20) on this GF and makes the two mutually exclusive until one is done: this ability keeps being offered only while the other slot’s ability is still unfinished, and gets cut off once that other ability is completed. 0xFF = no such restriction (always 0xFF in retail - a working BuildGFAbilityList feature the shipped data never uses) |
| 0x001E | 1 byte | Ability 1 |
| 0x001F | 1 byte | Ability 2 — unused (byte+0 of the ability slot); BuildGFAbilityList never reads it (real unlock = the next byte, ‘Ability 2 level/prereq’). Always 0 in retail |
| 0x0020 | 1 byte | Ability 2 level/prereq — 1-100 = the GF must be at least this level; 101-121 = instead of a level, ability slot (value-101) on this same GF must already be fully learned first (a same-GF unlock chain), via BuildGFAbilityList |
| 0x0021 | 1 byte | Ability 2 alt prereq slot — points at another ability slot (0-20) on this GF and makes the two mutually exclusive until one is done: this ability keeps being offered only while the other slot’s ability is still unfinished, and gets cut off once that other ability is completed. 0xFF = no such restriction (always 0xFF in retail - a working BuildGFAbilityList feature the shipped data never uses) |
| 0x0022 | 1 byte | Ability 2 |
| 0x0023 | 1 byte | Ability 3 — unused (byte+0 of the ability slot); BuildGFAbilityList never reads it (real unlock = the next byte, ‘Ability 3 level/prereq’). Always 0 in retail |
| 0x0024 | 1 byte | Ability 3 level/prereq — 1-100 = the GF must be at least this level; 101-121 = instead of a level, ability slot (value-101) on this same GF must already be fully learned first (a same-GF unlock chain), via BuildGFAbilityList |
| 0x0025 | 1 byte | Ability 3 alt prereq slot — points at another ability slot (0-20) on this GF and makes the two mutually exclusive until one is done: this ability keeps being offered only while the other slot’s ability is still unfinished, and gets cut off once that other ability is completed. 0xFF = no such restriction (always 0xFF in retail - a working BuildGFAbilityList feature the shipped data never uses) |
| 0x0026 | 1 byte | Ability 3 |
| 0x0027 | 1 byte | Ability 4 — unused (byte+0 of the ability slot); BuildGFAbilityList never reads it (real unlock = the next byte, ‘Ability 4 level/prereq’). Always 0 in retail |
| 0x0028 | 1 byte | Ability 4 level/prereq — 1-100 = the GF must be at least this level; 101-121 = instead of a level, ability slot (value-101) on this same GF must already be fully learned first (a same-GF unlock chain), via BuildGFAbilityList |
| 0x0029 | 1 byte | Ability 4 alt prereq slot — points at another ability slot (0-20) on this GF and makes the two mutually exclusive until one is done: this ability keeps being offered only while the other slot’s ability is still unfinished, and gets cut off once that other ability is completed. 0xFF = no such restriction (always 0xFF in retail - a working BuildGFAbilityList feature the shipped data never uses) |
| 0x002A | 1 byte | Ability 4 |
| 0x002B | 1 byte | Ability 5 — unused (byte+0 of the ability slot); BuildGFAbilityList never reads it (real unlock = the next byte, ‘Ability 5 level/prereq’). Always 0 in retail |
| 0x002C | 1 byte | Ability 5 level/prereq — 1-100 = the GF must be at least this level; 101-121 = instead of a level, ability slot (value-101) on this same GF must already be fully learned first (a same-GF unlock chain), via BuildGFAbilityList |
| 0x002D | 1 byte | Ability 5 alt prereq slot — points at another ability slot (0-20) on this GF and makes the two mutually exclusive until one is done: this ability keeps being offered only while the other slot’s ability is still unfinished, and gets cut off once that other ability is completed. 0xFF = no such restriction (always 0xFF in retail - a working BuildGFAbilityList feature the shipped data never uses) |
| 0x002E | 1 byte | Ability 5 |
| 0x002F | 1 byte | Ability 6 — unused (byte+0 of the ability slot); BuildGFAbilityList never reads it (real unlock = the next byte, ‘Ability 6 level/prereq’). Always 0 in retail |
| 0x0030 | 1 byte | Ability 6 level/prereq — 1-100 = the GF must be at least this level; 101-121 = instead of a level, ability slot (value-101) on this same GF must already be fully learned first (a same-GF unlock chain), via BuildGFAbilityList |
| 0x0031 | 1 byte | Ability 6 alt prereq slot — points at another ability slot (0-20) on this GF and makes the two mutually exclusive until one is done: this ability keeps being offered only while the other slot’s ability is still unfinished, and gets cut off once that other ability is completed. 0xFF = no such restriction (always 0xFF in retail - a working BuildGFAbilityList feature the shipped data never uses) |
| 0x0032 | 1 byte | Ability 6 |
| 0x0033 | 1 byte | Ability 7 — unused (byte+0 of the ability slot); BuildGFAbilityList never reads it (real unlock = the next byte, ‘Ability 7 level/prereq’). Always 0 in retail |
| 0x0034 | 1 byte | Ability 7 level/prereq — 1-100 = the GF must be at least this level; 101-121 = instead of a level, ability slot (value-101) on this same GF must already be fully learned first (a same-GF unlock chain), via BuildGFAbilityList |
| 0x0035 | 1 byte | Ability 7 alt prereq slot — points at another ability slot (0-20) on this GF and makes the two mutually exclusive until one is done: this ability keeps being offered only while the other slot’s ability is still unfinished, and gets cut off once that other ability is completed. 0xFF = no such restriction (always 0xFF in retail - a working BuildGFAbilityList feature the shipped data never uses) |
| 0x0036 | 1 byte | Ability 7 |
| 0x0037 | 1 byte | Ability 8 — unused (byte+0 of the ability slot); BuildGFAbilityList never reads it (real unlock = the next byte, ‘Ability 8 level/prereq’). Always 0 in retail |
| 0x0038 | 1 byte | Ability 8 level/prereq — 1-100 = the GF must be at least this level; 101-121 = instead of a level, ability slot (value-101) on this same GF must already be fully learned first (a same-GF unlock chain), via BuildGFAbilityList |
| 0x0039 | 1 byte | Ability 8 alt prereq slot — points at another ability slot (0-20) on this GF and makes the two mutually exclusive until one is done: this ability keeps being offered only while the other slot’s ability is still unfinished, and gets cut off once that other ability is completed. 0xFF = no such restriction (always 0xFF in retail - a working BuildGFAbilityList feature the shipped data never uses) |
| 0x003A | 1 byte | Ability 8 |
| 0x003B | 1 byte | Ability 9 — unused (byte+0 of the ability slot); BuildGFAbilityList never reads it (real unlock = the next byte, ‘Ability 9 level/prereq’). Always 0 in retail |
| 0x003C | 1 byte | Ability 9 level/prereq — 1-100 = the GF must be at least this level; 101-121 = instead of a level, ability slot (value-101) on this same GF must already be fully learned first (a same-GF unlock chain), via BuildGFAbilityList |
| 0x003D | 1 byte | Ability 9 alt prereq slot — points at another ability slot (0-20) on this GF and makes the two mutually exclusive until one is done: this ability keeps being offered only while the other slot’s ability is still unfinished, and gets cut off once that other ability is completed. 0xFF = no such restriction (always 0xFF in retail - a working BuildGFAbilityList feature the shipped data never uses) |
| 0x003E | 1 byte | Ability 9 |
| 0x003F | 1 byte | Ability 10 — unused (byte+0 of the ability slot); BuildGFAbilityList never reads it (real unlock = the next byte, ‘Ability 10 level/prereq’). Always 0 in retail |
| 0x0040 | 1 byte | Ability 10 level/prereq — 1-100 = the GF must be at least this level; 101-121 = instead of a level, ability slot (value-101) on this same GF must already be fully learned first (a same-GF unlock chain), via BuildGFAbilityList |
| 0x0041 | 1 byte | Ability 10 alt prereq slot — points at another ability slot (0-20) on this GF and makes the two mutually exclusive until one is done: this ability keeps being offered only while the other slot’s ability is still unfinished, and gets cut off once that other ability is completed. 0xFF = no such restriction (always 0xFF in retail - a working BuildGFAbilityList feature the shipped data never uses) |
| 0x0042 | 1 byte | Ability 10 |
| 0x0043 | 1 byte | Ability 11 — unused (byte+0 of the ability slot); BuildGFAbilityList never reads it (real unlock = the next byte, ‘Ability 11 level/prereq’). Always 0 in retail |
| 0x0044 | 1 byte | Ability 11 level/prereq — 1-100 = the GF must be at least this level; 101-121 = instead of a level, ability slot (value-101) on this same GF must already be fully learned first (a same-GF unlock chain), via BuildGFAbilityList |
| 0x0045 | 1 byte | Ability 11 alt prereq slot — points at another ability slot (0-20) on this GF and makes the two mutually exclusive until one is done: this ability keeps being offered only while the other slot’s ability is still unfinished, and gets cut off once that other ability is completed. 0xFF = no such restriction (always 0xFF in retail - a working BuildGFAbilityList feature the shipped data never uses) |
| 0x0046 | 1 byte | Ability 11 |
| 0x0047 | 1 byte | Ability 12 — unused (byte+0 of the ability slot); BuildGFAbilityList never reads it (real unlock = the next byte, ‘Ability 12 level/prereq’). Always 0 in retail |
| 0x0048 | 1 byte | Ability 12 level/prereq — 1-100 = the GF must be at least this level; 101-121 = instead of a level, ability slot (value-101) on this same GF must already be fully learned first (a same-GF unlock chain), via BuildGFAbilityList |
| 0x0049 | 1 byte | Ability 12 alt prereq slot — points at another ability slot (0-20) on this GF and makes the two mutually exclusive until one is done: this ability keeps being offered only while the other slot’s ability is still unfinished, and gets cut off once that other ability is completed. 0xFF = no such restriction (always 0xFF in retail - a working BuildGFAbilityList feature the shipped data never uses) |
| 0x004A | 1 byte | Ability 12 |
| 0x004B | 1 byte | Ability 13 — unused (byte+0 of the ability slot); BuildGFAbilityList never reads it (real unlock = the next byte, ‘Ability 13 level/prereq’). Always 0 in retail |
| 0x004C | 1 byte | Ability 13 level/prereq — 1-100 = the GF must be at least this level; 101-121 = instead of a level, ability slot (value-101) on this same GF must already be fully learned first (a same-GF unlock chain), via BuildGFAbilityList |
| 0x004D | 1 byte | Ability 13 alt prereq slot — points at another ability slot (0-20) on this GF and makes the two mutually exclusive until one is done: this ability keeps being offered only while the other slot’s ability is still unfinished, and gets cut off once that other ability is completed. 0xFF = no such restriction (always 0xFF in retail - a working BuildGFAbilityList feature the shipped data never uses) |
| 0x004E | 1 byte | Ability 13 |
| 0x004F | 1 byte | Ability 14 — unused (byte+0 of the ability slot); BuildGFAbilityList never reads it (real unlock = the next byte, ‘Ability 14 level/prereq’). Always 0 in retail |
| 0x0050 | 1 byte | Ability 14 level/prereq — 1-100 = the GF must be at least this level; 101-121 = instead of a level, ability slot (value-101) on this same GF must already be fully learned first (a same-GF unlock chain), via BuildGFAbilityList |
| 0x0051 | 1 byte | Ability 14 alt prereq slot — points at another ability slot (0-20) on this GF and makes the two mutually exclusive until one is done: this ability keeps being offered only while the other slot’s ability is still unfinished, and gets cut off once that other ability is completed. 0xFF = no such restriction (always 0xFF in retail - a working BuildGFAbilityList feature the shipped data never uses) |
| 0x0052 | 1 byte | Ability 14 |
| 0x0053 | 1 byte | Ability 15 — unused (byte+0 of the ability slot); BuildGFAbilityList never reads it (real unlock = the next byte, ‘Ability 15 level/prereq’). Always 0 in retail |
| 0x0054 | 1 byte | Ability 15 level/prereq — 1-100 = the GF must be at least this level; 101-121 = instead of a level, ability slot (value-101) on this same GF must already be fully learned first (a same-GF unlock chain), via BuildGFAbilityList |
| 0x0055 | 1 byte | Ability 15 alt prereq slot — points at another ability slot (0-20) on this GF and makes the two mutually exclusive until one is done: this ability keeps being offered only while the other slot’s ability is still unfinished, and gets cut off once that other ability is completed. 0xFF = no such restriction (always 0xFF in retail - a working BuildGFAbilityList feature the shipped data never uses) |
| 0x0056 | 1 byte | Ability 15 |
| 0x0057 | 1 byte | Ability 16 — unused (byte+0 of the ability slot); BuildGFAbilityList never reads it (real unlock = the next byte, ‘Ability 16 level/prereq’). Always 0 in retail |
| 0x0058 | 1 byte | Ability 16 level/prereq — 1-100 = the GF must be at least this level; 101-121 = instead of a level, ability slot (value-101) on this same GF must already be fully learned first (a same-GF unlock chain), via BuildGFAbilityList |
| 0x0059 | 1 byte | Ability 16 alt prereq slot — points at another ability slot (0-20) on this GF and makes the two mutually exclusive until one is done: this ability keeps being offered only while the other slot’s ability is still unfinished, and gets cut off once that other ability is completed. 0xFF = no such restriction (always 0xFF in retail - a working BuildGFAbilityList feature the shipped data never uses) |
| 0x005A | 1 byte | Ability 16 |
| 0x005B | 1 byte | Ability 17 — unused (byte+0 of the ability slot); BuildGFAbilityList never reads it (real unlock = the next byte, ‘Ability 17 level/prereq’). Always 0 in retail |
| 0x005C | 1 byte | Ability 17 level/prereq — 1-100 = the GF must be at least this level; 101-121 = instead of a level, ability slot (value-101) on this same GF must already be fully learned first (a same-GF unlock chain), via BuildGFAbilityList |
| 0x005D | 1 byte | Ability 17 alt prereq slot — points at another ability slot (0-20) on this GF and makes the two mutually exclusive until one is done: this ability keeps being offered only while the other slot’s ability is still unfinished, and gets cut off once that other ability is completed. 0xFF = no such restriction (always 0xFF in retail - a working BuildGFAbilityList feature the shipped data never uses) |
| 0x005E | 1 byte | Ability 17 |
| 0x005F | 1 byte | Ability 18 — unused (byte+0 of the ability slot); BuildGFAbilityList never reads it (real unlock = the next byte, ‘Ability 18 level/prereq’). Always 0 in retail |
| 0x0060 | 1 byte | Ability 18 level/prereq — 1-100 = the GF must be at least this level; 101-121 = instead of a level, ability slot (value-101) on this same GF must already be fully learned first (a same-GF unlock chain), via BuildGFAbilityList |
| 0x0061 | 1 byte | Ability 18 alt prereq slot — points at another ability slot (0-20) on this GF and makes the two mutually exclusive until one is done: this ability keeps being offered only while the other slot’s ability is still unfinished, and gets cut off once that other ability is completed. 0xFF = no such restriction (always 0xFF in retail - a working BuildGFAbilityList feature the shipped data never uses) |
| 0x0062 | 1 byte | Ability 18 |
| 0x0063 | 1 byte | Ability 19 — unused (byte+0 of the ability slot); BuildGFAbilityList never reads it (real unlock = the next byte, ‘Ability 19 level/prereq’). Always 0 in retail |
| 0x0064 | 1 byte | Ability 19 level/prereq — 1-100 = the GF must be at least this level; 101-121 = instead of a level, ability slot (value-101) on this same GF must already be fully learned first (a same-GF unlock chain), via BuildGFAbilityList |
| 0x0065 | 1 byte | Ability 19 alt prereq slot — points at another ability slot (0-20) on this GF and makes the two mutually exclusive until one is done: this ability keeps being offered only while the other slot’s ability is still unfinished, and gets cut off once that other ability is completed. 0xFF = no such restriction (always 0xFF in retail - a working BuildGFAbilityList feature the shipped data never uses) |
| 0x0066 | 1 byte | Ability 19 |
| 0x0067 | 1 byte | Ability 20 — unused (byte+0 of the ability slot); BuildGFAbilityList never reads it (real unlock = the next byte, ‘Ability 20 level/prereq’). Always 0 in retail |
| 0x0068 | 1 byte | Ability 20 level/prereq — 1-100 = the GF must be at least this level; 101-121 = instead of a level, ability slot (value-101) on this same GF must already be fully learned first (a same-GF unlock chain), via BuildGFAbilityList |
| 0x0069 | 1 byte | Ability 20 alt prereq slot — points at another ability slot (0-20) on this GF and makes the two mutually exclusive until one is done: this ability keeps being offered only while the other slot’s ability is still unfinished, and gets cut off once that other ability is completed. 0xFF = no such restriction (always 0xFF in retail - a working BuildGFAbilityList feature the shipped data never uses) |
| 0x006A | 1 byte | Ability 20 |
| 0x006B | 1 byte | Ability 21 — unused (byte+0 of the ability slot); BuildGFAbilityList never reads it (real unlock = the next byte, ‘Ability 21 level/prereq’). Always 0 in retail |
| 0x006C | 1 byte | Ability 21 level/prereq — 1-100 = the GF must be at least this level; 101-121 = instead of a level, ability slot (value-101) on this same GF must already be fully learned first (a same-GF unlock chain), via BuildGFAbilityList |
| 0x006D | 1 byte | Ability 21 alt prereq slot — points at another ability slot (0-20) on this GF and makes the two mutually exclusive until one is done: this ability keeps being offered only while the other slot’s ability is still unfinished, and gets cut off once that other ability is completed. 0xFF = no such restriction (always 0xFF in retail - a working BuildGFAbilityList feature the shipped data never uses) |
| 0x006E | 1 byte | Ability 21 |
| 0x006F | 1 byte | Padding |
| 0x0070 | 1 byte | Quezacolt compatibility |
| 0x0071 | 1 byte | Shiva compatibility |
| 0x0072 | 1 byte | Ifrit compatibility |
| 0x0073 | 1 byte | Siren compatibility |
| 0x0074 | 1 byte | Brothers compatibility |
| 0x0075 | 1 byte | Diablos compatibility |
| 0x0076 | 1 byte | Carbuncle compatibility |
| 0x0077 | 1 byte | Leviathan compatibility |
| 0x0078 | 1 byte | Pandemona compatibility |
| 0x0079 | 1 byte | Cerberus compatibility |
| 0x007A | 1 byte | Alexander compatibility |
| 0x007B | 1 byte | Doomtrain compatibility |
| 0x007C | 1 byte | Bahamut compatibility |
| 0x007D | 1 byte | Cactuar compatibility |
| 0x007E | 1 byte | Tonberry compatibility |
| 0x007F | 1 byte | Eden compatibility |
| 0x0080 | 2 bytes | GF Boost timing params — not a min/max. Low byte ×15 = initial length (ticks) of the first “safe” Boost phase (press □ to raise Boost); high byte ×15 = initial length of the overall input window (pre_computeGFBoost/computeGFBoost). The Boost value itself runs 75–250 (100 if untouched); damage = damage × Boost/100. Later phases re-roll to 15×(1..3 + 1..3) |
| 0x0082 | 1 byte | Power Mod (used in damage formula) |
| 0x0083 | 1 byte | Level Mod (used in damage formula) |