PlanetGenerator Definition

From Space Engineers Wiki
Jump to navigation Jump to search
Overview
Inherits

Requires an xsi:type attribute:

<Definition xsi:type="MyObjectBuilder_PlanetGeneratorDefinition">

Found in PlanetGeneratorDefinitions.sbc and defines the planets themselves, the "generator" part refers to terrain generation from various data. Nothing in the vanilla game spawns planets, players need to spawn them manually or using script mods that do so.

There's also an extensive tutorial for Creating a Planet as well as a Planet Editor in SEUT.

Wrappers

This definition can have 2 different wrappers:

Old style (used by EarthLike, Alien, Mars, Moon, Europa, Titan):

<?xml version="1.0"?>
<Definitions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <!--Planets -->
  <Definition xsi:type="PlanetGeneratorDefinition">
    <Id>
      <TypeId>PlanetGeneratorDefinition</TypeId>
      <SubtypeId>...</SubtypeId>
    </Id>
	...
  </Definition>
</Definitions>

New style (used by Triton and Pertam):

<?xml version="1.0"?>
<Definitions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <PlanetGeneratorDefinitions>
    <PlanetGeneratorDefinition>
      <Id>
        <TypeId>PlanetGeneratorDefinition</TypeId>
        <SubtypeId>...</SubtypeId>
      </Id>
	  ...
    </PlanetGeneratorDefinition>
  </PlanetGeneratorDefinitions>
</Definitions>

From SE v1.208 the chosen wrapper no longer matters, it used to make a difference for cloud layers.

Maps

Data\PlanetDataFiles\YourPlanet\*.png is where the maps are, where the YourPlanet is the <FolderName>.

The game expects 6 directions: front, back, left, right, down, up; those directions paired with:

Because of the above, you'll need an image editor that can allow individual color channel editing, for example to not affect trees or terrain texture when trying to edit the ore map.

Testing changes faster

Various graphical things can be experimented with in realtime with these options:

  • Developer Screen (which requires the profiler build of the game) in Render tab and Current Atmosphere for example to configure atmosphere.
  • Reload Definitions mod to reload the sbc in realtime (with planet respawn), however it might not work on everything.

Elements that need planet respawn

The values of these elements are written to the world save file (SANDBOX_0_0_0_.sbs) and on world reload they're read from the world file instead of the planet definition.
If you need to change any of these after the planet is already spawned, either change them in the world file (and delete the .sbsB5 counterpart), or respawn the planet if it's just a testing world (the reload mod linked above can do that).

Shared variables in calculations

In some docs below you'll stumble upon formulas that reference some variables without them being elements in this page:

  • PlanetRadius refers to the planet's radius as defined in the world file, or chosen when spawning it manually.
    • To get it from vanilla world templates, Planet measurements has a list of the planet diameters, divide by 2 to get radius then multiply by 1000 to get meters.
    • Workshop worlds, manually spawned planets or any other uncertain case, you can open the save file's SANDBOX_0_0_0.sbs, search for the planet subtype and then <Radius> is the value in meters.
  • LowestTerrain / HighestTerrain refers to resulting terrain heights in meters as defined by <HillParams>.

Basics

InheritFrom

<InheritFrom>
Type: StringDefaultnull
Optional. A SubtypeId of another planet generator definition to inherit all settings except for:

Difficulty

<Difficulty>
Type: MyStringIdDefaultDifficultyNormal
Shown in the respawn screen when selecting this planet.
Can be plain-text or a localization key (from .resx files), which also means text variables work too.

SurfaceGravity

<SurfaceGravity>
Type: Nullable<Single>Default1
Gravity acceleration (m/sยฒ) at all ground levels.

Warning: Gets written to save file (as <SurfaceGravity>) therefore changing the definition will not affect spawned planets.

Ground being between LowestTerrain and HighestTerrain, as defined by <HillParams>.

Outside of those ranges it's affected by <GravityFalloffPower>.

GravityFalloffPower

<GravityFalloffPower>
Type: Nullable<Single>Default7
Affects how fast <SurfaceGravity> falls off towards outer space.

Warning: Gets written to save file (as <GravityFalloff>) therefore changing the definition will not affect spawned planets.

First, "LowestTerrain" and "HighestTerrain" are defined by <HillParams>.

Gravity between LowestTerrain and HighestTerrain is always <SurfaceGravity>.

How far gravity reaches:

MaxGravityReach = HighestTerrain * ((SurfaceGravity / 0.05) ^ (1 / GravityFalloffPower))

Gravity farther than HighestTerrain:

G = (DistanceToCenter / HighestTerrain) ^ (0 - GravityFalloffPower)
Acceleration = SurfaceGravity * G

Gravity underground (under LowestTerrain):

G = DistanceToCenter / LowestTerrain
G cannot be lower than 0.01
Acceleration = SurfaceGravity * G

FolderName

