Note: This document is unfinished, as the project is currently in development. I'm documenting my progress, thoughts, and methods here, and once the project is finished, I plan to clean it up significantly.
This might be the most complex (and simultaneously dumbest) project I've ever attempted. Welcome to MordCraft.
I set out to recreate Minecraft... in Unreal Engine. Not being satisfied with the complexity of this monumental task, I have been attempting to do it within the unofficial SDK/map editor kit of another UE4 game, the popular medieval combat simulator known as Mordhau. This SDK is built with Unreal Engine 4, and only supports Blueprints.
History of the unofficial Mordhau SDK
The unofficial SDK for Mordhau was created accidentally when a group of hackers decompiled the source code for Mordhau in an attempt to cheat at the game. By reverse engineering part of the source code, this group of hackers inadvertently laid the framework that a few very talented individuals fleshed out into a usable mod kit. In the early days, there was no support from the Mordhau developers for this mod kit, and anybody who wanted to play in a match user made mods had to install them manually before joining a match.
As the mods grew in complexity and entertainment value, the Mordhau developers, Triternion studios, eventually added support for mod.io and .pak files. This meant that you could join a private server and mods would be installed automatically. Before too long, you'll be able to join MordCraft lobbies in a private server near you.
Read more about the unofficial Mordhau SDK on the shared Google Doc. Triternion plans to release an official SDK in the future, but this unofficial SDK is the best we have for now.
Why build Minecraft in Mordhau?
I'm always playing Mordhau with my brother, Zack. We love the high skill ceiling. The community, while it has its share of problems, is consistently entertaining. Zack and I are constantly challenging each other to improve at the game, and I was starting to find the maps predictable and repetitive. I love the Frontline gamemode, but felt that it could benefit from having more maps, and tried to imagine what the perfect map would look like. In the end, I couldn't imagine anything.
I thought of Fortnite, and how the building element added a dynamic and new verticality the stale FPS genre hadn't seen in a quite some time. I thought of Minecraft, and how the creativity of each individual player creates a new experience for every person who walks into a new world, every time. I thought of how fun it is to storm castles in Minecraft, and thought of how cool it would be to be able to build the castles the enemy team would try to storm. I was sold.
After many weeks and much frustration, I had something playable, although the gravity of the issues I'd have to work through had yet to hit me. My brother and I could connect to a dedicated server and place dirt blocks that we could each see. My pipe dream of merging the playful creativity of Minecraft with the visceral gore and intense combat of Mordhau was beginning to seem not only possible, but viable. The difficulty, though, was that I am only able to use UE4 blueprints, as Mordhau's unofficial, fan made 'uSDK' does not support C++ classes.
The first big issue I ran into:
I was using Hierarchical Instanced Static Meshes (HISMs) to place individual blocks, and culling the hidden blocks. My playtester (my brother Zack) and I quickly noticed something... wrong. Due to the way HISMs are created automatically, with random indices, they cannot be reliably synced over networks. We noticed this because the level started looking like Swiss cheese. This also meant players just jumping into the lobby would not be able to see an updated game world.
Unreal Engine 4.22 has automatic instancing of static meshes, which would mean I could just delete a cube like normal and get on with my life... but Mordhau uses Unreal Engine 4.20!
Fortunately for my crazy project, UE 4.20 does support Procedural Mesh Components. I know there are many great plugins out there which would allow easier ways to do what I'm trying to do, but again, the unofficial SDK does not support any C++ classes, so 3rd-party plugins are out. It's pure blueprints from here on out, baby.