Guide
Game damage scaling and proration systems explained
Harbor Brawl's combo lab looked healthy on paper: average routes ran 9–12 hits, juggle limits capped air time, and every character had a signature loop. Ranked telemetry told a different story. A mid-tier grappler's corner route — throw, relaunch, three lights, wall bounce, reset, super — deleted 42% life while a rushdown's optimal punish on the same starter dealt 28%. Players called it “scaling is broken,” but the bug was not missing limits; it was inconsistent proration on multi-hit specials and no global per-hit decay on repeated normals. Light hits in long chains still dealt 100% of their solo damage.
Damage scaling (sometimes combo scaling or
proration) reduces how much each successive hit contributes to total
combo damage. It is the numeric counterpart to structural limits: juggle caps stop
infinite air time; scaling stops infinite damage from the hits you still land. Together
they define the combo economy — how much payoff a difficult route earns
versus a simple confirm. Harbor Brawl shipped a central
ComboDamageScaler with per-hit multipliers, per-move proration tags,
minimum damage floors, and reset-generation penalties. Average combo damage dropped
19% on degenerate loops while single-hit confirms were unchanged; route diversity
in top 500 players rose 34% because every character's BnB now had a readable
damage ceiling. This guide covers scaling curves, move proration, floors and knees,
coupling with resets and juggles, the Harbor refactor, a technique decision table,
pitfalls, and a production checklist.
What damage scaling actually multiplies
When hit n in a combo connects, the engine typically computes:
damagen = basemove × prorationmove × scalinghit_index × modifiers
where basemove is the move's solo damage, prorationmove is a move-specific factor (often < 1 for multi-hit specials), scalinghit_index is the global per-hit decay, and modifiers covers counter-hit bonuses, rage, guts, and similar systems. The hit index usually increments on every damaging contact in the combo, including blocked chip in some games (rare) but excluding whiffs.
- Per-hit scaling — a table or formula keyed by hit index: hit 1 = 100%, hit 2 = 100%, hit 3 = 90%, hit 4 = 80%, … hit 10 = 50%. This is the backbone of combo economy.
- Move proration — multi-hit moves apply a lower factor when they are not the first hit (e.g. a 3-hit special deals 80% / 70% / 60% of base when chained).
- Starter scaling — some games scale from the opener: confirms off light pokes may cap total combo damage lower than confirms off heavies or launchers.
- Minimum damage floor — after all multiplication,
max(computed, floor)prevents hits from rounding to zero; typical floors are 1–3% of max life per hit or a flat point value.
Scaling applies to damage dealt, not always to hitstun or knockback. Many fighters decay hitstun separately (see juggle limit guides) so combos end structurally before damage floors make every hit tick for meaningful life.
Common scaling curves and breakpoint knees
Designers pick a curve shape based on how long combos should remain threatening:
- Linear decay — subtract 10% per hit after hit 3. Predictable, easy to spreadsheet; can feel abrupt past hit 8.
- Exponential decay — each hit multiplies by 0.92–0.95. Smooth tail; long anime routes still deal something on hit 15 without exploding.
- Step / knee breakpoints — 100% through hit 4, then 70% through hit 8, then 40% thereafter. Used with combo resets so each “generation” gets its own knee.
- Asymptotic floor — scaling approaches 30% minimum but never below; pairs with per-hit damage floors for readability.
Publish the curve in training mode. If players cannot see hit index and current scaling factor, they blame move balance instead of the economy layer.
| Hit index | Linear (−10%/hit after 3) | Exponential (0.93n−1) | Knee (Harbor Brawl) |
|---|---|---|---|
| 1–3 | 100% | 100% | 100% |
| 4 | 90% | 93% | 100% |
| 5 | 80% | 86% | 85% |
| 6 | 70% | 80% | 85% |
| 7–8 | 60–50% | 75–70% | 70% |
| 9+ | 40% floor | ~65% tail | 55% floor |
Move proration and multi-hit specials
Global scaling alone fails when a single move contributes three hits at full power. Move proration tags each attack:
- First-hit proration — if the move starts the combo, proration = 1.0; if chained, proration = 0.8 (example).
- Per-strike proration — a 5-hit super might use 0.5 / 0.45 / 0.4 / 0.35 / 0.3 on each strike regardless of global index.
- Forced scaling override — some enders set hit index to 10+ artificially so they always deal reduced damage in long routes (anti-infinite insurance).
- OTG and bounce proration — off-the-ground and wall hits often carry an extra 0.85× factor so geometry extensions do not double-dip damage.
In chain systems, light chains may use gentler proration (each light 0.95) because they are the intended filler; in link-heavy games, repeated medium links might prorate at 0.85 per link to cap confirm reward.
Starters, resets, and generation penalties
Combo economy must answer: how much damage can this opener buy?
- Starter tiers — light confirm caps total scaling at hit 6
knee; launcher confirm allows hit 10 knee. Implement via
max_hit_index_for_scalingor a starter tag on the first damaging hit. - Reset generation — each
combo reset
increments
reset_gen; scaling table shifts down one knee per generation (gen 0: 100% through hit 4; gen 1: 100% through hit 2 only). - Super / meter enders — often exempt from scaling or use a fixed proration (e.g. always 40% of raw super damage) so they remain comeback tools without dominating neutral confirms.
- Chip and guard damage — usually not scaled; otherwise blockstrings become infinite chip kills. Document exceptions (some games scale chip on the 5th blocked hit in a string).
Harbor Brawl added reset_gen with a hard cap of 1 per combo for ranked
modes; training mode allows 2 for lab routing. Generation 1 applies an immediate
0.75× global multiplier on all subsequent hits.
Minimum damage, rounding, and display
Without floors, late-chain hits round to 0 in integer math and players see “0 damage” popups — confusing and buggy-looking even when hitstun still applies. Common patterns:
- Flat floor — minimum 2 damage per hit after scaling.
- Percent floor — minimum 0.3% of defender max life per hit.
- One damage tick rule — if computed < 1, set to 1 only if hitstun > 0; else skip damage entirely (used for phantom hits).
Floating combat text should show post-scaling values. Training HUD should list: hit index, global scaling %, move proration %, reset generation, and running combo total. Harbor's combo trainer added a damage budget bar: expected max for current starter tier vs actual dealt.
Coupling with juggle limits and defensive systems
Scaling and structure limits solve different problems; both are required:
- Juggle limits stop infinite air time; scaling stops long-but-legal routes from melting life bars.
- Guts / defense — some games reduce damage as life drops; apply guts after scaling or defenders become nearly immortal at low life in long combos.
- Rage / comeback — attacker rage may multiply final damage; cap rage × scaling product or one-shot kills return.
- Recoverable health — if blue life exists, decide whether scaling applies before or after recoverable split; inconsistent rules create “why did that heal back so much?” moments.
Regression-test: a route at juggle limit ender should deal less than 35% life from a mid-tier starter unless it spends meter. If structurally maximal routes exceed that, tighten knees before shortening juggle budgets.
Harbor Brawl refactor
Pre-refactor pain points:
- Per-move hardcoded
combo_damage_multwith no shared hit index — wall bounce reset the index for some moves only. - Multi-hit specials used first-strike damage three times at 100% global scaling.
- No generation penalty on restand loops; throw → relaunch → full damage every generation.
- Integer rounding produced 0-damage hits on hit 12+; players thought combos broke.
Shipped changes:
- Central
ComboDamageScaleron defender: hit index, reset_gen, starter tier enum, running damage total. - Knee table (100% / 85% / 70% / 55% floor) with exponential blend between knees.
- Per-move proration tags on all specials; multi-hit supers use per-strike table.
- Generation 1: ×0.75 global; generation 2 disabled in ranked.
- Minimum 2 damage or 0.25% max life, whichever is higher.
- Training overlay: scaling %, proration %, projected combo cap for starter tier.
Results after one balance pass: degenerate corner loop damage 42% → 27%; average combo length unchanged (9.1 hits); single-hit heavy damage unchanged; character win-rate spread tightened 4.2% → 2.8% in ranked week 3.
Technique decision table
| Scenario | Prefer | Avoid |
|---|---|---|
| Long anime fighter | Exponential scaling + per-strike proration on supers | Hard 5-hit cap only (feels punitive) |
| Short neutral fighter | Aggressive knees after hit 5; high starter variance | Flat scaling that nerfs single confirms |
| Tag / assist teams | Per-tag scaling refresh with generation penalty | Full scaling reset on every tag switch |
| Beat-em-up hordes | Per-enemy-class damage cap; weak per-hit scaling | Fighting-game knees on 3-hit crowd juggles |
| Rollback online | Integer lookup tables; deterministic hit index | Float accumulation over 20+ hits |
| Routes with combo resets | Generation knee shift + juggle point debit | Scaling-only with no structural reset tax |
Common pitfalls
- Scaling the first hit — nerfs neutral pokes; start decay at hit 2 or 3 unless designing a pure combo game.
- Forgetting multi-hit proration — one special contributes 30% life alone in a 10-hit route.
- Resetting hit index on wall bounce — doubles effective damage unless generation penalty exists.
- Zero-damage hits — integer floor missing; looks like a bug.
- Scaling hitstun and damage identically — combos end too early or too late relative to damage dealt.
- Opaque supers — fixed 40% proration not documented; players think super is weak/strong randomly.
- Guts order wrong — applying guts before scaling makes comeback mechanics dominate long routes.
- No starter tiers — light poke confirms pay nearly as much as risky launcher confirms; neutral becomes homogeneous.
Production checklist
- Define hit index rules: what increments, what resets, what wall bounce does.
- Choose scaling curve (linear, exponential, or knee table) with spreadsheet sims.
- Tag every move with proration class and per-strike table if multi-hit.
- Set starter tiers (light / medium / heavy / launcher) and combo damage caps.
- Implement reset generation counter and ranked vs training caps.
- Add minimum damage floor and verify no 0-damage ticks with hitstun.
- Document super and meter ender exemptions or fixed proration.
- Couple with juggle limit sims: max-structure route ≤ 35% life from mid starter.
- Expose scaling %, hit index, and combo total in training mode HUD.
- Regression-test single-hit damage unchanged after scaling pass.
- Log combo damage histograms in telemetry; flag outliers > 2σ.
- Re-tune knees when new resets or bounce refunds ship.
Key takeaways
- Damage scaling reduces per-hit contribution in long combos; juggle limits reduce how many hits you can land — you need both.
- Global per-hit decay and per-move proration are separate layers; multi-hit specials need per-strike tables.
- Combo resets should shift scaling knees or apply generation penalties, not refresh full damage for free.
- Harbor Brawl cut degenerate loop damage 42% to 27% without shortening average combo length by unifying hit index and proration tags.
- Minimum damage floors prevent 0-damage ticks and keep late-chain feedback readable.
- Publish scaling math in training mode — opaque combo economy reads as random move balance.
Related reading
- Game combo systems explained — chains, cancels, buffers, and how scaling fits the wider combo stack
- Game juggle limit and decay systems explained — structural caps that pair with numeric scaling
- Game combo reset systems explained — restand routes and generation penalties in the economy
- Game link, chain and target combo systems explained — routing rules that interact with per-move proration