Files
security-game/TODO.md
T

4.0 KiB
Raw Blame History

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.