Craft·6 min read

What Makes a Jump Feel Right

Every good platformer cheats in your favour. Here are the four places ours does it, and what each one is worth.

The bedroom level of the Tape Loader birthday game, with platforms, shelves of cassettes and the player mid-run.

Everyone who has played a platformer knows the feeling of a jump that did not come out, and nobody can say why. The character was right there. The button was pressed. Nothing happened.

The honest answer is that the game was being literal with you, and a good platformer is never literal. It cheats, constantly, in your favour, in four specific places. Here is where ours does it and what each one is worth.

The problem with being correct

Start with the naive version, which is what you write first and what feels wrong immediately.

Each frame, ask: is the jump button down, and is the character standing on something? If both are true, apply an upward impulse. It is obviously correct. It is also unpleasant to play, and the reason is that both of those questions are being asked at a single instant, sixty times a second, about a human being who does not operate on frame boundaries.

Two failures fall straight out of it. You press jump one frame after walking off a ledge, and nothing happens, because you are no longer standing on anything. You press jump one frame before landing, and nothing happens, because you were not standing on anything yet. In both cases you pressed the button at what any person would call the right moment, and the game told you that you did not.

Cheat one: coyote time

After the character leaves the ground, the game keeps pretending it is still there for a short window.

In our build that window is eight frames, which at sixty frames a second is about a seventh of a second. Standing on the floor sets a counter to eight. Every airborne frame ticks it down. The jump check asks whether that counter is above zero rather than whether the character is currently on the ground.

The result is that walking off a ledge and jumping still works, right up until it very clearly should not. The name comes from the cartoon coyote who runs off a cliff and hangs there until he looks down.

Nobody has ever told us they noticed coyote time. That is the point. It is only ever noticed by its absence, and then it is not described as a missing feature, it is described as the game being unfair.

Cheat two: input buffering

The mirror of the same problem, and the one that produces the specific complaint of "I definitely pressed it".

Pressing jump sets a second counter to eight frames. That counter also ticks down each frame. The jump fires when both counters are above zero at once.

So a press a few frames before landing is not thrown away, it is remembered, and it fires on the first frame it becomes legal. What the player experiences is a jump that comes out the instant they touch the ground, which is precisely what they were asking for and exactly what the literal version refused to do.

Coyote time forgives being slightly late. Buffering forgives being slightly early. Together they cover almost every jump a human means to make.

Cheat three: the jump you can cut

Hold the button for a big jump, tap it for a small one. Every platformer since the mid eighties does this, and the way it is done is the opposite of what it looks like.

It is tempting to add upward force for as long as the button is held. That gives a floaty, rocket-powered feeling and makes the arc depend on framerate in ways that are painful to tune.

What actually happens is that the jump starts at full strength, once, and then releasing the button early clips the upward speed to a smaller value. One line: if the button is not held and the character is still rising quickly, the rising is reduced immediately.

The player reads this as control over height. Mechanically it is a single impulse plus a brake, which is far easier to reason about and gives the same feel.

Gameplay in the bedroom level of the Tape Loader birthday game, showing platforms at several heights with cassettes to collect.
Every platform in this level is placed against a jump arc that was tuned before any of the art existed.

Cheat four: weight

The last one is not about the jump at all, it is about the run, and it changes the jump more than the jump settings do.

Holding left or right does not set the speed. It adds to it, up to a maximum. Letting go does not stop the character, it multiplies the speed by a friction value each frame so it decays. There is a small deadzone at the bottom where a very slow drift is snapped to a standstill, because otherwise the character never quite stops and the idle animation twitches.

Falling has a matching rule: gravity is added every frame, but the downward speed is clamped so a long fall reaches a terminal velocity instead of accelerating forever. Without that clamp a long drop becomes unrecoverable and, worse, fast enough to pass straight through a platform between frames.

The numbers in this build are a gravity of 0.88 per frame, a terminal velocity of 26, a top running speed of 7.6, an acceleration of 1.6 and a friction of 0.78, against a character 168 units tall on a 1672 by 941 stage. Those are not universal constants. They are the result of changing a number, playing the level, and changing it again, which is the only method anyone has ever found for this.

Why the tuning happens first

The order matters more than the values. Jump arcs get tuned before the level is laid out, because platform placement is downstream of how far a jump travels. Get that backwards and you end up either moving every platform or, more often, quietly changing the jump to fit the level and making it feel wrong everywhere else.

This is the same reason a walk cycle has to be driven by distance covered rather than by the clock, which is a longer story in how to make a character walk without it looking wrong.

What this means for a commission

None of it shows in a screenshot. Four cheats, perhaps thirty lines between them, and they are the difference between a game somebody finishes and a game somebody puts down after two minutes without being able to say why. Work sold on screenshots does not include them.

It is also where the difficulty dial actually lives. A gentler game is not one with fewer obstacles, it is one with a longer coyote window and a more forgiving landing. We build one game that has to work for a four year old and an adult in the same room, and the settings are most of how, which is covered here.

And it is testable. Every one of these behaviours can be proved rather than felt, which is the subject of proving a game is actually finished.

You can play the build these numbers come from in the arcade. Walk off the edge of a shelf and jump slightly too late; it will still work.

How the game reads the controls in the first place, and why holding two at once is not automatic, is in reading the controls properly.

◆ Questions

Common questions

What is coyote time in a platformer?+

A short window after you walk off a ledge during which the game still lets you jump. It is named after the cartoon coyote who hangs in the air before falling. Ours lasts eight frames, about a seventh of a second, and almost nobody notices it is there. They only notice when it is missing, because then the game feels like it ignored them.

Why does my jump sometimes not register?+

Usually because you pressed the button a fraction before landing, and the game checked whether you were on the ground at exactly the wrong moment. The fix is input buffering: remember the press for a few frames and act on it as soon as it becomes possible.

How do you make a character jump higher when you hold the button?+

You do not add height while the button is held. You cut it when the button is released. The jump starts at full strength, and letting go early clips the upward speed to a smaller value, so a tap produces a small hop and a hold produces the full arc from the same single impulse.

Should a character reach full speed instantly?+

Almost never. Instant speed feels like sliding a counter across a table. Ours accelerates towards a maximum and decays back down through friction, which is what gives a run weight without making it feel sluggish.

Does any of this matter for a commissioned game?+

It is most of the difference between a game someone plays twice and a game someone finishes. None of it is visible in a screenshot, which is exactly why it gets skipped in work that is sold on screenshots.

  • craft
  • code
  • platformer
  • game feel
◆ Keep reading

Related from the journal.