3.4 KiB
3.4 KiB
Backlog (prioritized)
Object model + control flow are mapped concurrently. Priority favors targets that unblock the most other work. Groomed by re-quartermaster.
Now
- Data readers first (reimpl lever) — implement the Mars brace-block parser + flat-KV +
CSV readers. Unlocks tech tree, weapons (207), ship sections (875), races, AI tables,
scenarios, tuning — nearly free. Also becomes the first
verify/parsers/. Seefindings/subsystems/data-model.md. - RTTI class inventory — pull the full class/vftable list from ReVa; this seeds the real object-model target names (currently placeholders on the board).
- empire/player object — the root of the game state; cross-ref the save-editor structs.
- entry → main loop — establish the control-flow spine in parallel with the object model.
Next
- star system / fleet / ship / tech-tree objects (fan-out once class names are known).
- D3D9 device init → present loop (renderer anchor).
- save load/write path (ties object model to on-disk format; feeds verify/ parsers).
Later
- battle-load path (primary bug) — needs the object model + main loop mapped first.
- .gob/DDS/model asset parsers (interop tools).
Breadth queue (next rounds, one Ghidra user at a time; non-Ghidra items can run in parallel)
- Combat sim:
GameCombatSim/Mars::CombatSimtick,CombatCommand*dispatch (31 types), weapon flight perweaponclass(Ghidra) - Renderer: D3D9 init →
Mars::DrawDevice/Camera→ present loop;.fxshader usage (Ghidra) - Networking:
SNM*/FNM*protocol from the 82NetMsgReg_*factories; lockstep sync + host migration (Ghidra) - AI:
AIPlayer, fuzzyIAIRule,TacAISquad*; how the AI CSV tables are consumed (Ghidra) Mars::Buffer::gobioVFS + NativeFileSystem override order (Ghidra, small)- Ship design rules: section sockets/banks →
ShipDesignDefvalidation (data + small Ghidra) - Reader/verify: fold strategic-internals formulas into harness checks against the 3 real saves (Python)
Parked (not on the critical path — resume only with a clear reason)
- Battle-load bug — one cheap Ghidra question when convenient: does the combat loader use the job API (
0x8fc160/0x8fa5b0) whose completion poll isTryEnterCriticalSection → Sleep(1000)@0x0071ea60? Dynamic resume: add HDA audio (qm set 140 -audio0 device=ich9-intel-hda,driver=none), build Tankers + Extended-Range DEs, move to Markab/Junction, thenverify/harness/profiling/battle-run.sh.
From the RE how-to (guides/re-windows-2000s-howto.md) — adopt
- Replay + per-turn state-checksum regression harness (OpenRCT2 model): record multi-turn input scripts, checksum sim state each turn, run in CI; decide the float-parity policy now (x87 vs SSE: i686 shim vs future x64 standalone) —
-mfpmath/strict or tolerant compare. Extends our single-step End-Turn hash oracle. (verify lane) - Automated class recovery: run Ghidra
RecoverClassesFromRTTIScript(with Decompiler Parameter ID) and/or CMU OOAnalyzer on the 1,924 RTTI classes to build class structs + method-to-class assignment; import VS2010 FID databases for CRT/STL triage. (Ghidra lane, after tech-effects) - apitrace whole-run D3D9 capture of the original as the golden trace for the eventual
Mars::DrawDevicereimpl (RenderDoc can't capture D3D9); WinDbg TTD (x86 supported) for data-flow questions like 'who writes ServerPlayer+0x164'. (VM lane)