Drilbert II Diggeredoo by wheybags

Drilbert the Drill Boy is back!
A short puzzle game and sequel to my LD48 entry, Drilbert.
- Dig Deep
- Collect Loot
- Get Out
If anyone wants to do a video recording of their playthrough, that would be awesome! Will happily do the same for your game.
Credits: https://github.com/wheybags/ld49/blob/master/credits.txt
Ratings
| Overall | 276th | 3.885⭐ | 28🧑⚖️ |
| Fun | 210th | 3.923⭐ | 28🧑⚖️ |
| Innovation | 299th | 3.731⭐ | 28🧑⚖️ |
| Theme | 806th | 3.481⭐ | 28🧑⚖️ |
| Graphics | 739th | 3.615⭐ | 28🧑⚖️ |
| Humor | 657th | 3.08⭐ | 27🧑⚖️ |
| Mood | 838th | 3.34⭐ | 27🧑⚖️ |
| Given | 31🗳️ | 33🗨️ |
The only thing I can add as feedback is a wish to make a volume slider for the music.
Back to your game: impressive implementation of “whole junks” fall as one piece done in the restricted time frame!!! It was fun playing. And a lot of levels for a jam.
I especially liked the character animation when it's positioned sideways, really cute!
Edit: forgot to say, I was really impressed with the undo functionality, very nice touch. I'm curious, how did you implement it?
The controls for going around corners felt a little clunky at times, but overall it was a good experience.
The puzzles were challenging enough to be fun, and leveredged the mechanics well. Really nice job!
For the undo functionality: the game is written in lua, and the state of the whole map is just one big table of tile ids. Instead of actually modifying that table when you make a move, I just push your move into a list of moves, and then whenever I need the "current" version of the world, I call an "evaluate" function that copies the world table and applies the moves to it, but I never store this evaluated version. Then when I want to undo a move, it's as easy as just removing the last entry from the moves list.
^The above is the basic theory of it, and I have used this implementation straight before, but this time I ran into an extra problem. To make the blocks fall, I had to run an algorithm to segment the map into tile zones, and that needed to run several times each move. As your move list got bigger and bigger, that meant the game got slower and slower because it was doing more segmentations each frame. So in the end, I added a simple hack where I turned the "evaluate" function into a recursive function instead of a normal loop. When I had it set up that way, it was easy to add a cache to memoise the evaluation. Since the state of the world depends only on the move list and level index, I can have a cache keyed by move list. Each time the level changes I just clear the cache completely. It does mean that if you just go back and forth forever your memory usage will grow forever, but in reality the size of a full game state copy is tiny, and also it's a jam game so it's fiiiiine :p
You can see the implementation [here](https://github.com/wheybags/ld49/blob/734833d8e51f64e267b5360361f3ecdef1668e0e/game_state.lua#L130), it's a bit messy because, well, jam game, but maybe it will be helpful anyway :p
My only complaint, and it is a small one, is that I didn't like the drill sfx, but I quickly forgot about that while playing due to the brilliant puzzle design and interesting movement mechanics. The other choices of sounds and music were spot on for the mood of the game, too.
Thanks for sharing!!!
Is the "2X WIN" screen solvable?
Anyway good job!
I'm reminded of https://ldjam.com/events/ludum-dare/48/keke-in-the-caves-of-peril from last LD; did you play it? Similar and yet very different because in this game you can move upwards freely
I like the way that the end screen is playable and makes bonus levels available. This is just a fun way to implement bonus levels.
The way the game teaches the player mechanics is really well done. In particular, the second screen, which teaches us that the flag is the goal and that coin collection is mandatory, is pretty brilliant in how it teaches the player.
I also think that the way the interlocking falling parts work is super cool. That last bonus level in particular I thought really made good use of the physics engine. I admit I would kind of like to be able to see the blocks falling with continuous motion, rather than the tile-based physics, but that is a tall order. (And, I wonder if having continuous motion in the game would make it harder to understand some of the puzzle mechanics...?)
But, either way, this game is just a really solid puzzle game. I think it's one of the best LD49 games I've played.