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 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 through Unreal’s Widgets and connected them to the gameplay.

  • Created a level for players to play using the beta Cube Grid feature.

Assets I used

Experience


  • Learned the flexibility and constraints of the blueprint system.

  • Implemented blueprint organizational techniques such as macros, collapsed nodes, and separate event graphs.

  • Learned how networking in Unreal multiplayer games work and differences between listen and dedicated servers.

  • Had to research in order to troubleshoot a problem within the engine itself.

  • Working with a prebuilt asset pack gave me a head start in the development process but also forced me to work around certain limitations.

  • Needed to modify and work with code that was not written by myself.

  • As opposed to programming in C++, blueprints let me iterate much quicker since I did not have to rebuild code when making minor changes or testing features.

  • After learning about 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

  • Unlike working with single-player or local games, to work with a multiplayer project I needed to learn about network replication and what that entails.

  • I learned new concepts specific to networked games like the differences between a listen server and dedicated server, replication, and when to make functions run only on the server, run 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.

  • Made me appreciate how much is working behind the scenes for any multiplayer game I’ve played


Challenges

(and solutions)

Capture Points

video showing joining and hosting games
  • The asset pack I built First In First Out around was the Low Poly Shooter Pack v5.0 which at the time of development did not fully support networked gameplay.

    • Had to implement gameplay elements such as 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 got shot > you lost 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 of a bomb site, 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 teams 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

My other projects