Basically the idea was just to have a big project that would force me to cover and explore multiple subject into depth, and to improve in a lot of different aspect of software engineering and in the C++ language itself.
The project began on late 2017, and I wanted to try the new features of the C++ standard. The only important thing I wanted for my project was to be performance sensitive. Which is how I found the idea of just doing a video game. And as I am a masochist, I decided to try to do an MMORPG.
It could be seen as not very sane to begin a project that you don’t really plan to finish. And I can agree with this opinion, but it is also a good thing as I don’t care about the speed at which the project is going on, I can take my time exploring each interesting subject I encounter one after the other. And having the « big project » as a guiding thread in order to always having something to work on.
Anyway, without an actual idea for the gameplay I just thought
“Let’s do a MMORPG with final fantasy like turn based fights”
And here begin the crazy adventure.
What is your mindset as you begin your project?
At that time, I was working as a java developer working on spring based middleware frameworks in a bank.
But I wanted to do C++ on my free time, as I had lot of that those days (told ya I am a masochist), so I began watching all the cpp conferences from 2014 to 2017 (lot of videos) and I discovered how awesomely C++ evolved. Entering the modern era and being more attractive and interesting than ever.
I decided to dive into it, special thanks to Scott Meyers books (effective modern C++, effective C++), I open a parenthesis to say that this is one of the best C++ content I read overall and I warmly recommend it to anyone wanting to learn more about the new features of C++ from 11 to 14.
And it basically made me change my job in order to get more experienced in the language and, hopefully, trying to become a C++ expert some days.
At this point, I wasn’t disappointed in my choice. The number of subject covered by this project was enormous as where the number of decisions to take:
- What network library should I use?
- UDP/IP or TCP/IP protocol?
- What kind of serialization to use?
- What is the best way to do software development in the video game industry?
- What should be the server architecture? Scalability? Database? Scripting?
The goal of this blog is for me to explain the thought process I had, the reason I did the choices I did, and the reason I stepped back in my certain choices I made.
So we could say I am planning on doing a memento to keep track of my own reasoning while trying to give you the original source where I found the different information helping me making my choices.
But obviously not in the order I actually did those choices, it would be way too messy and hard to follow. So I will do it from what I think can be called a « logical » order.
Because as you can already see, there are many of them, and as every developer, we have our « default » choices when it comes to libraries and technologies to use. Even though it is, sometimes, not the wisest choice.
‘’My focus is on architecture and server design’’
The first decisions
My very first decision was to keep it simple concerning the graphics, I don’t have great interest in the client side code (at least concerning the graphics), I would prefer using a game engine but I also didn’t want to enter into a hard and long learning curve with a game engine that doesn’t interest me in the least (at least currently).
My focus is on architecture and server design which is why I decided to have my client in 2d. Another obvious reason is the following, the available free models in 3d are really limited while the 2d tiles are everywhere on the web just to enumerate the most famous sprite/tiles supplier websites:
- … And lot of others, interesting to note that Unity is offering some 3d and 2d game assets. But clearly not enough for doing more than just a demo to play with the game engine.
But even there, it is not that easy, I took the FF6 sprites sheet from opengameart. And I tried to naively make the map myself. It’s hard, very long and error prone work. So I (very quickly) decided to use something to help me with the map building.
Firstly, the idea of using coco2d came to my mind. But the setup was slow and I had the feeling of entering into the « learning curve » that I didn’t want to enter with unity, the tool was way too powerful/overkill for what I planned to do with it.
And then, I remembered an amazing tools I used in my school days: Tiled.
A very complete and powerful map editor developed by Thorbjørn Lindeijer aka Bjorn on github which is heavily maintained and used.
It suddenly became very easy to create map with very complex tileset like the FF6 one. I just took a minimalist SFML project to display the map. And I was done (as I just wanted this in order to begin my game).
This resulted in the following:
It took me less than 1 hour to do :).
Now I have a map and an easy way to display it. Let’s do what I think is the best, the MMORPG server, the communication, the game logic and so on…
PS: as I am writing those line, the game is not even close to be playable. I really hope when I will read this again it won’t be the case anymore.
Quentin Balland. Consultant à Sophia antipolis