Well, Christmas has come and the goose has got fat. And cooked. And eaten. So now it’s time to examine in excruciating detail the making of… a Christmas Card.
In the absence of anything better I’ll go with the old Game Developer postmortem format.
What was it?
This year it was a brief platformer based on mechanics from Nemesis: The Warlock that I’ve always liked and wanted to have a play around with. Side view, single screen platformer with you controlling a small elf who can jump and shoot (fairly rapidly) horizontally. Level is filled with moving presents that appear from the top. When shot they become stationary and you can jump up on them. The aim of each level is to reach an initially out of reach ‘star’ somewhere near the top of the screen. Game is bracketed with a menu screen and a Christmas message screen at the end.
Taken from an existing prototype originally based on an Abuse-esque tutorial and spruced up (literally – although, it might be a pine) in time for Christmas, it was developed using Gamemaker. This was a first proper use of the software for me as I generally prefer programming languages to visual game engines, and so something of an exploration too.
1. It was released on time (Christmas Eve)
Once again, as with last year’s Christmas Card, having decided to do it at the start of December it was completed in time for Christmas. The usual Agile make-it-work-then-add-stuff methodology made sure there’d be something there on time. All the good ideas didn’t get in of course; The snowman chucking the exploding snowballs was always going to be a push, but generally better to have something than nothing and it wasn’t as bare bones as it might have been. Still got some secrets, little touches and even multiple levels in there.
2. IT WAS playable over the internet
HTML 5 produced the goods again, with a game that needed no installation and largely worked on any desktop browser. Thanks, multi-format export tools. HTML 5 export was one of the key features for carrying on with Gamemaker. Low friction.
3. Serendipity is fun
The card is far more fun than the prototype that inspired it, which is due to various discoveries, experiments and showing it to other people during development. The shootable presents became far more charming and interesting when I made them randomly jump, not just slide and fall. This was in response to a design constraint (all the presents end up at the bottom of the screen) but added lots of fun particularly to the fairly static Christmas message screen at the end.
Other lucky finds were the rain turning to snow effect. Initially it always snowed heavily, but due to a ‘hilarious’ problem with version control I lost a week’s work and had to reenter it by hand. I accidentally mistyped and ended up with the rain effect instead of snow, then realised that I could easily fade subtly between the two as you shot more presents, making the level more Christmassy as you went on, and adding the surprise and delight factor of you not noticing when one stopped and the other started.
Ben & Sam also had many good suggestions, several I didn’t have time for, but it was their idea to have the hidden thing on the menu screen, which was in turn prompted by my dumping the player character on the menu screen because in Gamemaker the menus are levels too so why not let the menu be the tutorial as well?
Oh yeah, and having the left/right arrow keys make you slide instead of run was technically an animation bug, but it was fun so I left it in because it adds to the icy feel of the platforms.
4. Having a prototype available to use
Picking up my existing Nemesis experiments was useful as you would not believe the pain involved in getting a modern game engine to do 1980s style platform collision (only solid when base of object falls on from above, can pass through from below and sides and have no thickness) and I’d solved that in advance after several weeks of surprisingly difficult fiddling.
Also using the platform tutorial I found was most helpful in providing the basics of character movement and the player graphic (although I added the Santa hat, and the running is slightly slippy which works in this context, but might not in others).
5. using an existing game engine (gamemaker)
Developed most of this with the highly limited free version, but upgraded to (paid) professional with (paid) HTML 5 exporter at the end to get the game onto the website.
GameMaker saved a lot of effort by being pretty straightforward for this kind of thing, and letting me play around with ideas easily. I have my reservations (see below) but having played with several engines now this has some very good features that convinced me to persist with it.
– Built in graphics effects like the rain/snow, pulsing/expanding stars were nice and cheap to put in.
– Building the application structure was easy, and adding relatively complex scripting was actually straightforward.
1. Levels are samey and uninspiring
Once again, as is something of a habit with me, I’ve made a game system and not put much thought or effort into the content. Now I’ve got the system and rules it could have dozens of beautifully realised and playtested levels for very little effort. What it ended up with was three fairly randomly chucked together screens in no particular order and with erratic difficulty. I guess I tend to lose interest when the system design (the most programmery bit) is done. Might also be a limitation of the basic design of the game. The surrounding webpage is pretty poor too, and the game resolution is tiny, tiny, tiny.
2. HTML5 for desktop was OK – for last year
Things have moved on. HTML5 is great, but assuming people are going to play it in a desktop web browser is soooo 2012. People were viewing it on their Android/iOS mobiles, and although it’s supported in GameMaker, I hadn’t put in support for the controls on those platforms. Casual web browsing is on mobiles now. Get with it grandad.
3. Using a game engine, not a programming language
While GameMaker was excellent at what it does (see above) it also brings with it a whole host of limitations. Its one of the better engines for proper development, keeping its data in XML files, but has its eccentricities. The directory structure is rigid, so don’t go renaming things. This led to the version control confusion that cost me a week’s work.
The visual layout tool for the screens and sometimes just isn’t useful. For example, there are a couple of invisible platforms, but nothing shows in the editor. Using the thankfully quite useful debugging tools I tracked down the objects that were causing this bug and found some odd platforms that had got vertically shrunk to an actual height of 0 pixels. Don’t know how, but they were literally unfindable in the level editor and I had to hack them manually out of the XML level file. Similarly, the level editor has an odd idea of clicking on things in front/behind others and I often found I simply couldn’t select the object I wanted to work on without dragging other things out of the way temporarily, and potentially disasterously if I didn’t put them back. Irksome. It still has some ‘interesting’ behaviour, like the odd black rectangle which appears in the levels when on HTML5, but not on the PC. As a game engine I can’t just look in the code like I can for a programming language.
Overall, I’m not convinced that using this kind of tool scales well for bigger projects.
4. Game was too complex
It’s just not as simple and instantly obvious as last year’s Christmas Bomb-C, which had a single screen, just two buttons and you could win simply by leaving it to run. With this year’s design if you didn’t realise you had to shoot the presents and climb on them (and why would you? It’s not obvious) then you were kind of stuck. It’s a Christmas Card dummy, make it as accessible as possible. At least you couldn’t get killed, just bored.
Well, I’ve learned more about how GameMaker works and am at the same time both more confident and more wary. I’m not sure Game Engines have proved themselves compared to Code Libraries, and the engine itself has thrown up some interesting problems. I can’t shake the feeling that I could write a more suitable room editor myself, which somewhat defeats the object of using a third-party tool.
Possibly it’s put me off revisiting the Nemesis idea at all for a full game. I’ve probably examined the mechanics here in greater detail than any other living human being and I’m not convinced they actually make an interesting game. Interesting level, yes. Whole game? Not sure. In this respect the Christmas Card is very useful as I can stop spending any more time on a project that’s never going to fly.
Anyway, happy that I did a game again, although it is lacking the novelty of doing it the year before as now I’m just repeating myself. Onwards!
Andy Krouwel, January 2014