Github Link - Video Link
Background
This is the University project that landed me my job at Rockstar Games. Here’s what I wrote about it:
Arena Battler
For my third year of University, we were tasked to create a networked, simulated environment with at least 2 synced objects. For my project, I created a 3D Arena Battler using the Godot game engine. The project got an A in the CMP303 Module, Networking for Games Development.
This video is a demonstration of the gameplay, the program Clumsy is used to simulate the game in terrible network conditions.
The program was developed using low-level networking and entirely based on UDP.
The 2 main protocols that every internet protocol is based on are TCP and UDP.
TCP is connection-based. A server and client set up a connection through a handshake, and then use the information exchanged, and specific headers on future messages sent, to keep track of whether the information is lost, and only processes the information in order.
UDP works like a text message service. You can configure messages to be sent back and forth, but as you cannot guarantee that they’ll arrive on time, in order, or at all.
Using TCP would have been easier for this project, but would not have been appropriate for the type of game. This is because if bytes are lost on route, then the clients wait for those bytes to be resent and processed. However, those bytes will likely contain outdated information, like the current positions of players, in which the game only needs to know the current ones. For this reason, the project was built entirely with UDP.
There are many problems that needed to be anticipated and fixed in order to get this project to work. Below is the presentation I prepared for my lecturers which goes more into detail about these issues: