Files
tdkpin/tdkpin-rs/CHANGELOG.md
T
ddidderr bee3c440bf fix(game): restore effect-seven multiball spawn
Use the exact record 148 spawn point and the reconstructed 0.8 * 3800 millipixel velocity for ball slot two. This removes the guessed shooter-lane launch and keeps the multiball lifecycle tied to the recovered effect-seven path.

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 17:58:37 +02:00

86 lines
5.3 KiB
Markdown

# Changelog
All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
and this project adheres to
[Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [Unreleased]
### Fixed
- 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.