Implement prototype: venue-driven simulation core, scenarios, tests, and playable entrance scene
CI / headless-tests (push) Canceled after 49s
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:
1 parent
e23f284ad4
commit
439e0a4281
45 files changed
+4368
-7
No files matched your search
@@ -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
|
||||
|
||||
|
||||
Reference in new issue
Block a user