Ludum Dare 50, my fifth Ludum Dare! I took a new approach for this one, I slept both nights!

For this one I created “Last Breathe” which you can play here!

Last Breath Title

The GOOD 👍

Sleep!

I slept Friday and Saturday night for this Ludum Dare. About 16 hours of sleep across the two. That means my 48 hours went to 32 hours! Some advantages I felt from this was that I was able to stay creative all the way to the end of the competition. There wasn’t a point where my mind went blank and didn’t know what to work on next. I felt creative all the way to the final minutes.

A color palette

I used a color palette for Last Breathe. This is the first game I’ve ever done this for, and I really liked how it turned out. I did add a single red to the palette for the bomb, but otherwise stuck to the colors I had. The game art really meshed well at the end as a result, and I was extremely happy with how the colors looked.

Last Breath Palette

Water system

The water system I built came out very good. While it needed some more optimziation, it worked well enough for the final game. I was also able to package this and release it as a standalone Godot plugin afterwards, which was fun to do! You can check it out here!

WaterMap example

Cave generation

The cave procedural generation worked very well. The cave names were well received by players, and the cave geometry was overall fun and consistent. The prefabs placed themselves well across the map, and the system was easy to add to.

Audio

I didn’t include background music in this game because I wanted the feel of an empty cave to really set in on players. Instead I added some cave ambience, which looped very nicely. I also spent a lot of time on dynamic sound effects. From water flowing sounds as water spawns, to the explosion of the bomb, to the change in sounds when submerged in water. I wanted the audio to really connect to the world, and not feel layered on top. This worked really nicely and helped the game feel much more polished.

The BAD 👎

Sleep?

Though I reaped the rewards of sleep by having a clear mind while I was working, I still lost 16 hours of time for development. The time I normally spent on Sunday adding content to my submission, was lost to sleep. This led to the game having a number of important “content filler” items being cut.

Audio bugs in HTML export

After submission, I realized there were serious issues with the audio in the HTML export. Due to some implementation details of Web Assembly in Firefox, the main thread can be locked for audio playing. This led to audio cracking and extreme delay. This was a horrible game experience, and as such I had to add a note that the game was best played in Chrome or Desktop.

Game didn’t have enough content

The game ended up feeling a bit barren. I wanted to add a lot of hints across the world that would lead to various prefabs, but ended up running out of time. I did get a decent number of prefabs in place, but they weren’t interesting enough to keep the player exploring.

Additionally I wanted to add item pickups across the world. Limited use items like drills, torches, or glowsticks. Unfortunately I ran out of time to add these, and I think it really hurt the replayability and exploration incentive for players.

Some other cut items from the game:

  • Torches that give out light but go out when submerged
  • Constantly rising water from the bottom of the map
  • Autotile system to improve the cave tile look
  • Full dynamic shadows/lighting
  • Rideable minecarts
  • Lava spawns with physics similar to the water
  • Harpoon rope to ascend more easiliy

Leaderboard template needs work

I used the leaderboard template I had used in my previous games. However it had a few compatibility issues when I went to use it, and it ended up taking a little over an hour to fully implement. This wasn’t a huge deal, but it ate into the limited time I already had on Sunday.

One of the things I normally do in my game entries, is clear up the default Godot menu buttons and polish the menus. For this submission I ran out of time, and had to rush the menu. As a result I had default buttons all over the game and the tutorial left much to be desired. In the future I will plan for more menu creation time so that I can

Seed system didn’t work

I spent a lot of time trying to centralize the RNG system in the game. My plan was to allow players to play eachother’s caves through the leaderboard by clicking on their entry. Unfortunately I found that the approach I used was not generating perfectly replicated caves, and as a result I had to disable the feature right before release. You can see the button disabled on the leaderboard.

LD50 Leaderboard seed button

Drowning wasn’t enough of a threat

Overall the water was not enough of a threat, and needed to spawn more frequently. Due to optimization issues I had to limit how much water was calculating at once. To solve for this, I thought about adding a bottom water level that rose at a constant rate. Unfortunately this idea came too late on Sunday and I wasn’t able to add it to the game before submission.

Going down was easy but going up was too hard

I chose to not allow players to mine upwards. The initial reason for this was to avoid them mining out small air pockers when underwater. But as I played more, I liked the challenge of trying to ascend as water slowly rose. Unfortunately players just ended up going downards more than anything, and the cave was not deep enough to support that. Players made it to the bottom edge of the cave much too often, and it broke immersion. The cave should have been narrower and deeper to help solve for this.

Final thoughts

Sleeping was a good choice, and I will continue taking that approach in the future. While I wanted this game to really focus on exploration, I ended up not spending enough time on interesting locations. As a result the game had a great foundation, but felt uninteresting after just a few minutes.

Here were the final results!

LD50 Results