sots-engine/README.md
2026-09-07 22:10:35 -04:00

34 lines
2.5 KiB
Markdown

# sots-engine
A from-scratch, functional reimplementation of the engine behind **Sword of the Stars (2006)**.
Not a byte-for-byte decompilation: behavior-equivalent code, built up one verified piece at a time
(OpenRCT2-style) until the tree can build the whole application on its own.
**Bring your own game.** This repository contains engine code only. Game data, assets, saves, and
the original binaries are never included; tests and tools read an owner-supplied copy via
`$SOTS_DATA_DIR`. See `CONTRIBUTING.md` for the clean-room rules.
## Status
Phase 2. **M0 done** — the shim frontend (`src/shim/`, a proxy `binkw32.dll` the original game
loads) builds, deploys, hooks, and logs from a real game launch. Engine code accrues under
`src/mars/` and `src/game/`; each module is oracle-verified against the owner's game data before merge:
- `mars/parse` — brace-block + `.effect` readers (1,531/1,531 files agree with the reference)
- `mars/text` — flat key/value tables, id manifests, CSV (64/64 files agree)
- `game/sim` — strategic formulas (economy, research, colonies, movement) as pure functions; 356 hand-computed checks
- `mars/vfs` — `.gob` (ZIP) archive reader + loose-file override; entry counts and bytes verified against `unzip`
- `mars/stream` — the game's self-describing save/serialization format (reader, writer, typed shapes) + gzip; three real saves round-trip byte-identical
- `mars/rng` — MT19937 with save-state load/store; layout confirmed against real saves
- `game/data` — typed catalogs (weapons, ship sections, turrets, id registries, tech tree, strings) with cross-reference checks; 229k values agree with the reference
- `game/design` — ship-design assembly/fit/tech-gating rules and derived stats; validates all 127 stock designs from real saves
Build: `cmake --preset host && cmake --build --preset host && ctest --preset host` (Linux);
`tools/sync-build.sh` cross-builds the shim on the lab box and stages it for deployment.
## Layout (grows with the work)
- `src/shim/` — binkw32 proxy + hooks + old-vs-new compare harness (frontend #1)
- `src/mars/`, `src/game/` — the engine and game reimplementation (accruing)
- `include/generated/sots_addresses.h` — binary facts (RVAs/prototypes), generated from the RE repo
- `tests/` — host tests; real-data tests skip unless `$SOTS_DATA_DIR` is set
- `tools/` — build (MinGW i686 cross) and deploy scripts
Planning, findings, and verification evidence are tracked in the private RE repo (`sots-re`).