Mechanic · health & lives · platform fighter
Damage percent
A damage counter that rises with each hit and makes later launches stronger, in place of health that runs out.
On this page
A damage percent counts the damage a fighter has taken and makes each launch stronger as it rises. Super Smash Bros. caps it at 999%1, and its knockback formula reads it2.
- CappedSuper Smash Bros. (1999). Each hit adds its damage to the percent, up to 999.1
Games
| Game | Year | How | Note |
|---|---|---|---|
| Super Smash Bros. | 1999 | Capped | each hit adds its damage to the percent, up to 999 |
Every claim about this mechanic, by game (1)
References
- ^ abIn the US version of Super Smash Bros.,
ftParamUpdateDamageadds the damage a fighter takes to itspercent_damageand caps it at 999.ftMainProcParamscalls it withdamage_queue, to whichftMainCheckGetUpdateDamageadds each hit's damage, but only inside a branch taken when the fighter'sdamage_knockbackisn't 0, tested before knockback resistance is subtracted; there, queued damage from hits that gave no knockback isn't added. While the fighter has damage resistance (is_damage_resist), a hit's damage goes againstdamage_resistfirst, and only what passes it reaches the queue.CodeVetriTheRetri/ssb-decomp-rerevisedHow we know
1527void ftParamUpdateDamage(FTStruct *fp, s32 damage) ⋮ 1529 fp->percent_damage += damage; ⋮ 1533 if (fp->percent_damage > 999) ⋮ 1535 fp->percent_damage = 999;
src/ft/ftparam.c lines 1527–1536 at 572a747 · upstream ↗ 3856 if (fp->damage_knockback != 0.0F) ⋮ 3872 fp->damage_knockback -= knockback_resist; ⋮ 3878 ftParamUpdateDamage(fp, fp->damage_queue);
src/ft/ftmain.c lines 3856–3878 at 572a747 · upstream ↗ 2119sb32 ftMainCheckGetUpdateDamage(FTStruct *fp, s32 *damage) ⋮ 2121 if (fp->is_damage_resist) ⋮ 2123 fp->damage_resist -= *damage; ⋮ 2125 if (fp->damage_resist <= 0) ⋮ 2127 fp->is_damage_resist = FALSE; ⋮ 2129 *damage = -fp->damage_resist; ⋮ 2132 if (!(fp->is_damage_resist)) ⋮ 2134 fp->damage_queue += *damage;
src/ft/ftmain.c lines 2119–2134 at 572a747 · upstream ↗ 1000 s32 percent_damage; // Fighter's damagesrc/ft/fttypes.h line 1000 at 572a747 · upstream ↗ Checked against the evidence by its author, an AI model, 2026-10-22.
Revised after a check by a second AI model, 2026-10-22.
- ^In the US version of Super Smash Bros.,
ftParamGetCommonKnockbackcomputes a hit's knockback as times an attacker and a defender factor from a handicap table. Here d is the target's damage percent plusdamage_queue, the damage queued against it, whichftMainProcParamsadds to the percent and then clears; h is the hit's damage; w is the target'sweightattribute, which the decompilers comment "Or, rather, \"knockback multiplier\""; g and b are the hit'sknockback_scaleandknockback_base; and r is the battle'sdamage_ratio. A hit with a nonzeroknockback_weightk puts 1 + 0.5k in place of the d term, the value that term takes at d = 10 and h = k (computed), so that launch doesn't grow with the percent. The result is capped at 2500. Of the hits a fighter takes together,ftMainProcessHitCollisionStatsMainkeeps the largest knockback, andftMainProcParamsmultiplies it by 2/3 while the fighter is crouching (nFTCommonStatusSquatornFTCommonStatusSquatWait) and subtracts the larger of two knockback-resistance values, down to 0.CodeVetriTheRetri/ssb-decomp-reHow we know
1451f32 ftParamGetCommonKnockback(s32 percent_damage, s32 recent_damage, s32 hit_damage, s32 knockback_weight, s32 knockback_scale, s32 knockback_base, f32 weight, s32 attack_handicap, s32 defend_handicap) ⋮ 1455 if (knockback_weight != 0) ⋮ 1457 knockback = ( ( ( ( ( ( 1 + ( 10.0F * knockback_weight * 0.05F ) ) * weight * 1.4F ) + 18.0F ) * ( knockback_scale * 0.01F ) ) + knockback_base ) * ( gSCManagerBattleState->damage_ratio * 0.01F ) * dFTCommonDataHandicapTable[attack_handicap - 1][0] ) * dFTCommonDataHandicapTable[defend_handicap - 1][1]; ⋮ 1459 else ⋮ 1461 f32 damage_add = percent_damage + recent_damage; ⋮ 1463 knockback = ( ( ( ( ( ( ( damage_add * 0.1F ) + ( damage_add * hit_damage * 0.05F ) ) * weight * 1.4F ) + 18.0F ) * ( knockback_scale * 0.01F ) ) + knockback_base ) * ( gSCManagerBattleState->damage_ratio * 0.01F ) * dFTCommonDataHandicapTable[attack_handicap - 1][0] ) * dFTCommonDataHandicapTable[defend_handicap - 1][1]; ⋮ 1465 if (knockback >= 2500.0F) ⋮ 1467 knockback = 2500.0F;
src/ft/ftparam.c lines 1451–1468 at 572a747 · upstream ↗ 2699 knockback_temp = ftParamGetCommonKnockback ⋮ 2701 this_fp->percent_damage, 2702 this_fp->damage_queue, ft_attack_coll->damage, 2703 ft_attack_coll->knockback_weight, 2704 ft_attack_coll->knockback_scale, 2705 ft_attack_coll->knockback_base, 2706 attr->weight, 2707 attacker_fp->handicap, 2708 this_fp->handicap
src/ft/ftmain.c lines 2699–2709 at 572a747 · upstream ↗ 2672 FTAttributes *attr = this_fp->attr;src/ft/ftmain.c line 2672 at 572a747 · upstream ↗ 898 f32 weight; // Or, rather, "knockback multiplier"src/ft/fttypes.h line 898 at 572a747 · upstream ↗ 2845 if (knockback < knockback_temp) ⋮ 2847 knockback = knockback_temp;
src/ft/ftmain.c lines 2845–2847 at 572a747 · upstream ↗ 2990 this_fp->damage_knockback = knockback;src/ft/ftmain.c line 2990 at 572a747 · upstream ↗ 3856 if (fp->damage_knockback != 0.0F) ⋮ 3858 if ((fp->status_id == nFTCommonStatusSquat) || (fp->status_id == nFTCommonStatusSquatWait)) ⋮ 3860 fp->damage_knockback *= (2.0F / 3.0F); ⋮ 3866 if (fp->knockback_resist_status < fp->knockback_resist_passive) ⋮ 3868 knockback_resist = fp->knockback_resist_passive; ⋮ 3870 else knockback_resist = fp->knockback_resist_status; ⋮ 3872 fp->damage_knockback -= knockback_resist; ⋮ 3874 if (fp->damage_knockback <= 0) ⋮ 3876 fp->damage_knockback = 0; ⋮ 3878 ftParamUpdateDamage(fp, fp->damage_queue);
src/ft/ftmain.c lines 3856–3878 at 572a747 · upstream ↗ 3816void ftMainProcParams(GObj *fighter_gobj)src/ft/ftmain.c line 3816 at 572a747 · upstream ↗ 4007 fp->damage_queue = 0;src/ft/ftmain.c line 4007 at 572a747 · 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
- VetriTheRetri. 2026. “ssb-decomp-re: a decompilation of Super Smash Bros. (VetriTheRetri/ssb-decomp-re).” Commit 572a747. VetriTheRetri/ssb-decomp-re @ 572a747 · licence, all uses