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.