Both committed predictions are wrong, in different and useful ways. 1b FALSIFIED: ar-oracle-A-pre.sav + load + one End Turn gives 4c356f59..., not 7a8b3d5e... - and gives it byte-for-byte in two fresh hooks=off processes. 23 leaves apart from AR's continuation, 17 of them one AI fleet (Zeta Fleet V moved in the continuation and stayed put after a load). So AR's second hash may NOT enter determinism-hashes.txt as a load->turn pair; the load form is certified instead. The resave canonicalisation is exonerated: the pre-turn round trip differs in exactly one leaf, /CD[1]/NPrvVa, +5.00 per load - which also corrects determinism-oracle.md's "nothing else varies". Probe 1: the two files DIFFER, and /Sim/RNG, /Sim/trdmgr and every player-0 fleet are identical as predicted - but ZERO TechTree and ZERO ResTNm leaves differ. Both processes picked BIO_GrvAdpt. The 144 leaves are a combat at Venkman: Auto Resolve Peacefully means the human commits no ships, not that no combat occurs, and the planet's defences killed two raiders in one process and one in the other. The producer run (config already on the guest, no build) names why the pick agreed: producers A and B both returned null, Player[32] reached the candidate walk, and candidatesTried=1. The outcome set is a singleton by COUNT, not by producer gate - so ResTNm == '' is necessary for research exposure, not sufficient. VM145 restored byte-for-byte and released. |
||
|---|---|---|
| campaign | ||
| findings | ||
| ghidra | ||
| guides | ||
| notes | ||
| objects | ||
| scripts | ||
| tools | ||
| verify | ||
| .gitignore | ||
| README.md | ||
sots-re
Reverse-engineering worklog for Sword of the Stars (2006, SOTS1) — the 32-bit DX9 original + expansions. The nitty-gritty: static/dynamic analysis notes, Ghidra & ReVa scripts, function/struct maps, D3D9 call traces, decomp progress, findings.
Where this runs
Analysis lab on spicy (PVE, 192.168.3.201):
- CT111
sots-re— Linux workspace: Ghidra + headless ReVa server, radare2/rizin/cutter, binwalk. Hosts the Samba share and this repo's working tree at/srv/re-lab/notes. - VM140
sots-re-win10— Win10 runtime + dynamic analysis (x64dbg, Cheat Engine, RenderDoc/apitrace, DXVK→CPU-Vulkan for GPU-less rendering).
Infra (guests, storage, network, share, ReVa endpoint) is documented from the
system-maintainer POV in trikilli → services/re-lab.md. This repo is everything else.
Layout
findings/— the running findings log (append-only), one file per subsystem.ghidra/— exported scripts, data-type archives, struct definitions.traces/— D3D9 / Win32 API call captures + analysis.scripts/— helper tooling (loaders, extractors, parsers).notes/— session notes, scratch, hypotheses.
Ownership / legality
Game binaries come from the owner's own GOG/Steam copy. RE is for personal
interoperability, bug-fixing, and preservation. Binaries themselves are not committed
here (see .gitignore) — they live on the lab's Samba share /srv/re-lab/samples.
Campaign (how this repo is run)
A 4-agent crew (defined in ~/.claude/agents/re-*.md) runs the exploration:
re-quartermaster (backlog + board) → re-analyst (maps via ReVa) →
re-verifier (proves vs real data; old-vs-new differential once reimpl starts) →
re-scribe (files the note, links it, commits).
campaign/board.md— live status board (start here).- Live tracking = Forgejo issues on
alex/sots-re(labelsstatus/*are the kanban columns;type/*,conf/*).campaign/board.mdis the editable mirror — publish withscripts/forgejo_campaign.py bootstrap(needsFORGEJO_TOKEN). campaign/backlog.md— prioritized target queue.campaign/open-questions.md— unresolved threads.findings/_template.md— the record format every finding follows.findings/{objects,control-flow,subsystems}/— the growing engine map.verify/{parsers,traces,harness,results}/— validation: struct parsers now, golden-trace replay + shim compare-mode for reimplementation.ghidra/— exported scripts + datatype archives.
Approach & north star: findings/00-strategy.md. Binary facts: findings/01-fingerprint.md.
Sibling repo
alex/sots-engine — the from-scratch engine source (clean-room, public-capable). This repo keeps the
evidence + planning for both; binary facts cross over only via ghidra/addresses.json → tools/gen_addresses.py.
guides/re-windows-2000s-howto.md— annotated bibliography + how-to for RE of mid-2000s MSVC/DX9 Windows games, with our-experience call-outs.