Cabinet 01 · Breakout · 400×600
StateATTRACT
Refresh60 fps
AudioOff

32 bricks · 320 max · 3 lives

BreakOut

One paddle. One 3-pixel ball at 3.4 px/frame. The closer you clip it to the paddle's edge, the harsher the exit angle — the walls don't forgive, and the bricks don't move.

Controls

Move paddle← → / A D / mouse
Launch balltap / click / space
Pause & resumeP / esc
Restart runR
BreakoutReady
Lives
Drag on screen to move
01

Fixed timestep

Accumulator loop locked to 1000/60 ms with a 5-step clamp — identical physics on 60 Hz phones and 144 Hz monitors.

02

Side-aware reflection

Minimum-translation vector picks the axis: shallow overlap on Y flips dy, shallow on X flips dx, then the speed magnitude is re-normalised.

03

Paddle angle map

Offset from paddle centre drives a ±60° exit arc, so edge hits skim sideways instead of bouncing straight up.

04

Touch-first

touchstart/move/end with non-passive preventDefault, coordinate remapping through the canvas bounding rect, and a pause glyph that stays tappable at 320 px wide.