- Rust 97.8%
- Python 1.8%
- Java 0.3%
| .cargo | ||
| artifacts | ||
| crates | ||
| docs | ||
| fixtures/runtime | ||
| tools | ||
| .gitignore | ||
| Cargo.lock | ||
| Cargo.toml | ||
| README.md | ||
| RT2.LOG | ||
| rt3_auto_load_winedbg.log | ||
| rt3_manual_load_winedbg.log | ||
Analysis and reimplementation of Railroad Tycoon 3
The old executable is at ./rt3_wineprefix/drive_c/rt3/RT3.exe
Our first task is to understand the executable's high-level control loops and subsystem boundaries well enough to choose good rewrite targets. As we go, we document evidence, keep a curated function map, and stand up Rust tooling that can validate artifacts and later host replacement code.
The long-term direction is still a DLL we can inject into the original executable, patching in individual functions as we build them out. The current implementation milestone is smaller: a minimal PE32 Rust hook that can load into RT3 under Wine without changing behavior.
Project Docs
Bootstrap design and workflow documents live in docs/.
docs/README.md: handbook index and target hashesdocs/control-loop-atlas.md: compatibility index for the split atlasdocs/control-loop-atlas/: canonical atlas section filesdocs/setup-workstation.md: toolchain baseline and local setupdocs/re-workflow.md: repeatable reverse-engineering workflowdocs/function-map.md: canonical function-map schema and conventions
The first committed exports for the canonical 1.06 executable live in artifacts/exports/rt3-1.06/.
Rust Workspace
The Rust workspace is split into focused crates:
rrt-model: shared types for addresses, function-map rows, and control-loop conceptsrrt-cli: validation and repo-health checks for the reverse-engineering baselinerrt-hook: minimal Windows DLL scaffold that currently builds adinput8.dllproxy for low-risk in-process loading experiments under Wine
For the current runtime smoke test, run tools/run_hook_smoke_test.sh. It builds the PE32 proxy,
copies it into the local RT3 install, launches the game briefly under Wine with
WINEDLLOVERRIDES=dinput8=n,b, and expects rrt_hook_attach.log to appear.