This is my Ludum Dare 32 entry. The theme was An Unconventional Weapon.

For a while, I've been trying to bring some League of Legends mechanics into smaller games, and Ludum Dare seemed like the ideal opportunity to do so. One of the funniest characters to play in LOL is Blitzcrank, so I knew the mechanics were solid: hooking things is fun. There's also the counter side of having to stand still while hooking which makes one vulnerable if the hook misses.

After the core mechanic was chosen, most of the work went on the enemies. Each enemy has a slightly different AI. Pink rotates its bullet around itself, so it tries to always stay the same distance from you; Yellow always tries to stay as far from you as possible, shooting from time to time; Purple throws a bullet in your direction, and moves there to grab it back; Blue just tries to dodge the hooks and counter-shoots you.

Another interesting part of the game is how every time you kill a ghost, you stay with the other three ghosts (and the BG changes), as if each set of 3 ghosts is kinda a different game. I think this could be explored further in other games.

This is the first game I made since I moved from Zurich to Montreal. The whole games was made in a day or so. Most of the time I spent cleaning up the old infrastructure and making sure everything worked fine.

I've spent some time making sure the controllers were working fine and improving the rope mechanic. I think they turned out pretty well and it is super fun to circle around planets.

The hard part was finding a challenging mechanic after the basic mechanic was in place. I tried a bunch of strategies here (running to the top, infinite size world, etc). I settled with a time-based level mechanic. It isn't the deepest one, but it's pretty ok for a small game.

After deciding on the control scheme (just switching direction, auto move and auto shooting), it was just a matter of finding an interesting balance. In the end I decided to prioritize trying to destroy as little as possible while surviving the turret attacks.

Code-wise, it's nice to notice the AI for the turret. It tries to be smart and predict your movement patterns. It became too good, which made me add a shield to the player. The shield, on other hand, made the game a bit longer, which allowed me to add a score very strongly biased towards not destroying things.

Visually, we kept the minimalistic color/black/white theme, which I think works great.

I didn't have too much time for this, so the whole game was fully done (from idea to submission) in close to 10 hours. I don't think this impacted the implementation a lot, but it meant I had to go forward with the first idea that we had. (Which was, in fact, my girlfriend's).

Interesting implementation point here was using a Voronoi diagram to decide which station connects to each other (all rails are, in fact, perpendicular to edges of the Voronoi cells of the station).

I've spend most of the time trying to get some user input that didn't suck. I experimented with the car automatically running, with break only mode, with different speeds, etc. Ultimately, being able to fully control forward/backwards was the most fulfilling choice.

I also had implemented some passenger mode, where you could see little passengers on the train and deliver them to each station, but it was just very distracting and not fun. Finally, I also had plans for different types of missions, but then I realized they are all variations of "go to a particular station", so I cut those out too.

It has some of the enemy patterns found on the original game, but the latter levels are somewhat harder. Also, not having lifes makes the game much harder than the original version. I may revisit that. It has also a nice minimalistic theme.

One interesting part of coding this was trying to find a minimal data structure to support all different enemy patterns. In the end they can all be described by a spawn pattern (for horizontal and vertical waves), functions for x and y movement and frequency of shooting.

After working a bit on openfl-html5 and making some horrible hacks that were later fixed by Joshua, I've managed to release HTML5 versions of all ugl games.

My original plan was to have only those and completely ditch the Flash releases, but openfl-html5 is not that stable yet. So I'm keeping both for now, defaulting to flash. As soon as I get sfxr working on HTML5, I'll flip the default.

Update: just fixed a bug that prevent the iframe from showing on Firefox. Also, added a bunch of optimizations that made the HMTL5 version much faster.