The Door Problem of Combat Design

Let’s say I’m making a level for a classic first person shooter. To start, I build an arena and add some monsters. I don’t want the player to be attacked as soon as they start the game, so I add a hallway to one side of the arena and start the player there.


Here the “E”s mark enemy monsters in the arena and the “P” is the player start in the hall.

My level is simple, but I’m happy with what I’ve built, so I invite a friend to playtest. My friend walks along the hallway, enters the arena, and alerts the monsters, all according to plan. Then things go wrong. Instead of fighting in the arena, my friend steps back into the hall and fights from the doorway as the enemies funnel in. Instead of a dynamic gun ballet of dodged projectiles and swirling destruction, my friend has turned my level into a shooting gallery: dull, safe, and slow. Continue reading “The Door Problem of Combat Design”

The Good Sewer Level: Reference Dump

In preparation for Quake Sewer Map Jam, I’ve gathered a bunch of references from my favorite sewer levels in games. I also recorded a playthrough of the Dunwall Sewers from Dishonored. I intend to record similar videos for these levels below as I have time in the coming weeks.

If there are other good sewer levels you think I’m missing, let me know!

I am also interested in knowing more about the development process behind these maps. If you happen to know who worked on these levels—or if you worked on them yourself—let me know!

Mirror’s Edge (2008), “Chapter 2 – Jacknife”

Level design by Elisabetta Silli
Mirror’s Edge team credits

Titanfall 2, “Blood and Rust”

Level design by Davis Standley
Level scripting by David Shaver
Titanfall 2 team credits

Wolfenstein: The New Order, various chapters

Level designs by ???
Lighting art by Tomas Lidström
Wolfenstein: The New Order team credits

The Good Sewer Level: “Dunwall Sewers”

I’ve started a series of videos analyzing the level design and environment art of sewer levels in video games. In this first episode, I walk through the “Dunwall Sewers” level from Dishonored (2012).

Several concepts recur throughout the video:

  • The Dunwall sewers are home to rats. This is where the game introduces the consequences of the rat plague and shows the rats aren’t just woldbuilding and backdrop, but rather a real system that responds to the player. In the earlier parts of the tutorial, we heard about the rat plague, but here through the sewers we see what it means and what it is doing to the city.
  • The sewer is interlinked with the city above it. The two run in parallel, and the player must understand this truth about the sewers in order to see the city of Dunwall for all it is. For those who live on the surface, the sewer is out of sight and out of mind, a dumping ground without consequences. But as we move through the sewer, we see the rot beneath the city, how the dead become food for rats. This ties into film noir themes of the antihero delving into the shadows.
  • Lighting creates a dialogue between the forces intersecting with the sewer. We see the electric blue lighting of authority playing against the flickering warm light of lamps placed by civilians attempting to live in the sewers. We also see natural light in neutral white and subtle blue tones, which is there to remind us of the sewer’s relationship to the city above. The lighting is also another source of reference from film noir, using diagonal spotlights with sharp parallel lines cutting across it in bars, like The Third Man or Touch of Evil.

If this has you inspired to make your own sewer level, the Quake Sewer Map Jam starts tomorrow!

Announcement: Quake Sewer Map Jam!

Everyone hates sewer levels.

Too often they are cramped, repetitive, and disorienting. They limit the range of gameplay systems and require one right way to play. They are the antithesis of playgrounds and sandboxes. At their worst, a sewer level drags with no end in sight and stretches a game thin.

Yet, there is an appeal to sewer levels that is so hard to achieve:

  • A good sewer level is a moment to breathe. In its tunnels, there is quiet and refuge which invites introspection.
  • A good sewer level is raw design. This isn’t the place for the one-off scripted sequence or the expensive art setpiece. Instead, a good sewer level is subtle in its mastery of the craft: geometry, lighting, and textures working in unison.
  • A good sewer level is also environmental storytelling at the scale of systems. As we navigate the space, we glimpse something larger than us. We see the flows in, the flows out, and the processes they undergo. There is history and logic at play in the sewers.
  • And sewer levels, both good and bad, are a space for dreams. Unlike the tombs and dungeons of tabletop RPGs, sewers exist alongside our daily urban life but unseen, like the city’s subconscious. They are an id to the ego of the streets. They are also a home for nightmares.

Wolfenstein: The New Order, Chapter 7

