Today I released a new Quake map, “Recursion”, which you can download over Here.
Or if you’re here to read about the map, I have some notes below!
Notes on the design
In standard Quake maps, there is an exit that leads the player into the next level, and on from there through an episode of maps. Harder levels block the exit with locked doors that require gold and silver keys, which require exploration. Mid-2000 level design replaced keys and doors with narrative equivalents—power generators and bridges, objectives and targets—before late-2000 design practices abandoned nonlinear spaces altogether. The result of this older lock-and-key pattern is that the player takes a mostly linear route through a nonlinear space, backtracking across hubs as the player takes keys to their respective doors. In Quake levels, backtracking is an opportunity for the player to reorient in what may otherwise be a disorienting space. Good backtracking also offers new gameplay through role reversals; for example, now the player fights downhill in contrast to the earlier fight uphill.
“Recursion” breaks from that format. Here there are four runes that each restart the level when the player acquires them. Once the player has all of the runes, the exit becomes available. Instead of backtracking, with opportunities for role reversals, this structure means literally replaying the start of the level multiple times to reach the end. On paper, this sounds worse! And if the start of the level was long, it would be worse. But “Recursion” quickly opens to a hub with several branches and many gameplay dynamics. Players also keep their inventory between level resets. With this format, I’ve tried to create a sandbox with a variety of toys for players to use, so the same space can play many ways. That is my goal with the format change from locks-and-keys to runes: a sandbox, not a series of skillchecks.
The short length of each branch also reduces the impact of death. There’s no need to save or load while playing “Recursion”. Since inventory persists between lives, the player can quickly try any of the objectives again, or try with a different tactic. I also applied this low-risk attitude to level boundaries. Instead of killing a player who falls into the abyss, the level teleports the player back to safety.
Another goal of this format is to keep the level alive as a world. When the player kills an enemy, collects a rune, and returns to the level start, that enemy will be alive again! I want all of the enemies to feel like inhabitants of a living world that the player is just passing through. This means the player isn’t “clearing” the level, or claiming territory.
In this way, I am drawing on the structure of Mario 64, where there are many stars to collect in a level, and each will send the player back to the start. My favorite levels from Mario 64 also play like sandboxes where I explore by setting my own goals. When I see a big hill to climb, I’ll want to reach the top, and when I do, the level replies to my exploration by giving me a star, or a boss to fight, or a puzzle to solve.
To get into the specifics of “Recursion”, I want each rune to offer its own type of gameplay:
- Rune 1: taking the left route down from the hub, the room locks in on the player and spawns 4 zombies. These enemies can only be killed with explosives, or by dealing a massive amount of damage. On a platform to one side is a grenade launcher. There are also explosive barrels for players who prefer that method, and to add a comedic danger to missed shots. There is also a quad damage powerup available in the hub before entering this space, for players who want to bypass explosives altogether. By eliminating the zombies, the room unlocks to let players return to the hub, and a cage opens to give access to the rune.
- Rune 2: at the highest point in the level, a platform floats with a rune on top. There are several routes from the first floor to the second floor. From there, a staircase leads up to the platform, and a Shambler spawns in for the player to fight! If the player skipped earlier fights during their ascent, or if the player is low on resources, this Shambler fight will be a chaotic retreat back down into the hub of the level. But once the player defeats the Shambler, a path opens to reach the rune.
- Rune 3: on the second floor of the level, a teleport takes the player into a separate arena with two moving piston-like columns in the middle. A Shambler spawns in, and the player must dodge between the dynamic cover to avoid the Shambler’s line of sight attacks. Once the Shambler is dead, a ShalRath and a Hell Knight spawn in. The former fires homing explosives projectiles, and the latter swings a sword and fires a fan of fire arrows. Both pressure the player to keep distance, but the homing explosives require the player to move and either lead the shot into the Hell Knight or into one of the pillars. After all enemies are dead, paths open to reach the rune, or to return to the hub. This rune is the closest to a traditional Quake skillcheck encounter.
- Rune 4: on the far right side of the level, a series of moving platforms cross a chasm to a button. On pressing the button, the player has 8 seconds to return and loop up a staircase where a cage has opened and made a rune available. The void under the platforms teleports the player back to the button, where they can quickly make a new attempt across. I designed this to be a bit of a puzzle, where there isn’t enough time if the player jumps on each platform as it becomes available. The solution is to make two longer jumps across, instead of four short jumps. This rune is frankly the weakest of the bunch, since there is only one correct way to complete it, and since partial failure is still punished. (I’ll be making a few tweaks in the next version.)
Beyond the runes, I also added a hard mode that makes the level much sillier. When the player walks along a ledge off to the side of the level start, a message warns the player that they’re about to activate “Fiend Mode”. If the player continues and picks up the relic at the end, their next instance in the level will be on hard difficulty, with many Fiend enemies added to the level. The Fiends tend to lunge past the player and off the level edge, where they are teleported back to the start. The result is as much humor as danger. This hard mode also gives the player the lightning gun and piles of ammo at intervals, which balances out the added enemies. Altogether, the changes of this “Fiend Mode” make the level about speedrunning and avoiding enemies on the way to each rune. It’s not a pure difficulty increase, but rather a new way of playing in the sandbox.
If you’ve followed my design blog for this year, you’ll know I wrote about these ideas back in March in “Early notes on Level Design Playgrounds”, and also back in December in “Halo’s Multiplayer and Public Parks” with an eye toward multiplayer. “Recursion” is the result of asking myself the easiest way to start testing these ideas and putting so much talk into practice. But there’s only so much I can do with vanilla Quake, and I had to skip many of the ideas from that March post.
Altogether, “Recursion” was maybe 24 hours of work (4 evenings after work, 5-6 hours each), ignoring dozens of scrapped level ideas that came before. For such a short turnaround, I’m glad it has proven a few of the core ideas.
In the long term, testing this playground design theory in Quake calls for a total conversion:
- New art assets to create a happier and more inviting world.
- A wider range of interaction options, fewer “do damage” weapons and more “do [thing]” tools. E.g. reimagine the rocket launcher as a no-damage knockback tool.
- Tools for randomization and surprise, like Mario Kart blocks.
- Full support for co-op.
- Respawning enemies and items instead of hacky level resets.
- Allow multiple levels of this type in an episode without restarting the game.
But that’s all too much for a side project, and it would take too long to get results. So, the short term:
- A bigger level, where each rune feels like a distinct area
- A better solution to varied gameplay than precision platforming
- Try separating the level start from the level proper, for a less jarring reset
- Look into basic code changes for a less hacky experience
These are a bit easier to achieve on my own. At the very least, they’ll verify the ideas of “Recursion” as more than a one-off gimmick approach to Quake level design.
That’s all for this post. Thanks for reading!