Guide

Game juggle limit and decay systems explained

Harbor Brawl's combo layer shipped with generous launchers and no shared ceiling. Corner routes that tagged a wall bounce could loop the same three-hit air chain indefinitely; midscreen routes died after four hits because gravity outran hitstun with no decay curve. Ranked reports flagged fourteen infinite setups in week one; casual players complained combos felt “random length.” The combat team replaced per-move juggle flags with a central juggle limit finite-state machine: a hit counter, decay multipliers on hitstun and launch velocity, and a forced-stand gate when the budget emptied. Infinite combo tickets dropped 94%; average combo length rose from 4.1 to 8.6 hits because designers could safely extend decay curves instead of hard-capping everything at three.

Juggle limit and decay systems are the anti-infinite layer on top of launch and air-chain rules: they decide how many air hits a combo may contain, how quickly each successive hit becomes harder to link, and what happens when the budget is exhausted (forced knockdown, standing reset, or untechable air state). Damage scaling caps output; juggle limits cap structure. Without both, scaling alone cannot stop geometric loops that refresh air state via bounces. This guide covers limit taxonomy, decay math, forced stand and untechable gates, bounce and OTG budget coupling, reset conditions, the Harbor Brawl refactor, a technique decision table versus scaling-only caps, pitfalls, and a production checklist.

What juggle limits control

A juggle limit answers one question: when must this aerial sequence end? The answer can be a hard number, a shrinking window, or a hybrid. Limits apply per combo instance (reset on knockdown, blockstring break, or round reset) and typically track:

  • Air hit count — raw number of juggleable hits since last ground state.
  • Juggle points — weighted budget where heavies and launchers cost more than jabs.
  • Decay multiplier — per-hit shrink applied to hitstun, gravity, or launch impulse.
  • Height band — links fail above/below altitude thresholds regardless of counter.
  • Timer — air state expires after N frames without a qualifying hit.

Limits do not replace launch tiers or bounce rules; they constrain them. A wall bounce may refund one juggle point, but only if the shared juggle_remaining register allows it.

Limit mode taxonomy

Mode End condition Player skill expression Risk profile
Hard cap Hit N ends juggle; hit N+1 whiffs or forces stand Route selection within fixed length Predictable; can feel arbitrary at cap
Linear decay Each hit subtracts fixed hitstun frames Tightening link timing Smooth curve; harder to communicate in UI
Exponential decay Hitstun × decayhit_index Early hits easy, late hits expert-only Long tail combos rare; balance sensitive
Point budget Moves debit juggle points; zero triggers end Efficient routing, launcher choice Flexible; requires per-move authoring
Forced stand Defender snaps upright; attacker may still punish Stand punish routes, reset extensions Distinct from HKD; enables reset meta
Untechable tail Final hits not air-techable; guaranteed ender Ender selection for max damage Prevents air-tech escape at limit

Harbor Brawl uses point budget (default 12 points) with exponential hitstun decay after the fifth air hit and forced stand when the budget hits zero unless the last move is tagged untechable_ender.

Decay math and link windows

Decay shapes how the combo ends, not just when. Document formulas in design data so balance patches do not require code changes.

Hitstun decay

Most fighters shrink air hitstun per successive hit:

effective_hitstun = base_hitstun * pow(decay_rate, air_hit_index)

Typical decay_rate values range 0.88–0.96. Below 0.85, links collapse too fast; above 0.97, hard caps become mandatory again. Pair decay with a floor (minimum 4f hitstun) so the last link is still reactable in training mode.

Gravity and launch velocity

Some games increase gravity per air hit instead of shrinking hitstun. The defender falls faster, closing vertical link windows. Combine gravity ramp with pushback decay so late hits do not send the body out of reach horizontally.

Link validation pipeline

  1. Increment air_hit_index on juggleable contact.
  2. Debit juggle points per move tag (light = 1, heavy = 2, launcher = 3).
  3. Apply decay to hitstun and/or gravity for this hit.
  4. If budget ≤ 0 or hitstun < link requirement, reject further juggle hits.
  5. On end: trigger forced stand, soft HKD, or untechable tumble per move table.

Forced stand, untechable, and reset gates

When the limit fires, the defender must enter a terminal air state that attackers can read:

  • Forced stand — defender snaps to standing hurtbox mid-air or on landing; enables stand confirms and combo resets if you allow re-launch within a second budget.
  • Soft knockdown — defender falls; oki begins. Preferred when you want limit to hand off to meaty pressure instead of more air hits.
  • Untechable tumble — air-tech disabled for 20–40f; guarantees the limit ender connects. Use sparingly; removes defensive agency.
  • Hard knockdown — full knockdown with no air-tech; ends juggle cleanly. Good for super enders and damage-focused routes.

