NEONBREAK
-- FPS FIXED-STEP 60HZ BRICKS 32/32 READY

Mouse steers on desktop — drag the play field on touch

Operating manual

  1. Steer before you fire

    The ball docks to the paddle centre while the field reads READY. Position first — the launch vector is always the fixed 45° diagonal, so your paddle placement sets the entire opening angle.

  2. Hit with the edges

    Contact is mapped from the paddle's centre: dead centre returns the ball vertically, the tips throw it out to ±65°. Corners are how you clear the outer brick columns.

  3. Bank, don't mash

    Side contact with a brick flips dx, top/bottom flips dy. Only the deepest single overlap is resolved per substep, so the ball never tunnels or freezes inside a cluster.

  4. Speed climbs

    Every brick nudges the magnitude upward inside the 3.4 → 4.0 px/frame envelope. The direction is renormalised after each bounce, so speed never sneaks up on the vertical axis.

  5. Three lives, then waves

    Clear all 32 bricks for 320 points and the cabinet offers the next wave with a deeper grid. Drop the ball three times and the run is scored and archived as your best.

Technical readout

Field
400 × 600 canvas, dpr-scaled
Grid
8 cols × 4 rows · 50 × 20 px
Brick origin
x = col×50 · y = row×20 + 70
Paddle
60 × 10 at y=580 · clamp 0–340
Paddle return
±65° from hit offset
Ball
r = 3 · start (200, 570)
Launch vector
(2, −2.8) normalised · 3.44 px/f
Speed envelope
3.40 → 4.00 px/frame
Integration
accumulator 16.67 ms · 2 substeps
Collision
circle–AABB, penetration axis
Scoring
+10 / brick · max 320 / wave
Brick layer
pre-baked glow, redrawn on hit only