Marathon Jam - April 2022

That Abysmal Place is a 2D horror roguelite currently very early in development. The following is a devlog to show the progress made during the r/SoloDevelopment Marathon Jam, which ran from 19th March to 24th April 2022.

The jam goals

The main goal of the jam was to complete the procedural level generation functionality which would form the basis of most of the game's levels. While the basic level generation was working, it was extremely rough and had a major bug which meant that some levels could not be fully navigated.

The basic level generation before the jam

Additionally, the level generation blueprint looked like this:

Here be dragons

The basics of the level generation process is as follows:

  1. Pick a room blueprint at random, based on certain criteria (e.g. if it's on the left side of the row, it needs to have a right connecting point). A single room blueprint consists of the room tilemap, player/enemy/item spawn points, and other objects that may include platforms, water, decorations etc.
  2. Spawn the room blueprint into the level, "carve" the room tilemap out of the background tilemap, the remove the room tilemap entirely. The background tilemap is essentially a large filled tilemap that forms the geometry of the level.
  3. Continue spawning rooms in this manner until a single row of rooms is completed. If the rows reach the edge of a background tilemap, spawn another one in.
  4. Add the other rows in the same manner.
  5. Generated "vertical" sections to connect the rows together.

In order to get the basic functionality into a state where a demo could be released, 5 sub-goals were created:

  1. Refactor and fix the level generation.
  2. Complete enough rooms to allow for a basic level to be generated.
  3. Dynamically spawn ropes for vertical travel.
  4. Randomly spawn enemies.
  5. Randomly spawn items.

The progress

The first step was to tidy up the level generation into something much more manageable:

Much cleaner...

Next, the major bug that prevented levels from being navigated needed resolving. It turned out the "fix" was easier than expected...

Still not sure exactly how this worked, but it's best not to think about it...

Spawning creatures and items

Of course, empty levels can only be interesting for so long. The next step was to spawn a random number of creatures and items into the level for the player to encounter. This was set up so that higher levels will spawn more items, but also more (and increasingly dangerous) creatures.

Ropes were also spawned at the appropriate vertical connecting points, to allow the player to descend further into the level. It turns out that, due to the way the ropes are built, spawning that many into a single level can be very expensive for performance. As such they are due to be reworked in the future.

Beware what lurks in the darkness

Building the rooms

The largest and most time-consuming step was to complete enough rooms to allow for a full level to be generated. This included adding backgrounds (and ensuring there were no gaps), decorations, environmental hazards, and triggers.

A "trap" trigger which causes creatures to spawn in via portals

Finishing off

Finally, in order to get the functionality into a somewhat playable demo, a few additional features were added:

  • Added entry and exit points to the levels.
  • Spawn a "key" item that is required before the level can be exited.
  • Setup three demo levels of increasing size, complexity and difficulty.
  • Ensure the player's inventory and basic stats carry over between levels.
  • Added a basic intro and outro screen.

And so a playable, albeit somewhat buggy and rough demo was completed. Over the coming weeks we will be working to fix any bugs, performance issues and level generation issues, but for now we hope you enjoy the update!

Of course, there may have been certain other things which have been included in this release... however that is for you to discover yourself.

Get That Abysmal Place

Download NowName your own price

Leave a comment

Log in with to leave a comment.