Files
goldeneye-pc-port/docs/dev/GRAPHICS-BACKLOG.md
T
James Dansereau ef10985343 docs: sidecar build step + D176/D182 Surface/file-select bug reports (M-35)
- building.md: document the d43_emit.py / d69_emit.py sidecar generation
  as an explicit required step (4), split Run to step 5. A plain clone
  needs no ROM to build but the sidecars are required to run (D179).

- GRAPHICS-BACKLOG.md: expand D176 (Surface exterior: black sky +
  comb-interlaced tree-line, screenshots) and add D182 (SELECT FILE
  background degrades after navigate-away-and-back: Bond image stops
  drawing + comb interlacing). Both observed this session, not fixed.
  D176(b) and D182(2) interlacing share the D159 texSwapAltRowBytes
  family recurring on texture re-import.

- docs/img/bugs/: d176 our-build vs reference, d182 backout capture.

Claude-Session: https://claude.ai/code/session_01GULf6knbsqfsnW39tMr9WT
2026-09-02 09:54:25 -04:00

12 KiB
Raw Blame History

GRAPHICS-BACKLOG — known cosmetic / rendering issues

Deferred below level-progression and crash work (user priority, M-11). Minor graphical glitches are acceptable in the current state. Fix these once the game is playable start-to-finish without crashes.

Open

