Important: This documentation covers Yarn 1 (Classic).
For Yarn 2+ docs and migration guide, see yarnpkg.com.

Package detail

gen-biome

neki-dev7.1kMIT3.0.5TypeScript support: included

Procedural generation of 2D maps with distinct biomes

map, generation, biome, tilemap, perlin, procedural, terrain, 2d

readme

Gen Biome

Version Small size Build

Procedural generation of 2D maps with distinct biomes

.

Demo

Documentation

.

Install

npm i gen-biome

.

Generator

Create world generator

new WorldGenerator<T>(config: WorldConfig)

[config] - World config

Prop Description Default Range
width Map width |
height Map height |
frequencyChange Frequency of biomes change 0.3 0.0 - 1.0
borderSmoothness Smoothness of biomes borders 0.5 0.0 - 1.0
heightRedistribution Redistribution of biomes height 1.0 0.5 - 1.5
heightAveraging Averaging of biomes height true
falloff Scale of falloff area 0.0

.

Biomes

Add biome

generator.addBiome(
  config: WorldBiomeConfig, 
  data: T,
): WorldBiome<T>

[config] - Biome config

Prop Description Default
lowerBound Lower biome bound 0.0
upperBound Upper biome bound 1.0

[data] - Biome data that will be stored in the world matrix

Get current biomes

generator.getBiomes(): WorldBiome<T>[]

Clear all biomes

generator.clearBiomes()

.

Generation

Generate world

generator.generate(
  params?: WorldGenerationParams,
): World<T>

[params] - Generation params (optional)

Prop Description Default
seed Generation seed (autogenerated)
seedSize Size of seed array 512
offsetX Generation offset X 0
offsetY Generation offset Y 0

.

World

Get matrix of biomes data

world.getMatrix(): T[][]

Each all positions

world.each(
  callback: (position: WorldPoint, data: T) => void,
): void

[callback] - Callback with position and biome stored data

Get biome data at position

world.getAt(
  position: WorldPoint,
): T | null

[position] - Position at matrix

Replace biome data at position

world.replaceAt(
  position: WorldPoint, 
  data: T,
): void

[position] - Position at matrix

[data] - New biome stored data

Get current world generation seed

world.seed: number[]

Get world width

world.width: number

Get world height

world.height: number

.

Example

const TILE_SIZE = 2;
const BIOMES = [
  { // WATER
    params: { lowerBound: 0.0, upperBound: 0.2 },
    data: { color: 'blue' },
  },
  { // GRASS
    params: { lowerBound: 0.2, upperBound: 0.7 },
    data: { color: 'green' },
  },
  { // MOUNTS
    params: { lowerBound: 0.7 },
    data: { color: 'gray' },
  },
];

const generator = new WorldGenerator({
  width: 100,
  height: 100,
});

for (const { params, data } of BIOMES) {
  generator.addBiome(params, data);
}

const world = generator.generate();

world.each((position, biome) => {
  const tileX = position.x * TILE_SIZE;
  const tileY = position.y * TILE_SIZE;

  ctx.fillStyle = biome.color;
  ctx.fillRect(tileX, tileY, TILE_SIZE, TILE_SIZE);
});