Skip to content
/ rglk Public

Simple library for development roguelike games

License

Notifications You must be signed in to change notification settings

krutoo/rglk

Repository files navigation

⚔️ rglk.js 🐉

Simple library for development roguelike games, designed for training purposes. Inspired by rot.js.

Using

In Node.js use this command:

npm install --save rglk

Features

rglk allows to build simple 2d dungeons, define field of view, search path between two points and generates pseudo random numbers.

Dungeon 🏗️

Object of class Dungeon can generate a random two-dimensional map consisting of walls and floors. You can decide the size of rooms, rooms amount and length of corridors between rooms. Dungeon map can be restored by seed.

import { Dungeon } from 'rglk';

// create a new generated dungeon
const dungeon = new Dungeon({
  roomsAmount: 64,
  roomMinSize: 5,
  roomMaxSize: 11,
  corridorMinLength: 1,
  corridorMaxLength: 10,
  seed: 12345,
});

// each call rebuilds dungeon
dungeon.generate();

// process each tile
dungeon.forEachTile((x, y, isFloor) => {
  // ...draw wall or floor
});

// check tile type (returns boolean)
dungeon.isWall(x, y);
dungeon.isFloor(x, y);

createExplorer 👁️

createExplorer returns function that allows to define 2d FOV based on raycasting algorytm.

import { createExplorer } from 'rglk';

const explore = createExplorer((x, y) => {
  // should return boolean depends on tile is transparent
});

// get array of visible tile positions
const fov = explore(centerX, centerY, radius, (x, y) => {
  // this callback will be executed if tile is visible
});

createPathfinder 🏃

createPathfinder returns function which works based on an algorithm A*.

import { createPathfinder } from 'rglk';

const findPath = createPathfinder((x, y) => {
  // should return true if tile is can be visited
});

// returns Array of points
const points = findPath(x1, y1, x2, y2);

createPRNG 💾

createPRNG (Pseudo Random Number Generator) allows you to get random numbers based on the seed.

import { createPRNG } from 'rglk';

// two generators with same seed
const first = createPRNG(123);
const second = createPRNG(123);

first() === second(); // true