Mid-capture flash
View
Capture - Shutter Flash
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 gameplay
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
View
Photo Zoom Sequence
sf::View zooms toward the capture position then returns to default. Game continues running - NPC positions are unaffected.
Introduction phase
View
Introduction Phase
All NPCs on WanderBehavior. Random angle offset every 1.5s. Peaceful coexistence before the first capture.
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.
Tension phase
View
Tension Phase
FlockBehavior applied - NPCs follow their faction leader. AngryNPC chases hat-wearers at 1.3× speed then screams for 2s.
AngryNPC screaming
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 entity
View
Journalist Entity
Two-state machine: Wandering (FennelHat sprite) / Idle (Journalist sprite). Photographing the Journalist ends the game.
Main menu
View
Main Menu
std::vector<unique_ptr<Button>> owned by Menu. Hover state via contains() on sf::RectangleShape. ButtonID enum per button.
Caption display
View
Narrative Caption
NPCReaction state displays caption text on a black screen after each special entity is photographed.