Mortal Retribution
Mortal Retribution is designed to be an interactive, objective-based First Person Shooter. The player, who is acting as a Mortal Avenger, spawns into a hostile world which once used to be their home planet. It has now been overtaken by an evil robot army that is extremely hostile to all life forms and has eliminated all life on the planet. The robots now stand guard, following the orders of their robot overlords, protecting their newly seized assets. The player spawns into this world, with the goal of avenging his fallen comrades and eradicating the robot army, thereby saving their home planet. There are two main game modes that Mortal Retribution offers: Story (Player vs Environment) mode or Competitive (Player vs Player) mode.
Overview
Introduction
The goal of the project, as per the course CSCI599: Game Networking Architectures, was to design and build a Multiplayer Game Networking Architecture for a game of our choosing. In order to achieve this, our approach was to first employ an existing networking solution to a game built in Unity. The motivation behind this approach was to understand the intricacies involved in the process of designing and implementing a network solution. Once this was achieved, we moved to building our own custom networking architecture from scratch. Our idea was to evaluate our architecture with respect to the one built using Mirror and gauge how well our network performs. We aimed to test our network architectures by deploying them on multiple servers across the world using AWS Elastic Computing Cloud services.
Instead of using an existing video game, we chose to use the First Person Shooter (FPS) Template provided by Unity to build an FPS game (named Mortal Retribution). The assets provided by this template made the game designing and development process quite smooth and easy. For the first step of our approach, we used the Mirror Networking Solution provided by Unity. The vast documentation and examples available on Mirror helped us deeply understand how each network component works and synchronizes. Using the knowledge we gained, we used C# Socket Networking as the basis for our own custom networking architecture. We included various functionalities and features that were all developed from scratch. We successfully implemented a client-server networking architecture for the FPS game that we built. We evaluated the network using the same guidelines as we did the first, and have included our specific findings in the sections below. More information about the gameplay as well can be found below.
Purpose
The purpose of this project is to learn about the process that goes into designing and building your own Game Networking Architecture for a video game. By developing such an architecture, we hope to give players the ability to have a shared gaming experience. The idea is to build a network architecture such that players experience smooth and fast-paced gameplay with consistent and highly responsive network performance. Not only does this allow players to socialize and interact with other players worldwide, but also gives them a change to strategize together to beat the objectives of the game. We have included support for cross-country connectivity and attempted to account for issues pertaining to high latency client (player) connections, thereby ensuring a robust network design and joyful gameplay experience.
Tools Utilized
Bitbucket - Bitbucket is used as the source control tool for the Unity project. Bitbucket was chosen because of its capability to handle large file sizes and its flexibility. It is also compatible with Jira.
Jira - Jira is used as the issue and project management tool. Jira has well-managed workflow management capabilities and easily creatable issue boards.
Unity - Unity is the game development platform used for the project. Unity has the provision for 2D and 3D rendering and includes cross-platform integration, consistent layout, and intuitive design.
Visual Studio - Visual Studio is used as the Integrated Development Environment
Discord - Our Primary Communication Tool