Roadmap¶
Completed¶
.textbyte-match — 4,145,724 / 4,145,724 bytes (100.00%)- All 18,458 functions matched
- Data section tracking instrumented (
.ctors/.dtors/.rodata/.data/.sdata/.sdata2) - 13 canonical class layout headers in
include/types/ tools/inject_matches.pysubdirectory scanning + multi-format annotation regex- Documentation site (this site)
Open work¶
Stub-to-real-C++ conversion¶
About 43% of matched functions are byte-equivalent stubs produced by ASMPROC inject_before rather than hand-written C++. Converting these is the path to a readable, modifiable, retargetable source tree.
Largest open areas:
cXObjectImplmethods compiled in theobjectsimTU (~91 KB)SAnimator2complex stubs (123 functions, 100 B+ each)EAnimControllercomplex stubs (81 functions, 100 B+ each)cXPersonImplvirgin pool (~69 KB across ~86 addresses)xroutingresidual patterns
Data section coverage¶
Currently 9.21% byte-matched. Approaching this systematically:
| Section | Current | Approach |
|---|---|---|
.dtors (360 B) |
0.00% | Declare the static destructor table |
.ctors (644 B) |
2.02% | Declare the static constructor table |
.rodata (362 KB) |
16.92% | Vtable conversion per class; string table consolidation |
.data (306 KB) |
0.25% | Initialized globals, lookup tables, game-state structs |
.sdata (7.5 KB) |
7.97% | r13-relative globals |
.sdata2 (4 KB) |
0.70% | r2-relative globals |
Tooling¶
- Per-agent git worktrees — would eliminate the shared-
cwdcross-contamination class observed when multiple contributors stage files concurrently - Cross-canonical-dir cleanup — ~22 remaining
targets_s2c↔famtargetdirectory duplicates from before the canonical-dir convention settled EVec3ABI reconciliation — the codebase uses both int-EVec3 (ISimsObjectModel) and float-EVec3 (SAnimator2,EAnimController) variants; consolidate intoinclude/shared-types/
Distant goals¶
- PC port — requires bringing the hand-written-C++ ratio above the major game-logic subsystems before it's practical
- Asset format documentation —
.arc,.NGH,.tplformats - Modding surface — once the codebase is readable enough that authors can navigate it