@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/procgenQuick 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 selectionNoise 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 });