Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/krutoo/rglk
Simple library for development roguelike games
https://github.com/krutoo/rglk
dungeon gamedev helper javascript js pathfinder prng roguelike
Last synced: 2 months ago
JSON representation
Simple library for development roguelike games
- Host: GitHub
- URL: https://github.com/krutoo/rglk
- Owner: krutoo
- License: mit
- Created: 2017-05-11T13:29:32.000Z (over 7 years ago)
- Default Branch: master
- Last Pushed: 2022-05-02T16:33:07.000Z (over 2 years ago)
- Last Synced: 2024-10-06T19:35:11.515Z (3 months ago)
- Topics: dungeon, gamedev, helper, javascript, js, pathfinder, prng, roguelike
- Language: TypeScript
- Homepage: https://krutoo.github.io/rglk/
- Size: 704 KB
- Stars: 9
- Watchers: 3
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: readme.md
- License: LICENSE
Awesome Lists containing this project
README
# ⚔️ rglk.js 🐉
Simple library for development roguelike games, designed for training purposes.
Inspired by [rot.js](http://ondras.github.io/rot.js/hp/).## Using
In Node.js use this command:
```bash
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.
```javascript
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.
```javascript
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\***.
```javascript
import { createPathfinder } from 'rglk';const findPath = createPathfinder((x, y) => {
// should return true if tile is can be visited
});// returns Array of points
findPath(x1, y1, x2, y2);
```### createPRNG 💾
`createPRNG` (Pseudo Random Number Generator) allows you to get random numbers based on the seed.
```javascript
import { createPRNG } from 'rglk';// two generators with same seed
const first = createPRNG(123);
const second = createPRNG(123);first() === second(); // true
```