The plunger held no useful power range — any press launched at nearly
full strength and a missed pointerup could leave it stuck.
- Launch speed now scales with hold time end to end: `-(760 + 320*c)`
with no minimum floor, so a tap lobs the ball in and a full ~900ms
hold rips it across the top.
- The gate kick that turns a straight-up launch into the playfield now
fires lower in the lane (y < 300) and scales too, `-(170 + 220*c)`,
so even a soft launch clears the divider instead of rattling back down.
- A launch that never reaches the gate now clears `b.launching` on the
way down, and the lane re-arms for any slow ball sitting in it, so a
ball that dribbles back into the tube can be re-launched.
- Launch button fills with an accent bar as it charges (`--charge`),
driven by a new `onCharge` callback; `peek()` reports `charge`.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017Ve7HLspzeG2xDPtJQ8vmu