Adam Atomic on Tuning Canabalt
Yesterday on the Semi Secret dev blog, Adam Atomic posted an article entitled Tuning Canabalt. In the article he reveals some of the tweaks, tricks and techniques that went into getting the gameplay of Canabalt just right. From a game design standpoint, this is probably the most interesting article I’ve read in a long time.
Adam goes into how he chose the aspect ratio for this game, which is an interesting story about portraying speed in a 2D environment. He also discusses his technique for auto-generating playable levels based on the user’s current speed. There are lots of interesting topics in this article, however I felt the big takeaway was his discussion about providing “a little extra cushioning for people’s reaction times”. In Canabalt, what the “game engine sees” is not always a 1:1 to what the user sees. Adam talks about how me modified the hitboxes of the player, buildings and obstacles to make them a bit more forgiving for the user.
When you’re making a game like Canabalt, the idea is to make the player feel like a superhero. It’s OK if you have to lie a little bit, or in the case of Canabalt fudge the hit areas, to achieve this. As long as the programming layer and visual layer aren’t grotesquely different, the user won’t notice the tricks you’ve pulled… particularly when the tricks are in their favor. No-one questions how they survived a jump, but they will argue a death they felt was undue.
In the game below the hit areas are much smaller than the actual robots so that the user could zip in and out of them. This allowed the hero to move more adeptly which makes the user feel like Indiana Jones narrowly sliding under that closing temple door.
In order to build a fast paced game, Adam had to find ways to give back to the users the reaction time game environment’s limitations cost them. His explanation of how he did this is very interesting.
Tuning Canabalt is a must read for anyone who makes games, but it might be equally interesting to someone who just likes to play them.