Skip to content

@web-engine-dev/procgen

Procedural generation utilities including noise functions, RNG, dungeon and terrain generation, and Wave Function Collapse.

Features

  • Noise Functions: Perlin, Simplex, Worley
  • Seeded RNG: Reproducible random generation
  • Dungeon Generation: BSP, cellular automata
  • Terrain Generation: Heightmaps, erosion
  • Wave Function Collapse: Pattern-based generation
  • Name Generators: Procedural names

Installation

bash
npm install @web-engine-dev/procgen
# or
pnpm add @web-engine-dev/procgen

Quick Start

typescript
import { SeededRandom, SimplexNoise, DungeonGenerator } from '@web-engine-dev/procgen';

// Seeded random
const rng = new SeededRandom(12345);
const value = rng.float(); // 0-1
const range = rng.range(1, 100); // 1-100
const item = rng.pick(array); // Random element

// Noise
const noise = new SimplexNoise(seed);
const height = noise.noise2D(x * 0.01, y * 0.01);

// Dungeon
const dungeon = new DungeonGenerator({
  width: 50,
  height: 50,
  minRoomSize: 5,
  maxRoomSize: 15,
});
const map = dungeon.generate(seed);

API Overview

Seeded Random

typescript
const rng = new SeededRandom(seed);

rng.float(); // 0 to 1
rng.range(min, max); // Integer range
rng.floatRange(a, b); // Float range
rng.bool(); // true/false
rng.pick(array); // Random element
rng.shuffle(array); // Shuffle in place
rng.weighted(items); // Weighted selection

Noise Functions

typescript
// Simplex noise
const simplex = new SimplexNoise(seed);
simplex.noise2D(x, y);
simplex.noise3D(x, y, z);

// Fractal noise
const fractal = new FractalNoise(simplex, {
  octaves: 6,
  persistence: 0.5,
  lacunarity: 2.0,
});

// Worley noise (cellular)
const worley = new WorleyNoise(seed);
worley.noise2D(x, y);

Dungeon Generation

typescript
// BSP dungeon
const bsp = new BSPDungeon({
  width: 100,
  height: 100,
  minRoomSize: 8,
  maxRoomSize: 20,
});

// Cellular automata caves
const caves = new CellularAutomata({
  width: 100,
  height: 100,
  fillPercent: 0.45,
  iterations: 5,
});

Wave Function Collapse

typescript
const wfc = new WaveFunctionCollapse({
  width: 20,
  height: 20,
  tiles: tileSet,
  rules: adjacencyRules,
});

const result = wfc.generate(seed);

Terrain Generation

typescript
const terrain = new TerrainGenerator({
  width: 256,
  height: 256,
  scale: 50,
  octaves: 6,
});

const heightmap = terrain.generate(seed);

// Apply erosion
terrain.erode(heightmap, { iterations: 50 });

Proprietary software. All rights reserved.