Ship the 0.8.0 first-hour and campaign milestone
Add the campaign shell, pause-safe checkpoint resume, post-shift campaign continue, confirmed campaign reset, difficulty presets, searchable Help, content-matrix validation, recovery events, contextual dialogue, policy/debrief context and eligible-event previews. Extend persistence with atomic separate files and add campaign/checkpoint/tutorial smokes. Headless 247/247, Python 94/94, tutorial/campaign/session/scenario smokes green.
This commit is contained in:
1 parent
86332cd401
commit
aa51ee331e
38 files changed
+1361
-1144
No files matched your search
@@ -1336,3 +1336,134 @@ back when a provider rejects a request.
|
||||
records the selected model and ~$0.006 spend.
|
||||
- [x] Update `docs/asset-tooling.md`, `MEMORY.md`, `README.md` and `CHANGELOG.md`; the
|
||||
public catalogue picks the cheapest image+JSON model (`z-ai/glm-5.3-flash` at run time).
|
||||
|
||||
## Milestone 0.8.0 — First hour and content depth
|
||||
|
||||
Completed 2026-11-01. Tutorial, campaign/checkpoint resume, content validation, contextual dialogue,
|
||||
policy/debrief, difficulty/help and the expanded smoke matrix are in place.
|
||||
|
||||
Goal: a new player can learn the game inside the game, play a short campaign across the three
|
||||
venues, and see enough authored variety that a second shift does not feel like a replay.
|
||||
|
||||
### 0.8.1 First-shift tutorial
|
||||
|
||||
- [x] Write the tutorial beat sheet: menu → movement/look → focus and target cycling → action
|
||||
wheel → access inspection → polite direction → formal warning/body camera → radio →
|
||||
shift review. Eight beats and a safe compliant visitor are specified in
|
||||
[`docs/tutorial.md`](docs/tutorial.md).
|
||||
- [x] Add a tutorial state machine independent of the normal shift FSM. `Tutorial` in
|
||||
`src/game/tutorial.gd` owns the eight beats, accepts only the current beat's action,
|
||||
supports skip/restart and has deterministic headless tests. GameManager/UI wiring starts
|
||||
with the contextual-prompt task.
|
||||
- [x] Add contextual prompts that advance on the performed action, not on a timer. The
|
||||
non-blocking `TutorialOverlay` card updates from `Tutorial.beat_changed`; it is
|
||||
mouse-transparent, skippable with F1 and does not repeat after completion/skip.
|
||||
- [x] Stage a safe encounter with one compliant visitor; routine/scripted spawns are suppressed
|
||||
while the tutorial is active. The tutorial uses the real wheel, inspection, warning/body
|
||||
camera and radio panels.
|
||||
- [x] Persist tutorial completion/skip in `settings.json` and add a "Replay tutorial" action in
|
||||
Settings that clears both flags and restarts the Hollywood shift.
|
||||
- [x] Add localized tutorial strings (`tutorial.*` keys) and caption-ready prompt hooks in the
|
||||
overlay/state table.
|
||||
- [x] Add headless tutorial-state tests and `smoke_tutorial.gd`, covering prompts, the safe
|
||||
visitor, completion, settings persistence, replay and skip.
|
||||
|
||||
Tutorial complete (2026-11-01): the first-shift flow is wired end to end; normal
|
||||
scripted test/capture runs bypass it unless `--tutorial` is passed.
|
||||
|
||||
### 0.8.2 Campaign and session shell
|
||||
|
||||
- [x] Define campaign data separately from `VenueScenario`: `src/core/campaign.gd` owns venue
|
||||
order, shift number, completion, difficulty and the next venue.
|
||||
- [x] Add a campaign-select/continue screen showing the next shift/venue and previous grade;
|
||||
the existing venue buttons remain free-play/debug-compatible.
|
||||
- [x] Add a "Continue shift" path that resumes the paused checkpoint, including RNG, elapsed
|
||||
time, NPC/incident state, systems and door state.
|
||||
- [x] Add campaign status to the shift review with a Continue action for the next venue and a
|
||||
return-to-menu path; the review keeps retry and timeline controls.
|
||||
- [x] Persist campaign state (`campaign.json`) and add a confirmed Reset campaign action in
|
||||
Settings.
|
||||
- [x] Add Campaign unit tests plus `smoke_campaign.gd` covering resume, shift advancement, review
|
||||
continue and help.
|
||||
|
||||
### 0.8.3 Venue content matrix
|
||||
|
||||
- [x] Define the per-event content matrix in the authored event dictionaries (phase, kind, NPC
|
||||
type, intent, access override, hint/recovery path and weight).
|
||||
- [x] Add `ScenarioValidator`: unique IDs, existing profiles, valid phases/kinds, intent presence,
|
||||
minimum routine/scripted/recovery counts and phase coverage; all three venues pass.
|
||||
- [x] Each venue now has at least 12 events and 6 routine variants across the phase matrix;
|
||||
recovery events were added for all three venues.
|
||||
- [x] Add recent-scripted suppression and phase-aware weights in `EventScheduler`; routine
|
||||
traffic remains repeatable, rare threats keep their authored probability.
|
||||
- [x] Add one recovery event per venue (returning authorized guest, manager check) on top of the
|
||||
existing crowd-calming/reputation feedback.
|
||||
- [x] Add `EventScheduler.preview()` and wire it into the F debug overlay as the next eligible
|
||||
event list.
|
||||
- [x] Add content-matrix/no-repeat/spawn-multiplier tests; phase gating and authored-event
|
||||
reachability remain covered by the scheduler and scenario-content tests.
|
||||
|
||||
### 0.8.4 NPC dialogue and negotiation
|
||||
|
||||
- [x] Add `NpcProfile.context_lines` for reason/refusal/de-escalation/recognition/group lines,
|
||||
with deterministic `line_for()` selection and safe fallbacks.
|
||||
- [x] Expand authored profile context lines and keep selection seed-deterministic; no runtime LLM
|
||||
dependency.
|
||||
- [x] Wire Reason, polite/warning/blocking outcomes, recognition and reaction logs to context
|
||||
lines, with comply/leave vs argue/record differences visible in the HUD log.
|
||||
- [x] Reuse the existing crowd watch/flee reactions for group response rather than adding
|
||||
overlapping NPC chatter; nearby avatars react to aggression, responders and panic.
|
||||
- [x] Add deterministic context-line tests; authored strings remain in the existing localization
|
||||
table, with missing context falling back safely.
|
||||
- [x] Add distinct refusal/de-escalation/recognition lines for tourist and confused-visitor
|
||||
profiles and keep the existing venue-specific dialogue lines.
|
||||
|
||||
### 0.8.5 Objective, policy and debrief layer
|
||||
|
||||
- [x] Show the venue `policy_summary` in Help and in the shift review.
|
||||
- [x] Log a one-line phase objective when the shift phase changes; no quest log is added.
|
||||
- [x] The review already lists incidents, reputation modifiers and responder/investigation outcomes;
|
||||
policy and campaign-next context were added to make the judgment actionable.
|
||||
- [x] The shift review explains the grade, policy, highlights and campaign next step; the tutorial
|
||||
supplies the first-shift guidance.
|
||||
- [x] Existing incident/review tests cover evidence and missing/unknown outcome handling; the
|
||||
policy field is sourced directly from the validated scenario.
|
||||
|
||||
### 0.8.6 Save, resume and settings
|
||||
|
||||
- [x] Add separate `settings.json`, `campaign.json`, `shift_results.json` and versioned
|
||||
`shift_state.json` (schema version 1); the checkpoint deliberately omits tutorial UI state and
|
||||
scheduler event objects, restoring only RNG/system/NPC state.
|
||||
- [x] Write saves through a temporary file and atomic rename; malformed JSON loads as defaults and
|
||||
a failed write leaves the previous file intact.
|
||||
- [x] Settings merge over defaults so missing/older keys migrate in place; campaign and shift-state
|
||||
readers accept missing optional fields with safe defaults.
|
||||
- [x] Mid-shift checkpoint restores elapsed time, scheduler RNG, incident/evidence state, reputation,
|
||||
crowd, radio, NPC positions/access state, guard pose, flashlight/body camera and door lock;
|
||||
`smoke_campaign.gd` resumes and reaches the review.
|
||||
- [x] Add coordinator/incident snapshot round-trip tests and the campaign/checkpoint smoke; existing
|
||||
settings/shift-history persistence tests remain green.
|
||||
|
||||
### 0.8.7 Difficulty, pacing and help
|
||||
|
||||
- [x] Add easy/normal/hard presets adjusting spawn multiplier, NPC compliance tolerance and
|
||||
report-credibility strictness; escalation and emergency rules are unchanged.
|
||||
- [x] Expose difficulty in Settings; normal is the default and the values are documented in code.
|
||||
- [x] Add the standalone `HelpOverlay` covering controls, focus/wheel, access, body camera,
|
||||
radio and review, with the current venue policy.
|
||||
- [x] Help has a filter field and builds remappable-action rows from `InputBindings` at open time.
|
||||
- [x] Debug/event details stay behind F; normal HUD keeps the tutorial and phase objective concise.
|
||||
- [x] Settings defaults and persistence tests cover difficulty; help is generated from every
|
||||
`InputBindings.REMAPPABLE` action.
|
||||
|
||||
### 0.8.8 Verification and exit criteria
|
||||
|
||||
- [x] Add headless tests for tutorial progression, campaign state, content validation, dialogue,
|
||||
coordinator/incident snapshot round-trips and settings/difficulty defaults.
|
||||
- [x] Add `smoke_tutorial.gd` and `smoke_campaign.gd` covering tutorial completion/replay/skip,
|
||||
resumed shift, campaign venue transition and Help.
|
||||
- [x] Run the automated first-hour path (tutorial + campaign/resume smoke) end to end; the
|
||||
external five-person playtest is tracked in the 0.9.5 release-candidate milestone.
|
||||
- [x] Re-run headless/Python/smokes and update status, architecture, changelog, README and docs.
|
||||
- [x] Exit: tutorial + campaign first-hour path is in place, each venue validates a repeatable
|
||||
content matrix, checkpoint resume works, and the 0.8 test matrix is green.
|
||||
Reference in new issue
Block a user