The (re-)birth of a legacy - Vanilla World of Warcraft
WowStack development lay dormant for quite a while, mostly due to the fact that after switching jobs and moving to a new city - hello, Berlin! - my flat got robbed and all of my hardware was stolen.
To steal from Kael’thas Sunstrider, this was merely a setback! I’ve got new hardware, restored most of the lost things from backups and started out by wondering a lot what is wrong with Nostalrius and Elysium… seriously, grow up!
… behold the private… ahem … pirate servers, yarr!
Moving on, the conclusion for me was to do something that will actually be different from what everyone else does. Having been in the WoW development scene since November 2004 and always in love with vanilla WoW I felt that legacy realms provided by Blizzard Entertainment will never happen.
Having lost most of my past work it seemed to be a decent plan to not just be the next guy/team building on the past work on MaNGOS and its’ numerous forks (wink@Nostalrius/Elysium) and instead do something different.
… so what is the plan, guys?
With WoW emulation being older than a decade and using development practices from back then the decision was made to do something that many private servers have pretended but actually never done:
We are rebuilding WowStack from scratch. Crazy, right? Not so much, and here is a few good reasons why this is a decent plan:
- C++ has evolved a lot in the past decade, and with C++11/C++14 we finally get to enjoy thing we never had before such as threads or fixed width integer types. Apart from that a lot of code in MaNGOS and its’ forks just exists to accomodate for the lack of these things, to some extent Boost in MaNGOS is a testament to this lack.
- lack of any development practices. If you ever touched the code you can see that most of it was built without a plan of attack, it’s chaotic, it is hard to read, far from SOLID principles to say the least. Maintaining this is a nightmare. As can be seen in the code, everyone just works around old stuff and adds more chaos.
- lack of knowledge. This has been a serious issue. We started out knowing just the game client and went from there. All we lacked was a gameshow master.
Thus we are going to fix it. Having a modernized C++, tools such as Docker, CMake and all the build systems you might want to produce a slim, stable core.
- we will recreate the core and all tools from zero. The only thing we use old code for is to look at network protocols used.
- we will rely on modern GCC, MSVC and clang to supply us with full support for C++14 (awesome, right?!)
- we will split the core into atomic reusable parts.
- we will develop test driven. Boost.Test and CMake are really good friends these days.
Bonus features will include:
- full support for running the core and all tools inside Docker. How cool is that?
- installation packages for major Linux distributions. For starters, we will support Debian 8 and Ubuntu LTS releases. There will be APT repositories!
- monthly updates and security updates whenever needed.
Our docker images used for builds are actually live on Docker Hub.
… so what will it be?
Good question, let me try to answer from a development perspective.
- tempest is our game client data handling library. Thanks to Ladislav Zezula and his wonderful StormLib we created a library to wrap it and handle extraction and verification of world data such as ADT, WDT, model data such as M2 and WMO and DBC client databases.
- meshard (pun intended) will be the new map library. Instead of putting map handling in twenty different places for three kinds of maps, there will just be one place used to read and convert all map related data from the client. As it will provide an API for you, you can also use it in your own projects. As an example, we will wire the library up with SDL2 to create a visual view into what maps actually look like.
That is what we’re working on currently, tempest was completed yesterday and is undergoing testing, meshard is actively developed as of writing this post.
Future plans include
- moving database handling into an ORM, allowing us to e.g. make use of migrations for updates,
- rebuilding the remaining parts. More on that in future posts though.
I would love to give you more but honestly at this point, it is just a crazy idea under development. More will follow, I promise!
If you want to talk about this or let me know what you want to see in a fresh start the most, ping me on twitter or feel free to ping WowStack.
All code snippets in this post are made available to use under the MIT Licence.