mirror of
https://github.com/jkdansereau/goldeneye-pc-port.git
synced 2026-10-24 00:02:45 +02:00
D335: wrap end credits; fix D335a gun-barrel bar leak (full-canvas scissor under the pillarbox)
Verified at 16:9: -level_54 ending subtitles/cast roll keep their shape; gun-barrel backdrop now clips at the 4:3 edge. Emitted only for windows wider than 4:3. Win + Linux builds clean.
This commit is contained in:
1 parent
66b33f7f45
commit
9232ea180f
4 files changed
+20
-1
No files matched your search
@@ -35,7 +35,7 @@ once the game is playable start-to-finish without crashes.
|
||||
| **D195** | Transparency / alpha-blended surfaces render wrong — reported on **Control** (Severnaya bunker basement — Natalya's console room; heavy on glass partitions and the translucent projected/holographic wall displays). Exact failure mode not yet pinned by the reporter (M-49 playtest): candidates are alpha-blended geometry drawing fully opaque, translucent panels drawing invisible, or draw-order/sort so translucent surfaces occlude what's behind. | **Observed, not investigated** (M-49, user bug report — needs a `GE_PCDUMP` capture + which surfaces). fast3d render-mode / combiner path. Same neighborhood as D161 (CI8 tile + `G_TT_NONE` → garbage), D172 (particle-sprite channel order), D176(b) (texture pitch shear) — but this is a *blend/alpha* defect, not a texture-decode one. Note D128 already touched Control's `specialportalarray` (portal struct stride) — check whether the affected surfaces are portal-adjacent. First checks: does `gfx_pc.cpp` honour `G_RM_*` XLU render modes + `G_AC_THRESHOLD`/`G_CC` alpha for these DLs; is `gDPSetRenderMode` `w1` being parsed (cf. findings §F "zbuf-clear w1 scribble"); is Z-write-vs-blend ordering right for XLU surfaces. Get the reporter to say: opaque-where-should-be-clear, invisible, or wrong edges? |
|
||||
| **D252** | Particle effects cycle through a rainbow palette — bullet-impact sparks and lingering smoke/explosion residue drift through the full hue wheel over time (~10 shots to sweep it) instead of holding their intended grey/orange palette (M-124, user playtest). Full mechanism + suspect in findings §F **D252**: colour comes from 15 distinct `IMAGE_SMOKE_N`×`IMAGE_FIRE_N` (RGBA16) pairs the particles age through; prime suspect is `import_texture_rgba16` deriving width/height from the tile line size (32×7 instead of 16×14 for the fire tiles), scrambling each stage's sprite into a different wrong hue. | **Documented only — not fixed for v0.2.0-pre** (user instruction). Confirm with one dumped fire tile vs raw `IMAGE_FIRE_N` bytes, then derive width/height from the LOADBLOCK dtx/dlh. D172/M-82 lineage. |
|
||||
| **D323** | Distant geometry on 15 levels samples driver-generated mips from the finest texture level; N64 samples Rare's hand-authored mip chain for explicit-LOD textures bound under `G_TL_LOD` (heaviest: Statue 378 binds, Aztec 806). Overwhelmingly CI8/IA8 — subtle fidelity gap, no reported artifact; the only RGBA5551 cut-outs are the D236 set (already handled). | **OPEN / parked** — mechanism confirmed, census in `tools_pc/bg_lod_audit.py`, fix path documented in findings §F **D323** (upload GL mip chains for TEXTLOD-on bindings). Not worth doing speculatively; revisit only if a playtest flags mushy distant detail. |
|
||||
| **D335a** | Native widescreen, front end: during the gun-barrel intro, Bond's white circle (and briefly the barrel dots) draw into the pillarbox bars while sliding in from off-canvas; the spiral itself clips correctly at the 4:3 edge. That element isn't under the spiral's scissor, so off-canvas logical x (>320) lands in the bar. Transient (~1 s), cosmetic. Fix idea: a full-canvas scissor at the top of `menu_jump_constructor_handler` under the CENTER wrap, or port-side bar masking after a pillarboxed frame. |
|
||||
| **D335a** | **RESOLVED 2026-09-23.** Gun-barrel backdrop (Bond's spotlight) leaked into the pillarbox bars while sliding in from off-canvas. Fix: `menu_jump_constructor_handler` emits a full-canvas `gDPSetScissor` right after the CENTER wrap (only when wider than 4:3), which fast3d squeezes to the pillarbox, so off-canvas draws clip at the 4:3 edge as the N64 RDP clips at the screen edge. Verified with a 16:9 barrel capture. |
|
||||
| **1P weapon viewmodel** | **RESOLVED (M-83, D215).** In-level first-person weapon models drew nothing. Root cause: `gunRenderFirstPersonGunModels` built its `ModelRenderData` via `*(ModelRenderData*)&D_80035CC0` — a reinterpret across two separately-declared adjacent globals that only lands right on the N64 linker + 4-byte pointers; on x86-64 `renderdata.flags` read 0, gating every weapon DL node off in `modelRenderNodeGundl`. All 3 ranked suspects in VIEWMODEL-RESEARCH.md were ruled out first by the `GE_DVM=1` probe. Fixed `#ifdef PORT` (explicit field init). `subdraw` 1→153 gfx cmds; owed one BUNKER1 eyeball. |
|
||||
|
||||
## Resolved (for reference)
|
||||
|
||||
@@ -13264,4 +13264,5 @@ Implemented as `Input.PdMouseAim` (**default off**, because it changes aim feel)
|
||||
**Wraps (`#ifdef PORT`, Rule-2 approved):** gameplay HUD in `maybe_mp_interface` (bondview2.c): watch (`bondviewRenderWatch`), gauge bars (both sites), bottom messages / level title card (`hudmsgBottomRender`, both camera modes), upper text window (`sub_GAME_7F08AAE8`) and countdown timer, all CENTER. Ammo (`generate_ammo_total_microcode`, gunfire.c): right-hand block RIGHT, left-hand (dual-wield) block LEFT. Front end: all of `menu_jump_constructor_handler` (front.c) CENTER, i.e. pillarboxed 4:3, and `input.c` maps the absolute menu pointer across the centred region instead of the window. **Deliberately unwrapped:** the crosshair (its position lives in the world-projection space; only its sprite width is corrected, D334), full-screen fades, blood and damage overlays (should cover the window), and the world.
|
||||
|
||||
**Verified (native Windows, headless captures):** 21:9 gameplay: ammo counter right-anchored and undistorted; title card undistorted; watch round, inventory and control-options pages (incl. the D290 pad) undistorted. 16:9 front end: legal screen and file select pillarboxed and undistorted; gun-barrel spiral clips at the 4:3 edge. 640×480 golden 3/3; Windows + Linux builds clean. **Known cosmetic:** gun-barrel circle leaks into the bars while sliding in (GRAPHICS-BACKLOG D335a). **Not yet wrapped (next pass, needs live checks):** end credits (`bondviewRenderCredits`), sniper/zoom overlays inside `gunDrawSight`, MP radar (MP out of scope). **Owed (user):** full HUD pass at 16:9 and 21:9 in play (pickup messages, objectives, health bars, dual-wield ammo, mission complete/failed screens, menu pointer accuracy).
|
||||
**D335 follow-up (2026-09-23):** end credits (`bondviewRenderCredits`, camera-mode-1 path) wrapped CENTER. Verified at 16:9 via `-level_54`: ending cutscene subtitles undistorted, cast roll inside the 4:3 region. `gunDrawSight` checked: it draws only the crosshair sprite (GE has no scope mask), which D334 already corrects, so no wrap is needed. **D335a resolved:** a full-canvas scissor after the front-end CENTER wrap clips the gun-barrel backdrop at the pillarbox edge (capture-verified).
|
||||
|
||||
@@ -9299,7 +9299,15 @@ Gfx *maybe_mp_interface(Gfx *gdl)
|
||||
PORT_HUD_ASPECT(gdl, GE_HUD_ASPECT_NONE);
|
||||
#endif
|
||||
gdl = currentPlayerDrawFade(gdl);
|
||||
#ifdef PORT
|
||||
/* D335: end credits are centred 4:3 text -> keep their shape. */
|
||||
PORT_HUD_ASPECT(gdl, GE_HUD_ASPECT_CENTER);
|
||||
gdl = bondviewRenderCredits(gdl);
|
||||
PORT_HUD_ASPECT(gdl, GE_HUD_ASPECT_NONE);
|
||||
return gdl;
|
||||
#else
|
||||
return bondviewRenderCredits(gdl);
|
||||
#endif
|
||||
}
|
||||
|
||||
gunUpdateAndFireBothHands();
|
||||
|
||||
@@ -8863,6 +8863,16 @@ Gfx * menu_jump_constructor_handler(Gfx *DL)
|
||||
* pillarbox it (centred, undistorted) instead of stretching it to the
|
||||
* window. input.c maps the menu pointer into the same centred region. */
|
||||
PORT_HUD_ASPECT(DL, GE_HUD_ASPECT_CENTER);
|
||||
{
|
||||
/* D335a: a full-canvas scissor set while CENTER is active is squeezed
|
||||
* to the pillarbox, so off-canvas draws (the gun-barrel backdrop sliding
|
||||
* in from logical x > 320) clip at the 4:3 edge as they would at the
|
||||
* N64 screen edge instead of painting into the side bars. */
|
||||
extern f32 portNativeAspect(void);
|
||||
if (portNativeAspect() > 1.3334f) {
|
||||
gDPSetScissor(DL++, G_SC_NON_INTERLACE, 0, 0, viGetX(), viGetY());
|
||||
}
|
||||
}
|
||||
#endif
|
||||
switch(current_menu) {
|
||||
case MENU_LEGAL_SCREEN:
|
||||
|
||||
Reference in new issue
Block a user