FUN_00893290 is ServerTradeManager::GenerateTradeRaidEncounters -- ServerTradeManagerImpl vftable slot 10 -- rolling Chance(TRADE_RAID_ODDS_PLAYER = 0.2) and Chance(TRADE_RAID_ODDS_NPC = 0.05) once per player. Both are strictly inside (0,1) so each is exactly one word, and no back-edge contains either site, so one word per player per site is a hard bound. Why no sweep found it: zero direct calls to it exist in the image and its only reference is a vtable slot. The dispatch is a "call edx" through slot 10 at 0x007d8469 inside DetectEncounters -- one instruction before the DIRECT call that lane I's closure did follow. Lane I's inventory is not wrong; its stated caveat about indirect edges was load-bearing, and this is what it was hiding. strategic-turn-internals.md line 153 had already named 0x00893290 "raid encounter generation" against these exact StrategyVars. What was missing was that it is where a turn's RNG goes. Ghidra's size is wrong again: real body 1546 bytes ending 0x0089389a, reported 1532, ending mid-instruction. Rule 17, third time. |
||
|---|---|---|
| .. | ||
| lane-a.json | ||
| lane-i.json | ||
| lane-j.json | ||
| lane-k.json | ||
| lane-o.json | ||
| lane-q.json | ||
| lane-t.json | ||
| lane-u.json | ||
| lane-w.json | ||
| lane-z.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.