How do we solve these conflicts of design? How do we take a sewer level—which everyone hates—and make it good? This is the goal of the Quake Sewer Map Jam. This design problem is the theme.

If you are up for this challenge, here’s what you need to know:

When does the event start? When is the deadline?

The jam begins July 28th and ends August 31st at 1 PM Eastern Standard Time.

My hope with the longer deadline is that more people can participate as they have time. I don’t expect anyone to use the whole month+ on a sewer map. Please pace yourself and reduce scope if you run short on time!

Also, if your map only took you a few hours, you are still welcome to submit it! There is no barrier for quality so long as your map is playable start to finish.

Are new mappers welcome?

Yes! Newcomers are encouraged to participate! Sewers have a lot in common with traditional tabletop dungeon design, so this should be a great opportunity to pick up the tools.

If you aren’t sure where to get started, most of the talk about Sewer Jam is taking place in the Quake Mapping Discord, so stop by and we’ll be happy to get you started. Or, if this is your first time mapping for Quake, here is a Quickstart Tutorial.

Are there any special modifications?

We will be using a new version of the underwater jam’s mod.  This allows for dynamic water! You can read more about these features Here. I will update these links once the new version is available.

If you want to stick to vanilla id1 features, that works too! The progs add features, which you can ignore, but they don’t alter any of the standard features.

Are there any special textures?

We’ve gathered some textures from id1, Daikatana, and a few community packages into the I hope these textures provide a starting point for some ideas, but you are welcome to use different textures.

What is the naming convention?

Please name your map “swjam_[username]”. For example, my map would be “swjam_yoder”. If you build the map collaboratively, please include both names.

Where do I send my map?

Once you have completed your map, you can send it to me at or on the Quake Mapping Discord. If I don’t reply within a day, feel free to nudge me again.

Please also include a readme file, and consider including the “.map” file so other people can open your level in the editor and learn from your design.

How strict is the theme?

Your map should draw on the ideas of sewer levels, but there is flexibility. You can make a canal, a cistern, or water treatment plant. It may also help to think of a secondary theme. What does a blood sewer look like? Or a sewer in space? What kind of sewer would you find under a dark mage’s tower? All of these ideas are welcome!

Anything else I need to know?

Your level exit should go to the “start” map.


Dishonored, Dunwall Sewers

Despite a mess of design problems, sewer levels are rich with theme. They are also a place to practice the subtleties of our craft. Over the next few weeks, I will be writing about some of my favorite sewer levels, like the two pictured above, and why they work.  I may also write about the sewer levels that failed and why.

I know sewers make for a bizarre theme for an event, but I hope you all will join me in showing what a good level a sewer can be!

Making Your First Map in Quake (Part 2)

For the rest of this series, see Preface and Part 1.

Our Progress So Far

In Part 1 of this tutorial, I covered the tools needed to make and play a map for Quake. Specifically, I explained:

  • The sourceport, Quakespasm, which allows us to play Quake on modern computers.
  • The editor, Trenchbroom, which allows us to make and modify “.map” files.
  • The compiler, EricW Tools , which allow us to turn our “.map” files into playable “.bsp” files.
  • And the compiler graphical user interface, ne_q1sp_compilingGui, which makes it easy for us to use the compiler.

In Part 1, I also explained the folder structure and settings for these tools so that they work together. If you have all of the tools set up, let’s compile our first map!

Exploring a Map

To keep things simple, I have prepared a map for you to use, named “”, which you can download Here. Once you have downloaded the map, move it to your “C:\QuakeDev\working” directory and open the map with Trenchbroom.

When you open the map, you should see something like the image below. If you don’t see any textures, or your editor has a different arrangement, I explain more below.


The Editor Layout

There are four main components to the Trenchbroom level editor.


  1. The Viewport is the biggest part of the screen with a view into the map. By default, this view shows the map in perspective with textures and a grid.
  2. The Toolbar is at the top of the screen, with various tools for editing our map.
  3. The Inspector is on the right side of the screen with information about our selection in the level. At the top of the Inspector, there are tabs for “Map”, “Entity”, and “Face”. The Inspector is where we modify properties of our entities, or apply textures.
  4. Lastly, we have the Info Panel at the bottom of the screen, which informs us of errors and warnings in the level.

If your editor does not look like the picture above, then you can hide or show the Inspector and the Info Panel by selecting “View” in the toolbar, and selecting the relevant option. For now, we don’t need the Info Panel, but we will need the Inspector set to the “Face” tab for the next part of this tutorial.


