41 lines
3.7 KiB
Markdown
41 lines
3.7 KiB
Markdown
# Backlog (prioritized)
|
|
|
|
Object model + control flow are mapped concurrently. Priority favors targets that unblock the
|
|
most other work. Groomed by **re-quartermaster**.
|
|
|
|
## Now
|
|
1. **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/`. See
|
|
`findings/subsystems/data-model.md`.
|
|
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).
|
|
|
|
## Breadth queue (next rounds, one Ghidra user at a time; non-Ghidra items can run in parallel)
|
|
- Combat sim: `GameCombatSim`/`Mars::CombatSim` tick, `CombatCommand*` dispatch (31 types), weapon flight per `weaponclass` (Ghidra)
|
|
- Renderer: D3D9 init → `Mars::DrawDevice`/`Camera` → present loop; `.fx` shader usage (Ghidra)
|
|
- Networking: `SNM*`/`FNM*` protocol from the 82 `NetMsgReg_*` factories; lockstep sync + host migration (Ghidra)
|
|
- AI: `AIPlayer`, fuzzy `IAIRule`, `TacAISquad*`; how the AI CSV tables are consumed (Ghidra)
|
|
- `Mars::Buffer::gobio` VFS + NativeFileSystem override order (Ghidra, small)
|
|
- Ship design rules: section sockets/banks → `ShipDesignDef` validation (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 is `TryEnterCriticalSection → 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, then `verify/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::DrawDevice` reimpl (RenderDoc can't capture D3D9); **WinDbg TTD** (x86 supported) for data-flow questions like 'who writes ServerPlayer+0x164'. (VM lane)
|
|
- **Pin game/sim low-confidence formulas** from `findings/subsystems/formula-gaps.md` (bankruptcy limits/stamping, linear hazard curve, money tail, pbon, slider request, [6] net, no speed clamp, decay incl. current) and wire the code-defined tech effects (`findings/subsystems/tech-effects.md`) into game/sim + game/data. (engine lane, next slot)
|