In this page you will find about a new online multiplayer Unity prototype I’m working on. It is made in Unity using a networking solution called Fishnet, and I’ve chosen to use a Client-Server network model instead of Peer-to-Peer. The game is currently tested using two different builds for online multiplayer. One is a headless Linux server build, which I run on a free AWS machine to host an online lobby running all of the server logic. The other is a more standard mobile platform build which outputs an APK I can distribute to other people to test with. This is the playable build but both have to be constantly modified and tested whilst working on the game. The most valuable part of the process has been handling all the challenges that come with building and testing an online multiplayer game, in this context it becomes much harder to pin down problems, and even harder to solve them. I have reached much further than what initially expected and will continue exploring the concept for now. You can read an outline of the concept below, and future plans with a test game video further down the page.
Gameplay Concept
This game prototype, name TBD, is a top-down PVP multiplayer shooter where players fight to eliminate other players, and to prevent being eliminated themselves. Each player uses the left joystick to move and the right joystick to select an ability. After selecting an ability a player can then use the right joystick again to aim it and use it. The catch is each ability is colour coded, and between selecting and using it the player-character changes colour, telegraphing to all other players what ability is about to be used.
Once an ability is selected it needs to be used before selecting another one, unless the player gets eliminated. Players get eliminated if hit once with any ability, but that might change in the future, a general principle will be that it doesn’t take many hits to eliminate a player. Currently there are four distinct abilities in the game, which will serve me as a foundation to find the kind of gameplay that I want, and which I will optimise and balance before adding any more.
Dagger - Red Ability
A player targeted ability, the Dagger locks onto an enemy player and relentlessly follows them until they are hit. The person using the Dagger currently needs to ground target near an enemy player for it to come out successfully, but in the future it is possible the targeting system will be more tolerant for inaccuracies, as this is not a ground targeted ability.
Plasma - Purple Ability
A ground targeted ability, the Plasma is a long projectile that eliminates all players that come in contact with it. It moves slowly meaning the player using it must predict where the enemy might be moving to next.
Shield - Green Ability
When used the player-character is briefly enveloped in a protective shield that prevents them from taking damage. If a Dagger hits a shielded player it will get reflected and directed towards the player that threw it in the first place. If hit by Plasma, a shielded player will remain unaffected. The duration of the Shield is very brief, but powerful as it guarantees not getting eliminated. It is possible in the future getting hit by Plasma will prematurely end the shield, meaning one instance of the shield won’t be able to protect a player from a Dagger after getting hit by Plasma.
Dagger being reflected by Shield
Using shield to avoid Plasma
Blink - Blue Ability
The player gets instantly teleported a short distance in the aimed direction. Very effective at dodging Plasma, but will not dodge an incoming Dagger. It is probable one of the first balance changes will be for Blink to disjoint the Dagger, but that might make Dagger too weak, as both defensive abilities would be a strong counter against it.
Blink is currently useless against an incoming Dagger
Blink being used to dodge Plasma
What’s next?
At the start I only made this as a challenge to test online multiplayer functionality, but it has reached a very playable state with much more code that what I initially intended so I think it is a project worth continuing for now. For the next blog post I plan to address three main points of progress:
A testing menu, where ability properties can be tweaked before starting a game from an authorized client build. This would massively help balancing the game as currently I have to rebuild both the server and client to make any changes, even simple range and speed numbers.
Improve the networking implementations. Currently the game is playable but some elements, especially the Dagger are inconsistent and visually messy at times. Using a technique called Server-Authoritative movement and some client-side prediction which is currently implemented successfully in the Blink ability, I can get all other systems up to the same level of polish. I can also make movement of any server-side objects more generic, so implementing new abilities or gameplay elements in the future that involve movement across all clients can be much simpler.
Expanding on the essentials, which includes adding and animating a simple player-model and a moving camera. Also maybe making the environment bigger and more visually appealing, abilities are already prepared to interact with elements in the environment so that could be fully implemented also in the form of traps, or some sort of visibility system with bushes and high-grounds.