Skip to content

World Generation

Overview

World generation in Hytale is driven by a node-graph-based pipeline called HytaleGenerator. It produces terrain through layered noise functions, density maps, biome definitions, and weighted prefab assignments. Each component is defined in a separate JSON file and wired together through import/export references. The system supports procedural continent shapes, climate zones, cave networks, river carving, and per-biome scatter placement.

File Location

Assets/Server/HytaleGenerator/
Assignments/
Boreal1/
Boreal1_Hedera_Trees.json
Boreal1_Hedera_Mushrooms.json
...
Desert1/
Plains1/
Volcanic1/
Biomes/
Basic.json
Boreal1/
Boreal1_Hedera.json
Boreal1_Henges.json
Desert1/
Plains1/
Volcanic1/
Default_Flat/
Default_Void/
BlockMasks/
Density/
Map_Default.json
Map_Portals.json
Map_Tiles.json
Plains1_Caves_Terrain.json
...
Graphs/
Settings/
Settings.json
WorldStructures/

Schema

Settings (Settings.json)

FieldTypeRequiredDefaultDescription
StatsCheckpointsnumber[]NoChunk-count thresholds at which generation statistics are logged.
CustomConcurrencynumberNo-1Thread count for generation. -1 uses the engine default.
BufferCapacityFactornumberNo0.1Fraction of total memory allocated to generation buffers.
TargetViewDistancenumberNo512Target view distance in blocks used to pre-compute generation priority.
TargetPlayerCountnumberNo3Expected player count used to size generation queues.

Density Node (node-graph files)

Density files define a tree of processing nodes that produce a scalar field used for terrain shape, river carving, or biome mapping. Every node has at minimum:

FieldTypeRequiredDefaultDescription
$NodeIdstringYesUnique identifier for this node in the graph.
TypestringYesNode type. See node types below.
SkipbooleanNofalseWhen true, the node is bypassed during generation.
ExportAsstringNoName under which this node’s output is published for import by other graphs.
SingleInstancebooleanNofalseWhen true, the node is evaluated once and cached globally.
InputsDensityNode[]No[]Child nodes whose outputs feed into this node.

Common Density Node Types

TypeDescriptionKey Fields
SimplexNoise2D2D simplex noise generatorLacunarity, Persistence, Octaves, Scale, Seed
ConstantOutputs a fixed valueValue
SumAdds all input values
Min / MaxReturns the minimum or maximum of inputs
ClampClamps input between two wallsWallA, WallB
NormalizerRemaps a value rangeFromMin, FromMax, ToMin, ToMax
InverterNegates the input
AbsAbsolute value
MixBlends two inputs using a third as alpha
ScaleMultiplies input coordinatesScaleX, ScaleY, ScaleZ
CacheCaches the result of child nodesCapacity
YOverrideForces a fixed Y coordinate for 2D evaluationValue
DistanceDistance from origin with a falloff curveCurve
ExportedMarks a node’s output for cross-graph importExportAs, SingleInstance
ImportedReferences an exported node by nameName

Assignment (scatter/prefab placement)

Assignment files control what decorations, vegetation, or structures are placed in a biome region. They use a field-function approach with delimiters.

FieldTypeRequiredDefaultDescription
TypestringYesTop-level type, typically "FieldFunction".
ExportAsstringNoExport name for this assignment.
FieldFunctionFieldFunctionYesNoise function that produces the placement density field.
DelimitersDelimiter[]YesRanges within the field function output that trigger placement.

FieldFunction

FieldTypeRequiredDefaultDescription
TypestringYesNoise type, e.g. "SimplexNoise2D".
SkipbooleanNofalseBypass this function.
LacunaritynumberNo2Frequency multiplier per octave.
PersistencenumberNo0.5Amplitude multiplier per octave.
OctavesnumberNo1Number of noise octaves.
ScalenumberYesSpatial scale of the noise.
SeedstringYesSeed string for deterministic generation.

Delimiter

FieldTypeRequiredDefaultDescription
MinnumberYesMinimum field value for this range.
MaxnumberYesMaximum field value for this range.
AssignmentsAssignmentNodeYesWhat to place when the field value falls in this range.

AssignmentNode

FieldTypeRequiredDefaultDescription
TypestringYes"Weighted", "Constant", or "Cluster".
SkipChancenumberNo0Probability (0–1) of skipping placement entirely.
SeedstringNoSeed for weighted random selection.
WeightedAssignmentsWeightedEntry[]NoArray of weighted options (when Type is "Weighted").
PropPropConfigNoPrefab/prop to place (when Type is "Constant" or within a weighted entry).

Example

Density map (Assets/Server/HytaleGenerator/Density/Map_Default.json, condensed to show structure):

{
"$NodeId": "Exported.Density-ed27c3c9",
"Type": "Exported",
"ExportAs": "Biome-Map",
"SingleInstance": true,
"Inputs": [
{
"Type": "YOverride",
"Value": 0,
"Inputs": [
{
"Type": "Cache",
"Capacity": 1,
"Inputs": [
{
"Type": "Mix",
"Inputs": [
{ "Type": "Imported", "Name": "Biome-Map-Tiles" },
{ "Type": "Constant", "Value": -0.3 },
{
"Type": "Clamp",
"WallA": 0,
"WallB": 1,
"Inputs": [
{
"Type": "Normalizer",
"FromMin": 0.62,
"FromMax": 0.62,
"ToMin": 0,
"ToMax": 1,
"Inputs": [
{ "Type": "Exported", "ExportAs": "World-River-Map" }
]
}
]
}
]
}
]
}
]
}
]
}

Generator settings (Assets/Server/HytaleGenerator/Settings/Settings.json):

{
"StatsCheckpoints": [1, 100, 500, 1000],
"CustomConcurrency": -1,
"BufferCapacityFactor": 0.1,
"TargetViewDistance": 512,
"TargetPlayerCount": 3
}
  • World Masks — noise masks for continent shape, temperature, and climate
  • Environments — environment definitions assigned per zone
  • Instances — instance configs that select a world generation profile