Skip to content

Play overlay: FPS, turbo, volume, save states (Retro-Runtime retro_overlay) - #15

Merged
TechnicallyComputers merged 4 commits into
mainfrom
feat/runtime-overlay
Sep 27, 2026
Merged

TechnicallyComputers merged 4 commits into
mainfrom
feat/runtime-overlay

Conversation

@TechnicallyComputers

Copy link
Copy Markdown
Member

Depends on RetroPortingToolKit/Retro-Runtime#3; the submodule is pinned to its head (c69f744). Based on feat/direct-home, because it adds to that branch's n64lle Settings page.

What

PlaySession feeds Retro-Runtime's retro_overlay and draws its layers. The hub draws no overlay of its own, so every core gets the same presentation.

Key Does
F3 (also "Show FPS" in settings and the pause menu) FPS, top left
Tab (held) turbo, >> TURBO top right, sound dropped
+ / - (main row or keypad) volume in 10% steps, meter on the right edge
F7, or SELECT+R1 save-state browser: 12 slots with thumbnails, pauses like the quick menu
  • F3, not F: F is the recomp-ui default for FPS, but in the hub it drives C-Left.
  • Save states:
    • They go over link 1.1, between frames, and live in <save_dir>/states/.
    • A core without savestates, or a 1.0 runner, gets a toast instead of the browser.
    • A refused load shows the runner's reason.
    • Buttons held when the browser closes stay out of the game until released.
  • Settings: Show FPS and volume persist in <data_dir>/play.ini for every core. The n64lle Settings page edits them in an "Overlay & audio" section, saved with the page.

Checked

  • Builds; ctest 14/14.
  • PlaySession driven offscreen with injected key events, with the framebuffer read back at each step:
    • against the fake core;
    • against n64lle 0.375.0 / Pokémon Stadium:
      • FPS, TURBO and the volume meter drew in place;
      • the browser opened over the dimmed game;
      • saving slot 1 took about 40 ms and showed the game frame as its thumbnail, and loading it back worked;
      • no dispatch misses, bridges or faults.

Not checked

A real screen, a real controller (the SELECT+R1 chord, stick repeat), volume by ear, and the settings section as drawn. Those verdicts are Alex's.

🤖 Generated with Claude Code

retro_overlay, the savestate envelope and link 1.1 (SaveState / LoadState).
The hub keeps speaking to a 1.0 runner: it sends the new messages only when
the session's minor has them.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
PlaySession feeds Retro-Runtime's retro_overlay and draws its layers (one
nearest-filtered texture per layer, at place()); it draws none of its own.
- F3 shows FPS, top left. Also "Show FPS" on the settings page and the pause
  menu. (F, the recomp-ui default, drives C-Left here.)
- Tab (held) is turbo: grants back to back for 10 ms of each hub frame,
  sound dropped, >> TURBO top right. Drops on focus loss.
- + / - set the volume in 10% steps (SDL stream gain), meter on the right.
- F7 or SELECT+R1 opens the save-state browser, which pauses like the quick
  menu. Its requests go over link 1.1 between frames; slots live in
  <save_dir>/states/. A core without savestates, or a 1.0 runner, gets a
  toast. Buttons held when it closes stay out of the game until released.
- The pause menu gains Save states, Show FPS and Volume.

Show FPS and volume persist in <data_dir>/play.ini, for every core; the
n64lle Settings page edits them in an "Overlay & audio" section, saved with
the page.

Checked: builds, 14/14 ctest; PlaySession driven offscreen with injected keys
against the fake core and n64lle Pokemon Stadium, framebuffers read back.
Not checked: a real screen, a real controller, sound by ear, the settings
section as drawn.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@TechnicallyComputers
TechnicallyComputers changed the base branch from feat/direct-home to main September 27, 2026 01:43
…ged to main

Retro-Runtime #3's merge commit; the tree is c69f744's.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@TechnicallyComputers
TechnicallyComputers merged commit 34e4a34 into main Sep 27, 2026
TechnicallyComputers added a commit that referenced this pull request Sep 27, 2026
…untime overlay) landed on main

CMakeLists.txt: retro-hub gets both hub_title.cpp and retro_overlay. The
Retro-Runtime pin is main's d5146fa. build-local + ctest 15/15; the Pokemon
Stadium title app rebuilt on it (dev runner d5146fa), every kit gate passed,
and it ran from a clean directory.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant