Allows adding new biomes and changing most of the world generation.
Always back up your world before making any changes!
Install on all clients and on the server (modding guide).
For example you can create entirely flat worlds with only Meadows for building. Or group up colder biomes up north while more warmer biomes end up in the other side. Or just have a world with terrain shapes no one has ever seen before.
Settings are automatically reloaded (consider using Configuration manager). This can lead to weird behavior so it's recommended to make a fresh world after you are done configuring.
Note: Pay extra attention when loading old worlds. Certain configurations can cause alter the terrain significantly and destroy your buildings.
This mod can be used server only, without requiring clients to have it. However only following files can be configured:
expand_dungeons.yaml
: All fields.expand_locations.yaml
: All fields.expand_rooms.yaml
: All fields.expand_vegetation.yaml
: All fields.expand_world.cfg
: Only setting Zone spawners.When doing this, enable Server only
on the config to remove version check.
Ashlands and Deep North have special terrain features that can be modified in the config.
Terrain is lowered before Ashland and Deep North to make Ocean appear. This can be disabled with settings "Ashlands gap" and "Deep North gap".
Ashlands terrain is limited by the position. This can be fully disabled with setting ""Restrict Ashlands position" or modified with settings "Ashlands length restriction" and "Ashlands width restriction".
Note: The same settings exist in Expand World Size mod. Only change these settings in one of the mods.
This mod provides additional configuration files (.yaml) that can be used to change most world generation related data.
These files are generated automatically to the config/expand_world
folder when loading a world (unless they already exist).
Each file can be disabled from the main .cfg file to improve compatibility and performance (less network usage and processing when joining the server).
Data can be split to multiple files. The files are loaded alphabetically in reverse order. For example expand_biomes_custom.yaml
would be loaded first and then expand_biomes.yaml
.
Note: Some files are server side only. Use single player for testing so that your client has access to all of the information. Mods that cause clients to regenerate dungeons or locations may not work correctly.
Note: Some files automatically add missing entries to add new content automatically. If you want to remove entries, set enabled to false instead. Automatic data migration can be disabled from the config.
Note: Editing files automatically reloads them. This can be disabled from the config (requires restart to take effect). If disabled, the world must be reloaded to load any changes.
Dungeons, locations and vegetation support using blueprints to spawn multiple objects. Both PlanBuild .blueprint and BuildShare .vbuild files are supported (however PlanBuild files are preferred).
The file format is slightly modified from the usual:
The file expand_biomes.yaml
sets available biomes and their configuration.
You can add up to 23 new biomes (on top of the 9 default ones).
Note: The game assigns a number for each biome. If some mods don't recognize new biomes you can try using the number instead. The first new biome gets number 1024 which is doubled for each new biome (2nd biome is 2048, 3rd biome is 4096, etc).
1.0
): Multiplies negative terrain altitude.false
): This weather will be used in the Ashlands area instead of the normal weather.false
): This weather will be used in the Deep North area instead of the normal weather.ashlandsOverride
is true
to keep old configurations working.1000
meters): Maximum altitude.-1000
meters): Minimum altitude.0.5
): How strongly the altitude is reduced if over the maximum or minimum limit. For example 0.5 square roots the excess altitude.dirt,cultivated,paved,vegetation
(from 0.0 to 1.0) or a pre-defined color (cultivated, dirt, grass, grass_dark, patches, paved, paved_dark, paved_dirt, paved_moss)1.0
): Changes how quickly the terrain altitude affects the map color. Increasing the value can be useful for low altitude biomes to show the altitude differences better. Lowering the value can be useful for high altitude biomes to reduce amount of white color (from mountain altitudes). Negative value can be useful for underwater biomes to show the map color (normally all underwater areas get blueish color).false
): If true, players can't build in this biome.The file expand_world.yaml
sets the biome distribution.
Each entry in the file adds a new rule. When determing the biome, the rules are checked one by one from the top until a valid rule is found. This means the order of entries is especially important for this file.
1000
meters): Maximum terrain height relative to the water level.0
meters if maxAltitude is positive, otherwise -1000
meters): Minimum terrain height relative to the water level.1.0
of world radius): Maximum distance from the world center.0.0
of world radius): Minimum distance from the world center.0.0
of world angle): Start of the circle sector.1.0
of world angle): End of the circle sector.0.0
of world radius): Moves the center point away from the world center.0.0
of world radius): Moves the center point away from the world center.1.0
of total area): How much of the valid area is randomly filled with this biome. Uses normal distribution, see values below.1.0
): Same as the Stretch biomes setting in Expand World Size but applied just to a single entry. Multiplies the size of biome areas (average total area stays the same).amount
. Numeric value fixes the outcome. Biome name uses a biome specific value derived from the world seed. No value uses biome from the terrain
parameter.true
): Applies "wiggle" to the minDistance
.
true
): Applies "wiggle" to the maxSector
and minSector
.
false
): If true, the water is boiling hot.
true
to keep old configurations working.0.5
would make the effect increase over 600 meters while 2.0
would make the effect increase over 150 meters.Note: The world edge is always ocean. This is currently hardcoded.
Technically the amount is not a percentage but something closer to a normal distribution.
Manual testing with ew_biomes
command has given these rough values:
For example if you want to replace 25% of Plains with a new biome you can calculate 0.6 -> 64 % -> 64 % * 0.25 = 16 % -> 0.35. So you would put 0.35 (or 0.36) to the amount of the new biome.
Note: The amount is of the total world size, not of the remaining area. If two biomes have the same seed then their areas will overlap which can lead to unexpected results.
For example if the new biome is a variant of Plains then there is no need to reduce the amount of Plains because the new biome only exists where they would have been Plains.
If the seeds are different, then Plains amount can be calculated with 0.6 -> 64 % -> 64 % * (1 - 0.25) / (1 - 0.16) = 57 % -> 0.56.
Sectors start at the south and increase towards clock-wise direction. So that:
Note: Of course any number is valid for sectors. Like from 0.37 to 0.62.
The file expand_environments.yaml
sets the available weathers. Command ew_musics
can be used to print available musics.
false
): The first default environment is loaded at the game start up. No need to set this true unless removing from the Clear environment.false
): If true, is considered to be raining.false
): If true, causes the freezing debuff.false
): If true, causes the freezing at night.false
): If true, causes the cold debuff.false
): If true, causes the cold at night.false
): If true, causes constant darkness.0.0
): The minimum wind strength.1.0
): The maximum wind strength.0.0
): ???.0.3
): ???.0.01
): ???.1.2
): ???.0
): ???.60
): ???.Note: As you can see, lots of values have unknown meaning. Probably better to look at the existing environments for inspiration.
The file expand_clutter.yaml
sets the small visual objects.
true
): Quick way to disable this entry.80
): Amount of clutter.false
): Way of rendering or something. Might cause errors if changed.true
): Only on uncleared terrain.false
): Only on cleared terrain.1.0
): Minimum scale for instanced clutter.1.0
): Maximum scale for instanced clutter.0
degrees): Minimum terrain angle.10
degrees): Maximum terrain angle.-1000
meters): Minimum terrain altitude.1000
meters): Maximum terrain altitude.0
): Minimum vegetation mask.0
): Maximum vegetation mask.false
): Placed at water level instead of terrain.false
): Rotates with the terrain angle.0
meters): Moves the clutter randomly up/down.0
meters): Minimum water depth (if different from max).0
meters): Maximum water depth (if different from min).false
): Only in forests.0
): Minimum forest value (if only in forests).0
): Maximum forest value (if only in forests).0
): Scale when calculating the fractal value.0
): Offset when calculating the fractal value.0
): Minimum fractal value.1
): Maximum fractal value.The file expand_locations.yaml
sets the available locations and their placement. This is a server side feature, clients don't have access to this data.
Note: Missing locations are automatically added to the file. To disable, set enabled
to false
instead of removing anything.
Note: Each zone (64m x 64m) can only have one size.
See the wiki for more info.
See examples.
Locations are pregenerated at world generation. You must use genloc
command to redistribute them on unexplored areas after making any changes. For already explored areas, you need to use Upgrade World mod.
:text
to the prefab. For example "Dolmen01:Ghost".true
): Quick way to disable this entry.expand_dungeons.yaml
.0.0
of world radius): Minimum distance from the world center. Values over 2.0 are considered as meters.1.0
of world radius): Maximum distance from the world center. Values over 2.0 are considered as meters.0
): Minimum altitude.1000
): Maximum altitude.false
): Generated first with more attempts.false
): Generating is attempted at world center, with gradually moving towards the world edge.false
): When placed, all other unplaced locations are removed. Guaranteed maximum of one instance.minDistanceFromSimilar
.0
meters): Minimum distance between the same location, or locations in the group
if given.ew_icons
to see what is available.
icon,size,pulse
.ew_icons
to see what is available.
icon,size,pulse
.false
): Randomly rotates the location (unaffected by world seed).false
): Rotates based on the terrain angle. For example for locations at mountain sides.false
): Placed at the water level instead of the terrain.0
meters): Minimum nearby terrain height difference.10
meters): Maximum nearby terrain height difference.false
): Only in forests.0
): Minimum forest value (if only in forests).0
): Maximum forest value (if only in forests).0
meters): Placed above the ground.0
): Minimum vegetation mask (random value from 0.0 to 1.0, only used in Ashlands and Mistlands biome).1
): Maximum vegetation mask (random value from 0.0 to 1.0, only used in Ashlands and Mistlands biome).false
): If enabled, the location is placed near higher vegetation mask.
prioritized
for more spawning attempts.20
meters): Distance of the vegetation mask check.2
): How many points are checked.
0
): How much better the mask must be than the average mask.
object copy
from World Edit Commands).false
): If true, pieces without custom health are randomly damaged. If all, all pieces are randomly damaged.<x>
, <y>
and <z>
in the command to use the location center point.<a>
in the command to use the location rotation.<x>+10
would add 10 meters to the x coordinate.false
): If true, vegetation is not placed within exteriorRadius
.false
): If true, players can't build within exteriorRadius
. If number, player can't build within the given radius.false
): If true, players can't build inside dungeons within the whole zone. If number, player can't build inside dungeons within the given radius.
bounds
divided by sqrt 2).true
for blueprints): Flattens the area.exteriorRadius
): Size of the leveled area.exteriorRadius
): Adds a smooth transition around the levelRadius
.dirt,cultivated,paved,vegetation
(from 0.0 to 1.0) or a pre-defined color (cultivated, dirt, grass, grass_dark, patches, paved, paved_dark, paved_dirt, paved_moss).exteriorRadius
): Size of the painted area.5
): Adds a smooth transition around the paintRadius
.1
): Minimum scale. Number or x,z,y (with y being the height).
1
): Maximum scale. Number or x,z,y (with y being the height).true
): If disabled, each axis is scaled independently.The file expand_dungeons.yaml
sets dungeon generators. This is a server side feature, clients don't have access to this data.
Command ew_dungeons
can be used to list available rooms for each dungeon.
Dungeon
, CampGrid
or CampRadial
.64
): Maximum size of the dungeon in meters. Format is x,z,y
or a single number for all directions.
SunkenCrypt,ForestCrypt
would use both sets.1
): Maximum amount of rooms. Only for Dungeon and CampRadial.1
): Minimum amount of rooms. Only for Dungeon and CampRadial.1
): Minimum amount of rooms in the required list. Only for Dungeon and CampRadial.ew_rooms
to print list of rooms.false
): Changes how rooms are randomly selected. Only for Dungeon.
weight
field is ignored).endCapPriority
field (weight
field is not used).0
): Chance for a door to be placed. Only for Dungeon.0
): Chance to be spawned if this door is selected. IF zero, the general doorChance
is used instead.90
degrees): Maximum terrain angle. Only for CampGrid and CampRadial.0
): Amount of perimeter walls to spawn. Only for CampRadial.0
meters): Size of the perimeter area around the camp. Only for CampRadial.0
meters): Minimum radius of the camp. Only for CampRadial.0
meters): Maximum radius of the camp. Only for CampRadial.0
meters): Minimum altitude for the room. Only for CampRadial.0
): Size of the grid. Only for CampGrid.0
meters): Size of a single tile. Only for CampGrid.1
): Chance for each tile to spawn. Only for CampGrid.false
): Makes the dungeon to be generated at specific position instead of straight above the entrance.
The file expand_rooms.yaml
sets available dungeon rooms. This is a server side feature, clients don't have access to this data.
See examples.
New rooms can be created from blueprints or cloning an existing room by adding :suffix
to the name.
true
): Quick way to disable this room.false
): If true, this room is used only as the first room.
weight
field is never used).entrance
. Even if multiple exist, the first one is used.false
): If true, this room is used to seal open ends at end of the generation.
false
): If true, this room is used to seal mismatching connections.
0
): Rooms with a higher priority are attempted first, unless roomWeights
is enabled.0
): Minimum amount of rooms between this room and the entrance.1
): Chance of this room being selected (relative to other weights), unless roomWeights
is disabled.false
): If true, the room is always rotated towards the camp center. If false, the room is randomly rotated.false
): If true, this room is placed on the camp perimeter (edge).x,z,y
. Size of this room in meters. Decimals are also supported.
posX,posZ,posY,rotY,rotX,rotZ
or id
for blueprints. Position relative to the room.id
.false
): If true, used for the entrance.true
): If true, allows placing door. If other
, allows placing door if the other connection also allows placing a door.The file expand_vegetations.yaml
sets the generated objects. This is a server side feature, clients don't have access to this data.
Changes only apply to unexplored areas. Upgrade World mod can be used to reset areas.
Note: Missing vegetation are automatically added to the file. To disable, set enabled
to false
instead of removing anything.
true
): Quick way to disable this entry.1
): Minimum amount (of groups) to be placed per zone (64m x 64m).1
): Maximum amount (of groups) to be placed per zone (64m x 64m). If less than 1, has only a chance to appear.false
): By default, only one attempt is made to find a suitable position for each vegetation. If enabled, 50 attempts are done for each vegetation.1
): Minimum scale. Number or x,z,y (with y being the height). 1
): Maximum scale. Number or x,z,y (with y being the height).true
): If disabled, each axis is scaled independently.0
degrees): Random rotation within the degrees.0.0
): Chance to set rotation based on terrain angle (from 0.0 to 1.0).true
): If enabled, clear ground is required.0
meters): Minimum terrain altitude.1000
meters): Maximum terrain altitude.0
meters): Minimum ocean depth (interpolated from zone corners so slightly different from minAltitude
).0
meters): Maximum ocean depth (interpolated from zone corners so slightly different from maxAltitude
).0
): Minimum vegetation mask (random value from 0.0 to 1.0, only used in Ashlands and Mistlands biome).0
): Maximum vegetation mask (random value from 0.0 to 1.0, only used in Ashlands and Mistlands biome).false
): If enabled, the vegetation is placed near higher vegetation mask.
forcePlacement
for more spawning attempts.20
meters): Distance of the vegetation mask check.2
): How many points are checked.
0
): How much better the mask must be than the average mask.
0
degrees): Minimum terrain angle.90
degrees): Maximum terrain angle.0
meters): Radius for terrain delta limits.
0
meters): Minimum terrain height change.
10
meters): Maximum terrain height change.
false
): If enabled, placed at the water level instead of the terrain level.false
): If enabled, placed at the top of solid objects instead of terrain.0
meters): Placed above the ground.1
): Minimum amount to be placed per group.1
): Maximum amount to be placed per group.0
meters): Radius for group placement. This should be less than 32 meters to avoid overflowing to adjacent zones.false
): If enabled, forest thresholds are checked.
0
): Minimum forest value.0
): Maximum forest value.0
meters): Extra distance away from location clear areas.
false
): If set, this vegetation creates a clear area similar to locations (based on clearRadius
).
groupRadius
to move the vegetation away from the zone borders.object copy
from World Edit Commands).New objects can be added to locations, dungeon rooms and zone spawners (creature spawns) by using the objects
field.
The objects are added relative to the spawn or location center.
- objects:
# Format is:
- id, posX,posZ,posY, rotY,rotX,rotZ, scaleX,scaleZ,scaleY, chance, data
# Adds a mushroom at the center to visually show where it is.
- GlowingMushroom, 0,0,0
# Adds a mushroom 20 meters away from the center that snaps to the ground.
- GlowingMushroom, 20,0,snap
# Adds a bigger mushroom if the first one wasn't big enough.
- GlowingMushroom, 0,0,0 0,0,0 2,2,2
# Adds a chest near the center with 90 degrees rotation that has a 50% chance to appear.
- Chest, 5,0,0, 90,0,0, 1,1,1, 0.5
# Adds a chest with specific data.
# It's recommended to use the objectData field if possible (less typing).
# However this can be used to override the objectData.
- Chest, 5,0,0, 90,0,0, 1,1,1, 0.5, infinite_health
For the default objects, you can use commands ew_locations
and ew_rooms
to print location or room contents.
Objects in locations can be swapped to other objects by using the objectSwap
field. This affects both original and custom objects.
Note: To prevent a custom object being swapped, use a dummy object and then create a swap for it. For example a custom object A would get swapped to object X, then use object D instead and swap it back to the object A.
Note: Objects can be removed by swapping to nothing.
- objectSwap:
# Swaps object A to object X.
- idA, idX
# Adds another swap for object A. The swap is randomly selected.
# Total weight: 1 + 2 = 3.
# 2 / 3 = 66% chance to select this swap.
- idA:2, idY
# Same as above but in a single line.
- idB, idX, idY:2
# Dummy swap. To add a custom object A, use object D instead and swap it back to A.
- idD, idA
# Swap object E to nothing.
- idE,
# Swap object F to nothing or object X (50% chance).
- idF,,X
Initial object data in locations can be changed by using the objectData
field. This affects both original, custom and blueprint objects.
Data is merged from multiple levels. The order is:
all
data from expand_locations.yaml
or expand_vegetations.yaml
.expand_locations.yaml
or expand_vegetations.yaml
.all
data from expand_dungeons.yaml
.expand_dungeons.yaml
.all
data from expand_rooms.yaml
.expand_rooms.yaml
.For example if the blueprint has infinite health then it can't be changed by using the objectData
field. But other data could be set like wear from Structure Tweaks mod.
There are two ways to set data:
data.yaml
with data save
and use its name.data copy_raw
to copy the raw data value.See data documentation for more info.
- objectData:
# Sets all objects data to infinite_health.
- all, infinite_health
# Overrides idA health to default_health.
- idA, default_health
# Adds another possible object data for idA.
# Total weight: 1 + 2 = 3.
# 2 / 3 = 66% chance for infinite_health and 33% chance for default_health.
- idA:2, infinite_health
# Same for idB but in a single line.
- idB, default_health, infinite_health:2
Both the biome and the current environment can apply status effects to the player. Effects can be active during the day, night or both.
Each entry has following fields:
name
: Name of the effect.requiredGlobalKeys
: Active if all of these world keys are set.forbiddenGlobalKeys
: Active if none of these world keys are set.requiredPlayerKeys
: Active if all of these player keys are set.forbiddenPlayerKeys
: Active if none of these player keys are set.day
: Active during the day.night
: Active during the night.duration
: Duration in seconds. 0 is "permanent". If not given, uses the default duration of the status effect.
damage
: Damage that is affected by both armor and resistances.
damageIgnoreArmor
: Damage that ignores armor.damageIgnoreAll
: Damage that ignores armor and resistances.immuneWithResist
: If true, damage resistance counts as immunity.
damageIgnoreAll
is not affected.See examples.