First In First Out
What is First In First Out?
First In First Out is a multiplayer FPS made in Unreal Engine 5.
Two teams face off in a race to secure objectives or eliminate their rivals to win rounds.
Blueprints
Networking
Personal Project, July 2023 - September 2023
My role
I fully created and designed this project inspired by games like CounterStrike, Valorant, and Call of Duty’s Search and Destroy. Utilizing Unreal Engine 5’s Blueprints, I created the game on top of an existing marketplace asset, as well as made fixes to make 5.2’s network multiplayer function correctly with Steam. The asset pack at time of development did not have any base gameplay features, i.e. guns visually shot, but hitting a player resulted in nothing. My work was implementing core gameplay systems and designing the unique elements that would set it apart from its inspiration.
What I did as a designer
Implemented core gameplay systems such as teams, damage, death, and respawning.
Enabled network gameplay through the use of the SteamCore plugin from the UE marketplace.
Created prototypes of advanced gameplay systems such as loadouts and objectives.
Designed HUD elements using Unreal’s Widgets.
Created a level for players using the beta Cube Grid feature.
Assets I used
Experience
Learned the flexibility and constraints of Unreal’s blueprint system.
Implemented blueprint organizational techniques such as macros, collapsed nodes, and multiple event graphs.
Learned networking in Unreal multiplayer games and the differences between listen and dedicated servers.
Researched how to troubleshoot a problem within the engine itself.
Working with a prebuilt asset pack gave me a head start in the development process but forced me to address certain limitations.
Needed to modify and work with code that was not written by myself.
Unreal’s blueprints let me iterate much quicker since I did not have to rebuild C++ code when making minor changes or testing features.
After using separate event graphs and features like macros, I found it much easier to stay organized during the coding process.
More clarity during debugging by placing breakpoints inside the blueprints as opposed to Visual Studio.
Tools like “find in blueprints” expedited understanding of code not written by myself.
screenshot of working on the debug map with 3 "clients"
BP_CapturePoints event graph
The event graph of GameMode
OnRep_IsAlive in the player character
I learned about network replication and what that entails to work on a multiplayer project
I learned new concepts specific to networked games such as the differences between listen and dedicated servers, replication, and when to make functions run only on the server, only on clients, and multicasts.
First In First Out is a listen server game so I had to write code that would work on both clients and the host-client.
Designing First In First Out made me appreciate how much is working behind the scenes for any multiplayer game.
Challenges
(and solutions)
Capture Points
video showing joining and hosting games
FIFO was built around the asset pack, Low Poly Shooter Pack v5.0, which at the time of development did not fully support networked gameplay.
Implemented gameplay elements such as networked player health, death, respawning, and damage.
FIFO is a round based game like those that inspired it so respawning was crucial, however LPSP did not support this and attempting to create a new pawn for the player to possess would cause problems with the new pawn.
To circumvent this, I faked the player death. Upon reaching 0 health the game would see the pawn as dead and proceed to spectating other players but the pawn actually just had it’s skeletal mesh ragdolling with collision boxes disabled and weapons hidden.
“Respawning” was just switching the values back to their alive values
After getting damage working properly (you get shot > you lose health) I was not satisfied with only using a capsule collider to determine if a player got hit.
I created and added collision boxes that only interacted with projectile raycasts and would return an enum (Head, Body, Legs, Arms) that would calculate how much damage to deal when combined with a weapon’s damage stat.
view of the player pawn’s collider boxes
video showcasing capture point functionality
video showing the different damage values
When designing First In First Out my aim was to create a first person shooter with a more in depth game mode than team deathmatch. While the games that inspired me all had asymmetrical teams (attackers and defenders), I wanted to create a game where both teams had to compete for an objective on equal footing. This resulted in capture points being the alternative route to victory other than a teamwipe.
Capture points would rotate around the map to prevent only one weapon or strategy from being viable in an expanded game.
Capturing the point would be a lengthy process as well so that no team could just run up and take it before the other team got a glimpse, this would also give a team time to flank or take alternative routes rather than just the shortest path.
However, making a team’s role neutral (not attackers or defenders) does put a limitation on map design because neither team should have an advantage over the other. Capture points had to be equidistant from team starts and have the same travel time as well.
Capture points completed their goal of directing players towards a location on the map and resulted in those areas having the highest intensity of action for the round.
white cylinders represents a capture point location
top view of the map showing it's symmetry