diff --git a/README.md b/README.md index 87cfeb9..8a93b49 100644 --- a/README.md +++ b/README.md @@ -25,3 +25,21 @@ system-maintainer POV in **trikilli** → `services/re-lab.md`. This repo is eve 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). +- `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`. diff --git a/campaign/backlog.md b/campaign/backlog.md new file mode 100644 index 0000000..e9ad02f --- /dev/null +++ b/campaign/backlog.md @@ -0,0 +1,19 @@ +# Backlog (prioritized) + +Object model + control flow are mapped concurrently. Priority favors targets that unblock the +most other work. Groomed by **re-quartermaster**. + +## Now +1. **RTTI class inventory** — pull the full class/vftable list from ReVa; this seeds the real + object-model target names (currently placeholders on the board). +2. **empire/player object** — the root of the game state; cross-ref the save-editor structs. +3. **entry → main loop** — establish the control-flow spine in parallel with the object model. + +## Next +4. star system / fleet / ship / tech-tree objects (fan-out once class names are known). +5. D3D9 device init → present loop (renderer anchor). +6. save load/write path (ties object model to on-disk format; feeds verify/ parsers). + +## Later +7. battle-load path (primary bug) — needs the object model + main loop mapped first. +8. .gob/DDS/model asset parsers (interop tools). diff --git a/campaign/board.md b/campaign/board.md new file mode 100644 index 0000000..12f57ed --- /dev/null +++ b/campaign/board.md @@ -0,0 +1,17 @@ +# Campaign board + +Status flow: `backlog → in-progress → mapped → verified` (or `blocked`). +`verified` requires re-verifier evidence. Maintained by **re-quartermaster**. + +| Target | Type | Status | Conf | Coverage | Updated | Notes | +|---|---|---|---|---|---|---| +| _RTTI class inventory_ | meta | backlog | — | — | 2026-09-07 | pull full class/vftable list from ReVa; seeds object-model rows | +| entry point @0x925794 | control-flow | backlog | — | 0% | 2026-09-07 | WinMain → init → main loop | +| main loop / tick dispatch | control-flow | backlog | — | 0% | 2026-09-07 | how subsystems are pumped each frame/turn | +| D3D9 device init | subsystem | backlog | — | 0% | 2026-09-07 | Direct3DCreate9 → CreateDevice; renderer anchor | +| empire/player object | object | backlog | — | 0% | 2026-09-07 | cross-ref save-editor structs | +| star system object | object | backlog | — | 0% | 2026-09-07 | cross-ref save-editor structs | +| fleet / ship object | object | backlog | — | 0% | 2026-09-07 | cross-ref save-editor structs | +| tech tree object | object | backlog | — | 0% | 2026-09-07 | cross-ref save-editor structs | +| battle-load path | subsystem | backlog | — | 0% | 2026-09-07 | primary bug (many-core slowdown); LAA already on | +| .gob format | subsystem | mapped | high | 100% | 2026-09-07 | renamed uncompressed ZIP (community-known); parser target for verify/ | diff --git a/campaign/open-questions.md b/campaign/open-questions.md new file mode 100644 index 0000000..38e9be9 --- /dev/null +++ b/campaign/open-questions.md @@ -0,0 +1,12 @@ +# Open questions + +Each links to the finding that raised it. Promoted to backlog or closed by **re-quartermaster**. + +- **Compiler archive mismatch** — imports say MSVCR100/MSVCP100 (VS2010), but Ghidra applied + `windows_vs12_32` datatypes (closest available). Confirm the exact toolchain from the PE Rich + header; decide which datatype archive best fits. (from [[01-fingerprint]]) +- **Battle-load root cause** — inferred as single-threaded engine + core-count-sensitive code; + must be confirmed by a `ForceSingleCore=0` vs `=1` diff once the main loop is mapped. + (from [[00-strategy]]) +- **Save-editor struct coverage** — community editors cover players/tech/systems; fleet/combat + state coverage may be partial. Treat as strong hints, verify each field against real saves. diff --git a/findings/_template.md b/findings/_template.md new file mode 100644 index 0000000..1204c2f --- /dev/null +++ b/findings/_template.md @@ -0,0 +1,30 @@ +# + +- **Type:** class | function | subsystem +- **Address / RVA:** 0x........ (ImageBase 0x00400000) +- **RTTI / vftable:** +- **Status:** backlog | in-progress | mapped | verified | blocked +- **Confidence:** low | med | high +- **Owner / date:** · YYYY-MM-DD + +## Purpose + + +## Structure +```c +// offsets/sizes/types a reimplementer could use directly +``` + +## Decompilation notes + + +## Cross-refs +- Callers: +- Callees: +- Related: [[other-finding]] + +## Verification + + +## Open questions +- diff --git a/findings/control-flow/.keep.md b/findings/control-flow/.keep.md new file mode 100644 index 0000000..0c44fd4 --- /dev/null +++ b/findings/control-flow/.keep.md @@ -0,0 +1 @@ +# placeholder — populated during the campaign diff --git a/findings/objects/.keep.md b/findings/objects/.keep.md new file mode 100644 index 0000000..0c44fd4 --- /dev/null +++ b/findings/objects/.keep.md @@ -0,0 +1 @@ +# placeholder — populated during the campaign diff --git a/findings/subsystems/.keep.md b/findings/subsystems/.keep.md new file mode 100644 index 0000000..0c44fd4 --- /dev/null +++ b/findings/subsystems/.keep.md @@ -0,0 +1 @@ +# placeholder — populated during the campaign diff --git a/traces/.keep.md b/traces/.keep.md deleted file mode 100644 index 80ab4a3..0000000 --- a/traces/.keep.md +++ /dev/null @@ -1 +0,0 @@ -# traces/ — placeholder, populate as work lands diff --git a/verify/harness/.keep.md b/verify/harness/.keep.md new file mode 100644 index 0000000..0c44fd4 --- /dev/null +++ b/verify/harness/.keep.md @@ -0,0 +1 @@ +# placeholder — populated during the campaign diff --git a/verify/parsers/.keep.md b/verify/parsers/.keep.md new file mode 100644 index 0000000..0c44fd4 --- /dev/null +++ b/verify/parsers/.keep.md @@ -0,0 +1 @@ +# placeholder — populated during the campaign diff --git a/verify/results/.keep.md b/verify/results/.keep.md new file mode 100644 index 0000000..0c44fd4 --- /dev/null +++ b/verify/results/.keep.md @@ -0,0 +1 @@ +# placeholder — populated during the campaign diff --git a/verify/traces/.keep.md b/verify/traces/.keep.md new file mode 100644 index 0000000..0c44fd4 --- /dev/null +++ b/verify/traces/.keep.md @@ -0,0 +1 @@ +# placeholder — populated during the campaign