Files
tdkpin/tdkpin-rs/CHANGELOG.md
T
ddidderr 445af4a030 fix(game): dispatch sensors for both ball slots
Store capture progression with each recovered ball slot and pass the original one-based ball number through type-3 and type-4 handling. Multiball captures now remove only the captured slot, promote the survivor when slot one exits, and preserve the effect-seven argument guard that prevents ball two from spawning a third ball.

Test Plan:
- cargo test --all-targets
- cargo clippy --all-targets --all-features -- -D warnings
- rumdl check CHANGELOG.md RECONSTRUCTION.md README.md
- git diff --check
2026-08-23 18:04:30 +02:00

5.5 KiB

Changelog

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

[Unreleased]

Fixed

  • Run type-3 captures and type-4 triggers for both live ball slots, including per-slot capture age/contact ownership, exact captured-slot removal, survivor promotion, and the effect-seven ball-number guard against a third ball.
  • Spawn effect-seven ball 2 from record 148 at (17,23) with exact (0,3040) millipixel velocity, instead of launching a guessed second ball upward from the shooter lane.
  • Replace invented bumper outline/cooldown effects with the original per-record 5/20/10 callback countdowns and exact overlay-A render rectangles for bumpers 51-53 and targets 140-147/150-152.
  • Replace the free-running wheel animation with the original six-callback 91x90 target rotation, WAVE 2011 start, exact DAT600 frames/target positions, and state-6 rotation of the five per-player contact/item values.
  • Restore the complete 281-callback DAT600 panel sequence after the fifth lock hole, including physics suspension, contact/item cleanup, all nine image phases, and the original WAVE 2013/2012/stop boundaries.
  • Remove the invented attract-screen instruction panel and stop assigning the original F2/F3 keys to modern overlays. The idle view is the original table; optional settings/high-score viewers move to F10/F9.
  • Batch physics and flipper publication on the original 50/40/30/20/10-ms detail callbacks with exactly 5/4/3/2/1 internal 10-ms substeps, instead of exposing every substep on host render frames.
  • Separate flipper key flags from rendered/collision position so press/release edges and WAVE 2021 occur only when the detail timer processes them.
  • Add a bit-exact Borland Real48 core and route speed clamps, type-1 circles, type-2 segments, moving flippers, capture pulls, trigger randomization, and magnetic impulses through its original rounding behavior.
  • Preserve per-ball Real48 spin and use it in collision tangent response, so zero-spin C fixtures and retained-spin Wine traces are both represented.
  • Implement dynamic records 174/175 with bidirectional ball impulse transfer and the original post-collision speed clamp instead of a one-sided secondary bounce.
  • Split collision contact state into per-player 16-bit type-3 contact words and transient type-4 entry flags. Type-3 records now use the original deep-inside gate, v*0.9 +/-150 pull, stationary sound/contact publication, 5-step age progression to 300, and 99/2 completion sentinels.
  • Replace the live-fitted flipper transfer polynomials with the reconstructed 1000:7ed9 millipixel geometry gates, penetration, gain, response-record, velocity, and position calculations for both directions and both balls.
  • Preserve every gameplay millipixel across the float-only render projection so exact integer physics results are not changed when stored for drawing.
  • Restore launcher input to the setup scalar: each Down keydown subtracts 750 millipixels, release subtracts 1,500, then applies the recovered -3800 and -2280 clamp/jitter branches and the ten original decoration thresholds.
  • Apply the original independent 1.03 - Random * 0.08 X/Y velocity response after entering radius-bearing type-4 targets, preserving both motion and the subsequent shared PRNG sequence.
  • Check every player against the high-score table when their own last ball is lost, prefill the original TDK Pinball Player name, show the table before resuming the next player, and use the original signed-high/unsigned-low score ordering instead of selecting only the maximum score at whole-game end.
  • Preserve each player's complete rule-record state across turn changes instead of globally clearing wheel holes, top targets, 176 active/contact slots, selected effect, and multiball readiness on every drain.
  • Store lock-hole and effect awards in the original per-player secondary score instead of a global bonus. The fifth hole now transfers 310000 * score_multiplier, clears it, increments the multiplier and ball count, while effect 6 transfers the same display value and drain leaves it intact.
  • Replace the cooldown/float-meter nudge approximation with the original Left-Shift, keypad-3, and Space formulas using scalar 15, the shared Borland random stream, 32-bit velocity wrapping, and the decaying 16-bit +25 tilt counter with its randomized 30..39 threshold.
  • Replace the Xorshift gameplay RNG with the original Borland linear stream and unbiased Random(n) high-word mapping. Launcher variation, effect selection, claw terminals, and magnetic-field impulses now share the recovered sequence.
  • Restore the magnetic-field response as vx * 0.9 and a randomized -3800 * (1 - Random * 0.3) vertical impulse instead of a fixed upward speed.
  • Dispatch the original per-call-site sound sequences instead of assigning one guessed WAV to each logical event. This removes the nonexistent WAV 2022 playback and restores bank, trigger, capture, nudge, tilt, and drain cues.
  • Advance media/extra-ball thresholds only from score additions, preserve 32-bit score wrapping, and restore the ninth-diamond 24,464-point award plus the later double-score and secondary-score bank states.
  • Match the original 640x460 window, native 16x28 score glyphs, and TDK Pinball Machine 1.00 title so the recovered artwork is presented one-for-one instead of enlarged or resampled.