# TODO ## Player control, focus ring, and radial action menu Design is in `PLAN.md` → "Player Control, Focus, and Action Menu (next pass)" and ADRs 0007–0010. Distribution follow-up (host `REQUIRE_SIGNIN_VIEW`) is deferred. ### Locomotion - [ ] Stop stealing WASD: wand off `W` (use wheel + optional `C`); allow/deny `A`/`D` only while inspect/wand is open; polite direction off `Q` as a required bind. - [ ] Accel/decel on walk; gravity only when airborne; `floor_snap_length` for the steps. - [ ] Mouse look only while captured and no modal UI is open. Freeze walk+look while the radial (and inspect/wand opened from it) is up. Recapture on close. - [ ] `Esc` closes the top modal first; with nothing open it still toggles mouse capture. ### Focus and head ring - [ ] Replace the 8 m hairline ray as the primary picker with a focus cone (range ~10 m, head inside a ~90 px / 10° circle around the crosshair; closest to center wins; occluded heads skipped). Keep `Tab` as the 12 m cycle. - [ ] Small grace so walk-bob does not drop focus. - [ ] Billboarded ring on the focused avatar `Head`; gold idle, brighter while the radial is open; one at a time. Optional `display_name` under the ring. No internal type name in the world. ### Radial HUD - [ ] New `src/game/ui/action_radial.gd` doughnut: open on LMB or `Space` when someone is focused. Opening click does not pick a slice. Slices (top, clockwise, de-escalation first): raise hand, point, head shake, polite direction, inspect, wand (grey if no wand), warning, block, radio assist. Emergency stays on `R` only. - [ ] Highlight by mouse angle, or `A`/`D` / arrows. Click slice or `Space` confirms. `Esc` / RMB closes with no action and no recorder event. - [ ] Inspect / wand / radio slices close the wheel then open the existing panels. Freeze until that panel closes. - [ ] Number keys `1`–`6` may remain as closed-menu shortcuts; they must not fire while the wheel is open. ### NPC display - [ ] Procedural rig: neck, shoes, hair cap from seed, two eye spheres so the head has a front. Keep props, height variation, walk bob, notice-head-turn. Collision capsule matches height. Named `Head` node stays the attach point. ### Input, copy, tests - [ ] Update `project.godot` input map (`action_menu`, `confirm`, `cancel` includes RMB, wand on `C`). Update `hud.controls` and the README table + smoke checklist. - [ ] Headless tests `src/test/tests/test_focus_and_radial.gd`: cone picks the centered head; highlight wrap; cancel writes no recorder event; `W` does not open wand. ## Distribution follow-up (findings + host config) Verified via API+host credentials (2026-10-31): - [x] Repo is **public** (`private:false`) and account has admin rights. - [x] Release `v0.2.1` now carries all five artifacts (portable binaries + NSIS installer + AppImage) — the two installers were missing after CI publish (script uploaded only the portables); `tools/publish_release.sh` fixed to include them and re-uploaded via API. - [ ] **Remaining host setting**: instance-wide `[service] REQUIRE_SIGNIN_VIEW=true` makes anonymous browsing/downloads redirect to login (API-confirmed repo is public; this is a server `app.ini` setting, not an API or repo option). Advised path for the host admin: set `REQUIRE_SIGNIN_VIEW = false` in `app.ini` under `[service]`, restart Gitea, then verify `curl -sI https://git.allucanget.biz/zwitschi/security-game/releases/tag/v0.2.1` returns 200 (not a login redirect) and an anonymous asset download succeeds. Alternative: mirror downloads (Itch.io / GitHub Releases) for anonymous users. ## Future Systems (design-level backlog) - [ ] Body-camera replay timeline in the shift review. - [ ] Venue selection startup menu (keyboard cycling with `V` is implemented). - [ ] IDE/editor-based GUT integration when a Godot editor workflow is introduced. ## Open Polish - [ ] Keep `%` placeholders stable in `Strings.fmt` when adding keys (positional formatting). ## Detailed Graphics — remaining performance items The visual pass is done (textures, rigs, HUD feedback — see `DONE.md`). Remaining work is performance hardening only. - [ ] Profile the crowd: ensure textured materials and props hold target frame rate around a busy entrance. - [ ] Add LOD or culling for distant NPCs/props if the crowd grows. ## Generated Asset Integration - [ ] Regenerate the AI asset set at role-specific aspect ratios and dimensions. - [ ] Audit, process, and wire every generated asset into the game runtime. - [ ] Add screenshot auditing and refresh the README screenshot gallery.