About Deraj (twitter: @RadiusEngine)
Ludum Dare 21
Archive for the ‘LD #21’ Category
The Grind was my first entry for Ludum Dare. This is an in-depth breakdown of the development went.
My goal was simply to finish something and I’m happy to say I achieved that goal. I ended up having to cut the vast majority of gameplay features, graphics, and sound (entirely), but the contest was a good exercise in scoping down a project to fit into the time available.
- Planning: 1 hour
- Map design/editor: 3 hours
- General coding: 6 hours
- Graphics: 3 hours (including scrapped art)
- Testing and bug fixing: 3 hours
- Real life + sleep: 32 hours
A narrow scope leaves time for polishing. I came into the contest with a vague notion of how time-constrained I’d be, but I didn’t truly appreciate the level of urgency until about 3/4 of the way through the contest. At the beginning, I tried to scope my project down to make it achievable, but honestly I brainstormed ideas I had no chance of implementing in time. This led to wasted time working on features that were later cut (e.g. smart phone text, nicer looking wall graphics).
Don’t underestimate time spent on algorithms. I had a rough idea of how to implement simple collision detection/resolution and line of sight detection, but I really underestimated how much time it would take to implement something acceptable. My first few attempts at collision resolution could lead to the player getting “stuck” and it was so frustrating that I had to keep iterating until I found something that “just worked.” On the plus side, I managed to come up with a simple line-of-sight algorithm late at night that works very well (set “debug = true” in the main script file to watch it in action).
Real life matters, but can be inconvenient. I hadn’t planned on spending roughly 11 of my waking hours doing “real life” things, but I think I had a better weekend and enjoyed the contest more because of it. After I submitted my entry, I was glad that I had done something else fun before it was time to go back to work on Monday.
Critique of The Grind:
The Grind is a very shallow game, but it is entertaining to watch the player get hounded by many bosses at once. I enjoyed watching 3 different guys in suits all say “Have some work!” right as I turned a corner.
Obviously, the game could use more polish. There are no menus to speak of and the smart phone isn’t really used very effectively (the original plan was to have various tasks show up on the phone–in the end, it’s just your score). The graphics ended up being a strange mix of 2D overhead (for the walls) and 3/4 (for the characters); this was simply a function of running out of time to make the wall graphics look good from a 3/4 angle. Lastly, the lack of sound and music is regrettable, but these were last on my list of priorities by necessity.
In the end, though, I had a blast and can’t wait to play through the other entries. Thanks to the Ludum Dare community for arranging this event!
When I started work on my LD21 entry, I have some vague notion that I was going to have to create maps, AI, and easy-to-use controls… but I really underestimated how much time all of these would take. It looks like I’ll be able to finish something, but I’ve already had to cut about 90% of the feature I originally planned
Map Editor (4 hours): Rather than manipulating large arrays of numbers in my code, I decided to make a simple map editor. In the end, I”m sure this will pay off because editing the arrays by hand is very tedious (and error-prone as you get tired).
Collision detection/resolution (3 hours): This was actually the first time I’d written collision detection for axis-aligned boxes and walls. Fixing all the issues where you could get “hung up” on walls was a little tricky, but now I”m happy with how responsive the controls are.
Enemy AI (2 hours): This is still a work in progress. My original plan was to have enemies move about randomly. It took about 10 seconds of gameplay to realize that this would not work. To fix this, I had to add scripted paths (and update the map editor to handle this).
Line of Sight (2 hours): Late last night, I realized that I needed honest-to-goodness line-of-sight testing to make the gameplay fun. I wasn’t totally sure how to go about implementing this and I was pretty tired, so I was little worried. Fortunately, I was able to come up with a very simple algorithm and implement it, even in a half-awake, half-asleep level of consciousness
I haven’t competed in Ludum Dare (or other accelerated game development competitions) before. But if all goes according to plan, I’ll be competing in LD21 in less than 24 hours. For my first event, I’m setting my goals appropriately: I just want to finish something before the deadline
As with all my recent projects, I’ll be using my unencumbered custom game engine based on C, SDL, OpenGL, and Lua (the Radius Engine) and my personal menu/layout/key-binding Lua code available here (of course, no game logic will be reused for the contest). Graphics will be created with The GIMP and sounds with sfxr (or FamiTracker if I can’t figure out sfxr).
Thanks to the Ludum Dare community for starting this great tradition. I’m looking forward to it!