I had some more entries in mind for tech stuff that go into more detail, but I think for the time being I’d prefer to discuss how technology and prototyping connect. One of the principles that our mentor Tim Train has been pushing very heavily is that we should get the game prototyped in a playable format as soon as possible, and start designing the details of the game from there. Rapid prototyping is not something I’m good at; I have a tendency to mull design and engineering at length for the stuff I code. It’s a bad habit, to be honest. Tim’s been very helpful in keeping me focused on the goals that need to be hit.
Here’s an example. I have a very basic rendering prototype going that I threw together in XNA between some other homework to test a couple things like the game object system (more on this in a later entry) and animation and such. The prototype made it fairly clear that I’d need to write an explicit finite state machine to control animation transitions properly, and I was planning to have this done for Monday. Tim pointed out to me — and it should’ve been obvious in retrospect — that this is a waste of time right now. Prototypes don’t need animation, they need to be playable, and animating stuff is just visual fluff. So now I’m switching gears, working on implementing collision and basic world structure so that by next week there’s actually something resembing a playable game.
There’s a couple interesting things about prototyping. First of all, it’s important to strip your technology way back, to just the bare essentials. It actually forces you to focus on the very heart of your game, instead of the rendering technology or collision trees or any of that. You also don’t really need any support at all from art or music/sound for a while, because you can just put in placeholders. It’s a very coder-oriented phase of development, and goes well with concept art, concept sound/music, etc in terms of timing. Just like those pieces don’t need code support, a prototype doesn’t need any art support and so your teams (in a production title) can work independently in their own schedules.
That’s all missing the point, though. The key to a prototype is that it strips away everything, and I do mean everything, that can distract you from the real question:
Is the game fun?
Nice graphics is great. Nice sound is great. But it doesn’t make a game. (It can break a game, but that’s a separate problem.) When you have something as barebones as a prototype, you discover if the core element is fun or not.
The Hunt Valley area, about twenty miles north of Baltimore, is a hotbed of game development. Firaxis, Day 1, Big Huge, Zenimax, Bethesda — they all have offices there. These studios are all basically spinoffs of the old Microprose company based up there, and Microprose is well known because they produced the Civilization games, designed by Sid Meier. What many people don’t realize is that Sid isn’t just a designer — he’s also a programmer. He coded the original Civilization himself.
Why am I bringing this up? Well, Sid Meier is the God of Prototyping. He prototypes basically every game that will eventually go on to be a big budget “Sid Meier’s X” game, and he does it fast. Terrifyingly fast, in fact. I’ve heard stories crediting him with building entire games, approaching ten thousand lines of code, in a single weekend. There’s no real engineering to speak of; these games are apparently usually centered around a single massive (thousands of lines) DoEverything function that drives the game. There’s no design, no architecture. He just makes things work.
I’m not good at rapid prototyping, and that’s unfortunate because I think it’s a critical skill for a developer to have. That goes double if you’re interested in doing independent/small team development (which, if you have a hit these days on the iPhone or Xbox Live, is worth a cool half million or more). Hopefully I will get some serious practice in this weekend, so that when people want to know what I’ve been up to, all I have to do is hit Run and spin my laptop around to face them.