- 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.
4.6 KiB
4.6 KiB
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 + optionalC); allow/denyA/Donly while inspect/wand is open; polite direction offQas a required bind. - Accel/decel on walk; gravity only when airborne;
floor_snap_lengthfor 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.
Esccloses 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
Tabas 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. Optionaldisplay_nameunder the ring. No internal type name in the world.
Radial HUD
- New
src/game/ui/action_radial.gddoughnut: open on LMB orSpacewhen 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 onRonly. - Highlight by mouse angle, or
A/D/ arrows. Click slice orSpaceconfirms.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–6may 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
Headnode stays the attach point.
Input, copy, tests
- Update
project.godotinput map (action_menu,confirm,cancelincludes RMB, wand onC). Updatehud.controlsand 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;Wdoes not open wand.
Distribution follow-up (findings + host config)
Verified via API+host credentials (2026-10-31):
- Repo is public (
private:false) and account has admin rights. - Release
v0.2.1now 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.shfixed to include them and re-uploaded via API. - Remaining host setting: instance-wide
[service] REQUIRE_SIGNIN_VIEW=truemakes anonymous browsing/downloads redirect to login (API-confirmed repo is public; this is a serverapp.inisetting, not an API or repo option). Advised path for the host admin: setREQUIRE_SIGNIN_VIEW = falseinapp.iniunder[service], restart Gitea, then verifycurl -sI https://git.allucanget.biz/zwitschi/security-game/releases/tag/v0.2.1returns 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
Vis implemented). - IDE/editor-based GUT integration when a Godot editor workflow is introduced.
Open Polish
- Keep
%placeholders stable inStrings.fmtwhen 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.