Oct 26, 2019 - Level Design Patterns in 2D Games


I’m a sucker for level design and design patterns, so when I came across this article (and paper) called “Level Design Patterns in 2D games”, I had to read it! Unfortunately it’s a bit wordy, so I thought I’d summarise it and throw in a bunch of pictures! Enjoy!

It’s taken a surprising amount of effort to gather these examples. If you know of any please let me know so I can add more!


Guide the player through the path they need to take.

  1. Level shape

    Super Mario Bros. Super Meat Boy
    Super Mario Bros. stairs to flagpole Super Meat Boy hills
  2. Collectibles (a.k.a. breadcrumbing)

    Donkey Kong Country 2 Granny Smith
    Donkey Kong Country 2 bananas Granny Smith apples
  3. Enemies

    Super Mario Bros. 3 Sonic 3
    Super Mario Bros. 3 flying shells Sonic 3 monkey and collectible on tree
  4. Environmental cues

    The Legend of Zelda: A Link to the Past Pokemon
    The Legend of Zelda: A Link to the Past bombable walls Pokemon hidden items in conspicuous rocks

Safe Zone

Give the players a place safe from hazards so they can stop and think.

Contra The Legend of Zelda
Contra energy zone flames The Legend of Zelda safe doorways in dungeons


Partially introduce something new to the player, only to fully reveal it later. This can serve to teach the player, or encourage exploration.

  1. New hazard that’s out of reach

    Bare Knuckle III Golden Axe
    Bare Knuckle III boss in boat Golden Axe bad brothers
  2. New enemy that foreshadows a boss

    Megaman Contra
    Megaman enemy using Cutman weaponMegaman Cutman boss fight Contra bugger before boss
  3. New objects / obstacles that cannot be used until later, to encourage exploration.

    Chrono Trigger Pokemon
    Chrono Trigger sealed chests Pokemon tree


Combining multiple objects to create new experiences, like a harder challenge.

  1. Multiples of the same object

    Raiden 2 Streets of Rage 3
    Raiden 2 multiple enemies
  2. Different objects

    Jackal Super Mario World
    Jackal level 5 boss Super Mario World Banzai Bill and Goombas


Giving the player different choices.

  1. Branching with no restrictions - gives the feeling of exploration

    Binding of Isaac: Rebirth Final Fantasy IV
    Binding of Isaac: Rebirth branching map Final Fantasy IV airship
  2. Conditional branching - stimulates curiosity and may require backtracking

    Super Metroid The Legend of Zelda: A Link to the Past
    Super Metroid coloured doors The Legend of Zelda: A Link to the Past locked doors
  3. Risk-reward branches - encourages players to invest more time in the game by rewarding skill

    Excitebike Sonic 3
    Excitebike branching paths Sonic 3 extra life

Pace Breaking

Dramatically changing the pacing of the game - higher or lower tension.

  1. Introduce difficulty (e.g. bosses) to increase tension

    Lifeforce 1943
    Lifeforce first boss 1943 boss
  2. Decrease tension to let players enjoy other parts of the game, or learn a new mechanic

    Mappy Street Fighter 2
    Mappy bonus round Street Fighter 2 car
  3. Decrease tension to set up for a more dramatic increase later (e.g. just before a boss fight)

    Megaman 2 Chrono Trigger
    Megaman 2 boss corridor Chrono Trigger Magus's Lair
  4. Controlling tension through level design

    Jackal Gradius 2
    Jackal lasers Gradius 2 flares

Sep 2, 2019 - 3 Tips for Super Legible Pixel Fonts


Recently I restored the font used in C-Dogs SDL to the one used in the original C-Dogs. The reason why they were replaced in the first place was because the original graphics weren’t open source, so I was looking for alternatives. A few years back the author of C-Dogs agreed to open source the original graphics, and I’ve only just gotten around to restoring the font.

But that’s not what this post is about! I want you to take a look at the C-Dogs font:

It’s actually a pretty neat font. Most of the letters are just 3x5 pixels (some wider or taller), but with a few tricks they look super legible for their size. Here I’ll show you some of the tricks used to make pixel fonts really legible.

Tom Thumb

Let’s back up a bit. While I was looking for a free font, I had some tough requirements. The font couldn’t be bigger than 3x5 pixels, otherwise the UI in the game will break. That’s a really small size to work with, and most pixel fonts struggle at that size.

Most pixel fonts are around the 8x8 size

I managed to find a contender in a surprising place; someone made some 3x5 fonts for use on PDAs, where screens could be 160x160 pixels total. The font was jokingly called “Tom Thumb”:

