Tuesday, April 30, 2013

Potato Gnomes Online

This past weekend was Ludum Dare 26! A record breaking 2342 games were submitted. My entry in the 48 hour game jam is called Potato Gnomes Online, an online platformer for three people. The theme of the jam was "minimalism" (unofficial sub-theme was potato), so I chose to limit the controls of each of three players. One gnome can run, one can jump, and one can throw French fries. Together, they are stacked and must cooperatively collect potatoes to beat each level.

When it comes to programming, art, audio, and design, typically I only have sufficient time to focus on two of these. To put things into perspective, it made sense I invest all of it into programming... Virtually all my development time was devoted to the technical aspects with Player.IO.

The Good

The game works! Technically, it turned out as I had planned on Friday evening, briefly after the theme was announced.

The server automatically match makes three random people and lets them play as a unified character. I was thrilled to play with complete strangers online. This was such a boost of morale so definitely I want to take online multiplayer further. Overcoming this initial technical roadblock opens up all kinds of opportunities.

As for the jam itself, I got sufficient sleep and maintained a healthy schedule. The core features were finished on time, leaving just optional ones like a chat system for another time.

The Bad

Potato Gnomes Online actually is not very fun, especially for the gnome who jumps because it is just a single button for input. Not surprisingly, it is typically the first player who disconnects. Also, it isn't very entertaining to sit in the match making lobby while the game attempts to find other players.

The audio and art are lackluster. Music is missing entirely. Focusing on these components would have stretched my time budget too thin.

The Ugly

The code manifested into a tiny little nightmare. The server was written in C#, but it contains all sorts of poor programming practices that do not utilize the strengths of the language. Algorithms are stitched together and unused variables float around everywhere like a bunch of turds in a maze of sewer pipes.

I discovered the hard way that the server is multithreaded so needs to be thread safe. I panicked and sprinkled lock statements everywhere to neutralize the problem in a very crude way.

The game feels very laggy. For example, if a player wants to jump, then the request is sent to the server, which then processes everything and broadcasts the live data. I designed it this way intentionally, to force flawless synchronization across each client.


My game jam entry was a success on a technical level, and a very rewarding experience. It has given me the confidence and experience to put it to much better use in the future.