mirror of
https://github.com/Druthulu/BFM-decomp
synced 2026-09-29 15:18:24 -04:00
110570e3fc
36 fresh wave-O cracks + 10 recovered wave-J/K/L drafts, verified in ONE clean rebuild: 143dbb89f34491258bbc27810d0a12ec8b43a8dd BYTE-IDENTICAL. main stubs 1881 -> 1835. Wave O was a 3-arm 49-card wave (6,266 ins): main head-crack, main UNKNOWN, overlay UNKNOWN. 47/49 standalone MATCH, independently re-verified by me (R14) at 47/49 -- exact agreement -- and reloc_identity reported 46 AGREE / 0 MISMATCH, the first wave of the campaign with zero symbol errors. THE UNKNOWN LEVER DRAFTS LIKE ANY OTHER LANE, which matters strategically: it is ~138k ins fleet-wide (a quarter of everything open) and was routed as "needs its own lane". FOUR gate_main defects fixed here, each of which had been silently costing prior waves drafts: - typedef stripping walked drafts in SLATE order while substitution happens at ADDRESS order, so the surviving typedef could land BELOW a draft using it -> "syntax error before D_800A651C". Verified the two orders genuinely diverge for both destination files in this slate. - a BUILD failure (sha None) fell through to a silent bisect -- a full clean rebuild per step to rediscover what the compiler had already printed and discarded. Now the error lines are shown and the offending drafts named for undefined-reference/redefinition/conflicting-types. (My first version of that printer TAILED a stderr+stdout concatenation and faithfully showed 25 lines of make progress chatter instead of the error -- selecting by position, not by content.) - typesig treated "short" and "s16" as different types (R39 over-refusal). Aliases now normalize; 11/11 NC cases pass, with signedness, volatile and array-vs-scalar still conflicting correctly. - conflict detection ignored shared headers: engine_core.h's DEFINE_ macros declare symbols in their own bodies, so a draft's file-scope array decl of D_800A651C was illegal. Block-scoping the draft's extern fixes it byte-identically. DECLARATION RECONCILIATION took the slate from 5 dropped to 0, and three of the four conflicts were load-bearing CODEGEN, not style: the array form of D_80078D88 blocks a sched1 hoist (scalar users adopt [0] for free); "volatile" on D_800B9A02 is required by one draft and fatal to two others (plain u16 loses 1 bank, volatile loses 2); D_800A651C needs block scope. Cookbook §176f.