Implement TODO backlog: LATE phase fix, protester, CALL_SOMEONE, door lock, flashlight, persistence, navmesh, JSON localization, and release tooling
CI / headless-tests (push) Successful in 55s
CI / headless-tests (push) Successful in 55s
- Fix LATE shift phase (start 700s) so the violent-threat event is reachable - Add PROTESTER archetype (rules, profile, colors, events in public venues) - Add CALL_SOMEONE reaction (FSM -> ARGUING, influencer/trespasser/protester weights) - Door lock: DoorState core class, L binding, red/green visual indicator, locked doors thwart FORCE_ENTRY - Flashlight: G binding, SpotLight3D, perception radius bonus at evening/late - Persistence: save shift results via Save autoload, history + best score on review screen, round-trip test - Navigation: flat NavigationRegion3D navmesh, NavigationAgent3D path following with direct-movement fallback; steps made visual-only so NPCs reach entrance - Localization: strings moved to content/strings.en.json (loader keeps lookup/fmt signatures; coverage test over all keys) - Distribution: export_presets.cfg (Linux/Windows/macOS), tools/build_releases.sh, docs/RELEASING.md, prominent README Downloads section - Remove stale signal_bus.gd (invalid static-signal experiment) - Tests: 53 passing across 9 suites
This commit is contained in:
1 parent
c808165302
commit
1e972a7490
27 files changed
+1044
-340
No files matched your search
@@ -1,76 +1,16 @@
|
||||
# TODO
|
||||
|
||||
## Bug Fixes
|
||||
|
||||
### LATE shift phase never fires
|
||||
|
||||
- [ ] Add a `Rules.Phase.LATE` entry (e.g. `{"start_s": 900.0}`) to `shift_phases` in `hollywood_building()`, `joke_shop()`, and `tv_studio()` in `src/content/scenario_factory.gd`.
|
||||
- [ ] Confirm `violent_emergency_event` (tagged `Phase.LATE`, `time_range_s` 760–880) can now be pulled by `EventScheduler.pull_due`.
|
||||
- [ ] Add a test asserting the LATE-phase event is reachable (e.g. tick a coordinator past 900s and check the event pool is eligible).
|
||||
|
||||
## Missing PLAN Features — NPCs and Reactions
|
||||
|
||||
### PROTESTER archetype
|
||||
|
||||
- [ ] Add `PROTESTER` to `Rules.NpcType` and a `"Protester"` entry to `NPC_TYPE_NAMES` in `src/core/rules.gd`.
|
||||
- [ ] Add a protester profile in `ScenarioFactory.shared_profiles()` (id `"protester"`, temperament ~0.5, base_compliance ~0.4, reactions favoring ARGUE/IGNORE/RECORD).
|
||||
- [ ] Add a `TYPE_COLORS` entry for `PROTESTER` in `src/game/npc_avatar.gd`.
|
||||
- [ ] Add routine protester events (e.g. `"protest_gather"`, intent `"protest"`) to the Hollywood Boulevard and TV Studio event pools.
|
||||
- [ ] Add a scenario test asserting the protester profile exists and is referenced by an event.
|
||||
|
||||
### "Call someone else" NPC reaction
|
||||
|
||||
- [ ] Add `CALL_SOMEONE` to `Rules.Reaction` in `src/core/rules.gd`.
|
||||
- [ ] Handle `CALL_SOMEONE` in `NPCController._update_state_for_reaction` (e.g. transition to `ARGUING` or a new `CALLING` state).
|
||||
- [ ] Give relevant profiles (influencer, trespasser) a weight for `CALL_SOMEONE` in their `reactions_by_level`.
|
||||
- [ ] Add a reaction log line in `GameManager._react_to_outcome` and a `Strings` entry.
|
||||
- [ ] Add a test asserting `CALL_SOMEONE` can be rolled and updates the FSM.
|
||||
|
||||
## Missing PLAN Features — Equipment and Environment
|
||||
|
||||
### Door lock/secure mechanic
|
||||
|
||||
- [ ] Add a door state (locked/unlocked) to `WorldBuilder` (or a small `Door` node) with a visible indicator.
|
||||
- [ ] Add a player action + key binding (e.g. `L`) to toggle the door lock in `GameManager`.
|
||||
- [ ] Make `FORCE_ENTRY` reactions fail (or be delayed) while the door is locked; log the consequence.
|
||||
- [ ] Add a `Strings` entry and a headless test for the lock state transition.
|
||||
|
||||
### Flashlight interaction
|
||||
|
||||
- [ ] Add a flashlight toggle + key binding (e.g. `G`) in `GameManager`.
|
||||
- [ ] Attach a `SpotLight3D` to the guard that toggles with the flashlight.
|
||||
- [ ] Make the flashlight affect NPC perception at night (e.g. widen `AWARE_RADIUS` or raise notice probability when lit).
|
||||
- [ ] Add a `Strings` entry and a headless test for the perception effect.
|
||||
|
||||
## Persistence
|
||||
|
||||
### Persist shift results
|
||||
|
||||
- [ ] Call `Save.save_shift_result(review)` from `GameManager._on_shift_ended`.
|
||||
- [ ] Load past results (`Save.load_shift_results()`) and show a short history (count + last grade) on the shift review screen.
|
||||
- [ ] Add a test that a saved review round-trips through `Save` (or verify manually in the smoke test).
|
||||
|
||||
## Navigation
|
||||
|
||||
### Navmesh-based NPC movement
|
||||
|
||||
- [ ] Add a `NavigationRegion3D` with a baked navmesh covering the sidewalk, steps, and entrance in `WorldBuilder`.
|
||||
- [ ] Switch `NpcAvatar` from direct `move_and_slide` toward `target_position` to `NavigationAgent3D` path following.
|
||||
- [ ] Keep the per-intent waypoint and returning-trespasser re-targeting behavior working on the navmesh.
|
||||
- [ ] Verify NPCs route around the building/steps in a manual smoke test.
|
||||
|
||||
## Localization
|
||||
|
||||
### Move Strings to JSON
|
||||
|
||||
- [ ] Create a `res://` JSON file (e.g. `res://content/strings.en.json`) containing the current `Strings.TABLE` entries.
|
||||
- [ ] Load the JSON at startup and keep `Strings.lookup`/`Strings.fmt` signatures unchanged.
|
||||
- [ ] Update `test_strings.gd` to load from the JSON-backed table and confirm all keys still resolve.
|
||||
|
||||
## Future Systems (design-level backlog)
|
||||
|
||||
- [ ] Body-camera replay timeline in the shift review.
|
||||
- [ ] Long (10-15 minute) shift lengths and phase-based lighting.
|
||||
- [ ] Venue selection screen; export presets for desktop targets.
|
||||
- [ ] Long (10-15 minute) shift lengths and phase-based lighting (darkened evening / late phases).
|
||||
- [ ] Venue selection screen (wire `switch_scenario` to a startup menu).
|
||||
- [ ] CI packaging: upload `build/` artifacts to releases automatically on tags.
|
||||
- [ ] IDE/editor-based GUT integration when a Godot editor workflow is introduced.
|
||||
- [ ] Reduce RefCounted reference cycles (NPCController <-> FSM) noted in `MEMORY.md`.
|
||||
|
||||
## Open Polish
|
||||
|
||||
- [ ] Add venue-specific door-staff dialogue usage (scenario `door_staff_lines` is authored but not yet shown in the prototype UI).
|
||||
- [ ] Add a body/wand cooldown feel: wand screening currently has no reuse penalty; consider a short per-guest scan animation.
|
||||
- [ ] Add an escape-to-circuit handling note: `signals` in `Strings.fmt` are positional; keep `%` placeholders stable when adding keys.
|
||||
Reference in new issue
Block a user