# ADR-0009: Radial action menu - **Status:** Accepted - **Date:** TBD ## Context NPC verbs in the prototype live on `Q`, `E`, `W`, `1`–`6`, and `R`. That is a cheat sheet. It also collides with walk keys (ADR-0007). The design wants the player to look at a person (ADR-0008) and then choose the lowest useful action, not memorize a number row. Inspection, wand screening, and radio already have their own panels. Emergency radio already has a hold-to-confirm on `R` because a misclick is costly. Those panels should stay. What is missing is a single, visible way to pick the verb. ## Decision When someone is in focus, **left mouse button** or **Space** opens a round doughnut menu in the center of the screen. The click that opens it does not pick a slice. If nobody is in focus, do not open; keep the existing "aim first" log line. Slices, clockwise from the top, lowest escalation first: 1. Raise hand (stop / wait) 2. Point away 3. Head shake 4. Polite direction 5. Inspect access 6. Wand (grey if the venue has no wand) 7. Formal warning 8. Block 9. Radio assist Emergency is **not** on the wheel. It stays on `R` with the existing hold-to-confirm panel. While the menu is open, walk and look freeze (ADR-0007) and the cursor is visible. Highlight follows the mouse angle over the ring, or steps with `A` / `D` or the left / right arrows, wrapping around. The center shows the focused person's `display_name`. **Confirm:** click a slice, or `Space` on the highlighted slice. The menu closes, the mouse is recaptured, and that action runs. Inspect, wand, and radio assist close the wheel and then open the existing panels. Walk and look stay frozen until that panel closes. **Cancel:** `Esc` or right mouse button. The menu hides. No action runs. No recorder event. Focus and the head ring stay. The mouse is recaptured. Number keys `1`–`6` may remain as shortcuts when the wheel is closed, so existing smoke tests still work. They must not fire while the wheel is open. ## Consequences ### Positive - The player sees the verbs in de-escalation order instead of recalling a number row. - Mouse and keyboard both work (click, or arrows / `A`/`D` then Space). - Cancel is explicit and leaves no incident noise. - Emergency cannot be picked by a bad slice click. - Inspect, wand, and radio keep the panels already tested. ### Negative - Nine slices is dense on a 1280×720 view. Labels must stay short. - Freeze-until-panel-closes stops the player sidestepping during an ID check. - Keeping `1`–`6` as hidden shortcuts can confuse if the README leads with them. Document the wheel first. ## Alternatives considered - **Hold-to-open, release-to-confirm (GTA / Destiny):** Rejected. The requested input is click or Space to open, then click or Space to confirm, with Esc / RMB to abort. That is a toggle, not a hold. - **Vertical list / command menu:** Rejected because a round layout around a focused person matches the head ring and reads faster in a crowd. - **One context-sensitive Use key:** Rejected; the game is about choosing among levels, not a single default verb. - **Emergency on the wheel:** Rejected because a misclick would dispatch armed response. ADR-0002 already keeps that path rare and confirmed. - **Drop number-key shortcuts immediately:** Deferred. They remain as a closed-menu fallback until the wheel is proven in play.