With the decision to use Unreal firmly in place it’s time to actually get this show on the road. In this post I talk about project inspirations and goals, setting up a development environment with Unreal, configuring version control and laying down the first raw bones of a prototype game. Hello World!
I expect the design of this game to go through some drastic changes during prototyping, so it’s too early to go into a great deal of detail on specifics yet. However, there are a few key elements and inspirations that I’m confident won’t change too much. One of the big inspirations behind this project are old adventure board games like Hero Quest, Descent, Space Hulk and more recently Zombies!!!.
These games are each unique in their settings and specific rules but they all share a few key elements, like being turn based and using small groups of characters moving in a grid system. While these are elements that I would like to appear in this project, the main attraction of these games for me are the maps. Built from beautifully drawn, reusable sections they offer a vast number of possible arrangements. Never knowing exactly what your going to find on the other side of a door or at the end of a winding corridor makes these games inviting and intriguing. Indeed even the individual tiles themselves are compelling, a table set for a feast, a ransacked armoury or a mysteriously stained floor all invite questions. What happened here? Where did everyone go? How long has it been since anyone else saw this? This sort of passive, environmental story telling is really powerful because it lets the players own imagination embellish the game world. It’s something I would very much like to feature in this project, but as always time and budget will dictate what’s actually achievable.
Getting set up
Getting hold of Unreal is pretty simple, just sign up and follow the instructions to download the Epic launcher. By default Unreal will also install a version of Visual Studio to use when editing C++ code, for me this was Visual Studio 2015 Community Edition. Fair enough but I was a little surprised to be greeted by this one day:
I really hate signing up for stuff with no technical need for an online service,
it’s basically digital blackmail. However, thats a
rant discussion for
another time, suffice to say working in Unreal on Windows at least also requires
a Microsoft account.
With installation of the engine and IDE taken care of the next essential
component is version control. Unreal makes heavy use of binary asset files for
storing things and unfortunately these don’t play well with my preferred
version control system, Git. Thankfully this problem is solved by the Git Large
File Storage, LFS, add on. Git LFS is also supported by github so using it is
simple if you chose to host your project there. Information on setting up Git
with LFS for use with Unreal can be found here,
and here once
installed I told git lfs to track
With lofty overreaching project goals in place and basic setup completed, it’s time to take the first faltering steps towards building a prototype. Given the focus on game maps built from variously arranged rooms I’ll begin by creating a system to generate a basic grid layout. Later on I’ll be adding logic to intelligently build room arrangements that aim to achieve passive story telling goals, but for now a random layout is fine.
Unreal lets us spawn actors and components at runtime, but since we are building rooms using a great many individual components I will use instanced static meshes. Instanced meshes are far more performant as Unreal won’t need to make a separate draw call for each instance, the overhead for each being simply its transform data and processing time on the GPU. OK, lets build a simple grid holding our random rooms and render it using instanced planes.
So far so good, the room placement and sizes are poor but the basics are looking good. How about we add some walls.
All right, thats starting to take shape. Sure it’s inside out and the lighting is broken but the basic idea is coming together. Lets fix the last few issues and produce fully enclosed procedural rooms.
Thats good, but very basic looking, how about a more complex mesh for the walls.
Thats a good start! But with this post is already growing into TL;DR territory so I’ll wrap up here. I’m quite happy with the basic map generation for now and with the addition of some variety in the meshes used to build things, some materials and a sprinkling of details and lights this could work out quite well.