28 lines
2.6 KiB
Python
28 lines
2.6 KiB
Python
import sys
|
||
sys.path.insert(0, r'C:\git\bt411\scratchpad\night7')
|
||
import gitea
|
||
|
||
gitea.close(60, """**BOTH HALVES DONE — closing** (census e69c0d7, re-export f44be87).
|
||
|
||
Installed Ghidra 12.1.2 + JDK 21 locally and rebuilt the export with a new `ExportGaps.java` that keeps the old output contract exactly (shard format, index columns — every tool, grep and `@ADDR` citation still works) and adds a gap-fill pass first: force disassembly + `createFunction` at E8 call targets landing outside any function, data→code pointers at a plausible prologue, and the 332 starts the census discovered — iterated to a fixpoint.
|
||
|
||
| | before | after |
|
||
|---|---|---|
|
||
| index coverage of .text | 87.3% | **93.5%** |
|
||
| dark REAL code | 90.4 KB | **40.8 KB** (−54.8%) |
|
||
| game-side dark (bt/ + bt_l4/) | 53.1 KB | **21.1 KB** |
|
||
| functions / pseudocode | 6,267 | **6,472** (+205, 0 decompile failures) |
|
||
|
||
**`BTPlayer::VehicleDeadMessageHandler @0x4c05c4` — the function whose absence opened this issue — now has pseudocode**, along with every other address that historically burned us (ToggleLamp @4b838c, the TakeDamage death tail, the master-perf region, the myomer integrator, the btplayer hole @4c0904).
|
||
|
||
Two things worth flagging beyond the numbers:
|
||
1. **The re-export independently CONFIRMED this week's hand-decoded crouch reconstruction, field for field** (mapPosture/duckState/squatCapable/myomerEffectiveness, the novice gate, SetLegAnimation(2/3), ForceUpdate(8)+(1), the stability alarm). Good news for every raw-disasm reconstruction we've shipped.
|
||
2. **It also caught a branch the raw pass missed** — an airborne auto-rise (`mode 3|4 && legState 1 → forced rise`) that the hand disassembly stopped just short of. Implemented and re-benched the same day. That is exactly the failure mode this issue was about, now caught by tooling instead of by a player.
|
||
|
||
**Process:** `reference/decomp/GAP_CENSUS.md` maps what is still dark; per reconstruction-gotchas §20 the rule is now cheap — look the address up, and only if it is in a dark region does "absent from the export" need byte-scan backup.
|
||
|
||
⚠ **Note for anyone citing the decomp:** the old export is preserved at `reference/decomp/archive_2025export/`. Addresses are stable across both, but line numbers and shard membership are NOT — cite `@ADDR`, not `part_0NN.c:LINE`.
|
||
|
||
Pipeline for future re-exports: `tools/ghidra_reexport.sh` → `tools/gapcensus.py` → `tools/gapdiff.py`. Remaining 40.8 KB dark (mostly engine TUs we compile from source) plus the new `@0x4c0904` master-Performance lead are tracked in `phases/phase-04-gap-census.md`.""")
|
||
print('closed')
|