Misc Data Section
General
| Offset | Sections | Section Size |
|---|---|---|
| 0x4CCC | 6 | Various |
Sections
| Offset | Ability | Length |
|---|---|---|
| 0x4CCC | Status Timers | 14 bytes |
| 0x4CDA | ATB Speed Multiplier | 1 byte |
| 0x4CDB | Gilgamesh/Angelo summon interval (“Dead Timer”) | 1 byte |
| 0x4CDC | Status Limit Effects | 32 bytes |
| 0x4CFC | Duel Timers and Start Moves | 8 bytes |
| 0x4D04 | Shot Timers | 4 bytes |
Section Structure
The 14 status timers at 0x00–0x0D are loaded into the battle countdown as 4 × (battleSpeed + 1) × value ticks (setupStatus2Timer). Each idle battle frame, computeTimerStatus subtracts timer_speed_multiplier from the timer — 2 by default, 3 under Haste, 1 under Slow, 0 under Stop — so at the ~15 fps battle rate about 30 ticks are consumed per second. The real duration is therefore
seconds ≈ 4 × (battleSpeed + 1) × value / (2 × 15)
battleSpeed is the config Battle Speed, 0 (fast) … 4 (slow) — five settings, not a 0–255 value (Battle_SetMaxAtbFromBattleSpeed: max_atb = 4000 × (battleSpeed + 1), the same tick unit as the timers). At the midpoint (2) that is value × 0.4 s; it scales from value × 0.2 s (fast, 0) to value × 1.0 s (slow, 4). The ~15 fps rate is pinned by the Regen tick, which heals every 30 frames (≈ 2 s). Timers only tick during idle ATB time, not during action animations, so a real fight feels longer than this estimate; Haste makes them expire ~1.5× faster and Slow ~2× slower.
| Offset | Length | Description | |——–|——–|————————————| | 0x0000 | 1 byte | Sleep Timer | | 0x0001 | 1 byte | Haste Timer | | 0x0002 | 1 byte | Slow Timer | | 0x0003 | 1 byte | Stop Timer | | 0x0004 | 1 byte | Regen Timer | | 0x0005 | 1 byte | Protect Timer | | 0x0006 | 1 byte | Shell Timer | | 0x0007 | 1 byte | Reflect Timer | | 0x0008 | 1 byte | Aura Timer | | 0x0009 | 1 byte | Curse Timer | | 0x000A | 1 byte | Doom Timer | | 0x000B | 1 byte | Invincible Timer | | 0x000C | 1 byte | Petrifying Timer | | 0x000D | 1 byte | Float Timer | | 0x000E | 1 byte | ATB Speed Multiplier — scales how fast every battler’s ATB gauge fills: cur_atb += 10 × this × (SPD+30) / 100, applied 3× per rendered frame (Battle_TickAtbGaugesAndGfCountdown, called from isBattle_HUDdisplay, itself called 3× per frame by battle_cardgame_main_loop). Retail value is 10, not a %-of-normal multiplier despite the name. Because it ticks on the render loop rather than a fixed logic clock, real fill time depends on framerate — the PC port’s well-known “ATB speeds up at high FPS” quirk. max_atb = 4000 × (battleSpeed+1) (Battle_SetMaxAtbFromBattleSpeed, same battleSpeed 0–4 as the status timers) | | 0x000F | 1 byte | Gilgamesh/Angelo summon interval (a.k.a. “Dead Timer”) — not a character-death countdown. Interval between the random Gilgamesh/Angelo/Phoenix auto-summon checks: summonGilgaAngelStartFight decrements it once per battle tick (called from FFBattleDirector_battleLoop); at 0 it rolls to summon Gilgamesh (12/255, if owned and not yet summoned this fight) or fire an Angelo/Phoenix auto-action, then reloads this value into DEAD_TIMER_TO_SUMMON_GILGA. Lower = checks more often | The 32 status limit effects at 0x10–0x2F are how much each active status contributes to a character’s crisis/Limit-Break gauge, read by Battle_ComputeCrisisLevelAndLimitFlag. Every active status (across both Status 1 and Status 2) adds its byte here into one running total each frame:
crisis = (10*(statusSum + 4*(5*deadAllies + 40)) - 10*crisisLevelHPMultiplier*curHP/maxHP)
/ (rand(0..255) + 160) - 4 [clamped 0-4]
Higher values push the crisis level (and so Limit Break availability) up faster; 0 means that status doesn’t affect it at all. There’s no term that lowers crisis level — every listed status only ever pushes it up, which is why Death/Poison/etc. all have a value here despite being harmful.
| 0x0010 | 1 byte | Death Limit Effect |
| 0x0011 | 1 byte | Poison Limit Effect |
| 0x0012 | 1 byte | Petrify Limit Effect |
| 0x0013 | 1 byte | Darkness Limit Effect |
| 0x0014 | 1 byte | Silence Limit Effect |
| 0x0015 | 1 byte | Berserk Limit Effect |
| 0x0016 | 1 byte | Zombie Limit Effect |
| 0x0017 | 1 byte | Limit effect for the unused Status-1 bit 7 slot |
| 0x0018 | 1 byte | Sleep Limit Effect |
| 0x0019 | 1 byte | Haste Limit Effect |
| 0x001A | 1 byte | Slow Limit Effect |
| 0x001B | 1 byte | Stop Limit Effect |
| 0x001C | 1 byte | Regen Limit Effect |
| 0x001D | 1 byte | Protect Limit Effect |
| 0x001E | 1 byte | Shell Limit Effect |
| 0x001F | 1 byte | Reflect Limit Effect |
| 0x0020 | 1 byte | Aura Limit Effect |
| 0x0021 | 1 byte | Curse Limit Effect |
| 0x0022 | 1 byte | Doom Limit Effect |
| 0x0023 | 1 byte | Invincible Limit Effect |
| 0x0024 | 1 byte | Petrifying Limit Effect |
| 0x0025 | 1 byte | Float Limit Effect |
| 0x0026 | 1 byte | Confusion Limit Effect |
| 0x0027 | 1 byte | Drain Limit Effect |
| 0x0028 | 1 byte | Eject Limit Effect |
| 0x0029 | 1 byte | Double Limit Effect |
| 0x002A | 1 byte | Triple Limit Effect |
| 0x002B | 1 byte | Defend Limit Effect |
| 0x002C | 1 byte | Immune Physical attack limit effect |
| 0x002D | 1 byte | Immune Magic attack limit effect |
| 0x002E | 1 byte | Charged Limit Effect |
| 0x002F | 1 byte | Back Attack Limit Effect |
| 0x0030 | 1 byte | Duel Start Sequence Crisis Level 1 |
| 0x0031 | 1 byte | Duel Timer Crisis Level 1 |
| 0x0032 | 1 byte | Duel Start Sequence Crisis Level 2 |
| 0x0033 | 1 byte | Duel Timer Crisis Level 2 |
| 0x0034 | 1 byte | Duel Start Sequence Crisis Level 3 |
| 0x0035 | 1 byte | Duel Timer Crisis Level 3 |
| 0x0036 | 1 byte | Duel Start Sequence Crisis Level 4 |
| 0x0037 | 1 byte | Duel Timer Crisis Level 4 |
| 0x0038 | 1 byte | Shot Timer Crisis Level 1 |
| 0x0039 | 1 byte | Shot Timer Crisis Level 2 |
| 0x003A | 1 byte | Shot Timer Crisis Level 3 |
| 0x003B | 1 byte | Shot Timer Crisis Level 4 |
Duel / Shot crisis-level fields (0x30–0x3B)
These drive Zell’s “Duel” and Irvine’s “Shot” limit breaks, which both scale with the character’s crisis level (0–3, higher = lower HP / stronger limit).
- Duel Start Sequence (CL1–4) — the starting index into the Duel move table (section 24, Duel Params). When a Duel begins,
linkedToZellDuelreads the byte for the current crisis level (K_MISC[0x2E + 2·crisis_level]) and uses it to seed the “current sequence” pointer. The per-tick Duel driver (sub_4852B0) then performsduelMoves[seq].StartMove, and the player’s button input selects one of that entry’s Next Sequence bytes to advance to the next move. In short: this byte decides which move-chain Zell opens the Duel with at each crisis level. - Duel Timer (CL1–4) — length of the Duel input window at that crisis level (higher crisis = longer), loaded alongside the start sequence.
- Shot Timer (CL1–4) — the equivalent input-window duration for Irvine’s Shot at each crisis level.
Function addresses
| Function | Address |
|---|---|
setupStatus2Timer | 0x4832f0 |
Battle_SetMaxAtbFromBattleSpeed | 0x484490 |
Battle_TickAtbGaugesAndGfCountdown | 0x4842b0 |
computeTimerStatus | 0x483470 |