Map detail levels 1-5 to the recovered 50, 40, 30, 20, and 10 ms callback periods for claw animation while retaining the invariant 10 ms physics step. This removes the hard-coded default cadence from non-default configurations. Keep repaint batching documented separately because Rust exposes intermediate physics states instead of reproducing Win16 GDI callback batching. Test Plan: - `cargo test --all-targets` -- 51 passed - `cargo clippy --all-targets -- -D warnings` -- passed - `cargo build --profile production` -- passed - all five claw cadence boundary tests -- passed - `git diff --cached --check` -- passed
86 lines
3.1 KiB
Markdown
86 lines
3.1 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 960x690, an exact 1.5x enlargement of its original 640x460
|
|
canvas, so modern desktop scaling cannot distort or vertically offset 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 `autoplay`, `launcher`, `flippers`, `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, either Shift, keypad `3` | - |
|
|
| Help | F1 | Enter/Escape returns |
|
|
| Settings | F2 | - |
|
|
| High scores | F3 | - |
|
|
| Sound | F12 | - |
|
|
|
|
The five original speed choices remain available in settings. Physics now uses
|
|
the original invariant 100 Hz millipixel substep, and claw animation follows the
|
|
recovered 50/40/30/20/10 ms timer choices. Setting-specific repaint batching
|
|
remains a presentation-only reconstruction boundary.
|
|
|
|
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.
|