Controls that feel fair

Play this lesson

"But I pressed it!"

You press dash in Hyper Shards. A bullet hits you anyway. You are sure you pressed in time. Was it your mistake, or the game's?

When players feel the game cheated them, they quit. When controls feel fair, players lose and think "my fault, one more try". Good games use hidden tricks to get that feeling.

Input lag

Input lag is the delay between pressing a button and seeing something happen on screen.

Every part adds a little: the controller, the code and the screen. Many TVs add extra delay to polish the picture, which is why they have a "game mode" that switches that off.

If the game itself waits several frames before moving the ship, it feels mushy, like steering a heavy boat. Good games react on the very next frame. At 60 frames per second, that is about 16.7 milliseconds later.

Quick check

What is input lag?

  1. The delay between pressing a button and seeing the result
  2. When the player is too slow to react
  3. A button that is stuck down
Show the answer

The delay between pressing a button and seeing the result

Input lag is the gap between your press and the game reacting. The smaller it is, the more the game feels connected to your hands.

The input buffer

Players often press a button a split second too early. Say your dash is still recharging, and you press it just before it is ready. Without help, the game ignores the press, and you get hit.

An input buffer remembers the press for a short time, often around 6 frames (a tenth of a second). In code it is a timer: pressing dash sets dashBuffer = 0.1, it counts down each frame, and if the dash becomes ready while the timer is above zero, the ship dashes.

Quick check

An input buffer remembers a button press that came a split second too early.

Show the answer

True

The buffer holds on to your press for a few frames, so the action still happens the moment it is allowed.

Coyote time

Coyote time is named after the cartoon coyote who runs off a cliff, hangs in the air for a moment, then falls.

In jumping games, it means you can still jump for a short time after running off a ledge, often around a tenth of a second. Your eyes said you were on the edge, so the game agrees.

In code, it is a timer: it refills while you stand on the ground and counts down by dt, the seconds since the last frame, once you leave it.

Bolt says: Many famous platform games use coyote time. Most players never know it is there.

Bug hunt

jump.js
const COYOTE = 0.1; // seconds of gracelet coyoteLeft = 0;function update(dt) {  if (player.onGround) {    coyoteLeft = 0;  } else {    coyoteLeft = coyoteLeft - dt;  }}function onJumpPressed() {  if (coyoteLeft > 0) jump();}

Kai tries coyote time in a small jumping test. Now the hero can't jump at all, not even from the ground. Which line is the bug?

  1. Line 1
  2. Line 5
  3. Line 7
  4. Line 11
Show the answer

Line 5

Line 5 should refill the timer with coyoteLeft = COYOTE. Setting it to 0 means the timer never fills, so the check on line 11 always fails.

Bend the rules for the player

Bolt says: All these tricks lean the same way: in the player's favour. That is what "fair" feels like.

Quick check

Why is the Hyper Shards ship's hitbox a bit smaller than its picture?

  1. So bullets that only graze the edge of the picture miss, and near misses feel like skill
  2. So the ship is harder to control
  3. So the game uses less memory
Show the answer

So bullets that only graze the edge of the picture miss, and near misses feel like skill

A slightly smaller hitbox leans in the player's favour. A bullet that brushes a wingtip doesn't count, so players feel skilful instead of cheated.

Touch controls and the plan

Phones have no buttons you can feel, and your thumb covers part of the screen. So on phones, Hyper Shards uses relative drag: the ship moves the same distance your finger moves, but stays above it, so you can always see it.

The studio's original plan lists input buffer and coyote time by name. We ask Claude Opus 5.5 for each trick in plain words, then keep the timings in balance.json, our file of game numbers, so we can tune them without touching code.

Bolt says: Controls are half of feeling fair. Next lesson: enemy brains, and how to build enemies that fight fair too.

Fact-checked 9 October 2026