Depth in games — an in-depth look

Making good games is hard. Making good small games is harder.

There are many facets you have to take into account to make your design a successful game, but they all boil down to one simple goal: engaging the players and keeping them engaged. You might be crafting a titanic 100-hour epic or a coffee-break game focusing on short, repeated playthroughs, but your basic problem stays the same. To keep players interested ten hours in, both types of games have to keep offering them something new throughout the whole experience.

My efforts in terms of player engagement.

This is not an easy thing to do — especially not within the strict confines of a tiny fantasy console like PICO-8, which was my platform of choice for two of my latest projects: Dank Tomb and The Lair. This article is about the platform’s limitations, about my attempts to create varied gameplay despite them, and the lessons I learned while doing so.

Alternate dimensions

The two approaches to achieving a large variety of play in a game are breadth and depth. Just like their real world counterparts, these imaginary gameplay dimensions are complementary. A bowl holds about as much water as a vase, they’re just laid out differently and serve different purposes.

The two approaches to game design. No, really. Bear with me.
(photos by Didriks and Francisco Anzola)

Breadth is all about the sheer amount of stuff in your game. It’s about having dozens of skills, hundreds of enemies, multiple levels, thousands of race/class combinations. The poster child for this category might be collectible card games like Hearthstone, which give you thousands of unique cards to assemble decks from.

But breadth doesn’t automatically mean variety. There might be more possible Hearthstone decks than there are atoms in the M81 galaxy, but when you play to win at the top level, the number of viable deck choices shrinks to about ten — and even that low number is only reached if the CCG is well-designed and its metagame is healthy. To prevent staleness, CCG’s serve new card sets at a breakneck pace.

Somewhere in here, there are ten atoms that are tournament-viable.

To avoid making a game whose real-world counterpart is a children’s wading pool, you need to invest in the other dimension: depth. Assessing the breadth of a game is easy — it’s just a matter of counting the gameplay elements. Depth is harder, as it’s all about qualities that are more ephemeral.

It’s about the reward inherent in learning a skill that’s hard to master. It’s about the joy of being faced with complex and meaningful choices, and being experienced enough with the game to make the right one. It’s about multi-faceted, open-ended designs that let players discover new uses for old mechanics. It’s about finding hidden layers of strategy in a game after grasping a new concept.

Depth is like a fractal: the more you zoom in, the more details you see.

Breadth is encountering new mechanics at every step. Depth is learning new things about an old mechanic with each encounter.

Constraints breed creativity

The currency of PICO-8 game design is the code token, and you only get 8,192 of them for your entire project. Next to the usual size of a game’s codebase, it’s like a haiku compared to a Shakespeare play. Every mechanic you add to your game costs precious tokens, and once you count the space occupied by the game engine, it turns out that PICO-8 cartridges only have room for a few meaningful, unique mechanics.

I guess real haiku are prettier to look at.

With a certain amount of programming skill and willingness to ignore every principle of sane software engineering, these numbers can be pushed a bit. But tricks like abusing object-oriented inheritance (“a door is just a wall made of wood that opens”) can only get you so far, and the number of different things you can implement in one PICO-8 cartridge is still in the low teens.

Since breadth is basically not an option, this requires PICO-8 game designers like me to either sacrifice variety of play or bank on depth. I’m partial to the second approach, and I’d like to tell you three stories about using depth to preserve diversity in small games.

Degrees of freedom

If you introduce a mechanic to your game, you might as well milk it for all its worth.

Early platformers offered only one kind of jump. Once you activated it, you soared through the air until you fell back down, hopefully on the platform you tried to reach. Modern platformer games, however, feature a greater degree of control. You can influence the height of your jump by holding down the button or just tapping it lightly. You can control the character while airborne, stopping or turning mid-air.

Part of the reason behind this is that the jumps just feel better and more natural this way. But the other half of the equation is gameplay depth. The additional control given to the players lets them perform all sorts of weird jump arcs — and utilizing all these arcs is required to complete the more advanced levels.

Some games go further by introducing the double jump — a simple mechanic that lets you execute a second jump mid-air. All the code for jump physics is already there, so you get a new mechanic almost for free.

Its impact on the game’s possibility space, however, is tremendous compared to the effort needed to implement it. Higher jumps, longer jumps, jumps after falling of a ledge — a whole family of new tricks requiring double-jumping at just the right moment becomes available to both the player and the level designer.

