Under the glass
Four rules keep the cabinet honest.
- Constant magnitude. The velocity vector is renormalised to 3.0–4.0 px/frame after every reflection, so a bounce can never bleed energy in or out — only redirect it.
- One hit per frame. Each of the two sub-steps ranks every overlapping brick by penetration depth and resolves the single closest one, ejecting the ball along the shallower axis. Stuck-brick and row-chewing are structurally impossible.
- The paddle picks the angle. Contact offset maps to ±60° from vertical, with a 42% floor on the vertical component — edge hits slice, centre hits stack, and infinite horizontal ping-pong never happens.
- Nothing escapes the glass. Side rails span the full height, paddle travel clamps to 0–340 px, and the accumulator loop keeps behaviour identical on a 60 Hz phone or a 120 Hz monitor.