Ludum Dare 51: Village Defender

Cover art for Village Defender--A hero, a villager, a couple of monsters, raining arrows and stones from above..

tl;dr: I made a little game for the Ludum Dare 51 game jam a couple weeks ago! (The gameplay is bad, but the music is great!)

The game

🏹 Lead the village the defend against relentless waves of monsters!

I used my familiar Godot frameworks (ScaffolderSurfacer, and Surface Tiler). So it has polished AI navigation, nice menus, and a fancy tileset.

An animated GIF showing gameplay from Village Defender.

The game jam

The theme: "Every 10 seconds"

Ludum Dare is a semi-annual event where people create a game over the weekend.

  • Ludum Dare is a ranked competition, with a clever voting system that gets more eyes on your game when you in turn rate other games.
  • There are a few different tracks you can participate in; I usually do the more-challenging "Compo" track, where you must create all your own art, music, sounds, etc. from scratch, work by yourself, and finish within 48 hours.
  • The games all follow some central theme, which is only announced at the start of the jam.

I worked solo and created everything during the event (the Compo track). Except of course for my frameworks (which is fine, you're allowed to use pre-existing code).


What went well

  • Success! I submitted something!
  • Famistudio is a cool tool, and I made some cool music!
    • It's a music tracker for NES chiptunes.
    • It's technically a little more limited than what I've used before, since Deflemask can also make tracks for other systems like Sega Genesis.
    • But the UI is both more powerful and more polished in FamiStudio, and I think I'll be able to be a lot more productive in it (eventually!).
  • I'm happy with how my ballistic trajectory calculations turned out.
    • It was very satisfying when arrows and rocks finally started flying!
  • My Scaffolder, Surfacer, and Surface Tiler frameworks worked well again!
    • These let me focus on the fun gameplay elements without spending a ton of time on less-interesting, repetitive tasks like GUI creation and basic character-controller logic.
    • I do need to figure out some better ways to improve the performance of my AI navigation in Surfacer at some point though.
  • My pixel art isn't very good, but I'm at least really happy with it considering how much I did with as little time as I gave to it.

What could have gone better

  • The biggest high-level issue is that I didn't budget my time well.
  • I spent too much time at the start getting set up with more infrastructure than I had time to use!
    • Radial menus
    • A powerful AI command system
    • A description and label system for entities and commands
    • A system for upgrading through various tiers of friendly AI, enemies, and buildings
    • A currency/cost system
  • Not enough time to focus on the actual gameplay:
    • I pretty reliably find that I can make a game idea fun to play if I just dedicate a decent amount of time for playtesting.
    • I definitely did not spend much time playtesting during this jam.
    • Consequently, the game isn't very fun!
    • It's not balanced.
    • It's not clear how to command units, or even what you're supposed to do.
  • Not enough time to fix performance:
    • The framerate drops a lot after you play for a couple minutes and there are more units in the level.
    • I could have fixed this with more unit-upgrades that replace pre-existing units, rather than just adding more units.
    • I also probably could have improved this by adjusting the parameters of my platform graph calculations.
    • I should have done more testing on another device that isn't my very-powerful gaming desktop.
  • Not enough time for art:
    • No animations (except for a super-simple one-pixel up-down bob)
    • Not enough polish on my tileset
    • Not enough polish on the background
    • Not enough polish on buildings
    • No particle effects
  • Too much time spent on music:
    • This was mostly because I was using a new tracker tool, FamiStudio. Now that I'm familiar with the tool, it should take me much less time to create music with it.
    • Also, my main piece of music uses a way-too-complicated "complex time signature", 10/8 (3+3+2+2 or "buh-gi-duh, buh-gi-duh, bum, bum"), and this definitely made it take longer to write!
      •  But it was really fun to write, and I really like the music I made!
  • Not enough time for sound effects:
    • I think I only included a jump and impact sound effect at the very last minute.
  • A couple game-breaking bugs:
    • I needed to release a couple updates to my submission, to fix game-breaking bugs.
    • I guess this happens when you don't give yourself enough time to playtest!
    • Oh well. Ludum Dare does allow for post-submission bug fixes as long as they aren't adding any new gameplay, and are just fixing critical errors.
    • I was able to push a fix the next day. I think a couple folks tried the broken version before I'd fixed it, but oh well!
    • Bug 1:
      • I'm still not sure of the underlying cause of the bug. It was something to do with how I handle the AI walking along a surface and hitting an adjacent wall. I was able to at least identify a boolean value that looked suspicious when the crash occurs, and I just force the AI to stop moving in that case.
      • Not a great fix, but much better than the game crashing!
    • Bug 2:
      • The level simply wouldn’t load in the Windows export. This was caused by a typo in a filename. For some reason, Godot didn’t choke on the invalid filename when running through the editor or in the HTML export.

What reviewers are saying

(See the reviews on

  • Pros:
    • "Best music I’ve heard so far on this jam. Nice pixel art as well!"
    • "I liked the audio and especially the graphics, the transitions and UI were very well done."
    • "Here for the music and the pixel art :D That chiptune is getting me nostalgic!"
  • Cons:
    • "The game got quite laggy towards the end though as other people have mentioned and there seemed to be some features missing, I assume you originally intended for more buildings to be buildable for example."
    • "Overall, I think this game has a lot of nice visual and audio work, and has some pretty cool mechanics (pathfinding, and a combat system with a variety of viable combat strategies!), but is in its current state hindered by lag."
    • "Unfortunately this became pretty much unplayable for me due to performance issues and stuttering."
An animated GIF of a pixel-art robot from Village Defender.

    🎉 Cheers!

    This is a simple icon representing my sabbatical.