Skeletal Dance Party 💀 Procedural Level Generation

Here is a little article describing how levels are generated in Skeletal Dance Party. It is released for #notGDC 2019, the game development non-conference for everyone.





Skeletal Dance Party is a game about a necromancer hosting a dance party for her skeletons. It is a physically based dungeon crawler where everyone is dancing. And every dungeon crawler needs a dungeon, this is how I created it. First I stated a number of requirements for such a system.

Requirements



I want it to be easy to design new levels. I do not have a level design department and want the game to be developed in less than one year.

The levels should be unique and look pretty, you should not encounter the same level all the time and be filled with cool content.

The levels should have progression, weak enemies should spawn near start of level and hard enemies should spawn at end of level.

I need to be able to put story elements in the levels so I can tie story to game play.

Different solutions

In order to save time I decided to buy a system for generating the levels and not build my own. I investigated two Unity assets for this DunGen and Dungeon Architect. I choose to used DunGen because that made adding story elements and progression to the level really easy. DunGen builds a dungeon with a start and end, and you can specify what special rooms to encounter on the way. Dungeon Architect builds a dungeon but I could not figure out how to create a level with start and end.

Implementation



In DunGen you specify different room prefabs and how they can connect. You can also make some rules for where the rooms can spawn. I added two special kinds of markers in the rooms; potential spawn points for items and enemies. Each level consists of the data structure DunGen uses to describe the generation of the level and a Scenario ScriptableObject that describes level's name, description, metadata and what kinds of enemies and items that are allowed to spawn on it. This makes that creating new levels are really easy, just specify how long the level should be, what the player should encounter and the system will generate it.





Algorithm

The algorithms that runs every time a level is started in Skeletal Dance Party is thus the following.

DunGen places rooms randomly until level satisfies the required length. Inside the rooms props are randomized, this can be things like where lights and barrels are placed. Using Unity's Runtime NavMesh Building create a NavMesh covering the level. Spawn items and enemies at spawn points. Items and enemies spawned more deeper into the level will have a higher level.





That was all, I hope you enjoyed the tiny article. If you found it interesting you can follow me on @JesperTingvall or @CatalopeGames.

