To create a polished and performant experience, we employed several key techniques.

  • Singletons: We used the Singleton pattern to manage universal data and logic, including GameState (tracking global states like pause), DebugGui (displaying debug messages), and InputManager (processing player input with features like rebinding and deadzone management).

  • Easing Functions: To enhance player input and animations, we implemented static polymorphism for templated easing functions, including ease-in, ease-out, and ease-in-out effects.

  • Data Layout: We optimized for data locality and reduced cache misses through Hot/Cold Splitting (separating frequently and infrequently accessed data) and Structure of Arrays (organizing related data into homogeneous arrays).

  • Object Pooling: To reduce memory overhead from frequent object creation and destruction (e.g., for particles), we implemented an object pooling system.

  • Coupling and Cohesion: We maintained a high degree of functional cohesion in our modules and applied the Service Locator pattern to decouple modules, providing centralized access to shared services and improving maintainability.

Before the Flood is a 3D first-person shooter developed to showcase our team's expertise in creating a dynamic, physics-driven gameplay experience. This project demonstrates our proficiency in advanced game mechanics, robust input handling, and optimization techniques. While the code is proprietary, this framework highlights my skills in systems programming and collaborative game development. My specific contributions included the development of the AI and the implementation of object spawning systems.

Technical Design & Architecture

We built the application using a component-system architecture to ensure modularity, performance, and scalability. This approach separates data (components) from logic (systems), allowing for efficient data-oriented design.

  • Components: These store data and include basic validation. For example, physics components manage resources during their lifecycle.

  • Systems: We designed specialized systems to handle different logic categories, such as Update, PausedUpdate, Render, and ImGui. A central scheduler manages the execution of these systems within the game loop.

  • Menus: A factory pattern was implemented to manage complex menu states and transitions. Menu scenes inherit from an abstract interface, simplifying input handling and rendering logic.

Key Techniques & Optimization

Before the Flood: FPS Game Framework

Due to legal restrictions, the code for this project is not available.