Region Layout

Region layouts provide handling for assigning region settings by overmap at a world scale. The simplest example:

{
	"type": "dimension_region_layout",
	"id": "default",
	"generation_mode": "UNIFORM",
	"uniform_region": "default"
}

DISCLAIMER: as of July 2026, overmap feature generation (lakes, oceans, highways, etc.) does not take into account adjacent overmaps that may be a different region. ESPECIALLY DO NOT add multiple regions into the default dimension without sufficient testing first! Mods are fine, as long as you’re willing to maintain them.

Region layouts have a secondary type: “generation_mode”, which defines how the layout is generated.

There are two broad types of region layouts: STATIC and DYNAMIC.

  • DYNAMIC layouts are determined upon generating an overmap.
  • STATIC layouts have predetermined bounds and are generated along with the first overmap, using a DYNAMIC layout to generate out-of-bounds overmaps.

Listed below is documentation for each region layout mode’s fields:

UNIFORM (Type: DYNAMIC)

All overmaps are generated with a single region. See the top of this document for an example.

Identifier Description
uniform_region region_id – all overmaps will generate with this region.

RANDOM (Type: DYNAMIC)

All overmaps are generated with a random region, selected from a weighted list.

Identifier Description
random_regions array of (region_id, int) pairs – list of regions to pick from
{
	"type": "dimension_region_layout",
	"id": "test_layout",
	"generation_mode": "RANDOM",
	"random_regions": [ ["default", 4],["highlands", 1],["spider_dimension", 1],["string_dimension", 1],["radiosphere", 1] ]
}

The above example may output a world map like so:

ACCCDAACC DBDBACCCA CABCBBDCC CACCCCCEE CCCCBBCEB CCDEBDBCC CDBCCCADB CDEDCCBCC CCADDCDAA

C = default A = highlands B = spider_dimension D = radiosphere E = string_dimension

ANGLES (Type: DYNAMIC)

Overmaps are generated based on their angle relative to overmap (0,0). Sectors are made from (360 / N)-degree wedges, where N is the count of regions provided. Regions can be provided more than once to form larger sectors.

Identifier Description
angles_regions region_id – up to 16 region_ids, clockwise starting from north
angles_offset angle in degrees – up to 180 degrees, offset from 0 degrees north, default 0
{
	"type": "dimension_region_layout",
	"id": "test_layout",
	"generation_mode": "ANGLES",
	"angle_regions": ["default", "string_dimension", "default", "string_dimension", "default", "string_dimension", "default", "string_dimension" ]
}

The above example may output a world map like so:

AAAABBBBA BAAABBBAA BBAABBAAA BBBABAAAA BBBBBBBBB AAAABABBB AAABBAABB AABBBAAAB ABBBBAAAA

A = string_dimension B = default

MANUAL_VORONOI (Type: STATIC)

Uses a Voronoi diagram generator with interchangeable point sets to generate blobs of regions. About Voronoi diagrams: https://en.wikipedia.org/wiki/Voronoi_diagram A decent drafter for your intended layout: https://alexbeutel.com/webgl/voronoi.html

Identifier Description
generated_bounds_min tripoint_abs_om – minimum layout overmap bound
generated_bounds_max tripoint_abs_om – maximum layout overmap bound
layout_out_of_bounds region_layout_id – the DYNAMIC layout used for out_of_bounds generation
region_point_sets array of region_point_set – the point sets used for Voronoi generation

This layout mode uses region_point_set, which are defined as follows:

Identifier Description
region_points array of tripoint_abs_om – all overmap points in this set
regions_weighted array of (region_id, int) pairs – regions picked and assigned to points
remove_region boolean – whether to remove picked regions from regions_weighted
default_region region_id – used if regions_weighted is empty
region_point_variance int – maximum random offset from region_points
{
	"type": "dimension_region_layout",
	"id": "test_layout",
	"generation_mode": "MANUAL_VORONOI",
	"layout_out_of_bounds": "default",
	"generated_bounds_min": [-10,-10, 0],
	"generated_bounds_max": [10, 10, 0],
	"region_point_sets": [
	{
		"regions_weighted": [["default", 1],["highlands", 1],["spider_dimension", 1],["string_dimension", 1],["radiosphere", 1] ],
		"region_points": [[0, 0, 0], [-5, -5, 0], [5, 5, 0], [5, -5, 0], [-5, 5, 0]],
		"remove_region": true,
		"default_region": "default",
		"region_point_variance": 2
	},
	{
		"regions_weighted": [["highlands", 1],["spider_dimension", 1],["string_dimension", 1],["radiosphere", 1] ],
		"region_points": [[-8, -8, 0], [8, 8, 0], [8, -8, 0], [-8, 8, 0]],
		"remove_region": true,
		"default_region": "default",
		"region_point_variance": 1
	}
	]
}

The above example may output a world map like so (note that both highlands points merged!):

AAAAAAAABBBCCCBBBBBBB AAAAAAABBBBCCCBBBBBBB AAAAAABBBBBCCCCBBBBBB AAAAABBBBBBCCCCBBBBBB AAAABBBBBBBCCCCCBBBBB AAABBBBBBBBCCCCCCBBBB AABBBBBBBBBCCCCCCBBBB ABBBBBBBBBDCCCCCCCBBB BBBBBBBBBBDDDCCCCCBBB BBBBBBBBBBDDDDDCCCCBB CBBBBBBBBDDDDDDDDEEEE CCCBBBBBADDDDDDDEEEEE CCCCCCAAAADDDDEEEEEEE CCCCCCAAAAADDEEEEEEEE CCCCCCAAAAAAEEEEEEEEE CCCCCCAAAAAAEEEEEEEEE CCCCCCAAAAAAEEEEEEEEE CCCCCCAAAAAAEEEEEEEEE CCCCCCAAAAAAEEEEEEEEE CCCCCCAAAAAAEEEEEEEEE CCCCCCAAAAAAAEEEEEEEE A = radiosphere B = string_dimension C = spider_dimension D = default E = highlands