About Paul Sinnett (twitter: @paulsinnett)

I'm a video game programmer, lecturer, and Code Club volunteer.


Ludum Dare 37
Ludum Dare 34
Ludum Dare 33
Ludum Dare 31
Ludum Dare 29
Ludum Dare 28
Ludum Dare 27
MiniLD 42
Ludum Dare 26

Paul Sinnett's Trophies

Paul Sinnett's Archive

Spot the different

Posted by (twitter: @paulsinnett)
Monday, January 2nd, 2017 5:12 am

I was running my code club when this came around, so I set the theme as a challenge for my club members. I’ve done this before but I think this is the first time one of my club members has taken up the challenge and completed a game. It took a little encouragement, but I am delighted with both the effort and the result.

Spot the different: A one room game for LD37

A one room game for LD37

Firewerk is 9 years old and she created the game in about 4 hours. I was present to assist if needed, but she managed to build the game herself and I was able to observe her process.

She settled on a spot the difference game almost straight away. This surprised me. When I attempt game jams like this, choosing what to do can suck up the majority of my time. It occurs to me that this undue caution probably impedes progress when time is so limited. I’ll try to remember that for future jams.

The first problem she had was to make a split screen background image of a room. This took several attempts and the help of a friend. I was impressed by the persistence she demonstrated here. The tools Scratch provides for image editing are crude and often unforgiving. Several attempts had to be thrown out entirely, but she finally got the image she wanted.

The next challenge was to add in the difference objects. Objects in the game took two forms: objects that would appear on both sides, and objects that would appear on one side only. And it was only these difference objects that would need any kind of scripting.

On clicking a difference object, the sprite would need to hide. This worked well on the first run of the game, but had a problem in that once hidden there was no way to show it again. That problem was solved with a second script to show the sprite when starting the game.

The final part of the puzzle scripting was to score points when a difference object was clicked. This was solved by creating a variable to hold the points and changing that value by one when the sprite was clicked. The hiding of the sprite ensured that only 1 point was scored for each difference found.

But there was another reset problem. This time, the score kept counting up every time the game was played. This last problem was solved by setting the points variable to 0 when the game starts.

With the basic mechanics in place, the only remaining task was to populate the game with similar and different objects. This was clearly the most fun part of the game creation process for Firewerk. There was still a minor issue in that each new difference object needed the scripts copied over from the first one. This additional busywork is a problem in the design of Scratch itself: it doesn’t distinguish between the type of an object and instances of an object. Scratch clones can somewhat address this issue but introduce other hurdles which complicate the scripts. And, for younger children, the repetitive task of copying across scripts from one sprite to another appears enjoyable enough in itself.

Having completed the task within the 4 hours we had available she shared the project and then headed over to Friv for a reward.

Firewerk’s LD37 game: Spot the different


Posted by (twitter: @paulsinnett)
Sunday, December 20th, 2015 3:37 pm

Last weekend was a particularly busy one for me. I ran two kids programming clubs on the Saturday so I really couldn’t get any enthusiasm to start until Sunday.

Unusually, I hit on an idea for the theme quickly. I’ve been doing a lot of physics simulation work recently and I thought this would be a good chance to try modelling buoyancy in a game.

Link to my entry: Bloon

Bloon screenshot

Most of my effort at the beginning went in to creating the physics model. If you look inside the project, you’ll see a lot of the variables required to get this working such as the mass of the helium, the balloon itself, and the displaced volume of air. Of course all this only served to produce the final upward force which gets bigger as the balloon inflates.

The results were unexpected (to me at least.) It seems that far from giving the balloon a gentle lift, inflating by only the tiniest amount caused it to shoot up like a rocket. To make it controllable at all, I had the reduce the inflation speed to about 1/10th of a millimetre radius per second.