This brings me to Celeste, a PICO-8 platformer by Matt Thorson and Noel Berry. Other than wall-climbing, the double jump is pretty much the only ability the player has in the game — but with an interesting twist. Their double jump is actually a launch-type move, and you can launch in any direction, not just up. This improves on the standard double jump by increasing the degrees of freedom even further. The strength of this mechanic is the driving force of the game’s level design and a major reason behind Celeste being so good and fresh as a platformer, despite the player having only a few abilities to work with.

Celeste’s “double-jump” in practice.

Back in my own neck of the woods, I was also working on a game for the PICO-8 called The Lair. Its roots are in classic beat’em ups and the first problem I had with its design was the basic attack available to a player.

In a good beat’em up, a great part of the play experience comes from the sizable array of moves at your disposal. They come with different wind-up and recovery times, varying ranges and damage potentials. Knowing which of the moves to execute and when constitutes a lot of the depth in a beat’em up — but you need a broad selection first.

The Lair couldn’t afford it. Every new move has to be animated (using up a lot of the graphics budget of a PICO-8 cartridge), coded up (eating hundreds of very limited code tokens) and tied to a unique way to execute it (which is a pain on a console with a total of two buttons).

On the other hand, just having a single attack move was underwhelming. There was some fun to be had around timing its execution properly, but the rhythm of the fights was constant and there weren’t many meaningful choices for the player.

The solution I ended up implementing was very simple — you can hold the attack button to charge a lunge. With more charge time, you inflict more damage and cover more distance. But there is also a downside. Charging makes you move slower and disables your defenses, which makes you vulnerable. Powerful attacks also take longer, making you more exposed.

Various attack strengths in The Lair.

What this accomplishes is a good replacement for the large array of moves in traditional beat’em ups — a single adjustable move that the player can turn into what they need. The trade-offs and decisions are mostly the same, but I only used up one button and a few meager lines of additional code.

What ties Celeste and Lair together is the fact that both games sacrifice some of the breadth common in their respective genres. In return, they make a standard mechanic deeper than usual, preserving most of the variety of play through simpler means.

Summing the parts

Well-designed gameplay elements are interesting in isolation, but they are even more interesting in conjunction. One way to get more mileage from enemies, obstacles or puzzle components is to make sure they combine well and pose a new, unique challenge when so combined.

Warning Forever, a 2003 boss shooter by Hikoza Ohkubo is a great example of how to do this. It’s a minimal game where you battle a series of bosses built from modules. Several types of weapons can be attached to these modules and the bosses evolve over time, tweaking their arsenal to give you the most trouble.

The weapons are rather simple: a laser that keeps firing in a straight line but discharges after a while or a pod that shoots homing missiles. These weapons are easy to handle when encountered alone. The laser is heavily telegraphed so you can just move to a different area of the battlefield. Missiles are pretty slow, which lets you easily avoid them or shoot them down.

But when you first encounter an enemy that uses both weapons, the whole experience changes. Lasers criss-crossing the screen cut the battlefield into small pockets in which you can be trapped. Once you’re in such a pocket, it’s suddenly not so easy to avoid the missiles — the space available to do so is severely restricted.

Houston, we have a problem.

The game becomes way more engaging at this point since the player no longer has a single best option. Missiles want you to stay on the move, while with lasers, you’d prefer not to have to move at all. This mismatch creates tension and is the reason the whole scenario works so well.

Back in The Lair development, I had one more problem caused by the graphics restrictions. PICO-8 cartridges can store a maximum of 128x128 pixels of graphics, which means you can’t fit a lot of large, animated characters. You know, like the ones you’d like to have in a beat’em up. My selection of enemies was going to be rather small, and despite using tricks like palette swaps, I couldn’t do very much about it.

This made me lean on the same thing Warning Forever did with weapons — the interplay between my small cast of characters. The tension caused by the different strategies required is what makes that game’s laser-missile combo so effective. For Lair, I decided to leverage the same kind of tension by having each opponent force a specific rhythm on the fight.

Felmouths are small charging enemies, requiring you to plant your feet and time your attacks carefully. Wraiths constantly teleport behind your back, forcing you to stay on the move and mind your orientation. Stonemen aren’t stunned by hits, so you have to goad them into an attack, avoid it and strike them while they’re recovering. Belchers create pools of acid that limit your movement on the battlefield, while firespouts stay back and breathe fire, requiring you to take the fight to them. Eldritch horrors have an unblockable close-range attack, requiring a hit-and-run approach. Skeletons and their captains are mostly cannon fodder, but come in large groups, which means you can easily end up with a sword in your back when you’re dealing with the more interesting monsters.

