Word Garden – Ludum Dare 47 post mortem

Ludum Dare 37 was the first jam I’ve ever attended, and it was one of the major factors that helped me to finish my projects and move from making simple clones of other games to create my own ones. I really enjoy participating in it, and this time wasn’t an exception. But I have to admit, it came by when I was least expecting it. One day I’ve logged onto the Ludum dare website and saw the timer saying "3 days left". It was really bad timing for me. You see, for over 2 years I’ve been dreaming of going into Ludum Dare with my engine and language, and this time around I was almost done with it, but not completely. A few annoying segfaults still plagued both the engine and the language, and when the theme announcement woke me up, I sat in my dark room without an engine and any inspiration.

The theme

My first ever jam theme was "one room". I thought back then, and I still do, that it’s a pretty nice theme. But ever since then I can’t stop the feeling that everything went downhill really quickly. Ludum Dare 38 was held on a new website and the theme was "small world". Mkay, a variation of the same theme as the last time, fine. But just look at the past few themes: "your life is a currency", "start with nothing". REALLY? Aren’t most of the games with progression basically "start with nothing"?? Sometimes democracy does not work out, and I’m really sad that so many people voted for these types of themes. Can I also mention the fact, that 90% of the themes that make it into the voting rounds are recycled for years??? When will the "floating islands" theme die? Please!

This time around the theme was stuck in a loop. At first, I was extremely happy, that it wasn’t "connections", but after sitting in front of an empty document for an hour, my excitement subscription has expired. As I usually do, I’ve looked up the definition of the word "loop" and all of its variations, and concluded that the only ones that could work are "line with its ends connected" and "programming statement". At this point, the realization struck me, that most of the games would end up being a single action repeated times and times again, and that the theme does not have any alternative interpretations. Democracy on Ludum dare bad.

And looking at other big jams, like GMTK, I’m jealous of their themes like "GENRE but you can’t do MECHANIC"!

The idea

Slowly the idea of being stuck in time & space error formed in my head. I remembered my discussion with @PaperCookies about a game, where you hide messages in bottles on a huge map. Having no other worthwhile ideas, I’ve headed in that direction.

I have to admit, I still do not know how I allowed myself to take such a reckless move and attempt to make a real-time multiplayer game in the time constraint of 48 hours when I’ve previously tried not once but twice and failed in regular conditions. Especially considering how conservative I was before with my games, almost always sticking to PICO-8 and never, NEVER going with an unknown framework!

The code

And again I stood at a crossroad: I needed to pick an engine to make the game with. I wanted it to be able to export into HTML5 since web games are much easier to play & get more attention. And taking into account the type of game I was going to make, it was essential to making it as easy to join as just opening a tab in your browser. And well, what could be more native to browsers, than HTML and JavaScript themselves?

I’ve worked with P5.js a tiny bit before, so I chose it as my graphics solution for easier rendering on canvas. But the biggest question for me was what to do with networking. Thankfully, after some quick googling I’ve stumbled upon a really nice networking library, Colyseus. The only issue for me is typing/pronouncing its name. The docs are not too verbose, but thankfully they had a few nice examples on Github, that helped me to get basic player movement working, and I was really proud of myself: the thing that I’ve failed twice at was finally beaten! I have to admit, the library is pretty high level, and before I’ve tried working directly with UDP/TCP, so that’s why it was so much easier this time around.

The server is written in node.js, it handles messages from clients, handles movement & message leaving logic, and redirects that info to all the clients. The client is written in pure JS, some of the UI I’ve decided to make in HTML, since why not, I’m using it anyway. I have to admit, it felt really weird programming a website during a jam, especially during a game jam. By the end of day 1, all the basic functions were working: joining the server, movement, leaving messages & chat. I’ve invited some friends to help me try it over a real network since localhost isn’t great at testing in real-world conditions. The huge downside of making games in JS is how easy it is to open the console and modify the code: a minute didn’t pass and they already destroyed the game xD

So I took what I’ve learned from their hack attempts and patched everything out, adding server-side checks to everything, installing a bad word filter on all text inputs. Day 2 went by much quicker, I’ve mostly worked on visual improvements and audio. I have to admit, putting all asides, this was a very chill jam for me, I took my usual trips to a not so nearby cafe to practice my sketching skills in Inktober, played some games, and overall did not crunch and had a great time!

The visuals

Since I was working with a super simple graphics framework, I did not want to create anything complex in terms of graphics. Loading aseprite animations might be a piece of cake in Lens but I’m not working with it this time around. So I’ve ended up having only 4 sprites in the game: the player itself, old man, dinosaur, and baguette. All of these are super simple animations exported into a png strip. The rest of the game is just basic shapes and text.

The audio

I still haven’t learned how to write music in anything more complex than PICO-8, so I went with what I knew. I’ve written a really nice music track, but when I tried to save it (I do not know how I managed not to save it before) PICO-8 crashed, and I’ve lost all my work. So sadly, I had to start all over. But I have to admit, the second piece was a lot more calm and ambient, and I’m really happy with how it turned out:

I’ve struggled a tiny bit with implementing the music into the game and then added some super basic sound effects, also made some basic sound effects.

The result

30 minutes before the deadline, I’ve fixed all the issues with the game and managed to get the server spinning on my laptop. For the first 2 days or so the server was stuck on my laptop, until I bought a VPS and moved it there, with great relief. I was not able to use my laptop while it was acting as a server in fear of overloading it’s RAM, I’ve even shut down the x server to save some CPU power.

Here is a timelapse of the whole development process:

And you can try out the game here, if the server still runs (it probably doesn’t).
The game has been live for over two weeks now, so I stole the database and did some data mining, so here is some stuff I found out:

  • 209 total messages in 2 weeks from 44 unique authors (average 14 messages per day).

  • How many people attempted to crash the server: 2.

A really sweet village started by @Gaziter.

  • Top chatter: manx with 17 messages.

  • Shortest message: q, author yeet the kid.
  • Farthest message from spawn: i made it here by coco, at 69:420 (426 ingame units).
  • Closest message to spawn: hi by billy, at 0:0.

I’ve been a bit worried that the server might die under high traffic, but the game never went viral on the Ludum dare site, so the server did just fine. I have to admit, I wish more people joined because the more people leave their messages the more interesting stuff you can find. My goal with this game was to have a cool place to explore & leave some secrets for your friends to find, and it kind of worked, but on a very small scale, people did not venture past spawn too much.

I’m already working on a post-jam version in the breaks between developing flute, tsab & lit, with a character grid this time around.

Overall, this jam was great for me. I did not crunch, and that’s what matters to me!

You might also find interesting

Join the discussion!