Repo for 4th Year Final Year Project - MMORPG/Adventure Game powered by Unity, with set of Management tools.
As software developers and video game enthusiasts, we wanted to try and develop a video game. However the time constrains, the lack of a larger team, along the low budget would not allow us to develop a fully featured game, so we decided to explore other alternatives that would keep us working on our interest while developing a functional piece of software. In doing so, we came across a myriad of different concepts and ideas, and finally decided on what it would become Project Dome. The initial plan was to build a multiplayer game, that conveyed a story of thinking outside the imposed bounds of society, with two very differentiated factions, and a set of simple mechanics that would constitute the game loop. Even though it was a very interesting idea, it soon became clear that the focus of such project had too little programming and a lot of story boarding, and lore creating. After discarding the idea, we shifted our focus from a fully edged game to something else. Not only a game, but an infrastructure built around the game composed of services that would support it. In one thing though, we kept from changing, the art style. We decided to implement a minimal game client, that would make use of 2D characters in 3D environments and that we maintained.
Project Dome is full-scale project, involving a Game Client, aWeb Application and a set of server and APIs. The Game implementation is a massive multiplayer online adventure supported by a log in server, that authenticates users, a game server where players connect to and synchronizes all game clients, a http server that interfaces with the game server and allows our web application to extract information and change server settings as well as monitor the game community. All the applications that compose the solution have been built from the ground up, and furthermore, allow the system to change as well as to scale with relative ease.
A short demo video of the project can be found here.
The project is structured like follows:
The client (unity game client) can log in or register a new account. If the player logs in a list of characters belonging to such player will be displayed on screen. In that scene the player can choose to create a new character. These request are made to the LogIn Server, which will query the database to either allow or reject these requests, or to write new characters or players into it.
Once the character has been selected and the player clicks play, the game server will receive the information and will replicate it, broadcasting it to all connected clients.
The management app allows Administrators to log in, connecting again to the LogIn Server, and will retrive relevant information for the administrator as well as allow them to perform certain options which include: Ban, Pardon or Kick a player from the server. Change game server port, the maximum number of concurrent users or even restart the server. It also can query the game server to retrieve information about connected players such as current playtime, total playtime, IP, character's name and player's name.
In order to run the project it is necessary to fulfill the following pre-requisites:
- Node installed.
- Angular 5 installed.
- (dotNET Core if under linux)
Follow this steps once the repo has been downloaded to set up the solution:
First we start the servers. In the root folder of ServerAPI:
$: node ./LoginServer.js
This will start the login server. To start the Management App angular application we execute the following command from its root folder AdminApp:
$: ng serve
Then it will be necessary to run the TCP and HTTP game servers in that order.
- TCP server.
- HTTP server last.
Once all servers ar up and running, the online services can be accessed both from the unity game client and the admin app on localhost port 4200.
Even though software servers can be spread through multiple machines, we deployed them in AWS. The servers are hosted in the cloud, running ina windows server VM.
The Management App can be accessed using this URL: http://project-dome.tk/ MongoDB is hosted on mLab.
The repo contains the following:
- /API is where code for both Login Server and AdminApp is. NodeJs code for the Login server is in /API/ServerAPI where the management app built with Angular 5 is in /API/ServerAdminApp/AdminApp.
- /Prototipe contains the unity game client prototype along with its assets.
- /Seminar Presentation contains a small power point presentation of the first design of the project and assets for it.
- /Servers contains the dotNet Game Server (/TCP and /HTTP) as well as the custom dll required to manage binary data sent between client and server.
- Unity 2017.4.0f1 (64-bit).
- Visual Studio 2017 Community Edition.
- Visual Studio Code.
- Blender for 3D modeling.
- Photoshop for 2D textures and images.
- Krita for 2D textures and images.
- Node and npm for package management.
- Robo 3T for database management.
- Albert Rando - Design and Development - rndmized
- Login Server
- Game Client
- Management App
- Pedro Mota - Design and Development - PedroHOMota
- Game Server (TCP/IP)
- Game Server (HTTP)
- Game Client (Networking)
This project is licensed under the MIT License - see the LICENSE.md file for details