forked from Ports/goldeneye-pc-port
v0.4.0 wrap-up: D407 RESOLVED — tank board-ordering fix, board-animation lockout, menu-accept B gate, in-tank aim routing + Input.TankAimScale; PC Options wheel direction fixed (D407(b)); all 10 TANKDBG probes stripped (src/game zero-diff); D408 logged (SkipIntro skips the failure dossier — Skip intro marked EXPERIMENTAL); release notes + readme stats
This commit is contained in:
1 parent
76e9202dfd
commit
4f66db12d6
6 files changed
+104
-40
No files matched your search
@@ -284,3 +284,4 @@ D404,RESOLVED,"""Aim style: Centred (PC)"" (Input.AimMode=1, D333/D337) has no e
|
||||
D405,CLOSED,"fast3d/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)."
|
||||
D406,RESOLVED,front-end PC Options screen:,"RESOLVED (2026-09-28, port-layer only, Steam Deck-validated):"
|
||||
D407,PARTIAL,Tanks cannot be boarded/exited on PC —,"PARTIAL (fix landed in v0.4.0, port-only):"
|
||||
D408,OPEN,Game.SkipIntro skips the post-mission failure dossier:,"OPEN (cosmetic, not root-caused past the handoff site)."
|
||||
|
+18
-5
@@ -691,7 +691,8 @@ covers D24–D69; the log continues in §H (D32 procedure, D70–D121).
|
||||
| D404 | **"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 input … pad trigger") but the centred path is mouse-only (Steam Deck, 2026-09-27).** Full `## D404` entry at file tail. | RESOLVED (2026-09-28, port-layer only): the toggle now genuinely works on a pad. First logged as a communication bug and closed by relabel ("Aim style (mouse)"), then reopened on user challenge the same day: the pad path emits stick *deflection* into the game's crosshair integrator, so the pad was actually always in the **N64** model (a flick travels the crosshair; edge-scroll + spring-back only made a hold *feel* direct), and the "stick has no crosshair to travel" rationale was wrong. Fix: new `padDirectCompute()` in `input.c` (the pad twin of `hipDirectCompute`'s CENTRED branch -- same dead/watch/pause/cutscene gates, minus the mouse-grab gate; revised same day to the N64 path's verbatim quadratic curve -- `sign(v)\u00b7clamp(defl/70,\u00b11)\u00b2 \u00b7 (fov/60) \u00b7 3.5 deg/poll` (bondview2.c canNaturalTurn/canNaturalPitch), full-stick parity with the N64 path, pending retest on the refreshed build); the natural-pitch pad branch routes CENTRED through it and keeps N64's classic deflection behaviour (also the default, so no pad default changes). Labels reverted to device-neutral ("Aim style" / "Aim range"). **Steam Deck (2026-09-27/28): "centered aim is broken on deck too" -- fixed for real; the first-pass linear gain was measured as a dramatic sensitivity loss (2026-09-28) and replaced with the N64 path's verbatim quadratic curve (fov/60 base, 3.5 deg/poll top rate); retest on the refreshed build: user "good". RESOLVED.** |
|
||||
| D405 | **fast3d/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; label rebased from the PR's D323, which collides with our D323 LOD finding) — full `## D405` entry at file tail | **CLOSED (2026-09-28).** Merged from PR #106 (code file only; security-reviewed clean - port-layer GL state fixes, no external input, no allocations). `resolve_msaa_color_buffer` clamps `msaa_level` to `GL_MAX_SAMPLES`; the resolve/copy paths bind `current_framebuffer ? framebuffers[i].fbo : 0` (the default framebuffer is GL name 0). Both Windows (opengl32) and Linux use this backend. Post-merge sweep 21/21 PASS + MSAA=16 boot check render-verified; link ritual clean. |
|
||||
| D406 | **front-end PC Options screen: long sections (INPUT, 17 visible rows) run off the bottom of the 440x330 paper, and rows past the silent 14-row page cap (Crouch mode, Reset to defaults, Bindings…) are unreachable from the front screen** (user report 2026-09-28, v0.4.0 pre-push review) — full `## D406` entry at file tail | RESOLVED (2026-09-28, port-layer only, Steam Deck-validated): in-section pagination in `frontoptions.c` (11 rows/page; the vertical stepper crosses page boundaries both ways; dim 'Page p/N' marker + bottom hint on every page; slider bars start past long labels; F10 overlay untouched). D406b/c/d same-cycle refinements (label/track overlap, hint visibility/wording, hint position). |
|
||||
| D407 | **Tanks cannot be boarded/exited on PC — the v0.4.0 use/reload split (D378/D393) removed the B-button tap the engine's tank handlers in `bondview2.c` consume (user report 2026-09-28, Runway/Streets)** — full `## D407` entry at file tail | PARTIAL (fix landed in v0.4.0, port-only): present `GE_CONT_B` on the use (E / pad A) rising edge only while `g_PlayerIsInTank == 1` or `g_BondCanEnterTank != 0`; E keeps its D378 no-reload-fallback semantics elsewhere, N64 layout unaffected. D407(b) same cycle: front PC Options page-edge highlight clamp + mouse-wheel / W-S paging (wheel queue consumed on the menu, D223). Build + link clean, zero TANKDBG strings in the binary; the user's first live tank drive (board + exit) is owed for sign-off. |
|
||||
| D407 | **Tanks cannot be boarded/exited on PC — the v0.4.0 use/reload split (D378/D393) removed the B-button tap the engine's tank handlers in `bondview2.c` consume (user report 2026-09-28, Runway/Streets)** — full `## D407` entry at file tail | PARTIAL (fix landed in v0.4.0, port-only): present `GE_CONT_B` on the use (E / pad A) rising edge only while `g_PlayerIsInTank == 1` or `g_BondCanEnterTank != 0`; E keeps its D378 no-reload-fallback semantics elsewhere, N64 layout unaffected. D407(b) same cycle: front PC Options page-edge highlight clamp + mouse-wheel / W-S paging (wheel queue consumed on the menu, D223); its wheel mapping shipped inverted and was fixed to match W/S (wheel up = step up). D407(c): board-animation lockout, menu-accept B gate in tank states, in-tank aim routed through the legacy velocity stick + `Input.TankAimScale` knob. RESOLVED 2026-09-28: all port-only (src/game zero-diff), 10 TANKDBG probes stripped, release binary verified clean, user live tank drive signed off (board + exit OK, aim feel good). |
|
||||
| D408 | **`Game.SkipIntro` skips the post-mission failure dossier: with it on, entering a level then aborting (watch Z+A) or dying (KIA) returns straight to the menus — no REPORT / "Mission status: KILLED IN ACTION / ABORTED" screen** (user report 2026-09-28; save/AllUnlocked ruled out) — full `## D408` entry at file tail | OPEN (cosmetic, not root-caused past the handoff site). v0.4.0 decision: SkipIntro stays EXPERIMENTAL / not recommended for regular users — F10 row relabelled "Skip intro (EXPERIMENTAL)". |
|
||||
|
||||
|
||||
Phase 2 replaced the Phase-1 demo loop with the real `mainproc()` on real OS
|
||||
@@ -15504,10 +15505,22 @@ included; D281 keeps the shipped mitigation + disclosure, zero-saves root cause
|
||||
|
||||
**Root cause (port-layer input regression from the v0.4.0 wave, not game logic):** on the N64 a B tap drives both object use and the tank handlers in `bondview2.c` (`bondviewProcessInput`): B tap while `g_PlayerIsInTank == 1` exits the tank; B tap while `g_BondCanEnterTank != 0` (set by the `PROPDEF_TANK` proximity test in `bondviewCalcUpdatePlayerCollision`) boards it. The v0.4.0 input rework (D378: E = `bond_interact_object()` use with no reload fallback; D393: pad A = use / X = reload / Y = weapon cycle) routed the PC use action to that dedicated interact call and stopped presenting `GE_CONT_B`, so both tank branches lost their trigger: the tank stayed solid (collision) but its state machine was unreachable.
|
||||
|
||||
**Fix (port-layer only, `port/src/input.c` `inputComputePad`; `src/game` zero-diff — the four static `TANKDBG` probes used to diagnose this were stripped before the release):** present `GE_CONT_B` on the use (E / pad A) rising edge only while `g_PlayerIsInTank == 1 || g_BondCanEnterTank != 0`. E keeps its D378 no-reload-fallback semantics everywhere else; the N64 layout presents B natively and is unaffected.
|
||||
**Fix (port-layer only, `port/src/input.c` `inputComputePad`; `src/game` zero-diff — the ten `TANKDBG` probes used to diagnose this (7 in `bondview2.c`, 3 in `input.c`, all `#ifdef PORT`) were stripped for the release):** present `GE_CONT_B` on the use (E / pad A) rising edge only while `g_PlayerIsInTank == 1 || g_BondCanEnterTank != 0`. E keeps its D378 no-reload-fallback semantics everywhere else; the N64 layout presents B natively and is unaffected.
|
||||
|
||||
**D407(b) (same cycle, front-end follow-ups from the D406 Deck validation; `frontoptions.c` + `input.c`):** (1) on the front PC Options screen, past the top/bottom edge of the visible rows the mouse highlight was dropped entirely — it now clamps to the page-edge row, so a mouse-only user keeps a row selected at the page edge (wheel / S then turns the page). (2) the mouse wheel pages the row list on that screen (wheel down = step down); the wheel queue is consumed on the menu so a scroll cannot leak into the next stage's weapon cycle (D223). (3) W/S also drive pad up/down on that screen.
|
||||
**D407(c) (same cycle, tank follow-ups from live playtest):** (1) **Board-animation lockout** — the game's B handler is a toggle: while `g_PlayerIsInTank` is set, a B tap is the EXIT path. Boarding commits a ~45-frame sit blend during which `g_EnterTankAudioState` stays `TANK_RUN_STATE_NOT_RUNNING`; a key bounce or impatient re-press of E in that window hit the exit a few frames later and silently cancelled the whole animation (playtest 2026-09-28: every attempt was a board→exit microcycle — "tries to do something, cancels out"). The port now suppresses B from E while `g_PlayerIsInTank == 1 && g_EnterTankAudioState == TANK_RUN_STATE_NOT_RUNNING` (`s_tankBoardLock`); once seated, E = exit again. (2) **Menu-accept B gate** — the level-triggered "pad A / E presents B outside playable stages" mapping is disabled in tank states, so a held E while seated cannot re-edge the game's own exit toggle. (3) **Tank aim routing + `Input.TankAimScale`** — in-tank the game aims the turret from raw stick deflection only (`bondview2.c`: |stick| > 60 → `aimTurn`/`speedVerta`), so the direct-write aim models (centred / GEPD) are bypassed while `g_PlayerIsInTank == 1` and the legacy velocity stick is emitted instead; new `Input.TankAimScale` (default 100, range 10–300) scales only the mouse→stick gain on that in-tank path — on-foot aim, hipfire and keyboard/pad input are untouched.
|
||||
|
||||
**Verification:** NTSC build + link clean; zero `TANKDBG` strings in the release binary; 40 s front-end boot steady ~60 fps with zero errors (2026-09-28). The user's first live tank drive (Runway or Streets) is owed for board + exit sign-off — if board/exit misbehaves, or E double-triggers against the tank prop (port-side interact call + native B-bit handler), re-open D407.
|
||||
**D407(b) (same cycle, front-end follow-ups from the D406 Deck validation; `frontoptions.c` + `input.c`):** (1) on the front PC Options screen, past the top/bottom edge of the visible rows the mouse highlight was dropped entirely — it now clamps to the page-edge row, so a mouse-only user keeps a row selected at the page edge (wheel / S then turns the page). (2) the mouse wheel pages the row list on that screen (wheel down = step down); the wheel queue is consumed on the menu so a scroll cannot leak into the next stage's weapon cycle (D223). (3) W/S also drive pad up/down on that screen. **(2026-09-28 fix, user report):** the (2) mapping shipped inverted — `wheelBack` (SDL wheel-up) drove `-STICK_MAX` and `wheelFwd` (wheel-down) `+STICK_MAX`, but this screen's convention is `+STICK_MAX` = up (the W/Up keys in `pcOptionsKeyboardPad`). Swapped so wheel up = step up, wheel down = step down; scoped to `MENU_PC_OPTIONS` only — in-stage weapon cycling (D223: wheel down = next weapon) and the F10 overlay's own scroll are untouched.
|
||||
|
||||
**Status:** PARTIAL — fix landed in v0.4.0 (port-only); the user's live board/exit sign-off is owed on the first tank drive.
|
||||
**Verification:** NTSC build + link clean; zero `TANKDBG` strings in the release binary (re-verified after probe strip, 2026-09-28); 40 s front-end boot steady ~60 fps with zero errors. **Live sign-off (user, 2026-09-28):** first tank drive — board + exit work, no double-trigger against the tank prop, and the in-tank aim feel is good at `TankAimScale = 100` ("felt fine, glad to have the setting").
|
||||
|
||||
**Status:** RESOLVED (2026-09-28) — board-ordering fix + board-animation lockout + menu-accept B gate + tank aim routing + `Input.TankAimScale`, all port-only (`src/game` zero-diff), user-signed off on a live tank drive; probes stripped, release binary verified clean.
|
||||
|
||||
## D408 — `Game.SkipIntro` skips the post-mission failure dossier: failed/aborted missions return straight to the menus with no REPORT screen (user report 2026-09-28, during v0.4.0 wrap-up playtest)
|
||||
|
||||
**Symptom:** with `Game.SkipIntro = 1`, entering a solo mission and then either aborting (watch menu Z+A) or dying (KIA) returns the player straight to the front-end menus — the post-mission failure dossier is never shown. On a normal boot that screen is `MENU_MISSION_FAILED` (`front.c` `constructor_menu0C_missionfailed`: "REPORT / Mission status: KILLED IN ACTION" or "ABORTED", with the objective list and next/prev tabs to the mission-complete report). Initial suspicion was the user's save or `Game.AllUnlocked` (D257/D387); **user confirmed 2026-09-28 that it is a SkipIntro quirk** — save state and AllUnlocked are not involved.
|
||||
|
||||
**Traced so far (handoff site, mechanism not fully pinned):** the stage-end handoff lives in `menu_init()`'s `MENU_RUN_STAGE` case (`front.c:~8909`, called from `lv.c:1322` only once `g_CurrentStageToLoad == LEVELID_TITLE`): non-replay solo stages fall through to `frontChangeMenu(MENU_MISSION_FAILED, 1)` (Cuba → cast display, multi → MP options, ramrom replay → legal screen). Under SkipIntro that handoff evidently never runs on the fail/abort return path — the exact point where the boot shortcut's state diverges (which flag/menu value the skipped intro stages would normally have left behind) is not yet identified. The abort path itself (`options.c:798`: `set_missionstate(MISSION_STATE_0); bossRunTitleStage(); mission_failed_or_aborted = TRUE; deleteCurrentSelectedFolder()`) and the KIA path (`bondview2.c bondviewKillCurrentPlayer`, `g_isBondKIA = 1`) are game logic and behave per the decomp; nothing in `port/` intercepts `MENU_MISSION_FAILED`.
|
||||
|
||||
**v0.4.0 decision (user, 09-28):** `Game.SkipIntro` stays **EXPERIMENTAL — not recommended for regular users yet**, alongside its older unrooted audio-break report (D216 status note). The F10 row is relabelled "Skip intro (EXPERIMENTAL)" (`port/src/optionsoverlay.c`, mirroring the D387 AllUnlocked labelling precedent); the config var, default (off), and `lv.c` hook are unchanged.
|
||||
|
||||
**Status:** OPEN — cosmetic (no crash, no data loss; the mission still records as failed/aborted and the menus are fully functional). Root-causing needs a side-by-side of front-end state (`current_menu`, `g_CurrentStageToLoad`, `mission_failed_or_aborted`, `g_isBondKIA`) on the fail return with SkipIntro off vs on — candidate for v0.5.0 alongside the D216 audio half.
|
||||
Reference in new issue
Block a user