Load and render DAT400-407 effect panels with the preserved wheel overlap, and add deterministic effect-7 coverage. Restore exact 1008:0996/0b9e score fields, configured-player rows, current/status indicators, signed status thresholds, and six 5x5 per-player ball-marker slots. Test Plan: - cargo test --all-targets - cargo clippy --all-targets --all-features -- -D warnings - rumdl check CHANGELOG.md RECONSTRUCTION.md README.md - cargo run --quiet -- --simulate effect-7 --step 0 --screenshot /tmp/tdkpin-effect7.png - cargo run --quiet -- --simulate launcher --step 0 --screenshot /tmp/tdkpin-display.png - git diff --check
88 lines
3.5 KiB
Markdown
88 lines
3.5 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`, `highscores`, `name-entry`,
|
|
`effect-7`, `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, settings
|
|
are imported from an adjacent original INI (or the embedded distributed
|
|
TDKPIN.INI), and the table is imported from the original `HISCORES.DAT`.
|
|
|
|
## 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.
|