2-Button Jam: Postmortem


What?

I participated in my first itch game jam and it was great fun.  I thought I'd write a postmortem for posterity and in case anybody might find it useful.

The jam
The game

Art apps used: GIMP, Pinta, Tiled
Sound apps used: Beepbox, Audacity
Engine used: Godot

How I came to the game jam

I used to work as a game programmer and I've always harboured my dream of making my own games.  I'd been to my local game developer meetup, and we'd discussed itch game jams as a motivational tool.  When the Easter holidays came around (I'm a full-time teacher), I decided I would take the plunge.  I chose the 8-bits-to-infinity jam because the constraint of only using two buttons intrigued me.

Initial ideas for the game

With such a strong limitation as only having two buttons, I decided to start with the mechanics.  Having played Micro-Machines on the PSX back in the day, I remembered playing 4-player with only two controllers.  Each player had half a game pad (four buttons): left, right, brake, weapon.  The acceleration was automatic, which made things especially tricky when you had to stay on top of a leaf as it crossed a pond.  I loved playing Micro-Machines, so I decided to make a racing game with auto-accelerate.  Pressing both left and right together would brake.  I also thought I could put in some kind of 'boost' for optimal use of it, but I wasn't sure how this would actually work.

If the core of this game was going to be drifting around corners, then that needed to be fun.  Ways of making it more rewarding could be adding tyre tracks to the road when you skid, along with a smoke particle effect and satisfying screeching sound.

Linking to the theme

With a solid idea for the core mechanics, I turned to the theme.  Apparently it's unusual for the theme to be music tracks, but I really liked it.  The music was provided by Joshua McLean.  The opening of 'Lights Out' reminded me of Golden Axe, which wouldn't be ideal, but it swiftly picked up the pace so I figured I could use it.  'Two Buttons' really reminded me of Super Hang-On on the Amiga, so that would be perfect for a different level.  'Running' didn't seem to feel like racing-game music, but I figured it could provide a nice change of pace for the menu screen.

Art inspiration

With the core mechanics and music sorted, it was time to think about the art.  Whilst Micro-Machines was based in gardens and rooms, I didn't want to follow the toy-car feel.  So I thought back to top-down driving games that I had played and two came immediately to mind: Grand Theft Auto (the original) and APB on the Amiga.  As these could be manageable in the time-frame, with a car or two and a basic tile-set, I was all set to start experimenting with the mechanics.

Initial Test Level

The most important thing (at least in my opinion) is that you get your core mechanic to be enjoyable before you move on.  For this game, that's drifting round corners.  I had thought about the physics model to use, with four tyres, the rear two driving and the front two steering.  I could emulate tyres by having a different amount of friction for the 'forwards/backwards' direction and the 'left/right' direction for each tyre.  This should allow drifting and the turning of the front tyres to steer the car.

Once implemented, it kinda worked, with one big flaw: it oscillated unstably around top speed, eventually disappearing out of the known universe.  I eventually figured out this was to do with the finite steps taken by the physics engine.  In one frame, the car would be just below top speed, and the driving force would be bigger than the friction.  In the next frame, the car would be just faster than top speed, and the friction force would be bigger than the driving force.  Next frame, the car would be further from top speed than it was in the first frame...and so on until it was catapulted into The Beyond.

I was most unimpressed.  I started playing with the linear damping, but increasing this enough to keep it stable meant that the car hardly accelerated at all.  So I introduced a hack whereby I increased the linear damping in line with the speed.  This came a lot closer to working, but when I found similar instabilities with the rotation, I decided I didn't have time for this crap.  So I decided to go kinematic (taking direct control of the motion, whilst still using the engine for collisions).

Giving up on the physics engine irked me.  I have a physics degree, so surely I should be able to get it to work?!  Evidently that was arrogance based on ignorance.  Anyway, once I decided to do all my own speed calculations, I managed to get a stable 'simulation' running which felt okay.  Then I just had to iterate on the value of some of its numerical constants and check out what type of corners would be fun.

I made a test track on Tiled with solid squares of green and grey.  I didn't bother with collisions just yet, just screamed around the track to see what was possible.


In the gif, you can also see the really annoying pixel glitch between tiles that I fixed later on.

With some idea of what corners were fun, I felt like I could proceed to making real in-game levels.  I wanted everything to be about driving; even the menu.  So for that, I needed to be sure the player already knew how to control the car.  My first step was to make a simple tutorial level that made sure they knew three things: left, right and brake.  With the excellent Tiled importer for Godot taking objects and producing collision shapes, this was actually ridiculously easy.  I had to do some actual tile artwork, but I had made tiles for Amos Basic back on the Amiga so it wasn't long before I was into the swing of it.

I used the Godot 'Inherited Scene' functionality to turn bits of my tutorial (e.g. 640x480 rendering scaled to the window, car controls/physics and camera) into a base scene that I could build the other scenes on top of.  So the main highway menu came along quite quickly with some placeholder artwork (although I made it WAY too long to begin with!).

Then the Green Fields track, which I had drafted on paper.  I built it corner by corner, so I could check and adapt it as I went.  This meant I could shorten straights and adjust corners without having to redo too much art.

At that point, I had the tutorial, menu and a single level, but time was running out.  I had plans for two other stages in the prototype, but I knew I wouldn't have the time to do all the artwork for that on top of polishing what I'd already made.  So I decided to block off the exits to the other two stages and focus on the one track.

I added a shadow for the car to stop it appearing to 'hover' over the track, and I added checkpoints to make it feel more like Super Hang-On.  Then I re-did the artwork for the tutorial level so it didn't look quite so basic.

Up to this point I'd had a lot of fun, but it wasn't until I uploaded the game to itch and posted on the discord channel that I really saw the benefit of a game jam community.  Within a day, I had two really helpful comments on my game page which made me feel really buoyed-up about it.  A tweak to the driving physics, and adding borders to my tile-sets (to avoid that annoying pixel-glitch between tiles) and I uploaded again.

Since I've submitted it, I've continued to receive great comments and feedback.  I honestly feel like once the jam is over, I'll be able to come back to it and make it into a really nice little game.

My conclusions

  1.  Do more game jams.  It was really great fun, and I produced something better than I thought I could in the time.  Doing more jams will hone my skills and get me exploring even more creative possibilities.
  2. I can actually do functional pixel art!  This was quite a shock to me.  Having worked with professional artists, I know it's nowhere near the quality they can produce, but it's a lot better than I feared.  I definitely intend to take more opportunities to practice!
  3. Simple chip-based sound effects are easier to produce than I thought.  Beepbox is great for exploring different sounds, and the basics of Audacity are pretty easy to use when it comes to refining the samples.
  4. Godot is AMAZING at producing functional games quickly.  I've used Unity before and I know lots of people love it, but I firmly believe Godot is the one for me.


Comments

Popular posts from this blog

Micro:Bit and SPI display

DCS World with TrackIR under Ubuntu

Cardboard Mock-up of USB Joystick