Skip to content

World Masks

Overview

World mask files define the large-scale structure of the procedural world. The top-level Mask.json ties together continent shape, temperature, intensity, and climate sub-masks, and declares unique zones (spawn points, temples). Sub-mask files use noise generators and distance-based falloffs to produce scalar fields that the world generator samples to decide which biome occupies a given coordinate. A companion Zones.json file maps mask colours to named zone lists.

File Location

Assets/Server/World/
Default/
Mask.json
World.json
Zones.json
Mask/
Blend_Inner.json
Blend_Outer.json
Continent.json
Intensity.json
Temperature.json
Climate/
Cold.json
Hot.json
Temperate.json
Island/
Tier1.json
Tier2.json
Tier3.json
Continent/
Blend_Inner.json
Blend_Outer.json
Continent_Inner.json
Continent_Outer.json
Temperature/
Temperature_Inner.json
Temperature_Outer.json
Flat/
Void/
Instance_Creative_Hub/
Instance_Dungeon_Goblin/
Instance_Forgotten_Temple/

Schema

Mask.json (top-level)

FieldTypeRequiredDefaultDescription
RandomizerRandomizerNoGlobal noise randomizer applied to all mask sampling.
NoiseNoiseConfigYesReferences to continent, temperature, and intensity sub-masks, plus land/ocean thresholds.
ClimateClimateConfigYesClimate zone definitions and blending parameters.
UniqueZonesUniqueZone[]No[]Named zones placed at specific world locations (e.g. spawn, temples).

Randomizer

FieldTypeRequiredDefaultDescription
GeneratorsGenerator[]YesArray of noise generators contributing to randomisation.

Generator

FieldTypeRequiredDefaultDescription
SeedstringNoDeterministic seed string.
NoiseTypestringYesNoise algorithm: "SIMPLEX", "OLD_SIMPLEX", "POINT".
ScalenumberYesSpatial scale of the noise.
AmplitudenumberNo1Output amplitude multiplier.
OctavesnumberNo1Number of fractal octaves.
PersistencenumberNo0.5Amplitude decay per octave.
LacunaritynumberNo2.0Frequency multiplier per octave.

NoiseConfig

FieldTypeRequiredDefaultDescription
ThresholdsThresholdsYesScalar thresholds that separate land, island, beach, and shallow ocean.
ContinentFileRefYesReference to the continent shape sub-mask.
TemperatureFileRefYesReference to the temperature gradient sub-mask.
IntensityFileRefYesReference to the intensity sub-mask.

Thresholds

FieldTypeRequiredDefaultDescription
LandnumberYesNoise value above which terrain is considered land.
IslandnumberYesNoise value above which terrain is considered an island.
BeachSizenumberYesWidth of the beach transition band.
ShallowOceanSizenumberYesWidth of the shallow ocean band around land.

ClimateConfig

FieldTypeRequiredDefaultDescription
FadeModestringNo"CHILDREN"How climate boundaries fade: "CHILDREN" uses per-child settings.
FadeRadiusnumberNoRadius of the climate transition zone.
FadeDistancenumberNoDistance over which the fade occurs.
ClimatesFileRef[]YesReferences to individual climate definition files.

Climate Definition (e.g. Cold.json)

FieldTypeRequiredDefaultDescription
NamestringYesDisplay name for this climate (e.g. "Zone 3").
ColorstringYesHex colour used to represent this climate on debug maps.
PointsClimatePoint[]YesTemperature/intensity coordinates that define where this climate appears.
ChildrenClimateTier[]No[]Sub-tiers within this climate with distinct biome colours and island configs.

ClimateTier

FieldTypeRequiredDefaultDescription
NamestringYesTier display name (e.g. "Tier 1").
ColorstringYesHex colour for this tier’s land biome.
ShorestringNoHex colour for shore areas in this tier.
OceanstringNoHex colour for deep ocean in this tier.
ShallowOceanstringNoHex colour for shallow ocean in this tier.
IslandFileRefNoReference to an island mask file for this tier.
PointsClimatePoint[]YesClimate coordinates with optional Modifier.

ClimatePoint

FieldTypeRequiredDefaultDescription
TemperaturenumberYesTemperature axis value (0–1).
IntensitynumberYesIntensity axis value (0–1).
ModifiernumberNo1Blending modifier for tier transitions.

UniqueZone

