forked from Ports/goldeneye-pc-port
v0.4.0 M2 (D373): crosshair on/off + colour; D374: GEPD becomes the default key layout
M2 (the wave's only rule-2 item, sign-off recorded via user direction): #ifdef PORT hook in gunfire.c gunDrawSight -- Video.CrosshairHide skips the draw, Video.CrosshairColor tints the RGB (7 named tints, 0 = the N64 white); non-PORT builds keep the original literals. F10 GRAPHICS rows + kResetDefaults. D374 (M3 playtest fix, user decision): GEPD is now the DEFAULT key layout (Input.Layout 0 = GEPD, 1 = N64-era binds; a mouse FPS layout is the natural default and the N64 never had a keyboard). The preset is now the true effective default: only EXPLICIT per-key [Input.Bind] overrides beat it; persisted values equal to the N64 defaults count as unset. This fixes the playtest bug where a stale persisted Fire=Left Ctrl masked the GEPD preset and made Ctrl fire+crouch at the same time. Boot log reports the applied layout. One-off: pre-D374 Layout=1 (ex-GEPD) inis mean N64 now -- flip to 0 (release note).
This commit is contained in:
1 parent
b95b54ecc7
commit
fca07bdd9a
6 files changed
+192
-24
No files matched your search
@@ -249,3 +249,5 @@ D369,FIXED,Remove F10 row boxes/strips entirely (2026-09-27).,FIXED (awaiting li
|
||||
D370,PARTIAL,F10 distance/volume drags hurt frame rate (2026-09-27).,PARTIAL (user live test):
|
||||
D371,FIXED,"GEPD key-layout preset + reload/crouch bindings, v0.4.0 modern options wave M3 (2026-09-27).",FIXED (headless-verified; awaiting user live accept):
|
||||
D372,FIXED,"Low-end perf preset (v0.4.0 modern options wave M5, 2026-09-27).",FIXED (headless-verified; awaiting user live accept):
|
||||
D373,FIXED,"In-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):
|
||||
D374,FIXED,"GEPD becomes the default key layout; preset layering fix (v0.4.0 M3 playtest feedback, 2026-09-27).",FIXED (headless + user live-tested):
|
||||
|
@@ -657,6 +657,8 @@ covers D24–D69; the log continues in §H (D32 procedure, D70–D121).
|
||||
| D370 | **F10 distance/volume drags hurt frame rate (2026-09-27).** — full `## D370` entry at file tail | PARTIAL (user live test): mostly improved; rapid spam can still lower FPS. Unchanged-detent/audio and Draw/LOD reapply fixed; other image sliders still request full video pass (live log shows frequent FOV passes). No further churn without focused repro. |
|
||||
| D371 | **GEPD key-layout preset + reload/crouch bindings, v0.4.0 modern options wave M3 (2026-09-27).** full `## D371` entry at file tail | FIXED (headless-verified; awaiting user live accept): `Input.Layout` (0=FPS, 1=GEPD) + `Input.CrouchMode` (hold/toggle) in F10 INPUT; GEPD preset acts as per-key effective default under `[Input.Bind]` overrides; new IA_RELOAD/IA_CROUCH emit B (unbound by default). MODERN section dropped per D356 Turok-standard rule (rows land in functional INPUT). Boot/ini-round-trip/F10-page verified; in-game feel-check owed. |
|
||||
| D372 | **Low-end perf preset (v0.4.0 modern options wave M5, 2026-09-27).** full `## D372` entry at file tail | FIXED (headless-verified; awaiting user live accept): one-row `Video.LowEndMode` in F10 VIDEO; ON writes FpsCap 30 + MSAA x1 (restart), OFF restores compiled defaults (60/2). Registered key persists through orderly exit. |
|
||||
| D373 | **In-game crosshair on/off + colour (v0.4.0 modern options wave M2, 2026-09-27).** full `## D373` entry at file tail | FIXED (user live-tested; rule-2 sign-off recorded 2026-09-27): `Video.CrosshairHide` (0 = on, N64) + `Video.CrosshairColor` (7 tints, 0 = white) in F10 GRAPHICS; #ifdef PORT hook in gunfire.c gunDrawSight (the wave's only rule-2 item). |
|
||||
| D374 | **GEPD becomes the default key layout; preset layering fix (v0.4.0 M3 playtest feedback, 2026-09-27).** full `## D374` entry at file tail | FIXED (headless + user live-tested): GEPD playtest found Ctrl fired the gun (stale persisted [Input.Bind] Fire=Left Ctrl masked the preset) and the FPS default made no sense for a mouse FPS. D374: GEPD is now Input.Layout=0 (the default; N64 layout = 1); only EXPLICIT per-key overrides beat the preset. One-off ini flip: pre-D374 `Layout = 1` (ex-GEPD) is now 0. |
|
||||
|
||||
Phase 2 replaced the Phase-1 demo loop with the real `mainproc()` on real OS
|
||||
threads, compiled GE's real `src/sched.c`, and brought in PD's fast3d software
|
||||
@@ -14386,3 +14388,85 @@ boots clean — row resolves, no "not registered" warning. `LowEndMode=1`
|
||||
survives an orderly `GE_QUITFRAME` exit. **Owed:** live F10 preset
|
||||
toggle (ON→FpsCap/MSAA written, FPS readout drops to 30), restart-for-MSAA
|
||||
check, PAL/JP.
|
||||
|
||||
## D373 — In-game crosshair on/off + colour (v0.4.0 modern options wave, M2) (2026-09-27)
|
||||
|
||||
**Spec:** `docs/dev/notes/MODERN-OPTIONS-PLAN.md` M2 — the wave's ONLY
|
||||
rule-2 item (the port intentionally differs from N64 rendering when the
|
||||
option is on; sign-off recorded 2026-09-27 via user direction to
|
||||
implement + live test).
|
||||
|
||||
**Implementation:**
|
||||
- `port/src/gunfire.c` `gunDrawSight`: `#ifdef PORT` guard only.
|
||||
`Video.CrosshairHide` → early return (no texSelect, no draw);
|
||||
otherwise `portCrosshairTint()` supplies the RGB args that the N64
|
||||
hardcodes to 0xFF,0xFF,0xFF (alpha 0x6E unchanged). Non-PORT builds
|
||||
keep the original literals byte-identical (local `extern`s inside the
|
||||
function, the bondview2 `portNoHitFlash` pattern; single consumer, no
|
||||
header declaration).
|
||||
- `port/src/video.c`: `s32 portCrosshairHide` (non-static, D232
|
||||
pattern) + `portCrosshairTint()` — 7 named tints (index 0 = white =
|
||||
the N64 identity), `Game`-section registration `Video.CrosshairHide`
|
||||
(0/1) + `Video.CrosshairColor` (0..6).
|
||||
- `port/src/optionsoverlay.c`: GRAPHICS rows "Crosshair" (kOnOffRev,
|
||||
0 = On) + "Crosshair colour" (kCrosshairColor) + kResetDefaults.
|
||||
|
||||
**Verification:** NTSC build clean. `GE_OPTIONSOVERLAY=4` (GRAPHICS
|
||||
page) boots clean — both rows resolve. Headless level captures (dam,
|
||||
`-level_33`) with hide/red-tint configs: no crash; the crosshair is
|
||||
suppressed in cutscene frames (gunDrawSight only draws in live
|
||||
gameplay), so the visual A/B was done by the user: **crosshair shows in
|
||||
normal gameplay (user-confirmed 2026-09-27, "crosshair showed up")**.
|
||||
Defaults (hide=0, colour=0) leave the render byte-identical to the
|
||||
pre-wave tree. `betacrosshairimage` confirmed dead (plan §M2) — one
|
||||
hook covers in-level rendering.
|
||||
|
||||
## D374 — GEPD becomes the default key layout; preset layering fix (v0.4.0 M3 playtest feedback, 2026-09-27)
|
||||
|
||||
**Trigger:** first GEPD playtest (user, 2026-09-27): "Crouch is broken,
|
||||
in GEPD mode ctrl shoots the gun" + "why is FPS different than GEPD? GE
|
||||
is a first person shooter ... make [GEPD] the default and call it
|
||||
default."
|
||||
|
||||
**Diagnosis (two distinct bugs, one user-visible symptom):**
|
||||
1. The M3 "preset as effective default" only applied to EMPTY
|
||||
`g_bindStr`. But the config migration writes EVERY bind key into the
|
||||
ini on clean exit, so any pre-existing ini carried the full set of
|
||||
persisted N64-layout defaults (`Fire = Left Ctrl`, `Action =
|
||||
Space,Z,E`, ...) — all non-empty — and the preset was silently dead
|
||||
for real users. Switching to GEPD left `Fire = Left Ctrl` in force
|
||||
while the preset added `Crouch = Left Ctrl` → **Ctrl fired and
|
||||
crouched at once**.
|
||||
2. Naming/expectation: in the GEPD scheme (DEEPDIVE §7.1) Q = A button
|
||||
(accept/next weapon), E = B button (use/cancel/crouch/reload). The
|
||||
stale ini's `Action = Space,Z,E` kept E on the A button (weapon
|
||||
cycle), not B (use) — the user correctly expected E = USE.
|
||||
|
||||
**Fix (user decision 2026-09-27; port-layer only, zero game-logic
|
||||
change):**
|
||||
- **GEPD is now the DEFAULT layout** (`Input.Layout`: 0 = GEPD — the
|
||||
natural mouse/FPS default; the N64 never had a keyboard, so the old
|
||||
"FPS" default was always a port artifact — 1 = the N64-era keyboard
|
||||
binds, byte-identical to the pre-wave set, one click away). F10 row
|
||||
now reads "Default" / "N64".
|
||||
- **True effective-default semantics** (`inputRebuildBinds`, D374
|
||||
precedence): an EXPLICIT per-key `[Input.Bind]` value (non-empty and
|
||||
≠ the N64 default, or an explicit unbind of a default-bound action)
|
||||
wins; a persisted value that merely equals the N64 default counts as
|
||||
UNSET, so the layout preset fills it. With this, the user's existing
|
||||
ini (full of persisted defaults) gets the clean GEPD preset:
|
||||
Fire="" (LMB/RMB fire/aim), Crouch=Left Ctrl, Reload=R, Action=Q
|
||||
(A), Cancel=E (B=use) — no Ctrl conflict.
|
||||
- Boot log line: `input: layout GEPD (default)/N64, crouch mode ...`
|
||||
(verifiable in `ge007.log` without an F10 screenshot).
|
||||
- **One-off semantics flip:** an ini with the pre-D374 `Layout = 1`
|
||||
(which meant GEPD) now means N64. No in-code migration marker exists
|
||||
(the value is ambiguous); the dev ini was flipped to 0 by hand —
|
||||
note it in the v0.4.0 release notes for users who had selected GEPD.
|
||||
|
||||
**Verification:** user ini (stale binds, `Layout = 0`): boot log
|
||||
"layout GEPD (default), crouch mode hold", no "no valid keys" warnings,
|
||||
clean exit persists `Layout = 0`. `Layout = 1`: "layout N64". Ctrl no
|
||||
longers fires (Fire unset under the preset); crouch/reload/E-use per
|
||||
preset. **Owed:** user re-playtest (Ctrl crouch, E use, Q cycle) before
|
||||
the wave closes.
|
||||
Reference in new issue
Block a user