


This mod 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.
The mod supports live reloading when changing the configuration (either with Configuration manager or by saving the config file). This can lead to weird behavior so after playing with the settings it's recommended to make a fresh world.
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 only on the server. However only following files can be configured:
expand_events.yaml: Fields enabled, duration, nearBaseOnly, biome, requiredGlobalKeys, notRequiredGlobalKeys, pauseIfNoPlayerInArea, random.expand_locations.yaml: Only normally available or disabled prefabs can be used.expand_vegetation.yaml: All fields.expand_world.cfg: Only setting Location multiplier.When doing this, enable Server only on the config to remove version check.
expand_vegetation.yaml uses . as the separate character for scaleMin and scaleMax instead of ,. Fix manually or remove the file to regerenate it.Altitude delta, set it to 0.0 and add the value altitudeDelta to each entry in expand_biomes.yaml (add to any pre-existing value).Altitude multiplier, set it to 1.0 and add the value altitudeMultiplier to each entry in expand_biomes.yaml (multiply any pre-existing value).Base altitude delta, set its value to Altitude delta.Base altitude multiplier, set its value to Altitude multiplier.amount parameter in expand_world.yaml then you need to add seed: swamp to the related world entries.expand_biomes.yaml. If this makes no sense then you can most likely skip this step.expand_biomes.yaml by 255 (range changed from 0-255 to 0.0-1.0). If you haven't changed biomes then you can just delete file to regenerate it. Old values still work so this step can be skipped.expand_biomes.yaml.The size can be increased by changing the World radius and World edge size settings. The total size is sum of these (default is 10000 + 500 = 10500 meters). Usually there is no need to change the edge size.
The world can be stretched with Stretch world setting. This can be used to keep the same world but islands and oceans are just bigger. This will also make biomes bigger which can be further tweaked with Stretch biomes setting (for example using 0.5 biome stretch with 2 world stretch).
The amount of locations (like boss altars) can be changed with Locations setting. This can significantly increase the initial world generation time (especially when the game fails to place most locations). If changing this on existing worlds, use genloc command to distribute unplaced locations.
Note: 2x world radius means 4x world area. So for 20000 radius you would need 4x locations and for 40000 radius you would need 16x locations.
Note: If the game fails to place the spawn altar (for example if no Meadows), then it is forcefully placed at the middle of the map. With bad luck, this can be underwater.
The minimap size must be manually changed because there are two different settings. Both of the settings increase the minimap size but have a different drawback. Minimap size significantly increases the minimap generation time while Minimap pixel size makes the minimap less detailed.
Recommended settings:
Example generation times:
Note: The minimap is generated on the background. This is indicated by a small Loading text on the upper right corner.
Note: Changing Minimap size resets explored areas.
For the altitude, there are two settings: Altitude delta and Altitude multiplier. The multiplier multiplies the distance to the water level (by default at 30 meters). So increasing the multiplier will make water more deeper and other terrain higher. The delta directly affects the altitude. For example positive values will make the underwater terrain more shallow.
The formula is: water level + (altitude - water level) * multiplier + delta.
For the total altitude there are two layers:
The final water depth can be multiplied with Water depth multiplier.
Amount of forest can be changed with Forest multiplier.
The layout of the world is pre-determined, and each world is just a snapshot of it. The world can be manually moved in this layout with Offset X (to west) and Offset Y (to south) settings.
Each biome adds some height variation on top of the base altitude. This can be controlled with Height variation seed setting.
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).
All files with the same start will be loaded. For example both expand_biomes.yaml and expand_biomes_custom.yaml would get loaded to biomes.
The file expand_biomes.yaml sets available biomes and their configuration.
You can add up to 22 new biomes (on top of the 9 default ones).
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.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).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 distance center point away from the world center.0.0 of world radius): Moves the distance 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 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.1.0): Multiplies negative terrain altitude.true): Applies "wiggle" to the minDistance.true): Applies "wiggle" to the maxSector and minSector.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 debug_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 % / 4 = 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.
"Wiggle" adds a sin wave pattern to the distance/sector borders for less artifical biome transitions. The strength can be globally configured in the main .cfg file.
The file expand_environments.yaml sets the available weathers.
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.10 degrees): Maximum terrain angle.-1000 meters): Minimum terrain altitude.1000 meters): Maximum terrain altitude.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.
See the wiki for more info.
Locations are pregenerated at world generation. You must use genloc command to redistribute them on unexplored areas after making any changes. For already explored aresa, you need to use Upgrade World mod.
true): Quick way to disable this entry.0.0 of world radius): Minimum distance from the world center. Values higher than 1.0 are considered meters and are automatically scaled with the world radius.1.0 of world radius): Maximum distance from the world center. Values higher than 1.0 are considered meters and are automatically scaled with the world radius.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.false): Location icon is always shown.false): Location icon is only shown when the location instance is actually placed.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).The file expand_vegetations.yaml sets the generated objects.
Changes only apply to unexplored areas. Upgrade World mod can be used to reset areas.
false): Quick way to disable this entry.1): Minimum amount (of groups) to be placed.1): Maximum amount (of groups) to be placed. If less than 1, has only a chance to appear.false): ???.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).0 degrees): Random rotation.0.0): Chance to set rotation based on terrain angle.true): Requires clear ground.0 meters): Minimum terrain altitude.1000 meters): Maximum terrain altitude.0 meters): Minimum ocean depth.0 meters): Maximum ocean depth.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): Placed at the water level instead of the terrain.0 meters): Placed above the ground.1): Minimum amount to be placed at the same time.1): Maximum amount to be placed at the same time.false): Only in forests.0): Minimum forest value (if only in forests).0): Maximum forest value (if only in forests).The file expand_spawns.yaml sets the spawned creatures.
See the wiki for more info.
false): Quick way to disable this entry.100 %): Chance to spawn when attempted.1): Minimum creature level.1): Maximum creature level.-1000 meters): Minimum terrain altitude.1000 meters): Maximum terrain altitude.true): Enabled during the day time.true): Enabled during the night time.10 meters): Distance to suppress similar spawns.40 meters): Minimum distance from every player.80 meters): Maximum distance from any player.1): Minimum amount spawned at the same time.1): Maximum amount spawned at the same time.3 meters): Radius when spawning multiple objects.0 degrees): Minimum terrain angle.35 degrees): Maximum terrain angle.true): Enabled in forests.true): Enabled outside forests.0 meters): Minimum ocean depth.0 meters): Maximum ocean depth.false): Spawned creatures are more aggressive.0.5 meters): Spawns above the ground.0 meters): Distance from the world center to enable higher creature levels. This is not scaled with the world size.The file expand_events.yaml sets the boss and random events.
See the wiki for more info.
false): Quick way to disable this entry.60 seconds): How long the event lasts.true): Only triggers when near 3 player base items.env command in the client doesn't affect this.true): The event timer pauses if no player in the area.true): The event can happen randomly (unlike boss events which happen when near a boss).Water settings are in the main expand_world.cfg file.
Water level can be changed with Water level setting. This is currently experimental and probably causes some glitches.
Similarly wave size can be changed with Wave multiplier setting. With the Wave only height setting causing slightly different behavior. This is also experimental.
Lakes are needed to generate rivers. The code searches for points with enough water and then merges them to lake objects. Use command find_lakes to show their positions on the map.
Note: Lake object is an abstract concept, not a real thing. So the settings only affect river generation.
Settings to find lakes:
128 meters): How often a point is checked for lakes (meters). Increase to find more smaller lakes.-20 meters): How deep the point must be to be considered a lake. Increase to find more shallow lakes.800 meters): How big area is merged to a single lake. Decrease to get more lakes.Rivers are generated between lakes. So generally increasing the amount of lakes also increases the amount of rivers.
However the lakes must have terrain higher than Lake point depth between them. So increase that value removes some of the rivers.
Settings to place rivers:
2000 meters): Lakes within this distance get a river between them. Increase to place more and longer rivers.5000 meters): Fallback. Lakes without a river do a longer search and place one river to a random lake. Increase to enable very long rivers without increasing the total amount that much.50 meters): The river is not valid if this terrain altitude is found between the lakes.128 meters): How often the river altitude is checked. Both River max altitude and Lake point depth.Rivers have params:
100): For each river, the maximum width is randomly selected between this and River minimum width.60): For each river, the minimum width is randomly selected between this and selected maximum width. So the average width is closer to the River minimum width than the River maximum width.15): How wide the curves are.20): How often the river changes direction.Streams are generated by trying to find random points within an altitude range.
3000): How many times the code tries to place a stream. This is NOT scaled with the world radius.100): How many times the code tries to find a suitable start and end point.-4 meters): Minimum terrain height for stream starts.1 meter): Maximum terrain height for stream starts.6 meters): Minimum terrain height for stream ends.14 meters): Maximum terrain height for stream ends.Streams have params:
20): For each stream, the maximum width is randomly selected between this and Stream minimum width.20): For each stream, the minimum width is randomly selected between this and selected maximum width. So the average width is closer to the Stream minimum width than the Stream maximum width.80 meters): Minimum length for streams.299 meters): Maximum length for streams.15): How wide the curves are.20): How often the stream changes direction.expand_locations.yaml.prefab, for example to XMasTree (check wiki for ids).expand_events.yaml.spawns field from another entry like army_eikthyr.expand_biomes.yaml.biome, add name and add terrain.expand_world.yaml.Example:
Copy-paste ashlands entry and change:
Copy-paste plains entry and change the top one:
v1.7
waterDepthMultiplier to the expand_biomes.yaml.requiredEnvironments to the expand_events.yaml.maximumAltitude, minimumAltitude and excessFactor to the expand_biomes.yaml.expand_spawns.yaml to depend on maximum altitude (-1000 or 0).v1.6
expand_vegetation.yaml (for some users).Thanks for Azumatt for creating the mod icon!
Thanks for blaxxun for creating the server sync!
Thanks for redseiko for the asynchronous minimap generating!