FieldTypeRequiredDefaultDescription
NamestringYesZone identifier referenced by biome and Zones.json colour mapping.
ParentstringNoName of a parent unique zone for relative placement.
ColorstringYesHex colour for debug map rendering.
RadiusnumberYesRadius of the zone in chunks.
OriginXnumberYesX origin for distance calculations.
OriginYnumberYesY origin for distance calculations.
DistancenumberYesMaximum distance from origin to search for placement.
MinDistancenumberNo0Minimum distance from origin (creates an annular search area).
RulePlacementRuleYesConstraints on continent, temperature, intensity, and fade values.

PlacementRule

Each key (Continent, Temperature, Intensity, Fade) contains:

FieldTypeRequiredDefaultDescription
TargetnumberYesIdeal mask value for placement.
RadiusnumberYesAcceptable deviation from the target.
WeightnumberYesImportance of this constraint relative to others.

Sub-mask Types

Sub-mask files use a Type field to define their behaviour:

TypeDescriptionKey Fields
DISTORTEDPoint-based mask with noise distortionNoise (with NoiseType, X, Y, InnerRadius, OuterRadius), Randomizer
BLENDBlends two child masks using an alpha maskAlpha (FileRef), Noise (FileRef[]), Thresholds, Normalize

Zones.json

FieldTypeRequiredDefaultDescription
GridGeneratorGridGeneratorYesControls the Voronoi-style grid used to assign zones.
MaskMappingobjectYesMap of hex colour strings to arrays of zone name strings.

GridGenerator

FieldTypeRequiredDefaultDescription
ScalenumberYesGrid cell size.
JitternumberNo0Random offset applied to grid points (0–1).
RandomizerRandomizerNoNoise generators for grid jittering.

World.json

FieldTypeRequiredDefaultDescription
Masksstring[]YesArray of mask file references (e.g. ["Mask.json"]).
PrefabStorestringNo"ASSETS"Source for prefab data: "ASSETS" or "DISK".
HeightnumberYesWorld height in regions.
WidthnumberYesWorld width in regions.
OffsetXnumberNo0Horizontal origin offset.
OffsetYnumberNo0Vertical origin offset.
RandomizerRandomizerNoAdditional randomizer for world-level noise.

Examples

Top-level mask (Assets/Server/World/Default/Mask.json, condensed):

{
"Randomizer": {
"Generators": [
{ "Seed": "RANDOMIZER", "NoiseType": "SIMPLEX", "Scale": 0.01, "Amplitude": 16.0 }
]
},
"Noise": {
"Thresholds": {
"Land": 0.5,
"Island": 0.75,
"BeachSize": 0.02,
"ShallowOceanSize": 0.08
},
"Continent": { "File": "Mask.Continent" },
"Temperature": { "File": "Mask.Temperature" },
"Intensity": { "File": "Mask.Intensity" }
},
"Climate": {
"FadeMode": "CHILDREN",
"FadeRadius": 50.0,
"FadeDistance": 100.0,
"Climates": [
{ "File": "Mask.Climate.Temperate" },
{ "File": "Mask.Climate.Cold" },
{ "File": "Mask.Climate.Hot" }
]
},
"UniqueZones": [
{
"Name": "Zone1_Spawn",
"Color": "#ff0000",
"Radius": 35,
"OriginX": 0,
"OriginY": 0,
"Distance": 3000,
"Rule": {
"Continent": { "Target": 0.0, "Radius": 0.3, "Weight": 1.0 },
"Temperature": { "Target": 0.5, "Radius": 0.2, "Weight": 1.0 },
"Intensity": { "Target": 0.1, "Radius": 0.3, "Weight": 1.0 },
"Fade": { "Target": 1.0, "Radius": 0.5, "Weight": 0.5 }
}
}
]
}

Continent blend sub-mask (Assets/Server/World/Default/Mask/Blend_Inner.json):

{
"Type": "DISTORTED",
"Noise": {
"NoiseType": "POINT",
"X": 0.0,
"Y": 0.0,
"InnerRadius": 1700.0,
"OuterRadius": 2500.0
},
"Randomizer": {
"Generators": [
{
"Seed": "CONTINENT-INNER-WARP-1",
"NoiseType": "SIMPLEX",
"Scale": 0.00085,
"Octaves": 1,
"Persistence": 0.5,
"Lacunarity": 2.5,
"Amplitude": 450
}
]
}
}
  • World Generation — the HytaleGenerator pipeline that consumes these masks
  • Environments — environment files assigned to zones defined by masks
  • Instances — instance configs that select a world definition