Last week I participated in Ludum Dare 18 and after some intense work delivered an interesting little game called Protractor, here’s a link to my competition entry. Leading up to the comp I played some winners of the previous Ludum Dare to get a good feel for what I could hope to accomplish. I prepped my dev environment, picked up groceries, and set up a special SVN branch for this comp so I could make engine hacks or workarounds without any worry about breaking other projects.
On Friday night when the theme was announced I just sat there and thought while scribbling some ideas on paper. I wanted to do something with physics and attaching enemies or weapons to yourself. At first I was thinking of doing a round planet with humanoid figures using telekinesis. I started to set this up in code but wasn’t really feeling the idea so I just went to sleep.
Saturday morning I took a quick look at games with a similar concept for inspiration, specifically TUMIKI Fighter and Captian Forever. My design is based on simple abstract shapes so they are easy to recognize on form alone allowing for the color to represent health. I also planned on having random weapons with random colors and lots of trails all over the place. For color values I have it set up so I can randomize over HSV space to get away from the RGB kind of look.
Building off the clean project in my game engine I set up an object oriented structure where there’s a base class shared by the player and enemies, a base class shared by all part types, and everything derives from a GameObject which is part of the engine. By about 3 PM Saturday I had the player moving around with the ability to pick up parts and attach them. But so far the only part was a weapon and it was always the same default weapon. I took at least 2 hours to put some polish on that system with grabbing and attaching the weapon parts.
Around this time I did a little art pass: tweaking colors, particle systems and other visual aspects. I threw in an enemy that just randomly tried to pull parts to it and shoot. By the end of Saturday night I wanted to have all of the core functionality in game so I could take the next day to add better AI, polish, balance and tweak. So I trudged along adding the other 3 part types in a very rough state. Around midnight Saturday night I posted a screen shot to demonstrate the core functionality.
Sunday I started out by just tweaking lots of little things. There needed to be some background for movement reference so I just threw in an extremely simple particle system of gray squares. I worked on the AI a bit and improving their tractor beam use a little. I made them move around pretty much randomly in near the player. I tried having them turn to aim but that isn’t very reliable because of their poor ability to configure their ship so I just made them cheat and rotate their weapons directly. There just really wasn’t enough time to make any kind of real AI at this point. For all this time I just had the player spawn in next to some parts and an enemy that I had all placed in the editor so I added logic to randomly spawn in enemies and parts out of view of the camera.
This felt good enough so I wanted to spend some time adding random weapons to add both visual flair and gameplay depth. As a simple balance measure all weapons have the same DPS with different firing rate, bullet damage, and bullet count. Other aspects like speed, spread, and color are just randomized. It seemed like a big part of this game was reading where damage was coming from and going too so I had an idea to make bullet size proportional to their damage to facilitate a quick visual read.
As the deadline loomed I started to freak out a little becuase there were only a few hours left and I harly spent any time actually playing my game. So I took a while to just play and polish random gameplay issues. I experimented with several different control schemes but decided to go with the simplest which seemed like a good enough choice given limited time. I threw in some random large solid black boxes to both add an interesting element to game play and visuals while also making the world feel more solid to the player.
With about an hour left I focused on sound by adding more firing sounds and a tractor attach sound. I scaled fire sound frequency by bullet damage so weaker weapons sound higher pitched to make it sound a little more dynamic. In the last half hour I just tried to play my game only tweaking a few minor things. I had a score display of how many enemies were killed with high score tracking but decided to remove it a the last minute. Adding a scoring system can add a lot to a game but it can also detract if done incorrectly. I like the idea of just providing a pure experience without the need for imposed goals. The implicit goal of growing your ship is as motivating a factor as any.
It’s was hard to come up with a name for my game in such a short period of time. I went with Protractor because it sounds sort of abstract and mathematical while also containing the word tractor for tractor beam. I’m happy with the way my entry turned out and after playing it for a bit since then it still seems to hold up pretty well. Next time I’d like to try to get some testers lined up, people offered but I was so focused on working that I didn’t take the time to contact anyone. Also I’d like to plan my time a little better so at the end I have more time to just play and tweak.
It’s impressive how well put together the Ludum Dare competition is. The judging phase is currently in progress and it’s great fun playing everyone’s game and doing my best to judge. It’s sort of like playing Wario Ware on a grand scale. Thanks to everyone who put it together and congrats to those who successfully delivered a game.