WIP: feat(ui): add an opt-in Hidden HUD mode #774
No reviewers
Labels
No labels
area/accessibility
area/audio
area/input
area/install
area/menu
area/renderer
area/saves
area/upscaling
beanstalk: approved @ 1697603
beanstalk: approved @ 2c5a62e
beanstalk: approved @ 4fd82b7
beanstalk: approved @ 64d6d09
beanstalk: approved @ 6f91fae
beanstalk: approved @ 70a78f9
beanstalk: approved @ 8d361dc
beanstalk: approved @ 9d8356e
beanstalk: approved @ abf2227
beanstalk: approved @ d82f202
beanstalk: approved @ e5f1e40
beanstalk: approved @ ee8ab5f
ci: approved
good first issue
gpu/amd
gpu/igpu
gpu/intel
gpu/nvidia
help wanted
kind
bug
kind
chore
kind
docs
kind
feature
kind
performance
kind
question
needs measurements
platform/linux
platform/macos
platform/steam-deck
platform/windows
preview
priority
critical
priority
high
priority
low
regression
status
blocked
status
confirmed
status
duplicate
status
invalid
status
needs-info
status
wontfix
testing wanted
ci: approved
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
MagicBeanDev/Longshot!774
Loading…
Reference in a new issue
No description provided.
Delete branch "simonwjackson/Longshot:feat/hud-hidden"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Type: feat · Risk: medium · Tested on: Linux, RX 7900 XT · Needs: Windows and item-message testing
Why
Players who want an unobstructed game view cannot hide the gameplay HUD today. This adds an opt-in Hidden mode while keeping Normal as the default.
See #95. I searched the open and closed PRs and issues; #95 owns HUD layout, not visibility.
What changed
Graphics → Screen gains HUD mode, Hidden/Normal, saved as
hud_mode. The choice applies on the next start, not live. The existing restart indicator and confirmation explain this before the player restarts.menu_hud_mode()ingpu/vk/vk_menu.cppreads the existing restart state's startup value. The saved row can change without changing any canvas in the running session, including a canvas created later. There is no separate HUD latch.nx2/oot_wide.pycollapses only six recognized gameplay canvases when they are constructed. Normal adds no guest reads. It does not change the layout's source projection.hos_oot_hud_screen()inhost/oot_hud.c, installed bypatch_hud_screen()innx2/oot_patches.py, distinguishes the minimap from the full map usingMapMenu_00:N_MapIcon_00, as #95 does. It temporarily collapses the map canvas only during its minimap update and restores every coefficient before returning. The update always runs; skipping it would also stop the transition to the full map. No saved-state writes, retained guest pointers or visibility cache.53f96d7805and preserves its X/Y scales. There is no new docking, sizing, Double mode, renderer tag or dependency on unmerged #142. The unpublished branch was then rebased linearly onto that same main; its source tree did not change. Llun agreed to separate visibility work in #95 comment 20344.Measurements
Verdict: The listed visibility/restart checks pass. Normal-mode median FPS is within 1% of main at both shapes. Two narrow-screen PR runs were much slower; a third complete interleaved triplet returned near the first round. The cause was not isolated; all runs, including the slow ones, are retained. No general speed or zero-cost claim.
Before: main @
53f96d7805After: this PR @
cdc248dc0cSource identity: the executable was built from pre-rebase
08db9fd8214ca875d14dadeb657640b67a9c9f5f, and its build stamp still says that.git rev-parse 08db9fd^{tree} cdc248d^{tree}gives34b68817a2for both that commit andcdc248dc0c29725b022fe7d8aa0be675ca3a739a. Headd3ceb71287310c4de5bce309600f258d19342d70adds only the fifteen tested-run records after that code commit. The rebase changed history only; all tracked file contents and modes are byte-identical. The proofs, suite and timings therefore cover the rebased source without a rebuild.Hardware: NixOS 26.11, Linux 7.2.7; AMD Radeon RX 7900 XT (RADV, Mesa 26.2.3); Ryzen 5 7600X, 30.56 GiB Linux MemTotal (32,048,408 KiB); private headless Sway/Xwayland.
Scene: copied Castle Town gatehouse save, stationary by the wooden door; output/drawable 1920x1080 and 2448x1848. Upscaler Off, render resolution 100%, FG/HDR off, uncapped, audio off, compute mesh fallback, udmabuf access.
Method: main / PR Normal / PR Hidden, interleaved twice at 1920x1080 and three times at 2448x1848; 30 s warm-up after reaching the scene, then 45 s of native FPS log samples. The table reports each run's median and the median of runs. The third narrow triplet followed the slow second-round PR samples; it does not replace them. Those slow runs show higher render-thread job elapsed time (not CPU-cycle measurements), while GPU time stays around 10.4–10.6 ms. Normal still has host-call overhead.
How to reproduce: use the same save and options in separate main/PR folders; set HUD mode before each PR launch, not during a sample.
53f96d7cdc248d(Normal)cdc248d1920x1080: Normal +0.75%, Hidden +0.00% relative to main.
2448x1848: Normal -0.77%, Hidden -0.17% relative to main.
All FPS samples and original first/last log lines per run
1920x1080-r1-main — 59.50 FPS median; 21 samples.
1920x1080-r1-normal — 60.10 FPS median; 21 samples.
1920x1080-r1-hidden — 60.70 FPS median; 23 samples.
1920x1080-r2-main — 60.00 FPS median; 22 samples.
1920x1080-r2-normal — 60.30 FPS median; 22 samples.
1920x1080-r2-hidden — 58.80 FPS median; 22 samples.
2448x1848-r1-main — 58.80 FPS median; 22 samples.
2448x1848-r1-normal — 58.35 FPS median; 22 samples.
2448x1848-r1-hidden — 58.95 FPS median; 22 samples.
2448x1848-r2-main — 58.45 FPS median; 22 samples.
2448x1848-r2-normal — 22.70 FPS median; 9 samples.
2448x1848-r2-hidden — 33.30 FPS median; 12 samples.
2448x1848-r3-main — 59.10 FPS median; 22 samples.
2448x1848-r3-normal — 59.25 FPS median; 22 samples.
2448x1848-r3-hidden — 58.70 FPS median; 19 samples.
All original log lines and measured JSON remain in the isolated aka evidence directories. The list above includes every FPS sample; the raw lines shown are the first and last of each interval.
Flags and settings
One menu row and ini key. No new environment switch.
hud_modeTesting
Tested:
53f96d7; there are no new failures. The twelve aretest_lift_cleanup_error,test_make_game_cache,test_appimage_player_build,test_cpm_discovery,test_crash_dialog,test_env_on,test_linux_preflight,test_pipeline_tour,test_readback_late,test_vk_pgo,test_vram_budget_row,test_walk_key. The untouched-main focused comparison is 12 failed and one incidental passingmenu_env_oncheck. Main's fixtures include missing_lift_store, missingtoolchain.find, unexpected PGO compiler probes, Clang's trailing-x nonewarning, theRX_VK_PRESENT_AFTER_SIGNALpresence check, stale source assertions and missinghos_oot_autoload_input.git diff --checkpasses. No separate formatter/typechecker exists; the native build, warning-enabled fixtures and suite's Python compilation cover the changed languages.Not tested: Item message: the final interactive attempt ended at its enforced 10-minute GPU cap before an item was obtained; no item-message result is claimed. Also untested: dialogue at 2448x1848, Windows/llvm-mingw, other GPUs, HDR/FG, physical handhelds, other languages' new label/hint, and a full playthrough. The timing variability above was not isolated to a cause.
Must be tested:
d3ceb71287310c4de5bce309600f258d19342d70. The request is open but cannot be claimed until a maintainer adds the existingtesting wantedlabel.Screenshots
Ten original PNGs are attachments on this PR. All ten were fetched without authentication or cookies: HTTP 200, PNG signature and SHA-256 matched the inspected originals. Local copies were then deleted.
1920x1080
53f96d7cdc248d, Normalcdc248d, HiddenFull map remains visible in Hidden (1920x1080):

