117 procedural dungeon/terrain generation algorithms
moon add mizchi/terrainfn main {
let rng = @terrain/types.make_rng(42U)
// 2D Grid algorithm
let result = @terrain/bsp.generate(
{ width: 40, height: 20, min_room_size: 4, max_depth: 4 },
rng,
)
println(result.grid.to_ascii())
// Hex algorithm
let rng = @terrain/types.make_rng(42U)
let hex = @terrain/hex_maze.generate(
{ cols: 20, rows: 15, room_chance: 0.15 },
rng,
)
println(hex.grid.to_ascii())
// 3D multi-layer algorithm
let rng = @terrain/types.make_rng(42U)
let d3 = @terrain/multifloor_bsp.generate(
{ width: 40, height: 20, depth: 3, min_room_size: 4, stair_count: 3 },
rng,
)
// Access each layer
for z in 0..<d3.grid.depth {
println("Layer " + z.to_string())
println(d3.grid.to_ascii(z))
}
// Quarter View (isometric) algorithm
let rng = @terrain/types.make_rng(42U)
let iso = @terrain/iso_city.generate(
{ width: 40, height: 20, max_height: 8, building_density: 0.7, street_width: 2 },
rng,
)
println(iso.grid.to_ascii())
// Heights available via iso.grid.heights
}// Tile types
enum Tile { Floor; Wall; Door; LockedDoor; Key; Start; Goal; Corridor; Water; Empty }
// 2D grid (width x height)
struct Grid2D { width : Int; height : Int; cells : Array[Tile] }
// Hex grid (odd-r offset coordinates)
struct HexGrid { cols : Int; rows : Int; cells : Array[Tile]; orientation : Int }
// 3D multi-layer grid
struct Grid3D { width : Int; height : Int; depth : Int; layers : Array[Grid2D] }
// 2D grid with height data (for isometric rendering)
struct HeightGrid { width : Int; height : Int; cells : Array[Tile]; heights : Array[Int]; max_height : Int }
// Room descriptor
struct Room { x : Int; y : Int; w : Int; h : Int }
// Seeded RNG
struct RNG { .. }
fn make_rng(seed : UInt) -> RNG// Each package exports:
pub(all) struct XxxConfig { .. } // Config with defaults
pub(all) struct XxxResult { .. } // Result with grid + rooms
pub fn XxxConfig::default() -> XxxConfig
pub fn generate(config : XxxConfig, rng : @types.RNG) -> XxxResult{
"import": [
"mizchi/terrain/types",
"mizchi/terrain/bsp",
"mizchi/terrain/cellular"
]
}| # | Name | Package | Description |
|---|---|---|---|
| 0 | Maze (DFS) | maze | Recursive backtracker depth-first search |
| 1 | Eller's Maze | eller | Row-by-row generation with set merging |
| 2 | Kruskal's Maze | kruskal | Minimum spanning tree randomized maze |
| 3 | Binary Tree Maze | binary_tree | Two-direction bias with diagonal tendency |
| 4 | Sidewinder Maze | sidewinder | Horizontal runs with random vertical connections |
| 5 | Recursive Division | recursive_division | Recursive wall placement subdivision |
| 6 | Growing Tree | growing_tree | Tunable between DFS and Prim's via weight |
| 7 | Wilson's | wilson | Loop-erased random walk for uniform spanning tree |
| 8 | Aldous-Broder | aldous_broder | Random walk visiting every cell exactly once |
| 9 | Hunt and Kill | hunt_and_kill | Walk until stuck, then scan for unvisited neighbor |
| 10 | Pac-Man Maze | pacman | Bilaterally symmetric maze with central chamber |
| # | Name | Package | Description |
|---|---|---|---|
| 11 | BSP Tree | bsp | Binary space partition with rooms in leaves |
| 12 | Poisson Disk | poisson | Blue noise distributed room placement |
| 13 | Rooms and Mazes | rooms_and_mazes | Place rooms then fill gaps with maze corridors |
| 14 | Rogue Classic | rogue | Grid-based room layout inspired by original Rogue |
| 15 | Room Accretion | accretion | Grow dungeon by adding rooms one at a time |
| 16 | TinyKeep | tinykeep | Random rooms with physics-based separation |
| 17 | Feature Growing | feature_growing | Grow by attaching rooms and corridors to exits |
| 18 | BFS Room Expansion | bfs_rooms | Seed-based parallel flood fill room growing |
| 19 | Prefab Assembly | prefab | Place predefined room templates randomly |
| 20 | Gravity Collapse | gravity_collapse | Drop rooms from top, stack with gravity simulation |
| 21 | Tetromino Packing | tetromino | Pack tetris-shaped pieces into grid |
| # | Name | Package | Description |
|---|---|---|---|
| 22 | Cellular Automata | cellular | Conway-style birth/survival cave generation |
| 23 | Drunkard's Walk | drunkard | Random walker carving open space |
| 24 | Noise Caves | noise_caves | Value noise with octaves for smooth caves |
| 25 | DLA | dla | Diffusion-limited aggregation particle sticking |
| 26 | Marching Squares | marching_squares | Cellular automata with contour smoothing |
| 27 | Worm Tunnels | worm | Multiple directional worms carving passages |
| 28 | Erosion | erosion | Hydraulic erosion simulation on heightmap |
| 29 | Percolation | percolation | Random fill with connectivity phase transition |
| 30 | Ant Colony | ant_colony | Pheromone-guided ant swarm carving paths |
| 31 | Worley Noise | worley | Worley/cellular noise distance-based caves |
| 32 | Ridged Multifractal | ridged | Ridged multifractal noise with sharp ridges |
| 33 | Domain Warping | domain_warp | Noise with coordinate warping for organic shapes |
| 34 | Reaction-Diffusion | reaction_diffusion | Gray-Scott reaction-diffusion pattern formation |
| 35 | Slime Mold | slime_mold | Physarum-inspired slime mold agent simulation |
| 36 | Lightning | lightning | Lightning bolt branching path generation |
| # | Name | Package | Description |
|---|---|---|---|
| 37 | Graph Grammar | graph_grammar | Rule-based graph rewriting with locks and keys |
| 38 | Diablo | diablo | Linear spine with branching side paths and loops |
| 39 | Spelunky | spelunky | Grid cells with guaranteed solution path |
| 40 | Arena Chain | arena_chain | Large arenas connected by narrow corridors |
| 41 | Cyclic Dungeon | cyclic_dungeon | Circular connectivity with key-gate puzzles |
| 42 | Metroidvania | metroidvania | Multi-zone layout with ability-gated connections |
| 43 | Mission Graph | mission_graph | Mission-driven node graph with lock progression |
| 44 | Ring Dungeon | ring | Ring corridor with rooms and Dark Souls shortcuts |
| 45 | Binding of Isaac | isaac | Grid-based room layout inspired by Isaac |
| 46 | Dead Cells | dead_cells | Branching biome path layout inspired by Dead Cells |
| # | Name | Package | Description |
|---|---|---|---|
| 47 | Hilbert Curve | hilbert | Hilbert space-filling curve as corridor backbone |
| 48 | Gosper Curve | gosper | Flowsnake L-system curve on hex-like grid |
| 49 | Spiral | spiral | Archimedean spiral with rooms at intervals |
| 50 | Sierpinski Dungeon | sierpinski | Sierpinski carpet recursive subdivision |
| # | Name | Package | Description |
|---|---|---|---|
| 51 | Diamond-Square | diamond_square | Fractal heightmap with configurable roughness |
| 52 | Midpoint Displacement | midpoint_displacement | Multi-layer midpoint displacement terrain |
| 53 | Island/Archipelago | island | Circular islands connected by bridges |
| 54 | River/Watershed | river | Heightmap with hydraulic river carving |
| 55 | Crystal Growth | crystal | Axis-aligned crystal seed growth |
| # | Name | Package | Description |
|---|---|---|---|
| 56 | WFC | wfc | Wave Function Collapse tile solver |
| 57 | Superimposition | superimpose | Overlapping random shape stamps |
| 58 | Herringbone Wang Tiles | herringbone | Herringbone pattern tile placement |
| 59 | L-System | lsystem | Lindenmayer system string rewriting paths |
| 60 | Hex Grid | hex_grid | Hexagonal cell grid with corridor connections |
| 61 | City Block | city_block | Street grid with buildings and dead ends |
| 62 | Penrose Tiling | penrose | Penrose-inspired aperiodic tiling dungeon |
| # | Name | Package | Description |
|---|---|---|---|
| 63 | Voronoi Region | voronoi | Voronoi cell regions with edge corridors |
| 64 | Radial | radial | Concentric rings with spokes and gaps |
| 65 | Space Colonization | space_colonization | Attractor-based branching path growth |
| 66 | Parametric Tunnelers | tunneler | Multiple autonomous tunneling agents |
| 67 | Platformer Level | platformer | Side-scrolling level with platforms and ladders |
| 68 | Delaunay + Gabriel | delaunay | Delaunay triangulation with Gabriel graph pruning |
| # | Name | Package | Grid | Description |
|---|---|---|---|---|
| 69 | Hex Maze | hex_maze | HexGrid | DFS maze on hexagonal grid |
| 70 | Hex CA | hex_ca | HexGrid | Cellular automata on hex grid |
| 71 | Hex Voronoi | hex_voronoi | HexGrid | Voronoi regions on hex grid |
| 72 | Hex WFC | hex_wfc | HexGrid | Wave Function Collapse on hex grid |
| 73 | Hex Spiral | hex_spiral | HexGrid | Spiral path on hex grid |
| 74 | Hex Territory | hex_territory | HexGrid | Faction territory expansion on hex grid |
| 75 | Hex River Delta | hex_river_delta | HexGrid | Branching river channels from center |
| 76 | Hex Fortress | hex_fortress | HexGrid | Concentric hex walls with gates and towers |
| 77 | Hex Biome | hex_biome | HexGrid | Voronoi biome regions with roads |
| 78 | Hex Snowflake | hex_snowflake | HexGrid | Fractal snowflake crystal pattern |
| # | Name | Package | Grid | Description |
|---|---|---|---|---|
| 79 | Multi-Floor BSP | multifloor_bsp | Grid3D | BSP rooms on multiple floors with stairs |
| 80 | 3D Drunkard | drunkard_3d | Grid3D | Random walk across layers |
| 81 | 3D CA | cellular_3d | Grid3D | 3D cellular automata caves |
| 82 | Vertical Shaft | vertical_shaft | Grid3D | Vertical shafts connecting horizontal rooms |
| 83 | Layered Caves | layered_caves | Grid3D | Connected cave systems across layers |
| 84 | 3D Maze | maze_3d | Grid3D | Perfect maze with vertical passages |
| 85 | Underwater Base | underwater_base | Grid3D | Pressurized chambers with airlocks |
| 86 | Tree Roots | tree_roots | Grid3D | Organic branching roots descending through layers |
| 87 | Ant Nest 3D | ant_nest_3d | Grid3D | Ant colony with tunnels and chambers |
| 88 | Space Station | space_station | Grid3D | Ring habitat with central hub and spokes |
| # | Name | Package | Grid | Description |
|---|---|---|---|---|
| 89 | Isometric City | iso_city | HeightGrid | City blocks with variable building heights |
| 90 | Cliff Dungeon | cliff_dungeon | HeightGrid | Rooms carved into cliff faces |
| 91 | Layered Plateau | layered_plateau | HeightGrid | Eroded plateau terraces |
| 92 | Castle Generator | castle_gen | HeightGrid | Castle with towers, walls, and courtyards |
| 93 | Terraced Mines | terraced_mines | HeightGrid | Open-pit mine with ore veins |
| 94 | Floating Islands | floating_islands | HeightGrid | Sky islands connected by bridges |
| 95 | Ziggurat Temple | ziggurat | HeightGrid | Stepped pyramid with inner chambers |
| 96 | Canyon Ravine | canyon | HeightGrid | Deep canyon with bridges and caves |
| 97 | Harbor Town | harbor_town | HeightGrid | Coastal town with waterfront buildings |
| 98 | Tower Dungeon | tower_dungeon | HeightGrid | Vertical tower with stacked floors |
| 99 | Volcanic Crater | volcanic_crater | HeightGrid | Volcanic crater with lava vents |
| 100 | Amphitheater | amphitheater | HeightGrid | Tiered seating around central arena |
| 101 | Aqueduct | aqueduct | HeightGrid | Roman aqueduct with arched supports |
| 102 | Treehouse Village | treehouse | HeightGrid | Tree platforms connected by bridges |
| 103 | Mineshaft Elevator | mineshaft | HeightGrid | Central shaft with radiating tunnels |
| 104 | Glacier | glacier | HeightGrid | Ice field with crevasses and caves |
| # | Name | Package | Description |
|---|---|---|---|
| 105 | Continent | continent | Ocean, beach, forest, mountain concentric rings |
| 106 | Dungeon Ecosystem | ecosystem | Cave to underground river to lava biome transition |
| 107 | Seasonal Forest | seasonal_forest | North-to-south tree density gradient |
| 108 | Swamp Labyrinth | swamp | Intertwined water channels and land paths |
| 109 | Desert Oasis | desert_oasis | Desert with scattered oases and caravan routes |
| 110 | Tundra Outpost | tundra | Frozen outposts connected by underground tunnels |
| # | Name | Package | Description |
|---|---|---|---|
| 111 | Sokoban Layout | sokoban | Push-block puzzle grid rooms |
| 112 | One-Way Gate | oneway_gate | Directed tree dungeon with one-way doors |
| 113 | Teleporter Maze | teleporter | Disconnected room clusters linked by teleporters |
| 114 | Lock Cascade | lock_cascade | Deep key-lock chain progression |
| 115 | Gravity Puzzle | gravity_puzzle | Split gravity zones with inverted platforms |
| 116 | Mirror Dungeon | mirror_dungeon | Symmetric dungeon with corrupted mirror half |
# Install MoonBit
curl -fsSL https://cli.moonbitlang.com/install/unix.sh | bash
# Check
moon check --deny-warn --target js
# Test
moon test --target js
# Build web playground
moon build --target js
# Serve locally
python3 -m http.server 8080
# Open http://localhost:8080117 procedural dungeon/terrain generation algorithms