Left-click triggers flash overlay to white, AABB check against all NPC bounds, yellow highlight on captured NPCs. Game state transitions to Capturing then ShowingPhoto.
viewfinder.png
400x200 viewfinder rectangle following mouse
View
Camera Viewfinder
The 400×200 rectangle is the player's only tool. Any NPC within the frame at click time is considered photographed.
photo_zoom.gif
sf::View zoom sequence after capture
View
Photo Zoom Sequence
sf::View zooms toward the capture position then returns to default. Game continues running - NPC positions are unaffected.
NPC behaviours and phases
phase_intro.gif
All NPCs wandering - Introduction phase
View
Introduction Phase
All NPCs on WanderBehavior. Random angle offset every 1.5s. Peaceful coexistence before the first capture.
phase_firstcapture.gif
Hat NPCs + fleeing NPCs - FirstCapture phase
View
FirstCapture Phase
Hat sprites assigned to a percentage of NPCs. Non-hat NPCs within radius receive FleeBehavior pointing away from hat-wearers.
phase_tension.gif
Flocking NPCs + AngryNPC - Tension phase
View
Tension Phase
FlockBehavior applied - NPCs follow their faction leader. AngryNPC chases hat-wearers at 1.3× speed then screams for 2s.
Special entities
angry_scream.gif
AngryNPC screaming state - movement locked 2s
View
AngryNPC - Screaming State
Internal state machine: Chasing → Screaming (movement locked, 2s) → Wandering (2s) → Chasing. Bug fix: state check prevents simultaneous movement and screaming.
journalist.gif
Journalist entity - sprite swap on state change
View
Journalist Entity
Two-state machine: Wandering (FennelHat sprite) / Idle (Journalist sprite). Photographing the Journalist ends the game.
Menu and UI
main_menu.png
Main menu - Play / About / Exit buttons
View
Main Menu
std::vector<unique_ptr<Button>> owned by Menu. Hover state via contains() on sf::RectangleShape. ButtonID enum per button.
caption.gif
NPCReaction state - narrative caption
View
Narrative Caption
NPCReaction state displays caption text on a black screen after each special entity is photographed.