It may not quite be Google 20% time, but a number of us at RTW were given last week off “normal” work, assigned randomly to small teams of 5 or 6 and set the challenge of making a complete game of our design. Without a 3D artist, my team went for “Nanotube”, a tunnel shooter with massively over-the-top speed, particles and music:
Each level was a race against the clock – so collisions just slowed you down rather than killing you. Accelerating pushed you towards the middle of the tube, and you could rotate left/right including flying upside down. We had a variety of powerups including the usual weapon upgrades, speed boost and score multipliers as well as some undesirable pickups: time penalties, growing the ship (making it harder to avoid stuff) and losing all weapons for a time. Each level had a new theme – music track, tunnel texture, enemy colour, particle textures etc.
Making a game in a week was intensive and exhausting, but in a good, energising way. It’s really amazing how much you can get done in that time. You might wonder why our normal projects take so long – until you look at the code! Good engineering definitely well by the wayside. I heard another team nearby joking about how they were making everything public. I could really feel the poor engineering beginning to slow us down a bit right at the end, like walking into deeper and deeper mud – we wouldn’t have been able to keep it up much longer in that style! The week ended with everyone walking around and trying all the different games out on Friday afternoon. We moved our demo to the boardroom with its massive screen and surround sound, and it was truly brain-melting 🙂
We used XNA and it turned out pretty well. There’s not much to say about it really except that it seemed just right for a project this length: easy to learn, providing some powerful functionality (the content pipeline was particularly effective and time-saving), nice and simple for a small project, and it seemed to just work, not get in our way etc. Probably the nicest thing they could add would be built-in support for creating user interface (front-end menus, HUD etc); we mostly just avoided this through minimalist game design – I think the high score table at the end was our only UI (we decided that “pausing is for wussies”).
Working with a different group of people to normal was a lot of fun, too. Duncan did all the graphical magic with some amazing shaders (I love the speed-based radial blur) and particle effects; Robbie transformed himself into an audio guy for the week (yes, we teased him about his self-composed win/lose music, but the game was heavily audio-dependent and he really nailed it); Riccardo discovered how frustrating player controls are to get ‘feeling’ right (but there’s no doubt he did it); Sam seemed to spend most of the week feeding us junk food “to make him feel skinny” (admittedly, I think he found time to make all the art for the game somewhere in there!) and Kevin designed all the enemy waves and gameplay. It was a real pleasure to spend a week with them.
For my part, I did two main things: collisions, and the enemy wave system. The collisions were dead simple – everything was a sphere. The nice thing about spheres is that it’s trivial to write an accurate swept sphere-sphere collision function (I felt that proper swept collision would be really important at the speed of our game; the downside was that spheres didn’t fit all the objects perfectly, of course). I actually spent most of the time on the enemy spawning, which turned out to be mostly file parsing code … not very glamorous but someone had to do it so that Kevin could focus on making the game itself 🙂
I ended up really proud of what we achieved in a week, and we were lucky enough to pick up a 3rd place prize. I say lucky because it was astonishing to see what everyone else had done, to the point that I felt quite guilty getting a prize at all. The breadth of concepts, the polish level, the stunning artwork, the humour, and the sheer fun of everything on show was a sight to see.
I definitely hope we get to do this again some time 🙂