The recovered client enlarged the 640x460 canvas to 960x690 and shrank the score glyphs, so artwork and numeric displays no longer matched the original pixel presentation. Restore the native window dimensions and title, render score digits at their recovered 16x28 size, and align the score fields to the original layout. Update the user and reconstruction documentation accordingly. Test Plan: - `cargo test --workspace --all-targets --all-features` -- passed, 52 tests - `cargo clippy --workspace --all-targets --all-features -- -D warnings` -- passed - `rumdl check --flavor commonmark CHANGELOG.md README.md RECONSTRUCTION.md` -- passed - `git diff --cached --check` -- passed - `cargo +nightly fmt --all -- --check` -- baseline fails on existing import formatting in touched and untouched Rust files - `prettier --check CHANGELOG.md README.md RECONSTRUCTION.md --prose-wrap always --print-width 80` -- baseline fails on existing whole-file formatting in README.md and RECONSTRUCTION.md
86 lines
3.2 KiB
Markdown
86 lines
3.2 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 `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.
|