<FolderName>
Type: StringDefault(SubtypeId's value)
Optional. Allows changing the folder name from Data\PlanetDataFiles\<Here>, which is where the various maps are (height, mat, add).

It works if the folder is either in the current mod or in the game folders.

Does not work if <MapProvider> is set.

PlanetMaps

<PlanetMaps>
Type: Nullable<MyPlanetMaps>Default(all off)
Toggles which planet map image data is needed for this planet. It helps performance if unused channels are disabled.
Material (attribute[1])Type: BooleanDefaultfalse
Whether to use *_mat.png's red channel.
Biome (attribute[1])Type: BooleanDefaultfalse
Whether to use *_mat.png's green channel.
Ores (attribute[1])Type: BooleanDefaultfalse
Whether to use *_mat.png's blue channel.
Occlusion (attribute[1])Type: BooleanDefaultfalse
Not used.
Example:
<PlanetMaps Material="true" Biome="true" Ores="true" />

MapProvider

<MapProvider>
Type: PlanetMapProviderDefaultnull
Optional. If null it will use the MyObjectBuilder_PlanetTextureMapProvider with <FolderName> as its Path.
Can be set like:
<MapProvider xsi:type="MyObjectBuilder_PlanetTextureMapProvider" Path="SomeOtherPlanetFolder" />
There are no other map provider types.

Terrain

HillParams

<HillParams>
Type: Nullable<SerializableRange>Defaultnull
The minimum and maximum terrain as ratios of the spawned planet radius and added to said radius, therefore reasonable values are very close to 0 and can be negative too.

Formulas:

LowestTerrain = PlanetRadius + (HillParams.Min * PlanetRadius)
HighestTerrain = PlanetRadius + (HillParams.Max * PlanetRadius)

(PlanetRadius)

Example usage:
<HillParams Min="-0.01" Max="0.12"/>
For the above, a planet spawned with 100km radius would have a terrain height range of 13km, which from the planet center is 99km lowest to 112km highest.

MinimumSurfaceLayerDepth

<MinimumSurfaceLayerDepth>
Type: SingleDefault4
Affects the Depth attribute of <Layers> in <DefaultSurfaceMaterial>, <DefaultSubSurfaceMaterial>, <CustomMaterialTable> and <ComplexMaterials>, but not <OreMappings>.

Unknown exact effect. A guess would be that it defines how deep it still considers as "surface".

DefaultSurfaceMaterial

<DefaultSurfaceMaterial>
Type: MyPlanetMaterialDefinitionDefaultnull
The default material for the surface areas that have no rules.

Contents:

Value (attribute[1])Type: byteDefault0
Pixel value (0 to 255) from the _mat map's red channel to use as locations.
Not used if <Layers> has at least one entry.
Material (attribute[1])Type: StringDefaultnull
SubtypeId of a VoxelMaterial Definition.
Not used if <Layers> has at least one entry.
MaxDepth (attribute[1])Type: SingleDefault1
How many meters underground this material goes for.
Not used if <Layers> has at least one entry.
<Layers>Type: MyPlanetMaterialLayer[]Defaultnull
Optional. Configure different materials based on depth.

Each <Layer> can contain:

Material (attribute[1])Type: StringDefaultnull
SubtypeId of a VoxelMaterial Definition.
Depth (attribute[1])Type: SingleDefault0
Depth in meters down to where this material goes.

Examples:

<DefaultSurfaceMaterial Material="Snow" Value="0" MaxDepth="10"/>
<DefaultSurfaceMaterial>
  <Layers>
    <Layer Material="Dirt" Depth="5" />
    <!-- ... -->
  </Layers>
</DefaultSurfaceMaterial>

DefaultSubSurfaceMaterial

<DefaultSubSurfaceMaterial>
Type: MyPlanetMaterialDefinitionDefaultnull
Material used underground in places that are not covered by the rule-based ones, including all the way down to the planet center.

If undefined, it will use <DefaultSurfaceMaterial>'s value.
Example:

<DefaultSubSurfaceMaterial Material="Stone" />

CustomMaterialTable

<CustomMaterialTable>
Type: MyPlanetMaterialDefinition[]Default(empty)
Optional.

Each <Material> has the same data and documentation as <DefaultSurfaceMaterial>.

Example:
<CustomMaterialTable>
  <Material Material="Snow" Value="1" MaxDepth="10">
    <Layers>
      <Layer Material="Dirt" Depth="5" />
      <!-- ... -->
    </Layers>
  </Material>
  <!-- ... -->
</CustomMaterialTable>

ComplexMaterials

<ComplexMaterials>
Type: MyPlanetMaterialGroup[]Default(empty)
Each <MaterialGroup> can contain:
Name (attribute[1])Type: StringDefaultDefault
Not used by code, it's only for organizing purposes.
Value (attribute[1])Type: byteDefault0
The pixel value (0 to 255) from _mat map's red channel to use as locations.
<Rule>Type: MyPlanetMaterialPlacementRule[]Defaultnull
Note: This element can be declared multiple times.

Contains complex structure:

Material (attribute[1])Type: StringDefaultnull
SubtypeId of a VoxelMaterial Definition.
Not used if <Layers> has at least one entry.
Value (attribute[1])Type: byteDefault0
The pixel value (0 to 255) from _mat map's red channel to use as locations.

Unclear how this works with ComplexMaterial's Value, if it does at all.

Not used if <Layers> has at least one entry.
MaxDepth (attribute[1])Type: SingleDefault1
How many meters underground this material goes for.
Not used if <Layers> has at least one entry.
<Layers>Type: MyPlanetMaterialLayer[]Defaultnull
Optional. Configure different materials based on depth.

Each <Layer> can contain:

Material (attribute[1])Type: StringDefaultnull
SubtypeId of a VoxelMaterial Definition.
Depth (attribute[1])Type: SingleDefault0
Depth in meters down to where this material goes.
<Height>Type: SerializableRangeDefault0, 1
The minimum and maximum relative height to allow within.

The values ratios between the planet <HillParams>'s Min and Max, where 0 here represents the HillParams's Min, and 1 represents HillParams's Max, and decimals in-between allowed of course.

Example:
<Height Min="0.4" Max="0.7" />
<Latitude>Type: SymmetricSerializableRangeDefault-90, 90, true
Angles away from the equator in degrees.

0 is at the equator and 90 is at either pole. If the Mirror attribute is set to false, then the world-up planet side is -90 and the world-down side is 90.

Example:
<Latitude Min="-90" Max="90" Mirror="true" />
<Longitude>Type: SerializableRangeDefault-180, 180
Angles around the world-up axis, where 0 is on the world-back side of the planet, and 90 is on the world-right side.
Example:
<Longitude Min="-180" Max="180" />
<Slope>Type: SerializableRangeDefault0, 90
Angles in degrees of terrain slope.
Example:
<Slope Min="0" Max="90" />

Examples:

<MaterialGroup Name="Lake areas" Value="82">
  <Rule>
    <Layers>
      <Layer Material="AlienIce_03" Depth="20" />
	  <!-- ... -->
    </Layers>
    <Height Min="0.0" Max="1.0" />
	<Latitude Min="0" Max="90" Mirror="true" />
    <Longitude Min="-180" Max="180" />
    <Slope Min="0" Max="5" />
  </Rule>
  <!-- ... -->
</MaterialGroup>
<MaterialGroup Name="Lake areas" Value="82">
  <Rule Material="Snow" Value="0" MaxDepth="10">
    <Height Min="0.0" Max="1.0" />
	<Latitude Min="0" Max="90" Mirror="true" />
    <Longitude Min="-180" Max="180" />
    <Slope Min="0" Max="5" />
  </Rule>
  <!-- ... -->
</MaterialGroup>

OreMappings

<OreMappings>
Type: MyPlanetOreMapping[]Default(empty)
Pairs voxel materials to the ore deposits maps.

Each <Ore> can contain:

Value (attribute[1])Type: byteDefault0
The pixel value (0 to 255) from _mat map's blue channel to use as locations.
Type (attribute[1])Type: StringDefaultnull
SubtypeId of a VoxelMaterial Definition, preferably one that gives valuable ore.
Start (attribute[1])Type: SingleDefault5
How many meters underground to start this deposit.
Depth (attribute[1])Type: SingleDefault10
How many meters deep this deposit goes.
TargetColor (attribute[1])Type: StringDefaultnull
Optional. If defined it will color the voxel material on the surface above this ore, but with some hardcoded behavior instead of using the given color.

You only have 3 options:

  • If set to #FFFFFF, the surface texture will be get +100% saturation and -8% value (HSV multiplier).
  • If set to any other color, the surface texture will get -90% saturation and -8% value (HSV multiplier).
  • Don't set it at all to not affect the surface texture.
Note: the recoloring does not affect grass.
ColorInfluence (attribute[1])Type: SingleDefault0
Not used at all, it's hardcoded to always be 256 internally.
Example:
<OreMappings>
  <Ore Value="200" Type="Iron_02" Start="3" Depth="7" TargetColor="#9BFF00FF" ColorInfluence="0.0" />
  <!-- ... -->
</OreMappings>

SurfaceDetail

<SurfaceDetail>
Type: MyPlanetSurfaceDetailDefaultnull
<Texture>Type: StringDefaultnull
<Size>Type: SingleDefault0
<Scale>Type: SingleDefault0
<Slope>Type: SerializableRangeDefault0, 0
<Transition>Type: SingleDefault0
Example:
<SurfaceDetail>
  <Texture>Data/PlanetDataFiles/Extra/material_detail_4</Texture>
  <Size>384</Size>
  <Scale>7</Scale>
  <Slope Min="8" Max="90" />
  <Transition>100</Transition>
</SurfaceDetail>

EnvironmentItems

<EnvironmentItems>
Type: PlanetEnvironmentItemMapping[]Defaultnull
Defines items like trees, bushes and voxelmaps that can spawn on the surface.

Note: If <Environment> is set, then this is ignored and the spawnables are defined at ProceduralWorldEnvironment's <EnvironmentMappings> instead.

Each <Item> can contain:
<Biomes>Type: Int32[]Defaultnull
Required. List of pixel values (0 to 255) from _mat maps's green channel to use as possible spawn areas. It will be further filtered by <Materials>.
Example:
<Biomes>
  <Biome>45</Biome>
  <!-- ... -->
</Biomes>
If not defined it will be considered as one entry of value 0.
<Materials>Type: String[]Defaultnull
Required. List of SubtypeIds of VoxelMaterial Definitions, any of which is required to be at the designated biomes in order to allow spawning.
Example:
<Materials>
  <Material>Rocks_grass</Material>
  <!-- ... -->
</Materials>
<Items>Type: MyPlanetEnvironmentItemDef[]Defaultnull
List of environment items to randomly pick from.
Each <Item> can contain:
TypeId (attribute[1])Type: StringDefaultnull
Available values:

Warning: As shown above, these are not real types but key words that are hacked together to refer to something else.

Can have more types, such as bot spawners, by switching to the advanced ProceduralWorldEnvironment via <Environment>.
SubtypeId (attribute[1])Type: StringDefaultnull
Subtype of a definition depending on the chosen TypeId, see there for the real definitions it will be searching.
If empty, it will say "Missing subtype for item of type" or if the TypeId is set to MyObjectBuilder_VoxelMapStorageDefinition, it will then use GroupId and ModifierId to generate a subtypeId and a VoxelMapCollection definition along with it.
Density (attribute[1])Type: SingleDefault0
Unknown exact behavior.
Gets halved if TypeId is either MyObjectBuilder_DestroyableItems or MyObjectBuilder_VoxelMapStorageDefinition.
GroupId (attribute[1])Type: StringDefaultnull
Required only if the following things are true:
  • TypeId is MyObjectBuilder_VoxelMapStorageDefinition.
  • SubtypeId is undefined.

Otherwise, both this and ModifierId are ignored.


If the above conditions apply:

First it will create a composite subtypeId from this plus ModifierId in the format: G(<GroupId>)M(<ModifierId>).
For example if GroupId is set to "SnowCoverageIronCore" and ModifierId is set to "EarthSnowArea", the resulting subtype would be "G(SnowCoverageIronCore)M(EarthSnowArea)".

Then it will look for a VoxelMapCollection Definition with that generated subtype. If found, it will simply reference it and both this and ModifierId have no other purposes.

Otherwise, if the VoxelMapCollection definition is not found, it will instead generate one (in-memory) with the following data:

Refer to those links on what those elements expect from their values.
ModifierId (attribute[1])Type: StringDefaultnull
Refer to GroupId.
Obsolete elements
IsDetail (attribute[1])Type: BooleanDefaultfalse
Not used.
Offset (attribute[1])Type: SingleDefault0
Not used.
MaxRoll (attribute[1])Type: SingleDefault0
Not used.
<GroupIndex>Type: Int32Default-1
Not used.
<ModifierIndex>Type: Int32Default-1
Not used.
<BaseColor>Type: Vector3Default0,0,0
Not used.
<ColorSpread>Type: Vector3Default0,0,0
Not used.
<Rule>Type: MyPlanetSurfaceRuleDefaultnull
Optional. Additional geometric rules.
<Height>Type: SerializableRangeDefault0, 1
The minimum and maximum relative height to allow within.

The values ratios between the planet <HillParams>'s Min and Max, where 0 here represents the HillParams's Min, and 1 represents HillParams's Max, and decimals in-between allowed of course.

Example:
<Height Min="0.4" Max="0.7" />
<Latitude>Type: SymmetricSerializableRangeDefault-90, 90, true
Angles away from the equator in degrees.

0 is at the equator and 90 is at either pole. If the Mirror attribute is set to false, then the world-up planet side is -90 and the world-down side is 90.

Example:
<Latitude Min="-90" Max="90" Mirror="true" />
<Longitude>Type: SerializableRangeDefault-180, 180
Angles around the world-up axis, where 0 is on the world-back side of the planet, and 90 is on the world-right side.
Example:
<Longitude Min="-180" Max="180" />
<Slope>Type: SerializableRangeDefault0, 90
Angles in degrees of terrain slope.
Example:
<Slope Min="0" Max="90" />
Example:
<EnvironmentItems>
  <Item>
    <Biomes>
      <Biome>255</Biome>
	  <!-- ... -->
    </Biomes>
    <Materials>
      <Material>Grass</Material>
	  <!-- ... -->
    </Materials>
    <Items>
      <Item TypeId="MyObjectBuilder_Trees" SubtypeId="GrassOldForestMedium" Density="0.4"/>
      <Item TypeId="MyObjectBuilder_DestroyableItems" SubtypeId="GrassOldFoliage" Density="0.6"/>
	  <Item TypeId="MyObjectBuilder_VoxelMapStorageDefinition" SubtypeId="alienrockyterrain_snowtop_largestone" Density="0.001" />
      <Item TypeId="MyObjectBuilder_VoxelMapStorageDefinition" GroupId="SnowCoverageIronCore" ModifierId="EarthSnowArea" Density="0.002" />
	  <!-- ... -->
    </Items>
    <Rule>
      <Height Min="0" Max="1"/>
      <Latitude Min="-90" Max="90" Mirror="true" />
      <Longitude Min="-180" Max="180"/>
      <Slope Min="0" Max="90"/>
    </Rule>
  </Item>
  <!-- ... -->
</EnvironmentItems>

Atmosphere Mechanics

HasAtmosphere

<HasAtmosphere>
Type: Nullable<Boolean>Defaultfalse
Whether the planet has an atmosphere, both visually and mechanically.
Warning: Gets written to save file (as <HasAtmosphere>) therefore changing the definition will not affect spawned planets.

Atmosphere

<Atmosphere>
Type: MyPlanetAtmosphereDefault(see deeper)
Atmosphere functional properties.

Contents:

<Density>Type: SingleDefault1
Air density, usually from 0.0 to 1.0.

Affects <OxygenDensity>, thrusters with <EffectivenessAtMin/MaxInfluence> and a few other things in the game.

Air density at any given position is calculated from that position's distance to the planet's center. Full density from center to the planet radius away, then linearly drops to 0 as you approach the atmosphere ceiling (defined by <LimitAltitude>).
<Breathable>Type: BooleanDefaultfalse
If turned off then <OxygenDensity> will be ignored.
<OxygenDensity>Type: SingleDefault1
Ratio of air density at current position of which is oxygen.

Affects characters being able to breathe, temperature, and a few more things.
Affected by weather's <OxygenLevelModifier>.

Usually 0 to 1 but can be negative or even over 1 which will affect how other oxygen providers (other planets or ModAPI's IMyOxygenProvider) are tallied up, however after that tally the final oxygen value is capped between 0 and 1.
<LimitAltitude>Type: SingleDefault2
Ratio of <HillParams>'s max to use as the atmosphere ceiling past which there's no air.

Formula:
AtmosphereMeters = PlanetRadius * HillParams.Max * Atmosphere.LimitAltitude

(PlanetRadius)

<MaxWindSpeed>Type: SingleDefault0
Ratio of air density at current position that is used as wind speed, unknown unit. 80 is used by all vanilla planets.

Affects wind turbines' output.

Affected by weather's <WindOutputModifier>.

DefaultSurfaceTemperature

<DefaultSurfaceTemperature>
Type: MyTemperatureLevelDefaultCozy
Only a hint that contributes to the final temperature. Visit the Temperature reference page for details on how the temperature is calculated.

In short, affected by day or night, atmosphere oxygen, current weather's multipliers, and altitude.

Available values:

  • ExtremeFreeze
  • Freeze
  • Cozy
  • Hot
  • ExtremeHot

AllowMeteors

<AllowMeteors>
Type: BooleanDefaulttrue
Whether meteorites can target players that are within this planet's gravity field.
(Added in SE v1.207)

SolarRadiationProtectionFactor

<SolarRadiationProtectionFactor>
Type: SingleDefault1
How much protection the atmosphere offers against solar radiation.
This multiplied by the air density at the current position results in the ratio that will reduce radiation gain.
(Added in SE v1.207)

RadiationGain

<RadiationGain>
Type: SingleDefault0
Optional. Players get radiation per second while on this planet. Capped between 0 and 1000. Vanilla radiation stat goes to 100.
(Added in SE v1.207)

RadiationStartHeight

<RadiationStartHeight>
Type: Nullable<Single>Defaultnull
Optional. Ratios of planet heights to use for <RadiationGain>.

If either this or <RadiationEndHeight> is not null, then both will be used and the one that's null will be either 0 for this or 1 for <RadiationEndHeight>.
Then these are the ratio between the lowest terrain and the highest terrain (as defined by <HillParams>).

Otherwise if both are left null, radiation gain will be constant up to the tallest mountain, after which it diminishes going towards outer space.
(Added in SE v1.207)

RadiationEndHeight

<RadiationEndHeight>
Type: Nullable<Single>Defaultnull
Optional. Ratios of planet heights to use for <RadiationGain>.
See <RadiationStartHeight> for details.
(Added in SE v1.207)

Atmosphere Visuals

AtmosphereSettings

<AtmosphereSettings>
Type: Nullable<MyAtmosphereSettings>Default(see example)
Atmosphere visual properties.

Contents:

<Intensity>Type: SingleDefault1
Overall atmosphere opacity, affects the volumetric fog and indirect light.
Resets to 1 if set to 0.
<Scale>Type: SingleDefault0
Affects the "atmosphere radius" which is used for the visual atmosphere but some other logic use it too, like weather.

Warning: Gets written to save file (as <AtmosphereRadius>) therefore changing the definition will not affect spawned planets.

This value is ignored if 1 or below, which results in the atmosphere radius being the planet radius multiplied by 1.75.
If higher than 1, it then is added to 1 and used as a multiplier to planet radius.

if Scale > 1
  AtmosphereRadius = PlanetRadius * (1 + AtmosphereSettings.Scale)
else
  AtmosphereRadius = PlanetRadius * 1.75

(PlanetRadius)

<SeaLevelModifier>Type: SingleDefault1
Shifts the entire atmosphere.

GroundRadius = PlanetRadius * 1.01 * AtmosphereSettings.SeaLevelModifier

(PlanetRadius)

Resets to 1 if set to 0.

<AtmosphereTopModifier>Type: SingleDefault1
Resets to 1 if set to 0.
<RayleighScattering>Type: Vector3Default0,0,0
Overall atmosphere color.

The science behind this: Rayleigh scattering.

Example:
<RayleighScattering>
  <X>100</X>
  <Y>84</Y>
  <Z>63</Z>
</RayleighScattering>
Where X/Y/Z are R/G/B.
<RayleighHeight>Type: SingleDefault0
Atmosphere height when close to the planet, <RayleighTransitionModifier> defines how close is close.
<RayleighHeightSpace>Type: SingleDefault0
Atmosphere height when far from the planet, <RayleighTransitionModifier> defines how far is far.
Note: If 0, will use <RayleighHeight>'s value.
<RayleighTransitionModifier>Type: SingleDefault1
Lower values will transition to the ground level <RayleighHeight> later when approaching from space.
Resets to 1 if set to 0.
<FogIntensity>Type: SingleDefault0
Atmosphere's fog affecting terrain and objects, start from 1 and tweak as needed.
<MieG>Type: SingleDefault0
Sun size in the sky. Starting from 1.0 and going slightly lower (e.g. 0.998) would make it larger.
<MieHeight>Type: SingleDefault0
<MieColorScattering>Type: Vector3Default0,0,0
How the sun light interacts with the atmosphere.

The science behind this: Mie scattering - atmospheric science.

Example:
<MieColorScattering>
  <X>44</X>
  <Y>62</Y>
  <Z>150</Z>
</MieColorScattering>

Where X/Y/Z are R/G/B.

If <X> is 0, this will use <MieScattering> for all 3 values instead.
<MieScattering>Type: SingleDefault0
Only used if <MieColorScattering> is not defined or its X is set to 0, to fill all 3 of its values with this one's.
<SunColor>Type: Vector3Default1,1,1
Color of the sun light, in sRGB format. Example:
<SunColor>
  <X>1.0</X>
  <Y>1.0</Y>
  <Z>1.0</Z>
</SunColor>
Where X/Y/Z are R/G/B from 0.0 to 1.0, but can probably go past too.
<SunSpecularColor>Type: Vector3Default1,1,1
Color of sun shining on surfaces, in sRGB format. Example:
<SunSpecularColor>
  <X>1</X>
  <Y>0.984</Y>
  <Z>0.843</Z>
</SunSpecularColor>
Where X/Y/Z are R/G/B from 0.0 to 1.0, but can probably go past too.

Example and defaults if entirely undefined:

<AtmosphereSettings>
<RayleighScattering>
    <X>20.0</X>
    <Y>7.5</Y>
    <Z>10.0</Z>
  </RayleighScattering>
  <MieScattering>50</MieScattering>
  <MieColorScattering>
    <X>50.0</X>
    <Y>50.0</Y>
    <Z>50.0</Z>
  </MieColorScattering>
  <RayleighHeight>10</RayleighHeight>
  <RayleighHeightSpace>10</RayleighHeightSpace>
  <RayleighTransitionModifier>1</RayleighTransitionModifier>
  <MieHeight>50</MieHeight>
  <MieG>0.9998</MieG>
  <Intensity>1</Intensity>
  <FogIntensity>0</FogIntensity>
  <SeaLevelModifier>1</SeaLevelModifier>
  <AtmosphereTopModifier>1</AtmosphereTopModifier>
  <Scale>0.5</Scale>
  <SunColor>
    <X>1.0</X>
    <Y>1.0</Y>
    <Z>1.0</Z>
  </SunColor>
  <SunSpecularColor>
    <X>1.0</X>
    <Y>1.0</Y>
    <Z>1.0</Z>
  </SunSpecularColor>
</AtmosphereSettings>

CloudLayers

<CloudLayers>
Type: List<MyCloudLayerSettings>Defaultnull
List of cloud spheres and textures to roll around the planet.

Does not require an atmosphere.

Each <CloudLayer> can contain:

<Model>Type: StringDefaultnull
The model used for this cloud layer.

Path to a .mwm file relative to current mod's folder. Falls back to game folder if not found in current mod. Referencing assets in other mods

Can be any shape you desire, which can be abused to make planet rings and such.
All vanilla planets use Models/Environment/Sky/CloudSphere.mwm.

<Textures>Type: List<String>Defaultnull
This one is a bit tricky.

The game needs 2 textures, a _cm and an _alphamask. To point this definition to them you must write only one entry (it will ignore subsequent entries) and that path must be one of the files but with the _cm or _alphamask removed from the name. This does mean it will point to a file that does not exist, but this is fine because the game will automatically look for 2 files where it inserts the _cm and _alphamask before the .dds extension of your given path.
For example, if you have FancyClouds_cm.dds and FancyClouds_alphamask.dds in Textures\YourPlanet folder, then you need to declare this as Textures\YourPlanet\FancyClouds.dds.

Those files can be either in the current mod or in the game folder. The files must be .dds and it checks against ".dds" exactly, therefore ".DDS" will not match and will remove your entry from the list.

If left null it will use the _cm and _alphamask textures from first mesh from the model.

Syntax:

<Textures>
  <Texture>Textures/Models/Environment/Sky/EarthFarClouds.dds</Texture>
</Textures>
<RelativeAltitude>Type: SingleDefault0
Formula used:
A = (PlanetRadius + HighestTerrain) / 2
Altitude = A + (HighestTerrain - A) * CloudLayer.RelativeAltitude

(PlanetRadius, HighestTerrain)

<ScalingEnabled>Type: BooleanDefaultfalse
<InitialRotation>Type: SingleDefault0
Starting rotation angle in radians.
<AngularVelocity>Type: SingleDefault0
Rotation speed in radians per 10 ticks probably.
Can be negative to spin the other way.
<RotationAxis>Type: Vector3DDefault0,1,0
Axis around which this cloud layer is spinning.

Gets automatically normalized therefore can input whatever scale you wish.
If set to 0,0,0 it will default to 0,1,0 again.

Example:
<RotationAxis>
  <X>-0.2</X>
  <Y>1</Y>
  <Z>0.2</Z>
</RotationAxis>
Vanilla SBC files sometimes have a <W> here too, but it is not valid.
<FadeOutRelativeAltitudeStart>Type: SingleDefault0
<FadeOutRelativeAltitudeEnd>Type: SingleDefault0
<ApplyFogRelativeDistance>Type: SingleDefault0
<Color>Type: Vector4Default1,1,1,1
Color multiplier. If Alpha/W is 0 then this layer is skipped.
Usage:
<Color>
  <X>0.5</X>
  <Y>0.2</Y>
  <Z>1.0</Z>
  <W>0.25</W>
</Color>
Where X/Y/Z/W = Red/Green/Blue/Alpha.
Example:
<CloudLayers>
  <CloudLayer>
    <Textures>
      <Texture>Textures\Clouds.dds</Texture>
    </Textures>
    <RelativeAltitude>0</RelativeAltitude>
    <ScalingEnabled>false</ScalingEnabled>
    <InitialRotation>0</InitialRotation>
    <AngularVelocity>0</AngularVelocity>
	<RotationAxis>
      <X>0</X>
      <Y>0</Y>
      <Z>0</Z>
    </RotationAxis>
    <FadeOutRelativeAltitudeStart>0</FadeOutRelativeAltitudeStart>
    <FadeOutRelativeAltitudeEnd>0</FadeOutRelativeAltitudeEnd>
    <ApplyFogRelativeDistance>0</ApplyFogRelativeDistance>
    <Color>
      <X>1</X>
      <Y>1</Y>
      <Z>1</Z>
      <W>1</W>
    </Color>
  </CloudLayer>
  <!-- ... -->
</CloudLayers>

HostileAtmosphereColorShift

<HostileAtmosphereColorShift>
Type: MyAtmosphereColorShiftDefaultall 0 to 0
Possibly not used at all. Syntax:
<HostileAtmosphereColorShift>
  <R Min="0.0" Max="1.0" />
  <G Min="0.0" Max="1.0" />
  <B Min="0.0" Max="1.0" />
</HostileAtmosphereColorShift>

Wildlife

AnimalSpawnInfo

<AnimalSpawnInfo>
Type: MyPlanetAnimalSpawnInfoDefaultnull
Optional. Animals to spawn.

If <NightAnimalSpawnInfo> is defined with at least one entry, then this list becomes animals during the day, otherwise it's during any time.

Advanced location-based spawns (ProceduralWorldEnvironment)

Can have additional location-specific bot spawns by using the advanced <Environment> way.
But note that this <AnimalSpawnInfo> element is still required to have the same bots as the ones defined in ProceduralWorldEnvironment/BotCollection, otherwise the ones spawned by that will be sitting there doing nothing.

This <AnimalSpawnInfo> does not need to actually spawn any bots for the above requirement, therefore it can set up to be impossible to spawn any (for example setting <WaveCountMin/Max> to 0).

Contains more elements:

<WaveCountMin>Type: Int32Default1
Minimum number of animals to spawn in one go.
<WaveCountMax>Type: Int32Default5
Maximum number of animals to spawn in one go.
<SpawnDistMin>Type: SingleDefault10
Closest distance in meters that the animals can spawn.
<SpawnDistMax>Type: SingleDefault140
Farthest distance in meters that the animals can spawn.
<SpawnDelayMin>Type: Int32Default30000
Time in milliseconds.
<SpawnDelayMax>Type: Int32Default60000
Time in milliseconds.
<KillDelay>Type: Int32Default120000
Time in milliseconds.
<Animals>Type: MyPlanetAnimal[]Defaultnull
List of AnimalBot Definition subtypeIds (Bots.sbc) to be randomly picked for spawning with these settings.

Does not work for any other bot type, it will only look for AnimalBot types.
If using "Wolf" subtype then it will be succeptible to EnableWolfs world setting, otherwise every other animal type is toggled by EnableSpiders world setting.

The list of possible animal subtypes in unmodded Space Engineers includes the following: Wolf, SpaceSpider, SpaceSpiderBlack, SpaceSpiderBrown, SpaceSpiderGreen.
Example:
<AnimalSpawnInfo>
  <Animals>
    <Animal Type="SpaceSpiderGreen" />
    <!-- ... -->
  </Animals>
  <SpawnDelayMin>30000</SpawnDelayMin>
  <SpawnDelayMax>60000</SpawnDelayMax>
  <SpawnDistMin>10</SpawnDistMin>
  <SpawnDistMax>140</SpawnDistMax>
  <KillDelay>120000</KillDelay>
  <WaveCountMin>1</WaveCountMin>
  <WaveCountMax>5</WaveCountMax>
</AnimalSpawnInfo>

NightAnimalSpawnInfo

<NightAnimalSpawnInfo>
Type: MyPlanetAnimalSpawnInfoDefaultnull
Optional. Animals to spawn only at night.

Same syntax as <AnimalSpawnInfo>.

Might require at least one entry in <AnimalSpawnInfo> for this to function, needs testing to confirm.

Ambiance

SoundRules

<SoundRules>
Type: MySerializablePlanetEnvironmentalSoundRule[]Defaultnull
List of sounds to play in the background with some positioning rules.

Each <SoundRule> can have:

<EnvironmentSound>Type: BooleanDefaultfalse
Plays continuously while the below conditions match.
SubtypeId (without Arc or Real prefix) of an audio definition (Audio_*.sbc)..
<Height>Type: SerializableRangeDefault0, 1
The minimum and maximum relative height to allow within.

The values ratios between the planet <HillParams>'s Min and Max, where 0 here represents the HillParams's Min, and 1 represents HillParams's Max, and decimals in-between allowed of course.

Example:
<Height Min="0.4" Max="0.7" />
<Latitude>Type: SymmetricSerializableRangeDefault-90, 90, true
Angles away from the equator in degrees.

0 is at the equator and 90 is at either pole. If the Mirror attribute is set to false, then the world-up planet side is -90 and the world-down side is 90.

Example:
<Latitude Min="-90" Max="90" Mirror="true" />
<SunAngleFromZenith>Type: SerializableRangeDefault0, 180
Angle in degrees of the Sun being away from the top of the sky (zenith).

Meaning, at 0 degrees the Sun is directly upwards from the surface (noon), and at 180 degrees the Sun is on the exact opposite side of the planet (midnight).
This value does not go negative, resulting in both morning and evening being the same angle.

Example:
<SunAngleFromZenith Min="0" Max="180" />
Example from Triton:
<SoundRules>
  <SoundRule>
    <Height Min="0" Max="1"/>
	<Latitude Min="-90" Max="90" Mirror="true" />
    <SunAngleFromZenith Min="0" Max="90"/>
    <EnvironmentSound>AmbTitanMoonDay</EnvironmentSound>
  </SoundRule>
  <SoundRule>
    <Height Min="0" Max="1"/>
	<Latitude Min="-90" Max="90" Mirror="true" />
    <SunAngleFromZenith Min="90" Max="180"/>
    <EnvironmentSound>AmbTitanMoonNight</EnvironmentSound>
  </SoundRule>
  <!-- ... -->
</SoundRules>

MusicCategories

<MusicCategories>
Type: List<MyMusicCategory>Defaultnull
List of music categories to play while visiting this planet.

Each <MusicCategory> can have:

Category (attribute[1])Type: StringDefaultnull
Frequency (attribute[1])Type: SingleDefault1
Example:
<MusicCategories>
  <MusicCategory Category="Mystery" Frequency="0.15"/>
  <!-- ... -->
</MusicCategories>

Weather

GlobalWeather

<GlobalWeather>
Type: BooleanDefaultFalse
Whether weather is for the entire planet instead of localized.
Does not work because of a game bug.

PersistentWeather

<PersistentWeather>
Type: StringDefaultnull
Optional. A <SubtypeId> of a WeatherEffect Definition to have as constant weather, which also prevents other weather from being used on this planet.
(Added in SE v1.207)

WeatherFrequencyMin

<WeatherFrequencyMin>
Type: Int32Default0
Minimum amount of seconds between weather changes.

WeatherFrequencyMax

<WeatherFrequencyMax>
Type: Int32Default0
Maximum amount of seconds between weather changes.

WeatherGenerators

<WeatherGenerators>
Type: List<MyWeatherGeneratorSettings>Defaultnull
List of weather effects.

Each <WeatherGenerator> can contain:

<Voxel>Type: StringDefaultnull
The <MaterialTypeName> of a voxel material where the following list of weathers are allowed to spawn.
<Weathers>Type: List<MyWeatherGeneratorVoxelSettings>Defaultnull
List of weather effects, picked with weighted random.

Each <Weather> can contain:

<Name>Type: StringDefaultnull
Required. The <SubtypeId> of a WeatherEffect Definition to use.
<Weight>Type: Int32Default0
Required at least 1. Higher numbers increase the chance for this weather to be picked, but the exact chance depends on the other weathers in this list.
<MinLength>Type: Int32Default0
Required. Randomly picked duration between this and <MaxLength>, in seconds.
<MaxLength>Type: Int32Default0
Required. See <MinLength>.
<SpawnOffset>Type: Int32Default0
Generate the weather this many meters away from the player.

Advanced

Environment

<Environment>
Type: Nullable<SerializableDefinitionId>Defaultnull
Optional. Id of a definition that inherits WorldEnvironmentBase, currently only ProceduralWorldEnvironment exists.

Note: All vanilla planets have this not declared.

If not defined, the game will generate a ProceduralWorldEnvironment with some hardcoded defaults and the entries from <EnvironmentItems>.

MaterialBlending

<MaterialBlending>
Type: Nullable<MyPlanetMaterialBlendSettings>Default(see example)
Optional.
Texture (attribute[1])Type: StringDefaultnull
Note: this is hardcoded to look in the game folder.
Path to a .png file but without the .png as the game will add it automatically.
CellSize (attribute[1])Type: Int32Default0
Example:
<MaterialBlending>
  <Texture>Data/PlanetDataFiles/Extra/material_blend_grass</Texture>
  <CellSize>64</CellSize>
</MaterialBlending>

MesherPostprocessing

<MesherPostprocessing>
Type: VoxelMesherComponentDefinitionDefaultnull
Optional, but if left null then the game will write to its log: "PERFORMANCE WARNING: Postprocessing voxel triangle decimation steps not defined for ...".

A set of post-processing steps to perform on the voxel mesh generator.
Contents:

<PostprocessingSteps>Type(complex)Default(empty)
List of voxel post processing techniques.

Each <Step> can contain:

xsi:type (attribute[1])Type: StringDefaultnull
Only MyObjectBuilder_VoxelPostprocessingDecimate exists, which simplifies the mesh based on the given parameters.
ForPhysics (attribute[1])Type: BooleanDefaultfalse
Changes which voxel mesh it's applied to:
  • true applies to physical mesh only, which seems to only use LOD 0.
  • false applies to visual mesh only, however this does not work.
For seeing the voxel collisions, visit the debug views page for an alternative to draw primitives because it does not draw voxel physics.
<LodSettings>Type: List<Settings>Defaultnull
Game's documentation: Set of lod range settings pairs.

Each <Settings> can contain:

FromLod (attribute[1])Type: Int32Default0
Game's documentation: Minimum lod level these settings apply. Subsequent sets must have strictly ascending lods.
Must not be negative.
<FeatureAngle>Type: SingleDefault0
Game's documentation: The minimum angle to be considered a feature edge.
Value is in degrees.
<EdgeThreshold>Type: SingleDefault0
Game's documentation: Distance threshold for an edge vertex to be discarded.
<PlaneThreshold>Type: SingleDefault0
Game's documentation: Distance threshold for an internal vertex to be discarded.
<IgnoreEdges>Type: BooleanDefaulttrue
Game's documentation: Whether edge vertices should be considered or not for removal.

Example from vanilla planets (all seem to use the same settings):

<MesherPostprocessing xsi:type="MyObjectBuilder_VoxelMesherComponentDefinition">
  <PostprocessingSteps>
    <Step xsi:type="MyObjectBuilder_VoxelPostprocessingDecimate" ForPhysics="true">
      <LodSettings>
        <Settings FromLod="0">
          <FeatureAngle>15</FeatureAngle>
          <EdgeThreshold>.04</EdgeThreshold>
          <PlaneThreshold>.02</PlaneThreshold>
		  <IgnoreEdges>true</IgnoreEdges>
        </Settings>
        <Settings FromLod="1">
          <FeatureAngle>15</FeatureAngle>
          <EdgeThreshold>.04</EdgeThreshold>
          <PlaneThreshold>.04</PlaneThreshold>
		  <IgnoreEdges>true</IgnoreEdges>
        </Settings>
        <Settings FromLod="2">
          <FeatureAngle>15</FeatureAngle>
          <EdgeThreshold>.06</EdgeThreshold>
          <PlaneThreshold>.06</PlaneThreshold>
		  <IgnoreEdges>true</IgnoreEdges>
        </Settings>
        <!-- ... -->
      </LodSettings>
    </Step>
    <!-- ... -->
  </PostprocessingSteps>
</MesherPostprocessing>

(Top) | From DefinitionBase:

Common

Id

<Id>
Type: SerializableDefinitionIdDefault(invalid)
The type and subtype combined make up a unique identifier for this definition.

If two definitions use the same Type+Subtype (Subtypes are only unique per Type), then the last to load will override the first one(s). For more details see Things to know about SBC.

<TypeId>Type: stringDefault(invalid)
Must be an existing type with or without the "MyObjectBuilder_" prefix.

Some types require an xsi:type, refer to the vanilla files for the exact pairing.

TypeId vs xsi:type
<SubtypeId>Type: stringDefault(empty)
This can be invented and only needs to be unique per TypeId.

Vanilla game re-uses some subtypes over multiple types (e.g. Iron is used for Ore type and Ingot type).

An empty value is also a valid subtype (which vanilla also uses on at least 5 blocks).
Type (attribute[1])Type: stringDefault(invalid)
Same behavior as <TypeId>, do not define both.
Subtype (attribute[1])Type: stringDefault(empty)
Same behavior as <SubtypeId>, do not define both.
Example:
<Id>
  <TypeId>CubeBlock</TypeId>
  <SubtypeId>FancyTable</SubtypeId>
</Id>

Because it has attribute alternatives it can also be declared as:

<Id Type="CubeBlock" Subtype="FancyTable" />

DisplayName

<DisplayName>
Type: StringDefaultnull
If the object defined here is visible anywhere in the game GUI, this would be the name shown for it. In cases where it is used, it is very much required.

Can be plain-text.
If the text contains DisplayName_ then:

Description

<Description>
Type: StringDefaultnull
Optional. If the object defined here is shown with a description in the game GUI (Hotbar/G-menu, HUD, etc) then this is the place to write it.

Can be plain-text.
If the text contains Description_ then:

If the final text (plain, localized or variable-replaced) contains {0}, {1}, etc, then they will replaced by kb&m control binds defined in <DescriptionArgs>.

DescriptionArgs

<DescriptionArgs>
Type: StringDefaultnull
Optional. A comma-separated list of control IDs which are referenced in <Description> by {number} tags, which then get replaced by the keyboard or mouse bind that the viewer has for those controls.
Example:
<Description>Press {0} to fire, {1} to change color, {2} to interact.</description>
<DescriptionArgs>PRIMARY_TOOL_ACTION,CUBE_COLOR_CHANGE,USE</DescriptionArgs>

And each player will see their current binds for those actions.

The control IDs can be found in your %appdata%/SpaceEngineers/SpaceEngineers.cfg at the ControlsButtons section.

Icon

<Icon>
Type: String[]Defaultnull
Icon(s) for the definition which may or may not be used depending on the definition type.

Path to a .dds or .png file relative to current mod's folder. Falls back to game folder if not found in current mod. Referencing assets in other mods

Can be declared multiple times which will stack icons on top of eachother, however it will not work for all definitions.

Known definitions to work or not work with multiple icons
  • Working: Blocks, BlockVariantGroups and component items seen in G-menu, BlockInfo (HUD right side) and toolbars; Blueprints in terminal production tab; Blocks and PhysicalItems in gamepad HUD.
  • Partial: Blocks seen in terminal.
  • Not working: HandItems (uses PhysicalItem's icon instead); Blocks and BlockVariantGroups seen in build planner, radial menu and some economy GUIs; PhysicalItems in economy GUIs and stores; Prefabs in stores; BlueprintClass (tabs) in terminal production tab; BankingSystemDefinition (Game\BankingSystem.sbc); Emotes (both kinds of definitions) in gamepad HUD; Block skins; RespawnShips.
  • Special cases: Economy contracts, FactionIcons Definition.

DLC

<DLC>
Type: String[]Defaultnull
Optional. The DLC subtypeId that this definition will require.

For the IDs, refer to <SE>\Content\Data\Game\DLCs.sbc.
Can be declared multiple times to require multiple DLCs.

Most definition types won't check for this, the ones that do: blocks, emotes and possibly anything else that can be placed in the toolbar.

AvailableInSurvival

<AvailableInSurvival>
Type: BooleanDefaulttrue
Depends on the definition if it uses this, and if it does then this determines whether it can be accessible in survival game mode.

Currently known definitions that do use this:

Public

<Public>
Type: BooleanDefaulttrue
If the definition is visible or accessible in some cases.
For blocks, this only hides them and they can still be built using projectors and other means.

Enabled

Enabled (attribute[1])
Type: BooleanDefaulttrue
If set to false it will remove the definition after it's been loaded.
Example usage:
<Definition Enabled="false">

The "Definition" above is the opening element that for the entire definition, not an inner node like <DisplayName> is.

The opening node can have a different name for other definitions, some examples <Component>, <Blueprint>, etc.

xsi:type

xsi:type (attribute[1])
Type: stringDefaultnull

Name of an object that this definition will be deserialized as.
Sometimes required, depends on the definition. The wiki page for any given definition will mention at the top what xsi:type it requires, if any. The game's sbc files are also a reference on what xsi:types are required for a given definition.

This attribute is available on all elements and comes from the XML specification. This game relies on this attribute to change which sub-definition object is used to deserialize that element's contents. It's what allows, for example, a thruster to have unique elements (such as <MinPlanetaryInfluence>) that no other block definitions have.

For more details on how this relates to the TypeId, and usage examples, see: Things to know about SBC - TypeId vs xsi:type.

Obsolete Elements

Elements that exist in the game code or vanilla SBC, but do nothing

Note: this list only contains root-level from this definition only, nothing from inherited ones.

<MaterialsMinDepth>Type: Nullable<SerializableRange>Defaultnull
Not used.
<MaterialsMaxDepth>Type: Nullable<SerializableRange>Defaultnull
Not used.
<StationBlockingMaterials>Type: List<SerializableDefinitionId>Default(empty)
Not used.
<SectorDensity>Type: Nullable<Single>Default0.0017
Not used.
<Deviation>Type: -Default-
No longer exists.
<MaximumOxygen>Type: -Default-
No longer exists.
<MaxBotCount>Type: -Default-
No longer exists.
<MaxBotsPerPlayer>Type: -Default-
No longer exists.
<DistortionTable>Type: MyPlanetDistortionDefinition[]Default(empty)
Not used by the game.

Each <Distortion> can have:

Type (attribute[1])Type: StringDefaultnull
Available values: Billow, RidgedMultifractal, Perlin, Simplex.
Value (attribute[1])Type: byteDefault0
Frequency (attribute[1])Type: SingleDefault1
Height (attribute[1])Type: SingleDefault1
LayerCount (attribute[1])Type: Int32Default1
Example:
<DistortionTable>
  <Distortion Type="Perlin" Value="92" Frequency="10" Height="4" LayerCount="6" />
  <!-- ... -->
</DistortionTable>