Files
goldeneye-pc-port/docs/dev/findings-index.csv
T
James Dansereau afd86cd7f8 Merge PR #123 from dolent: opt-in crosshair when not aiming (D436)
Video.CrosshairPersistent, F10 Game page after Show crosshair. Merged with
the 2026-10-01 review conditions: both display-mode presets set it off,
tip added, gunDrawSight change is draw-only (Rule 2 sign-off by the
maintainer, 2026-10-06). Default off is pixel-identical (Dam gate PASS).
2026-10-06 21:22:17 -04:00

64 KiB

1# GENERATED by tools_pc/gen_findings_index.py -- do not hand-edit.
2# Grep this to pick which findings.md entries to read; it is not authoritative.
3labelbucketone_linerstatus_raw
4D24-D30RESOLVEDgreen threads / kernel / crash handlerresolved
5D31-D42RESOLVEDboot ABI: ANIM_DATA, music seq-table, libaudio banks, Globalimagetable rebase, GL context, rsp toggleresolved
6D43-D50RESOLVEDmodel-file loading → offline sidecar "Plan B" (d43_emit.py); D50.6 texCopyGdls full-slot copyresolved
7D51-D58RESOLVEDfont pixeldata, osGetCount tick rate, model RW pools, cseq BE header, synth slots, RLE menu bg, watch raw offsets, gun-barrel DLresolved
8D59-D68RESOLVEDintro render: blood-RLE clobber, DMA validate, OSMesgQueue, HEADS/BODIES sentinels, romCopy width, image_entry, Globalimagetable BE→LEresolved
9D70-D74RESOLVEDintro-logo pixels: C-array bswap, UV path, sinf/cosf DVAL(), texture-import truncationresolved
10D75FIXEDfront-end 3D model transforms (D77 audio split out below —FIXED 2026-10-02 (branch fix/fidelity-gaps; by-eye check owed):
11D76 · D164FIXEDLegal screen only draws line 1 —FIXED — this row and the ## D164 entry below were stale; the proposed one-line #ifdef PORT fix was actually committed 8dfc578f4 (2026-08-31), well before this correction (2026-09-18).
12D159FIXEDfront-end wallet-Bond photo "interlaced"/combed (RC1 / D149) —FIXED (#ifdef PORT no-op the swap in image.c)
13D161FIXEDDepot (-level_30) ceiling = bright-blue speckle + radial rays (B2).FIXED (port/fast3d/gfx_pc.cpp)
14D165 · D166FIXEDInput-layer polish (M-31, port-only):FIXED
15D180 · D181FIXEDNative-PC input pass (QoL run):FIXED (2026-09-26 bookkeeping:
16D186CLOSEDVideo.FpsCap throttles the sim, not just presentation (M-39 diag, M-42 clamp).CLOSED (2026-09-28 bookkeeping:
17D187FIXEDHUD ammo-type/weapon icon vanished at -O2 (M-46 root-cause, M-47 fix + verify).FIXED (src/game/gunfire.c, #ifdef AVOID_UB); PR #19
18D188FIXEDLinux -O2 boot crash:FIXED (src/libultrare/libc/xprintf.c, src/sprintf.c, #ifdef PORT); PR #22
19D189FIXEDLinux -fstack-protector aborts on the decomp's latent stack-buffer overruns (M-48) —FIXED (CMakeLists.txt, src/game/stan.c #ifdef PORT); PR #23
20D190CLOSEDLinux -level_45 SIGSEGV at load in add_ptr_to_objective (objective.c:64) (M-48, open).CLOSED — not a port bug; level 45 is MP-only and has no solo setup file in the ROM (root-caused M-105, reproduced on Windows).
21D191FIXEDWindows -O2 release-bundle crash:FIXED + PLAYTEST-VERIFIED (M-79).…
22D193FIXEDNPC AI locomotion is too slow —FIXED + user-playtest-verified (M-81) —…
23D194FIXEDMouse input needs another tuning pass —FIXED (2026-09-26: user reports the v0.3.0→v0.4.0 mouse changes feel solid and glitch-free; code-side validation owed).
24D195FIXEDTransparency / alpha surfaces broken on Control (M-49, user playtest) —FIXED (port/fast3d/gfx_pc.cpp, gfx_sp_vertex) —…
25D197CLOSEDCharacter face/head textures wrap around the head, seen on Silo (M-49, user playtest).CLOSED — user playtest v0.2.0-pre
26D198FIXEDalAdpcmPull/_decodeChunk used K0_TO_PHYS (an unconditional & 0x1FFFFFFF mask) on 64-bit heap pointers (src/libultra/audio/load.c).FIXED (src/libultra/audio/load.c) —
27D199FIXEDPhase-3 software audio mixer:FIXED (2026-09-26 bookkeeping:
28D200FIXED-level_09 segfault: reverb's ALDelay.input/output are u32 —FIXED — 5-line cast in reverb.c (this session)
29D196FIXEDOS mouse cursor stays visible after closing the F10 options overlay in click-to-lock mode (M-49, user playtest).FIXED (6e758f1d, merged to main) —…
30D192CLOSEDFront-end mission/level-select grid pointer still can't reach the outer cells —CLOSED — the buggy mode 0 was removed entirely in the v0.2.0 prep pass (see D239); click-to-lock is now the only capture mode, so the unreachable-cells path no longer exists
31D221FIXEDSELECT FILE mouse hit-box offset —FIXED (M-91) — explicit {min,max} coord2d pairs under #ifdef PORT; human mouse-playtest confirmed.
32D222FIXEDHigh Video.FovScale breaks culling —FIXED, awaiting visual verification (M-121).
33D223FIXEDQoL ask: mouse-wheel weapon cycling should be directional like a normal PC shooter —FIXED (M-105, port/src/input.c) —…
34D224CLOSEDQoL gap (M-87, from a PD-PC-port survey):CLOSED (2026-09-28 bookkeeping:
35D225FIXEDDev-tooling QoL (M-87, user ask):FIXED (2026-09-18) — GE_DEBUG_UNLOCKALL=1 short-circuits fileGetIsCheatUnlocked() (src/game/file2.c, #ifdef PORT, cached getenv) to always return TRUE; default off, no save mutation.
36D226FIXEDQoL ask: player-adjustable HUD scale for the ammo counter, bottom-left pickup/item status text, and top-of-screen dialogue/subtitle text.FIXED (2026-09-24): Game.HudScale 75–150% (user-verified, capped at 150) via fast3d G_HUDSCALE_EXT rect scaling about per-element anchors; dialogue/bottom messages width-capped.
37D227FIXEDSky renders as two independently-moving halves —FIXED (M-100b, PR #43) —
38D229FIXEDIsWater-level water renders green, pulses blue<->green (M-101; Frigate -level_26).FIXED (port-layer) — ZLIB+CI8 water image now imports via the CI8 palette path (gfx_pc.cpp); Frigate verified live ("looks better"); sweep + Surface 2 by-eye still owed.
39D230FIXEDIn-level music quality:FIXED (M-121, v0.2.0) —
40D231CLOSEDQoL batch: mute-on-focus-loss + screenshot-hotkey productization (M-105, roadmap Tier 3, port-only).CLOSED — PARKED/DEPRIORITIZED (user, 2026-09-25).
41D233FIXEDAll levels (intermittent):FIXED (port/fast3d/gfx_pc.cpp, gfx_sp_tri1) —…
42D234FIXEDDam: guard towers along the dam structure invisible except the first one (M-106, user QA report).VISUALLY VERIFIED FIXED (M-108) —…
43D244OPENSelf-hosted CI runner link failure:OPEN, not yet fixed. Next…
44D228FIXEDAK47 white missing-texture patches after D217's texpool fix —FIXED (port/fast3d/gfx_pc.cpp, palette_to_rgba32) —
45D204FIXEDPC audio ran ~2 % below real time permanently (AI feedback loop's 3 ms setpoint vs PC jitter).FIXED (port/src/audio.c, port/src/libultra.c, port/include/audio.h) —
46D203CLOSEDSteam Deck (SteamOS, x86_64 Linux) v0.1.0 release bundle:CLOSED — root cause + fix in D253.
47D201FIXEDsrc/libultra/audio/bnkf.c bank/instrument/sound/wavetable relocation offsets were s32, truncating the real 64-bit base pointer.FIXED (src/libultra/audio/bnkf.c) —
48D202FIXEDSilenced PPK "slap" + broader real-time mixer corruption (M-52→M-67).FIXED (2026-09-26, user by-ear:
49D206FIXEDPC played every SFX one bank slot too high —FIXED (M-76, src/snd.c:1001, #ifdef PORT) —
50D207CLOSEDAlarm klaxon starves combat SFX and doesn't recover after it stops (surfaced by D206, M-77).CLOSED (2026-09-28 bookkeeping:
51D208FIXEDPlayer weapon-fire sound goes permanently silent mid-firefight (all other SFX unaffected) —FIXED + user playtest-verified (M-78d) —
52D209FIXEDEvery AI character in the game is locked to a *walk* animation regardless of the speed the ailist commands —FIXED + user-playtest-verified (M-81).
53D210FIXEDchrToPatrol() leaves act_patrol.lastvisible60 uninitialised on PC —FIXED (chraction.c:3872, #ifdef PORT → self->act_patrol.lastvisible60 = -1;, N64 line under #else).…
54D205CLOSEDPC plays wrong/extra SFX for gameplay events (gunfire slap layer, explosion→scream, armour pickup, melee→Klobb idx 106) —CLOSED (M-78) — root cause was D206; all four symptoms resolved + user-confirmed by ear.
55D152+FIXEDD152 addendum (M-31):FIXED (src/snd.c, port/src/libultra.c, #ifdef PORT) —
56D168FIXEDGE_PCDUMP / F12 PPM captures were vertically flipped —FIXED (port/fast3d/gfx_opengl.cpp); D114 / D116 reclassified as capture-orientation artifacts (below).
57D169FIXEDFront-end mouse pointer can't reach the outer cells of the mission/level-select grid —FIXED (M-33, port/src/input.c, port-only, no #ifdef PORT).
58D178FIXEDPre-mission briefing screen:FIXED (M-36) — high confidence
59D175CLOSEDIn-game stutter / brief hang during normal play —CLOSED (v0.4.0 campaign sign-off 2026-09-28, user:
60D176FIXEDSurface exterior renders wrong (-level_36), two independent defects.FIXED (2026-09-29 bookkeeping:
61D177FIXEDLadders non-functional —FIXED (M-36) — high confidence; interactive climb test owed Owed climb test considered cleared by the 2026-09-28 v0.4.0 campaign sign-off (ROADMAP §3 bookkeeping, 2026-10-01); reopen if seen.
62D172FIXEDBullet-impact / blood / spark particles render magenta or cyan instead of dark red (M-82, ROOT CAUSE FOUND + FIXED).FIXED (port/fast3d/gfx_pc.cpp gfx_lod_tile_offset)…
63D174CLOSED"No blood effect" (user QA report).CLOSED — faithful (2026-09-26, user side-by-side on 1964:
64D183CLOSEDM-36 Family A ("texture line/pitch shear") is DISPROVEN for the Surface repro (-level_36).CLOSED (2026-09-26, user-approved:
65D173PARTIALThird-person Bond model spawns too high —PARTIAL (2026-09-29 bookkeeping:
66D179FIXEDPackaged build crashes after the logos —Diagnosed, not fixed —
67D180FIXEDNative-PC input pass (M-XX QoL run, qol/native-pc-input-menu, port-only).FIXED (2026-09-26 bookkeeping:
68D181FIXEDGame.ScreenShakeIntensity —FIXED (2026-09-26 bookkeeping:
69D184FIXEDF10 port-layer options overlay —FIXED (2026-09-26 bookkeeping:
70D211FIXEDPC FOV slider — Video.FovScale (M-83 QoL wave, port-only, WIDESCREEN-FOV-PLAN.md Phase 4).FIXED (2026-09-26 bookkeeping:
71D212FIXEDAnisotropic-filtering config wiring —FIXED (2026-09-26 bookkeeping:
72D213FIXEDOn-screen FPS readout —FIXED (2026-09-26 bookkeeping:
73D214FIXEDKeyboard rebinding — [Input.Bind] config section (M-83, port-only, PD parity, Phase 4 debt).FIXED (2026-09-26 bookkeeping:
74D215FIXED1P weapon viewmodel never drew in-level —FIXED (src/game/gunfire.c, #ifdef PORT).
75D216FIXEDGame.SkipIntro — boot straight to the file-select menu (M-83, port + one #ifdef PORT game-code line, PD parity, Phase 4 quick win).FIXED (2026-09-26 bookkeeping:
76D217FIXED1P weapon viewmodel + 3P Bond model textures garbled —FIXED + merged (PR #47 + PR #49); white residual split out as D228.
77D218FIXEDWide FOV exposes the per-level draw-distance / fog boundary —FIXED (2026-09-26 reclassified; 2026-09-29 default corrected:
78D219RESOLVEDPPK explosions render purple on Dam (M-87, user QA, "not 3D but noting").RESOLVED (M-115, 2026-09-12) for the original PPK-purple symptom.
79D220CLOSED1P muzzle flash position shifts upward at higher Video.FovScale (M-87, user QA, Jungle/M16).CLOSED — merged into D303 (2026-09-26, user:
80D85CLOSEDRoom primary/secondary DL → texLoadFromGdl garbage.CLOSED (2026-09-26, user-approved:
81D86 · D87RESOLVEDmodelInitRwData truncated ptr · attract-demo BE ramromfilestructure.resolved
82D88.4RESOLVEDpropDefs polymorphic record stream not byteswapped → setupDoor crash.resolved (d88_propdefs.py); layout audit M-20 → D132
83D132CLOSEDD88 propDefs layout audit (M-20):CLOSED (2026-09-28 bookkeeping:
84D157FIXEDCampaign never unlocks the next level (M-30, user bug —FIXED (src/bondtypes.h, #ifdef PORT —…
85D160FIXEDDam level-end cutscene (Bond off the dam / bungee) never plays —FIXED (user, 2026-09-26:
86D89-D92RESOLVEDstage-load→frame: stan zero-fill overrun, portal address trunc, chr/AI spawn ptrsresolved
87D93-D102RESOLVEDstruct-pun / hardcoded-size pass:resolved (D95 pool bump partial)
88D103-D107RESOLVEDBUNKER1 viewport height, depth-buffer clear (G_CLEAR_DEPTH_EXT), portal near-plane, LOD mip tileresolved
89D108-D112RESOLVEDskeletal models: d43_emit.py put_f32 byte-reversal bugresolved
90D113-D116FIXEDportal BFS ok · matrix chain ok · player raw-offset audit + gunfire.c THROW* · HUD text X-mirrorD114/D116 CLOSED — NOT A BUG (M-33, see D168):
91D117CLOSEDFrame nondeterminism root-caused; GE_DETERM attempted, not achieved.CLOSED (2026-09-28 bookkeeping:
92D118RESOLVEDSDL input layer; M-24 mouse-look rework (mode-aware map, real INI); D118b/c FIXED.resolved (D118a residual)
93D150FIXEDwatch OBJECTIVES / BRIEF page crash:FIXED (src/str.c #ifdef PORT); interactive re-verify pending Owed re-verify considered cleared by the 2026-09-28 v0.4.0 campaign sign-off (ROADMAP §3 bookkeeping, 2026-10-01); reopen if seen.
94D260-D265CLOSEDv0.2.1 hotfix batch: D260 wheel direction swap (fixed) · D261 watch-menu nav auto-repeat (fixed, feel-check owed) · D262 watch item-preview model missing → roo…CLOSED (2026-09-26 bookkeeping:
95D266-D269CLOSEDD236/D265 wall, second pass:CLOSED (2026-09-26 bookkeeping:
96D270CLOSEDBackfilled (M-132) — this label was never given its own row; only code comments and the HANDOFF archive documented it.CLOSED (2026-09-26 bookkeeping:
97D271CLOSEDD236 wall, third pass —CLOSED (2026-09-29 bookkeeping:
98D276CLOSEDD236 wall, eighth pass —CLOSED (2026-09-26 bookkeeping:
99D279CLOSEDBackfilled — this label was consumed by an undocumented partial session (2026-09-14 ~23:00) that left artifacts in scratch/ (d279_run.log… —CLOSED (2026-09-26 bookkeeping:
100D281FIXEDGame.AllUnlocked (D257) still breaks audio, and can also break right-mouse aim, when enabled before any save has ever been written (v0.2.1 user testing… —FIXED (2026-09-23, port/src/libultra.c):
101D282FIXEDQoL ask (v0.2.1 user testing, 2026-09-15):FIXED (port/src/input.c, #ifdef not needed —
102D283FIXEDSteam Deck first-run preset (D-unnumbered in port/src/video.c/main.c, videoApplySteamOSDefaults()) did not apply for a user who added the game via Steam… —FIXED (2026-09-30, port-only) —
103D280CLOSEDD236 wall, ninth pass —CLOSED (2026-09-26 bookkeeping:
104D275CLOSEDD236 wall, eighth pass —CLOSED (2026-09-26 bookkeeping:
105D274CLOSEDD236 wall, seventh pass —CLOSED (2026-09-26 bookkeeping:
106D273CLOSEDD236 wall, fifth pass —CLOSED (2026-09-26 bookkeeping:
107D272CLOSEDD236 wall, fourth pass —CLOSED (2026-09-26 bookkeeping:
108D137FIXEDright-mouse (aim-sight) crash:FIXED (src/game/gunfire.c #ifdef PORT —
109D119 · D120FIXEDguard-attack weapons_held[]->chr pun crash · blood-stain PointUsage[] chain hangD119 fixed · D120 FIXED (M-30)
110D120FIXEDBlood-decal PointUsage[] chain —FIXED (tools_pc/d43_emit.py).
111D121RESOLVEDWS1 frictionless per-level boot (bare -level_XX injects its -m* row).resolved
112D122FIXEDper-level prop/item model-load crash (Dam/Facility/Runway modelLoad/modelInitRwData):converter fixed; residual chr/fast3d crashes on those levels are separate
113D123FIXEDcrash class C1: chrIsNotDeadOrShot NULL deref on 6 levels (Dam/Runway/Frigate/Statue/Streets/Cradle).converter fixed (OBJ_ID_WORDS); C1 cleared on all 6, residual crashes are fast3d (C2)
114D125RESOLVEDcrash classes C3+C6 (Aztec/Bunker2/Surface2):resolved (M-16b) — line 374 → 8 NULs; all 21 sidecars regen'd; Aztec -level_28 now PASSES (was C3 CRASH).
115D126RESOLVEDcrash classes C3r/C4/C6 (Bunker2 -level_27 door7F054FB4 propobj.c:13523, Depot -level_30 prop.c:902, Surface2 -level_43 loadobjectmodel.c:393):resolved — d88_propdefs.py PROPDEF_PC_BYTES[30/32/33/35]=24 + typed handler; loadobjectmodel.c sizepropdef PORT returns 6.
116D124FIXEDcrash class C2: fast3d bad texture pointer.Jungle fixed (port/src/gimgfixup.c); Facility → D130
117D131RESOLVEDcrash class C2m (Jungle -level_37):resolved — seg_addr() restores the module high word for any fallthrough w1 in [0x40000000, 0x70000000) (module fixed-based at 0x140000000, no ASLR; DRAM/KSEG0/segmented/phys all handled earlier).…
118D133RESOLVEDintro render triage (M-20):RESOLVED — not a regression, parked (D75/D76, GRAPHICS-BACKLOG.md)
119D134FIXEDFrame-2 boot hang / sweep "NO-FRAMES" flakiness —FIXED (port/src/libultra.c)
120D135FIXEDFirefight crash — bgTestHitOnObj (propobj.c:8446) is an unported N64 GBI parser (M-22, WS6 playtest).FIXED (src/game/propobj.c, #ifdef PORT —…
121D136RESOLVEDStage-unload crash — objFree obj->prop reads float garbage (M-22, WS6 Facility playthrough).ROOT-CAUSED → D139 (it was NOT a layout bug —
122D139FIXEDStage-unload crash root cause + fix (M-23).FIXED (src/game/cleanup_objects.c, #ifdef PORT —…
123D140FIXEDPause-menu crash (M-23 open → M-27 fixed).FIXED (src/game/bondview.h, src/game/bondview2.c; #ifdef PORT).
124D141FIXEDWatch-menu item-model crash (M-27), exposed by D140.FIXED (src/game/gunfire.c, #ifdef PORT).
125D152FIXEDMission-failed / objective-failed → permanent black screen (M-28, user bug report —FIXED (user, 2026-09-26:
126D154CLOSEDbg.c room-geometry ray/hit-test GBI parser port (M-28, WRITTEN / UNVERIFIED / UNCOMMITTED).CLOSED (2026-09-28 bookkeeping:
127D156FIXEDFacility outro-cutscene "hang" —FIXED (user, 2026-09-26:
128D155FIXEDFacility outro-cutscene end → "hang" = unclamped deltaFrames spiral (M-29, user bug report).FIXED (src/game/frametiming.c, #ifdef PORT —…
129D153RESOLVED-level_09 frame ~900–1400 0xc0000005 = D117/D134 load flakiness, NOT a bug (M-28).NOT A BUG — closed. Run anchors on a quiet machine.
130D151FIXEDWatch data all blank —FIXED (src/bondtypes.h, #ifdef PORT —…
131D130RESOLVEDcrash class C2 (Facility -level_34, Runway -level_35):resolved — stage all 6 N64 fields in a local f[6] before writing any.
132D164FIXEDDisclaimer / legal screen only draws the first line (D76 root cause, M-31).FIXED — corrected 2026-09-18:
133D165FIXEDFront-end menu cursor doesn't feel like a mouse pointer (M-31, user bug B5 follow-up).FIXED (port/src/input.c; Input.MenuPointerMode, Input.HipfirePitchSpeed added).
134D166FIXEDHipfire mouse pitch is digital while yaw is analog —FIXED (port/src/input.c).…
135D235CLOSEDWrong textures load after dying/restarting a level —CLOSED (user, 2026-09-26:
136D236CLOSEDSurface 1: 2D billboard trees render as a wall/sheet of tree texture instead of discrete camera-facing tree sprites (M-106, user QA report).CLOSED (M-198, pass 26, 425237f9; probes stripped 0503d335):
137D237FIXEDQoL ask (M-106, user QA):FIXED (2026-09-23): category headers + 5 more settings (SkipIntro, Show FPS, pad invert/deadzone/trigger); wheel scroll already existed.
138D238FIXEDQoL ask (M-106, user QA):FIXED (2026-09-26: covered by D337/D338 aim work; user reports mouse feel good; code-side validation owed).
139D239CLOSEDQoL ask (M-106, user QA):CLOSED — executed in the v0.2.0 prep pass (port-only)…
140D240CLOSEDPlayer gunshot SFX timing/cadence reportedly does not match the N64 original's rate (M-106, user QA report).CLOSED (v0.4.0 campaign sign-off 2026-09-28, user:
141D241CLOSEDPlayer gunshot SFX goes silent under some conditions —CLOSED as the D207 family (v0.4.0 campaign sign-off 2026-09-28, user:
142D242FIXEDPlayer-death sequence UX regression vs N64 original:FIXED/CLOSED (2026-09-26, user:
143D243FIXEDDam end-of-level cutscene (the abseil/bungee sequence, D148/D160's subject):FIXED, live-confirmed by the user (M-189/M-190, 2026-09-18).
144D245FIXEDIsWater water: two competing patterns with a visible seam that moves as the player looks around (mouse/aim) —FIXED (M-201, 2026-09-26, user-verified vs 1964):
145D246FIXEDTiny pixel strips at the left and right edges of the screen, "like overscan" —FIXED (2026-09-18 session, port-only, Video.SafeAreaCrop).
146D247FIXEDBlack bars top and bottom of screen —FIXED (2026-09-18 session, port-only, Video.SafeAreaCrop).
147D248FIXEDPort runs a stable 30 FPS instead of 60 FPS game-wide (M-117, user asked to verify FPS after the D209 timing-keystone fixes).FIXED, root-caused to a genuine pointer-width ABI bug in src/sched.c (compiled for the PC build, not excluded).
148D249CLOSEDLOD/culling breaks down on large open levels (Streets, Egyptian named specifically) at *default* FOV —CLOSED (2026-09-28 bookkeeping:
149D250FIXEDFPS is inconsistent/low on many levels after 60 Hz shipped (M-119, user QA; D248 follow-on).FIXED — per-call getenv() cost was the bottleneck; rock-steady 60-61 fps after, user re-tested 1440p/4K clean.
150D251FIXEDF10 options overlay QoL pass:FIXED (port-only, port/src/optionsoverlay.c).
151D252FIXEDParticle effects cycle through a rainbow palette (M-124, user playtest of the v0.2.0-pre candidate).FIXED (M-201, 2026-09-26, user-verified):
152D253FIXEDFacility (and any level with a FORCECROUCH/LADDER linked special tile) SIGSEGV on Linux/Steam Deck —FIXED — Deck-verified:
153D254FIXEDLinux crash handler destroyed its own logs:FIXED — field-verified.
154D255FIXEDFacility firefight SIGSEGV on Steam Deck (v0.2.0-pre CI bundle; D253 fix confirmed working).FIXED (M-140) — D3x-class 32-bit pointer truncation (vtxstore_fix_refs read Model* through the mistyped ChrRecord.chrflags 4-byte-enum alias instead of ObjectRecord.model), not the destroy-path race…
155D256FIXEDSaves (and config) silently failed to persist on Linux whenever the game was not launched from the directory containing data/ —FIXED (path half) — save-flow detail still owed from the user.
156D257FIXEDNew Game.AllUnlocked option (F10; default flipped OFF for v0.2.0 —FIXED — verified by user playtest (PR #79 merged); default flipped OFF for v0.2.0 (D259).
157D259FIXEDGame.AllUnlocked (D257) breaks audio on a fresh save:FIXED in v0.2.1 —…
158D260FIXEDv0.2.1 (user request):FIXED — build green; one-line branch swap, trivially reviewable.
159D261FIXEDv0.2.1 (user request:FIXED — feel-check received; W/S sensitivity follow-up logged above.
160D262FIXEDv0.2.1 (user report):FIXED (primary cause, D264) —
161D264FIXEDD262's root cause (ABI/layout class, cf.FIXED — build green, probes removed; visual confirmation pending.
162D263RESOLVEDv0.2.1 (user report):RESOLVED (not a bug), refined (v0.2.1 further user testing, 2026-09-15).
163D265CLOSEDD236 investigation (port-layer, port/fast3d/gfx_pc.cpp):CLOSED (2026-09-26 bookkeeping:
164D258DEFERREDPAL/JP asset conversion is broken at the source-data level —DEFERRED (user call 2026-09-28:
165D284FIXEDport/src/random.c's MIPS64 dsll32/dsrl32 shift helpers were backwards —FIXED, 21-level sweep clean, no crashes —
166D285FIXEDSteam Deck SIGSEGV during D255 live-testing = SEPARATE bug:FIXED (user, 2026-09-26:
167D286CLOSEDUser-confirmed real ~8s frame freeze on Caverns, Steam Deck —CLOSED (2026-09-26, user-approved:
168D287FIXEDUser-confirmed real, non-self-recovering freeze on Windows (M-141, 2026-09-15/16) after ~15-20 minutes with no input, triggered by clicking back into the… —FIXED (user playtest 2026-09-26:
169D288CLOSEDSilo intro: a huge, flat-shaded, untextured brown/tan triangle sweeps across the frame during the camera pan down the missile shaft (M-141, user report —… —CLOSED — not reproduced on the current build (2026-09-23 capture) and the 2026-09-25 user Silo playtest confirms it gone ("silo fixed").
170D289FIXEDDam: a crash in the computer room, not reproducible on a second attempt (M-141, Steam Deck user playtest).FIXED (user, 2026-09-26:
171D290FIXEDWatch's in-game "controller" section shows no control-pad graphic (M-141, Steam Deck user playtest).FIXED (2026-09-23): D264-pattern template read in watchRenderController (flags read 0), plus 3 pointer-width/raw-Gfx sites on the same path; controller model verified rendering on Windows.
172D291CLOSEDDam: texture glitches when the truck drives past (M-141, Steam Deck user playtest).CLOSED — duplicate of D306, faithful (M-201, 2026-09-26:
173D292FIXEDDeath animations are glitched —MOSTLY FIXED as a side effect of D243 (2026-09-18, user-confirmed alongside D173) —
174D293FIXEDQoL ask: no discoverable way to quit the game from the UI (M-141, Steam Deck user playtest —FIXED (M-141) — "Quit to desktop" row added to the F10 overlay; build-verified Win+Linux, not yet live-confirmed.…
175D294PARTIALStatue: ground geometry near the large CCCP/hammer-and-sickle monument briefly renders solid black over a wide area, then self-recovers 10-30 seconds later… —PARTIAL -> fix landed pending by-eye check (2026-10-03:
176D295FIXEDCampaign-halting crash at the end of Control Center on 00 Agent difficulty, then a crash on every subsequent relaunch/resume (GitHub #87, user campaign playtes…FIXED (M-149) — M-148 root-caused + reproduced on HEAD; fix landed:
177D296CLOSEDControl Center, 00 Agent:CLOSED (2026-09-26, user-approved:
178D297FIXEDv0.3.0 silently wipes ALL pre-fix player saves on first launch (D284 side effect; found during D295/M-148).FIXED (M-150) — migration shim landed:
179D298CLOSEDFull HUD (not just the aim-mode crosshair) missing in a v0.3.0 dev build —CLOSED (2026-09-26, user:
180D299FIXEDGame.SkipIntro crashed selecting any save slot except one —FIXED — fileValidateSaves() (only called from the skipped legal screen) never ran under SkipIntro, leaving saves[] all-zero; added the missing call to the SkipIntro shortcut (src/game/lv.c, #ifdef PO…
181D300FIXEDHipfire look feels non-uniform (issue #89):FIXED, user-confirmed live —
182D301FIXEDfileGetIsCheatUnlocked() NULL-deref, unguarded on every call site, not just the D299/SkipIntro one (GitHub #87, two reports with an identical crash PC/fault ad…FIXED locally on release/v0.3.0 (not pushed) —
183D302FIXEDRender FPS regression to ~40-45fps on release/v0.3.0 (user QA on the local v0.3.0 pre-release build, 2026-09-18) —FIXED — 4 uncached getenv() calls added by D236 passes 10/12/14/16 directly inside gfx_sp_tri1 (port/fast3d/gfx_pc.cpp, per-triangle) cached with the same static int x = -1 pattern D250 established e…
184D303FIXEDSome muzzle flashes (M16 named specifically, "and some others") draw wrong —FIXED (M-201, 2026-09-26):
185D304FIXEDMouse sensitivity menu overhaul (user request, 2026-09-18):FIXED — see full entry for both the range/parity pass and the same-day follow-up (collapsed to a single Input.MouseSensitivity menu row + fixed overlayUpdateScroll()'s unconditional bottom-anchor, th…
186D305FIXEDSteam Deck SIGSEGV on the v0.3.0 pre-release build (Cavern, early in the level, Game.AllUnlocked previously enabled on the session/save) —FIXED (defensive guard) —
187D306CLOSEDDam intro/truck wheels render with odd transparent-looking areas, possibly z-fighting (user QA, 2026-09-18).CLOSED — faithful, confirmed on 1964 (M-201):
188D307FIXEDIn-level security camera entities can be flipped facing the wrong direction (backwards) on some levels, e.g.FIXED (M-201, 2026-09-26, user-verified):
189D308CLOSEDOccasional z-fighting confirmed on some levels' geometry, general/broader than the D306 truck-wheel instance (user QA, 2026-09-18).CLOSED — faithful (2026-09-26, user:
190D309FIXEDComplete non-self-recovering freeze (Windows) returning from Caverns to the intro screen —FIXED via D310 — user-playtest-confirmed 2026-09-18 (Caverns→intro clean; the spin record itself observed resuming correctly in the post-fix probe log).
191D310FIXEDRULE-2-SIGNOFF: chraiitemsize() mis-sizes 1-byte AI_PRINT records (NUL-scans forward), corrupting AI execution for any list containing an active PRINT —FIXED — user-playtest-confirmed 2026-09-18 (v2:
192D311FIXEDComplete freeze in modelSetAnimFrame2WithChrStuff root-motion loop —FIXED — root cause D336 (bheadAdjustAnimation read never-written placeholder fields); the #ifdef PORT guard is retained as a safety net.
193D312FIXEDThrowable items (mines, grenades, etc.) can clip through walls in certain spots (user report, v0.3.0 pre-release playtest, 2026-09-18).FIXED — bgBuildRoomVtxBounds mis-reads the G_VTX vertex count on PC (Gfx_le.dma.par bit-layout shift):
194D313FIXEDBullet impacts do not appear on some walls/surfaces —FIXED — same root cause as D312, merged diagnosis; same one-line fix.
195D314FIXEDF10 menu items flicker randomly/intermittently (reported on the main-menu context, user report, v0.3.0 playtest build, 2026-09-18).FIXED (user playtest 2026-09-26) —
196D315CLOSEDMenu scaling differs between main menu and in-game —CLOSED (2026-09-26, user:
197D316FIXEDMouse-clicking some menu items glitches and lands on the item below instead (user report, v0.3.0 playtest build, 2026-09-18).FIXED — root-caused to two compounding bugs (naive mouse->logical mapping ignoring the safe-area crop; asymmetric row hit-test band) in port/src/optionsoverlay.c + port/fast3d/gfx_pc.cpp.
198D317CLOSEDCrash when toggling Game.AllUnlocked back and forth in-game (user report, v0.3.0 playtest build, 2026-09-18) —CLOSED — symptom of D316 (confirmed instant window close, no WER report; the D316 hit-band bias let a click on "All unlocked" fall through to the adjacent "Quit to desktop" row).
199D318FIXEDFacility (regular play path):FIXED via D329 (2026-09-26 bookkeeping:
200D319FIXEDFrame cap slider was mostly a dead zone; replaced with a plain 30/60 toggle (user ask, 2026-09-18).FIXED — new ROW_FPSCAP cycle (30/60 only) in port/src/optionsoverlay.c; default changed to 60 in port/src/video.c.
201D320FIXEDD318-class sweep: aim-hold → _update AI lists in 8 levels carry the same as-authored softlock race (static analysis, 2026-09-20).FIXED via D329 (2026-09-26 bookkeeping:
202D321FIXEDD318 trigger chain fully mapped:FIXED via D329 (2026-09-26 bookkeeping:
203D322FIXEDLong-session audio degradation:FIXED (Windows) for the periodic "garbled" bursts —
204D323CLOSEDG_TL_LOD bindings of explicit-LOD textures:CLOSED — parked as a fidelity enhancement, not a bug (2026-09-26, user-approved:
205D324FIXEDGE's <stdlib.h> stub declares nothing, so TUs that include it get NO CRT prototypes —FIXED (2026-09-22) — proven impact:
206D325CLOSEDROM-mod (xdelta) compatibility:CLOSED as a question —
207D326CLOSEDRandom Eye randomizer repacks the ROM too —CLOSED as a question —
208D327RESOLVEDMod support, resolved plan:RESOLVED — superseded by D328; approach (a) is NOT ruled out (these scans missed the 1172-compressed data segment).
209D328CLOSEDMod support is viable and D327's "ruled out" was wrong:CLOSED as a question —
210D329FIXEDThe D318/D320 guard anim pin is a tick-granularity divergence:FIXED — Rule-2 high-FPS fix in model.c; clk=1 no longer pins (WSL + native Windows), 0 triggers at clk=2; bunker1 golden failure predates it (on/off A/B); user playtest confirms N64-matching Ourumov…
211D330FIXED#103 (v0.3.0, Win 11):FIXED (port/src/input.c) —
212D331FIXEDEjected shell casings never rendered on PC:FIXED (gunfire.c #ifdef PORT, explicit template); PP7 casing verified on native Windows (before:
213D332FIXEDReticule jitter in aim mode (RMB) —FIXED (fix/mouse-pd-model) —
214D333FIXED#104 (v0.3.0, Linux):FIXED (2026-09-26 bookkeeping:
215D334FIXEDNative widescreen, world side (WIDESCREEN-FOV-PLAN Option B Phase 2):FIXED (2026-09-26 bookkeeping:
216D335FIXEDNative widescreen, HUD + front end (WIDESCREEN-FOV-PLAN Phase 3):FIXED (2026-09-26 bookkeeping:
217D336FIXEDFrigate (and any level) "all polygons break except the gun" after turning:FIXED (src/game/bondhead.c #ifdef PORT, ABI/layout); headless repro (Runway → exit → Frigate → turn, D294 2× room pool) clean, D156 0 fires; golden 3/3; Win + Linux builds.
218D337FIXEDAim modes folded (user decision):FIXED (2026-09-26 bookkeeping:
219D338FIXEDInput.AimRange (F10 "Aim range"):FIXED (2026-09-26 bookkeeping:
220D339OPEN#92 (low-end ~30 fps, Celeron N3060 / HD 400) —OPEN (2026-09-26, user:
221D341FIXEDIntro gun-barrel blood drip draws as static blocks/lines instead of dripping (user, v0.4.0, 2026-09-26; death blood fine).FIXED (M-201, user-verified 2026-09-27):
222D342FIXEDFile select: folder bodies and Bond photos vanish after selecting a file and backing out (user, v0.4.0, 2026-09-26).FIXED (M-201, user-verified):
223D343FIXEDFile select: PC "Options" label opens the settings overlay (v0.4.0 feature, M1 of the route-B options screen, 2026-09-27); also fixes F10 on file select jumpin…FIXED (M1, closed): one Rule-2 #ifdef PORT draw hook (user sign-off 2026-09-27); headless + user-verified (mouse, F10, >30 s, widescreen, physical controller on the bottom-bar label and options scree…
224D344FIXEDHost PC bugchecks (BSOD 0x119 VIDEO_SCHEDULER_INTERNAL_ERROR) during game test runs; probable cause:FIXED (probable cause; orderly quit + GE_QUITFRAME), headless + user-verified; no dump, watch for recurrence.
225D345FIXEDFront-end crosshair snaps away from the pointer on screen/page changes (file select → mode select setCursorPOSforMode(0), front.c:2516; every MENU_PC_OPTIONS p…Port-only, user-verified (parts a–g):
226D346CLOSEDPC-settings wording pass:CLOSED (2026-09-28). Shipped in v0.4.0; accepted in the user's final review / campaign playtest.
227D347FIXEDF10 overlay controller:FIXED (port-only, optionsoverlay.c):
228D348CLOSEDFile-select "PC Options" label:CLOSED (2026-09-28 bookkeeping:
229D349CLOSEDGE watch settings ARE saved to the Bond file when the watch closes:SUPERSEDED (2026-10-04, P2b correction):
230D350CLOSEDWatch-backed PC options:CLOSED (2026-09-28). Shipped in v0.4.0; accepted in the user's final review / campaign playtest.
231D351FIXEDExisting D346 value/unit rows had positional initializers shifted into hidePtr:FIXED (port-only): designated row initializers restore unit, deadzone divisor and hide-if-auto fields; build clean, headless smoke clean.
232D352FIXEDD350 review of 1303c0eb:FIXED (port-only, port/src/watchsettings.c):
233D353FIXEDTurok-style settings regrouping:FIXED (port-only, optionsoverlay.c/frontoptions.c):
234D354FIXEDFront-end F10 Bond rows silently disabled:FIXED (port-only, port/src/watchsettings.c):
235D355FIXEDF10/options Music slider inaudible in-stage:FIXED (port-only, port/src/watchsettings.c):
236D356FIXEDSettings regroup: Turok-style pages renamed to functional sections (INPUT/GAMEPLAY/GRAPHICS/AUDIO/VIDEO) with PD-style "(File N)" scoping annotations, the redu…FIXED (port-only, port/src/optionsoverlay.{h,c} + port/src/watchsettings.{h,c} + port/src/frontoptions.c; plan docs/dev/D356-SETTINGS-REGROUP-PLAN.md):
237D358FIXEDD356 level-1 overlap:FIXED (port-only, port/src/frontoptions.c):
238D359CLOSEDSettings UI file terminology settled on the end-user term "Profile":CLOSED (2026-09-28). Shipped in v0.4.0; accepted in the user's final review / campaign playtest.
239D360CLOSEDF10 INPUT heading scrolled away; F10 navigation and distance defaults (2026-09-27).CLOSED (2026-09-28). Shipped in v0.4.0; accepted in the user's final review / campaign playtest.
240D361FIXEDMain-menu F10 Audio freezes the game:FIXED (port-only, port/src/watchsettings.c + F10 probe in optionsoverlay.c):
241D362CLOSEDF10 GoldenEye dossier-style visual refresh (2026-09-27).CLOSED (superseded by D363 after user playtest):
242D363FIXEDF10 return to a dark overlay with the N64 watch's green/Bank Gothic visual language (2026-09-27).FIXED (palette/font user-approved, 2026-09-27); D364 follows up on profile tags, click alignment and slider calibration.
243D364FIXEDSettings UI feedback:FIXED (user mostly accepted; D365 follows up on annotation size and click targets).
244D365CLOSEDF10 annotation hierarchy and visible mouse change targets (2026-09-27).CLOSED (2026-09-28). Shipped in v0.4.0; accepted in the user's final review / campaign playtest.
245D366CLOSEDInput calibration label:CLOSED (2026-09-28). Shipped in v0.4.0; accepted in the user's final review / campaign playtest.
246D367CLOSEDF10 full-width control boxes misaligned with their contents (2026-09-27).CLOSED (2026-09-28 bookkeeping:
247D368CLOSEDSimplify F10 click targets:CLOSED (2026-09-28 bookkeeping:
248D369FIXEDRemove F10 row boxes/strips entirely (2026-09-27).FIXED (awaiting live acceptance):
249D370CLOSEDF10 distance/volume drags hurt frame rate (2026-09-27).CLOSED (2026-09-28). Shipped in v0.4.0; accepted in the user's final review / campaign playtest.
250D371FIXEDGEPD key-layout preset + reload/crouch bindings, v0.4.0 modern options wave M3 (2026-09-27).FIXED (headless-verified; awaiting user live accept):
251D372FIXEDLow-end perf preset (v0.4.0 modern options wave M5, 2026-09-27).FIXED (headless-verified; awaiting user live accept):
252D373FIXEDIn-game crosshair on/off + colour (v0.4.0 modern options wave M2, 2026-09-27).FIXED (user live-tested; rule-2 sign-off recorded 2026-09-27):
253D374FIXEDGEPD becomes the default key layout; preset layering fix (v0.4.0 M3 playtest feedback, 2026-09-27).FIXED (headless + user live-tested):
254D375CLOSEDCrouch wired to the wrong pad bit:CLOSED (2026-09-28). Shipped in v0.4.0; accepted in the user's final review / campaign playtest.
255D376CLOSEDCrouch follow-up + modern-options spot check (2026-09-27).CLOSED (2026-09-28). Shipped in v0.4.0; accepted in the user's final review / campaign playtest.
256D377FIXEDGEPD independent crouch (2026-09-27).FIXED (2026-09-28 bookkeeping:
257D378FIXEDGEPD use/reload separation (2026-09-27).FIXED (2026-09-28 bookkeeping:
258D379FIXEDCrosshair colour: authored texture is red (2026-09-27).FIXED (2026-09-28 bookkeeping:
259D380FIXEDOne PC keyboard layout; PD-style rebind design (2026-09-27).FIXED (follow-up D383):
260D381CLOSEDRULE-2-SIGNOFF: opt-in RGB, size and Beta crosshair (2026-09-27).CLOSED (2026-09-28). Shipped in v0.4.0; accepted in the user's final review / campaign playtest.
261D382CLOSEDCrosshair menu placement and slider hitches (2026-09-27).CLOSED (2026-09-28). Shipped in v0.4.0; accepted in the user's final review / campaign playtest.
262D383CLOSEDPD-style keyboard rebinding in both options UIs (2026-09-27).CLOSED (2026-09-28 bookkeeping:
263D384CLOSEDFront PC Options key-bind navigation feedback + two-slot UI (2026-09-27).CLOSED (2026-09-28). Shipped in v0.4.0; accepted in the user's final review / campaign playtest.
264D385CLOSEDReal mouse 1–5 action rebinding in the two-slot editor (2026-09-27).CLOSED (2026-09-28). Shipped in v0.4.0; accepted in the user's final review / campaign playtest.
265D386CLOSEDCorrect Aim default from SDL middle (Mouse 2) to right (Mouse 3) (2026-09-27).CLOSED (2026-09-28). Shipped in v0.4.0; accepted in the user's final review / campaign playtest.
266D387FIXEDM7 AllUnlocked's read-time fake unlocks leak into saved EEPROM (2026-09-27).FIXED 2026-09-30 (port-only per-slot raw/seen merge on EEPROM write, libultra.c geD387MergeSlotWrite; isolated ON-vs-OFF byte-identity matrix passed).
267D388CLOSEDNest functional binding/HUD menus and remove redundant M5 toggle (2026-09-27).CLOSED (2026-09-28). Shipped in v0.4.0; accepted in the user's final review / campaign playtest.
268D389CLOSEDF10 footer clipping and ambiguous submenu links (2026-09-27).CLOSED (2026-09-28). Shipped in v0.4.0; accepted in the user's final review / campaign playtest.
269D390CLOSEDF10 pinned Back selection did not visibly change (2026-09-27).CLOSED (2026-09-28). Shipped in v0.4.0; accepted in the user's final review / campaign playtest.
270D391CLOSEDF10 click at glyph bottom could select next row (2026-09-27).CLOSED (2026-09-28). Shipped in v0.4.0; accepted in the user's final review / campaign playtest.
271D392FIXEDTrain intro soldier hunched; hand intersects torso vs 1964 —FIXED (#ifdef PORT ABI/layout in chraction.c); Train aim-angle probe confirms correction; user visually verified the soldier looks fixed against 1964.
272D393FIXEDController B/Y both crouch; no in-game use button —FIXED + user live-tested A use / X reload / Y weapon cycle.
273D394PARTIALXbox 1.1 Jinx controller parity —PARTIAL (2026-09-28).
274D395RESOLVEDController trapped in keyboard/mouse-only binding capture —RESOLVED (v0.4.0 campaign sign-off 2026-09-28, user:
275D396RESOLVEDF10 pad B/A used as slider decrement/increment, not back/select —RESOLVED (v0.4.0 campaign sign-off 2026-09-28, user:
276D397RESOLVEDSELECT FILE background + intro gun-barrel show an interlaced/comb look —RESOLVED (2026-09-28):
277D398CLOSEDPC Options label: D348's procedural slider glyph replaced with an existing mainfolderimages texture (2026-09-27).SUPERSEDED by D400 (icon removed, text-only label; purple-hover bug moot; the D400 textMeasure arg-swap bug was found and fixed there).
278D399CLOSEDFile-select bottom row (SELECT FILE text + Copy/Erase + PC Options dot/label) shifted 15px left as a block (user sign-off 2026-09-27).CLOSED (2026-09-28 bookkeeping:
279D400CLOSEDFile-select "PC Options" label:CLOSED (2026-09-28 bookkeeping:
280D401CLOSEDRumble Pak → real gamepad haptics (re-promotes D224/M-87):CLOSED (2026-09-28). Rumble shipped in v0.4.0 (D401); Steam Deck real-pad validation:
281D402RESOLVEDFirst clean Linux (glibc / SteamOS) build of release/v0.4.0 broke in two port-layer include-resolution spots MinGW tolerated (bondconstants.h first-include cyc…RESOLVED (Linux/Ubuntu-24.04 build → glibc-2.41-compatible binary for the Steam Deck):
282D403RESOLVEDDeck v0.4.0-pre test:RESOLVED (2026-09-27, user-confirmed on the Deck:
283D404RESOLVED"Aim style: Centred (PC)" (Input.AimMode=1, D333/D337) has no effect when aiming with a gamepad; the row's own doc comment over-promises ("applies to every aim…RESOLVED (2026-09-28, port-layer only):
284D405CLOSEDfast3d/OpenGL: MSAA above the driver max black-screens; two glBindFramebuffer calls pass an index where a GL name is required (PR #106, italoarruda, 2026-09-25…CLOSED (2026-09-28). Merged from PR #106 (code file only; security-reviewed clean - port-layer GL state fixes, no external input, no allocations).
285D406RESOLVEDfront-end PC Options screen:RESOLVED (2026-09-28, port-layer only, Steam Deck-validated):
286D541PARTIALOne A press advanced two menu screens on the Steam Deck (Desktop Mode) —PARTIAL 2026-10-05 (mitigation landed, port-only:
287D542OPENStray polygons left of Bond's gun, frequent on foggy levels (Streets, Surface 2) —OPEN 2026-10-05 (triage:
288D543FIXEDSurface 2: lit area following Bond brighter than 1964 —FIXED 2026-10-06 (CPU RSP-style near clip in gfx_sp_tri1 + per-vertex fog default; build-verified, by-eye vs 1964 at next playtest)
289D544FIXEDOS cursor flickers with F10 open on the main menu —FIXED 2026-10-05 (port-only, input.c; build-verified, maintainer mouse check owed)
290D545FIXEDPlayer rockets can pass through the ground when fired near Bond's feet —FIXED 2026-10-06 (AVOID_UB array, gun.c; maintainer Archives preset A/B:
291D546FIXEDPC settings standardization:FIXED 2026-10-05 (port-only; build + maintainer check owed; golden re-base batched with D543)
292D547FIXEDGame.AllUnlocked applies live (no restart) —FIXED 2026-10-05 (port-only, main.c/optionsoverlay.c; build-verified, maintainer mission-select check owed)
293D548FIXEDWalls near rocket fire/explosions banded black/white/yellow/blue (Aztec dark corridor; also seen on Deck) —FIXED 2026-10-06 (gfx_opengl.cpp input clamp; root fix = D543 CPU near clip; maintainer Aztec re-check owed)
294D549FIXEDThrown grenade/knife/object:FIXED 2026-10-06 (AVOID_UB coord3d, gun.c x3; build-verified)
295D550FIXEDStatic title bar (no more per-second "NN fps" refresh) + project mark as favicon / window / taskbar icon —FIXED 2026-10-17 (port + tooling only, video.c/gfx_sdl2.cpp/make_icon.py; ninja-command-verified + full build 249/249; maintainer live window/taskbar check owed)
296D551?Opt-in update check (Game.CheckUpdates, default off):ADDED 2026-10-06 (port layer only; live-verified Windows/Linux/Deck + F10 UI capture; security review fixes applied)
297D552FIXEDDam ending cutscene: the first camera shot no longer swivels up onto Bond —FIXED 2026-10-06 (port-only addition removed; code path back to the decomp; maintainer-verified live)
298D553FIXEDSurface 2: the haze around Bond brightened/darkened as he moved —FIXED 2026-10-06 (fast3d:
299D554OPENF10 settings menu: wording/casing pass + two-line tips —DONE 2026-10-06 (port/src/optionsoverlay.c; maintainer by-eye check owed)
300D555OPENCrosshair mouse pointer over the F10 / PC Options overlay —DONE 2026-10-06 (port/src/input.c, optionsoverlay.c, tools_pc/make_icon.py; maintainer by-eye check owed)
301D556OPENF10 feedback pass (tips trimmed, conditional-row order, wording fixes) + mouse scrollbar —DONE 2026-10-06 (port/src/optionsoverlay.c; build only, by-eye check owed)
302D557FIXEDNew/blank profiles start with Look ahead OFF on PC (Rule-2 sign-off, maintainer 2026-10-06) —FIXED 2026-10-06 (src/game/file2.h DEFAULT_OPTIONS under #ifdef PORT; existing saves untouched; win gate 21/21)
303D558FIXEDF10 overlay tips cut off in a level (not on the front end) —FIXED 2026-10-06 (optionsoverlay.c textRenderWide; verified by in-level capture)
304D559FIXEDLook ahead off for untouched existing folders (maintainer-approved, port layer only) —FIXED 2026-10-06 (watchsettings.c migrateUntouchedLookAhead)
305D560FIXEDF10 copy pass 3 (maintainer line review) —FIXED 2026-10-06 (optionsoverlay.c tips/labels/value names; display text only)
306D561FIXEDF10: "Menu pointer" row removed (front-end-only legacy option; confused players) —FIXED 2026-10-06 (row/tip/names removed; Input.MenuPointerMode ini key, Direct default and the legacy code path kept for one release)
307D562FIXEDF10 crosshair pointer hidden while a pad/keyboard drives the menu —FIXED 2026-10-06 (drawCrosshairPointer draws only while s_mouseActive)
308D563FIXEDF10 root hub: Left/Right no longer open pages; held nav inputs latched on open/page change —FIXED 2026-10-06
309D564FIXEDF10: game's own "Look up/down" row removed (dead for mouse and centred pad, stacked with Invert look); value pinned to factory; tip polish —FIXED 2026-10-06 (port only; Mouse / Controller "Invert look" are the inversion controls)
310D565FIXEDAI awareness followed two player render settings:FIXED 2026-10-06 (maintainer decision:
311D566FIXEDSteam Deck Game Mode showed the on-screen keyboard at every launch (SDL text input left on) —FIXED 2026-10-06 (port only:
312D567FIXEDFront-end PC Options with a pad pulled the game's crosshair to the top-left (overlay synced the cursor to the untouched OS mouse) —FIXED 2026-10-06 (port only:
313D568FIXEDF10 dropdown popup drawn empty and misplaced for a long list on a mid-page row (negative top) —FIXED 2026-10-06 (port only:
314D569?Crosshair color follows the PD port:CHANGED 2026-10-06 (maintainer request; old presets migrate to Custom RGB)
315D407CLOSEDTanks cannot be boarded/exited on PC —CLOSED (2026-09-28 bookkeeping:
316D408FIXEDGame.SkipIntro skips the post-mission failure dossier:FIXED 2026-09-30 (SkipIntro hook gated to first boot; live dossier check owed).
317D415FIXEDShooting a light fixture does not "kill" its flickering light (Bunker, Caverns):FIXED (2026-09-29 bookkeeping:
318D416RESOLVED2-player split-screen crashes (issue #99, v0.3.0 4827bc8, fault addr 0xa43a0ed4, PC 0x14009e758):RESOLVED in-harness (converter + D417 + D418 fix the 2P crash and split-screen flicker; 18/18 2P/3P/4P x 6-stage load runs clean; live pad play still owed).
319D417RESOLVEDenum PROP unsigned on GCC:RESOLVED (src/bondconstants.h PROP__PORT_SIGNED = -1, D3/D142 precedent; Rule-2 review done 2026-10-06:
320D418RESOLVEDSplit-screen: fast3d safe-area crop stretched the last-set (half-height) viewport over the whole window, so each player's view filled the screen and the last-d…RESOLVED (gfx_set_split_screen, port-only).
321D419RESOLVEDSplit-screen input shared between players / P1 lost solo controls:RESOLVED (per-slot slotPlayer(), port-only; no current-player swaps from the poll thread; live-tested OK).
322D420FIXEDMP score / stats screen shows an odd big number (issue #99) —FIXED 2026-10-01 (mp/virtual-seats); 2P/3P/4P watch-menu runs show 0s.
323D421CLOSEDGadget cycling (pad B / gadget key) disabled in 2+ player matches —CLOSED 2026-10-01: moot, no MP inventory holds a gadget (mp_weapon.c); hook reviewed + reverted.
324D422FIXEDP2+ have no centred-aim mode in split-screen (single-slot aim state) —FIXED in tree (commit ac92e0ab:
325D423CLOSEDUnidentified black arrowhead in P2's split-screen view (stage 38) —CLOSED 2026-10-01: faithful (level shadow at a doorway top), maintainer-confirmed live.
326D424FIXEDWeaponStats.RecoilSpeed/b44[] byte order:FIXED in tree (WS_B44, port-guarded); user-verified vs GEPD/1964 2026-09-29.
327D425FIXEDTank run-over death sound loops:FIXED (2026-09-29 bookkeeping:
328D426RESOLVEDTank cannot be steered with the mouse out of aim mode (issue #116).RESOLVED (user 2026-09-29:
329D427FIXEDAutomatic fire cadence is frame-counted, ~2-3x faster than N64 at 60 fps (issue #114).FIXED in tree (modulus scaled by ticks/frame; measured 6 ticks/shot at 30 and 60 cap); user-verified vs GEPD/1964 2026-09-29 (AK47 mag empties in ~3 s, Klobb normal).
330D428FIXEDNo gun turn-sway with direct mouse look (issue #117).FIXED in tree (2nd pass:
331D429CLOSEDTank full pass: aim-mode (RMB) mouse behaviour and tank sticking forward/back (follow-up to D426).CLOSED faithful (user 2026-09-29:
332D430FIXEDShot light fixtures do not go dark:FIXED in tree (D154-style words.w0/.w1 decode); user-verified vs GEPD/1964 on Caverns 2026-09-29.
333D431FIXEDLight fixtures never reached lightFixtureBreak on PC:FIXED in tree (fixture table records the image id; bg.c hit code looks it up; free-slot guard); user-verified vs GEPD/1964 2026-09-29.
334D432FIXEDGunshot sounds "off" after D427:FIXED in tree (gate offset rounded to odd at 1 tick/frame); measured shot/sound cadence identical to N64 rules; residual audible difference vs 1964 tracked as D433.
335D433OPENSlight audible difference in automatic-gun shot sound vs GEPD/1964 after cadence was matched (user by-ear, Caverns).OPEN (not a timing issue; audio layer suspected).
336D434FIXEDRaw ((u8*)&g_Textures[n])[0] & 0xf hit-type reads are wrong on PC; latent OOB once D431 returned real texture ids (found by sub-agent review).FIXED (.hitTexture at 3 sites, port-guarded); live check owed.
337D440FIXED"Original N64" / "Port defaults" one-press presets in the F10 overlay and front-end PC Options (+ -n64preset/-portpreset).FIXED (port-only; headless-verified; user live accept owed).
338D441PARTIAL64-bit pointer-width sweep (part 1):PARTIAL (census + GE_HIGHARENA_BASE tier-1 build + 35 sites fixed + CI ratchet, 2026-10-03; tier-1 all-level sweep 21/21 PASS, 0 crashes, 2026-10-05; the above-4-GiB tier still owed).
339D442FIXEDGame.AllUnlocked reworked into a pure RAM/query-time override:FIXED; verified 2026-10-03 headless (mission select all 20 / only real progress when OFF, full cheat menu, eep byte-identical).
340D443FIXEDD357 settings-display cleanup (mouse ×, whole-% deadzone and volume steps, FOV in horizontal degrees, MSAA 16×) plus a "Restart game" action (orderly D344 quit…FIXED (port-only; reset probes pass; both-UI visual check and one Restart click owed; Linux relaunch path not compiled).
341D454FIXEDKnife slash crashed on Windows:FIXED (verified by maintainer live:
342D461FIXEDItem-slot allocation overran into the next stage-bank block:FIXED (maintainer-verified:
343D462FIXEDvtxstore.c sized its two record tables with the N64 stride 0x14 for a 24-byte struct unk_09B7A0_struct_parent on PC (Vertex* unk00 widened); both are indexed a…FIXED (build + solo -level_09 and 4P GE_STARTMP=4 smoke runs exit clean; no crash; by-eye owed in solo).
344D444FIXEDFront-end PC Options:FIXED (build-verified; human mouse test owed)
345D455FIXEDBinary-first census of exe-static addresses truncated to 32 bits (D454 class) (2026-09-30).FIXED/CLEAN (no further REAL site beyond D454)
346D447FIXEDPillarbox output mode (Video.AspectMode = Original) for the Original N64 preset; crop overscan no longer cancels Wide/Cinema.FIXED (build + 3 captures verified; Wide/Cinema, 16:9 Ratio, mouse and 1964 comparison owed to a human)
347D445FIXEDCrouched-rifle firing animation (crouched_rifle_firing_animation_groupA) never resolved on PC -> SIGSEGV in modelConstrainOrWrapAnimFrame when an MP player cro…FIXED — layout only (§D5 linker adjacency, D164 class):
348D446FIXEDCouch 2P watch-menu text (the MP pause page) differs by +-1-2 per channel between builds whose only difference is data layout (2026-09-29).FIXED — port-only (fast3d):
349D448PARTIALSplit-screen pad seats:PARTIAL (committed 918ac5f9 on feat/mp-splitscreen-99, build + 2P smoke OK; plug/unplug behaviour not exercised at runtime).
350D456?Font-pointer / text-string-pointer slots retyped from s32 to real pointers (ABI/layout exception; front.c, options.c, language.c, bondview*, mpmenu.c, propobj.…
351D457?64-bit ABI retypes part 2:
352D453?memp allocator API made 64-bit clean (D441 step 0; ABI/layout exception, §A1).2026-09-30
353D451FIXEDAutomatic-fire gate at unsteady frame rates (D427 follow-up) and D173 residual.FIXED (RULE-2-SIGNOFF, maintainer 2026-09-30:
354D463FIXEDfast3d divided by zero (0xc0000094) importing a texture for a zero-area TextureRectangle on a tile with line = 0:FIXED (port-layer guard in import_texture; 8 repeats of the crashing config + the 18-run sweep + solo -level_09 + menu boot all rc=0 with no crash; the guard fired in 3 of 8 repeats).
355D464PARTIALGE_MEMPREDZONE=1: 64-byte red-zone checker for the memp bump allocator (all banks), side table + checks at level unload / every 60 frames / orderly quit; re-in…TOOL LANDED (local, feat/memp-redzone); MP sweep owed.
356D465FIXED#127 Dam/Caverns/Complex water slid side to side:FIXED 2026-10-01 (fix/d465-water-primlod, local); rate measured = N64; maintainer by-eye on Dam:
357D466FIXED#125 Xenia's boss fight on Jungle triggers early:FIXED 2026-10-01 (fix/d466-drawdist-gameplay, local); RULE-2-SIGNOFF (port-feature leak fix; design-review approval); verified headless (room sets, on-screen counts), player-facing shot/autoaim/use/p…
358D467CLOSED#130 Golden Gun empty click with each shot:CLOSED: faithful by code + log (audited 2026-10-01; by-ear check of held-trigger behaviour vs 1964 is maintainer-owned)
359D468FIXEDAI view clamp: under ultrawide (> 16:9) or Video.FovScale > 100 the AI's on-screen tests used the wider rendered frustum; they now keep the cartridge-widest vi…FIXED 2026-10-01 (feat/d468-ai-view-clamp, local); RULE-2-SIGNOFF (policy approved by the maintainer 2026-10-01); verified headless (clamp on/off switching + falsifier).
360D469FIXEDGamepad presets + per-seat controller rebinding (ROADMAP 5a; supersedes outside PR #109):FIXED 2026-10-01 (merged into release/v0.4.1, local); preset 0 == old mapping proven (20,971,520 cases); live pad test owed (maintainer); Jinx 1.2/1.3 undefined (gap)
361D470FIXEDAudio master volume + output-device selection (ROADMAP 5a):FIXED (live listening test owed)
362D471FIXEDController-family button names (no glyphs) in the PC menus + player-index LEDs:FIXED 2026-10-01 (local); headless captures for Xbox/PS/Nintendo; live PS/Nintendo pad check owed
363D472FIXEDF10 overlay polish: multi-pad ownership (audit G1-G3), widescreen pillarbox (D335b), red EXPERIMENTAL rows, unknown-ini-key warning.FIXED 2026-10-01 (merged; port-only, no src/game).
364D473FIXEDUncached getenv("GE_D75V") on every G_VTX:FIXED 2026-10-01 (local); Statue display-list CPU about -55% in steady windows
365D474FIXEDfast3d micro-optimisations:FIXED 2026-10-01 (local); output-identical by construction; measured gain on the dev machine within noise
366D475OPENStatue/Cradle hitches diagnosed:OPEN (diagnosed 2026-10-01):
367D476FIXEDCI4 textures keyed on their own 16-entry palette bank instead of the whole 256-entry table (D217 hash):FIXED 2026-10-02 (local); Statue sweep CI4 cache misses 189 -> 36
368D477?CI8 palette re-imports measured and ruled out as a CPU-side hitch cause:MEASURED 2026-10-02 (local); premise of the D475/D476 follow-up refuted on the dev box; GPU/driver-side cost unmeasured
369D478FIXEDD441 read-side census re-run (319 warnings, 129 outside the chr.c D34 initialisers) triaged against the current tree:FIXED 2026-10-02 (local; snprintf bound); census triage recorded, Stage B items listed
370D479FIXEDSplit-screen GE_STARTMP harness hid the ammo counter:FIXED 2026-10-02 (local); harness-only, 2P frame shows the counter in both halves
371D480FIXEDShader pre-warm: every created shader pair (shader_id0, shader_id1) is remembered in $S/ge007.shaders and compiled at the first frame of the next session, so a…FIXED 2026-10-02 (local, perf/shader-prewarm); output-identical (menu frame exact), 0 in-play compiles on the warm run
372D481FIXEDLow-end ~45/30 fps (#92):FIXED 2026-10-02 (local, perf/render-worker); X220 (HD 3000) 44-46 -> 60.0 fps, GE_RENDERINLINE=1 falsifier restores 45.9
373D482FIXEDLighter first-launch defaults on Atom/Celeron-class GPUs (#92 follow-up):FIXED 2026-10-02 (local, perf/lowend-defaults); X220 forced-path:
374D483FIXED#136: the PC crouch key stood Bond up when he switched to the sniper rifle; the N64 keeps the stance (the weapon's DISABLE_CROUCH flag blocks both crouch-down…FIXED 2026-10-02 (local, fix/d483-sniper); scripted crouch -> switch -> release keeps SQUAT
375D484FIXED#136: portScaleFovY's 20-degree floor raised the game's own zoom FOVs, capping sniper/camera magnification at 20 degrees instead of the N64's 7 (about a third…FIXED 2026-10-02 (local, fix/d483-sniper, maintainer-approved 2026-10-02); full zoom renders at 7 degrees, normal views pixel-identical
376D485FIXED#136: sniper/camera zoom stepped once per game frame with no tick scaling, so at the port's 1 tick/frame it zoomed 2x faster in real time than the N64 at 2 tic…FIXED 2026-10-02 (local, fix/d483-sniper); 15 -> 7 takes 16 frames at 60 fps (was 8) = the N64 at 30 fps
377D486FIXED#126: explosions dropped in heavy firefights (turrets on Cradle/Egypt/Aztec):FIXED (a)(c)(d); drops + (b) faithful, closed.
378D487FIXEDPAL: the in-level ammo counter was not drawn (only a small dot where the "7 / 93" counter should be) —FIXED; maintainer PAL play check 2026-10-02:
379D488FIXEDPAL build reported the Brazilian MPAL TV type instead of PAL (osTvType) —FIXED
380D489FIXEDFPS dropped sharply while adjusting F10 watch sliders (music/FX) with a pad or arrow keys:FIXED 2026-10-02 (port-only UI layer, fix/d489-pad-slider-commit, merged into release/v0.4.1 2026-10-03); maintainer pad check passed 2026-10-03
381D490FIXEDDam first-tower guard walked a small circle:FIXED 2026-10-02 (fix/d490-glass-hull, merged into release/v0.4.1 2026-10-03); maintainer by-eye Dam check passed 2026-10-02
382D491FIXEDStruct reads across separately-declared adjacent globals (the D5/D215 class), found by the D24 overflow audit:FIXED 2026-10-03 (fix/d491-adjacent-global-reads, local); builds clean, 900-frame -level_09 smoke clean; no by-eye effect expected beyond room-membership-driven behaviour
383D492CLOSEDEmulator .eep saves are not drop-in compatible:CLOSED (converter shipped 2026-10-04:
384D493FIXEDPad rumble kept going after quitting the game:FIXED 2026-10-03, maintainer-verified in play (DualSense; Original-mode edges incl.
385D494FIXEDSniper rifle: the PC crouch key now crouches/stands freely with a disable-crouch weapon (GEPD parity), never injecting C-down for it; supersedes D483's stance…FIXED 2026-10-03, maintainer-verified in play
386D495FIXEDTank: with the default pad preset X changed the tank weapon and Y left it, because in-tank faces fell back to the fixed menu faces; PadMapCtx.tank routes Next/…FIXED 2026-10-03, maintainer-verified in play
387D496FIXED3P/4P split-screen: weapon-pickup messages garbled and oversized —FIXED 2026-10-03 (condensed 3+P text is faithful, maintainer-confirmed)
388D497FIXEDPC Options paging now matches the game's dossiers:FIXED 2026-10-03, maintainer-verified in play
389D498FIXEDXbox 1.2 Christmas / 1.3 Frost / 1.4 Elektra gamepad presets:FIXED 2026-10-03, maintainer-verified with a pad
390D499FIXEDTrilinear texture filter option:FIXED 2026-10-03, maintainer-checked (no visible difference; kept)
391D500FIXEDAztec shuttle area: polygons "fell apart"; the per-frame vtx pool (dyn.c, no bounds check, Aztec -mvtx40) could overrun into the half the render worker draws;…FIXED 2026-10-03, maintainer-verified at the Aztec spot
392D501CLOSEDUltrawide 16:9 pillarbox for cutscenes and the watch:CLOSED (reverted 31ade91f)
393D502FIXEDPC Options pad navigation:FIXED 2026-10-03, maintainer-verified with a pad
394D503PARTIALSurface: near-full-fog silhouettes on 32-bit output (fog snap applied); the remaining Surface dish is the widescreen frustum, 4:3 matches N64 —FIX LANDED (by-eye pass owed)
395D504FIXEDF10 / PC Options menu:FIXED (port-only; by-eye pass vs the PD port owed)
396D505FIXEDMenu wording pass: 27 maintainer-approved text edits across both PC options UIs —FIXED (port-only; by-eye pass owed)
397D506FIXEDMenu slider values standardized:FIXED (port-only; by-eye pass owed)
398D507FIXEDMenu: one-line description of the focused option in both PC options UIs —FIXED (by-eye pass owed)
399D508FIXEDForced aspect ratios:FIXED (by-eye pass owed)
400D509FIXEDHeld frames after an aspect-ratio change:FIXED (by-eye pass owed)
401D510FIXEDF10 overlay + FPS counter the same on-screen size on the front end and in a level —FIXED (live check owed)
402D511OPENFour PD-parity settings:DONE headless (live checks owed)
403D512OPENGame.HudScale also scales the F10 overlay and FPS counter —DONE headless (live check owed)
404D513OPENInput.ControlScheme: Modern / OG controls (#139, T7) —DONE headless (pad pass owed)
405D514OPENEmulator saves load directly:DONE headless (by-eye mission select owed)
406D515FIXEDEmpty arch tag from a fresh build dir:FIXED (headless-verified)
407D516FIXEDControl style Original shows the game's own N64 styles (1.1-2.4, per seat, saved to the Bond file) instead of the D498 presets —FIXED (live pass 2026-10-04 incl.
408D517FIXEDHolding left/right on a Bond settings row dropped the fps:FIXED (live pass 2026-10-04)
409D518FIXEDPad layout preset was one global value:FIXED (live pass 2026-10-04 incl.
410D519FIXEDOne PC options UI: the file-select "PC Options" entry opens the F10 overlay; the MENU_PC_OPTIONS screen is deleted —FIXED (headless-verified 2026-10-04; by-eye pass owed)
411D520FIXEDF10 overlay slider wedge, slider marker and dropdown arrow antialiased (they stepped in whole canvas pixels that grow with the window) —FIXED (headless before/after capture; by-eye owed)
412D521PARTIALA fixed-frame golden window that overlaps the intro flyby is platform-nondeterministic (cross-platform goldens); verify.sh's linux pixel-gate skip is driver-co…PARTIAL (rule recorded 2026-10-04; the two residual bands CLOSED 2026-10-05 by D525's box re-round —
413D522FIXEDThe golden window's frame-900 stem is not settled gameplay on several levels —FIXED 2026-10-05 (recipe-side re-base:
414D523CLOSEDThe golden recipe does not pin save state:SUPERSEDED by D529 (2026-10-05) —
415D524FIXEDThe golden tooling was destructive and drift-prone:FIXED 2026-10-05 (both pins idempotent —
416D525FIXEDThe whole <level>/linux/ golden set was stale, not just on the six re-based levels —FIXED 2026-10-05 (21-level box re-round, 63 frames, save pinned present; structural parity 21/21, Archives/Streets bands attributed to save state, not a renderer)
417D526CLOSEDP13 Dam-ending grate / edge-railing transparency is faithful N64 behaviour (port == 1964/GEPD); the per-triangle census probe is retained as a generic draw-sta…CLOSED — faithful, confirmed on 1964/GEPD (2026-10-05):
418D527OPENGE_PCDUMP written first:last (a colon where the dash belongs) silently dumps EVERY frame —OPEN (harness documentation; a log-or-fail-closed fix is owed in the port layer)
419D528OPENGE_STARTMENU skips the EEPROM read, so front-end-only sessions never import the emulator save —OPEN (harness documentation; the D514 imported-save test must run from a normal boot; a log-or-import fix is owed in the port layer)
420D529FIXEDThe golden gate depends on the save file's CONTENT —FIXED 2026-10-05 (canonical save in-tree at tools_pc/golden/ge007.eep; verify.sh installs it like the ini pin; all 21 win sets re-captured under it —
421D530?The box (X220) linux golden re-round landed —AMENDED BY D531 (2026-10-05) —
422D531FIXEDcapture_p7.sh's D529 adaptation was incomplete —FIXED 2026-10-05 (loop re-pins the canonical save per level + cd "$ROOT"; fresh 21/21 box re-capture committed —
423D532FIXEDThe three P12 U5 should-fixes applied —FIXED 2026-10-05 (tooling-only:
424D533FIXEDThe probe-doc drift that would have failed CI, plus three tracked-file accuracy/hygiene fixes (release-sweep spot-check) —FIXED 2026-10-05 (GE-ENV-PROBES.md missing the GE_D526 family → gen_env_probes.py --check rc 1 = a CI-failing step; build-pc.sh local MSYS2 root in two messages; docs/fidelity.md og line; release-not…
425D534FIXEDPre-release review of the 2026-10-05 local batch —FIXED 2026-10-05 (verify.sh/capture_p7.sh INT/TERM trap; release-notes linux-gate wording; dead security-and-fidelity-status.md links; future-dated 2026-10-07 labels normalised; D526 probe dangling-e…
426D540FIXEDFog rework (Deck playtest):FIXED 2026-10-05 (port:
427D450FIXEDUnplugging and replugging a controller was not picked up (user, GameSir-G7 Pro; 2026-09-29).FIXED — port-only: the render thread's gfx_sdl_handle_events drains the same SDL queue as video.c's host pump but had no case for SDL_CONTROLLERDEVICEADDED/REMOVED, so it usually swallowed them and i…
428D436FIXEDPersistent (hipfire) crosshair, opt-in:FIXED (shipped 2026-09-29; rule-2 sign-off: