Blog ·

What is coyote time in games?

A circus tent in Trapeze, seen from the side, with rows of brown platforms joined by yellow ladders, blue trampolines, a tightrope and a pole, a clown at the top left, popcorn, megaphones and bowling pins to collect, and a small yellow acrobat on the middle row; the counters read Ring 1, 1 of 6 props, score 60 and 3 lives
Image: Trapeze, EverGamer

Coyote time is a short grace period in a platform game: for a moment after you run off the edge of a ledge, the game still lets you jump, as if your feet were on solid ground. In Celeste, whose player code the developers released, that window is 0.1 seconds. You almost never notice it. You only notice the games that do not have it, where a jump pressed a hair too late sends you straight down.

What does coyote time do?

Without it, a game checks one thing when you press jump: are you standing on something? The instant your character's feet pass the edge of a platform, the answer is no, and the press does nothing. People judge the edge by eye, and the eye is a little late, so a jump that felt perfectly timed turns into a fall.

Coyote time keeps saying yes for a few moments longer. Maddy Thorson, who directed Celeste, put it in one line in Celeste & Forgiveness: "You can still jump for a short time after leaving a ledge." The same article says the team did not think they invented any of these techniques; they are old tricks that many platformers use quietly.

How long is coyote time?

There is no standard length, and most games never say. Celeste is a rare case where you can read it: the studio published the game's Player class on GitHub as a learning resource (the repository's README says the MIT license covers that code, not the game). In it, a constant named JumpGraceTime is set to 0.1f. Every frame the player stands on the ground, a timer is filled back up to that value; once they leave the ground it counts down, and a jump is still allowed while it is above zero.

A tenth of a second is about six frames on a 60 Hz screen. That is short enough that the jump still looks like it came from the ledge, and long enough to cover a late thumb.

What other tricks go with coyote time?

Coyote time is usually one of a family of small helpers that make jumping feel fair. Thorson's article lists ten in Celeste; these are the ones most games share, with what Celeste's player code shows for each:

Trick What it does In Celeste
Coyote time Lets you jump just after leaving a ledge 0.1 seconds (JumpGraceTime)
Jump buffering A jump pressed just before landing fires on the frame you land, per Thorson's article Handled by the game's input code, which was not released
Variable jump height Holding jump longer makes the jump higher; letting go early cuts it short Upward speed is held for up to 0.2 seconds while jump is held (VarJumpTime)
Softer jump peak Near the top of a held jump, gravity is halved, giving you more time to aim the landing Gravity times 0.5 while vertical speed is under 40 and jump is held

Variable jump height is the subject of a well-known talk for game programmers, Kyle Pittman's Building A Better Jump at GDC, which shows how to build jump arcs from a designer's desired height and distance and extend them to jumps whose height depends on how long the button is held.

Do all platformers have coyote time?

No. Some leave it out because the challenge is the point. Trapeze, our circus platformer inspired by Big Top (1983), does it the strict way, and you can read why in its code:

That makes every jump a decision you make before your feet leave the ground, which is a very different feeling from Celeste's forgiving one. Neither is wrong. Coyote time hides the gap between what you meant and what you pressed; a committed jump makes that gap part of the game.

How do you add coyote time to your own game?

It takes a timer and two lines. In JavaScript, inside the update that runs every frame:

const COYOTE = 0.1 // seconds, the same as Celeste's JumpGraceTime

if (player.onGround) player.coyote = COYOTE
else player.coyote = Math.max(0, player.coyote - dt)

if (jumpPressed && player.coyote > 0) {
  player.vy = JUMP_SPEED
  player.coyote = 0 // so one ledge gives one jump
}

Clear the timer when the jump starts, or a player could jump twice from the same edge. Then tune the number by playing: too short and nobody feels it, too long and players start jumping off thin air on purpose.

Where can I try it?

Play Trapeze (keyboard; its hub page shows it next to Big Top) and feel how a committed jump makes you plan every leap. For the forgiving side, Celeste is the classic example, and our 1980s page has the platformers where these ideas started. Or browse the hub for more games and the classics behind them.

More from the blog