Publish which gate each limit ender uses. If forced stand and HKD share the same VFX, players cannot learn optimal limit routing.

Coupling with bounces, OTG, and scaling

Limits must interact with geometry extensions or corner loops break balance:

  • Wall bounce — refund 1–2 juggle points OR reset air_hit_index by one step, never both. Share a per-combo bounce_budget with floor bounce.
  • OTG hits — do not increment air hit index if you want OTG separate from juggle count; or debit extra points so sweep → relaunch cannot loop.
  • Damage scaling — scaling reduces damage; limits reduce hits. A combo can be structurally long but numerically weak — that is healthy.
  • Combo reset — if resets re-open juggle, consume the full remaining budget or apply a reset_generation cap (max 1 reset per combo).

Harbor Brawl refactor

Pre-refactor pain points:

  • Per-move can_juggle flags with no shared counter — wall bounce refreshed air state without decrementing anything.
  • Hitstun was flat; only gravity ended combos, so light characters juggled longer than heavies unintentionally.
  • No forced-stand state — limit enders clipped through crouching hurtboxes.

Shipped changes:

  • Central JuggleLimitController on defender: points, hit index, decay rate, terminal gate enum.
  • Exponential hitstun decay (0.92) after hit 5; point budget 12 (lights 1, mediums 2, launchers 3).
  • Wall and floor bounces refund 1 point once per combo if bounce_budget > 0.
  • Training HUD: point remainder, decayed hitstun preview, predicted link success.

Results after one tuning pass: infinite combo reports −94%; average combo length 4.1 → 8.6 hits; limit-ender damage share +11% (players route to spend budget efficiently); air-tech success on limit tail −31% (intended — untechable enders now readable).

Technique decision table

Scenario Prefer Avoid
Anime fighter, long combos Point budget + decay curve; bounce refunds capped Hard cap at 5 hits with no decay
Grounded neutral fighter Tight budget (8–10 pts); HKD terminal gate Forced stand resets every route
Tag / assist fighters Per-character sub-budget; tag resets generation counter Shared infinite pool across tags
Beat-em-up hordes Hard cap per enemy weight class Exponential decay (too opaque for crowds)
Rollback online Integer point debit + deterministic decay table Float decay accumulated over many hits
Teaching new players HUD juggle meter + link helper at limit threshold Hidden cap with no feedback
Competitive balance Scaling + limit; meter cost on bounce refund Scaling-only with bounce loops

Common pitfalls

  • Scaling without structural limit. Damage approaches zero but hit count is infinite via bounce refresh.
  • Bounce refunds both points and hit index. Loops never decay; QA finds wall → floor → wall cycles.
  • Hard cap with no decay. Combos feel identical length every time; routing skill flattens.
  • Decay so aggressive links fail before budget empties. Players never see limit enders; design intent wasted.
  • OTG increments air index. Every sweep relaunch burns budget twice as fast as intended.
  • Forced stand without stand hurtbox. Limit enders whiff; players think limit is bugged.
  • Per-character limits undocumented. Light vs heavy juggle length differs silently; matchup feels broken.
  • Rollback desync on float decay. Hit 7 links online, whiffs offline; trust collapses.

Production checklist

  • Define limit mode (cap, decay, budget, hybrid) in combat design doc.
  • Centralize juggle state on defender; moves only debit tags, never own counters.
  • Author per-move juggle point cost and whether hit increments air_hit_index.
  • Publish decay formula and floor hitstun; store rates in data tables.
  • Couple wall/floor bounce refunds to shared bounce_budget.
  • Specify terminal gate per limit ender: forced stand, HKD, soft KD, untechable.
  • Reset juggle state on blockstring break, ground contact (non-bounce), and round start.
  • Cap combo resets per sequence if resets re-open juggle.
  • Training overlay: points left, decayed hitstun, predicted link pass/fail.
  • Serialize juggle points, hit index, and decay generation for rollback.
  • Balance metrics: avg combo length, limit-ender share, infinite reports, air-tech rate.
  • Regression test: wall bounce → relaunch → wall bounce cannot exceed budget.

Key takeaways

  • Juggle limits cap combo structure; damage scaling caps output — you need both.
  • Point budgets with decay curves allow longer average combos than naive hard caps.
  • Bounce refunds must be capped and coupled to the same controller as air hit count.
  • Terminal gates (forced stand, HKD, untechable) must be readable and move-tagged.
  • Harbor Brawl cut infinite reports 94% and raised average combo length to 8.6 hits after a unified limit FSM.

Related reading