Intro[edit | edit source]
What's a Recurrent Complex Maze?[edit | edit source]
Imagine a maze like lego: You have smaller building blocks - e.g. corridors, rooms and exits, which are randomly connected to form a complete maze.
Each of those building blocks is a separate structure in Recurrent Complex, which contains a Maze Generation Info. This info tells the mod how exactly the component should be included in what kind of maze.This makes it easy to expand upon existing mazes as well as create new ones.
In the end, a Maze Generation Script is added to a structure, which tells the mod that a maze should generate here, and in what confines. By defining rooms, exits and connection strategies, it makes it possible to integrate it into a structure.
Decide on a certain style[edit | edit source]
Your maze needs a base room size (don't worry, you can have bigger rooms, too - this is the basic tile size all rooms are based upon), a certain style (like where exits are located and how they connect), and also certain dimensions (is your maze 2D? 3D?).
For example: You want room size 3x5x3 - then all the rooms in your maze are either 3x5x3 or 6x5x3 or 3x10x6... You get the idea.
Regarding the style - you can decide that all floors are made of stone, the walls of sandstone and the rooms connect by having a hole in the wall. Woohoo.
Normally it's easier to start with 2D mazes (try a hedgemaze!) to get a feel for how it works.
Step 1: Build the components[edit | edit source]
A maze consists of a lot of structures generated next to each other - they're called components. If you want to spare a lot of work, make sure as many components as possible are marked as 'rotatable' (and actually are rotatable...), so the structures can face any direction for the maze.
To make sure the maze gets no random holes, you need components that generate in the maze. Here's what you might want to add for a basic 2D maze: Dead End (1 exit), Corridor (2 exits opposite to each other), Turn (2 exits next to each other), 3-way (3 exits), and Crossing (4 exits).
It is recommended that you composite these components into just one path component (to more easily handle it later). This is done with structure variables to decide which entrances to open (in the structure edit GUI), spawn scripts (to actually open/close exits dynamically), and conditional maze path connectors (to handle the changing logic of the component). You can best examine this by /#import-ing and /#edit-ing a complete component (e.g. StoneMazePath or MesoMazePath). If you want to have a quick start, it is recommended to just copy one of these structures for your maze and edit it later.
Note that they are not technically all required - your maze will generate even with just one component (as long as it's rotatable). However, if you have all of them, mazes will generate a lot more reliably.
After each component is done, edit the Maze Generation Info in the Structure Configuration GUI. Note that each of the components mentioned needs an area of (0, 0, 0) to (0, 0, 0) and the exits configured to work correctly.
Step 2: Make the containing maze structure[edit | edit source]
By now, you have to decide on the maze's exact dimensions - how many rooms are placed next to each other on the X-Axis, Y-Axis, and Z-Axis. This works like building a normal structure, just that you have a huge hole in the middle. Be sure to count the blocks in the center and mark off the bounds of the maze.
After you're content, place the Maze Generator in the lowest corner of the maze area. (-X, -Y, -Z) - You can also displace it by using the 'maze shift' attributes. Right click it to edit the configuration.
It's usually advisable to fill the whole of the maze area with negative space, to give the maze components the option to keep existing terrain.
Step 3: Test,Test,Test.[edit | edit source]
Export the structure, and simply generate it. If you have not made any mistakes, it should work flawlessly. Otherwise, go back and adjust the correct steps.
Step 4: Add more special rooms[edit | edit source]
Now you can go wild with what you really want your maze to contain. Feel free to go crazy with big rooms, hidden exits, and whatever else.
You can also make the structure bigger than specifically allowed to make it 'intersect' with the neighbors (always keep the same expansion to each side - it will center itself automatically). This can be dangerous, but also quite powerful if done right - you could make the door show what room you are entering, for example.
From this point on, you are completely free. You can edit any of these steps to adjust it. You can also add more than one maze to a structure, or even connect them with pre-defined exits for interesting setups.