Unless you’ve actually ever made a computer game you may not be aware of how complex the process really is. This isn’t a boast with which I intend to inflate my ego, or some excuse for the time such endevours take. It’s just a stamement of fact about the way things are.
Computer games are not alone in the set of all activities that are challenging, nor are they sole occupant of the set of things that when done well appear to the end user (or target audience) as usable and approachable. However, they also occupy the set of things who’s creation feels like it should be simpler than it really is. Who’s creation is filled with little things that on the surface seem simple but turn out to be filled with layers of complexity. I think in that, they may well be alone.
As an excercise next time you play a computer game, consider what complexity might hide behind simply making your character move, jump or attack as you’d expect when you press a button (obviously assuming you’ve chosen game that has a character in it). You may be suprised, and unless you’ve ever written the code for it, I’d put money on being able to show you something your character does that you didn’t realise to give you that feeling of responsiveness, fairness and enjoyment.
Now, to show I’ve not been squandering my time I thought I’d share a little bit of progress from my Moon project. As you can see from the screenshot above it’s at a very (very) early stage. However, The aim and mechanics are pretty settled now. Basically, you control a character (the little white blob in the image) in a blocky world solving block pushing puzzles and jumping around platforms looking for the broken pieces of the moon. Simple as that. Obviously the charm is in the details.
If your the sort to be interested in such things I’ve moved back to C++ for now rather than XNA, partly for reasons of familiarity and partly because I already have so much code already written in C++. The game engine itself is a new one. It’s not huge (and no engine should be) but it’s designed to be multithreaded from the start so the streaming file handling and command buffer driven rendering were pretty simple to implement. it’s all shader driven and additional visual features are easy to add and tweak. So far it’s just reflection, shadows, blur, bloom, lighting and colour balancing.
Also, to save me from a whole ton of asset creating all the geometry is procedurally generated. This means that every part of the game world can look unique without me having to spend years modelling trees, rocks, grass and so on. This makes level editing really easy too; just delete (or add) a piece of ground and click ‘regenerate’ and everything just works. the tree roots follow the new contours, plants and decorations adjusts and everything looks just like it was always supposed to be that way.
Obviously, all of this only looks simple.