0.1.3 • Published 5 years ago
amazer v0.1.3
Amazer
Simple but easily extensible library to generate mazes, written in TypeScript.
Installation
npm i amazer
Usage
Simple Example
import amazer, { Area, RandomizedPrim, Emmure } from "amazer";
const _amazer = amazer().withSize({width: 15, height: 15})
.using(RandomizedPrim)
.andModifier(Emmure)
.build();
const area: Area = _amazer.generate();
Results in mazes like this:
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ # # # # # # # # # # # # # # # # # ┃
┃ # # # # # ┃
┃ # # # # # # # # # # # # # ┃
┃ # # # # # # ┃
┃ # # # # # # # # # # # # ┃
┃ # # # # # # # ┃
┃ # # # # # # # # # # # ┃
┃ # # # # # # ┃
┃ # # # # # # # # # # # # ┃
┃ # # # # # ┃
┃ # # # # # # # # # # # # # ┃
┃ # # # # # # # ┃
┃ # # # # # # # # # # # ┃
┃ # # # # # # # ┃
┃ # # # # # # # # # # # ┃
┃ # # ┃
┃ # # # # # # # # # # # # # # # # # ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
Complex Example
import amazer, { Area, Nystrom, Emmure, BreakPassages, RemoveDeadends } from "amazer";
const _amazer = amazer().withSize({width: 30, height: 30})
.using(Nystrom, {
minRoomSize: {width: 5, height: 5},
maxRoomSize: {width: 10, height: 10},
roomPlacementAttempts: 50
})
.andModifier(Emmure)
.andModifier(BreakPassages, {
amount: 100,
minimumShortcutDistance: 50
})
.andModifier(RemoveDeadends, {deadendsToRemove: 0.4})
.build();
const area: Area = _amazer.generate();
Results in mazes like this:
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # ┃
┃ # # # # # # # # # ┃
┃ # # # # # # # # # # # # # # # # # # # # # ┃
┃ # # # # # # # # # ┃
┃ # # # # # # # # # # # # # # # # # # # ┃
┃ # # # # # # # ┃
┃ # # # # # # # # # # # # # ┃
┃ # # # # # # # # ┃
┃ # # # # # # # # # # ┃
┃ # # # # # # # # # # ┃
┃ # # # # # # # # # # # # # # # # # # # # # # ┃
┃ # # # # # # ┃
┃ # # # # # # # # # # # # # ┃
┃ # # # # # # # ┃
┃ # # # # # # # # # # # # # # # # # ┃
┃ # # # # # # # # ┃
┃ # # # # # # # # # # # # # # # # # ┃
┃ # # # # # # # # ┃
┃ # # # # # # # # # # # # # # # # # # # # # # # # # ┃
┃ # # # # # # # ┃
┃ # # # # # # # # # # # # # # # # # # ┃
┃ # # # # # # # # ┃
┃ # # # # # # # # # # ┃
┃ # # # # # ┃
┃ # # # # # ┃
┃ # # # # # # ┃
┃ # # # # # # ┃
┃ # # # # # # ┃
┃ # # # # # # # # # # # # # # # # # # # # # # # # # # # # ┃
┃ # # # # ┃
┃ # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
Built-In Generator Algorithms
Algorithm | Characteristics | Configuration |
---|---|---|
RecursiveBacktracker | Generates dense, perfect areas with low branching factor and many long corridors. | / |
RandomizedPrim | Generates dense, perfect areas with high branching factor and many deadends that are easy to solve. | / |
RandomizedKruskal | Generates dense, perfect areas with high branching factor and many deadends that are easy to solve. | / |
Nystrom | Generates dense, perfect areas with rooms. Uses RecursiveBacktracker to fill the space between rooms. | Minimum room sizeMaximum room sizeRoom placement attempts |
Built-In Area Modifiers
Modifier | Effect | Configuration |
---|---|---|
Emmure | Surrounds an area with a solid wall. May increase the areas size. | / |
BreakPassages | Replaces random wall tiles that have exactly 2 floor tiles as neighbours with floor tiles. The path length between the 2 floor tiles must be greater equals than a mininum distance. | Amount of walls to breakMinimum shortcut distance |
RemoveDeadends | Removes a targeted amount of deadends (tiles with a single walkable neighbour), replacing them with wall tiles. | Amount of deadends to remove |