Guide
Game wall-jump movement systems explained
Harbor Citadel's inner shaft is a 28-meter vertical climb between two parallel stone faces separated by 4.2 meters. The original gate required a standing jump, a mid-air double jump, and pixel-perfect landing on a narrow ledge — 62% of players who entered the shaft died on the first attempt. Designers widened the ledge, added coyote time, and still saw rage-quits because the problem was reach envelope, not input forgiveness. The fix was a wall-jump chain: touch either face, press jump, receive a diagonal impulse away from the wall and upward, then arc to the opposite face and repeat. Three chained wall-jumps reach the summit with margin; fall deaths dropped to 9%. Speedrunners later found a four-bounce route that skips the mid-shaft rest platform entirely.
A wall-jump is an airborne movement verb triggered when the character contacts a validated vertical surface and the player presses jump (or jump is auto-fired on contact, depending on design). Unlike wall-running, which sustains horizontal motion along a surface, wall-jumping is discrete: one contact, one impulse, one exit trajectory. It appears in Celeste-style precision platformers, Metroidvania ascent shafts, and action games that stack it with air dashes and locomotion controllers. This guide covers wall-jump taxonomy, contact detection, impulse shaping, chain limits and refresh rules, camera and animation hooks, level authoring envelopes, the Harbor Citadel refactor, a technique decision table, pitfalls, and a production checklist.
What wall-jump systems are
Wall-jump systems let players redirect momentum off vertical geometry to gain height, horizontal displacement, or both. Core responsibilities:
- Surface validation — decide which colliders count as wall-jumpable (angle threshold, material tags, one-way exclusions).
- Contact detection — raycasts, capsule sweeps, or trigger volumes that fire when the player's body touches a wall while airborne or within a short post-contact window.
- Impulse application — set velocity away from the wall normal plus an upward component; may preserve, replace, or blend with existing velocity.
- Chain governance — limit consecutive wall-jumps before ground touch, stamina drain, or diminishing returns on vertical boost.
- State hygiene — reset air jumps, dash charges, and coyote timers consistently so verb stacks remain readable.
Wall-jump is not the same as combat wall bounce, which usually applies to knockback against arena bounds. Traversal wall-jumps are player-initiated, tuned for repeatability, and authored into level spacing.
Wall-jump taxonomy
Teams that document one “wall jump” without subtypes ship inconsistent feel across levels. Use explicit categories in your movement design spec:
Perpendicular wall-jump
Player strikes a flat wall face; impulse pushes along the wall normal (away from surface) with a fixed upward component. Classic twin-wall shaft ascent: bounce left, bounce right, repeat. Input is usually jump on contact while holding toward or away from the wall depending on whether you require intentional direction.
Diagonal ricochet
Impulse blends wall normal with player input or approach velocity. Holding up steepens the arc; holding down flattens it for speedrun skip routes. Common in action games where the same button must feel expressive in combat and traversal.
Corner triangle bounce
Two walls meet at an inside corner; a single jump fires two quick impulses or one impulse along the angle bisector. Used for tight chimney climbs. Requires separate collision handling so the player does not snag on the seam.
Wall-jump off wall-run exit
Player detaches from a wall-run state with a boosted jump. The wall-jump impulse may multiply wall-run exit velocity. Document whether this consumes a wall-jump chain charge or a separate cooldown.
Auto wall-jump
Jump fires automatically on valid contact without a button press. Reduces cognitive load in mobile or kid-targeted platformers; reduces skill expression in hardcore titles. Hybrid: auto on first contact, manual on subsequent chains.
Contact detection and timing
Missed wall-jumps are usually detection failures, not player error.
- Wall normal probe — cast from capsule center toward the movement-facing side (or both sides) each physics frame while airborne. Typical max angle from vertical: 15–30 degrees for “wall” classification.
- Skin width and penetration — allow 2–8 cm penetration before rejecting contact; without slack, high frame rates miss one-frame touches.
- Jump buffer — queue jump input 100–200 ms before contact via input buffering; essential for 60 Hz players approaching fast horizontal speed.
- Coyote wall grace — after leaving a wall, allow wall-jump for 50–100 ms without re-contact; prevents dropped inputs when animation peel-off separates colliders slightly.
- Approach speed gate — optional minimum horizontal velocity toward the wall so players cannot infinite-hop on shallow slopes tagged as walls by mistake.
Log denial reasons in playtest builds: wrong angle, no airborne state, chain exhausted, input not buffered, surface tag excluded. Harbor Citadel's first pass rejected 34% of attempts because the probe used velocity-facing only; adding bilateral probes fixed most false negatives.
Impulse shaping and reach envelope
The impulse vector defines whether a shaft is climbable. Document it as numbers, not adjectives.
- Horizontal push — typically 4–8 m/s away from wall normal; must clear half the gap width plus capsule radius at apex.
- Vertical boost — additive 3–6 m/s or replacement of vertical velocity to a floor value; diminishing returns on chain 2+ prevent infinite height.
- Velocity blend modes — replace (set exact exit vector), add (impulse on top of current), max (take larger per axis). Replace feels crisp; add preserves sprint momentum into the bounce.
- Gravity during arc — normal gravity, reduced ascent gravity, or apex hang; pairs with double-jump apex shaping for consistent platforming language.
- Input influence — ±15–30 degree yaw from stick tilt; clamp so players cannot aim into the wall and stall.
Authoring rule of thumb: for parallel walls at distance D, horizontal
push should exceed D / (2 × airtime) at chain-1 strength, where
airtime is measured from contact to opposite-wall touch. Build a debug overlay
that draws the predicted arc from current WallJumpConfig.
Chain limits, stamina and verb interaction
Unlimited wall-jumps trivialize vertical level design and break combat arenas. Common governance models:
- Hard chain cap — three air wall-jumps before ground touch resets; fourth input ignored with subtle audio deny.
- Stamina meter — each wall-jump drains 20–35%; regen only on ground or ledge idle; pairs with exploration pacing.
- Diminishing vertical — chain 1 at 100% boost, chain 2 at 70%, chain 3 at 40%; horizontal push may stay constant so shafts remain crossable but ceiling skips fail.
- Double-jump consumption — wall-jump does not consume air jump charges (Celeste model) vs wall-jump replaces double jump (older Metroidvania model). Pick one and never mix per level.
- Air dash refresh — wall contact may restore one dash charge; document explicitly to avoid speedrun degeneracy.
Ground touch should reset all traversal charges in a single event. Partial resets (ledge grab without “grounded”) are a top source of player distrust.
Camera, animation and feedback
Wall-jumps happen fast; feedback sells legibility.
- Camera — brief yaw toward exit vector (80–150 ms); avoid full orbit in tight shafts. Optional FOV punch +2–4 degrees on impulse.
- Animation — push-off pose synced to impulse frame; mirror left vs right walls. Root motion off for gameplay authority; cosmetic offset only.
- VFX and audio — distinct dust puff per surface material; pitch-shifted jump SFX per chain index so players hear remaining budget.
- UI — optional chain pips in tutorial zones; hide in mastery areas.
Level authoring for wall-jump spaces
Geometry must match the reach envelope, not the other way around.
- Parallel wall spacing — keep gap constant for 3+ chains; tapering gaps need per-section impulse overrides.
- Rest ledges — mid-shaft platforms reset chains and serve as difficulty checkpoints; omit for optional mastery routes.
- Non-jumpable strips — spike or ice tags on lower wall sections gate sequence order without invisible walls.
- Ceiling kill planes — place above intended apex so excessive input tilt fails visibly, not into soft-lock.
- Teaching beats — first wall pair in a lit alcove with soft fail floor; second pair over hazard; third in production shaft.
Harbor Citadel shaft refactor
Before the refactor, Harbor Citadel used a single double-jump gate. Telemetry showed players hitting the far wall at insufficient height and sliding into the kill volume. The movement team shipped:
- Perpendicular wall-jump with bilateral probes and 150 ms jump buffer.
- Replace-mode impulse of 6.2 m/s horizontal and 4.8 m/s vertical on chain 1; 70% vertical on chains 2–3.
- Three-chain cap before ground touch; rest ledge resets all charges.
- Wall-jump does not consume double-jump charges so players can still recover a mis-aimed bounce.
- Material-specific VFX on stone vs metal wall tags for readability in dim lighting.
- Tutorial glyph on first wall pair showing jump on contact for one beat.
Fall deaths fell from 62% to 9%. Median ascent time dropped 4.1 seconds because players stopped attempting the standing double-jump line. Optional four-bounce skip remains for mastery without blocking main-path completion.
Technique decision table
| Approach | Best for | Tradeoff |
|---|---|---|
| Wall-jump chain | Parallel-wall shafts, chimney climbs, vertical flow | Requires paired surfaces; weak on open outdoor cliffs |
| Wall-run | Long single-face traversal, rooftop gaps, speed routes | Needs run length; poor on narrow alternating faces |
| Double jump | Single gap clears, boss arenas, open platforms | Fixed reach; fails tall parallel shafts without walls |
| Air dash | Horizontal correction, combat dodges, omni recovery | Charge-limited; does not teach rhythmic ascent rhythm |
| Mantle / vault | Ledge grab onto tops, cover traversal | Requires top lip geometry; not mid-air rhythm play |
| Grapple hook | Arbitrary anchor points, long horizontal spans | Needs placed anchors; can skip authored wall rhythm |
Add wall-jump when heatmaps show players dying mid-shaft with walls within reach but insufficient vertical from other verbs. Prefer wall-run when the challenge is distance along one face, not height between two. Use mantle when the goal is the ledge top, not oscillation between faces.
Common pitfalls
- Probe only on input-facing side — fast arcs miss wall contact; use bilateral or velocity-aligned probes.
- No jump buffer — frame-perfect requirement reads as broken controls on console and mobile.
- Horizontal push too weak for gap width — players scrape the opposite wall and fall; debug arc overlay catches this in minutes.
- Wall-jump consumes double jump silently — players plan routes that become impossible mid-shaft.
- Unlimited chains — skips entire vertical levels; speedrun and casual paths collapse to one verb.
- Same impulse on chain 3 as chain 1 — trivializes height gates meant to require rest ledges.
- Slopes tagged as walls — infinite hop up hills; enforce approach-angle or speed gates.
- Corner seam snag — capsule catches on inside corners; add corner bounce or collision smoothing.
- Networking without wall-normal sync — remote players see jumps in wrong directions; replicate contact normal and chain index.
Production checklist
- Document wall-jump taxonomy (perpendicular, ricochet, corner, auto) in design spec.
- Publish horizontal push, vertical boost, and blend mode per chain index.
- Define wall angle threshold and excluded surface tags.
- Implement bilateral contact probes with skin-width slack.
- Wire jump buffer (100–200 ms) and optional coyote wall grace.
- Set chain cap, stamina cost, or diminishing vertical per chain.
- Specify double-jump and air-dash interaction (consume vs independent).
- Build debug arc preview from
WallJumpConfigin editor. - Author parallel-wall spacing to match chain-1 reach envelope.
- Place rest ledges that reset all air charges on grounded event.
- Add material VFX/SFX and chain-index audio pitch shift.
- Teach first wall pair in safe room with glyph prompt.
- Log denial reasons in playtest builds.
- Test at 30, 60, and 120 FPS with fixed physics timestep.
- Sync wall normal, chain count, and impulse in multiplayer snapshots.
Key takeaways
- Wall-jump is a discrete ricochet verb — not sustained wall-run and not combat knockback bounce.
- Reach envelope is math: horizontal push, vertical boost, and gap width must be documented together.
- Harbor Citadel cut fall deaths from 62% to 9% with three-chain perpendicular jumps and bilateral probes — no geometry resize.
- Chain limits and double-jump policy must be explicit; silent charge consumption breaks route planning.
- Jump buffering and coyote wall grace convert frame-perfect frustration into skill-based rhythm.
Related reading
- Game wall-run traversal systems explained — sustained surface motion vs discrete bounces
- Game double jump movement systems explained — apex shaping and charge models that pair with wall chains
- Game input buffering explained — queue windows that make wall-jumps feel responsive
- Game locomotion explained — ground controllers and velocity inheritance into airborne verbs