2448x1848
53f96d7cdc248d, Normalcdc248d, HiddenFull map remains visible in Hidden (2448x1848):

Restart indicator and dialogue choices
Risks
What could break: A screen identity or shared map classification could hide required information. Unknown layouts/projections stay visible. Hidden deliberately removes health and action/navigation information. The visibility wrappers add host calls. Median default-mode FPS stayed within 1% here, but the unexplained slow samples limit that conclusion; other PCs and scenes need their own checks.
Turning it off: Choose Normal, save progress and restart. This is not a live toggle. Restarting loses progress since the last save, as the existing confirmation warns.
Compatibility:
hud_modeis a saved menu option (0 Hidden, 1 Normal, default 1). No save-data schema or shader change. NoMkwVkHostorMkwVkRendererlayout change, so no ABI version bump. Existing main #95 owns all layout behavior.Issues
See #95.
Checklist
Everyone
type(scope): description) of the status line's type.main. Onto53f96d7805; verified identical source tree, as noted above.python -I -B tests/run_all.pypasses (any failure that also fails onmainis named). All 12 failures reproduce on the exact base, named above.third_party/untouched (a new folder with aPROVENANCE.mdinstead).When it applies
Assisted-by:/Co-Authored-By:trailers.docs/tested/for each new measured run (format indocs/tested-configurations.md). Fifteen individual run files, including the slow samples.mainand passing here.tests/that reads changed source updated in this PR, not weakened.Inspected Linux captures. Main is
53f96d7; this PR iscdc248d, whose source tree exactly matches native build08db9fd(the build stamp visible in the menu). HUD mode applies after restart. Item messages remain untested; see request T-GJPR.1920x1080
53f96d7cdc248d, Normalcdc248d, HiddenFull map remains visible in Hidden (1920x1080):

2448x1848
53f96d7cdc248d, Normalcdc248d, HiddenFull map remains visible in Hidden (2448x1848):

Restart indicator and dialogue choices
View command line instructions
Checkout
From your project repository, check out a new branch and test the changes.