Last weekend was as sleep depriving as rewarding. While I could have easily been surrounded by the joys of procrastination and beer, I went for Ludum Dare #26, as announced in my previous post. Lightbyrinth is the result of that and, despite its flaws, I"m fairly happy with the outcome. Please don't embarrass me by looking at the source, I was in a 48 hour rush.

Lightbyrinth is a light based maze which tries to stick to the "Minismalism" democratically voted theme. You control a small blue sphere that has to find the exit of the labyrinth it's in. An infinite swarm of red spheres will try to stop you from doing so, reason why you should move fast. Beware though, as it's quite dark and you will only see what's in front of you.

Play Lightbyrinth

The game targets both desktops and WebGL friendly browsers, it's written in Java using the mighty libgdx and the Box2DLights extension.

Here's my humble postmortem of the experience.



I may have a terribly bad memory but thanks to my notes, here's an overview of my executed plan of action for those who might be interested.


Saturday April 27th

  • [6.00am] Woke up, read the theme and introduced some caffeine in my body.
  • [6.30am – 7.00am] Game design on paper.
  • [7.00am – 10.00am] Basic project setup, level loading, character control, camera movement and maze exit.
  • [10.00am – 11.00am] Loading physics data, collisions callbacks setup.
  • [11.00am – 12.00pm] Box2DLights integration and GWT compatibility.
  • [12.00pm – 1.30pm] Lunch break!
  • [1.30pm – 2.30pm] Box2DLights configuration and tweaking for gameplay purposes.
  • [2.30pm -3.00pm] Enemy spawn points.
  • [3.00pm – 5.00pm] Pathfinder.
  • [5.00pm – 7.00pm] Path follower and local steering for collision avoidance.
  • [7.00pm – 9.00pm] Dinner break, and some TV shows!
  • [9.00pm – 10.00pm] Basic enemy behavior setup and tweaking.
  • [10.00pm – 10.30pm] Death condition.
  • [10.30pm – 12.00am] Shooting mechanic.

Sunday April 28th

  • [12.00am – 2.00am] Game director, procedural enemy spawning system.
  • [7.00am – 8.00am] Level progression.
  • [8.00am – 8.30am] Temporal level brightening up the level when the player is hurt.
  • [8.30am – 10.00am] In game tip system.
  • [10.00am – 12.00pm] In game HUD.
  • [12.00am – 1.00pm] Lunch break.
  • [1.00pm – 3.30pm] Main menu.
  • [3.30pm – 5.00pm] Tileset.
  • [5.00pm – 6.00pm] Sound effects.
  • [6.00pm – 7.00pm] Background music.
  • [7.00pm – 9.00pm] Dinner break.
  • [9.00pm – 12.00am] Level design.
  • [12.00am – 1.30am] Polish.
  • [1.30am – 2.00am] Submission and collapse!

What went right

  • Technology: using libgdx has proven to be the right decision once again. I had the very core of the game up and running in the first few hours thanks to its maps API sweetness and awesome Box2D integration. Its rapid iteration approach is a big win as well, as I could test it on my desktop without having to deploy it on a server every time.
  • KISS: some people didn't like "Minimalism" as a theme. However, I think it ended up being the perfect way to enforce the Keep It Simple Stupid philosophy. It helped me focus on gameplay and feel rather than presentation, which was a clear mistake in my previous Ludum Dare attempt. The game boils down to: spheres as characters, two types of tiles for the maps and the lights, which were part of both aesthetic and mechanics.
  • Help system: people like to play and rate games after the compo but they certainly dislike reading through walls of texts to learn all the gameplay mechanics. Therefore, adding an in game data driven tip system was a plus. Little pieces of text would momentarily show at the top as new mechanics were introduced. For variety sake's, tips were mixed with atmosphere creation messages. I"m no writer and that clearly shows, but hey, it wasn't a bad idea at all.
  • Desktop and WebGL: libgdx multiplatform capabilities were extremely helpful in this case. You get Windows, Mac and Linux out of the box but that's not all. Even though I had to invest some time in order to get Box2DLights working on GWT, it paid off big time. Having a WebGL version of your compo game available makes it much easier for people to give it a try. I know not downloading other's people games when they"re desktop exclusive, kind of makes me a bad person. Ain't nobody got time for that!

What went wrong

  • Camera: all the negative feedback I got agrees on the camera. It doesn't follow the player fast enough, which makes seeing where you"re headed a not very pleasant experience. Bad time management, clearly should have dropped something to work on this.
  • Design polish: let's get this out of the way, I"m no designer. Nevertheless, this would be a lame excuse for level design, I"m trying to get better, promise. The intent was to progressively introduce mechanics using little tips, which I did and that's great. However, I feel like the maze and enemy spawning components could have been used much more intelligently. Reminder for self: practice your level design skills.
  • Bugs: a couple of vicious bugs slipped from grasp but didn't go unnoticed by some people. It seems that you can still control the character in between levels, while there's no physics, this could make you end up inside a wall, which is no good. Again, I should have allocated more polish time.


I care not about the Ludum Dare hangover, it was an amazing experience once more. I keep learning so many things about games development and extreme time management. Not to mention the wonderful community behind all this. We all know the Internet is a hazardous place full of mean people who like to destroy other folks" work. Ludum Dare is nothing like that, of course not all the feedback was positive, but the not so good comments were all constructive and will help me get better.

On a side note, Mario from libgdx, put together a simple tool to search Ludum Dare games as an experiment to see how many people used the library. It's ridiculously popular, shocker!

That's brilliant. Now onto some games rating.

This time I"m going to try vote as many games as possible (30 entries so far). Towards that end, I think this Ludum Dare based drinking game could help a lot!