Guide
Game variable jump height and hold-release jump cut systems explained
Harbor Ascent's Wind Shrine shaft teaches three gap heights in a row: a minimum hop, a medium arc, and a full leap to a moving platform. Playtesters cleared the first two gaps at 91% and 88% but stalled at 34% on the third — not because the moving target was unfair, but because every jump was binary full-height. Tap-jump players overshot the low ledge; hold-jump players could not shorten the arc enough to land on the elevator without hitting the ceiling spike strip above it.
The level team widened one platform and added a checkpoint. Completion moved from 34% to 41%. Physics shipped variable height with hold-to-rise and release-to-cut gravity; the same geometry hit 68% without art changes. Variable jump height is how platformers turn one jump button into a continuous vertical tool. This guide covers binary vs variable models, impulse scaling and gravity-multiply cut implementations, minimum hop bands, apex hold caps, fast-fall coupling, coyote and buffer interactions, animation sync, the Harbor Ascent refactor, a technique decision table versus binary jumps and multi-button height tiers, pitfalls, and a production checklist. It pairs with jump arc and gravity tuning and platformer design fundamentals.
Binary jumps vs variable height
A binary jump applies fixed initial velocity every time the player presses jump. Height is constant unless other systems intervene (double jump, springs, damage knockback). Fighting games and many action titles use binary hops because neutral spacing is designed around predictable arcs.
A variable-height jump lets the player choose apex within a band by how long they hold the jump button (or how early they release). Short tap produces a low hop; full hold reaches maximum height. Precision platformers, Metroidvanias, and adventure traversal depend on this band to pack multiple challenges into one vertical column without separate “low jump” buttons.
The design goal is expressive control: one input, many outcomes. The engineering goal is a deterministic mapping from hold duration to peak Y that feels continuous to players but is cheap to simulate every frame.
Three implementation models
Most commercial platformers use one of these approaches (or a hybrid):
1. Release-to-multiply gravity (jump cut)
On jump press, apply full initial upward velocity v0. While the
jump button is held and vertical velocity is upward, use normal ascent gravity
g_up. On release while still rising, switch to a higher gravity
multiplier g_cut (often 2–4×) so the character falls
back toward the apex band the player selected. This is the classic
Super Mario-style feel: release early, arc snaps shorter.
2. Hold-to-scale initial impulse
Measure hold time during jump squat (if any) or the first N frames after
takeoff. Map hold ms to v0 between v_min and
v_max. Release after takeoff does not cut the arc; height was
decided at launch. Simpler to reason about but less responsive mid-air
corrections.
3. Apex hold cap
While jump is held and vy >= 0, clamp vertical velocity to
zero (or a small positive cap) until max apex time expires, then apply fall
gravity. Produces floaty apex control popular in puzzle platformers. Combine
with cut gravity on release for hybrid feel.
| Model | Player mental model | Best for |
|---|---|---|
| Gravity cut on release | “Let go to stop going up” | Action platformers, tight shaft levels |
| Impulse scaling | “Hold longer before leaving ground = higher” | Charge-jump hybrids, mobile tap-hold UX |
| Apex hold cap | “Hold to hover at peak briefly” | Puzzle hops, educational platformers |
Minimum hop, maximum apex, and tuning bands
Variable height is useless if the lowest hop is still too high for the smallest gap. Define three measured heights in your debug overlay:
- Min hop — shortest tap at frame of takeoff; must clear the smallest mandatory gap in the tutorial.
- Mid arc — ~50% hold or 50% apex band; used in most rhythm platform chains.
- Max apex — full hold through ascent; must miss overhead hazards on full-hop challenge rooms.
Typical commercial ratios: min hop is 35–50% of max apex height. If min
hop exceeds 60% of max, level designers cannot stack low/mid/high gaps in one
screen without custom collision hacks. Tune v0, g_up,
and g_cut together — see
jump arc and gravity systems
for fighting-game gravity curves that also apply to platformer descent.
Jump squat and input leniency
If jump has startup frames, decide whether variable height measures hold from press (including squat) or from takeoff frame. Measuring from press feels better with input buffers; measuring from takeoff avoids accidental max hops when buffer fires on landing. Coyote and buffered jumps should inherit the same hold clock rules documented in your movement spec.
Fast fall and release coupling
Many platformers bind fast fall to down + release or down while airborne. Variable-height systems must define precedence:
- Release while rising — jump cut gravity (shorten arc).
- Release at or past apex — normal fall gravity unless fast-fall is active.
- Down + jump release — optional stronger cut or immediate fast-fall for advanced players.
Without explicit rules, players experience “dead” releases at apex
or accidental fast-fall when trying to cut short. Document a small state
machine: RISING_HOLD, RISING_RELEASE_CUT,
FALLING, FAST_FALL. Animation blends should match
vertical velocity sign changes or cuts look disconnected from motion.
Interactions with aerial verbs
Variable height on the first jump affects every downstream system:
- Double jump — usually fixed impulse per air jump; first-jump height still matters for spacing into double-jump rooms. See double jump systems.
- Wall jump — often fixed arc; do not apply hold-cut unless design requires variable wall-kick height.
- Dash / air dash — canceling jump cut on dash exit prevents odd mid-arc velocity snaps.
- One-way platforms — low hops help land on thin planks; pair with drop-through routing.
- Moving platforms — parent velocity at takeoff; variable height does not fix horizontal sync but reduces ceiling collisions on elevators.
Animation, audio, and readability
Players read height from character pose as much as from physics. Minimum hops should use a distinct takeoff pose (crouch depth, arm tuck) versus full leap. At jump cut frame, trigger a short “pump” or tuck animation so release feels intentional. Audio: layer a soft cut whoosh on gravity multiply, not on every release at apex.
For accessibility, optional jump height assist can widen the
min–max band or reduce g_cut severity without removing
variable control entirely. Log assist usage separately from base difficulty
leaderboards.
Harbor Ascent: one button, three gaps
Wind Shrine shaft geometry (unchanged across patches):
- Gap A: 2.1 m vertical — requires min hop (tap).
- Gap B: 3.4 m — requires mid arc (~8-frame hold).
- Gap C: 4.2 m to moving platform with 1.1 m spike clearance — requires max hop or precise mid with horizontal air control.
Binary jump apex was 4.6 m. Gap A impossible without horizontal cheese; Gap C
forced 4.6 m apex into 1.1 m clearance (81% ceiling hits). After gravity-cut
variable height with v0 tuned for 4.4 m max, 2.0 m min hop, and
g_cut = 3.2× on release while rising:
- Gap A success 91% → 94% (minor; already learnable).
- Gap B success 88% → 92%.
- Gap C success 34% → 68%; ceiling hits 81% → 22%.
Chapter completion for the shaft rose from 41% to 63% with no collision mesh edits. Player surveys cited “I can finally control how high I go” more often than leniency or checkpoint changes from the prior patch.
Technique decision table
| Approach | Best when | Strengths | Trade-offs |
|---|---|---|---|
| Gravity cut on release | Precision platformers, vertical shafts, Mario-likes | Responsive mid-air correction; one button | Requires careful min-hop tuning; netcode must resim hold state |
| Binary full hop only | Fighters, brawlers, simple mobile runners | Predictable neutral; minimal code | Level design needs wider vertical spacing or separate low-jump input |
| Separate low / high jump buttons | Keyboard PC titles, accessibility profiles | Explicit player intent | More inputs; mobile layout cost |
| Impulse scaling only (no cut) | Charge-jump hybrids, rhythm games | Clear pre-takeoff commitment | No mid-arc correction; feels stiff for action platformers |
| Apex hold + cut hybrid | Puzzle platformers, teaching games | Forgiving peak control | Can feel floaty; speedrun categories need rules |
Common pitfalls
- Min hop still too tall — variable height exists on paper but level design cannot use the low band.
- Cut applies while falling — release at apex spikes downward velocity; players feel punished for letting go.
- Ignoring buffer hold clock — buffered jumps always max-height because hold started before landing.
- Same gravity for ascent and cut — release does nothing visible; players assume the feature is broken.
- Wall-clock hold in networked sim — different peak heights per peer; use fixed-step input history.
- Animation only — pose changes but physics stay binary; trust breaks on collision probes.
- No debug plot — designers tune gaps by eye without min/mid/max height overlay.
- Fast-fall conflicts — down-release triggers fast-fall when player wanted a gentle cut.
Production checklist
- Pick implementation model (cut, impulse scale, apex hold, or hybrid) and document in movement spec.
- Expose
v0,v_min,g_up,g_cut, and max apex height in data. - Measure and publish min / mid / max hop heights in debug HUD for level designers.
- Wire hold state through coyote jumps and jump-buffer consumes with one hold clock rule.
- Define fast-fall and release precedence in a four-state vertical FSM.
- Sync takeoff and cut poses; add subtle audio on cut frame only while rising.
- Plot Y-vs-time for tap, mid-hold, and full-hold jumps before locking shaft geometry.
- Test on controller, keyboard, and touch; confirm tap reliability for min hops.
- In rollback builds, resimulate jump-held flag from input history each frame.
- Telemetry: distribution of apex height on fail vs success gaps, ceiling hit rate.
Key takeaways
- Variable jump height turns one button into a continuous vertical tool — essential for stacking multiple gap heights in one column.
- Gravity multiply on release while rising is the default platformer pattern; tune min hop, max apex, and cut strength together.
- Harbor Ascent raised Wind Shrine gap C success from 34% to 68% with jump-cut physics alone — no wider platforms.
- Coyote, buffer, double jump, and fast-fall must share one hold-clock and release-precedence spec.
- Publish min/mid/max height in debug tools so level art is authored against real physics, not guesswork.
Related reading
- Jump arc and gravity systems explained — gravity constants and piecewise curves underlying cut physics
- Coyote time and jump grace leniency explained — when variable jumps fire after ledge and buffer leniency
- Double jump movement systems explained — aerial budget after variable first jumps
- Platformer game design explained — room pacing and gap taxonomy that depends on height bands