Ludum Dare 23
Archive for the ‘LD #23’ Category
OK, been meaning to write this for a while – a post-mortem for my game Microbial.
This was my first Ludum Dare – my first game jam also, and the first time I ever released a finished game for people to play :). Really enjoyed it – and enjoyed hearing people’s feedback and experiences playing the game. I was hoping it’d re-energize my game development enthusiasm which was waning a bit, and it totally succeeded at that.
I have been working on a “bigger” indie game project for a while, after a couple prototype games I decided to kill off, so have some game programming experience under my belt (and debatably some art experience). Plus a career’s worth of business web application programming (lots of forms and lists ).
Exploratory development approach: I was really inspired by Jon Blow and Marc Ten Bosch’s talk Designing to Reveal the Nature of the Universe, where they outline a process of starting with an idea (a game mechanic, a detail, a desired result) and exploring it’s space of possibilities completely – then present the best of what you discover to the player. I tried to take that approach with this game. A lot of people have commented on the great learning curve / progression, and surprisingly it didn’t take any deliberate effort on my part – I developed the levels pretty much in the order they appeared in the game – when one mechanic or game object felt “tapped out” in terms of what kind of unique puzzles and level types I could make, I’d try introducing a new mechanic. So really, the learning curve the player is experiencing is the same learning curve I as the designer was going through during the making of it (or maybe the same state of mind in the cases of level 27-30 )
The 80/20 principle: With a 48 hour teeny timeframe I tried to stick to this mindset, also known as the Pareto principle – that in many areas of life, 80% of the effects come from 20% of the causes. E.g. 20% of the stocks produce 80% of the gains – 20% of your clients provide 80% of your business. I tried to focus on the 20% of to-dos that would make the most difference to the game.
Blender as a level editor, with hot reloading: I love me some Blender. I have an ultra bare-bones script that exports just the world transform matrices and names of the objects in a Blender scene into a simple XML file that my game engine can parse while it’s running. Upshot is, I can use all of Blender’s fancy tools for moving, rotating, copying, deleting, hiding, snapping to a grid etc. (way more than I could implement in some fancy level editor of my own) and hit a key to export the XML file, which I can then hot-reload in a running copy of the game. So, like, instant level iterations. Woohoo.
Engine I know well, with some prep beforehand: I adapted the game engine from my larger game, which was helpful – it’s not as fancy as something like Unity or GameMaker, but it took away a lot of the chores of managing game objects and components, playing sounds, handling input cleanly, doing basic 3D rendering, etc. So I could focus on gameplay programming and content creation when the contest started.
Using real recorded sounds: Got a lot of compliments on the soundscape of this game – most of it was me doing weird things with my iPhone. E.g. the bubbling noises were from a bowl of water and a straw with some post-processing in Audacity and FL Studio for added ominousness (I tried putting the iPhone in a sandwich baggie and submerging it underwater, but all I got was plastic bag noise ). It was all very quick and dirty, I’m happy it came out sounding as good as it did.
Having to do it in 48 hours: I can tend to geek out too much on perfecting my game engines, polishing little features, etc. and take forever to get things done – so having a fierce deadline was good to keep my dawdling under control :).
Using 3D: Ironically I’m a little unknowledgable and shaky on 2D programming, having dived headfirst early on into the hardcore 3D stuff. So I stuck with what I was comfortable with on this entry. I think the 3D rendering it might have set the game apart visually a little bit from the majority of entries, even though it’s mechanically a very 2D game.
What didn’t work:
Crashes / problems on some systems: I got a mix of positive comments from those who could play and frustrated comments from people who couldn’t play the thing early on. I tested things out on a wimpy laptop and it ran OK, so figured I was good to go, but there were some weird GPU and other incompatibilities on certain systems. Anyway after being scared that I’d disqualify myself, I eventually made post-compo fixes and workarounds in a separate 2nd version (e.g. in Poland the default .NET floating-point parser will choke on “12.5″ – it’s expecting a comma thanks to it’s helpful worldly awareness ). Big thanks to the folks that helped me debug.
XNA excluding mac / linux folks: XNA is by far what I have the most experience in, so for this compo it was the only real choice I had, but I know it bummed out some people. Don’t want to get too far into this debate as it’s covered elsewhere – but I might give MonoGame a try next time, which allegedly brings XNA to Mac and other platforms (though it’s 3D support is apparently not that great).
HDR rendering / shadows busted in Reach: XNA 4 has two “graphics profiles” – Reach for crappy computers, and HiDef for beefier DirectX 10+ computers. My engine was written for HiDef and the Xbox 360 mainly, but I wanted a lot of people to be able to play this, so I had to hack together a Reach-compatible version of the rendering pipeline pre-compo. I lost single-format texture support in that process, so my HDR / light bloom setup, and my fancy shadow system had to go, after some frantic attempts to work around the limitations. After some late nights lately though I think I’ve got the engine in better shape for LD24 :).
Particle system busted: I wanted to add some nice particle effects – dust floating by, cell innards when they’re broken, etc. – but my particle system was broken and I lost about an hour trying to fix it. Particles were moving 2x faster and dissapearing abruptly halfway through their lifecycle. Oh well.
Anyway – I’ve used more than my share of blog space – thanks for reading.
Hey all – wanted to share a few cool games I’ve run across that I haven’t seen getting a lot of mentions on blogs and whatnot:
Tiny Worlds by Lidfrid
Fling your planetoid between the orbits of larger planetoids, collecting material and mass along the way. Accompanied by a weird-but-catchy acapella soundtrack.
Love in the Time of Fishbowls by octaviogood
Match fish by their mating calls, with a fun / thought-provoking story between successive generations of fish.
Antopia by pgil
A zelda-like with an excellent soundtrack. The queen is dying – find a sword and go kill some spores and stuff.
Cruel Space by Stalker_23b
Probably the best graphically I’ve seen so far. Hop between planets buying upgrades and annihilating various meatboy-looking creatures.
Also thanks for all the positive feedback on my game Microbial – for those who haven’t checked it out, it’s a weird 3D rendered action/puzzle game with 40 levels of cells, viruses, polyps, and a tumor megaboss:
Hope to put together a post-mortem in the next day or two for it.
Just a quick post with the baseline source code of the homebrew XNA game engine I’ll be using for LD 23. Zip file is up at:
Hey LD’ers -
Gonna give this one a go – have always wanted to try a game jam but haven’t pulled the trigger yet. So this weekend it is!
I’ll be using XNA (sorry in advance to the download-averse) and a custom game engine library I’ve built (basic stuff like scene hierarchy management, screen switching, etc.), which I’ll post beforehand. I’m more of a 3D than a 2D guy actually, so might be using Blender, BEPUphysics (free physics library), etc. But we’ll see on all that.
FLStudio for music – photoshop for graphics – Audacity for sound – plus any tools on that tools page I can wrap my brain around in time.
My goal is to make something good – but that might be overambitious and burn me out – so I guess my goal is to finish something. OK.