Guide

Game combo damage scaling systems explained

Harbor Brawl's grappler — codename “Anchor” — shipped with honest per-move damage: a single heavy did 12%, a launcher did 8%, and each follow-up in the corner loop looked modest on the movelist. In practice, a 38-hit optimal route deleted 62% of a rival's life bar because every hit applied full base damage with no combo scaling. Casual players called it unfair; high-level players called it solved. The fix was not nerfing individual buttons — it was separating raw move power from combo context through explicit proration curves, starter penalties, and a hard combo damage cap.

Combo damage scaling is the ruleset that reduces (or occasionally increases) how much each hit contributes once a combo is already in progress. It sits alongside hitstun decay and juggle limits: hitstun decides how long the combo lasts; scaling decides how much life it removes. Without scaling, long confirms always dominate short confirms, meterless routes creep toward one-touch kills, and balance patches become whack-a-mole on individual normals. This guide covers scaling taxonomy, proration math, starter and move modifiers, caps and floors, interaction with combo routing, the Harbor Brawl refactor, a technique decision table, pitfalls, and a production checklist.

What combo damage scaling is (and is not)

Combo damage scaling (also called proration or damage scaling) multiplies each hit's outgoing damage based on how deep you are into a combo, which move started it, and sometimes which move is currently connecting.

It is distinct from:

  • Base move damage — the value on the movelist when the move hits as a single, isolated strike.
  • Hitstun scaling — how long the opponent stays stunned; a combo can end while damage scaling still has headroom.
  • Defense modifiers — guard damage, damage reduction buffs, or armor that absorb hits without changing proration.
  • Counter-hit bonuses — one-time multipliers on the opening hit, separate from per-hit decay in the chain.

Good scaling makes long combos feel rewarding (many hits, big total) while keeping efficiency bounded: damage per frame of advantage should not grow without limit. Pair scaling tables with frame data so designers can compare damage-per-plus-frame across routes, not just total life removed.

Scaling curve taxonomy

Most games pick one primary curve and layer exceptions on top. Document the curve in combat specs so balance patches adjust the function, not twenty unrelated move values.

Curve type Behavior Typical use Risk
Per-hit linear decay Each hit after the first multiplies by a constant (e.g. 0.9, 0.85) Fighting games with medium combo length Late hits become mathematically irrelevant without a floor
Step tiers Hits 1–3 at 100%, 4–6 at 80%, 7+ at 60% Readable movelist tooltips, brawlers Cliff edges encourage routing around tier boundaries
Starter penalty Entire combo inherits a multiplier from the opening move class Light confirms vs heavy/special starters Over-penalizing lights makes neutral too low-damage
Move-specific proration Each move carries its own “combo multiplier” on top of global decay Multi-hit specials, EX moves, supers Opaque stacking if not shown in training UI
Hard combo cap Total combo damage cannot exceed N% of max life Games with infinite juggles or long air loops Cap too low makes extended play feel cosmetic

Many production fighters combine all five: global per-hit decay, starter class, per-move proration, a minimum damage floor (so chip hits still register), and a soft or hard cap on combo totals. The Harbor Brawl refactor adopted exactly this stack.

Proration math in practice

A minimal implementation tracks three counters on the defender during a combo:

  • combo_hit_index — how many hits have connected since the last reset.
  • starter_tag — enum set by the move that opened the combo (light, medium, heavy, special, throw, counter).
  • accumulated_combo_damage — running sum for cap enforcement.

On each hit, compute:

global_scale   = pow(per_hit_factor, combo_hit_index - 1)
starter_scale  = STARTER_TABLE[starter_tag]
move_scale     = move.combo_proration
raw_damage     = move.base_damage * global_scale * starter_scale * move_scale
final_damage   = clamp(raw_damage, move.min_combo_damage, cap_remaining)

Worked example (Harbor Brawl post-patch): Anchor's medium starter (starter_scale 1.0) into three lights (move_scale 1.0 each) then a heavy special (move_scale 0.7, base 14%). With per_hit_factor 0.85:

  • Hit 1 (medium): 10% × 1.0 × 1.0 = 10.0%
  • Hit 2 (light): 4% × 0.85 × 1.0 = 3.4%
  • Hit 3 (light): 4% × 0.72 × 1.0 = 2.9%
  • Hit 4 (light): 4% × 0.61 × 1.0 = 2.4%
  • Hit 5 (special): 14% × 0.52 × 0.7 = 5.1%

Total: 23.8% vs the pre-patch 38%+ from the same route. The special still feels like a payoff hit because its base is high, but it no longer doubles the combo alone. Training mode displays each multiplier line so players learn why the route changed, not just that Anchor got “nerfed.”

Starter penalties and route identity

Starter penalties encode risk/reward: a jump-in heavy that loses on whiff should out-damage a safe light confirm if both connect. Typical starter_scale bands:

  • Light / poke confirm: 0.85–0.95 — lower ceiling, rewards consistency.
  • Medium / counter-hit: 1.0 — baseline.
  • Heavy / risky launcher: 1.05–1.15 — pays for startup and recovery risk.
  • Throw or command grab: 0.5–0.8 on follow-ups — prevents throw loops from becoming infinite damage printers.
  • Meter super opener: often exempt from global decay for hit 1, then normal decay on follow-ups — makes supers feel impactful without breaking caps.

