Dwarvenshaft: Post Mortem
Hello! It's been a while since I've done one of these. My game Dwarvenshaft recently passed 20 ratings, and has already gotten quite a lot of engagement, so than you so much! So I decided to write a post-mortem for the project, and some thoughts about it going forward. Here you go:

Post Mortem

Part 1: Basic Idea
So, unlike previous jams in the past, I no longer begin brainstorming before the theme is announced. This allows me to save mental power for the theme itself only, and I no longer get frustrated that my favorite theme wasn't picked, and so far this strategy has worked well for me.
Why dwarves?
Good question! I figured a lot of people would make underwater games, and like usual I tried to find other ways of implementing the theme. There were some options, the depths of your mind, the depths of a forest, but ultimately I settled for "the depths of the earth" since I wanted to make a game with a nice and easy progression. Games like Terraria, Minecraft, Deep Rock Galactic and the like came to my mind, and since I was already at the time listening to a band called Wind Rose, I decided: you know what? Let's make a lemmings game but with dwarves!

Part 2: Coding the game
I was already pretty tired when I started the jam, so I didn't push myself too hard. I started by doing a grid system, and by programming the basic interactions with the dwarves. The dwarves themselves were the hardest part to make, since I wanted to make them with pathfinding. I struggled to figure out how to do it, since the algorythm I grabbed wasn't suited for what I wanted, which was for them to move next to a block and then mine it. Instead what I had to do was split the algorythm into two parts: the first one is a regular A* (A Star) algorythm, which looks for the closest unimpeded path between to points, and this one is active when the destination is an empty block. The second is not an algorythm at all, it simply draws an L shape between the start and destination points, which happens when the destination is not empty, and the dwarf mines all blocks in his path to get to the destination.
After playtesting the game for a while I realized it was too tiresome if I had to manually order every dwarf individually to mine every block, so that's when I decided to create the automation algorythm, which just looks for the nearest block to mine in a certain radius randomly and then pathfinds to there. This has issues, of course, because if there are no blocks within that radius the dwarf just stands there. Regardless, I was very happy with the results of this, and with it the game was about half-way done.
Next was the drill, which ended up breaking the game. The drill breaks every block in only a single hit, but doesn't drop as much material per block. This can very quickly deplete the resources of a level and hurt the gameplay, but I didn't have time to fix it. You use the drill to mine to the next level, but this destroys the drill. This is because I wanted each level to feel like a new challenge, otherwise you could just keep going down indefinitely. I also made it so that blocks are harder to mine the farther down you go. Then we get to the messed up part:
The Soft-Lock
Yea, there's a pretty big flaw in my game design that went overlooked until it was too late. It goes like this: In each level there is a random but similar ammount of Iron Ore. In order to progress to the next level, you need to craft a drill using Iron, then waste that drill. However, the iron required for each new drill rises exponentially, so you need more and more iron each time, but the iron that is available in each level doesn't increase, so inevitably there reaches a point where the ammount of iron required to progress is greater than all the iron that you have access to, and you get stuck. Upgrading the dwarves helps to get more Iron per Iron Ore, but this only delays the problem since the upgrades are linear and not exponential like the cost of a Drill. This is a big problem that I was unable to solve before the jam was over. I intend to fix this in the post-jam version.

Part 3: The Art
It was time to fill the game with a bunch of sprites and animations. This part was tiresome but I powered through it, since there were a LOT of sprites, two for each resource, and then at the last minute I decided to make variations of the dwarves, which meant having to draw 36 sprites for them. Luckily, Aseprite helped me to complete this task much more easily. I ended up using the Rosy 42 color palette for this, which I was a bit skeptical about in the beginning but committed to it and I think it looks good.

Part 4: The Audio
This part was surprising. I knew I wanted the extra day to polish everything better before submitting, so no way I was going to go Compo, but this also meant I didn't need to make the music. I practically never make my own music for my games, the only time I had done it was in the previous LD which was my first time participating in Compo. However, since I had such a specific vibe I wanted the music to have (a Dwarven chant but somewhat epic, inspired by Wind Rose), and I was unable to find a fitting music on my usual resource websites like Pixabay, I decided: You know what? Fine! I'll make my own music! So I opened up BandLab, and after a couple of failed attempts, I came up with the official OST for Dwarvenshaft: Dwarvensong. I admit this was the most fun part of the project for me, and I was struggling to not laugh while recording it. You can listen to it on my Newgrounds: https://www.newgrounds.com/audio/listen/1416498

Conclusion
This was one of the most interesting Ludum Dare entries I made in my opinion, we'll see if it holds up after the jam. I definitely want to keep working on this, solve the current problems it has, and flesh it out into an actualy idle and incrementation game. I have some ideas for new features to implement to make it more interesting and engaging, but we'll see how that goes. For now, thank you so much for reading, and I'll see you next time! Take care.

Play and Rate Dwarvenshaft: https://ldjam.com/events/ludum-dare/57/dwarvenshaft
Source: ldjam.com archive