A collection of maze generation programs
Go to file
Starbeamrainbowlabs a65bae20c6
fix bug where maze doesn't generate to the end of the area
2021-12-26 23:18:42 +00:00
blender [blender] glass jar physics 2021-08-13 01:26:53 +01:00
utils mazeseed: Update comment 2020-09-28 01:41:49 +01:00
.gitattributes Add blender file This was created by going lua → openscad → stl → blender 2020-04-29 22:35:38 +01:00
.gitignore Add svg export for 2d mazes 2020-09-27 01:37:10 +01:00
.luacheckrc Add .luacheckrc 2021-11-13 12:26:30 +00:00
LICENSE Initial commit 2020-04-29 12:36:41 +01:00
README.md Add argument to control the branching factor 2020-09-30 01:20:17 +01:00
main.lua [blender] glass jar physics 2021-08-13 01:26:53 +01:00
maze maze: use sh to be more portable 2020-09-13 00:41:57 +01:00
maze.lua fix bug where maze doesn't generate to the end of the area 2021-12-26 23:18:42 +00:00
maze3d.lua Add argument to control the branching factor 2020-09-30 01:20:17 +01:00
openscad.lua Add additional settings for openscad 2020-04-30 19:10:32 +01:00



A collection of maze generation programs

Ported back in 2015 (and since adapted) from an algorithm of my own design that was originally implemented in Python.

Now has a 3d mode!

Current blog posts about this project:

Some renders in Blender with cycles of the output of the 3D maze generator


System Requirements

  • Required
  • Optional
    • OpenSCAD: for creating STL files and viewing generated .scad files
    • Blender: a great tool for importing generated STL files and having some fun rendering them


Clone this repository:

git clone https://git.starbeamrainbowlabs.com/sbrl/multimaze.git
cd multimaze.lua


See the usage information for the program by calling main.lua like so:

lua main.lua help

Operating modes:

Mode Description
help Displays the help text
maze Generates 2D mazes and writes them to stdout
maze3d Generates 3D mazes and writes them in layers to stdout
maze3d_openscad Generates 3D mazes and writes an OpenSCAD file to the specified location

To render a 2D maze as ASCII, do this:

lua main.lua maze --width 25 --height 25
# Alternatively, in shorthand:
lua main.lua maze -w 25 -h 25

To render a 3D maze as a .STL file, do this:

# Generate the OpenSCAD file
lua main.lua maze3d_openscad -w 15 -h 15 -d 17 -f 15x15x17.scad
# Convert the OpenSCAD file to an STL
openscad -o 15x15x17.stl 15x15x17.scad

Users who have sh (Bash works too) installed can use the maze wrapper script instead:

./maze maze3d_openscad -w 15 -h 15 -d 17 -f 15x15x17.scad
./maze maze -w 25 -h 25


Make an (almost) seamless texture

./maze maze_svg --scale 40 -w 31 -h 31 -f maze.svg
inkscape -o maze.png maze.svg
convert maze.png -crop 1080x1080+80+80 extract.png

The formula here for the crop is:

  • width: w * scale - (scale * 4)
  • height: h * scale - (scale * 4)
  • x offset: scale * 2
  • y offset: scale * 2

(Horizontal line)

Remarks and Observations

Branching factor

Higher values reduce the number of attention switches the engine executes, leading to fewer branching paths in the resulting maze - this is implemented with a 1-in-N chance to shift the attention of the engine.

The value here that works best really depends on your maze. Larger mazes tend to benefit from higher branching factors than the default. 3D mazes tend to look better with slightly lower branching factors, but this is an area of ongoing observation (get in touch if you have anything to add here).


Contributions are very welcome - both issues and patches! Please mention in your pull request that you release your work under the MPL-2.0 (see below).

This guide looks good for how to create patch in git: How To Create and Apply Git Patch Files

If you find a bug, there are a number of different ways you can get in touch.

  1. By commenting on any of the blog posts (see links above)
  2. By getting in touch through any of the methods mentioned on my main website
  3. If you know me IRL, that works too

If this becomes a thing that people want to contribute to regularly, I will move it to GitHub to make that an easier process.

If you're feeling that way inclined, I have a Liberapay profile if you'd like to donate to say an extra thank you :-)


The contents of this repository is released under the Mozilla Public License 2.0. The full license text is included in the LICENSE file in this repository. Tldr legal have a great summary of the license if you're interested.