Implement control pass: focus cone, action wheel, named inputs, boot fixes
- 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.
This commit is contained in:
1 parent
69484866db
commit
f11b441c07
28 files changed
+1433
-249
No files matched your search
@@ -201,6 +201,9 @@ godot --headless --path . --script res://src/test/test_runner.gd
|
||||
|
||||
# Save a screenshot to user:// (windowed)
|
||||
godot --path . --script res://src/test/take_screenshot.gd
|
||||
|
||||
# Windowed control smoke: focus ring + action wheel, saves PNGs, exits 1 on failure
|
||||
godot --path . --script res://src/test/smoke_focus_radial.gd
|
||||
```
|
||||
|
||||
The unit test runner is the project's own lightweight harness (no editor plugin required) so CI can run it without the editor.
|
||||
@@ -210,15 +213,18 @@ The unit test runner is the project's own lightweight harness (no editor plugin
|
||||
| Input | Action |
|
||||
| --- | --- |
|
||||
| W/A/S/D + mouse | Move and look |
|
||||
| Esc | Release / capture mouse |
|
||||
| Space / left click | Action wheel for the focused person |
|
||||
| A / D or ←/→ | Step through the action wheel (while it is open) |
|
||||
| Space / left click | Confirm the highlighted action (while the wheel is open) |
|
||||
| Esc / right click | Close the top panel; Esc with nothing open releases / captures the mouse |
|
||||
| 1 / 2 / 3 | Quick gestures without the wheel: raise hand, point, head shake (Level 1) |
|
||||
| Q | Polite direction (Level 1) |
|
||||
| 1 / 2 / 3 | Simple gestures: raise hand, point, head shake (Level 1) |
|
||||
| 4 | Formal warning (Level 2) |
|
||||
| 5 | Blocking and positioning (Level 3) |
|
||||
| 6 | Security assistance radio (Level 4) |
|
||||
| R | Emergency radio, hold on-screen button ~1.6s (Level 5) |
|
||||
| E | Inspect access artifacts / close inspection |
|
||||
| W | Handheld wand screening (wand venues only) |
|
||||
| C | Handheld wand screening (wand venues only) |
|
||||
| A / D | Allow / deny entry during inspection or wand check |
|
||||
| V | Cycle venue: Hollywood Blvd → The Joke Shop → TV Studio (restarts shift) |
|
||||
| Tab | Cycle target among nearby NPCs (aim-free alternative) |
|
||||
@@ -247,28 +253,31 @@ Implemented so far:
|
||||
- Godot 4.3 project scaffold, input map, procedural world builder
|
||||
- Venue-driven simulation core: `ShiftCoordinator`, `VenueScenario`, `EventScheduler`, `NPCController` + FSM, `AccessVerifier`, `EscalationManager`, `RadioSystem`, `IncidentRecorder`, `ReputationEvaluator`, `CrowdSystem`
|
||||
- Three authored scenarios (Hollywood Boulevard building, The Joke Shop, Late Night TV Studio) with access policies, NPC archetypes, and event pools
|
||||
- Headless unit tests: **52 passing** (access rules, escalation, radio cooldown/battery, NPC reaction determinism, door lock, flashlight perception, persistence round-trip, navmesh, scenario data, full-shift simulation, wand screening, responder dispatch, localization strings)
|
||||
- Headless unit tests: **77 passing** (access rules and venue-correct access loadout, escalation, radio cooldown/battery, NPC reaction determinism, door lock, flashlight perception, persistence round-trip, navmesh, scenario data, full-shift simulation, wand screening, responder dispatch, localization strings, focus cone and action wheel)
|
||||
- Simulation extras: protester archetype, CALL_SOMEONE reaction, door lock/secure mechanic (visual indicator), flashlight with night perception bonus, LATE shift phase reaching the violent-threat event
|
||||
- First-person prototype with interaction HUD, access inspection, wand screening, radio report form (incl. emergency hold-to-confirm), dispatched responder avatars, aim-free targeting, venue cycling between all three scenarios, color-coded escalation feedback, procedural audio cues, navigation-mesh NPC paths, JSON-backed localized strings, persisted shift history, debug overlay, and shift review
|
||||
- Control pass: focus cone on NPC heads with a billboarded gold ring and name, action wheel (LMB/Space) with de-escalation-first slices, mouse-look freeze while a panel is open, acceleration-based walking, and named input actions (`action_menu`, `confirm`, `cancel`, `inspect`, `wand`)
|
||||
- Visual polish pass (v0.2.0): phase-based lighting (sun/sky/ambient per shift phase), street lamps with night-mode bulbs and omni lights, glowing marquee signage, crosswalk, planters and low-poly street trees, NPC height/brightness variety, denser routine traffic — day and late-night screenshot sets
|
||||
- Assets pass: authored textures in `assets/textures/` (brick facade, concrete, asphalt, awning, skyline, vignette, HUD icons, access-card art) generated by `tools/generate_textures.py`, soft sun shadows, humanoid NPC rigs with archetype props + procedural walk bob and attention head-turn, inspection artifact cards, escalation vignette, mode icons, and a body-camera overlay (REC + shift clock)
|
||||
|
||||
Not yet implemented: body-camera replay timeline, venue selection startup menu, editor-based GUT integration, and crowd performance profiling/LOD (see `TODO.md`).
|
||||
Not yet implemented: body-camera replay timeline, venue selection startup menu, pause/settings shell, eye-contact and request-reason verbs, crowd rubbernecking, emergency aftermath, editor-based GUT integration, and crowd performance profiling/LOD (see `TODO.md`).
|
||||
|
||||
### Smoke Test Checklist
|
||||
|
||||
1. `godot --path .` starts the game without script errors.
|
||||
2. The guard moves and looks around; the building, steps, and sidewalk are visible.
|
||||
3. NPCs spawn and approach the entrance during the first minutes.
|
||||
4. Aiming at an NPC shows its archetype and intent in the HUD.
|
||||
5. Pressing `Q` produces a reaction log entry and reputation feedback.
|
||||
6. `E` opens access inspection showing artifacts and policy result; `A`/`D` record a decision.
|
||||
7. `6` opens the assistance form; submitting shows dispatch feedback.
|
||||
8. `R` opens the emergency form; the button must be held ~1.6s or the call cancels.
|
||||
9. `G` toggles the flashlight (indicator appears in the HUD); `L` toggles the door lock (indicator turns red when locked).
|
||||
10. `F` toggles the debug overlay with NPC states and shift stats.
|
||||
11. NPCs route around the building using the navigation mesh (no stuck-at-wall behavior during a smoke run).
|
||||
12. When the shift timer reaches 0, the shift review screen shows grade, incident summary, and persisted shift history.
|
||||
4. Looking at an NPC inside the focus cone shows a gold head ring, the person's name, and the HUD target line.
|
||||
5. `Space` or left click opens the action wheel; `A`/`D` highlight a slice, `Space` confirms it, `Esc`/right click cancels without a log entry.
|
||||
6. `E`/`C` open the inspection/wand panels from the wheel and freeze movement until they close; walking never fires the wand.
|
||||
7. Pressing `Q` produces a reaction log entry and reputation feedback.
|
||||
8. `E` opens access inspection showing venue-correct artifacts and policy result; `A`/`D` record a decision.
|
||||
9. `6` opens the assistance form; submitting shows dispatch feedback.
|
||||
10. `R` opens the emergency form; the button must be held ~1.6s or the call cancels.
|
||||
11. `G` toggles the flashlight (indicator appears in the HUD); `L` toggles the door lock (indicator turns red when locked).
|
||||
12. `F` toggles the debug overlay with NPC states and shift stats.
|
||||
13. NPCs route around the building using the navigation mesh (no stuck-at-wall behavior during a smoke run).
|
||||
14. When the shift timer reaches 0, the shift review screen shows grade, incident summary, and persisted shift history.
|
||||
|
||||
## Development Workflow
|
||||
|
||||
|
||||
Reference in new issue
Block a user