Idhant

Fate
Shooter

Multiplayer FPS built in unreal engine with Steam session support. 1v1 game mode, multiple type of weapons.

SUMMARY

This one v one multiplayer game was built as a way to push my limits with Mulitplayer, and Networked prorgamming in UNreal Engine. The main goals I've kept in mind while building this project are; to develop systems and create tech architecture thats optimized in multiplayer and working with steam sessions.

Project Goals

* Build a fully functional server-client architecture working with steam sessions.

* Have this server client architecture work with steam sessions plugin, and allow players to create rooms for multiplayer games, and have people across the globe join.

* Build a Weapon system with some movement ability built into each weapons

Project Specifications

* Engine: Unreal Engine,Multiplayer, C++

* Time: 1 month (6h/day)

* Platform: PC

* Team Size: 1 (programmer)

* Plugins and Technologies: Geplication concepts, NetNotifies, RPC, Replication concepts, Steam Sessions Plugin

GAME OVERVIEW

* A multiplayer 1v1 FPS, with a focus on movement techinques like rocket jumping, tight movement and fun gameplay.

* Built in Unreal 5 with steam sessions and server creation setup support.

* Featuring a 1v1 first to 10 game mode, with respawns with server side shooting and physics with additional client side effects.

INITIAL DESIGN

Intital planning stage for this game was a bit different from the planning for others; but i still picked a main driving quote for it

The players are put in arenas with a bunch of unique weapons and must use their skills and high octane movement to battle their way out.

In pre-production, some of the challenges I believed I would face pre-emptively would be;

* Player lobbies - The main draw of our game is the fact that you 1v1, so we have to find a way for players to join across the world, with steam if possible.

* Managing game state - Since this would be a networked game, managing game state is extremely important for the game flow to function without desync

* Add fun and unique weapons to the game

MULTIPLAYER LOBBIES

How do I connect with my friends? Magic or just good networking?

* We have to find a way for our players to host "rooms" that other players can join, and load up on the same state and be on the same "map" as to say. This involves finding a way or some sort of joining code.

THE PROBLEM

Using Unreal engine's inbuilt steam sessions are fine, but only provide us with a certain small amount of details. We need a lot more information if we want our lobby and ingame online systems to be a bit more flexible/robust. This is a limitation of the inbuilt sessions.

THE SOLUTION

Researching and figuring out that a plugin like advanced steam sessions is an industry standard, and this provides us with many functions and methods to use. We still have to setup the server browser and the game logic ourselves, but we will have a bunch more information to work with.

The user that wants to be the server host requests to create a game, and then the players can join up after they search and find the hosted session.

Image of a flowchart showing steam sessions

Our flow for steam sessions, and hosting a multiplayer game, going from the hoster (top player)

to the client (bottom icon).

This allows us to have finer control over things like player counts, what maps to load, over the network arguements, and use Steam for our multiplayer rather than having to set up everything manually.

MANAGING GAME FLOW

Optimizing the flow of game information, like we're building aquaducts

* Our game state needs to be centralized, since flow of information is extremely important for kill notifs, score counts, and timer. Initially all of this was handled by the gamestate class but I quickly found an issue with it.

THE PROBLEM

Since Game state is server sided, accessing data on it was a bit difficult. Players having to do GetGameState().GetScore count was unreliable and client authoritative, which we dont want for many reasons.

THE SOLUTION

This was a problem that I was surprised to solve preemptively, because I ended up going with a server authoritative design that most of my information was always authenticated, or checked by the server before being committed on the game state.

OnPlayerDeath for example, is what happens when someone dies, runs on the server, which is then responsible for updating the other players and the game state etc.

Image of a flowchart showing steam sessions

* This allows for us, as developer to integrate with steams backend and allow to use Spacewar as our sort of "test server" to host and use.

WEAPON TIME

Weapons and Guns

* To start off, I worked on 2 wepaon acrchtypes, one hitscan (ray based), the other projectile. The only thing I made sure that was consistent was that each weapon had a unique/interesting game mechanic related to it. Ill talk about 2 of them now.

Hitscan weapon; null blaster

Projectile weapon; Improvised Firework Launcher

Hitscan Weapon

* The shooting itself happens on the server. When the player calls the shoot method, on a hitscan weapon, the server is told to so. The server fires off a ray trace, taking in the gun barrell location, the weapon range.

* OnHit, we notify all the clients, and then tell the players to replicate a hit effect, dust, hit reg, etc. Our gun also spawns a blackhole projectile every 6th bullet so we check fo that, and spawn that as well.

Image of a flowchart showing steam sessions

The fire effect for the HitScan weapon, firing a ray cast, and then on hit, populating

OutHit data struct (custom struct that holds data for hit).

Projectile Weapon

* Since our projectile is replicated, as it needs to follow the same path in each game, all we have to do is spawn it and then let it handle the rest.

* Our projectile lets you rocket jump (like in quake) which runs a check on collision with players, and if you are the shooter, it launches you in a direction away from the projectile.

Gallery:

Main menu
Server browser with game listings
Shooting a rocket launcher
Waiting room, for people to join
Free for all game creator
In game
VER 3.0.1
* I am an Game Developer specializing in Gameplay Programming, Graphics, Feature programming and leading teams. With a knack for creating distict gameplay experiences, my work spans different platforms, seamlessly blending strategic thinking with cross-team solutions.
NEWCASTLE UPON TYNE 5.12.2025
IDHANT DABRAL
ALL RIGHTS RESERVED
  • Email

    i.dabral26@gmail.com

  • Location

    Newcastle Upon Tyne, UK

Building a game?

Lets Chat.