In my previous blog post, we had focused on how labyrinths are procedurally generated, and what type of constraints game design bestows upon us. Today, it’s time to look into how we determine the content of the rooms in the labyrinth, which we’ll call a “RoomPattern”.

4 directions, 15 combinations

As seen in the generation of labyrinths a room can potentially be connected to 4 other rooms, which gives us 15 potential configurations for RoomPattern. The RoomPatterns are created by the game designer. Each of them has a specific configuration. The game designer is going to pick which doors will be open in his RoomPattern. He can create a room that’s compatible with the 4 entrances or make a dead-end and thus only connect a single door. He’ll the design the rooms to work with the door confirguration he chooses.


Constraining Room Choices^95533C240B5ECA9D6E159F88D4013B0A16C9FA6A60190E3D1A^pimgpsh_fullsize_distr

When the system is going to pick the rooms to place in the labyrinth, it’s going to go get the rooms that are compatible with the current configuration.  By default, the system will get all the compatible room patterns, for example a RoomPattern with 4 entrances could be used in a configuration with 3 doors, 2 or even 1 door. This allows to efficiently recycle the rooms in order to boost the number of rooms and to avoid having to create massive amounts of RoomPatterns for each combination. However, it’s possible to constrain the choice of RoomPatterns, and only select those that have the exact number and location of doors as the configuration. In the same spirit, RoomPatterns created for a certain number of doors could be used in a configuration similar to their intended design by turning them to fit within a specific pattern. Sometimes the game designer doesn’t want to have the system pick his room pattern by spinning it, so we can put a constraint that prevents it from picking the room if it needs to be rotated to make fit.

Minimum and Maximum Level

As we’ve seen in the previous blog post on the subject of labyrinth generation, Subaeria has a security system. A kind of difficulty level, it’s going to increase as the player goes forward in the adventure. The labyrinths thus get harder, by their size and complexity, but mainly by the RoomPatterns that they contain, ever harder and richer in mechanics and Cleaners (the vengeful robots of Subaeria). The game designer thus has the possibility to pick what difficulty level his RoomPattern is in, and decide how that difficulty level will increase. Under no circumstances is the system going to manage that increase in difficulty of the rooms by itself, it will always be the job of the level designer. Whenever a labyrinth is generated the level of security is checked and the RoomPatterns are sorted depending on their own level of difficulty.


It is possible to create and use categories of RoomPatterns. This system is open to level designers and allows them to sort their RoomPatterns in order to fill up a labyrinth in a balanced manner. On one end the level designer is going to pick his categories (For example: Cleaners, Puzzle, Platform, etc…), and he is then going to attribute a category to each room pattern. Then, depending on the labyrinth, he’s going to be able to influence the probability of a certain category being selected for the generation of RoomPatterns. For example, he could choose to have 80% of room patterns be in the Cleaner category, 10% of Puzzle and 10% of Platform in order to create a rich and varied labyrinth depending on his needs.

After having taken a look at how we build labyrinths, then at how we populate the rooms within these labyrinths, in our next blog post we’ll explore further the content of the these rooms and the tools that aid in both level design and level art.

To find out more about Subaeria sign up for our mailing list here