forked from Ports/goldeneye-pc-port
D86 (resolved): modelInitRwData crashed on a bad ModelNode pointer during room-triggered gameplay init. Root cause: initplayergaitobject.c did `player_gait_object_header.RootNode = (int)&player_gait_hdr;` -- a same-width pointer<->int round trip that's a no-op on N64 but truncates a real 64-bit pointer on PC, dropping the executable's load-base high bits. Fixed under #ifdef PORT by assigning the real pointer directly. Only exercised once real gameplay starts (past the intro), which is why it was never hit before D69 let the game reach stage load. D87 (resolved): once D86 stopped blocking progress, an idle (no-input) run reaches the front end's genuine attract-mode demo playback and crashes in ramrom_replay_handler. Root cause: ramromfilestructure is a real ROM-compiled asset (big-endian) loaded via romCopyAligned's raw byte copy (D66) with no byteswap, so every multi-byte field reads scrambled and drives wild pointer arithmetic in the block-buffer consumers. Fixed with a #ifdef PORT ramromFixupEndian() called once after the load (D54 cseq-fixup pattern). Both root-caused with new env-gated TEMP probes (GE_D86, GE_D87), left in place per the existing convention. D88 (per-level "Usetup*Z" stage-setup file: zero PC porting done, struct-width + endian bugs stacked) is the new next blocker, root-caused but intentionally not patched inline -- it's D69-scale format-conversion work, logged as an open finding instead. Also documents a fast, deterministic BUNKER1 repro (-level_09 command-line arg, bypasses the front end/attract-mode entirely) and a correction to the gdb guidance: attach mode (vs. launch-only) works well for watching a global's write on an already-running process. Docs: docs/PCPortResearch.md §F (D86/D87 resolved, D88 new), docs/HANDOFF.md (session K), AGENTS.md summary line. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01C3xib6jjMV8o2iE4JfixAo