Mechanic · combat · role-playing game
Limit Break
A gauge that fills as a character takes damage and, when full, unlocks a stronger action.
On this page
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
| Game | Year | How | Note |
|---|---|---|---|
| Final Fantasy VII | 1997 | From damage taken | 300 × damage over max HP, times 256 over a per-character divisor, from enemy hits only |
Every claim about this mechanic, by game (1)
References
- ^ abcIn the North American release, when an enemy's action takes HP from a party member,
BattleApplyDamageAndChargeLimitGaugeadds ⌊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 (turnFlagsbit 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-decompHow 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.
Sources
Code
- Xeeynamo and ff7-decomp contributors. 2026. “ff7-decomp: a matching decompilation of Final Fantasy VII for the PlayStation (Xeeynamo/ff7-decomp).” Commit fc71ccc. Xeeynamo/ff7-decomp @ fc71ccc · licence, all uses