This tiny change meant no real visible difference between a buoyant balloon and a sinking one. So to exaggerate the effect, I actually scale the visible representation of the difference in radius of the balloon by 10,000 times. Other than that it does represent relatively realistic physics. But I did make a number of simplifications:

  • I assume a sphere rather than a balloon’s actual shape;
  • the mass of helium doesn’t account for the raised pressure inside the balloon;
  • there is no consideration of air resistance or air pressure related effects.

Time was getting on, so I moved on to modelling the bird animations. The individual frames of animation are all hand drawn using Scratch’s built in drawing tools. These tools are crude, but they do the job. As reference I found a sequence of photographs online showing the various frames of a crow in flight. I was pleased with the final animation.

Creating the crow animation frames

Creating the crow animation frames

I later added the highlight to the beak to help with collision. (The balloon only collides with the beak, you don’t have to avoid them entirely.)

I was particularly pleased with the generation of the sound effects. My first thought was to get hold of some balloons and record some samples. It turned out to be difficult finding anywhere selling packs of balloons on a Sunday afternoon. But although I did eventually find and buy a packet, when it came to making the sound effects, I decided to give JFXR a try to see if I could synthesize the sounds I wanted. It turned out I could. More or less. But then… disaster! I had been working on a MacBook in Safari and there is a long term problem exporting audio. I soaked up several hours trying desperately to find a work around. In the end, I downloaded Firefox, remade the sounds, and then exported them from there.

By then, time was running short. I quickly put together a smallĀ audio loop for stage introduction in Otomata and rushed to get everything together before the deadline.

In summary, I wish I’d spent more time on creating and tweaking assets and less time dealing with technical issues and balloon shopping, but such is life in game development. I am pleased with the results.

A troll’s life

Posted by (twitter: @paulsinnett)
Tuesday, August 25th, 2015 5:41 pm

My initial plan for this game was to make an experience for what it would be like to be a “monster.” But when I thought about it I realised that what defines a monster is not the creature itself but our reaction to it. That led me in a somewhat relentless and melancholic direction.

A troll’s life

My inspiration for the style of this game was the early home computer games of the 80s like Frak.

I painted the sprites in the Gimp directly onto the canvas. This was somewhat laborious. I’ll look for a better pixel editor if I decide to create any pixel animations in the future.


The only useful feature of the Gimp I used was in producing the flash effect for the lumberjack selfie.


Other than that it was all pixel by pixel painting. I’d like to have got a few more frames into the troll walk cycle to give the animations a little more bounce, but I started late and was already running short of time.

I think in depicting the troll’s death I was unconsciously influenced by the pictures of the death of Cecil the lion. I think that helped to capture the mood I was going for:


With the music I lucked out. I tried several of the tools in an attempt to create a sombre backing track. On my very first try with Otomata, as I was testing the ability to capture a wav, I got exactly the feeling I was after by pure chance. (I was unable to recreate it over several subsequent attempts.) So I edited the capture I had into a loop and went with that.

Post competition version: 10 second burn v1.2

Posted by (twitter: @paulsinnett)
Thursday, August 29th, 2013 12:22 am

I’ve started working on a post competition version of my game 10 second burn. If you want to play the latest version as I update it, the link is here:

10 Second Burn

Issues addressed in the new version:
* now easier to land
* sound effect volume reduced
* you can no longer crash into the warning messages

My plans for additional updates are:
* extra levels
* online high score table
* high score initials entry system

Additional levels will be based around geological features of the moon and maybe some fun ones too.

10 Second Burn

Posted by (twitter: @paulsinnett)
Sunday, August 25th, 2013 5:59 pm

I figured a 10 second limit on gameplay might be a bit restrictive, so I plumped for 10 seconds of rocket fuel. As Neil Armstrong died on this date 1 year ago, I thought it might be fitting to base a game around the last moments of his moon landing.

10 Second Burn

As in the real moon landing, the fuel warning indicators give bogus readings due to the fuel sloshing around in the tank. Try to ignore the warning lights, you have 10 seconds of continuous burn available to make your landing. If you think you’re not going to make it, abort the mission.

