139e641005d5d338bba93b5e787109c6ee13a020
Pressing Ctrl+Shift+0 during a game drops ten balls at fixed points spread over the open playfield (CRAZY_BALL_POSITIONS): two near the top bumpers, a row in the middle, and four above the slingshots. Repeated presses add another ten each time. The original engine is a faithful two-slot reconstruction (primary and secondary ball) whose claw, lock-hole, special-hole, and effect-seven rules all assume at most two balls. Rather than generalising that engine, crazy balls live in a separate Game::crazy_balls list with a reduced step: - gravity, speed clamp, and the same static record ranges as the main scan (walls, passive circles, bumpers, flippers); - wall and bumper rules, so they score, light banks, and kick normally; - flipper kicks and nudge impulses; - no sensors, holes, magnets, claw, or ball-to-ball collisions. A crazy ball that leaves the board, hits the drain, or comes to rest on the shooter stop is removed. When the primary ball drains (and no secondary or special respawn takes priority), a crazy ball is promoted into the primary slot, so the turn only ends once every ball is gone. The promoted ball then runs the full original rules. Because the mode is effectively a cheat, Game records that it was used and the browser build skips the online high-score submission for that game; the local table still records the score. The App suppresses the nudge that releasing Shift would otherwise fire after the combo. Ctrl also raises the left flipper while held, which is left as is. Browsers may reserve Ctrl+Shift+0 for themselves. A new `crazy` simulation scenario starts a game with crazy balls. Test Plan: - cargo test: new tests check every drop point is clear of all static records, that the balls move, score, and eventually drain without costing a ball, that a primary drain promotes a crazy ball, and that a finished game rejects the mode. - Manual: start a game, press Ctrl+Shift+0, release Shift, and confirm ten balls appear and no nudge/tilt sound plays.
Languages
C
73.2%
Rust
14.6%
C++
5%
Python
4.1%
Shell
1.4%
Other
1.6%