What it's built on.

C++17 and SFML 3. C++17's std::unique_ptr, std::optional, and move semantics enabled clean ownership transfer throughout the codebase - especially in the NPCBehaviour swap and PhaseManager factory method. SFML 3's sf::View system provided the mechanism for the photo zoom sequence without affecting game world logic.

C++17
RAII, std::unique_ptr, std::optional, std::vector, move semantics, Rule of Zero
SFML 3
Windowing, 2D rendering, audio, input. sf::View for dual-view camera system and photo zoom.
STL
std::vector for NPC and Button collections. std::unique_ptr for all owned components. std::string throughout.
CMake
Build configuration and cross-platform dependency management.
Visual Studio
IDE and debugger used throughout development. Used to identify the simultaneous move-and-scream bug in AngryNPCBehavior.
Strategy Pattern AI
NPCBehaviour hierarchy. Wander, Flee, Flock, AngryNPC, Journalist - all implementing calculateMovement().
Factory Method
PhaseManager::createSpecialEntity() constructs phase-specific entities and returns ownership via unique_ptr.
Sprite Sheets
3-frame horizontal sprite sheets for all NPCs. Custom Animation class manages playback at 0.1s per frame.

Sources cited.

Primary design reference
Nystrom, R. (2014). Game Programming Patterns. Genever Benning.
AI and behaviour
Millington, I. (2019). Artificial Intelligence for Games. 3rd ed. CRC Press.
Emergent behaviour and steering
Shiffman, D. (2012). The Nature of Code. Self-published.
Software engineering
Gamma, E., Helm, R., Johnson, R. and Vlissides, J. (1994). Design Patterns: Elements of Reusable Object-Oriented Software. Addison-Wesley.
Libraries
SFML Development Team. SFML 3.0 - Simple and Fast Multimedia Library. 2024.