mirror of
https://github.com/jkdansereau/goldeneye-pc-port.git
synced 2026-10-24 00:02:45 +02:00
D115: THROWMTX/THROWPOS/THROWPREV in gunfire.c were raw byte offsets ((u8*)g_CurrentPlayer + handnum*sizeof(struct hand) + 0xAD8/0xB08/0xB48). Both the stride (PC sizeof(struct hand) ~0x968 vs N64 0x3B8, D102) and the base offset are N64-sized, so on x86-64 the address lands inside the inline gait Model / bondhead-matrix region of struct player and matrix_4x4_copy(THROWMTX,..) scribbles 64 bytes of live render state on every casing-ejecting shot. The offsets are exactly hands[handnum].throw_item_pos_related[_prev] and its translation row - macros now use those field accessors under #ifdef PORT; N64 build unchanged. Full survey in docs/AUDIT-M6-player-offsets.md (10 sites, 3 HIGH fixed here, 2 MED open incl. the likely 'weapon model doesn't draw' cause). D113 (investigation, no code change): the 'portal-BFS under-reach / void' premise is stale - the BFS output is correct for BUNKER1's topology (rooms 26/27 are behind PORTALFLAG_DISABLED closed-door portals, culled identically on N64). The void is the closed-door models obj 153/154 not rendering in their doorway -> D114 track. D114 (investigation, no code change): joint-matrix chain + d43_emit.py float emission verified clean post-D112; basemtx is a proper right-handed +Y-up lookat, joint render_pos coherent and upright. All plan hypotheses disproven. Residual = a horizontal mirror in the shared port/fast3d viewport / MP-matrix path vs GE's left-handed screen convention (also explains the open D75 mirrored-text / logo items). Still open. Plan + agent reports: docs/PLAN-M6-playable.md. §F: D113/D114/D115.