Guide
Game landing lag and recovery systems explained
Harbor Brawl's movement audit flagged a silent balance leak: jump-ins looked fair on paper — startup and active frames matched rival titles — but ranked replays showed attackers losing neutral 44% of the time within six frames of touching ground. The culprit was not air hurtboxes; it was landing recovery buried in animation tail data that never appeared in the public movelist. Designers separated touchdown frames from aerial attack recovery, published per-move landing lag tiers, and added landing autocorrect for crossup ambiguity. Empty-hop punish whiffs dropped 31%, safe-jump meaty success rose 26%, and support tickets tagged “my jump got punished for no reason” fell 19% in the first balance week.
Landing lag is the grounded recovery window after feet touch the floor — distinct from aerial attack endlag and from blockstun on landing. It governs whether a jump-in is plus, minus, or punishable; whether empty hops can mix on touchdown; and whether dash and run cancels can erase commitment. This guide covers touchdown taxonomy, hard vs soft landing, attack landing tiers, autocorrect and facing rules, landing-cancel windows, interaction with empty hops and input buffering, rollback scheduling, the Harbor Brawl refactor, a technique decision table versus frame-data-only documentation, pitfalls, and a production checklist.
Touchdown frame taxonomy
Players conflate “landing lag” with entire jump animations. Engineers need a precise state machine so animation, combat, and netcode agree on when the character is vulnerable on the ground.
| Phase | Definition | Typical vulnerability |
|---|---|---|
| Airborne | Feet off ground; aerial attacks and double-jump rules apply | Air hurtbox active; anti-air eligible |
| Touchdown (frame 0) | First simulation tick where ground collision resolves | Often still in air state until recovery table loads |
| Landing lag | Grounded recovery before idle or action cancel | Standing/crouching hurtbox; throws and lows may connect |
| Landing cancel window | Subset of landing lag where special moves or dashes can interrupt | Reduced punish window if cancel is allowed |
| Idle / action | Recovery complete; full move set available | Normal grounded counterplay |
Publish landing lag as its own column in frame sheets — not folded into “total jump duration.” Movelist UI should show empty-hop landing separately from jump-normal landing, or players cannot reason about whiff punish windows.
Hard landing vs soft landing
Many games apply different recovery when the character lands from height, from a blocked air attack, or with momentum. Standardize names across teams:
Hard landing
Triggered when vertical velocity exceeds a threshold, when landing from a knockdown launch, or when an air attack whiffs to the ground. Hard landing uses a longer recovery animation (often 20–40f) and may disable certain cancels. It punishes reckless jump-ins and prevents infinite low-height hop chains.
Soft landing
Normal jump arc touchdown or short-hop apex land. Soft landing recovery is what empty hops and safe jumps tune. Typical range: 4–12f for movement hops, 8–18f for jump normals depending on strength.
Blockstun landing
Defender blocks an air attack; attacker lands while defender remains in
blockstun. Advantage on landing is computed as:
landing_lag_attacker - blockstun_remaining_defender. A jump-in
can be safe on block yet minus on whiff — document both outcomes.
Attack landing lag tiers
Not every aerial move should share one landing number. Tier attacks so balance patches target families, not individual animation quirks.
| Tier | Examples | Design intent |
|---|---|---|
| Movement empty land | Empty hop, empty jump, wiffle jump | Short recovery enables mix; still punishable by fast lows |
| Light air normal | Jump jab, hop kick | Fast air-to-air; modest landing lag; weak reward on hit |
| Heavy air normal | Jump fierce, dive kick | High damage; long landing lag on whiff; defines AA risk |
| Special air end | Divekick special, air fireball land | Often hard landing; may OTG or slide on touchdown |
| Air throw land | Tiger knee air throw whiff | Long recovery on whiff; throw tech window on land |
Harbor Brawl tags each aerial move with land_tier and
land_override_frames so designers patch tiers globally then
override outliers. Regression tests assert tier bounds: light air normals
cannot exceed 14f soft landing without explicit balance ticket.
Landing autocorrect and facing
Crossups and ambiguous jump arcs break if facing flips on the wrong frame. Landing autocorrect adjusts facing and hurtbox offset at touchdown so defenders are not punished for holding the wrong block direction because of one-frame facing bugs.
- Crossup autocorrect. If attacker lands behind defender within N pixels, snap facing so block direction matches visual. Cap autocorrect range or crossups become unreactable online.
- Corner clamp. Landing position clamps to stage bounds before recovery starts; prevents landing inside wall with truncated recovery.
- Slide on land. Some moves apply horizontal drift during landing lag (e.g. dive kicks). Drift must end before cancel window or dash OS becomes unintentionally strong.
- Reverse jump land. Turnaround jumps may flip sprite at apex vs at land; pick one rule and document it in training mode.
Landing cancel windows
Landing cancels let skilled players shorten commitment without removing punishability entirely. Common patterns:
- Special cancel on land. Input special during frames 1–K of landing lag; skips remainder. K should be shorter than total landing lag so whiff still has a gap.
- Dash / run cancel on land. Ties into dash and run cancel systems for approach after empty hop. Run cancel from landing should cost the same run-start delay as ground run to avoid hop-run infinites.
- Jump cancel on land (short hop). Some anime fighters allow second hop only after soft landing completes; prevents triple-hop escape.
- Block cancel. Holding block during landing lag enters blockstun-ready state faster; tune so empty-hop block is not plus on frame one.
Buffer landing cancels through
global input buffer
with a dedicated LANDING buffer class so online play matches
offline lab timing.
Safe jumps, meaties and landing advantage
Safe jump math depends entirely on landing lag vs defender wake-up invulnerability:
- Measure defender's fastest reversal startup (including pre-flash frames).
- Measure attacker's jump arc time to meaty active frame on landing.
- Confirm meaty active overlaps wakeup before reversal hits, and that landing recovery ends before defender can punish if meaty whiffs.
Empty-hop safe jumps use touchdown mix instead of air attack meaty — see empty hop movement and okizeme and meaty design. Publish a “minimum safe jump height” per character in training mode when landing lag patches ship.
Design knobs
| Knob | Effect | Risk if mis-tuned |
|---|---|---|
| Soft landing frames (empty) | Shorter = safer hop mix; longer = more AA counterplay | Too short removes grounded answers to jump offense |
| Hard landing velocity threshold | Higher = fewer hard lands; lower = more jump risk | Too low makes every jump feel sluggish |
| Landing cancel length K | Wider window = higher skill ceiling on offense | Too wide erases whiff punish identity |
| Autocorrect pixel radius | Larger = fewer crossup block bugs online | Too large creates unreactable crossups |
| Land slide distance | Extends pressure after dive moves | Slide into throw range without recovery is oppressive |
Rollback and netcode
Landing is a discrete state transition sensitive to one-frame rollback:
- Resolve touchdown on simulation tick when ground probe hits, not on landing VFX event.
- Recompute landing lag from authoritative move ID at touchdown; do not inherit partial recovery from rolled-back air state incorrectly.
- Log touchdown tick,
land_tier, and cancel inputs in replay for dispute triage. - Autocorrect facing must run identically on predict and confirm paths in rollback netcode.
Technique decision table
| Approach | Best when | Weak when |
|---|---|---|
| Published landing lag per move | Competitive transparency; players optimize safe jumps | Animation-heavy game with procedural land blends |
| Tier-based landing only | Large roster; balance by family | Players cannot diagnose single-move outliers |
| Uniform jump landing | Casual fighters; simple teaching | No knob to differentiate light vs heavy jump risk |
| Hard landing on all jump attacks | Ground-heavy duel identity | Jump offense feels punishable without skill expression |
| Generous landing cancels | High-tempo anime fighter | Whiff punish meta collapses; defenders lack answers |
| Frame-data-only (no landing column) | Never — hides the main jump-in balance lever | Always — produces opaque feel and support churn |
Harbor Brawl refactor
The landing audit shipped these changes:
- Movelist column Land on every aerial and movement entry; empty hop 7f, jump light 11f, jump heavy 17f soft / 28f hard on whiff.
land_tierenum in combat data with CI bounds per tier.- Landing special-cancel window frames 3–6 for eligible characters only; removed accidental plus frames on block-cancel during lag.
- Crossup autocorrect radius reduced from 18px to 12px after low-block false positives in lab.
- Training mode overlay: touchdown flash + recovery frame counter on land.
- Telemetry:
land_punish_rate,safe_jump_success,hard_land_rateper character per patch.
Post-patch, jump-in neutral win rate stabilized within 2pp of designer target without nerfing air damage — proof the problem was documentation and recovery tuning, not raw hitbox size.
Pitfalls
- Burying landing in endlag. Air attack recovery and ground landing lag are different states; merging them breaks safe-jump calculators.
- VFX-led touchdown. Dust puff plays 2f late; players and netcode disagree on punish timing.
- Identical empty and attack land. Empty hops must not inherit jump-normal landing lag or mixups become unpunishable.
- Uncapped autocorrect. Defenders cannot hold block confidently; crossup meta becomes guess-heavy online.
- Landing cancel without whiff gap. Every jump becomes special-cancel safe; AA whiff punishes disappear.
- Patch notes omit land changes. Competitive trust erodes when silent landing tweaks shift safe jump tiers.
Production checklist
- Define touchdown state machine separate from airborne and idle.
- Publish landing lag column for every aerial and movement hop entry.
- Tag moves with
land_tierand enforce tier bounds in CI. - Document hard vs soft landing triggers in design wiki.
- Implement landing cancel buffer class consistent with global input buffer.
- Validate safe jump matrix after any landing lag patch.
- Cap crossup autocorrect radius; test low-block false positives.
- Align touchdown tick with ground probe, not VFX.
- Add training mode landing recovery overlay.
- Instrument land punish rate and safe jump success in telemetry.
Key takeaways
- Landing lag is grounded recovery after touchdown — distinct from air endlag and blockstun landing advantage.
- Hard vs soft landing tiers let you punish reckless jump-ins without slowing honest hop mix.
- Attack landing tiers and published frame data make jump offense readable and balanceable.
- Landing autocorrect and cancel windows need tight caps or crossups and whiff punishes break online.
- Harbor Brawl cut empty-hop punish whiffs 31% by surfacing landing lag and fixing touchdown scheduling.
Related reading
- Game empty hop movement systems explained — hop mixups that depend on landing recovery
- Game dash and run cancel systems explained — movement cancels after touchdown
- Game input buffering explained — landing cancel buffer class
- Game whiff punish and recovery frame systems explained — punish windows keyed to recovery end