Even for such a small project programmed by an individual things can get really complicated when trying to implement everything on one go. While the game idea might sound simple and solid there is always the need to test the gameplay and perform some initial tweaks to the technical structures without messing up the final code. In addition it’s my first time using the RakNet library and trying to straight implement it onto the final project isn’t a good plan. For this reason a series of quick standalone prototype programs will be made, allowing me to test my ideas and get comfortable with the new concepts. Then these components can be implemented nicely on the final project.
Gameplay prototype
The aim of this prototype game is to check and prove the gameplay concept. The prototype will be created using an improved version of the engine I’ve being developing for the past 4 years used in Titan Explorer and almost every other of my projects and university assignments.
Elements to be implemented in this prototype:
- Randomly generated level
- Enemies with simple AI
- Player and combat mechanics
- Full control implementation
The prototype will start immediately within a room/level. Things like perfecting the controls, loading and using content, the level generation algorithms and the enemies AI and reward system are to be tweaked in this prototype. Some of the code developed in this prototype will be very close to the final and therefore it will be used as a guide when programming the final version. No networking components are to be implemented in this prototype.
Networking prototype
The aim of this prototype is to create a server that multiple clients can connect on it. The serves will carry all the world information and will process everything that the players are doing. The world objects are going to be updated using Replica Manager 3, a RakNet plugin that allows for automatic world state synchronization between the clients.
RPC (Remote Procedure Calling) will be also attempted to save a lot of time and improve the clarity when it comes to object serialization between the server and the client. RPC automatically sends the required data by allowing the server to call a function (including its parameters) on the client.
Client login and saving that information in a simple database on the server is also to be implemented on this prototype. Since the game world is not persistent there is no need for a database for the world objects. These will be created on demand everytime a new game is created. The world object structures will be ordinary C++ objects known by both the server and the clients in advance.