B!lliards

This slideshow requires JavaScript.

Last week was ProcJam 2015, and as I hinted earlier, I took last month’s Pool game and added procedural generated rules to it! The theory is that it’ll invent new and exciting billiards games, but in practice it mostly just makes a mess. I’ve called it B!lliards and you can play it from the comfort of your web browser for free. A bit of a post-mortem after the break.

Overall, I tried to be too ambitious while also being unprepared. This is not a winning combination! ProcJam is a 9 days long (one Saturday to the Sunday of the following week) and I spent until Friday just preparing the code to allow for procedural stuff. I first took the hard-coded pool rules and moved them into a data structure, then I spent a couple of days adding to it so that it could also support billiards. (The rules are very different from pool and required a bunch of new features and bug fixes.) I spent Thursday implementing the ‘Instructions’ screen, which was finally some actual procedural generation! By the time I got to Friday, I was feeling pretty rushed (I was going to be busy over the weekend) and everything was more difficult than I had expected. I only really got the bare minimum of what I wanted done, and most of the games it generates have no way to win.

The 'English Pool' definition from Wednesday - it's changed a bit since then, but not a lot.
The ‘English Pool’ definition from Wednesday – it’s changed a bit since then, but not a whole lot.

What went well

  • Moving things into data turned out to be fairly straightforward. I did this for the sake of being able to generate it easily, but I can see data representations being useful for handmade things too. Previously I’ve found this a bit intimidating, but this week has opened my eyes a bit. Plus, I do enjoy refactoring code, and this was quite therapeutic.
  • It produced some cool game mechanics. In among the chaos were some really interesting games. My favourite was a pool-like game where you couldn’t hit the balls directly, but had to use the other balls to pot them. If nothing else, B!lliards works as a generator of ideas that someone could then develop into working games.
  • I learned a lot. Procedural generation takes practice before you can generate anything good. I experimented with some unfamiliar techniques which I’m now better able to use in other projects.

What went wrong

  • Lack of preparation. I thought I was prepared, having a base game to build upon, but I was some distance away from being able to get on with game generation, and spent most of the jam catching up. This meant I…
  • Ran out of time. Even without having to catch-up, what I was trying to do was too big for the time. Not only did this limit what I could get done, but the pressure got to me, and put me off working on it in the spare time I had over the weekend.
  • Indecision. I didn’t know the right balance between generating with no restrictions, and generating with too many. Not wanting to produce something boring, I erred towards more randomness, which I think was a poor decision. If I do develop the game further I’d like to try a more structured approach and see how that goes, as much as that means throwing out existing code.

I’d encourage everyone to try ProcJam next time, even if you’re not much of a programmer. It’s a really welcoming and encouraging community, and people with very different abilities have produced all sorts of cool things. There were even some talks, archived on YouTube. I’ve embedded my favourite below: Tom Betts’ talk, “The Wider World Of Generation”.