Post-mortem / Making of

Ludum Dare 31 was held this weekend (December 5th – 8th, 2014) with the theme Entire game on one screen. I wanted to make a point and click game for a while, so I gave it a go, and I am indeed quite happy with the result, Cell #327.

The theme

One of the first 4 theme voting rounds included "☃" (a unicode snowman). It easily won that round and moved on to the final round, with quite a lot of people supporting it. By the end of Friday, as I went to sleep (the theme was announced at 03:00 my time), I was thinking of a game for snowman, and decided I would do a point 'n click horror tale involving a man having nightmares about this snowman figure, eventually getting real – the snowman would chase you around, etc.

I was quite surprised when I woke up to find the theme actually being "Entire game on one screen"… But luckily I only had to change the plot a little bit! The point 'n clicky horrorishness remained. The theme being what it was, I had it even easier – one screen = one room (that you cannot leave) = a cell. To make it more interesting and not cramped, I thought it would be neat to have all the furniture / devices come out of the otherwise flush walls.

My original sketches / design document

haxe!

I had decided some time before LD31 to switch to haxe and abandon AS3.0 (and the Flash IDE) for good. The IDE was buggy, slow, and way too big for what I was doing in it – purely coding. Furthermore, having tried haxe already, AS3.0 itself felt lacking in some areas.

The three weeks before the Ludum Dare weekend I mostly spent resting and taking meds, I was down with the sickness.

But I managed (mostly in the days just before) to build up a little bit of a codebase, some boilerplates I used in most of my LD attempts. Generally I have this model of a Stater class with multiple GameStates, each doing something else on frame render, key press, mouse click, etc. It's mostly useful for cintematic intermissions and menus, really… Then there were the libraries that took way too long to implement during LD – like the pathfinding and the particle engine.

First hours and Fake3D.hx

Right from the start I decided to do something pretty (experi)mental. I wanted the cell to be hand-drawn pixelarty and 3D at the same time. So I had a number of regions / rectangles consisting of thousands of 3D particles, which were then rendered onto the screen. Then I made a simple texture and applied the colours to the particles and …

It looked pretty bad.

Rounding errors and an arbitrary angle made the edges look really cheap. Still not giving up on the idea, I chose to define all the regions I wanted in code, and draw them on the screen in different colours.

I took a screenshot, then I drew the actual graphics over it in Photoshop. Exported it, and had it projected back onto the regions. A poor man's Zbrush. Also solved another serious performance issue: too many particles. I reduced the numbers by simply having one per pixel for the parts of the cell that weren't moving at all. Couldn't do the same for the moving parts, because they started showing little holes if they were moved at all — so each of them is just a bit denser than one particle per pixel.

The first public screenshot

This is the screenshot I posted, and the number of likes it gathered really surprised me pleasantly. It felt like I was on the right path at that point.

The 'plot'

Originally, I had this vague idea of the prisoner being helped by the authorities themselves, … and in the end, it would've all been fake anyway, just playing with the prisoner. I had ideas of there being a camera in the corner of the cell, one that couldn't see you in the shower block that you could only use for 'shower credits', of which you have a very limited number, because the authorities are evil. I had ideas of the drone chase being either more of an action sequence or a puzzle – having to place obstacles in its way, combining items in a certain way, et cetera.

Rest assured, none of that ever made it into the game. It really is very short, having only one 'puzzle' and a couple of red herrings to make it slightly harder. I focused on little things that don't really matter … But in a way they make it a real point 'n click adventure game – there's different messages for loads of interactions. Talking to the note, for example. In the end, I was very happy with the atmosphere of the final game, even if it was so short.

Sounds? Music?

One of the goals I set for this LD was the presence of actual music. In my libraries I had prepared a simple MOD-tracker-like class with easily programmable basic synths (square wave, sine wave, triangle wave, noise). Even added some basic effects, like arpeggio, or slides. Throughout the weekend I was thinking it's not much of a priority, I will use it later.

In the meanwhile, I made basic sounds for the game, … Not in sfxr as usual, I actually programmed them and had them code-generated at runtime. Another weird idea, but it worked! … Then it was half an hour to submission hour and I decided it would be nice to have that music. So instead of making it with my MOD class, I just … programmed it like the other sounds! Square waves, following a repeating pattern. Ridiculously simple, but it got the job done, I think.

An unexpected encounter

The following day, still before the Jam submission hour, I was just hanging around on the LD IRC channel, looking for games to rate, people to talk to them about. I noticed this person, ElijahLucianVoiceActor was doing voice acting for LD teams, but didn't really pay much attention… Then I opened his twitch stream, and saw a guy doing his job very well, with a good voice and professional equipment, still looking for something to do. So I finally sent him the link to my game to try – and after some time I sent him the complete script as well. He did an awesome job, and added even more to the general feeling of the game. It meant not getting any sleep till after 3 in the morning again, but it was worth it. People loved the livestream, and the game, which made me very happy. Thank you, Elijah. And Kaela (who did the intercom announcer)!

Elijah Lucian's website, his twitch channel (with the video of him recording voices for Cell #327 in the archive)

This LD was truly an enjoyable experience, I am happy with my product, it is more polished and finished than my previous LD entries. As always, finishing it post-LD is something I want to do, but might have to be done from scratch.