Ludum Dare 30 and Construct 2

Ludum Dare 30 was this weekend. Taking part in Ludum Dare 29 was such a positive experience for me that I really felt I had to take part in this one. I had “booked” the weekend off with my wife, meaning I’d be spared of parenting responsibilities so I could really focus on the compo. As it was getting closer and closer to the jam deadline I realised that really I should be spending that time dealing with a few non-gamedev related stuff that had built up over time. I thought it would be a waste of my free time if I didn’t get some pressing stuff done.

So blissfully I spent my Saturday catching up on work that I’d promised for various friends and family. That worked rather well, but come Saturday night my brain was still thinking about Ludum Dare. The theme – Connected Worlds – didn’t really inspire any ideas in me immediately but slowly over time I had an idea for a game.

On Sunday I realised that I really couldn’t keep away from Ludum Dare so decided to crack out Construct 2 and have a go at making something. Those of you who have read my previous blog posts will probably know that I have a nasty habit of trying to rush through development of a jam game in Construct 2 in the hope that I can get something released.

My idea was probably a little too ambitious considering the time frame. I wanted to make a game where you have to assault other planets to gain resources to improve your own planets defences. I would use websockets so players could actually see and assault other players’ planets. That was the “connnected worlds” idea.

I came away feeling far more confident about using Construct 2 than ever before. Unfortunately one of the drawbacks of Construct 2 is that the websocket support really is in it’s infancy. Maybe I was just doing it wrong but the websocket controller basically sends and receives a string but doesn’t really have any nice way of handling that string when it arrives. In native JavaScript I would simply use JSON.parse and JSON.stringify to convert JS objects from and to strings respectively.

I couldn’t find anything in Construct 2 that does this natively. I’m used to just passing objects backwards and forwards when doing networking code. That’s what I use in Turnstile Football and I had naively expected to be able to use something similar here. Sadly not the case at all. I ended up finding a plugin that handles JSON encode and decode which uses lots of function parameters for traversing object trees. To get config.player.height you would do something like JSON.value(0, “config”, “player”, “height”).

A couple more things I found quite strange with Construct 2 – firstly, is the way that you do for/while loops as an event condition, not as an action. I feel that intuitively once a condition is met, you do an action that calls a loop, not call a loop in the event condition. The second issue I had with Construct 2 is that I couldn’t find a way to call a set of actions from other events. It’s probably possible somewhere but it would have made my “code” a lot tidier.

Edit: Henrique Lazarini has just pointed out to me on Twitter that the “Function” plugin should do what I need regarding reusing actions.

I think I would enjoy Construct 2 more if I had the option to write my own JavaScript as and when needed without having to write a plugin. In that respect I understand that Construct 2 isn’t really aimed at a developer like me. Anyway, needless to say I ran out of time in the end. I’m sure you all saw that coming?

So after giving up on that, I decided to create a text adventure. Initially I was going to make the usual mistake of writing my own engine for it but then the lovely chap at Dark Square Games suggested I give Twine a go. I had used it before but for some reason failed to find it intuitive. This time around I had a ball with it.

Sadly I started working on it around 11pm last night and had to stop quite quickly (around 1/2am) due to being way too tired. Nonetheless I managed to write a (very short) Twine game. I really enjoyed making it and definitely plan to make another Twine game at some point. Possibly even a sequel.

The main reason I was desperate to get a game finished for the LD30 was because I really enjoyed the voting process last time around. I met some really nice people and had a lot of fun really feeling a part of the gamedev community. Also it feels great to finish something, no matter how small.

You can check out my latest Ludum Dare entry here.

Read More