Skip to content

feat: add a guided tour to the session menu - #144

Merged
lippdev merged 3 commits into
mainfrom
feat/session-menu-tour
Oct 10, 2026
Merged

lippdev merged 3 commits into
mainfrom
feat/session-menu-tour

Conversation

@lippdev

@lippdev lippdev commented Oct 10, 2026

Copy link
Copy Markdown
Owner

The session menu has two ways out, Back to the PC and Exit Console Mode, and nothing on screen said how they differ. This adds an optional guided tour that explains every option.

What it does

  • Offered once: the first time the menu opens (in a session or the preview), after the entrance animation, a card asks whether to take the tour. A takes it, B declines; either answer stores SessionMenuTourDone so it isn't offered again. If the menu is closed while the invite is up, it's offered again next time.
  • Spotlight + bubble: the menu dims except the rows of the current stop (outlined; adjacent rows share one outline). A bubble beside them shows "n of N", the title and the explanation. A / → next, ← back, B leaves; while the tour is up, no press reaches the menu underneath. On smaller screens the side panel scrolls to the highlighted rows.
  • Stops: Back to the game → ControlFS → Volume → Screen and sound → FPS (only when the FPS rows are shown) → Windows → Back to the PC / Close menu → Exit Console Mode. In the preview, the stops about changes and the ways out say what happens there (nothing is restored).
  • Replay: Y (△) or F1 in the menu (a new "Y Tour" hint in the hint bar), and Settings → "Session menu tour" in both the desktop and the Console interface (opens the menu as a preview with the tour running).
  • Select + Y: Y is ignored while it's part of a held controller shortcut, so closing the menu with the suggested Select + Y doesn't flash the tour on the way out.

Code

  • Services/SessionMenuTour.cs (pure, linked into the tests): the stops, progress, text keys per stop and preview, and the Y-vs-chord rule.
  • ViewModels/MainViewModel.SessionTour.cs: tour state and commands; SessionMenuWindow: the veil with even-odd holes, the rings, bubble placement, pad/keyboard handling.
  • Strings in pt-BR, en-US and es-ES; changelogs, both guides, and manual checks in docs/TESTING.md ("Tour guiado do menu").

Verification

  • dotnet test: 362 passed, including the new SessionMenuTourTests.
  • The app builds locally on Windows (Debug x64, 0 errors); CI builds it too.
  • Not yet checked on screen: the layout of the spotlight and the bubble, and the controller behaviour, are in the docs/TESTING.md checklist.

🤖 Generated with Claude Code

lippdev and others added 2 commits October 10, 2026 12:16
The first time the session menu opens it offers an optional tour that
dims the menu, outlines the rows of each stop and explains them in a
bubble beside them, including what Back to the PC and Exit Console Mode
really do. Y (Triangle) or F1 in the menu and a Settings entry show it
again. Y is ignored while it is part of a held shortcut, so closing the
menu with Select + Y doesn't start it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

@pullfrog pullfrog Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Important

The staggered menu-shortcut chord can briefly start the tour before closing the menu.

Reviewed changes This review covers the guided session-menu tour, its controller and keyboard input, persistence, settings entry points, localization, documentation, and tests.

  • Guided tour flow Adds the first-run invitation, step navigation, spotlight overlay, and replay from the menu or settings.
  • Tour state and coverage Persists completion and tests stop ordering, progress, localization keys, and shortcut detection.

Pullfrog  | Fix all ➔ | Fix 👍s ➔ | View workflow run | Using gpt-6-luna | 𝕏

if (!Animate) return;
try
{
if (opening)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This one-time 150 ms snapshot can miss the configured menu chord when Y is pressed first and Select follows later; the global chord fires after 250 ms of holding the complete combo, so the tour can open and then be dismissed by that same shortcut. Please keep Y pending until the chord can no longer complete, rather than deciding from this early sample.

Technical details
# Avoid racing the menu shortcut

## Affected sites
- [SessionMenuWindow.xaml.cs:601-604](https://github.com/lippdev/consolemode/blob/25a61e2ea277f1b01280f29694fc177aaee02b61/src/ConsoleMode/SessionMenuWindow.xaml.cs#L601-L604) — waits 150 ms, then checks the currently held buttons only once.
- [App.xaml.cs:171-175](https://github.com/lippdev/consolemode/blob/25a61e2ea277f1b01280f29694fc177aaee02b61/src/ConsoleMode/App.xaml.cs#L171-L175) — the global session-menu chord triggers after 250 ms of holding the full configured mask.

## Required outcome
- A Y press that becomes part of the configured menu chord must not start the tour, even when the chord's other button is pressed more than 150 ms later.

# Conflicts:
#	CHANGELOG.en-US.md
#	CHANGELOG.md
#	src/ConsoleMode/SessionMenuWindow.xaml

@pullfrog pullfrog Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ℹ️ No new issues found in this delta; the prior review thread remains open.

Reviewed changes This review covers the merge from main since the prior Pullfrog review, including the FPS-counter picker integration in the session menu.

  • FPS picker wiring Routed the FPS overlay row through the new picker and detached its refocus event when the menu closes.
  • Release notes Preserved the tour entry and incorporated the FPS-counter release notes in both changelogs.

Pullfrog  | Fix it ➔ | View workflow run | Using gpt-6-luna | 𝕏

@lippdev
lippdev merged commit b544a71 into main Oct 10, 2026
5 checks passed
@lippdev lippdev mentioned this pull request Oct 10, 2026
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