There was 3 versions that rolled out since the last blog post 3 months ago and I can already say that dagger paid for itself. Lets review the changes.
Firstly, I added a friend system which is a very basic concept that the game has been missing for quite a while.
Here is how its looks:
When you enter or leave the world your friends currently online are notified about it:
I made some small improvements to the mobile UI like adding the missing light toggle button action:
On the performance side I added a templating system that allow me to create my entities prefab directly from memory instead of fetching them from the disk everytime this is especially useful on mobile where the resources are more limited since fetching from the disk create a lot of garbage that need to be collected later on.
I added an administrator commands system which allow me to do pretty much anything in game now, from teleporting a player to adding an item to its inventory :
Using dagger really made it easy to implement.
On the server side I added a DDOS filter to ensure that the clients do not flood the server with more messages than what they should normally send. To do so, I used a token bucket algorithm. The idea behind it is pretty simple: each client is assigned a bucket of token and for each message they send to the server a token is consumed. If a client have no token left this means that he has exceeded the send rate limit. Also the bucket is refilled at regular interval to match the number of messages per second a client can send plus a small wiggle room so if the client connection is unstable it allow a small burst of packets to arrive on the server without it being considered as a DDOS attack.
I improved the servers resilience to failures by implementing a relatively simple re synchronization mechanisms. The proxy act as the main server, if it goes down, all the servers reset since this mean no clients are connected anymore. If any other server go down it will be re synchronized by the proxy when its reconnect.
Also each player is bound to a server instance at any time. When a server goes down, all the clients bound to it are disconnected. Since the servers have different purpose, one can go down an it will only affect the clients bound to it. For example the world server could go down and it will be unnoticed by the players that are already in game but the players that were on the character selection screen will be disconnected since this process is handled by the world server.
I added an information system that displays predefined messages on the players connection this will allow me to inform them on certain events in real time.
Finally I added a stats system that allows me to persist some data about the server such as the maximum number of clients connected at the same time and various others stats.
As always there were a lot of small tweaks and improvements during all this but I won’t go into further details.
On a more personal note, I really enjoy my new development process
using dagger. Now I can focus on designing the game without any
wiring constraints. This might not be a problem you face if you are
using Singletons because they can be accessed from any parts of your
application but this is a pattern that I refused to use from the
beginning of the project because to me its cons outweigh its pros.
I’m pretty happy with what I did for this version. I added a lot of new stuff in 3 months without even trying hard. I didn’t code that much in my free time lately which is kind of funny since now its more easier to add features. It’s the summer so I go out more often, I exercise myself, I do some stretching and I also started a new job. These might be the reasons why I code less lately. Anyway I’m pretty sure that when it will be cold again I will find myself behind the keyboard more often.
I also wanted to use this post opportunity to remind myself how I enjoy working on a side project like MultiQuest. A project that I completely own, that I designed myself and where I have no money or time constraint on. I often find myself restructuring and redoing things to be better and I know that I would probably not have this chance on a professional environment. But doing things the right way is really what I enjoy in the software development process. I could have rushed many smalls game by now if I just wanted things to “work” but it is not what I’m interested in. Obviously a limit need to be drawn at some point otherwise I will never go forward but I am pretty happy with where I draw the line right now.
I like the MMO concept even tough I don’t play those anymore. But as a development project it is awesome because of its broadness. I worked on the backend infrastructure, the website, the game servers, the desktop and mobile clients. On the game itself again there is so much thing to talk about but that will be for another time.
Anyway, the next update should feature the bank system, the exchanges and maybe a craft system. See y’all.