Introduction to Level Creation
Welcome back to this tutorial series. Before we begin placing objects in our level and start creating worlds, it would be wise to pause for a moment and look at how we can create levels efficiently. We won’t go into details of environmental or level design or the importance of a game design document. Instead we will look into processes of level creation, that will save us time and effort without sacrificing quality.
The meaning of iteration
When you are working on any creative endeavor it is easy to get lost in the excitement of ideas and creation. It is only natural. After all we want to create games because we like to see our ideas come to life. That is why we are here, that is what drives us. This ”creative fever” may cause you to lose sight of your goals, lose your perspective. This can lead to a lot of wasted time and effort. This article is here to help you keep your goals in sight.
One of the common things you hear in game development is iteration, iteration, iteration. Now, iteration by definition is the repetition of a process applied to the result of a previous effort. Typically as a means of obtaining successively closer approximations to the solution of a problem. Iteration works and nature is the best example of that. In simple words: Picture yourself and how your skills evolved and got better through practice over the years. Think of a video game that seems impossible at first but you breeze through it after many tries. That is the power of iteration.
Within game development iteration is the progressive process of planning, creating and testing content. In game development iteration can have many interpretations. Remastered games, which is a common theme these days, can be seen as iteration, where entire features are improved upon. Software updates for example are another form of iteration. Game franchises like Grand Theft Auto (1997 – present) can also be seen as iteration, where every game vastly improves the game formula.
You should not confuse iteration with repetition. These are whole different beasts; Grand Turismo, has almost the same gameplay formula since it’s beginning (1997) – in other words repetition throughout the gameplay-making process. Conversely, World of Warcraft continuously evolves via proper iteration). To summarize: proper iteration = evolution, bad iteration = repetition.
When I first started on this path I found myself at a point where I could do whatever I wanted with Unreal Engine, at a basic level of course. I started downloading anything free I could get my hands on and I started creating worlds. This was, as I like to call it, the “LEGO approach”. I obtained the building blocks so naturally I started building. That was all nice and well when it came to just creating worlds. Soon I discovered that when it comes to creating actual levels with actual gameplay, another approach was needed. After reading a lot of books on game design, attending university courses, watching online tutorials and countless GDC presentations and talking to fellow developers, a pattern emerged, I needed to use “Passes”.
The creative process
No one in the industry just opens an Editor and starts building levels the moment they have an idea. You are free to do so, it might work for you. Most experienced professionals though will tell you that you have to work in stages (structured development). While an idea is still in your head, and without you been aware, it goes through three basic stages: “Concept”, “Create” and “Completion”. The 3C as I like to call them. Everything must go through these stages in order to exist. Same is true with level design and we do it every time, whenever we want to create new content.
In game development though these three basic stages are not enough. They can get us to the finish line but they don’t guarantee quality. Therefore we must add another much needed development stage right before Completion, the “Playtest” cycle. Without the Playtest cycle we can’t iron out the flaws of a game and add quality to our work. In order to achieve the best possible results, we must also iterate the other three stages, thus turning them into refinement cycles. A level being done and a level being good are not the same thing.
We covered the importance of iteration and the need to work in cycles during level creation. Now we will cover the process of how we can implement all that into our workflow.
Our goal is to make games in an enjoyable and efficient way. An iterative process is the best way to achieve this; a consensus of many devs in the gaming industry. Keep in mind that game development is like a living organism. Designs, processes and almost everything evolves throughout a game’s development life. Every game and every development team is unique, therefore this article is not a “one size – fit all’ solution. It’s more of a guide that hopefully you’ll find useful for your projects.
From design to finished product
Most of you are entering game development with an idea, some of you will finish your game and sell it. Probably most of your are complete novices and have never done this before. Let’s say we are making our first game. This is how it usually goes; an idea forms in your head and you are excited about it. You start by downloading your game engine of choice, in our case that’s Unreal Engine 4. Then you watch some tutorials and hone skills specifically for your game. Possibly you’ll follow a “bit by bit creation process” on your free time. Sooner or later, you will finish the game and then perhaps share it online or sell it.
The trouble with this process is that, mistakes will happen and you’ll not even notice them. Mistakes are for humans and part of the learning process, especially since you’ve never done this before. In the early stages of development poor decision(s) may occur. Unaware of the ramifications of those decisions, you continue developing your game. Those ramifications may become obvious when near completion. In which case, you’ll either spend a lot of time trying to sort them out or you’ll just ship a sub-par game. Worst case scenario, you’ll give up development altogether.
First game completed – Second game development begins
The second game consists of five levels, “Level 1”, “Level 2”, “Level 3”, “Level 4” and “Level 5”. Our experience taught us that going from design straight to completion is a bad idea. This time around we will “compartmentalize” the development process. Compartmentalization means scaling things down in order to develop level-after-level instead of the whole game at once. For this game we will employ five stages: Concept, Layout, Gameplay, Sound / Light / FX and Refinement.
We begin creating Level 1 with the five stages in mind and we also apply those same stages to the rest of our levels. Once we have established this kind of workflow we can iterate through each stage in sequence, until our game is finished. What this workflow does is turn each stage into a refinement cycle. This gives us a chance to catch mistakes early on and make sure that each stage provides a sound foundation for the next stages to be build upon. When we run through all the cycles and complete a level we will have completed a “Pass”. In the above example we would have a Pass for conceptualizing, for prototyping, for adding gameplay and so on. There are two ways to approach this workflow.
The first way is to go through each cycle in sequence until our level is complete before moving on to the next level. To avoid confusion let’s call this approach “Linear Iteration”. In our five level game this would mean that we have to iterate through all the cycles of Level 1 until we are satisfied. Then move on to Level 2 and do it all over again throughout the last level until our game is complete.The other way is kinda of a layered approach. Complete the first stage (and it’s cycles) for each of the five Levels, then move on to the second stage for each level and so on. To avoid confusion let’s call this approach “Layered Iteration”.
Both approaches are valid. But, there are some key differences and benefits to be gained when creating games with the “Layered Iteration” approach.
Benefits of “Layered Iteration”
One major benefit working with Layered Iteration is time. Let’s say we plan to complete a level every five weeks, requiring one week per Pass. (Reminder: a stage has cycles and all them are called a Pass). This would mean our game will be complete in twenty five weeks.
Using Linear Iteration means a five day period for each Pass of one level. Then two days for testing and feedback, between Passes.
Using Layered Iteration changes everything. I will use different examples for team and solo development.
Working in teams
After completing Level 1 Pass 1, one team moves on to Level 2 Pass 1, but also a second team starts playtesting Level 1 Pass 1. This translates to working five weeks on one Pass for one team before moving on to the next. Four of those weeks will be spent for test and feedback by the second team between passes.
When working solo it is understandable that the above workflow can not be utilized. Still there are time benefits to be gained. Let’s say a five day period will be necessary for each level per Pass. That would leave a total of ten days for playtesting between Passes. (Remember that with Linear Iteration you only had two days.)
In both cases, working with teams or solo, Layered Iteration provides more time to catalogue and better evaluate the feedback received.
Using Layered Iteration also ensures that we catch mistakes early on when there is time and space to correct them. That as a result reduces the likelihood of wasted time and effort. Making each pass as sound as possible, gives us the confidence to move on without having to worry about bad decisions creeping up later in development. This also enables us to apply lessons learned, and therefore to continuously improve during the game’s development cycle.
Speaking of catching mistakes, when using Layered Iteration, we move from level to level without actually changing context. In essence the things we learn from one Pass on Level 1 carry on to the same Pass on Level 2 and so on. Instead when working with “Linear Iteration” we are constantly switching context so the lessons learned from Pass 1 of Level 1 do not carry over to Pass 2 of Level 1. They are of a different nature and by the time we reach Pass 1 again on Level 2 they might already be irrelevant. Using Layered Iteration helps us to approach each level at the same stage of completion. Every level will be on the prototyping stage, on lighting and FX stage and so on when working on it.
On any creative endeavour, working on our ideas we tend to ignore the fact that, we too grow tired of them. Work on a single level long enough and soon you will not want to see it again in your life. Using Layered Iteration helps to keep us fresh. Switching levels during a Pass forces us to take some time off a level. This pause can keep things interesting, prevent fatigue and give us a fresh look at things when we come back to it.
Last but not least using Layered Iteration gives a project scalability. You can apply this workflow no matter how many levels there are in a game without sacrificing efficiency. The workload is spread out more evenly throughout the game’s development life.
Game development is a very complex process where everything is interconnected. Using Layered Iteration makes sure that you wont face a butterfly effect. Changing one simple thing in your game can have a resound effect on something else down the road. Big development teams have the means to effectively tackle such problems. When you are a solo indie developer, timing when to do something is of the utmost importance. There is a time for design, a time for prototyping, a time for adding details to your levels and so on. Juggling through these various activities and constantly changing context makes one prone to mistakes. Mistakes that will cost not only time, but work and potentially money.
As I mentioned earlier our work should be broken down into a series of passes. Each pass has a specific focus, and through iteration each pass will create a strong foundation for the passes that will follow. More advanced game developers employ varying number of passes depending on their project, team, experience, timetable and or budget. I usually employ six passes and in this section I walk you through them. I will describe which tasks are performed, but also at what state your project should be in during each pass. As with all things computer related we will start our count at zero.
Pass 0 – Production Planning
If you are working at a big studio your game should have just exited pre-production. As a novice indie developer though you might have finished the first edition of your design document or not. Made a timetable and projected a budget. You have downloaded your game engine of choice and are ready to start developing your game.
– What to do during this pass
This pass is focused on creating your levels on paper and to answer some questions about your game. How many levels will there be? What kind of events and encounters will happen in them? Puzzles, what kind and how many will there be? Will the player have anything interesting to do in those levels? What assets will you require for these levels and so on? Do you want the player to experience certain feelings when playing your game? The list of questions can go on as much as you like. Take some time to write these things down and also add any cool ideas you might want to implement and keep it short and easy to read.
If you have a 3D artist in your team, now is the time to make asset requests. If you don’t have one it is time to research the Unreal Marketplace to see what will work with your game. Take into consideration unique events or puzzles the player may face and focus on the specific details of those events. Maybe they need a specific asset. Don’t start buying assets yet.
This is also a good time to enrich the lore of your game world and of the levels within. Give a backstory of why a level exists, who built it, what happened there. All this information may not be used in game, but it will influence your design decisions. For instance, during the development of Project Origins, we had to put furniture inside a house on Passes 3 and 4. The style of the furniture used, was determined by the backstory of its owner. You can’t use vintage furniture in an apartment owned by a 30+ computer buff. You also wouldn’t place high tech gadgets in a 70 year old man’s cottage living up in the mountains. Unless he was ultra rich and the CEO of a tech company. Backstory and lore will help you make your levels more believable and interesting.
– Things you shouldn’t do
Most levels rely on some kind of map or art that defines their form. In case you haven’t any don’t bother drawing up detailed maps. A simple sketch with what each area does and how is connected with another will suffice for now.
All in all don’t waste time pinning down details about anything. Most of what you come up with here is subject to change based on feedback you will receive down the road. Write them down as reference if you wish.
Pass 1 – Level Prototyping
With the concept of how you want your levels to be in hand, it is time to start prototyping the layout of the levels and reevaluate our asset needs.
– What to do during this pass
During this pass you will Prototype/Block In the levels with BSP brushes in Unreal Engine 4. Your main focus should be to make a complete layout of your levels, don’t focus on looks or details. The levels will evolve with every pass. Spending time here will ensure that basic layouts and forms will not change dramatically later on. This will also give you a sense of scale and flow as you play through the level allowing you to tweak it as needed. You will also set up Blueprints for very basic gameplay mechanics such as doors and elevators.
This is a good time to exchange feedback with your environmental artist in order to get the most out of your assets. If you don’t have one it is time to go back to Unreal Marketplace and reevaluate the assets you selected during Pass 0 and maybe look for replacements. Again don’t start buying any assets yet.
– Things you shouldn’t do
You may feel the need to optimize the levels, now that you have some objects in them. This is not worth the extra time, a lot of content will be added in the next Passes. There is no use spending time on optimization.
Unreal Editor makes it so easy to add content to your level that you will be tempted to do some scene dressing. You can do that if you like but, again, there is no point. Content will be added on later Passes and work spent here is subject to change based on feedback anyway. The same applies for encounters, A.I., navigation, puzzles, lights and any gameplay mechanics. Your time would be better spent polishing the layout.
Pass 2 – Gameplay Prototyping
This pass is focused on gameplay. Your game at this point might not look pretty but it should have all the levels with their layouts ready. You can start adding gameplay elements in it to test them. Consider this pass as your gameplay prototype.
– What to do during this pass
Your main objective in this pass should be replacing the BSPs with placeholder static meshes. Next in order should be placing puzzles, enemy encounters and NPCs if you have any. Lastly add placeholder dialogues, pick ups and lore found in the world such as books or journals .
During this pass you can start dressing up your levels with some art. Try not to go overboard. Add enough to liven important places up a bit, to help you evaluate better some gameplay elements. Also it is time to place any placeholder animations or cinematics in your levels. Use any free assets available that are as close to your final goal as possible.
Most gameplay mechanics and elements should be present at their basic form in this pass. A fully operational basic UI, some sounds and placeholder lights should be present as well.
This is the pass where you will begin level optimization and the reason is simple. If you have low frame rate or other issues at this stage then something is wrong and it must be dealt with before moving on to the next pass.
The goal here is to get a sense of pacing when playing through the game with all gameplay mechanics present (at their basic form).
– Things you shouldn’t do
By this time you should be getting tired of your work and your game. After two Passes you will have, more knowledge, better ideas and more assets will be available to you. Oftentimes it seems easier, more fun, to build something from scratch than to work on something that you already know. Please don’t throw away your work. I have done that mistake and trust me, new isn’t always better. If you feel tired or you have lost focus, just take a break. Watch a tutorial or work on something else and come back to it after a week or so. You will have fresh eyes and don’t forget that this should be fun. Many developers have side projects (other game or app) just for this reason.
Avoid doing any detailed work, be it in-depth gameplay scripting, adding extra dialogue somewhere or placing final assets. The game is still in a stage where significant changes are still permitted and expected based on testing and feedback. It is ok to leave things in their “primitive” state for now.
At this stage people that will play test your game will have a lot more to talk about. You will receive a lot of feedback by the end of this Pass. Avoid making changes right away. What might seem like a good suggestion now might not be so good in the long run. Instead, gather any feedback you have, catalogue it and watch for emerging trends. Take your time to evaluate the feedback and consider the impact of those changes.
Pass 3 – Advanced Gameplay
This pass is focused on polishing gameplay. Your game at this point should have all the levels with their layouts ready, all BSPs replaced with static meshes and all core gameplay elements in place. This is also the pass where you place more sounds, lights and fx. During this pass you will get a pretty good idea about what works and what doesn’t.
– What to do during this pass
Your main goal in this pass should be refining the gameplay implemented in Pass 2. Polishing any scripting, UI, dialogue, lore, puzzle and cinematics should also be done in this Pass. Some areas may need more encounters while other areas may need an NPC or two. A power up would be a better fit if placed in Level 3 instead of Level 1. In general this is a good time to add or cut content from your game as needed. I did say cut because it is better to remove a content with poor quality then to spent time fixing it. The time spent trying to make a poor content good should be spent trying to make a good content great.
After this pass most of your assets should be in place, replacing any placeholders you might have added in Pass 2. This is a good time to reevaluate your asset needs and see if you are missing any. If you have a 3D artist check with him to see that the assets he is creating are the ones you need. Otherwise comb the Unreal Marketplace for any late additions. Now it is also time to buy any assets that you will use in your game.
All the feedback up until now, will be able to give you a clearer picture about what you need to change. Take the time to playtest a lot through this pass and evaluate which ideas work in the game or insert new ones. If you have people you use to bounce ideas off, now is the time to do exactly that. Beyond this point fundamental changes to your game will be difficult to implement. This will be your last opportunity to add any cool ideas you might have. Doing this now will spare you from implementing some otherwise nasty and a hasty solution later.
Don’t be surprised if your levels have different needs. Until now you performed almost the same tasks on all levels. But, now with most of the gameplay elements and assets in place every level will feel different as it should be. Be prepared to do some heavy scripting on one level while focusing on asset placement and lore on another.
By the end of this pass you should have your first taste of the finished game. Hang in there.
– Things you shouldn’t do
Surprisingly you shouldn’t bother with optimization in this pass. Although we did some optimization on Pass 2, most of it was preventive. In the next pass you will be adding Lighting and FX and these are heavy hitters when it comes to performance. It is only natural to do most of our optimization there.
Pass 4 – Sound, Lighting and FX
In this pass you will focus on details, looks and optimization. Your game at this point should have everything in place except sounds, lighting, FX and details. This is the first pass that you should iterate as many times as needed.
– What to do during this pass
The sound and lighting of your levels is one of the most important elements of your game. It’s one of those things that make or break a game. It is important to achieve the right atmosphere for your game. This is why I like to dedicate a whole pass polishing just that. This pass should not affect your assets placement or affect the layout of your levels. Ok, you can move a prop a bit to the side. What you shouldn’t do is make fundamental changes. If you have followed your design document, your environmental artist’s feedback or your notes, you should know what to expect from this pass.
During this pass it is also time to place any particle effects (like flames or smoke). Adding as many finishing touches and details as possible to your levels is also encouraged in this pass.
Adding all of the above will have a huge impact on your game performance. That is why you will do some optimization during this pass, mainly making sure the game loads and runs without problems. When adding lighting to your scene, build times will increase, I suggest you set your Lighting quality to preview for most iterations during this Pass. Only use Production Quality once you are near completion on the next pass.
After this pass you can release your game if you want. But, I assure you it will not be as good as it will be if you perform the next pass. This is the pass where developers are usually forced to ship their games. Usually publishers schedule a game to be released when it’s done and not when it’s good. Now, I hope that you are like me and you want to release your game when it is good.
– Things you shouldn’t do
First and foremost introducing fundamental changes to the game is counterproductive and can cause more problems than solutions. It’s better to cut a content or an entire level if it does not work by now. If cutting something is not an option, prepare to work on it extensively after release and focus on polishing the rest of the game. If you have the luxury to put a team to work on it then do that, otherwise opt for a patch after release. Don’t forget that a game is never truly finished, the more you work on it, the more you will find things to improve.
You should stop generating and adding new content by now. This is important for optimization. Beyond this pass, whenever you encounter a problem, you will know that it’s because of a code change, and not because a new content was introduced.
Pass 5 – Refinement, Point of no Return
The sole purpose of this pass is Q&A and Bug hunting. Your game at this point should be complete and it will be up to you to decide when to ship it. You should iterate this pass as many times as needed.
– What to do during this pass
Playtest, gather feedback, apply solutions, iterate, until you are satisfied with the result. Telling you to do X iterations has no meaning because quality is subjective and every game, every development team is unique. Don’t forget that a game is never truly finished, the more you work on it, the more you will find things to improve.
– Things you shouldn’t do
Don’t get cold feet and don’t try to produce the perfect game, especially on your first try. Half of the lessons learned during game development you learn after releasing a game, so just go ahead and release it. There is a 99% chance that your game will fail, that doesn’t mean you shouldn’t try.
The big picture
I would like to close this with a few thoughts. The process described here is not something new, nor am I reinventing the wheel, it is the accumulation of experience from lessons learned the hard way. As an indie developer you are responsible for a lot of content, especially if you work solo. It is easy to get lost in the excitement of ideas and creation, to get lost in one detail and neglect another or to get tired of game development as a whole. It is easy to lose perspective.
When you are making games, especially as an indie developer, it is only natural to realize that you only get so many shots at this. You should keep in mind that every developer has experienced at some point fatigue, disappointment, self doubt and developer’s block. The thing is, it may be easier to overcome them than you realize. By utilizing the process described here you don’t get stuck in one aspect of development for too long to cause fatigue. You are constantly improving things in your game building up your confidence and by continually moving forward it helps you to not lose sight of your goals.
Everyone is moving along their own timeline, at their own pace. With that being said, try not to overwork yourself. Doing so will only put strain on your body and mind that will lead to lower productivity and the possibility to cause more problems then you are trying to solve. A healthy approach to game development ensures that we don’t lose sight of the big picture which is to make games for many years in an efficient, healthy and fun way.
If you want to buy us a beer and see your name entered in the Backers Hall of Fame you can do so by visiting our Patreon page. Thank you.
Sources, inspirations and interesting reads:
The figure in the images was created by Dooder – Freepik.com
An interesting study on Parallel & Iterative design was written by Jakob Nielsen on 2011 and you can read it here.
If you want to read something related to game development I highly recommend the book by Colleen Macklin titled Games, Design and Play: A detailed approach to iterative game design.
You can also watch the following GDC presentations:
Mass Effect 2’s Iterative Level Design Process
How We Used Iterative Level Design to Ship Skyrim and Fallout 3
That’s all for now, in our next tutorial we will begin creating our first level in Unreal Editor. Until then, as always keep it Unreal.