So, what is it we're building?

01 Jan 2014

We’re building another remake, this time of a classic BBC Micro game!

When I started my previous game project Snipes!, my main motivation was to learn more about iOS and Objective-C development. The choice to make a clone of this particular classic DOS game wasn’t completely random though. I remember playing Snipes! on an old text-mode-only DOS PC as a kid, and at some point in time got this inexplicable desire to play it again. Since I didn’t have any DOS PC around the house, not even a Windows PC, playing Snipes! meant either installing DOSBox to emulate the original game, or playing a Linux clone. I came away disappointed with both options, 80x25 character text-mode games are just too blurry and movement too jaggy when emulated fullscreen on a modern computer, and the Linux version was so far from how I remembered the game it simply failed to scratch the itch I had. So what’s any self-respecting programming geek to do? Roll your own, obviously ;-)

Fast-forward 2 years and I find myself in a very similar situation with my ‘2k14: The Game’ project. Around the same time I remember playing Snipes! on a DOS PC, I also used to have a Commodore 64 and a whole stack of tapes full of games. One of these games was called Thrust, a game ported from the 1986 original for the BBC Micro, which was created and released by Superior Software. In the game you control a spaceship using just 2 possible actions: turning the ship, and engaging thrust. Each level of the game represents the surface of a planet, and somewhere below that surface, sits a mysterious orb, reachable by an excavated tunnel. The goal of the game is to maneuver your ship down the tunnel, pick up the orb using a tractor beam, fly it back up to the surface dangling below you, and escape the planet with the orb. While doing so, your ship is affected by gravity and inertia, falling down unless you use the thruster, the orb swinging and pulling at you when you are transporting it. To add some extra challenge, the levels are sprinkled with turrets, traps, switches, and using the thruster burns fuel, which needs to be replenished at fuel pickups using your tractor beam. Hit a wall with your ship or the orb, get shot, run out of fuel, and your dead.

Here’s a video of the game in action (warning: loud noise!):

In terms of suitability for a programming side-project, this game has a lot going for it. The basics of the game are simple enough to be tractable, but interesting enough for a little challenge. The vector-based look means there is little graphical design work necessary, which is definitely not my biggest talent. Yet, this vector-based look opens some interesting possibilities for adding some nice graphical effects at some point in the future, such as explosion effects, nicer level rendering using shader effects, etc. Level design and definition should be dead simple, just start out with a flat surface, extrude parts of it, and throw in the various actors and items. The idea of a physical simulation of a spaceship with a ball attached to it, with gravity and inertia, almost screams for more elaborate gameplay ideas. Last but not least: even though the original game is almost 30 years old, it’s still a fun and challenging game to play!

Goals for the project

At the very least I obviously want to end up with a playable game that supports the same features as the original. But why stop there? To make things a little more interesting, I’ve compiled a list of additional and stretch goals:

  1. Full, configurable physics simulation

    The original game obviously doesn’t actually run a real physics simulation, as the hardware it ran on probably doesn’t even have one tenth of a percent of the computing power required to do so. Gravity and inertia are simplified to the point they can be simulated using nothing but a bunch of additions and subtractions and a fixed update interval.

    2k14: The Game will use a full rigid-body physics simulation to simulate gravity and inertia of the spaceship and orb. The physics simulation should be configurable to potentially extend the gameplay later, for example adding ships with multiple thrusters, ships that can lift multiple orbs, etc.

  2. Custom, hardware-accelerated rendering

    Even though the visuals for this game could easily be implemented using straightforward bitmaps, sprites and some scrolling, there’s not much fun in that. On top of that, adding additional graphics effects later on would get complicated and restricted. The original game in all its simplicity already contains a few nifty graphics effects (for its time, of course ;-), which could be spiced up a little on modern hardware without breaking the style of the game.

    2k14: The Game will implement a hardware-accelerated rendering engine using programmable shaders.

  3. Fully scriptable game logic and level generation

    The behavior of actors in the game, the game logic itself, as well as the definition of the game level data should be fully scriptable. Fully scriptable in this context means that it should be possible to basically extend any aspect of the game using downloadable scripts.

  4. Scriptable vector-based graphics

    Besides scriptable game logic and levels, it would be pretty cool if even the graphics themselves were scriptable. The graphics of the original game simulate a vector-based look using sprites, an idea 2k14: The Game could take a level further by implementing a simple scriptable vector-drawing API that renders to textures that can be used for sprites.

  5. Decoupled game logic and presentation

    Basically the game should implement a classic Model-View-Controller architecture, which means it should be possible to swap the renderer or even run the game ‘headless’. This isn’t just to enforce a separation of concerns and prevent the code devolving into a big ball of mud, but it will also make it much easier to build a universal iPhone/iPad application.

Technology choices

In the next post I will present a list of technologies I will be using to implement the goals outlined above. Stay tuned!