This was the right size, but it’s not nearly as legible as the C-Dogs font. Some letters are so compressed it’s hard to tell what they are without context (take a look at “M” and “N” for example). Tom Thumb, being made for a terminal, strictly needed to be monospace whereas with C-Dogs SDL we could have variable-width fonts. Here’s some tricks we used to enhance Tom Thumb:

Add Outlines

For games, you don’t really know where your text could end up. It could be over a dark or light background, coloured, or with a bunch of busy game objects moving in the background. A plain-white text will get lost over a bright background and so forth.

A really cheap solution is to just add an outline! And if you overlap the outline it doesn’t even need to add to the width of your font.

Use Greys

Before the proliferation of 4k displays, folks have come up with some clever ways to make screen fonts legible. Here’s a simple approach using antialiasing:

We can copy the same idea on pixel fonts and use some greys in the font to hint at curves.

Look at how the “o”s become much rounder, and the “W”’s shape is much improved.

Make it Proportional

We didn’t get to this point with Tom Thumb, but since C-Dogs SDL can handle proportional fonts, why not use the extra horizontal space available? It can really improve wide letters like “W” and “M”.

Here I’ve just replaced the “w” with one from C-Dogs. Doesn’t it look great?

If you’re interested in Tom Thumb, both the original and our enhanced version, you can find it here on OGA. It’s got a great range actually, with lots of Latin1 characters.

And if you’re making pixel fonts yourself, why not use some of these tips?

Feb 16, 2019 - Useful Gamedev Articles


Over the years I’ve found myself referring back to the same handful of gamedev articles, because their advice is useful and timeless. I’ve decided to collect them here in one place for easy reference. Hope you enjoy!

How to Reduce Visual Confusion in Your Game by Peter Angstadt

A lot of game devs know how to make good-looking screenshots but the game itself is unreadable because everything looks too busy, too dark or too washed out. This article goes into the visual design theory of why, and really easy ways of improving the readability of your game.

The Theory and Practice of Cameras in Side-Scrollers by Itay Keren

This article contains an encyclopaedic list of 2D side-scroller cameras, many of which can also be applied to 2D games in general. Essential reading for anyone making a 2D camera.

adventures in level design: Wolfenstein 3D (1, 2, 3) by Liz Ryerson

This series of blog posts dissecting a few Wolfenstein 3D levels contains surprising insights, covering not just the classic level design goal of pacing, but also narrative and the surprising effect of confusing map layouts and what that says about an ultimately ridiculous game setting.

Traversal Level Design Principles by Travis Hoffstetter

Traversal is an oft-overlooked but key component of open-world games. Great traversal means it’s fun to get around in the game, and this is just as important as having an interesting world. Good reference article for anyone making a game that involves travelling across a world.

Fix Your Timestep! by Glenn Fiedler (Gaffer On Games)

Normally I’d recommend game devs use a good engine, so you won’t need to write a game loop. But for the stubborn engine developers, or just the morbidly curious, this is a really good article on why your homebrew game loop probably sucks. At least you’ll know what the heck delta time means.

        while ( accumulator >= dt )
            previousState = currentState;
            integrate( currentState, t, dt );
            t += dt;
            accumulator -= dt;

Build a Bad Guy Workshop - Designing enemies for retro games

A big list of retro enemy behaviours. Really great reference for retro game devs.

Splitter The enemy can split into multiple other enemies while destroying itself. Examples: Rogue Legacy’s Slimes, Legend of Zelda’s Vire and Biri.

Cloner The enemy can duplicate itself. Often, the duplicate is an exact clone, but sometimes, the duplicate is very slightly modified (such as having reduced health, or being faster). The enemy that does the cloning is not destroyed. Example: Zelda’s Ghini

Miyamoto on World 1-1: How Nintendo made Mario’s most iconic level

Miyamoto on World 1-1: How Nintendo made Mario's most iconic level

This short (~15min) video by Eurogamer analyses Super Mario Bro’s world 1-1 with its creators including Miyamoto. In it he explains how they designed the level to teach players the fundamentals of playing platformer games, using escalating challenges and sequences. It’s a powerful technique and a superior alternative to overt tutorials and manual instructions.

The same idea has been explored in other places, but this video is a great, concise introduction to the concept.

Reverse Design articles by The Game Design Forum

These are really quality design analyses of classic games. All of them are very good but of particular use are:

  • Final Fantasy 6 and the special way it’s designed around the dungeon as the unit of content, and how that influences everything from battle durations and how to balance those pesky RPG curves.
  • Super Mario World is a masterclass in cadence design - how to ramp up difficulty in a challenging yet pleasing way.