You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
nannal 1e34a0afc7 Added git ignore and agne added property "content" to tile 1 year ago
demo Initial Commit 1 year ago
lib Added git ignore and agne added property "content" to tile 1 year ago
test Initial Commit 1 year ago
.gitignore Added git ignore and agne added property "content" to tile 1 year ago
CHANGELOG.md Initial Commit 1 year ago
README.md Initial Commit 1 year ago
architecture-blueprint-svgrepo-com.png Initial Commit 1 year ago
package-lock.json Initial Commit 1 year ago
package.json Initial Commit 1 year ago
stryker.conf.js Initial Commit 1 year ago

README.md



Build Status npm version Dependency Status

Dungeoneer

Procedurally generate beautiful 2d dungeons for your game.
https://lucianbuzzo.github.io/dungeoneer



This module is a tool for generating random dungeons as a two dimensional array. It is largely based on the excellent work of Bob Nystrom and his game Hauberk, which you can read about here.

A demo of this module can be seen here https://lucianbuzzo.github.io/dungeoneer/

Installation

Install dungeoneer by running:

$ npm install --save dungeoneer

Usage

const dungeoneer = require('dungeoneer')

const dungeon = dungeoneer.build({
  width: 21,
  height: 21
})

The build method accepts width and height options that define the size of the dungeon, and will return a dungeon object. The smallest possible size for a dungeon is 5 x 5. Dungeons are always an odd size due to the way walls and floors are generated. If you supply even sized dimensions, they will be rounded up to the nearest odd number. The shape of the dungeon object is defined below:

type Tile = {
  // An object containing the tiles immediately surrounding this tile.
  nesw: {
    n?: Tile;
    ne?: Tile;
    e?: Tile;
    se?: Tile;
    s?: Tile;
    sw?: Tile;
    w?: Tile;
    nw?: Tile;
  };
  x: number;
  y: number;

  // 'floor' and 'door' are passable terrain and a wall is impassable terrain.
  type: 'wall' | 'floor' | 'door';
}

type Room = {
  height: number;
  width: number;
  x: number;
  y: number;
}

type Dungeon = {
  rooms: Room[];
  tiles: Array<Tile[]>;
  seed: string | number;
}

Seeding

A dungeon can be seeded using the seed option. A dungeon created with a seed and the same options can be repeatably created. Dungeons always return the seed they were created with.

const dungeoneer = require('dungeoneer')

const dungeon = dungeoneer.build({
  width: 21,
  height: 21,
  seed: 'foobarbaz'
})

License

The project is licensed under the MIT license.

The icon at the top of this file is provided by svgrepo.com and is licensed under Creative Commons BY 4.0.