On this page
  1. Related
  2. Games
  3. References
  4. Sources

A Limit gauge turns damage taken into a stronger action. In Final Fantasy VII each enemy hit on a party member adds a share of the damage over max HP, scaled by a per-character divisor, doubled under Fury and halved under Sadness1.

  • From damage takenFinal Fantasy VII (1997). 300 × damage over max HP, times 256 over a per-character divisor, from enemy hits only.1

Games

GameYearHowNote
Final Fantasy VII1997From damage taken300 × damage over max HP, times 256 over a per-character divisor, from enemy hits only
Every claim about this mechanic, by game (1)

References

  1. ^ abcIn the North American release, when an enemy's action takes HP from a party member, BattleApplyDamageAndChargeLimitGauge adds ⌊300 × damage / max HP⌋ × 256 over the character's HP divisor to the Limit gauge, with 512 in place of 256 under Fury and 128 under Sadness, and caps the gauge at 255; the damage counts in full, even past the HP the character had left. It adds nothing for healing, MP damage, a character whose limit level is 4 or more, or a turn flag the code leaves unnamed (turnFlags bit 3). The divisor is read from KERNEL.BIN per character and limit level (hpDivisor), so the code alone doesn't give its values.CodeXeeynamo/ff7-decomp
    How we know
    4252void BattleApplyDamageAndChargeLimitGauge(void) {
    4253    BattleUnit* target = &g_BattleState.combatant[g_CurrentAction->targetId];
    4254    s32 isHeal = g_CurrentAction->damageFlags & 1;
    ⋮
    4261        return;
    ⋮
    4265    if (g_CurrentAction->damageFlags & 4) {
    4266        oldValue = target->curMP;
    4267        target->curMP = SysAddSubWithMaxMinBound(oldValue, g_CurrentAction->tmpDamage, target->maxMP, isHeal);
    4268        return;
    ⋮
    4281    // only party members charge their limit gauge, and only from enemy attacks
    4282    if (g_CurrentAction->targetId >= NUM_PARTY || g_CurrentAction->actorId < START_ENEMY || isHeal) {
    4283        return;
    ⋮
    4286    if (g_CurrentAction->partyWork->limitLevel >= 4 || g_BattleWork.turn[g_CurrentAction->targetId].turnFlags & 8) {
    ⋮
    
    src/battle/battle.c lines 4252–4311 at fc71ccc · upstream ↗
    388                    party->limitBreakHPDivisor = D_80082268[charId].hpDivisor[limitLevel];
    
    src/battle/batini.c line 388 at fc71ccc · upstream ↗
    786// Per-character record of KERNEL.BIN section 3 (battle and growth data), 0x38 bytes
    787// each, nine of them from 0x80082268. The limit commands and HP divisors the
    788// limit-break code reads are the third and last fields.
    ⋮
    797    /* 0x28 */ s32 hpDivisor[4]; // by limit level
    
    include/game.h lines 786–797 at fc71ccc · upstream ↗

    Checked against the evidence by its author, an AI model, 2026-10-22.

    Checked by a second AI model, 2026-10-22.

    In the claim ledger

Sources

Code