0.1.3 • Published 4 years ago

amazer v0.1.3

Weekly downloads
6
License
MIT
Repository
github
Last release
4 years ago

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

AlgorithmCharacteristicsConfiguration
RecursiveBacktrackerGenerates dense, perfect areas with low branching factor and many long corridors./
RandomizedPrimGenerates dense, perfect areas with high branching factor and many deadends that are easy to solve./
RandomizedKruskalGenerates dense, perfect areas with high branching factor and many deadends that are easy to solve./
NystromGenerates dense, perfect areas with rooms. Uses RecursiveBacktracker to fill the space between rooms.Minimum room sizeMaximum room sizeRoom placement attempts

Built-In Area Modifiers

ModifierEffectConfiguration
EmmureSurrounds an area with a solid wall. May increase the areas size./
BreakPassagesReplaces 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
RemoveDeadendsRemoves a targeted amount of deadends (tiles with a single walkable neighbour), replacing them with wall tiles.Amount of deadends to remove