Release Notes for Toybox

Last weekend I released my Quake mod “Toybox”, which offers two new maps of open-ended exploration with an emphasis on joyful movement. You can download the mod from dropbox or quaketastic.

If you don’t have Quake but are still curious about Toybox, here’s my video playthrough:

Or keep reading for my design notes below!

toybox1toybox2toybox3toybox4

Map Pack or Mod?

When I released Toybox, I wasn’t sure whether to call it a map pack or a mod. The enemies and items are all still Quake in their function and presentation. The code changes—all part of progs_dump by dumptruck_ds—are there to simplify level creation, but most of the gameplay in Toybox is possible without modified code.

The most striking modification in Toybox is how the levels look. Quake has never been so bright and colorful before. However, I did not change the color palette. These colors were always available to modders, but seldom used. Even before we add colored fog and lighting, which are features of modern sourceports, Quake has what it needs to be bright and colorful instead of dark and brown.

quake1palette

Quake’s color palette

My level design for Toybox is the other modification. In Quake, most levels offer a sequence of obstacles to overcome. Some of these obstacles, like locked doors and keys, serve as goals to guide the player and structure their progression through the level. Other obstacles, like traps and combat encounters, are the heart of the experience; these obstacles ask players to react with skill or die.

Instead of this structure, I built my Toybox levels for a nonlinear progression. Both levels have two keys, which together open the exit, but players can choose the order they seek them. There are multiple methods to acquire most of the keys, and there are other objectives in the form of runes and secrets for the players to pursue. My hope with the open layout and objectives is for players to explore at their own pace.

Importantly, I didn’t use secret tags. In normal Quake maps, players can track how many secrets there are to find. But with my Toybox levels, some secrets aren’t possible on the first playthrough. Specifically, both levels have secrets that require runes from the other level. If I tagged these areas as secrets, and players saw they had some number of secrets left to find, I worried that my players would spend hours looking everywhere in the map instead of moving on. By not tagging any secrets, I hope my players exit the level when they are satisfied with their exploration.

I also included a tourist mode instead of the traditional easy mode. This option lets players explore the world without any monsters to fight, and lets players focus on exploration, level interactivity, and the joy of Quake’s movement. Because the keys in each level aren’t tied to monsters or combat encounters, it is possible to complete both levels in this mode.

Playgrounds and Living Worlds

Some of my design goals for Toybox started with “Recursion”, a map I released in August 2018. With that map, there were four goals for the player to complete in any order. Completing each goal would reset the level to the start, and reset the enemies and items with it. One of my inspirations for this was Super Mario 64, which sends the player back to the hub after completing each goal; this reset may have been for technical reasons at the time, but it was also a way of keeping the world alive and changing across multiple objectives. For Recursion, this reset meant that players lose the territory they claimed after each reset. The player’s role was no longer to conquer the dungeon, but to pass through a world that would persist without them.

With Toybox, I tried this a different way. When the player enters the level, there are monsters roaming, and the player can kill them all before proceeding with any of the goals. However, many of the monsters aren’t a threat until the player wanders nearby, so there is no urgency to clear the level. With this as the baseline, each key the player finds adds a new horde of monsters to the level. Some of these reinforcements pose immediate threats to the player, but others are there to reclaim territory and offer new challenges as the player continues to explore.

Both Toybox and “Recursion” are imperfect attempts to create a world that players can’t consume. Ideally, the monsters would respawn on their own. Or instead of dying, the monsters would freeze or stun for several seconds

For “Recursion” and Toybox, I drew inspiration from the design of playgrounds. In my work, I want to create persistent spaces for non-prescriptive play. But to achieve this goal, I’ll need to mod Quake in ways that change its identity.

Toybox as Subversion

Most of the Quake community focuses on the craft. There are over two decades of work refining techniques specific to Quake and its tools. Most of this work exists within Quake’s language of dungeons, monsters, and gore. A few works, like czg’s Honey, push to the fringe of traditional aesthetics and expand the language of what a Quake map can be. But, compared to the Doom mod scene, Quake remains conservative. Even in the Quake-inspired and Quake-derived retro-shooter renaissance of Dusk, Prodeus, and Wrath, it’s still monsters, dungeons, and gore. (So much focus on gore, you’d think that’s all Quake is missing…)

My hope with Toybox is to nudge this conservatism. Within the Quake modding community, I want to encourage others to explore outside the established techniques and craft. I also want to signal to a wider community of developers that there is room here to make strange and beautiful worlds. I want people to know that Quake can be more than its dungeons and monsters and gore. Of course, Quake is excellent at those things too; this isn’t a one-or-the-other situation.

Through the simplicity of Quake’s modding tools, I see the potential for a new generation of developers to learn the skills of 3D level design. But for this to be possible, we have to create space where different forms of expression are welcome. We have to show outsiders a reason to join. One of my hopes with Toybox is to start making that space so more experimental and personal work can follow.

There is more I want to explore in the ideas around Toybox. I want to do more with the design language of playgrounds and welcoming environments. To do this within Quake, I have to modify the code more deeply and push my work away from this ambiguity between mod and map pack. With its own identity, my project will lose its power as a subversion of Quake.

So, while there is more I want to do, I felt it was important to release Toybox in its current form. In this release, version 1, Toybox occupies a happy space as both mod and map pack, as both Quake and something all its own.

Special Thanks

To close out this post, there are some folks I want to thank:

First, thanks to dumptruck_ds for his progs_dump mod framework, and for all of his support in the Quake community. Without his work, the Toybox levels would have been a pain to create, and a few of their features would have been impossible. It is also thanks to his tutorials that I started making maps for Quake around this time last year.

Second, I want to thank Benoit Stordeur (aka Bal). He was the first playtester for the mod, and his feedback and enthusiasm motivated me to continue with these ideas. Without his encouragement, I might not have finished Toybox at all.

I also want to thank the level design community beyond the mod scene, especially those of you who see what I’m doing here and say “huh!” with legitimate curiosity. Even if you don’t get a chance to play this mod, I hope you’ve found this post useful for your own work.

Lastly, thank you for reading!
-Andrew

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s