Files
security-game/TODO.md
T
zwitschi 2b631ae6d9 Add ADRs 0007–0010 for locomotion, focus ring, radial menu, NPC presentation
- 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.
2026-10-31 15:04:12 +01:00

4.6 KiB
Raw Blame History

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):

  • Repo is public (private:false) and account has admin rights.
  • 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.