game-feel

Installation
SKILL.md

Game feel: the numbers

Game feel = real-time control + simulated space + polish (Swink). The polish amplifies the simulation but never lies about it: if the screen shakes, something must have hit. Small tweaks compound — Vlambeer's flat shooter becomes Nuclear Throne via ~30 individually-invisible tricks. Apply them in passes, then play it: feel is tuned in motion, never designed on paper.

All frame counts assume 60fps — which means physics must be delta-time-based. Per-frame integration (x += vx) runs 2× fast on a 120Hz display; this is the single most common feel bug in browser games. Multiply all motion by dt, and convert the frame windows below to ms when your loop isn't fixed-step.

  • Never derive a bounce/return angle from penetration depth at the detection frame (atan2(ball.y − paddle.y, …)): depth ∈ (band − v·dt, band] is integration noise, so the same hit returns steep at 144 Hz and shallow at 30 Hz. Use the tangential offset only (x-offset across the face → linear angle curve), or back-project to the band-entry point first.
Installs
2
First Seen
Sep 28, 2026