The simplest ways of dealing with these monsters are all incompatible with each other. One wants you to stand still, the other — to move about. Some encourage aggression, others — careful defense. With each new combination, priorities shift and fresh strategies are formed.

Warning Forever and Lair are both rather small games. Their selections of boss weapons and enemies, respectively, are definitely not broad by the standards of their genres. And yet, the games stay varied thanks to the deep interactions between the individual elements.

Tying knots

Having your game components change character when they interact is good. What’s even better is making sure they all tie together through an overarching mechanic.

There is no game that does this better than Downwell. The title is quite fitting, since it’s all about a guy falling down a well. To make things more interesting, the guy has been equipped with gunboots. When you shoot (and you can only shoot down), you not only fire bullets, but also generate lift, letting you slow your descent to get more control.

Typical Downwell gameplay

The ammunition for the boots is very limited. The best way to recharge them is stomping on enemies, which refills the ammo bar instantly. But aiming yourself at enemies is hard without slowing down by spending yet more bullets. Landing on solid ground also recharges your weapon, but at the cost of sacrificing your combo count, and getting big combos is the best way to make your ammo bar larger.

There are many more mechanical ties between gameplay elements in Downwell, and if you’re interested, there is a great Game Maker’s Toolkit episode on it, offering in-depth analysis and yet more praise for the game’s design. But even from my short description, you can probably see how Downwell’s ammunition economy is a very central mechanic that ties into all the other elements of this game.

My story about central mechanics is about Dank Tomb, a top-down puzzle-platformer game that was my second big PICO-8 project, and how I stumbled into actually designing it right mostly by accident.

I wanted to introduce moving platforms to the game to broaden the space for puzzle design, giving the players new ways of reaching places and transporting things to their destinations. Such platforms usually move along predefined paths that are drawn using a game’s level editor. But PICO-8’s map editor doesn’t support anything more than a grid of tiles, let alone anything resembling vector paths I could use for the platforms. I tried coding up my own solution, but it ended up costing a lot of my precious code tokens; tokens that I could really use for other purposes.

I grumbled a bit and came up with an alternative. Paths were expensive, but I had a way of attaching a few bits of configuration to each platform essentially for free. I used these bits to control what a platform would do when it ran into terrain: it would either double back or turn clockwise/counterclockwise. If there were no obstacles, it would just keep going forward.

At the time, this seemed like an unfortunate but necessary compromise. It felt like I was sacrificing a little bit of design space, but the solution was simple and fit easily within PICO-8’s code limits. As first impressions often are, this one was wrong.

When I started using platforms in actual level designs, it turned out this new solution did not curtail my design space — it actually opened it up more. Moving platforms became something the players could control indirectly by altering the terrain they move in. Falling stones make traversing the tomb harder, but they also allow you to sculpt paths for platforms by carefully choosing which ones to step on. Raising floor sections with levers opens up new paths for the player, but closes others for the platforms. Magical stepping stones that appear when you’re near them help you make longer jumps, but also obstruct the platforms.

Clearing a path for the platform.

What I perceived as a clever implementation trick applied out of necessity ended up being the backbone of the game and the source of its best puzzles — and it’s all because I accidentally found a way to make platforms interact with nearly every other object in the game.

Dank Tomb and Downwell both have only a narrow selection of mechanics. What makes them engaging is tying these mechanics into a web of deep interactions by making every action mean more than one thing.

Small things, big lessons

In art and design, minimalism is all about stripping things down to their core. Minimalistic designs can be valuable not only for their own merits, but also because they teach us lessons on breaking down concepts like shape, utility or composition to their simplest, cutting out everything that is not important. The designers who take these lessons to heart become better at all kinds of design, not only at minimalistic ones.

The same applies to my adventures with PICO-8. Struggling to fit my games on its cartridges made me really appreciate the distinction between breadth and depth for the first time, and I’d argue it made me a better developer. PICO-8 is artificially limited, but its make-believe token economy is good practice for dealing with the very real constraints that every indie developer must face: limited time, tight budgets, dwindling motivation. Adding breadth to your designs always requires spending some of these resources, so knowing how to augment it with cheaper-to-create depth comes in handy.

Neither depth nor breadth are the be-all-end-all answer to good game design. But understanding them and knowing when and how to use them certainly brings us closer to that ideal.

If you want to be a potter, it’s good to be able to tell a bowl from a vase.

This article would not exist without the support of the generous folks on my Patreon, especially my top-tier supporters: Ryan Malm, Thorsten Schleinzer and Roy Fielding. Thank you!