Dodge Balla
Role: Gameplay and Network Programmer
Team Size: Solo
Time Frame: TBD
Engine: Unity (C#)
Role: Gameplay and Network Programmer
Team Size: Solo
Time Frame: TBD
Engine: Unity (C#)
Dodge Balla is a PVP online multiplayer party game where you bop your friends in a game of dodgeball like you've never seen before. The game is being developed in Unity, using the Netcode for GameObjects package, as well as several other useful packages, like the Input System and Cinemachine.
Development on Dodge Balla began recently as a project for me to introduce myself to netcode and online multiplayer games. I opted to make use of Unity's netcode for game objects package, as it handles a large portion of the network back end, allowing me to focus on learning the fundamentals of a networked game in a more digestible manner. So far I have been introduced to key concepts such as networked variables, replication and Remote Procedure Calls, whilst developing a client server model.
I have opted for a client hosted model for this project, as running a server is beyond my current limitations. The client hosted model will allow players to host and join games, which will be done via steam once the game is released. Similar games that use such a model are Landfall's Stickfight and Rounds. This model will allow me to develop and release a multiplayer game without the costs of hosting a server. So far I have been testing the netcode using Unity's Multiplayer Play Mode package, which allows you to simulate multiple machines on a network, however, once I have steamworks multiplayer implemented I will be able to reach out to others for peer testing.
Dodge Balla features multiple players, each requiring access to their own instances of important modules such as an input handler. As such it is important that these feature do not overlap. For example, a player must only be able to control their own character, and view via their own camera. 
Unity's NetworkBehaviour class features an accessible boolean to check whether a player is the owner of the game object that the behaviour is attached to. 
For objects who's owner needs to change, which I have set via an RPC that is sent to the server. In this instance, the Rpc receives a reference to the ball's network behaviour, and is assigned an owner using the ChangeOwnership() method, which takes the owner of the player instance's client ID as an argument.
In Dodge Balla, you play as a Balla, a round-headed creature that loves dodgeball. Balla has a range of moves available to him, from simple running and jumping, to grabbing and tackling. On top of this, there will all sorts of crazy power ups to beef up your Balla.
Thanks to Unity's new Input System, the player will be able to assign their own controls easily. The base controls are as follows:
WASD - Move
Space - Jump
Shift - Sprint
E - Grab
Left Click - Throw
Ctrl - Tackle
Mouse move - Look
I am currently designing a level for the game, which will bring with it the implementation of various features such as spawning of new balls, death and respawning, and several other important features for a more complete multiplayer experience, ready for the initial run of peer testing.
There's no better way to learn about this project than from the Game Design Document, full of details about the game as a whole, it's themes, gameplay loop and more.