top of page

Diamond Rush

My first game made i with Unreal, Diamond Rush is a first person multiplayer shooter. The project was made with the intent on learning about networking and multiplayer in games.

Download

DiamondRushBgd.png

Creation

I began coding this project in order to learn more about how networking and multiplayer works inside games.

To do this, I based the framework on Unreal's replication system and used the Unreal networking tutorials as a base. From there, I expanded the concept and altered the code so that it would network all needed pieces.

The game idea itself is a blend between a shooter and a steal-the-flag games.

There are up to 4 players in a match, each one going through the map in order to collect points. The one with most points at the end wins.

Points can be earned by collecting different coloured diamonds or by killing other players.

Each player has a base on the map, which is colour coded with their respective characters. They can then decide to leave the diamonds on their bags inside the base, or just carry them around with them.

Diamonds inside the base are worth 1.5 times the points of a carried diamond, but the bases can be robbed by shooting inside them. Meanwhile, the diamonds carried will be divided if the player dies before being respawned.

This gives the game an interesting strategy choice to go around on each session. 

DiamondRush_Game.png
DiamondRush_Diamonds.png

Create/Join Server

When starting the game, the player can choose to create a server to host the game, or join an already existing server.

There are both options for Lan or Internet based connections to choose from, as well as naming and avatar image selections.

In order for the system to work each player needs to have an account on Steam and be logged in so that the system can find suitable connections.

This is done using Unreal's server options, one of them being connections through the Steam networking subsystem, which allows the players to ignore the need to check for IP adresses in order to simply join a game.

DiamondRush_ClientServer.png

Characters and Levels

Before the game starts, the player is sent to a "HUB" where they can choose options for the match and their respective characters.

There are a total of 4 colour coded characters to choose from, each one being slightly different in terms of their specifications. Some are stronger but more frail, while others are faster but weaker, as well as having a different starting weapon that can be lately changed during the game.

These choices coupled with the strategy used inside the game can give players an edge in making their play style more effective.

There can only be one of each type of character in a match, so once one of them has been selected, they will be grayed out for everyone.

DiamondRush_Characters.png

Programming

The programming process was quite interesting and different from the normal ones due to the need for replication on almost every aspect inside the game.

To begin with, the Game Controller has different behaviours depending on the computer being a server or a client.

Being a server will create a session node while clients will try to connect to that session node.

Each player Controller then makes changes in itself before the Game Controller picks them up and randomizes each player's base and position between the 4 possible ones.

The process inside the game begins, where each player's actions are actually made inside the main server and then replicated back to each computer client on the session.

This is especially complicated when objects need to be replicated not only to other players, but back to the owner itself. Things like the player's personal HUD don't need to be replicated to others, but the bullets and flares need to be seen not only by others, but by the owner as well.

The strict order of what to replicate to who is extremely important, otherwise either the owner or the other players will be left without their part.

Because of this, the networking is another part where making pieces of code blueprintable is very useful. It makes the networking process into a map that can be understood faster and more easily than normal, even if it is still very complex.

DiamondRush_Levels.png
bottom of page