Files
tdkpin/tdkpin-rs/CHANGELOG.md
T
ddidderr d72db79af6 fix(physics): replace fitted flipper transfer
Remove the live-fitted upward and downward flipper polynomials. Port the
reconstructed 1000:7ed9 path with delta-specific pivots and record edges,
integer cross-product and radius gates, penetration, response-record gain,
wrapping velocity updates, and the final position delta.

Use resting records on press and the already-raised records on release, correct
the original delta direction, and apply each edge to both live ball slots. Keep
render-facing Vec2 projections, but adjust their float representation by ULPs so
every gameplay millipixel round-trips exactly instead of losing reconstructed
integer results.

Test Plan:
- `bash original/tools/test_reconstructed_c.sh` -- passed during raised-record reference capture
- `cargo test --all-targets` -- passed, 62 tests
- `cargo clippy --all-targets -- -D warnings` -- passed
- `rumdl check tdkpin-rs/CHANGELOG.md tdkpin-rs/RECONSTRUCTION.md` -- passed
- `git diff --cached --check` -- passed
2026-08-23 17:11:48 +02:00

3.1 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

  • 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.