One of the key platforms we were focusing on in the early days for Bedrock was the iPhone. And one of the other key areas we wanted to look at nailing was OpenGL-ES integration (in Java, this is through JSR-239). As a result, we really wanted to create a demonstration application for our licensees to show them both iPhone development in Bedrock as well as 3D application development. We could have just created a basic "spinning cube" demo, but we figured that if we were going to do the work, why not actually make a real game? Distributing the code to it would be just as beneficial, but actually creating a real product to go through the full submission process would mean we'd address as many potential problem areas as possible.
As a result, after a bit of internal discussion, we came up with the idea for Vektrax. Various of us there were fans of Tempest, Wipeout, Torus Trooper, and racing / shooting games of that ilk, however we didn't want to just create a blatant rip-off clone of one of those.
Personally, I liked the whole "racing down a tube idea", but I really wanted to make the tube split apart so you could find yourself racing on a flat plane or even folding back further so you found yourself on the outside of a tube at last. I can't immediately recall where the booster idea came from, or the gaining of fuel from shooting enemies, but again they seemed like fun elements to add.
Regarding gameplay features, we wanted some touchscreen input on top of the tilt steering, but actually using that to trigger the guns or something seemed pointless - in most games you want to fire as much as possible - why require a keypress or touch for it? Having something at the side of the screens that wasn't needed all the time seemed the best compromise as well as ensuring the player didn't end up obscuring the action with their thumbs too much. I additionally really wanted the majority of the HUD to rotate as the player tilted the phone as I thought it might look kinda cool (as well as keeping everything readable). This did lead us down the route of doing all the HUD in 3D too so I could apply simple rotational transforms on it.
On a related note, going with an "old school" feel with the untextured / vertex-coloured graphics and retro audio really fitted with what we were envisioning. Of course, the appearance may not have suited everyone's taste, but it seemed right to us. Also, from a technical perspective, various of these ideas meant that more polys could be thrown around at a higher framerate, which for a high speed game of this type is always a nice thing to achieve. Similarly with the audio - we felt less is more and instead of adding various additional sound effects which could have got annoying (e.g. a continuously playing "firing" sound, or a "booster trigger" which could annoy if the player feathered the boosters) we just went with the basics, leaving it open for the player to play their own iPod music in the background.
On top of this, we wanted to minimise the necessity for level designing (Metismo isn't a games company after all), so the idea of finite levels and racing to an end point didn't really gel with what we wanted from the game. It made more sense to have an unlimited gameplay experience with a checkpoint system and ongoing timer. The end result was that the checkpoints get slightly further apart with each level, forcing the player to have to spend more time boosting (or getting bonus time through killing boss ships). However, at some point, the game would always end for the player.
According to my schedule, I spent 3.5 work weeks getting the game from conception and prototyping to the completed, submitted product:
- 1.0d - Initial Bedrock project setup and iPhone preparation work
- 1.5d - Prototyping different ideas and design discussions
- 1.0d - Basic renderer setup (OpenGL-ES setup, camera work, tilt effects, object positioning, etc.)
- 1.5d - Basic tunnel work (twisting, splitting, colouring, continuous creation, placing objects on the tunnel surface, etc.)
- 2.5d - Importing 3D ship models, and light baking them
- 2.0d - HUD, font definition, front-end menus and help screens
- 1.0d - Booster rendering and fuel-sloshing effect on tilting
- 2.0d - Gameplay (firing, enemy types and movement, explosions, difficulty modes, hi-score tables, etc.)
- 1.5d - Audio integration and testing
- 1.0d - Optimisations
- 2.0d - Debugging and testing feedback changes
- 0.5d - Preparation work for App Store submission (screenshot capture, etc.)
For a 3D game, I don't consider this timing to be too bad at all! Especially given that it included prototyping and writing a parser to read in 3D model data from an exported ASCII format from 3ds Max - here's a snippet of what that format looks like:
*MESH_VERTEX 0 -110.4730 -46.0411 -2.7414
*MESH_VERTEX 1 -90.6572 -46.0411 17.0744
*MESH_FACE 0: A: 0 B: 2 C: 1 AB: 0 BC: 1 CA: 0 *MESH_SMOOTHING 1 *MESH_MTLID 3
Of course, the development time for this wasn't all in one block - I had a load of other things to do during work hours, but creating this game gave us a good, realistic use and test case for a lot of the iPhone work we were doing in Bedrock at the time. There's nothing like running a real project through a system to ensure you find the production-level issues that need fixing!
Personal note: My current high score for Hard mode is just shy of 9 million, reaching level 28