@reldens/tile-map-generator
v0.31.0
Published
Reldens - Tile Map Generator
Maintainers
Readme
Reldens - Tile Map Generator
A procedural tile map generation package for creating random maps with pre-defined elements, optimized for Tiled Map Editor and Reldens/Phaser game development.
Need some specific feature?
Request a feature here: https://www.reldens.com/features-request
Features
- Procedural map generation with customizable parameters
- Tiled Map Editor compatible JSON output
- A* pathfinding integration for path connectivity validation
- Multiple generation modes:
- Object-based generation (individual element files)
- Composite-based generation (single composite map)
- Associated maps generation (multi-floor dungeons)
- Element placement with free space constraints
- Automatic path generation connecting map elements
- Map layer merging and optimization
- Support for multi-floor dungeons with stairs/change-points
- Ground tile variations and path border tiles
- Invisible spots for spawn points and special areas
- Map validation and connectivity checking
Installation
npm install @reldens/tile-map-generatorUsage
Basic Example - Object-based Generation
const { LayerElementsObjectLoader } = require('@reldens/tile-map-generator');
const { RandomMapGenerator } = require('@reldens/tile-map-generator');
async function generateMap() {
let loader = new LayerElementsObjectLoader({
rootFolder: __dirname,
mapDataFile: 'examples/layer-elements-object/map-data.json'
});
await loader.load();
let generator = new RandomMapGenerator(loader.mapData);
let generatedMap = await generator.generate();
console.log('Map generated:', generator.mapFileFullPath);
}
generateMap();Composite-based Generation
const { MultipleByLoaderGenerator } = require('@reldens/tile-map-generator');
async function generateMultipleMaps() {
let generator = new MultipleByLoaderGenerator({
loaderData: {
rootFolder: __dirname,
mapDataFile: 'examples/layer-elements-composite/map-composite-data.json'
}
});
await generator.generate();
console.log('Multiple maps generated');
}
generateMultipleMaps();Associated Maps Generation (Multi-floor Dungeons)
const { MultipleWithAssociationsByLoaderGenerator } = require('@reldens/tile-map-generator');
async function generateAssociatedMaps() {
let generator = new MultipleWithAssociationsByLoaderGenerator({
loaderData: {
rootFolder: __dirname,
mapDataFile: 'examples/layer-elements-composite/map-composite-data-with-associations.json'
}
});
await generator.generate();
console.log('Associated maps generated with stairs and connections');
}
generateAssociatedMaps();Configuration
Map Data Schema (Object-based)
{
"tileSize": 32,
"tileSheetPath": "assets/tileset.png",
"tileSheetName": "tileset.png",
"imageHeight": 512,
"imageWidth": 512,
"tileCount": 256,
"columns": 16,
"mapSize": {
"mapWidth": 50,
"mapHeight": 50
},
"groundTile": 1,
"layerElementsFiles": {
"house-001": "house-001.json",
"house-002": "house-002.json",
"tree": "tree.json"
},
"elementsQuantity": {
"house-001": 2,
"house-002": 3,
"tree": 10
},
"pathTile": 5,
"mainPathSize": 3,
"generateElementsPath": true
}Key Configuration Options
Required Options:
tileSize: Size of each tile in pixelstileSheetPath: Path to the tileset imagetileSheetName: Name of the tileset fileimageHeight: Tileset image heightimageWidth: Tileset image widthtileCount: Total number of tiles in tilesetcolumns: Number of columns in tilesetgroundTile: Tile ID for ground/floorlayerElements: Map elements configurationelementsQuantity: Number of each element to place
Optional Options:
mapSize: Map dimensions (width/height)pathTile: Tile ID for pathsmainPathSize: Width of main pathpathSize: Width of element connection pathsgenerateElementsPath: Auto-generate paths between elementsblockMapBorder: Add collision borders to map edgesminimumDistanceFromBorders: Minimum distance for element placement from borderselementsFreeSpaceAround: Free space required around elementsrandomGroundTiles: Tile IDs for ground variationsvariableTilesPercentage: Percentage of ground to varysurroundingTiles: Border/corner tile configurationsapplySurroundingPathTiles: Apply border tiles to pathsremoveGroundLayer: Remove ground layer from outputautoMergeLayersByKeys: Auto-merge layers matching keys
Architecture
Core Components
RandomMapGenerator: Main generator class
- Initializes map grid
- Places elements with constraints
- Generates connecting paths
- Validates connectivity
- Outputs Tiled JSON format
ElementsProvider: Splits composite maps into individual elements
PathFinder: A* pathfinding wrapper for connectivity validation
PathConnector: Generates paths connecting map elements
Validators: Ensure map validity (boundaries, connectivity, spacing)
Loaders: Load and validate map configurations
Patterns: Tile pattern matching for borders and corners
Utilities: Helper functions for geometry, distance, and analysis
Map Generation Flow
- Load and validate configuration
- Initialize empty map grid
- Generate spots (special areas)
- Place map border (if enabled)
- Place centered elements (if specified)
- Place remaining elements with free space constraints
- Generate main path (if configured)
- Connect elements with paths
- Apply path border tiles (if enabled)
- Apply ground variations (if configured)
- Merge and optimize layers
- Validate connectivity
- Output Tiled JSON file
Examples
See the examples/ folder for complete examples:
examples/layer-elements-object/- Object-based generationexamples/layer-elements-composite/- Composite generationexamples/layer-elements-composite/map-composite-data-with-associations.json- Multi-floor dungeons
Testing
npm testDependencies
@reldens/utils: Utility functions and logging@reldens/server-utils: Server-side file operations@reldens/tile-map-optimizer: Map optimization and element splittingpathfinding: A* pathfinding algorithm
Documentation
https://www.reldens.com/documentation/tile-map-generator/
License
MIT

