rss feed of the blog sol stuff discord follow sol email sol Sol::Games


Ludum Dare 48h #30 entry



Win32 version


Emscriptened web version


Jari Komppa

What Went Right

1. Known Tools

I kept mostly to tools that I know - my trusty (if a bit rusty) 2d opengl framework, SDL, on c++. I did have to spend a bit of time at start to get the framework even to compile, but after that everything was familiar and easy to work with.

2. SoLoud

I've been working on an audio library, SoLoud, for the past year or so, and adding audio to the game was a breeze with it. (I hope it's as easy for others to use it as it is for me, but you never know).

I added initial sounds using the built-in sfxr, and replaced those later on with recorded samples. Fading between songs and the "tinny sound" filter in the pause mode was also easy to do. I was a bit surprised to find that all of this also worked in the emscriptened version without a hassle.

3. Level Generation

I hate making content, especially in a hurry. Thus the game design included a level generator, which apparently was good enough to fool people to think that the levels are hand-crafted. I didn't even plan for it, but the generator creates a few different level types with different "idea" behind them - these are, however, patterns that we detect even though there is no intelligence behind them.

The level generator is, quite simply:

while (level is solvable) do
    add a wall at a random position
remove wall that made level unsolvable

..although there are some other things like level size, the outer walls, figuring whether the level is solvable, dropping in those "breadcrumbs", balancing the "sparseness" of the maps, etc, but the "intelligence" can be really summed up with the above pseudocode.

4. Gameplay Tuning

I realized early on that the game would be really frustrating, so I spent significant amount of time adding features that should make it less so. This lead to reviews such as "this was more fun than it has any right to be".

The time challenge maps were generated with a fixed random seed. Since random maps are random, I generated 100 first maps and then sorted them by the a* shortest path (..well, djikstra, but same difference..).

5. Keeping It Simple

Keeping the game idea simple let me spend the time on tweaking the playability (as well as other "polishing factors").

What Went Wrong

1. Difficult Theme

I went in this time wanting to write some game where I could stress and develop SoLoud further, but unfortunately the theme ("connected worlds") was such that I couldn't figure out any sane game ideas I could develop in the timeframe that would also let me do that. I spent rather long time at start pondering about different ideas, but most of them required significant content production. In the end I went with what you can play now.

2. Music Production Woes

While developing the game I was listening to some upbeat techno/electronica, and it fit the game quite well. I went through several different approaches (like using online midi music generators, plugging the midi files to reaper and using NI Massive synth as the instrument), but the results didn't feel good.

Eventually I just used some sequence synths in NI Kontakt plus drum sequences from NI studio drummer; in practise I just played 3 different notes and the sequence synth filled in the rest. The result is more fitting than the random jazz midi tunes (which would have worked fine in "spacey" games..)

I really should spend time figuring out how to make "real" music. ;)

3. No Real Hook

The game is rather dull. This is the flip side of keeping the game idea simple. I should have limited the maximum level size further to make the level progression more interesting. I also considered writing a "story mode" that would teach the player some nuances of the gameplay, but that idea came rather late in the contest and I didn't feel like working at night.

There's no way for the player to "die", which is why I added the "time challenge" mode. I could have added traps (simply by replacing some of the wall tiles with spike tiles or something) but I didn't feel like that would fit the mood of the game. I also did not want to add any monsters, since that would have made the level generation more complex, as well as adding AI coding to the already busy scedule.

4. Didn't Set Up Emscripten Up Front

I did not have emscripten set up before LD. Luckily I did not try to set it up during the 48 hours, because setting it up ended up taking three evenings.. Turns out, you can't compile it with 1 gigabyte of memory, and compiling it is the only way to go if you're installing it in a virtual box linux. Also, downloading compiling LLVM from scratch takes surprising amount of time AND disk space.

If I had had emscripten set up, I would have had the emscriptened version going right from the start of the rating and that would have made life (and rating) easier for many people.

5. Graphics

I could have spent more time making the graphics more appealing. Some folk have said they look nice, but everything is relative.

In the end..

I feel it was a nice weekend spent. I had organized it so that I have free time way in advance, with my wife's parents taking care of our son and everything. I can't remember when I last had opportunity to enter ludum dare and actually spend two days on a game. I didn't stress too much about it though, and slept well, took dogs out with my wife, and so on.

Even so, it was a rush, after all these years. I don't know how well my game fared as of yet, but the comments I've received are generally positive. With over 2500(!) games in the contest, I don't see myself scoring any top 10 positions, unless I get really lucky.

And the Results Are In:

Full rankings;

#96 Audio, #164 Fun, #204 Overall, #215 Theme, #440 Mood, #460 Graphics, #479 Innovation, #805 Humor

Site design & Copyright © 2022 Jari Komppa
Possibly modified around: September 16 2014