Files
security-game/TODO.md
T

77 lines
4.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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.
- [ ] IDE/editor-based GUT integration when a Godot editor workflow is introduced.
- [ ] Reduce RefCounted reference cycles (NPCController <-> FSM) noted in `MEMORY.md`.