It’s possible to use too much fuel landing the ship. If you do that you’ll be stuck on the moon.

My entry page is here: http://www.ludumdare.com/compo/ludum-dare-27/?action=preview&uid=11312

Intergalactic Bar Billiards v1.1

Posted by (twitter: @paulsinnett)
Sunday, June 16th, 2013 8:24 am

In response to feedback I’ve made the following tweaks to my game:

  • the cue guideline is no longer locked while aiming
  • the cue guideline now has a chevron pattern to show direction
  • you must click a button to spot the next planet after each shot (this prevents a player from finding the perfect spot and sticking there.)

You can play the updated version here: http://scratch.mit.edu/projects/10575019/

Title Screen

Game Screen

The original entry is here: http://www.ludumdare.com/compo/minild-42/?action=preview&uid=11312

Intergalactic Bar Billiards

Posted by (twitter: @paulsinnett)
Monday, May 27th, 2013 11:24 pm

Title Screen

I’ve uploaded my entry. This game is loosely based on the game of bar billiards. The inspiration comes from a quote in the Hitch Hiker’s Guide to the Galaxy. I’ve attempted to capture the graphical style used in the TV series for the animated sequences from the Book.

Game Screen

My entry is here: http://www.ludumdare.com/compo/minild-42/?action=preview&uid=11312

And you can play it here: http://scratch.mit.edu/projects/10458705/

Hosting your own Scratch web player

Posted by (twitter: @paulsinnett)
Monday, May 6th, 2013 6:19 am

I made an entry for LD #26 in Scratch and used their website to host the file and the player. It’s a convenient system but unfortunately subject to the whims of their update schedule. For the next few days I’m expecting the Scratch web site to be down as they upgrade to Scratch 2.0.

So I thought I’d post up a quick guide on hosting the Scratch player (the Java player at any rate) on your own web site. Assuming you have a web site capable of serving up your files you’ll need 3 things to make it work:

  1. your Scratch .sb binary file
  2. the ScratchApplet.jar file
  3. a web page to hold your content

Your Scratch binary file is the file that you save out from the Scratch environment when you save locally on your own machine. The Scratch applet you can get from the Scratch web site. I grabbed a copy and put it in my Dropbox if anyone needs it:


As for the web page, you’ll need to write that yourself. The most likely thing to go wrong when putting this all together is paths and the folder structure. Here’s the structure I chose:


You could use a different structure, but beware that this will mean you need to put different paths into your embed code to make it work. Here is a bare web page template that should work and you can modify to host your own Scratch files:

		<title>My Scratch Project</title>
		<h1>My Scratch Project</h1>
			<applet id='ProjectApplet' style='display:block' code='ScratchApplet'
				codebase='../java' archive='ScratchApplet.jar' height='387' width='482'>
				<param name='project' value='../scratch/MyScratchFile.sb'>

Creating a physics system in Scratch

Posted by (twitter: @paulsinnett)
Monday, April 29th, 2013 12:30 am

For those who are interested, here’s how I got a simple “physics” system working in Scratch:

A "physics" loop in Scratch

A “physics” loop in Scratch

Scratch has no concept of a vector, so the variable “velocity y” is just the name of the variable.

This is quite a fragile system. It’ll only really work reliably if the path of it’s “bounce” returns it to its starting point. Fortunately that is the case in my game.

I’m a little late to this party

Posted by (twitter: @paulsinnett)
Sunday, April 28th, 2013 9:20 am

I spent most of this weekend doing my tax return :(

Still, I thought I’d see what I could throw together in the few minutes I have spare. This game was made in about an hour in Scratch. Scratch doesn’t have any built in physics, so I had to come up with a hack for that.

Scratch Project

My high score so far is 25 :)

Is there a way to embed an applet in one of these blog posts?

[cache: storing page]