This was my first Ludum Dare attempt. It was fun, educational, and extremely challenging. Now that the dust has settled and we’re digging into all these submissions, I figure I’ll put together a couple of handy lists and maybe embed a picture at the bottom. Honestly, it’s taken a couple of days to get back to a level of energy and motivation where such tasks are even possible.
- I finished the game, it’s playable and beatable.
- The graphics turned out ok, but Gimp did most of the work. Seriously, it’s all gradients and maybe a blur filter here and there.
- The idea didn’t fall apart, despite my best efforts.
- Flash was generally cooperative, even though my proficiency with it borders on feces-slinging monkey. At some point I might have accidentally typed, “To be or not to be?”
This is the real list though. The lessons are within the failures and I must say that this was very educational.
Bad / Disappointing Stuff:
- Ship control ended up being sluggish. Rather than delegate stuff like this to box2d, I rolled my own physics. This wasn’t a terrible thing and probably saved some time, but the thrust was so weak that stopping from a free-fall took almost a full screen height. When I implemented it I was treating it like a lunar lander game. I wanted that mechanic to be difficult, but it was difficult and slow, which quickly became frustrating. Couple that with the next point and people start to throw things. At me. At my face.
- Collision was very unforgiving. If I would have taken the time to deflect the ship from collisions instead of letting you bury yourself into solid rock, it would have been a very different game. Despite having a health bar and health to fill it, collisions are almost always fatal because you have to fully reverse your course to get out of the matter you’re colliding with.
- Mouse handling was weird and it made the laser weird. I’ve done a little bit of work in flash, but not a lot. It seemed strange to me that I could get the position of the mouse from anywhere, but button state was a different story. When I get around to polishing the game and fixing a bunch of this stuff up, I think I’ll do something like add an input layer over the whole thing to just track mouse states.
The result was that the laser would sometimes fail to fire when it should have. I suspect that my mouse event was getting eaten by the player sprite sometimes, and I tried to avoid a sqrt call in the frame loop so my distance calc lacks some precision. Upgrading the laser helps a lot and so does holding down the mouse button and moving from block to block. Once it’s down everything seems fine. There were some games where this issue wasn’t even noticeable, but I could have also just gotten used to operating it a certain way.
- The upgrades weren’t very well balanced. By the time I started working on upgrades and resources, it was Sunday and I was rushing to get everything done by the deadline. The laser and cargo upgrades were critical and I think the laser upgrade path was where it needed to be. The rest were tuned according to average map resources to ensure that you couldn’t, or were at least extremely unlikely to spawn a game where not enough of a certain resource existed to complete the upgrade path. Hull was practically useless for reasons mentioned above, and while I wanted fuel to be an issue, I didn’t want it to be as big of an issue as it is in traditional lander games. You’re going to be mining after all, so sustained hovering is a necessity. One fuel upgrade trivialized the mechanic.
The finalized version will probably have thruster upgrades at least, I’m not entirely sure what I’ll do with fuel. Hull was going to be necessary for certain depths but the UI and logic for that never made it in.
- Sound and animations were not complete. I think the lander concept of the game would have clicked with more people if the thruster firing was visible. It also would have been pretty (Gimp->Filters->Game Effects for Idiots->Thruster Stuff).
SFXR is awesome. The older c/gtk build would quietly try to launch and then immediately die without an error. Fortunately, I found as3SFXR and made enough audio content to get the point to celebrate a player’s death with clanking and explosions. The explosion graphic probably looks similar to the one in Canyon Run, my warmup entry. The ‘spark’ brush in Gimp is awesome. I used it again but created more frames.
I wanted to add engine noise, laser noise, block zap, and maybe some background music. This did not happen. The most significant issue here, besides content creation time, was sound looping and embedding with Flex. As I understand it, MP3 files have an arbitrary padding at the start of the file and without a third party library, the Flex SDK does not embed WAV or OGG, or anything else. Looped sounds were awful and I didn’t have time to write a sound wrapper to manage looping and ensure that the next play was advanced past the delay.
I think that’s about it. Time was a huge factor (duh), but I really ended up having a pretty solid 24 hours to work with. Friday I was exhausted from working on a car for two days straight. By the time I got finished people were already several hours into their projects and hyped up on caffeine and dreams. I was sore and shivering from fever chills due to rather dangerous and nasty sunburn. Saturday I had a hard time coming up with an idea that used the theme and wasn’t overly ambitious. I also went out to dinner and saw a play with my wife. Afterward she went out of her way to make sure I was tucked away inside a cozy little coding pocket, free from distractions for the rest of the weekend. She’s pretty awesome.
Here’s the entry:
I was most pleased with the escape and ending sequence, so if you can suffer the sluggish navigation, beating the game takes about 15 minutes.
One last note, I have a couple of timelapse captures from early on, but I found that I was extremely self-conscious so after a few thousand silly mistakes I shut it down. You don’t want to see that anyway. If you’re convinced that you do, boot to a linux distro and open Gimp. Next, open a console and type ‘nano’. Stare at that for a while. Done.