D348: mini slider glyph beside the file-select PC Options label

No settings icon exists in the game art (mainfolderimages holds only
copy/del/select-arrow/X/check/dot), so a miniature slider control is drawn
instead: three menu-box tracks with offset knobs in the 14px gap after Erase
(10px wide, 2px margins), INK_DIM tracks, knobs matching the label ink
(white / gold while hot). Tracks the dynamic label x (JP-safe), text position
unchanged; hot region extended to include the glyph. PCDUMP pixel-verified.
This commit is contained in:
James Dansereau committed 2026-09-27 12:24:56 -04:00
1 parent 7e07d9e018
commit 050c3981d6
3 files changed
+45 -1

No files matched your search

+1
View File
@@ -225,3 +225,4 @@ D344,FIXED,Host PC bugchecks (BSOD 0x119 VIDEO_SCHEDULER_INTERNAL_ERROR) during
D345,FIXED,"Front-end crosshair snaps away from the pointer on screen/page changes (file select → mode select setCursorPOSforMode(0), front.c:2516; every MENU_PC_OPTIONS p…","Port-only, user-verified (parts a–g):"
D346,PARTIAL,PC-settings wording pass:,Port-only display change landed (optionsoverlay.c rows[]/valueText + one colour match in frontoptions.c); both UIs (F10 overlay + options screen) share the table.
D347,PARTIAL,F10 overlay controller:,Port-only fix landed (optionsoverlay.c):
D348,OPEN,"File-select ""PC Options"" label:",Port-only (frontoptions.c):
1 # GENERATED by tools_pc/gen_findings_index.py -- do not hand-edit.
225 D345
226 D346
227 D347
228 D348
+25
View File
@@ -633,6 +633,7 @@ covers D24–D69; the log continues in §H (D32 procedure, D70–D121).
| D345 | **Front-end crosshair snaps away from the pointer on screen/page changes (file select → mode select `setCursorPOSforMode(0)`, front.c:2516; every `MENU_PC_OPTIONS` page hop), and the options screen's keyboard navigation was missing/mis-modelled (2026-09-27).** — full `## D345` entry at file tail | Port-only, user-verified (parts a–g): (a) `input.c` re-assert window on menu change; (b) `cursorToItem` skips its snap while the pointer is live; (d) W/S emit stick in menus under NaturalPitch; (e/f) F10-style discrete row stepping + arrow left/right value adjust replace raw drift (first pass shipped broken, fixed); (g) screen-placed cursor parks in the left gutter, off the row text. Game-side one-liner (pad users) parked pending Rule-2 sign-off. |
| D346 | **PC-settings wording pass: option labels/values aligned to Nightdive/Turok + PD-port conventions (title-case On/Off, "Frame rate cap", "Anti-aliasing"/"None", units in values not labels, self-explanatory auto-FOV toggles); VIEW section merged into VIDEO (2026-09-27).** — full `## D346` entry at file tail | Port-only display change landed (`optionsoverlay.c` rows[]/valueText + one colour match in `frontoptions.c`); both UIs (F10 overlay + options screen) share the table. Config keys/values untouched. Deadzone % display uses raw-step grid (cosmetic follow-up noted). |
| D347 | **F10 overlay controller: left/right did nothing (only A/Y adjusted values) and no input had hold-to-repeat (2026-09-27).** — full `## D347` entry at file tail | Port-only fix landed (`optionsoverlay.c`): D-pad left/right + stick-X wired into value adjust (A/X/B/Y kept); 18/4-frame hold-to-repeat on adjust and up/down nav, matching the options screen's D345(e)/(f) cadence. Real-device controller retest owed. |
| D348 | **File-select "PC Options" label: no settings icon exists in the game art (mainfolderimages = copy/del/select-arrow/X/check/dot only) -- a mini slider glyph is drawn instead (2026-09-27).** — full `## D348` entry at file tail | Port-only (`frontoptions.c`): three menu-box tracks + offset knobs in the LABEL_GAP left of the label, INK_DIM/label-ink colours, hot region extended. PCDUMP pixel-verified (135 knob px vs 9 paper); visual feel-check owed. |
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
@@ -13732,3 +13733,27 @@ sliders step by their registered step; MSAA/enum wrap as before.
Controller feel is owed a real-device retest (headless can't drive the pad):
hold ←/→ on a slider, hold ↑/↓ to traverse, confirm A/X/B/Y still work and
nothing reaches the game while the overlay is open.
## D348 — File-select "PC Options" label gets a mini slider glyph (2026-09-27)
User request: an icon next to the "PC Options" bottom-bar label, like Copy/Erase
have theirs. There is no settings-style sprite anywhere in the game art — the
`mainfolderimages` bank (`assets/oddtextures.h:57-64`) holds exactly six:
COPY, DEL, SEL (select arrow), X, CHECK, DOT. Per user choice, a glyph is drawn
instead of borrowing an off-meaning sprite.
Implementation (port-only, `optionsFileSelectLabel()` in frontoptions.c):
three 2px menu-box tracks with offset 3×4 knobs (a miniature slider control),
emitted with the same `microcode_constructor_related_to_menus` primitive the
options screen uses for its slider bars. Tracks are `INK_DIM`; knobs match the
label ink (white, gold while hot). The glyph is 10px wide (`GLYPH_W`) and sits
INSIDE the existing 14px `LABEL_GAP` after Erase (2px margins each side), so it
tracks the dynamic label x — JP's wider Erase pushes glyph + label together —
and the text position / right-edge clearance are unchanged. The hot region
extends left to include the glyph. No new strings (issue #87).
**Verification:** `build-pc.sh ntsc-final` clean; headless file-select capture
(`GE_STARTMENU=5 GE_PCDUMP=200-201`, 1088×816 = 440×330 canvas × 2.473): the
glyph box (logical x 339–351, y 278–292) contains 135 pure-white pixels — the
three knobs — vs 9 on an equivalent empty-paper strip. Visual feel-check owed
to the user (proportions/knob offsets are one-constant tweaks if it looks off).
+19 -1
View File
@@ -86,6 +86,7 @@ extern struct rectbbox folder_option_ERASE_bound; /* front.c:439 */
#define LABEL_X 352 /* Erase's text now ends ~338 (front.c, D343 shift) */
#define LABEL_CY 285 /* the bar's centre line, as Copy/Erase */
#define LABEL_GAP 14 /* space after Erase's text */
#define GLYPH_W 10 /* D348: slider-glyph width, inside LABEL_GAP (2px margins) */
#define HIT_PAD 4
#define MAX_PAGES 8
@@ -509,7 +510,7 @@ Gfx *optionsFileSelectLabel(Gfx *gdl)
hot = !optionsOverlayIsOpen()
&& menu_update == MENU_INVALID
&& folder_selected_for_deletion < 0
&& cursor_h_pos >= (f32)(x - HIT_PAD) && cursor_h_pos <= (f32)(x + w + HIT_PAD)
&& cursor_h_pos >= (f32)(x - GLYPH_W - HIT_PAD) && cursor_h_pos <= (f32)(x + w + HIT_PAD)
&& cursor_v_pos >= (f32)(y - HIT_PAD) && cursor_v_pos <= (f32)(y + h + HIT_PAD);
if (hot && joyGetButtonsPressedThisFrame(PLAYER_1, A_BUTTON | Z_TRIG | START_BUTTON)) {
@@ -517,6 +518,23 @@ Gfx *optionsFileSelectLabel(Gfx *gdl)
frontChangeMenu(MENU_PC_OPTIONS, FALSE);
}
/* D348: mini slider glyph left of the label -- three tracks with offset
* knobs, drawn with the same menu-box primitive as the options screen's
* slider bars. It sits INSIDE the LABEL_GAP after Erase (10px wide, 2px
* margins each side), so it tracks the dynamic x (JP's wider Erase pushes
* it along) and the text position / right-edge clearance are unchanged.
* No new strings (issue #87). */
{
s32 gx0 = x - GLYPH_W;
u32 knob = hot ? 0xEBD879FF : 0xFFFFFFFF; /* matches the label ink */
gdl = microcode_constructor_related_to_menus(gdl, gx0, LABEL_CY - 5, x - 2, LABEL_CY - 3, INK_DIM);
gdl = microcode_constructor_related_to_menus(gdl, gx0, LABEL_CY - 1, x - 2, LABEL_CY + 1, INK_DIM);
gdl = microcode_constructor_related_to_menus(gdl, gx0, LABEL_CY + 3, x - 2, LABEL_CY + 5, INK_DIM);
gdl = microcode_constructor_related_to_menus(gdl, gx0 + 1, LABEL_CY - 6, gx0 + 4, LABEL_CY - 2, knob);
gdl = microcode_constructor_related_to_menus(gdl, gx0 + 6, LABEL_CY - 2, gx0 + 9, LABEL_CY + 2, knob);
gdl = microcode_constructor_related_to_menus(gdl, gx0 + 3, LABEL_CY + 2, gx0 + 6, LABEL_CY + 6, knob);
}
/* Same font and white as Copy/Erase; gold (the folder text colour) while
* the cursor is over it. Text state is still the Copy/Erase text's. */
return textRender(gdl, &x, &y, (char *)kLabel, ptrFontZurichBoldChars,