ID Symptom Status / notes
D114/D116 HUD text + ammo digits render each glyph individually X-mirrored CLOSED — NOT A BUG (M-33, §F D168). The GE_PCDUMP PPM writer never reversed glReadPixels rows, so every capture was upside-down; "mirrored" was a misread of inverted asymmetric content. The game renders correctly on hardware (developer-confirmed). Writer fixed (gfx_opengl.cpp). "Every stage verified non-mirrored" was correct — there was no mirror.
D74 wrap-block gfx_pc.cpp:1546/1551 PORT block is dead code: guard cms & G_TX_WRAP with G_TX_WRAP==0 is always false; and it indexes per-texunit [2] arrays with the vertex index i (0..2) → OOB if reached. Latent. Harmless for CLAMP glyphs; could affect wrapped textures on triangles (room panels, model skins). Fix: cms == G_TX_WRAP, and compute the tile window once per tile not per vertex. Verify against tools_pc/golden/ after.
D75 Nintendo logo mispositioned; gun-barrel Bond model absent; cast-roll character models — status unknown. (Rareware logo OK.) Shrunk (M-33, upright captures after D168). The "overlaps D114 shared mirror" note is withdrawn. Gun-barrel Bond RENDERS correctly (walk + fire, upright) — the "absent" reports were the flipped capture. Nintendo logo IS still broken — renders as two overlapping white ellipsoids shifted left, no wordmark/geometry (a real logoinst model transform/geometry bug, not a flip). Cast roll not re-captured — recheck with GE_PCDUMP="1400-2200:25". findings.md §F "D75 Bug 2 — M-33 UPDATE".
D76 2D disclaimer screen only partially drawn. §F D76.
D77 No audible music on PC. Phase 3 (audio). §F D77.
D116 (HUD) proportional-font strings + ammo counter mirrored CLOSED — NOT A BUG (M-33, §F D168). Same capture-orientation artifact as D114.
D148 Level-end cinematics don't play. Dam: hitting the exit trigger should show Bond rappelling down the dam (the bungee jump); instead it cuts straight to the mission-complete report. Scripted cutscene / cinematic-camera + Bond rappel anim. Found M-27 during the first full Dam→Facility playthrough. Progression is unaffected — the report and next briefing load fine. M-31 (§F D160): static-traced the Dam end ailists (ai_24→ai_17, camera_switch→CutsceneRecord type-46 lookup). Diagnostic GE_D160=1 shipped (c95713f5) — user runs Dam to the exit with it set; the trace pins whether the cutscene AI runs, and whether the propDef-index walk (D122/D132 family) hands camera_switch a bogus cutscene record. Leading hypothesis: propDef sizepropdef stride desync (medium confidence), not D75 anim-model.
D149 Front-end MISSION COMPLETE / mode-select 3D models (dossier, wallets) render as garbled full-screen geometry or not at all — one of the compiled sub-DLs (seg5+0x9ee4) is malformed, D146 now skips it instead of aborting. D75 family. §F D146.
D170 Named-NPC "flee" scripted behaviour looks wrong on PC: on Silo, Ourumov breaks into a full run the instant he alerts ("Ourumov: Kill him!") rather than the N64 walk/retreat; developer reports Trevelyan behaves the same way on Cradle. Observed, not investigated (M-34, from a Silo playtest capture; user bug report — no fix wanted yet). Could be a genuine ailist / chrTick divergence, OR the D155/D156 wall-clock deltaFrames locomotion-anim speed-up (a catch-up spike playing the walk cycle at 2–3×). Verify first: capture the same beat against N64 reference footage before assuming it diverges — Ourumov may be scripted to flee. If it's real, suspect the frametiming clamp (§F D155/D156) or the Cradle-family AI path (§F D123).
D171 Silo missile-shaft: a large translucent grey triangle sweeps across the lower frame while panning down the shaft (~3 s of the capture). Looks like a stray poly / near-plane clip fan, same family as D106 (portal near-plane min>max). Observed, not investigated (M-34, Silo capture). Cosmetic, intermittent, tied to camera angle in the open vertical shaft.
D172 Bullet-impact / blood particle spray renders magenta or cyan instead of dark red (visible on guards hit at close range on Silo). Observed, not investigated (M-34, Silo capture). A channel-order / CC-mode error in the particle-sprite path (magenta = R+B, cyan = G+B) — not the D64/D120 blood-decal family (those are crash/hang + missing decals, not colour). Likely a texture-format or env-colour decode in blood_animation.c / the fast3d sprite path.
D178 Objectives not listed correctly on the pre-mission briefing screen (the mission overview shown before starting a level). Observed, not investigated (user QA report). "Not correctly" unspecified — wrong set of objectives, wrong order, or garbled/blank lines. Close relatives: D151 (watch objective text blank — type-35/23 text slot u16→u32 fix, M-28; interactive re-verify was still pending), D143 (briefing/objective text blank via langGet NULL), D157 (objective difficulty byte offset — could make difficulty-gated objectives appear/disappear wrongly). The pre-start briefing is a different surface from the in-level watch, so D151's fix may not cover it. Next: ask user which level + what exactly shows vs expected; compare against docs/dev/LEVEL-OBJECTIVES.md (regenerated post-D157); if lines are blank → D143/D151 family (langGet NULL guard = silent blank), if wrong objectives listed → propDef type-23 record walk / difficulty decode.
D175 In-game stutter / brief hang during normal play — observed opening a door on Runway (mission 3, -level_35) and also on Surface. No backtrace captured (gdb attach missed the window; it self-recovered). Observed, not investigated (user QA report). Matches known transient-hang classes rather than looking new: D155 (post-slow-load catch-up spiral — clamped), D156 (anim NaN loop — guarded, prints one-shot stderr diag if it fires), D134 (SP/DP task-done event swallowed — fixed M-22, Runway was an original victim), D147/D152 (audio s_imLock steal = ~2 s hiccup). Door-open specifically = new room first visible → one-off texture-import/frame spike (likely benign). Next: reproduce under tools_pc/debug.ps1 with the box idle; check console for the D156 stderr diag; if it recurs, attach gdb mid-hang and pattern-match bt (import_texture = benign slow frame; model.c:3131 spin = D156; pthread_mutex_lock on s_imLock = D147/D152).
D176 Surface exterior renders wrong (two co-located defects). (a) Sky is solid black — the skybox / sky gradient does not draw at all (reference: warm sunset cloud gradient). (b) The perimeter tree-line backdrop renders as grey TV-static / comb interlacing instead of snow-laden pines — the geometry is present and roughly the right silhouette but every tree texture is scrambled noise. Ground, tunnel and the dish/bunker building draw fine. Observed, screenshots committed (M-35, user QA; docs/img/bugs/d176-surface-exterior-our-build.png vs -reference.png). Level is the shared Surface exterior — user reached it Dam→Surface on Agent so this is Surface (i) -level_36 (confirm it also affects -level_43). (a) black sky: sky DL not emitting / wrong transform (D75 logoinst family) or sky tiles failing import — GE_PCDUMP + GE_DTEX on the sky pass. (b) tree static: the comb/interlace pattern is the D159 family (texSwapAltRowBytes odd-row byte-swap for the RDP TMEM XOR fast3d doesn't emulate) — D159 added an #ifdef PORT skip but these tree textures (likely a specific CI/IA format or non-PoT size) still hit a swap/decode path. Same visual as D182 below. Compare GE_TEXDUMP of one tree tile against the ROM texture.
D174 "No blood effect" — user reports no visible blood when shooting guards / into surfaces. User QA report; likely D120, unverified. Decals: the D120 PointUsage[] converter fix (M-30) was never interactively verified and only takes effect after a full sidecar regen (d43 && d69 && d88 --regen) — check whether the playtest build had regenerated sidecars before concluding the fix failed. Spray: D172 observed the particle spray drawing (wrong colour, magenta/cyan) on Silo — if the user sees no spray either, that's new info (different weapon/range, or the D172 decode is worse than "wrong colour"). First step: BUNKER1 firefight with regenerated sidecars; if decals still absent, instrument the chr.c:3328 decal walk.
D173 Third-person Bond model (the player-representing figure shown at level start) spawns too high — floats well above the ground "a lot of the time" while the actual player spawn is correct. Same symptom on the Cuba end credits: JB stands ~6 ft in the air above Natalya. Observed, not investigated (user QA report). D75 animated-model family but a position defect, not absence — M-33 confirmed the gun-barrel Bond renders fine upright. Suspects: (a) intro/credits puppet chr spawn position vs the model's base transform; (b) anim root-motion accumulation (modelSetAnimFrame2WithChrStuff, D156 area) offsetting the rendered joints above the body origin; (c) a coord3d/packed-float decode in the intro camera/model setup. "Player spawning is OK" localises it to the render-side model, not g_CurrentPlayer state.
D182 SELECT FILE screen degrades after navigating away and back (main menu → file select, or backing out of file select and re-entering). On the fresh screen the 007 gun-barrel spiral / Bond silhouette renders behind the file boxes; after a round-trip the Bond image stops drawing entirely and the whole background gains the comb / interlacing artifact (horizontal line scramble). File boxes, text and the Copy/Erase icons still draw. Observed, screenshot committed (M-35, user QA; docs/img/bugs/d182-file-select-backout-20260902.png). Two symptoms, likely linked: (1) background 3D image stops rendering after re-entry → a front-end model/DL whose render_pos / segment binding is only valid on first construction (D149 / D75 constructor_menuXX family — the dossier/wallet models have the same "renders once" behaviour). (2) interlacing = D159 family (texSwapAltRowBytes odd-row byte-swap) reappearing on the spiral texture once it's re-imported on the second visit — suggests the D159 #ifdef PORT skip is keyed on something that only holds on the first import (e.g. a cached tile-format flag), or a different texture takes the swap path on re-load. Repro: GE_STARTMENU to file-select, back out with ESC/B, re-enter; GE_DTEX on the spiral texture across both visits. Shares defect (2) with D176(b).
1P weapon viewmodel In-level first-person weapon models don't draw at all (no gun visible while playing). Already documented — AUDIT-M6 #5 (docs/dev/AUDIT-M6-player-offsets.md, "prime suspect") + §F D115 "still open (MED)"; M-8 handoff listed it NOT STARTED with a plan: instrument gunfire.c:600-661 setup + field_87F gating first, then check weaponModel.render_pos arena lifetime and weaponRwPool[192] sizing. Note M-32b's "render_pos/dynAllocate RULED OUT" probe was the front-end gun-barrel path (title.c), not this in-level path — candidate #5 still stands. Distinct from the watch-page "dark/faint weapon model" (D75, D141 note).

Resolved (for reference)

  • D70–D74: intro-logo pixels (Rareware logo renders correctly).
  • D103: viewport / native-resolution half-frame.
  • D105: room geometry Z-buffer never cleared (G_CLEAR_DEPTH_EXT).
  • D106: sky-void through doorways (portal near-plane min>max).
  • D107: blurry ceilings/wall-panels (LOD mip tile fabrication).
  • D112: skeletal models were "3D lines" (d43_emit.py put_f32 byte order).