Learning to Level Design: Trial by Fire. Also Earth, Wind, and Water.
I’ve talked about a lot in my previous dev logs: character movement, the grappling hook, enemy AI and combat design. Lots about game mechanics. But none of those mechanics mean anything if you don’t give the player interesting spaces to use those mechanics in. So, with all of those mechanics in place, I still needed to figure out what is possibly the most important part of a game: the level design.
In case you haven’t gathered from all of the equations, code design patterns, and state diagrams in my previous dev logs, I’m a pretty technical-minded person. And level design is much less technical, and much more purely creative. This is my first game that has any serious level design to it. So I had to figure it out as I went, and eventually, I got to a point where I was satisfied. This dev log will be less about me geeking out about technical stuff, and more me sharing my experiences and lessons learned through the process. And I’ll jump right in with…
Lesson 1: Metroidlikes are one of the hardest genres to level design for.
If you want to get some beginner’s practice getting started with level design, make a linear platformer. Don’t make a Metroidlike. On top of designing an interesting space to navigate with a given set of abilities, you have to think about how that space connects to the surrounding spaces, whether it is possible to access the space with different sets of abilities, how to gate it so that the player has to have all the abilities you’re designing for, or how to make the space navigable with different sets of abilities. Having a nonlinear structure adds way more things to consider. That’s why some Metroidlikes, including some Metroid games themselves (cough, Dread) are actually designed as quite linear experiences, just disguised as a nonlinear structure, putting up locks in front of you and behind you that require a specific key to progress.
One of my design goals for this was not to treat abilities like keys, but as tools with multiple uses, and every situation as a problem with multiple solutions, rather than a lock that requires a specific key. And another note, that is also a much more difficult level design challenge than making heavy use of gating to turn the game into a more linear structure.
Lesson 2: Constraints are necessary
I’m a technical person. I solve problems. I can solve problems creatively, but it needs to be a problem that I’m solving, not just an unbounded space in which to create something. And even for people who are more artist than engineer, creative constraints are still essential to guiding the creative process.
One constraint I decided on early on was that levels must be split into discreet rooms, and each room must be a multiple of the screen size. Since I’m working with a 16:9 resolution, I decided to just double that for the dimensions of one screen: 32 units wide, 18 units tall. We have lots of rooms that are exactly the screen size, some corridors that are two or three screens wide and one screen tall, some vertical corridors that are two or three screens tall and one screen wide, and just a few open spaces that are two screen wide and two screens tall. But that gives me constraints for what types of rooms I can design, and the standardized dimensions ensures I can fit them together like puzzle pieces.
Next came the constraints of the standard distances the player can jump, double jump, and dash. Gaps they need to cross always had to be one unit less than the max distance possible, to give the player some wiggle room. A regular jump has a max height of 5 units, can cover 4 horizontal units by the time it reaches the peak, and can cover a total of 7 units horizontally by the time it falls back to the starting height. So a platform I intended for the player to jump up to could be at most 4 units above where they would jump from, can have a horizontal gap of up to 2 units at that height (a gap of two units means the player has to move 3 units to cross it), or up to 5 units if its a straight across. A double jump could add an additional 4 units to their jump height and let’s say up to 3 units horizontally at peak or 5 at starting height as well. This is not exact, because it depends so much on the timing of when the player uses the air jump. If they air jump right at the peak of the first jump, they’ll max out their height, but they’ll get more horizontal distance if they use the air jump to interrupt the fall from the first jump. So double jump setups need even more wiggle room than regular jump setups. So a platform I intend the player to double jump to could be a maximum of 6 above where they would jump from, have a horizontal gap of 4 units at max height, or a gap of up to 8 units for a level jump. There is also dash, which covers a horizontal distance of 5 units exactly, glide which allows you to fall only one unit for every 4 units you move horizontally, wall jump, which requires a flat vertical surface and allows you to jump 4 units high and as far by the peak, and the fire blast kickback, which functions as an air jump, only it requires an enemy to blast off of.
Later on in the process, after playtesting and realizing that they didn’t work very well, I developed another constraint: no vertical doorways. Previously, I had designed the layouts of some areas so the player had to jump or drop through a vertical doorway to get between rooms. The big problem with that is that there has to be at least a unit of ceiling at the top of each room, and at least a unit of floor at the bottom of each room. Those can not be the same unit, because the room system is designed for them not to overlap. That means there is a two unit thick platform between the lower room and the upper room, so the platform the player is to jump from in the lower room has to have a gap of only two units from the ceiling in order for the player to be able to get through the door with a regular jump. The player character is two units tall, so that leaves no wiggle room for them to fit in that space.
Which violates another one of my constraints: always give the player at least one more unit of room than they need. So anywhere the player is supposed to go, needs at least 3 units of clearance vertically, preferable 4, and 2 units of clearance horizontally, preferably 3 or 4. And that means vertical doorways just can’t work well. There are still a couple of jank, legacy vertical doorways in the game, but I’ve gotten rid of them every time I redesigned something with either of the rooms involved.
My First Draft at a Level
I didn’t have any of this figured out when I first started designing levels for the game. My only constraint at first was the one about rooms being multiples of the screen size. My process at first was basically:
- Identify the noteworthy “setpiece” rooms for a zone. That includes the starting room, the rooms where you get each ability, the rooms that lead to each neighboring zone, and the room where you will fight a miniboss and collect the plot key for that zone.
- Connect them with a graph structure. In my thinking, those setpiece rooms were the only important rooms; the rest were just connective tissue.
- Decide the intended route through that graph. Figure out which abilities the player will have as they travel through each of those graph edges. I’m going to end up design corridors that make use of those abilities.
- Convert that graph into a set of rooms. The setpiece rooms were generally single-screen rooms, while the connective edges were series of long or tall corridors. For designing those corridors, come up with a short list of interesting uses of each ability in the zone. Cram as many of those uses into the space available in those corridors.
So I designed a water zone like this. And the result was… It was bad. You know those corridors before you got any abilities? Yeah, they just didn’t have any incident in them. You rarely saw any use for an ability before you got it. There were hardly any branching paths. You really only used the wall jump in three rooms, and you really only used the grappling hook in two rooms. My abilities were like some of the items in Twilight Princess.
I designed the wall jump and grapple corridors in a way that I thought was clever. They branched into two paths at the beginning: a basic path and a challenge path. The challenge path ended with an optional health or mana upgrade, then had a one-way merge back into the main path. But on playtesting, I discovered several problems. Players didn’t realize the paths would merge back together. It wasn’t immediately obvious to them which one was the challenge path. The challenge path was way too quick an escalation of difficulty. It was literally the room immediately after they got the ability! And after completing the challenge path, players would then try to backtrack along the main path and be disappointed to just end up back where they started, with no reward for their exploration.
In the water zone, there was also the secondary problem that the grappling hook ability in that original iteration sucked, as I covered in my dev log on the grappling hook.
New Process
So I went about things differently with the next zone I designed, the earth zone. My new process was:
- Pick a theme for the zone.
- Come up with a few environmental hazards that fit with that theme.
- Ideate several interesting uses of each ability in the zone.
- Come up with at least one room concept to introduce each environmental hazard on its own.
- Come up with at least one room concept to make use of each ability on its own.
- Mix and match things. Hazards with other hazards, abilities with other abilities, hazards with abilities. Come up with at least one room concept for each combination.
- Don’t forget those setpiece rooms, the starting room, the passages to adjacent zones, the arenas where you get an ability, and the miniboss arena where you get the plot key for the zone.
- Fit all those rooms together in a coherent way. It’s okay to cut a few that weren’t working out or don’t fit into the overall zone.
For earth, I chose the theme “things happen when you jump”. That’s a very mechanical way of describing it. A more thematic way might be “Ground yourself. Think before you act.” Which totally sounds like something old man Bumi would tell Aang.
For environmental hazards, I came up with projectiles that shoot every time you jump, platforms that toggle into or out of existence each time you jump (I’ll admit I stole that one straight out of Mario), and objects that move along their path with each jump. Those moving objects can be both platforms and smashers, depending on what side of it you’re on. I thought the projectiles in particular had a lot of potential, because I had the idea for a series of corridors with a gun at the far end, shooting at you each time you jump, with a different form of cover for you to take each time.
The abilities for the earth zone are the earth slam, the rock parry, and the stalactite. And each of them had a natural combination with the projectiles. The first few escalating challenges of the projectiles were as follows:
- A spacious corridor, where at any point you have plenty of room to jump over the projectiles.
- A narrow corridor, with periodic trenches for you to fall into to take cover from a projectile.
- A narrow corridor, with periodic trenches in the ceiling where you have room to jump over a projectile.
Those three, while escalating in difficulty, did not require any specific abilities. For the rock parry, I made a corridor where there is no room to dodge the projectiles at any point, and you have to use the rock parry to block them. For the earth slam, I made a corridor where there are periodic trenches covered by destructible ground that you have to earth slam through to take cover from a projectile. For the stalactite, which causes a block of rock to jut out of the floor or wall, which you can use as a platform, but also acts as a land mine if anything damages it or an enemy moves close to it, I made a corridor where you have to create a stalactite as a stepping stone to climb up the far wall, but then a projectile will hit it and explode it if you don’t hurry.
After designing about 30 such room concepts, I was able to fit them all together into a cohesive zone, about twice the size of the first draft water zone. It was much more thematically coherent, allowed players to see some spots where they would need to come back with a future ability, and best of all, every room had a unique identity. There were no longer any rooms that were just connective tissue with no incident.
So, I had playtesters play this new, much better level, and… nearly everyone died in the first hallway. People who didn’t got stuck in a later hallway, not realizing they needed the parry ability to get through.
Lesson 3: It’s still an iterative process
Though the earth zone had much better bones than the first draft of the water zone, it still wasn’t communicating to players what they needed to know. They didn’t draw the connection between their jumps and the timing of the projectiles. The players who past that first corridor, still didn’t understand the mechanic well enough to realize that there was no solution to the parry corridor with their current abilities. Or they just didn’t know there was a future ability that would help them there. With practice, you can get better at building the bones of a level and anticipating some of these issues, but you’re never going to anticipate all of them, and if you try, you’ll waste time and give yourself analysis paralysis. Better to build something quickly, playtest, and iterate.
I made it more clear that the projectiles were firing each time you jumped by putting one gun right in sight the first time you have to jump. There are other approaches I could have taken that might be even more effective. Rearranging rooms so the player encounters toggling platforms first, which is a more obvious and lower stakes way to introduce the theme of “thing happens when you jump”, which could then have the player primed to notice other things taking effect when you jump. I could put an initial corridor with environmental guns in sight but where they can’t hit you, with the corridor full of jumps to demonstrate the connection. And once a player has a better understanding of that mechanic, they will be quicker to realize that there is no solution to the parry-required corridor with their current abilities.
That was the hope anyway. But instead, I ended up rearranging rooms a bit, so that they first had to down that corridor in the same direction the projectiles move. Your run speed is the same as the projectiles’ movement speed, so you just have to keep moving forward to avoid them. Then, the player gets the parry ability and has to backtrack through that corridor using the ability to block the projectiles. It isn’t used to gate off a different part of the zone anymore, but that corridor has been salvaged, and makes an effective tutorial for that ability.
So now, my complete process is:
- Pick a theme for the zone.
- Come up with a few environmental hazards that fit with that theme.
- Ideate several interesting uses of each ability in the zone.
- Come up with at least one room concept to introduce each environmental hazard on its own.
- Come up with at least one room concept to make use of each ability on its own.
- Mix and match things. Hazards with other hazards, abilities with other abilities, hazards with abilities. Come up with at least one room concept for each combination.
- Don’t forget those setpiece rooms, the starting room, the passages to adjacent zones, the arenas where you get an ability, and the miniboss arena where you get the plot key for the zone.
- Fit all those rooms together in a coherent way. It’s okay to cut a few that weren’t working out or don’t fit into the overall zone.
- Playtest.
- Iterate.
- Repeat steps 9 and 10 until you’re satisfied.
The great thing about knowing it’s iterative is that you know you’re just making a draft at first. You don’t have to think of every little thing all at once. You can just get the ideas out, and not give yourself analysis paralysis. And then, once you start playtesting and iterating, you’re no longer in creative mode. You’re in problem-solving mode. You’re where I like to be. If you try to solve all of the potential problems up front, you’re still in creative mode, because you’re inventing potential problems you don’t actually know about. That’s just a waste of creativity.
Anyway, I designed the air zone next. The theme for that was “stay on the move”. Basically the complete opposite of the earth zone. Which is good. The environmental hazards I came up with were platforms that disappear a couple seconds after you land on them (also ripped from Mario), projectiles shooting in a rhythm so that no place is safe to just stay put, and a gun in the center of a room that follows you with its aim and shoots projectiles at a fixed rate. The abilities for air are double jump, dash, and glide. So I followed more or less the same process, and ended up with a pretty good zone. Through playtesting and iteration, I found that the tracking guns were too difficult when combined with any other complex maneuvers, and disappearing platforms were by far the most reliable way to keep the player on their toes. Mario had it right. Who’d have thought?
I designed the fire zone next, with the theme of “combat”. Plain and simple. This was the one zone where I allowed myself rooms that were just connective tissue, because this zone was entirely about the arenas. Water and earth have 4 arenas each. Air has none; it’s all platforming. Fire has 9 arenas. So the connective tissue corridors are kind of just a nice break from combat.
Lesson 4: If an ability is required to go a certain way, make it clear immediately
This seems obvious, but it comes though in some ways you may not expect. For example, players can stumble into the endgame area from any direction while exploring any other zone. That’s by design. No one elemental area is any more important than any other, so they all have to connect to the endgame area. I just need to make it clear that it is an endgame area and make it appropriately intimidating. The most common part of the endgame area for players to stumble into, requires the fire blast, blaze of glory, and wall jump. Players frequently entered that room with just the wall jump, and because that was the first ability demanded of them, they thought they could get through the room. I had to rearrange things a bit so it immediately required a fire blast followed by a wall jump to get anywhere. Now players waste very little time there struggling with an impossible room.
Lesson 5: Beyond just constraints, standardization is good
What if every doorway, floor, and ceiling was at a different height in the room? That was what it was like in the first draft of the water zone. It’s not a fatal flaw, but it feels a little weird, off, and… amateurish. Deciding on a standard floor doorway height, a standard floor height, and a standard ceiling height for an area helps make the area feel more cohesive and polished. Like a building that was actually designed by an architect and not just each room haphazardly built by different workers who didn’t talk to each other. These are just standards, not hard and fast rules. I could still deviate from them if there is reason to do so; this just gave me defaults to stick to unless I had good reason not to. In general, I decided that doorways would be 4 units above the row of floor tiles at the bottom of the room. There would be a 3-4 unit wide platform on either side of the doorway. The floor could either be just the single row along the bottom of the floor, or a continuation of that 4 units above platform at doorway level.
If there is no solid ground at the bottom of the room, the single-unit floor at the bottom is lines with a row of spikes. Platforms outside of doorways where there is no solid ground below them are be 3 units wide, and shaped like an inverted right isosceles triangle. Every room in the air zone is like this. It’s a whole zone with no solid ground at the bottom of rooms.
If I want the character to have room to jump, any passageway must be at least 8 units tall, and if I don’t want the character to have room to jump, the passageway should be 3 units tall. Any space that the character is intended to pass through in any direction should be at least 3 units wide.
Lesson 6: Loops and shortcuts are good
Maybe Dark Souls is good actually? I realized that I can also do the “door does not open from this side” style of shortcut that Dark Souls is known for. My doors normally have a switch on each side that controls whether it is open or closed. I can just remove the switch from one side to make a door that only opens from one side. Another method of shortcut is one that requires a specific ability. The earth zone includes a few shortcuts that require the earth slam ability. It also has one-sided doors that open back up into the starting room, which became kind of a central hub room as I iterated on the area design.
Lesson 7: It’s cool to show players places where they’ll use future abilities
This is a pretty intuitive one, but can be a bit more of a challenge to remember to do it. Showing players places where they’ll use abilities before they get those abilities gives the player something to look forward to. It makes a promise to them about something cool they’ll be able to do later. And it stands out in their memory. Incomplete tasks stick in your brain. That’s how working memory works. Once you finish a task, your brain allows the information specific to that task to leave your working memory. When a player sees a path that they can’t take yet in a Metroidlike, that’s like an incomplete task. It sticks around in their working memory until they get the necessary item (provided it doesn’t take too long), and then the payoff of being able to use it there is all the sweeter for having had to go find the item and remember to come back.
However, as I found, remembering to do that, and finding opportunities to do that, is a skill that you have to practice. It doesn’t just happen by itself. I did not do this well at first, and I was barely halfway competent at it by the time I finished designing the whole world of this game.
Lesson 8: The one I already knew and felt very clever about
Make a player use an ability as soon as they get it. It’s the thing nearly every Metroidlike and Zeldalike does. It’s the thing that feels weird and forced when Metroid Dread does it, but you’re still thankful the game is making you immediately learn how to use your new ability. When you get the wall jump, you have to use it to get out of the room you got it in. Same for the air jump, dash, and stalactite. You have to use the rock parry to backtrack through the corridor you followed to get it. There is an immediate opportunity to earth slam through some breakable ground in the room where you get the earth slam. There is an immediate opportunity to use the glide to continue through the room where you find it. There are immediate opportunities to do platforming challenges with the fire blast and blaze of glory in the rooms after you get them. You immediately need to use the grappling hook to continue along the path in the next room.
Sure, it’s formulaic, but some formulas exist for a reason.
Lesson 9: It’s actually really hard to make it impossible for players to get stuck somewhere. Just put in a failsafe.
I started out being really careful to make sure that it was always possible for the player to get out of anywhere they could get themselves into. If they got into an area with a set of abilities, they had to be able to get back, either with that same set of abilities, or with an ability they can find wherever they got themselves into. But, it’s possible to get yourself into a bunch of places with unexpected sets of abilities. You can do all sorts of things with clever use of a wall jump, or blaze of glory, or stalactite. And I don’t want to change that. I consider that a strength of the game, that you can come into an area with a different set of abilities than you normally would, and you can make some clever use of the abilities you have to get through anyway. I wrote about how that sort of experience in a Majora’s Mask randomizer partially inspired me to make this game.
And my attempts at this style of level design became completely unviable when I considered my plans to add an item randomizer mode to the game. So I bit the bullet and added a fast travel. I put a fast travel point in the starting room of each zone. That made it all the better that I was starting to design the starting rooms as hubs that shortcuts would loop back to.
Now, for example, if you don’t get the rock parry where you normally would in the item randomizer mode, and you can’t backtrack through that corridor that requires it, you’re not sunk. You can fast travel out and continue your run.
The Moment of Truth: Redoing the Water Zone
The water zone was my first zone I designed, and it was clearly of a much lower quality than the ones I did afterward. It wasn’t just the individual rooms that were bad and needed iteration. It was structural. It was too small. The difficulty ramped up way too abruptly. There were not enough branches or loops. Many rooms lacked a sense of identity. The use of each ability was very sequestered into specific rooms, and it made no promises of what you would be able to do later.
I had to redo it completely.
So I went through my new and improved process.
Theme: Go with the flow. Environmental hazards act on a rhythm, and you need to go with their flow.
Hazards: Projectiles shooting in rhythm, smashers/platforms moving in rhythm, platforms toggling with the rhythm. It’s basically the earth zone, but based on rhythm and not each time you jump.
Abilities: Wall jump, grappling hook, heal. Heal is not useful for platforming.
Mix and match things to make room concepts: I made a little over 30 of them, which is on par with the rest of the zones.
Fit all the rooms together in a coherent way: In my first draft of this dev log, I wrote a play-by-play, describing every room in sequence. It was terrible reading. You can play the level yourself if you want to see the fine details. I’m pretty proud of it. It introduces hazards one at a time, in contexts where you don’t need to use any special ability to navigate them. It also introduces the main uses for your abilities either in the same rooms or adjacent rooms to where you get those abilities. Then it will introduce the rooms that combine hazards and abilities in an overall trend of escalating difficulty. It shows you several places where the wall jump will be useful before you get it. You will see several grapple points before getting the grappling hook. The level is organized into three main loops now instead of just one, with each one containing a shortcut back into the main hub, the starting room. The shortcut to close the first loop just required opening a one-way door. The shortcut to close the second loop required the use of the grappling hook, and it actually allows you to navigate the second loop in either direction if you wish. Each loop contains a few branches into challenge rooms containing optional upgrades.
Playtest: People saw places where they were obviously meant to wall jump and attempted to do so right away, before concluding that it was an ability they would have to find. So I’ll consider that a success. The vast majority of players got to the arena where you will be rewarded with the wall jump, won the battle, got the wall jump, and then continued on through the room, moving to the earth zone. I wanted that to be an option, but I wanted most players to exit that arena room the way they came in and use their new ability to advance where they couldn’t previously. So that was a failure.
Iterate: Most players want to keep moving forward as long as they can, not turn back. So I rearranged a couple rooms so that you reach the earth zone by exiting the way you came and using the wall jump to progress, and you continue in the water zone by continuing straight through the arena room.
Repeat: After that change, most players continued through the water zone like I wanted.
Conclusion
When I first started doing level design for this game, I had some counterproductive misconceptions about the process. At first, I was thinking of it in too unstructured a way; trying to work without any constraints or standardization, just whatever made sense to me in each moment. After that, I overcorrected and started thinking of it like a pure engineering problem; one where I could think through every possible problem up front and design a perfect solution to it all in one go.
Finally, I realized the process that worked for me. It includes phases of pure creativity, and phases of pure engineering, and lots of testing and iteration. For each area, I started going through a phase of ideation, unburdened by practical concerns like actually building each room, how its challenge is communicated, where its doors are, and how it fits into the larger area. Then, I went through the somewhat technical, somewhat creative process of mapping out how they fit together and building each room. By accepting that I wasn’t going to think of everything and it wouldn’t be perfect on the first iteration, I was able to free myself of analysis paralysis and just make something that could be playtested. Then, I could switch into problem-solving mode to iterate on the level and fix problems discovered in playtesting.
I found that separating out the purely creative aspects and the problem-solving aspects of a task immensely helped me to tackle it. If you’re a level designer reading this, I’m curious how this aligns with your experience. What is your process like? And what big lessons did you have from your earliest projects you did level design for?
Archetype and the Four Winds of Hell
Master the four elements, and kill demons.
Status | In development |
Author | serfofcinder |
Genre | Platformer, Action |
Tags | Doom, Metroidvania, Perma Death, Roguelite, Short, Singleplayer, Twin Stick Shooter |
More posts
- What's the Deal with Development Timelines?5 days ago
- Enemy AI Tech TalkMay 27, 2024
- The Making of the Grappling HookApr 29, 2024
- Character Controller Tech TalkApr 13, 2024
- Talking about Inspiration and StuffApr 05, 2024
Leave a comment
Log in with itch.io to leave a comment.