It's been a while...

Every now and again I check back on this blog and think to myself, “Oh, I must write about…” Whatever it is I’m thinking about at the time. Three years since my last post would indicate that I’ve not followed through with those inclinations… Still, here it sits, an ever present reminder that I exist and have a little space on the web. What better time than during a worldwide lockdown, where we have little to do but sit indoors staring at screens, to pick up the virtual quill?

Over the last few years I’ve been hacking away on a bunch of different projects, some of which I still quite like – and I woke up this morning realising that I haven’t posted about any of them! So, first things first, let’s catch up a little:


I launched my first real open source project, on ForgeBox.
ColdThumbs v2, is a rewrite of a CFML image manipulation module I’ve been using in personal projects for a number of years. When given a source image, the ColdThumbs module will resize in a background thread and store the result as a cached image. Subsequent requests for the same size will return the cached image, unless the source has since changed. It sounds simple, but it’s a requirement for virtually every web application I’ve ever built, and ColdThumbs represents the best and most efficient solution I’ve found, Now, the fact it’s modularised and on ForgeBox means I can now use it in any application with a simple install in CommandBox. You can too, as it happens…
Check out the demo, documentation and source code at

Winter Sprinter – a game

I’ve been playing with the Phaser JavaScript game framework for a number of years now and back in 2017 I built a Christmas themed game for a client. It’s a fun little endless dodging game, and you can play it over at

Winter Sprinter was the last game I made in Phaser v2 and since then I began familiarising myself with Phaser v3, which led to another open source project and the first thing I’ve put out on NPM.

Phaser 3 Merged Input

This Phaser plugin merges various input methods in a Phaser game into a single object, and solves a number of problems.

  • Single place to handle all your input.
  • Keyboard and Gamepad input is amalgamated.
  • Handle input for multiple player objects to easily create multiplayer games.
  • Assign and reassign keys to actions for each player, allowing for ‘redefine keys’ function.
  • Assign multiple keys to a single action.
  • Interrogate current state of all buttons.
  • Global events emitted on button down/up.
  • Check for gamepad button presses (i.e. ‘justDown()’ functionality for gamepads)
  • Check the last device type used for interaction. This is something you can just drop straight into your Phaser game and use straight away. Check it out at

Liquify Bo - a game

All this messing about with Phaser 3 led me to take part in my second Ludum Dare game jam, where in a frenetic 72 hours I created my most recent game, Liquify Bo. The theme here was ‘your life is currency’, which I took to mean that you would need to spend your lives to continue. What resulted was a cute little platformer with some really nice physics. It’s fun to play, but there’s lots of room for improvement. No baddies ended up in the game, so it’s just about puzzling your way out of each level. This is the first game I’ve made with a level structure, so it was interesting getting that kind of functionality working.
Have a play over at

I'd love to say I'll post more frquently from now on, but let's not kid ourselves... it may not happen... however as I type, the next Ludum Dare game jam is upon us. The theme will be decided in a little over 24 hours, and I’m intending to spend every waking moment of the subsequent 72 hours making a new game. For the first time, I’ll be entering the jam with my longtime friend and collaborator, Lawrence Wong. So whatever we end up building, I know it’s going to look awesome. I'd love to tell you about it.