?

Log in

No account? Create an account

Tue, May. 3rd, 2005, 01:00 pm
Crazy (golf|racing|whatever)

I taught myself to program by cracking games on the original BBC at school and then writing trainers for them. I tried writing a few games and, like Jeff Minter ended up learning how to peek and poke.

Then my parents bought me a sublime Atari ST 520FM with the half meg upgrade and I started learning STOS which was lovely - especially with things like the Minty and Misty extensions. However, eventually, I needed to drop down to 68k assembler for speed and, lo!, my journey to the Dark Side was complete.

Eventually, after many twists and turns, I ended up working as a senior games developer for a now defunct online and mobile games company writing a mobile phone based gaming engine with various bells and whistles. The engine, MEAT (Mobile Entertainment Application Toolkit) lives on through Bitbull which makes me happy.

Anyway, after the defuncting I attempted to get a job doing mobile games despite, well, loathing J2ME for being a putrid pile of monkey sputum. At one interview I was asked to sketch a design for a top down racing games. Usually I'd do this by having masks and doing pixel look ups for collision detection or something but I suddenly had an idea inspired by an interview with Will Wright on how he did the Sims. Basically each Sim knew nothing about an object (e.g a TV) - instead the TV acted on the Sim. Nifty - the dual bonus is that the core AI for the Sim itself is simple, all the code is modularised (all the 'TV' code is in the 'TV' object) and it's dead easy to add entirely new objects (because the only thing that needs to know about the object is, err, the object).

So my idea was to have each tile in this racing game be smart. At each clock tick the car would update it's acceleration and orientation (based on user input) and then would ask the tile it was on what to do. The tile could work out whether the car was on grass or not and tell it to deccelerate or stop (if it hit a wall or something). So far, so good and nothing that couldn't be done as simply, if not simpler, with masks. But say you want to add gravel. Or oil. Or land mines. Or a flock of sheep. Adding these in a mask based game would require yet another entry in a big switch table of

    switch(typeof(current_pixel))
    {
         case GRASS:
           car.acceleration = max(0,car.acceleration-1);
           break;
         case OIL:
           car.orientation *= 1.1;
           break;
         
         ....
         case SHEEP:
           do_something_ovine(&car);
           break;
         default: /* TARMAC */
           break; /* NO-OP */
    }

Anyway, I've had an urge to write this game for a while and so, instead of vomiting out CPAN modules I think I might give it a go. The only diffiuclt choice is what language. There's Perl's SDL bindings, PyGame, Java or I could play around with C# because, well, apparently all the cool kids are doing it.

It also occured to me that this engine would work very well with a crazy golf game - better even. A given tile could know whether it was a slope or not and whether a ball at a certain position and velcotiy should result in a level over (by virtue of being a hole).

Hmm, I need more tuits.