Adding the Texture Collection

If your view into the level shows a simple grey texture across the floors and walls, like this…


… this means that the texture package, known as a “.wad” file, is not loaded. If you compile the map without textures, the result in game will be an unpleasant red-and-white checkerboard error texture on every surface. Instead, let’s load in a “.wad” file so our map has textures.

For this map, I used the “prototype.wad” by Khreathor. If you did not download the file in part 1 of this tutorial, you can download “prototype.wad” Here. Once downloaded, move the file to your “C:\QuakeDev\Wads” directory.

Now, with the Trenchbroom editor open, go to the Face tab of the Inspector. At the bottom, there is a section labeled “Texture Collections”, where we link our “.wad” files. Select the “+” button to add the “prototype.wad” in your “C:\QuakeDev\Wads” directory. Trenchbroom will then ask for the “Path Type” for your texture collection. Select “Absolute”, and you’re good to go!


Viewport Camera

Now that we have the level loaded with textures, let’s fly around!

With the Viewport in focus (left click within the viewport), the W, A, S, and D keys control the camera movement Forward, Left, Right, and Back, just like playing the game. These directions are relative to where the camera is facing, which you can change by moving the mouse while holding the right mouse button.


The Q and X keys move the camera up and down. Unlike WASD, the Up and Down movement are not based on where the camera is facing; Up and Down are always the same. (If you prefer a different arrangement of keys, you can go to “View” → “Preferences” and then select the Keyboard icon.)

What’s in the Map

Now that we can fly around our level, let’s examine what’s here so far:

  • “Brushes” make up the floor, ceiling, and walls. The pillar with the orange texture is also a “brush”. These are solid blocks that define the level geometry we will see in game.
  • There is an “info_player_start”, which looks like a soldier running with an axe. This is where we will start in the map once we compile and play.
  • There is a “trigger_changelevel” with the “trigger” texture on the far side of the room. This works as our level exit.
  • There is a “monster_army” in front of the exit, to provide a simple obstacle for the player to overcome.
  • Last, there is a “weapon_nailgun” in the middle of the room, so the player has a tool to defeat the monster.

We’ll dig into these more in the next part of the tutorial. What matters for now is that we have the “info_player_start” and our “trigger_changelevel” so that we can play through the level from start to finish.


At this point, we have our map, “”, and we have the textures applied. We also have an idea of the pieces inside the map. Now let’s compile the map so we can play it!

First, let’s open the compiler GUI executable in “C:\QuakeDev\Tools\ne_q1spCompilingGui103”. Here we want to set our “Source Map”, which is on the right side of the program half way down, to “C:\QuakeDev\Working\”. We should also check the “Pause After Compiling” box, which will keep the compiler window open and inform us of errors. With the “Source Map” set, we can now compile by selecting “File” → “Compile”.


With our map compiled, look in your “C:\QuakeDev\id1\maps” folder for “tutorial1.bsp”. This is the compiled map.


If you check your “C:\QuakeDev\Working” folder, you’ll now see some additional files. The original “” file is still there for us to modify, and we also have a copy of the compiled “.bsp” and some “.log” files with information about the compiling process. What matters here is that we still have our “.map” file to modify.


Our Working folder after compiling

Playing The Map

Now that we have a compiled version of our map, we can play it. One easy way to do this is directly from the compiling GUI by selecting “File” → “Run”.


We can also run our map from within game. To do this, first open the Sourceport. Then start a new singleplayer game. Once in game, you can open the console with the tilde key, which lets you enter console commands and cheats. Here if you enter “maps”, you will see a list of all maps available to play, including “tutorial1”. To play this map, enter “map tutorial1”.


Next Time

In Part 3 of this tutorial, I’ll cover the basics of modifying the map so that you can make it your own. Then from there, we’ll take a leap from the basics of the tools to the more conceptual skills and design patterns of making a map for Quake.

In the meanwhile, here are some resources for you to continue learning:

  • Dumptruck_DS’s Trenchbroom Video Tutorials
  • The mapping tutorial on
  • The Quake Mapping Discord for help and questions. (You can ping me @ mclogenog)
  • The Quake level repository Quaddicted
  • The Quake forum func_msgboard. This is where people post new releases and organize mapping events. (This branch of the community can be a little rigid in Quake orthodoxy, and also a bit of a boys club, so visit the forum with caution.)