Correct raw 1000:531e's Pascal-order BitBlt to destination (202,328), height 13, and width (stage-1)*7 from original DAT994. Render stages 2 through 35 over DAT995, add deterministic loading screenshots, and update the C harness and evidence ledger for the corrected 237x13 source. Test Plan: - bash original/tools/test_reconstructed_c.sh - python3 original/tools/audit_reconstruction.py --require-complete - cargo test --all-targets - cargo clippy --all-targets --all-features -- -D warnings - rumdl check original/C_RECONSTRUCTION_FINAL_AUDIT.md tdkpin-rs/CHANGELOG.md tdkpin-rs/RECONSTRUCTION.md tdkpin-rs/README.md - cargo run --quiet -- --simulate loading --at 0.55 --screenshot /tmp/tdkpin-loading-mid.png - git diff --check
87 lines
3.4 KiB
Markdown
87 lines
3.4 KiB
Markdown
# TDK Pinball Machine for modern PCs
|
|
|
|
This is a native Rust reconstruction of the 1995 Windows game **TDK Pinball
|
|
Machine**. It uses the extracted original artwork and sound, recreates the
|
|
playfield as a fixed-step simulation, and runs from the same source on Linux,
|
|
macOS, and Windows.
|
|
|
|
The game opens at the original 640x460 canvas size and presents every artwork
|
|
pixel one-for-one. The fixed, non-high-DPI client prevents desktop scaling from
|
|
distorting or vertically offsetting the pixel-art presentation.
|
|
|
|
The original program is not required at runtime. All required game assets are
|
|
embedded in the executable at build time.
|
|
|
|
## Run
|
|
|
|
Install a current stable Rust toolchain, then run:
|
|
|
|
```sh
|
|
cargo run
|
|
```
|
|
|
|
For a distributable optimized binary:
|
|
|
|
```sh
|
|
cargo build --profile production
|
|
```
|
|
|
|
The binary is written below `target/production/`. On Linux, Macroquad's native
|
|
development packages are also required (X11, OpenGL, and ALSA). Windows needs
|
|
no extra runtime installation; macOS builds with the normal Apple developer
|
|
command-line tools.
|
|
|
|
## Deterministic mechanics validation
|
|
|
|
Named scenarios can be advanced without waiting in real time. The simulator
|
|
uses exact 120 Hz steps, prints its final state as JSON, and can write both the
|
|
complete step trace and the original-size 640x460 framebuffer:
|
|
|
|
```sh
|
|
cargo run -- --simulate claw-6 --at 0.15 \
|
|
--trace /tmp/claw-6.json \
|
|
--screenshot /tmp/claw-6.png
|
|
```
|
|
|
|
Use `--step N` instead of `--at SECONDS` to reproduce one exact update. The
|
|
available scenarios are `loading`, `attract`, `autoplay`, `launcher`, `flippers`,
|
|
`panel`, `targets`, `claw-1`, `claw-6`, `claw-7`, and `claw-18`; `--seed N` fixes
|
|
random choices.
|
|
`autoplay` charges each ball and operates the flippers from live ball position
|
|
for long end-to-end validation runs.
|
|
|
|
## Original and modern controls
|
|
|
|
| Action | Original key | Additional modern key |
|
|
| --- | --- | --- |
|
|
| Start game / add up to 4 players | `+` | `=` uses the same main-keyboard key |
|
|
| Charge launcher | Hold Down arrow, release to launch | - |
|
|
| Left flipper | Left Ctrl | `A` or Left arrow |
|
|
| Right flipper | Keypad Enter | Right Ctrl, `D`, or Right arrow |
|
|
| Nudge | Space, Left Shift, keypad `3` | Right Shift aliases keypad `3` |
|
|
| Help | F1 | Enter/Escape returns |
|
|
| Settings | `TDKPIN.INI` before launch | F10 opens the portable settings screen |
|
|
| High scores | Automatic when a player finishes | F9 opens the portable table viewer |
|
|
| Sound | F12 | - |
|
|
|
|
The five original speed choices remain available in settings. Physics now uses
|
|
the original invariant 100 Hz millipixel substep, batched as 5/4/3/2/1 steps on
|
|
the recovered 50/40/30/20/10 ms callbacks. Claw animation, flipper edges, and
|
|
visible state publication follow the same selected callback cadence.
|
|
|
|
The help screen is the original artwork in English, German, French, Italian,
|
|
or Spanish. As instructed on that screen, double-clicking its upper-left exit
|
|
box closes the program.
|
|
|
|
## Saved data
|
|
|
|
Settings and the ten-entry high-score table are stored as `save.json` in the
|
|
platform's normal per-user application-data directory. On first run, the table
|
|
is imported from the original `HISCORES.DAT` included with this reconstruction.
|
|
|
|
## Reconstruction status
|
|
|
|
This repository distinguishes exact recovered material from behavioral
|
|
reimplementation. See [RECONSTRUCTION.md](RECONSTRUCTION.md) for the evidence
|
|
ledger, known inference boundaries, and validation performed.
|