Phase map for both turn drivers, byte-for-byte from objdump rather than the decompiler. Corrections that matter: - the end-of-turn tail is UNCONDITIONAL. turn-spine.md 2.4 step 11 said it is deferred when encounters are pending; that came from reading an inlined std::vector destructor as a branch (both arms converge at 0x007dcb38). There is no branch on the encounter snapshot in the function, and 0x00794ad0 does not build an encounter list -- it builds the 15 ship-action type ids. - ServerPlayer::ProcessTurn takes one float argument and never reads it. - the ResearchRollPending site runs AFTER ProcessResearch, not before, and clears the flag only when the roll actually fires. Threshold is a strict 0.5f < progress/Cost. Both consumers located by a full displacement scan. - EVENT_NO_RESEARCH's gate is 'completed nothing this turn', not 'nothing available' -- 0x00584e50 collects RESEARCHED techs, not available ones. - a fired research roll costs one or two RNG words, not one: the plague branch draws a second NextInt and posts EVENT_PLAGUE_OUTBREAK. - two StrategyServer bases four bytes apart, and two per-turn counters. - new: the research refund at 0x008914aa, previously unmodelled. 45 addresses in ghidra/addresses.d/lane-t.json (669 -> 722 entries, no dupes). |
||
|---|---|---|
| .. | ||
| lane-a.json | ||
| lane-t.json | ||
| lane-u.json | ||
| lane-w.json | ||
| README.md | ||
Per-lane address fragments
addresses.json is a single shared file. When several lanes run concurrently they edit the
same lines, and three times on 2026-09-08 one lane's git add swept another's in-flight
entries into the wrong commit. Nothing was lost, but authorship and atomicity were.
A lane may instead drop its own file here:
{ "entries": [ { "name": "...", "addr": "0x...", "convention": "...",
"prototype": "...", "status": "verified", "source": "findings/..." } ] }
Name it after the lane (lane-d.json). tools/gen_addresses.py merges every fragment in
sorted order after addresses.json. A duplicate name across files is a hard error, not
last-wins — two lanes disagreeing about an address is exactly the thing we must not paper over.
The integrator folds fragments back into addresses.json once the lane's work is merged.