Implement prototype: venue-driven simulation core, scenarios, tests, and playable entrance scene
CI / headless-tests (push) Canceled after 49s

- Godot 4.3 project scaffold with first-person guard, procedural world,
  interaction HUD, access inspection, radio forms, debug overlay, shift review
- Simulation core: ShiftCoordinator, VenueScenario, EventScheduler, NPCController/FSM,
  AccessVerifier, EscalationManager, RadioSystem, IncidentRecorder,
  ReputationEvaluator, CrowdSystem, EventBus
- Three authored scenarios (Hollywood Blvd building, The Joke Shop, TV studio)
- Custom headless test runner (25 tests) replacing editor-dependent GUT,
  plus GitHub Actions CI
- Documentation workflow live: README, PLAN (tech stack), TODO/DONE, MEMORY
This commit is contained in:
zwitschi committed 2026-10-31 11:37:54 +01:00
1 parent e23f284ad4
commit 439e0a4281
45 files changed
+4368 -7

No files matched your search

+58 -7
View File
@@ -6,7 +6,7 @@ The central design goal is simple:
> The player wins by choosing the lowest level of escalation that keeps everyone safe.
This is a planned game project. The repository currently contains the game design, architecture documentation, and technical plan. The selected engine is Godot 4 with GDScript; a playable prototype has not yet been implemented.
The project is under active development. The design and architecture are documented, and a playable prototype vertical slice exists (Godot 4.3 + GDScript): a procedural Hollywood Boulevard entrance, a first-person guard, simulated NPCs with intents and reactions, the six-level escalation model, access inspection and admission decisions, radio calls with credibility checks, reputation, crowd mood, and an end-of-shift review.
## Game Overview
@@ -104,15 +104,45 @@ The architecture maps onto Godot 4 nodes, scenes, and custom resources as descri
### Setup
1. Install the Godot 4.x editor.
2. (Once the project is scaffolded) open the project: `godot --editor --path .`
1. Download the Godot 4.3 editor (official build) and put `godot` on your PATH.
2. Open or run the project from this directory.
### Run and Test
- Run the game: `godot --path .`
- Run tests headlessly via GUT (configured during project setup).
```bash
# Open in the editor
godot --editor --path .
These commands apply after `project.godot` and the Godot folder structure exist.
# Run the game
godot --path .
# Headless smoke boot (120 frames then exit)
godot --headless --path . --quit-after 120
# Run all unit tests headlessly (exit code 0 = pass)
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
```
The unit test runner is the project's own lightweight harness (no editor plugin required) so CI can run it without the editor.
### Controls
| Input | Action |
|---|---|
| W/A/S/D + mouse | Move and look |
| Esc | Release / capture mouse |
| 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 |
| A / D | Allow / deny entry during inspection |
| F | Toggle debug overlay |
## Architecture
@@ -283,7 +313,28 @@ Architecture decisions are recorded as ADRs:
## Development Status
The project is in the pre-prototype stage: the design and architecture are documented, Godot 4 is the selected engine, and the next milestone is to create a minimal venue prototype implementing one complete NPC interaction from observation through shift review.
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: 25 passing (access rules, escalation, radio cooldown/battery, NPC reaction determinism, scenario data, full-shift simulation)
- First-person prototype with interaction HUD, access inspection, radio report form (incl. emergency hold-to-confirm), debug overlay, and shift review
Not yet implemented: wand-screening interaction, dispatched responder avatar in the world, dialogue tone picker, localization, audio, editor-based tooling.
### 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. `F` toggles the debug overlay with NPC states and shift stats.
10. When the shift timer reaches 0, the shift review screen shows grade and incident summary.
## Development Workflow