Intelligent design evolution

After seeing the last few posts, someone asked me why I’d gone from the original item-gathering concept to a more customary around-the-track racing game with more customary controls. This is a very good question, so in this post I’ll address some of the design decisions I made along the way.

The first prototype was mainly about the control scheme. I only put the items in to give you something to do with those controls, but I had not really thought hard about the game’s objectives at that point. The main challenge was in controlling the cart.

As I thought more about the notion of racing around with shopping carts, I realized that it would not do to have someone in the game to push the cart. He’d have to run way too fast and in unnatural directions if you decided to spin the cart around its axis, for example. So I decided to replace the imaginary guy by a pair of rocket engines. (The guy might make a reappearance sitting inside the cart, laughing maniacally, but no promises!)

The notion of a shopping cart equipped with rocket engines triggered an avalanche of other ideas. Maybe there’d be people in the store to run over. Maybe you could bump into things and destroy them. Maybe you could set things on fire with the flames from your engines. Basically: mayhem. The Carmageddon and GTA series prove how much fun this can be. It would go well together with the slightly-uncontrollable control scheme, too.

Then there was the question of objectives. Some games have different modes; I decided to keep it simple, and settle for just one mode at the moment. I considered several types of objectives:

  • Race: complete a certain number of laps as fast as possible, or be the first to complete them.
  • Deathmatch: waste your opponents, be the last one standing.
  • Shop: collect all items as quickly as you can, or collect as many items as possible in a given time, or collect more items than your opponents.
  • Cash: perform stunts and wreak havoc to gather as much money (or points) as possible in a given time.

There may be variations on these, but they were the main ones that I could find by looking at existing games and thinking about new possibilities.

Two factors played a role in my choice for the ‘race’ objective. The first was about duration. With a PC game, people will sit down and play for a relatively long time: I’d guess at least fifteen minutes, up to several hours. With a mobile game, people will typically play it on the run, on the train, in the classroom, in much shorter bursts. The game needs to accomodate this, so a single ‘round’ must be short. I decided on an average game length of two to three minutes, with a fairly strict upper bound, so you’d know that the round would not last forever like a tennis game can.

The second factor was about the carrot and the stick. To keep the player interested, it’s good to put up some concrete, achievable objective to strive for. We can roughly split out objectives into ‘discrete’ and ‘continuous’ ones. Continuous objectives are things like time and score, with a gliding scale. You try to get as low a time, or as high a score as possible. These are typically seen in the hard-core racing games, where people practice for days to hone their skill to perfection. Discrete objectives are, for example, a medal you receive if you finish three laps in less than two minutes, or being first to cross the finish line. I figured that a discrete objective would be better for a casual game, because it’s a very clear and concrete thing to strive for. “I want to be first” is, to the casual gamer, more enticing than “I want to get better at this”.

The ‘shop’ and ‘cash’ objectives have a strong continuous element to them, and felt less suitable for that reason. Arguably, the ‘shop’ objective can be made quite discrete – “collect all the items within two minutes” – but the time limit somehow feels arbitrary. Also, it would not allow me to put much mayhem in. The argument against ‘deathmatch’ was that it can be difficult to ensure short games, and more importantly that it requires a lot of interaction with your opponents. This would require very good AI code, and since I’m fairly inexperienced in that area, I’d rather avoid that risk. (A multiplayer deathmatch against human opponents might make it into the game, though!)

So, by elimination, I ended up with the ‘race’ objective: be the first to reach the finish line. But not all is lost. With a damage model and AI opponents, it is still possible to win by eliminating all opposition (‘deathmatch’ aspect). With collectible powerups and weapons, you can still gather cash along the way, which you can spend on upgrades (‘cash’ aspect).

That gives us two objectives: win the race, and gather as much cash as possible. These are mutually exclusive to some extent: by spending time to earn cash, you’ll probably fall behind, and not be as likely to win. To keep players from entering a race just to earn cash along the way, the earned cash will only be awarded if the player is first across the finish line. (For second and third place, an appropriate fraction could still be awarded.) So that became the objective of one ‘round’ of the game: be the first, and under that constraint, gather as much cash as you can.

Winning the race is what I refer to as the ‘short-term’ objective. There will have to be a ‘long-term’ objective too, a reason for the player to want to win in the first place. One of the options I’m considering is a leaderboard, where you start at the bottom and have to work your way up, like in the excellent old-school DOS game Death Rally, but I haven’t fleshed out the details yet. Any comments and ideas about this – or the rest of this post, for that matter – are very much welcome. (Although the RSS feed doesn’t yet show it, there is a commenting feature on this blog!) Meanwhile, go click that link and play Death Rally – a free Windows port available behind that link, and it works on Linux under Wine too!