Starter tags should reset only on true combo breaks (knockdown without OTG, block, burst, or timer expiry) — not on every juggle touch, or routing becomes unpredictable.

Caps, floors, and chip in combos

Damage floors prevent late hits from rounding to zero — common values are 1–2% of max life or a flat HP minimum. Floors keep multi-hit specials readable in long strings.

Combo caps clamp accumulated_combo_damage. Soft caps apply increasing decay after a threshold (e.g. extra 0.5× multiplier after 30% dealt); hard caps stop all damage at 35%. Harbor Brawl uses a hard cap of 32% for meterless routes and 42% when super meter is spent mid-combo — communicated on the health bar as a subtle burn marker when the cap is approaching.

Chip and scaling: decide explicitly whether blockstring chip scales with combo index. Most fighters do not scale chip — otherwise blockstring pressure becomes a life-lead engine independent of confirms.

Interaction with hitstun and juggle rules

Damage scaling and hitstun scaling solve different problems but must be tuned together. If hitstun lasts longer than damage scaling allows meaningful hits, players see long combos that tick for scraps — visually busy, emotionally flat. If damage scaling is loose but hitstun decays fast, optimal play becomes short two-hit confirms that still hurt.

Alignment rules of thumb:

  • Target similar combo depth at which damage and hitstun become non-viable — usually within one hit of each other.
  • Air juggles often need steeper damage decay than ground chains because gravity and juggle points already limit length.
  • OTG (off-the-ground) hits frequently carry an extra 0.7× damage multiplier to prevent infinite loop value.
  • When counter-hit routes add hitstun, do not exempt them from damage decay unless the route is explicitly designed as a high-risk punish.

Harbor Brawl refactor: from movelist nerfs to scaling tables

Before the refactor, balance patches adjusted Anchor's light damage from 4% to 3.5% and back — collateral damage to single-hit neutral tools. After implementing the scaling stack:

  1. Reverted single-hit values to pre-nerf baselines so pokes felt snappy.
  2. Added per_hit_factor 0.85 and starter_table with throw penalty 0.65.
  3. Tagged multi-hit specials with move_scale 0.55–0.75.
  4. Enforced 32% meterless combo cap with training-mode overlay.
  5. Logged scaling_breakdown[] per hit in replays for QA.

Result: optimal corner damage dropped from 62% to 29% on the same route, while single medium poke damage returned to 10%. Match length variance fell 18% in internal playtests because comebacks no longer died to one readless confirm. Other characters inherited the same engine parameters with per-roster cap tweaks instead of bespoke per-move patches.

Technique decision table: scaling vs flat damage

Scenario Prefer combo scaling Flat damage acceptable
Long confirm routes (10+ hits) Required — without decay, length equals power Only if hitstun hard-limits length to 3 hits
Character with many multi-hit specials Per-move proration prevents special spam routes Single-hit heavy characters
PvP ranked with infinite training lab time Caps stop solved one-touch routes Casual party fighters with high life pools
Co-op brawler vs mobs Soft cap keeps spectacle without boss melts Horde modes where TTK is intentionally short
Readable movelist for newcomers Step tiers + training UI breakdown Single-strike duel games (no chains)

Common pitfalls

  • Scaling without UI transparency. Players blame move nerfs when only combo context changed; show multipliers in training mode.
  • Double-penalizing the same route. Starter penalty plus harsh move proration plus low cap can make confirms worthless.
  • No damage floor. Late hits round to zero; combo feels like padding.
  • Cap bypass via off-combo damage. DOT, reflect, or environmental hits ignoring the cap create new optimal routes.
  • Mismatched hitstun and damage decay. Long stun with tiny damage per hit feels like a waste of animation budget.
  • Inconsistent reset rules. Players cannot predict when starter_tag clears; routes feel random online.
  • Throw scaling forgotten. Throw into full-damage loop dominates grapplers without throw proration on follow-ups.
  • Patching base damage instead of curves. Collateral neutral nerfs every time a corner loop is too strong.

Production checklist

  • Define global per-hit decay function and document in combat spec.
  • Publish starter_tag enum and starter_scale table per character class.
  • Tag every move with combo_proration and optional min_combo_damage.
  • Set meterless and metered combo damage caps; expose in UI near health bar.
  • Align hitstun decay targets with damage decay depth (within ~1 hit).
  • Ship training overlay: base, global, starter, move, final per hit.
  • Log scaling_breakdown in replays for balance QA and spectator tools.
  • Regression-test throw, counter, and OTG openers for cap bypass.
  • Simulate worst-case routes with scripts before patching base values.
  • Verify rollback netcode sends combo_hit_index and starter_tag deterministically.
  • Update movelist when curves change — not just individual move numbers.
  • Playtest low-damage routes: confirm they still feel worth executing.

Key takeaways

  • Combo damage scaling separates raw move power from combo context — long strings stay exciting without one-touch kills.
  • Per-hit decay, starter penalties, move proration, floors, and caps stack together in most production fighters.
  • Hitstun limits how long a combo lasts; scaling limits how much life it removes — tune both to the same depth.
  • Training UI that shows multiplier breakdowns prevents “hidden nerf” frustration when only curves change.
  • Harbor Brawl cut Anchor's corner loop from 62% to 29% by adding scaling tables while restoring single-hit poke damage.

Related reading