- 0007: input layers so WASD/look never fire person-verbs; freeze while modal - 0008: cone focus + billboarded head ring; no type names in the world - 0009: doughnut action menu (LMB/Space open, click or A/D then Space, Esc/RMB cancel); emergency stays on R - 0010: keep procedural rigs, add face/hair/neck; no Mixamo this pass Linked from architecture.md, PLAN.md, TODO.md, MEMORY.md.
92 lines
4.6 KiB
Markdown
92 lines
4.6 KiB
Markdown
# 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.
|