Custom Game Engine
[Game Development] | [Software Development]

Description
This is a commercial-strength game engine that I developed to support a variety of game genres using C++ and the Simple DirectMedia Layer 2 (SDL2) library.
I studied essential engine systems and concepts such as game loops, timing systems, scripting, error logging, and networking, examining how each contributes to building robust and scalable gameplay experiences. I completed a series of games to demonstrate the flexibility of my engine.

Game 1: Network Platformer
This is a simple platformer that showcases network co-op. In this example, I am running the server and two clients, one for each player.
All the moving platforms are being sent over the network server, along with the location of the other player from a separate client. There is also an auto-scroll mechanic that changes the position of the camera when the player moves towards the edges of the screen.

Game 2: Duo Team Shooter
This game is a competitive shooter inspired by Gorillas. The goal is to calculate the precise height and force to create a projectile to shoot at your opponent. There is only one client allowed on the network, but the window supports two players on either side of the screen.
Each player is free to move autonomously (it is not turn-based) and fire one bullet at a time with a 1-second cool-down. Bullets must go over the impenetrable barrier to hit the opponent and will destroy the ground terrain if they hit it. The power of the bullets is controlled vertically and horizontally by each player. The power of the bullets is reflected on the player's tracker on the player's respective side.

Game 3: Arrow Reaction Game
My initial idea for this game was something similar to Guitar Hero: Shapes moving across the screen that would be stopped/collected with a timed input by the player. Although I do not have rhythm or music to accompany my game, I successfully implemented the same concepts from a Guitar Hero-like game.
Using the arrow keys, the player must stop a random assortment of boxes coming from all directions. When stopping the boxes, the player is encouraged to time the button press when there is at least a 75% overlap with the player's square. This will flash the incoming box green and gift the player with points. If they get the box but time their input incorrectly, they will lose points but continue playing. The game stops when the center player's square collides with an incoming square.