fix(game): restore effect-seven multiball

Arm effect 7 after the wheel-reset target, select it on the next effect line,
and spawn a second visible live ball when record 149 is consumed. Advance the
second ball through recovered line, circle, ball-ball, magnetic, and scoring
collisions independently.

During multiball, draining one ball leaves the other active without consuming a
remaining player ball. Include secondary state in deterministic traces and
finite-state validation.

Test Plan:
- `cargo test --all-targets` -- 52 passed
- `cargo clippy --all-targets -- -D warnings` -- passed
- production build plus Windows GNU and macOS checks -- passed
- effect-seven spawn, movement, and single-drain lifecycle test -- passed
- `git diff --cached --check` -- passed
This commit is contained in:
2026-08-22 22:02:50 +02:00
parent 25e32b2c06
commit f2560ee2f7
5 changed files with 190 additions and 6 deletions
+6
View File
@@ -188,6 +188,12 @@ per-player effect word, and activated type-4 record 149. `1000:c4e1` maps effect
the accumulated bonus to score. Entering record 149 also awards its static 500,
clears the selection, and disables the record until line 84 is hit again.
After record 148 sets `DAT_1028_399a`, the next flagged line-84 selection uses
effect 7 instead of random 1-6. The effect-7 branch in `1000:c4e1` schedules the
timer's second-ball path and raises the active-ball count to two. The Rust port
now keeps and renders a second live ball, applies recovered physical collisions
and scores to it, and removes only the drained ball while multiball is active.
The score-addition path at `1000:bc36` indexes the initialized 32-bit threshold
table at DGROUP `0x825` using media state 1-4. The exact thresholds are 140,000,
650,000, 1,300,000, and 4,000,000. Crossing each threshold increments the media