forked from Ports/goldeneye-pc-port
sndHandleEvent's pool-exhaustion preempt-scan read/walked the shared D_800243E4 active-ALSoundState list with no osSetIntMask lock, while sndSetupSound (the list's insert path, reached from sndPlaySfx calls across 15 game files) already locks it -- an asymmetric-locking gap, the same D4/D147/D152 "N64 interrupts-off isn't a real lock on PC" class. Wraps the scan in the identical lock/unlock pair sndSetupSound already uses, unconditionally (no #ifdef PORT, matching that function's own style -- osSetIntMask is genuine N64 API and the port's shim is a process-wide recursive lock, safe to nest). Audited the rest of the function: the scan is the only D_800243E4 touch point in it. Build green; -level_09/-level_20 unregressed (1400+ frames, no crash, no D152 lock-stuck warnings). Not yet gdb/live-confirmed against a real reproduced crash -- a GE_INPUTSCRIPT-driven stress attempt this session didn't visibly activate the scripted-input harness for a reason not root-caused; the honest bar met here is "correct by D4/D152 precedent, build/sweep-clean," not "reproduced-then-fixed." Claude-Session: https://claude.ai/code/session_01KwZViAFaXua3PKgHHjNgvi
23 KiB
23 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. | |||
| 3 | label | bucket | one_liner | status_raw |
| 4 | D24-D30 | RESOLVED | green threads / kernel / crash handler | resolved |
| 5 | D31-D42 | RESOLVED | boot ABI: ANIM_DATA, music seq-table, libaudio banks, Globalimagetable rebase, GL context, rsp toggle | resolved |
| 6 | D43-D50 | RESOLVED | model-file loading → offline sidecar "Plan B" (d43_emit.py); D50.6 texCopyGdls full-slot copy | resolved |
| 7 | D51-D58 | RESOLVED | font pixeldata, osGetCount tick rate, model RW pools, cseq BE header, synth slots, RLE menu bg, watch raw offsets, gun-barrel DL | resolved |
| 8 | D59-D68 | RESOLVED | intro render: blood-RLE clobber, DMA validate, OSMesgQueue, HEADS/BODIES sentinels, romCopy width, image_entry, Globalimagetable BE→LE | resolved |
| 9 | D70-D74 | RESOLVED | intro-logo pixels: C-array bswap, UV path, sinf/cosf DVAL(), texture-import truncation | resolved |
| 10 | D75 | OPEN | front-end 3D model transforms (D77 audio split out below — | OPEN (parked). M-32 triage (see §F "D75 ADDENDUM"): |
| 11 | D76 · D164 | PROPOSED | disclaimer/legal screen only draws line 1 — | fix proposed (not applied — |
| 12 | D159 | FIXED | front-end wallet-Bond photo "interlaced"/combed (RC1 / D149) — | FIXED (#ifdef PORT no-op the swap in image.c) |
| 13 | D161 | FIXED | Depot (-level_30) ceiling = bright-blue speckle + radial rays (B2). | FIXED (port/fast3d/gfx_pc.cpp) |
| 14 | D165 · D166 | FIXED | input-layer polish (M-31, port-only, port/src/input.c): | FIXED |
| 15 | D180 · D181 | PARTIAL | native-PC input pass (QoL run, qol/native-pc-input-menu): | LANDED, config-gated, feel-checks owed |
| 16 | D186 | PARTIAL | Video.FpsCap throttles the sim, not just presentation (M-39 diag, M-42 clamp). | CLAMP LANDED (port/fast3d/gfx_sdl2.cpp, port/src/video.c); real fix owed |
| 17 | D187 | FIXED | HUD 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 |
| 18 | D188 | FIXED | Linux -O2 boot crash: | FIXED (src/libultrare/libc/xprintf.c, src/sprintf.c, #ifdef PORT); PR #22 |
| 19 | D189 | FIXED | Linux -fstack-protector aborts on the decomp's latent stack-buffer overruns (M-48) — | FIXED (CMakeLists.txt, src/game/stan.c #ifdef PORT); PR #23 |
| 20 | D190 | ? | Linux -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). |
| 21 | D191 | FIXED | Windows -O2 release-bundle crash: | FIXED + PLAYTEST-VERIFIED (M-79). |
| 22 | D193 | FIXED | NPC AI locomotion is too slow — | FIXED + user-playtest-verified (M-81) — |
| 23 | D194 | PARTIAL | Mouse input needs another tuning pass — | PARTIAL — M-120 human playtest: |
| 24 | D195 | FIXED | Transparency / alpha surfaces broken on Control (M-49, user playtest) — | FIXED (port/fast3d/gfx_pc.cpp, gfx_sp_vertex) — |
| 25 | D197 | ? | Character face/head textures wrap around the head, seen on Silo (M-49, user playtest). | CLOSED — user playtest v0.2.0-pre |
| 26 | D198 | FIXED | alAdpcmPull/_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) — |
| 27 | D199 | PARTIAL | Phase-3 software audio mixer: | LANDED (port/src/mixer.c, port/include/mixer.h, include/PR/abi.h) — |
| 28 | D200 | FIXED | -level_09 segfault: reverb's ALDelay.input/output are u32 — | FIXED — 5-line cast in reverb.c (this session) |
| 29 | D196 | FIXED | OS mouse cursor stays visible after closing the F10 options overlay in click-to-lock mode (M-49, user playtest). | FIXED (6e758f1d, merged to main) — |
| 30 | D192 | ? | Front-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 |
| 31 | D221 | FIXED | SELECT FILE screen: the mouse hit-box for a file slot is vertically offset from its visible box — | FIXED (M-91) — root cause was NOT a coordinate/origin mismatch: |
| 32 | D222 | FIXED | High Video.FovScale breaks culling — | FIXED, awaiting visual verification (M-121). |
| 33 | D223 | FIXED | QoL ask: mouse-wheel weapon cycling should be directional like a normal PC shooter — | FIXED (M-105, port/src/input.c) — |
| 34 | D224 | FIXED | QoL gap (M-87, from a PD-PC-port survey): | DEPRIORITIZED (M-87, user call). |
| 35 | D225 | OPEN | Dev-tooling QoL (M-87, user ask): | OPEN — root-caused, not implemented. |
| 36 | D226 | OPEN | QoL ask: player-adjustable HUD scale for the ammo counter, bottom-left pickup/item status text, and top-of-screen dialogue/subtitle text. | OPEN — root cause / call sites identified, not designed or implemented. |
| 37 | D227 | FIXED | Sky renders as two independently-moving halves — | FIXED (M-100b, PR #43) — |
| 38 | D229 | FIXED | Water on IsWater levels renders green and pulses blue<->green on an interval (M-101, user playtest, Frigate -level_26; Surface 2 also an IsWater level). | FIXED (port-layer) — root cause: |
| 39 | D230 | OPEN | In-level music quality: | OPEN — static-analysis pass done (M-108), not runtime-confirmed. |
| 40 | D233 | FIXED | All levels (intermittent): | FIXED (port/fast3d/gfx_pc.cpp, gfx_sp_tri1) — |
| 41 | D234 | FIXED | Dam: guard towers along the dam structure invisible except the first one (M-106, user QA report). | VISUALLY VERIFIED FIXED (M-108) — |
| 42 | D244 | OPEN | Self-hosted CI runner (corpyvt6agent01) link failure: | OPEN, not yet fixed. Next: |
| 43 | D228 | FIXED | AK47 (and other) weapon models still show WHITE missing-texture patches after D217's texpool-alignment fix — | FIXED (port/fast3d/gfx_pc.cpp, palette_to_rgba32) — |
| 44 | D204 | FIXED | PC audio ran ~2 % below real time permanently: | FIXED (port/src/audio.c, port/src/libultra.c, port/include/audio.h) — |
| 45 | D203 | ? | Steam Deck (SteamOS, x86_64 Linux) v0.1.0 release bundle: | CLOSED — root cause + fix in D253. |
| 46 | D201 | FIXED | src/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) — |
| 47 | D202 | RESOLVED | Silenced PPK plays a "slap" instead of a gunshot, PLUS user reports broader real-time audio corruption (M-52 → M-59 → REOPENED M-60 → M-61/M-62 closed the data… | ROOT CAUSE ESTABLISHED (M-66); DISPOSITION C IMPLEMENTED + MEASURED (M-66b) — |
| 48 | D206 | FIXED | PC played every SFX one bank slot too high — | FIXED (M-76, src/snd.c:1001, #ifdef PORT → soundArray[soundIndex - 1], N64 line verbatim under #else). |
| 49 | D207 | PROPOSED | Alarm klaxon starves combat SFX and (per user) doesn't recover after it stops — | MONITORING (M-77c: user reports the alarm is acceptable in play after D206; no fix shipped) — |
| 50 | D208 | FIXED | Player weapon-fire sound goes permanently silent mid-firefight (all other SFX unaffected) — | FIXED + user playtest-verified (M-78d) — |
| 51 | D209 | FIXED | Every AI character in the game is locked to a *walk* animation regardless of the speed the ailist commands — | FIXED + user-playtest-verified (M-81). |
| 52 | D210 | FIXED | chrToPatrol() leaves act_patrol.lastvisible60 uninitialised on PC — | FIXED (chraction.c:3872, #ifdef PORT → self->act_patrol.lastvisible60 = -1;, N64 line under #else). |
| 53 | D205 | RESOLVED | PC plays wrong/extra SFX for gameplay events the user can A/B against N64: | CLOSED (M-78) — root cause was D206; all four symptoms resolved + user-confirmed by ear vs N64. |
| 54 | D152+ | FIXED | D152 addendum (M-31): | FIXED (src/snd.c, port/src/libultra.c, #ifdef PORT) — |
| 55 | D168 | FIXED | GE_PCDUMP / F12 PPM captures were vertically flipped — | FIXED (port/fast3d/gfx_opengl.cpp); D114 / D116 reclassified as capture-orientation artifacts (below). |
| 56 | D169 | FIXED | Front-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). |
| 57 | D178 | FIXED | Pre-mission briefing screen: | FIXED (M-36) — high confidence |
| 58 | D175 | OPEN | In-game stutter / brief hang during normal play (user QA report): | OPEN — observed, not investigated |
| 59 | D176 | FIXED | Surface exterior renders wrong (-level_36), two independent defects. | (a) "scrolls too fast/tiles too visibly" ROOT-CAUSED + FIXED (see "D176(a) — |
| 60 | D177 | FIXED | Ladders non-functional — | FIXED (M-36) — high confidence; interactive climb test owed |
| 61 | D172 | FIXED | Bullet-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): |
| 62 | D174 | OPEN | "No blood effect" (user QA report). | OPEN — observed; first step = BUNKER1 firefight with regenerated sidecars |
| 63 | D183 | OPEN | M-36 Family A ("texture line/pitch shear") is DISPROVEN for the Surface repro (-level_36). | Hypothesis DISPROVEN + diagnostics shipped; D176(b)/D182(2) still OPEN |
| 64 | D173 | OPEN | Third-person Bond model spawns too high (user QA report): | OPEN — observed, not investigated. |
| 65 | D179 | FIXED | Packaged build crashes after the logos — | Diagnosed, not fixed — |
| 66 | D180 | PARTIAL | Native-PC input pass (M-XX QoL run, qol/native-pc-input-menu, port-only). | LANDED, port-only, no #ifdef PORT. |
| 67 | D181 | ? | Game.ScreenShakeIntensity — | Menu row pulled (v0.2.1, user testing). |
| 68 | D184 | PARTIAL | F10 port-layer options overlay — | LANDED, port-only, no #ifdef PORT in src/. |
| 69 | D211 | PARTIAL | PC FOV slider — Video.FovScale (M-83 QoL wave, port-only, WIDESCREEN-FOV-PLAN.md Phase 4). | PARTIAL — M-84 refix: |
| 70 | D212 | PARTIAL | Anisotropic-filtering config wiring — | LANDED, port-only. Build clean. |
| 71 | D213 | PARTIAL | On-screen FPS readout — | LANDED, port-only. Build clean; bunker1 no-op confirmed. |
| 72 | D214 | PARTIAL | Keyboard rebinding — [Input.Bind] config section (M-83, port-only, PD parity, Phase 4 debt). | PARTIAL — M-84: code PASS (alt/ctrl); one doc-only fix. |
| 73 | D215 | FIXED | 1P weapon viewmodel never drew in-level — | FIXED (src/game/gunfire.c, #ifdef PORT). |
| 74 | D216 | PARTIAL | Game.SkipIntro — boot straight to the file-select menu (M-83, port + one #ifdef PORT game-code line, PD parity, Phase 4 quick win). | LANDED + VERIFIED this session. |
| 75 | D217 | FIXED | 1P weapon viewmodel + third-person Bond model textures render garbled — | FIXED (M-90/M-92/M-97; PR #47 texpool alignment + PR #49 CI-cache palette key) — |
| 76 | D218 | FIXED | Wide FOV exposes the per-level draw-distance / fog boundary — | Logged (M-84), fix proposed + parked. |
| 77 | D219 | RESOLVED | PPK explosions render purple on Dam (M-87, user QA, "not 3D but noting"). | RESOLVED (M-115, 2026-09-12) — |
| 78 | D220 | PARTIAL | 1P muzzle flash position shifts upward at higher Video.FovScale (M-87, user QA, Jungle/M16). | ANALYZED (M-91) — the suspected unscaled-viewmodel root does NOT hold; this is correct perspective behavior, likely cosmetic/QoL. |
| 79 | D85 | OPEN | room primary/secondary DL → texLoadFromGdl garbage | OPEN (safety-netted; widen/pool fixes landed, geometry now renders) |
| 80 | D86 · D87 | RESOLVED | modelInitRwData truncated ptr · attract-demo BE ramromfilestructure | resolved |
| 81 | D88.4 | RESOLVED | propDefs polymorphic record stream not byteswapped → setupDoor crash | resolved (d88_propdefs.py); layout audit M-20 → D132 |
| 82 | D132 | PROPOSED | D88 propDefs layout audit (M-20): | proposed fix (not applied) — |
| 83 | D157 | FIXED | Campaign never unlocks the next level (M-30, user bug — | FIXED (src/bondtypes.h, #ifdef PORT — |
| 84 | D160 | PARTIAL | Dam level-end cutscene (Bond off the dam / bungee) never plays — | DIAGNOSTIC SHIPPED, not root-caused (c95713f5, #ifdef PORT + GE_D160=1): |
| 85 | D89-D92 | RESOLVED | stage-load→frame: stan zero-fill overrun, portal address trunc, chr/AI spawn ptrs | resolved |
| 86 | D93-D102 | RESOLVED | struct-pun / hardcoded-size pass: | resolved (D95 pool bump partial) |
| 87 | D103-D107 | RESOLVED | BUNKER1 viewport height, depth-buffer clear (G_CLEAR_DEPTH_EXT), portal near-plane, LOD mip tile | resolved |
| 88 | D108-D112 | RESOLVED | skeletal models: d43_emit.py put_f32 byte-reversal bug | resolved |
| 89 | D113-D116 | FIXED | portal BFS ok · matrix chain ok · player raw-offset audit + gunfire.c THROW* · HUD text X-mirror | D114/D116 CLOSED — NOT A BUG (M-33, see D168): |
| 90 | D117 | OPEN | frame nondeterminism root-caused; GE_DETERM deferred; framediff.py structural. | OPEN (mode attempted, not achieved) |
| 91 | D118 | RESOLVED | SDL input layer (port/src/input.c); M-24 mouse-look rework: | resolved (D118a residual) |
| 92 | D150 | FIXED | watch OBJECTIVES / BRIEF page crash: | FIXED (src/str.c #ifdef PORT); interactive re-verify pending |
| 93 | D260-D265 | PARTIAL | v0.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… | partial — see rows |
| 94 | D266-D269 | OPEN | D236/D265 wall, second pass: | OPEN — probes live in tree (GE_D266/GE_D266W/GE_D267/GE_D268_FORCEA), fixes uncommitted |
| 95 | D270 | ? | Backfilled (M-132) — this label was never given its own row; only code comments and the HANDOFF archive documented it. | dead-ended into D271/D272; infrastructure kept in tree |
| 96 | D271 | FIXED | D236 wall, third pass — | FIXED-but-insufficient (src/game/bg.c #ifdef PORT, uncommitted) — |
| 97 | D276 | OPEN | D236 wall, eighth pass — | REFRAMED — oml=0xc81049d8/fmt=3 is the primary suspect now, not D269's CI8 pair; 0x0c184b50 unattributed; wall still open, see D236 |
| 98 | D279 | ? | Backfilled — this label was consumed by an undocumented partial session (2026-09-14 ~23:00) that left artifacts in scratch/ (d279_run.log, d279_imgmap_run.log,… | undocumented — artifacts only |
| 99 | D281 | OPEN | Game.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, 2026-0… | OPEN — user-reported regression, not root-caused; mitigation is user-facing guidance only (release notes: |
| 100 | D282 | FIXED | QoL ask (v0.2.1 user testing, 2026-09-15): | FIXED (port/src/input.c, #ifdef not needed — |
| 101 | D283 | OPEN | Steam 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 in Des… | OPEN — mechanism understood, root cause (Desktop-vs-Game-Mode STEAMOS env var difference) unverified on real hardware; user-facing workaround documented in README/release notes. |
| 102 | D280 | ? | D236 wall, ninth pass — | REFRAMED again — no fix; next steps in detail section, see D236 |
| 103 | D275 | ? | D236 wall, eighth pass — | done — probes live, uncommitted; see D276 for what they found |
| 104 | D274 | OPEN | D236 wall, seventh pass — | d267_slot_addr fix live (always-on); content/decode question CLOSED; mip-presence CLOSED; wall still open, see D236/D276 |
| 105 | D273 | OPEN | D236 wall, fifth pass — | RULED OUT (port/fast3d/gfx_pc.cpp palette_to_rgba32, pre-existing/uncommitted GE_D273) — |
| 106 | D272 | OPEN | D236 wall, fourth pass — | OPEN — probe GE_D272 added to port/fast3d/gfx_pc.cpp (env-gated, uncommitted); wall still open, see D236 |
| 107 | D137 | FIXED | right-mouse (aim-sight) crash: | FIXED (src/game/gunfire.c #ifdef PORT — |
| 108 | D119 · D120 | FIXED | guard-attack weapons_held[]->chr pun crash · blood-stain PointUsage[] chain hang | D119 fixed · D120 FIXED (M-30) |
| 109 | D120 | FIXED | Blood-decal PointUsage[] chain — | FIXED (tools_pc/d43_emit.py). |
| 110 | D121 | RESOLVED | WS1 frictionless per-level boot: | resolved |
| 111 | D122 | FIXED | per-level prop/item model-load crash (Dam/Facility/Runway modelLoad/modelInitRwData): | converter fixed; residual chr/fast3d crashes on those levels are separate |
| 112 | D123 | FIXED | crash 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) |
| 113 | D125 | RESOLVED | crash 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). |
| 114 | D126 | RESOLVED | crash 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. |
| 115 | D124 | FIXED | crash class C2: fast3d bad texture pointer. | Jungle fixed (port/src/gimgfixup.c); Facility → D130 |
| 116 | D131 | RESOLVED | crash 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). |
| 117 | D133 | RESOLVED | intro render triage (M-20): | RESOLVED — not a regression, parked (D75/D76, GRAPHICS-BACKLOG.md) |
| 118 | D134 | FIXED | Frame-2 boot hang / sweep "NO-FRAMES" flakiness — | FIXED (port/src/libultra.c) |
| 119 | D135 | FIXED | Firefight crash — bgTestHitOnObj (propobj.c:8446) is an unported N64 GBI parser (M-22, WS6 playtest). | FIXED (src/game/propobj.c, #ifdef PORT — |
| 120 | D136 | RESOLVED | Stage-unload crash — objFree obj->prop reads float garbage (M-22, WS6 Facility playthrough). | ROOT-CAUSED → D139 (it was NOT a layout bug — |
| 121 | D139 | FIXED | Stage-unload crash root cause + fix (M-23). | FIXED (src/game/cleanup_objects.c, #ifdef PORT — |
| 122 | D140 | FIXED | Pause-menu crash (M-23 open → M-27 fixed). | FIXED (src/game/bondview.h, src/game/bondview2.c; #ifdef PORT). |
| 123 | D141 | FIXED | Watch-menu item-model crash (M-27), exposed by D140. | FIXED (src/game/gunfire.c, #ifdef PORT). |
| 124 | D152 | OPEN | Mission-failed / objective-failed → permanent black screen (M-28, user bug report — | MITIGATED (port/src/libultra.c, M-28, #ifdef PORT/port-only). |
| 125 | D154 | FIXED | bg.c room-geometry ray/hit-test GBI parser port (M-28, WRITTEN / UNVERIFIED / UNCOMMITTED). | M-30 re-audit + fixes (still playtest-gated for final verify). |
| 126 | D156 | PARTIAL | Facility outro-cutscene "hang" — | GUARDED (src/game/model.c, #ifdef PORT): |
| 127 | D155 | FIXED | Facility outro-cutscene end → "hang" = unclamped deltaFrames spiral (M-29, user bug report). | FIXED (src/game/frametiming.c, #ifdef PORT — |
| 128 | D153 | RESOLVED | -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. |
| 129 | D151 | FIXED | Watch data all blank — | FIXED (src/bondtypes.h, #ifdef PORT — |
| 130 | D130 | RESOLVED | crash class C2 (Facility -level_34, Runway -level_35): | resolved — stage all 6 N64 fields in a local f[6] before writing any. |
| 131 | D164 | PROPOSED | Disclaimer / legal screen only draws the first line (D76 root cause, M-31). | FIX PROPOSED, NOT APPLIED (front.c is owned by another agent this session). |
| 132 | D165 | FIXED | Front-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). |
| 133 | D166 | FIXED | Hipfire mouse pitch is digital while yaw is analog — | FIXED (port/src/input.c). |
| 134 | D235 | OPEN | Wrong textures load after dying/restarting a level — | OPEN — needs: does it repro on a *fresh* level boot (rules out reload-state) vs only after death/restart (confirms it); which surfaces; a screenshot. |
| 135 | D236 | OPEN | Surface 1: 2D billboard trees render as a wall/sheet of tree texture instead of discrete camera-facing tree sprites (M-106, user QA report). | OPEN — ninth pass closed with no fix; see D276/D280 |
| 136 | D237 | OPEN | QoL ask (M-106, user QA): | OPEN — not designed; port-only |
| 137 | D238 | OPEN | QoL ask (M-106, user QA): | OPEN — not designed; port-only (port/src/input.c + config.c) |
| 138 | D239 | ? | QoL ask (M-106, user QA): | CLOSED — executed in the v0.2.0 prep pass (port-only): |
| 139 | D240 | OPEN | Player gunshot SFX timing/cadence reportedly does not match the N64 original's rate (M-106, user QA report). | OPEN — not root-caused; static call-site tracing only, no runtime verification possible in this environment. |
| 140 | D241 | OPEN | Player gunshot SFX goes silent under some conditions — | OPEN — not newly root-caused; high confidence this is D207 reproduced, not an independent bug. |
| 141 | D242 | ? | Player-death sequence UX regression vs N64 original: | NOT A PORT-LOGIC BUG as far as static analysis can tell. |
| 142 | D243 | OPEN | Dam end-of-level cutscene (the abseil/bungee sequence, D148/D160's subject): | OPEN — M-109 re-analysis of the same session's raw logs corrects the timing/pattern claims above; the D134/pendingGfx race hypothesis is likely wrong. |
| 143 | D245 | OPEN | IsWater water: two competing patterns with a visible seam that moves as the player looks around (mouse/aim) — | OPEN — REOPENED (M-116 live playtest, same session): |
| 144 | D246 | OPEN | Tiny pixel strips at the left and right edges of the screen, "like overscan" — | OPEN — one candidate ruled out (M-116 follow-up), root cause not found. |
| 145 | D247 | RESOLVED | Black bars top and bottom of screen — | NOT A BUG — confirmed faithful, unmodified N64 decomp behaviour, no code change made. |
| 146 | D248 | FIXED | Port 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). |
| 147 | D249 | OPEN | LOD/culling breaks down on large open levels (Streets, Egyptian named specifically) at *default* FOV — | OPEN — not investigated. |
| 148 | D250 | ? | FPS is inconsistent/low on many levels since the port started actually running at 60fps — | |
| 149 | D251 | FIXED | F10 options overlay QoL pass: | FIXED (port-only, port/src/optionsoverlay.c). |
| 150 | D252 | ? | Particle effects cycle through a rainbow palette (M-124, user playtest of the v0.2.0-pre candidate). | |
| 151 | D253 | FIXED | Facility (and any level with a FORCECROUCH/LADDER linked special tile) SIGSEGV on Linux/Steam Deck — | FIXED — Deck-verified: |
| 152 | D254 | FIXED | Linux crash handler destroyed its own logs: | FIXED — field-verified. |
| 153 | D255 | ? | Facility firefight SIGSEGV on Steam Deck (v0.2.0-pre CI bundle, D253 fix confirmed working — | |
| 154 | D256 | FIXED | Saves (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. |
| 155 | D257 | FIXED | New 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). |
| 156 | D259 | FIXED | Game.AllUnlocked (D257) breaks audio on a fresh save: | FIXED in v0.2.1 — the deferred fix was applied: |
| 157 | D260 | FIXED | v0.2.1 (user request): | FIXED — build green; one-line branch swap, trivially reviewable. |
| 158 | D261 | FIXED | v0.2.1 (user request: | FIXED — feel-check received; W/S sensitivity follow-up logged above. |
| 159 | D262 | FIXED | v0.2.1 (user report): | FIXED (primary cause, D264) — |
| 160 | D264 | FIXED | D262's root cause (ABI/layout class, cf. | FIXED — build green, probes removed; visual confirmation pending. |
| 161 | D263 | RESOLVED | v0.2.1 (user report): | RESOLVED (not a bug), but refined (v0.2.1 further user testing, 2026-09-15) — |
| 162 | D265 | ? | D236 investigation (port-layer, port/fast3d/gfx_pc.cpp): | PARKED — reverted to baseline; evidence + suspect list above. |
| 163 | D258 | OPEN | PAL/JP asset conversion is broken at the source-data level — | OPEN — repair path verified, not applied (out of v0.2.0 scope). |
| 164 | D284 | FIXED | port/src/random.c's MIPS64 dsll32/dsrl32 shift helpers were backwards (modelled as 32-bit shifts, not "shift by n+32 on the full 64-bit register"), desyncing t… | FIXED, 21-level sweep clean, no crashes — |
| 165 | D285 | FIXED | A real Steam Deck SIGSEGV caught during D255 live-testing (v0.2.1 published binary, symbolized on-device via addr2line against its own debug symbols) is a SEPA… | FIXED (M-141, src/snd.c) — |
| 166 | D286 | OPEN | User-confirmed real (not system-side) ~8s frame freeze on Caverns, Steam Deck, caught during the same live session as D255/D285 — | OPEN — one confirmed occurrence, no repro trigger identified, not root-caused; distinct from D255/D285. |