- Venue-correct access artifacts (AccessLoadout) and screened-aware verify - Cone focus on NPC heads with billboarded ring + display name (ADR-0008) - Action wheel with de-escalation-first slices (ADR-0009); Esc/RMB cancel - Procedural NPC face/hair/neck/shoes (ADR-0010); named input actions - Fix GameManager parse error (radial typed as ActionRadial) - Fix first-person camera height and guard spawning inside the building - Move building volume back so the door/awning/marquee are visible - Pull the event scheduler once per simulated second; cap live NPCs - Regenerate README screenshots; update TODO/DONE/MEMORY/README; 77 tests Adds src/test/smoke_focus_radial.gd for the windowed focus/radial smoke.
6.3 KiB
TODO
Godot 4.3 prototype. Release v0.2.1 is live on the host. The working tree (uncommitted) has the access-loadout fix and the ADR-0007–0010 control pass; headless suite 77/77 and a windowed focus/radial smoke pass.
Host REQUIRE_SIGNIN_VIEW stays deferred.
World and presentation follow-ups (found during the control smoke)
- The skyline backdrop was removed:
assets/textures/ai/game_ready/skyline.pnghas an opaque black background, so the planes rendered as black slabs with window dots. Re-add the backdrop only with a transparent asset or a keyed shader. - Guard settles ~0.5 m above the ground after spawning on the landing. Check the capsule
offset and the spawn
y, and verify eye height while walking the steps. - Steps and the landing are visual-only (no collider). The guard walks through them; add simple step colliders or restage the landing so it does not intersect the walk path.
- Marquee text (
STEP LINE) is tiny from the sidewalk. Scale the Label3D up. - Focus ring and name tag are small at 2–3 m. Consider a larger torus / font after a real playtest.
- NPC crowd cap (
MAX_LIVE_NPCS) silently drops routine traffic at 16. Add a short despawn/lifetime for ordinary guests so the entrance does not fill up with standers.
Session shell
The game boots into a live 900 s shift. Save declares settings.json and never uses it.
V cycles venues by restarting the shift.
- Startup menu: pick venue, start shift, quit. Keyboard + click. Replaces
Vas the player-facing path (Vmay stay as a debug bind). - Pause overlay when
Escreleases the mouse (or a dedicated pause key): resume, restart shift, settings, quit to menu. - Settings: mouse look sensitivity, persist through
Save/settings.json. Load on boot. - Shift review "Run another shift" returns to the venue menu, not a silent restart of the same scenario.
Remaining PLAN verbs (radial exists)
- Eye contact as a Level 1 action (PLAN / glossary). Distinct from raise-hand. Add a radial slice if it ships.
- "I recognize this person" is a player decision recorded as evidence, not a pre-attached
artifact on every staff/guest type. Staff still auto-recognize when
override_accessis empty (AccessLoadout). - Formal warning can activate the body-camera / security-light flag (PLAN Level 2). Overlay is currently always on; toggling should write an incident event.
- Blocking stations the guard between the person and the door (PLAN Level 3). Today it only
sends
apply_player_action(BLOCKING). - "Request reason for entry" as a Level 3 ask, with a short NPC reply from
dialogue_lines.
Crowd presentation
CrowdSystem is a mood/attention float. PLAN wants people watching, gathering, and panicking.
- On
aggressive_behavior/emergency_responder, nearby idle NPCs stop and face the incident (rubberneck). Oncrowd_panic, they move away from the door. - Profile a busy entrance with textured materials and props; add LOD or culling for distant NPCs if frame time drops.
Emergency aftermath
Responder outcomes (command / restraint / evacuation / arrest) are log lines. PLAN also
wants evacuation, a closed street, and an investigation when the call was unjustified.
evacuationoutcome actually clears the entrance (NPCs leave, door stays locked).- Unjustified emergency (low danger, no weapon) writes an investigation note on the shift review and applies the existing false-report / reputation hit.
- Review copy names the responder outcome, not only battery and crowd %.
Body-camera replay
- Shift review: a timeline of recorded incident events (ADR-0005 already stores them). Scrub or step through; no live 3D replay required in the first version.
NPC theater
Intents sit / photo / film / perform already pick waypoints. ADR-0010 rig (face/hair)
is in the working tree. Bodies still idle-stand at those spots.
- Sit pose at
steps_end. Photo: brief raise of the influencer/tourist prop. Performer stays put and plays the hat/sign.
Audio
AudioFeedback is sine beeps. DONE called that "crowd ambience"; it is not.
- Loop a low crowd bed that rises with
CrowdSystem.mood. - Radio open/close crackle on the existing radio panel, still headless-safe (no-op without an audio server).
Accessibility
- Escalation colors that still read in grayscale (shape or label, not hue alone).
- HUD font scale in settings.
Scenario content still missing vs PLAN lists
- Joke Shop: guest on the reservation list without ID; borrowed/mismatched ID; guest refuses wand screening; late arrival during a performance.
- Studio: filming-boundary repeat (influencer ignores a posted line); celebrity-arrival
crowd spike (more rubberneckers, not only one
arrivespawn). - Building: "activate body camera" and "request reason" once those verbs exist, used in at least one authored event.
Documentation drift
- README controls table, smoke checklist, test count, and implemented/not-yet lists refreshed for the control pass (77 tests).
PLAN.mdTech Stack / Planned Commands still say GUT and GitHub Actions; the project usessrc/test/test_runner.gdand.gitea/workflows/build.yml.- MEMORY: door_staff_lines log through
GameManager; 300 s default removed.
Distribution follow-up (host config, deferred)
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). - Remaining host setting: instance-wide
[service] REQUIRE_SIGNIN_VIEW=truemakes anonymous browsing/downloads redirect to login. Host admin:REQUIRE_SIGNIN_VIEW = falseunder[service]inapp.ini, restart Gitea. Alternative: mirror downloads.
Open Polish
- Keep
%placeholders stable inStrings.fmtwhen adding keys (positional formatting).
Tooling (when an editor workflow exists)
- IDE/editor-based GUT integration. Until then the custom headless runner stays.
- Optional later: author venues as
.tresresources instead ofScenarioFactoryfunctions.