PlanetGenerator Definition
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:
- No suffix - heightmaps that define the shape of the terrain, ideally as 16-bit grayscale.
_matsuffix - has 3 different data maps combined into one file:- Red pixels - used by <CustomMaterialTable>, <ComplexMaterials> and possibly <DefaultSurfaceMaterial>.
- Green pixels - used by <EnvironmentItems>.
- Blue pixels - used by <OreMappings>.
_addsuffix - no longer used (were called occlusion maps).
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).
In some docs below you'll stumble upon formulas that reference some variables without them being elements in this page:
PlanetRadiusrefers 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/HighestTerrainrefers to resulting terrain heights in meters as defined by <HillParams>.
Basics
InheritFrom<InheritFrom> | Type: String | Default: null | ||||||||||||||||||||||||
| Optional. A SubtypeId of another planet generator definition to inherit all settings except for: | ||||||||||||||||||||||||||
Difficulty<Difficulty> | Type: MyStringId | Default: DifficultyNormal | ||||||||||||||||||||||||
| 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> | Default: 1 | ||||||||||||||||||||||||
| Gravity acceleration (m/sยฒ) at all ground levels. Warning: Gets written to save file (as Ground being between LowestTerrain and HighestTerrain, as defined by <HillParams>. Outside of those ranges it's affected by <GravityFalloffPower>. | ||||||||||||||||||||||||||
GravityFalloffPower<GravityFalloffPower> | Type: Nullable<Single> | Default: 7 | ||||||||||||||||||||||||
| Affects how fast <SurfaceGravity> falls off towards outer space. Warning: Gets written to save file (as 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: String | Default: (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. | ||||||||||||||||||||||||||
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.
<PlanetMaps Material="true" Biome="true" Ores="true" />
| ||||||||||||||||||||||||||
MapProvider<MapProvider> | Type: PlanetMapProvider | Default: null | ||||||||||||||||||||||||
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" />
| ||||||||||||||||||||||||||
Terrain
HillParams<HillParams> | Type: Nullable<SerializableRange> | Default: null | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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)Example usage: <HillParams Min="-0.01" Max="0.12"/>
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
MinimumSurfaceLayerDepth<MinimumSurfaceLayerDepth> | Type: Single | Default: 4 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
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: MyPlanetMaterialDefinition | Default: null | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| The default material for the surface areas that have no rules. Contents:
Examples: <DefaultSurfaceMaterial Material="Snow" Value="0" MaxDepth="10"/>
<DefaultSurfaceMaterial>
<Layers>
<Layer Material="Dirt" Depth="5" />
<!-- ... -->
</Layers>
</DefaultSurfaceMaterial>
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
DefaultSubSurfaceMaterial<DefaultSubSurfaceMaterial> | Type: MyPlanetMaterialDefinition | Default: null | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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. <DefaultSubSurfaceMaterial Material="Stone" />
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
CustomMaterialTable<CustomMaterialTable> | Type: MyPlanetMaterialDefinition[] | Default: (empty) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Optional.
Each <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:
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
<OreMappings>
<Ore Value="200" Type="Iron_02" Start="3" Depth="7" TargetColor="#9BFF00FF" ColorInfluence="0.0" />
<!-- ... -->
</OreMappings>
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
SurfaceDetail<SurfaceDetail> | Type: MyPlanetSurfaceDetail | Default: null | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
<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[] | Default: null | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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. <Item> can contain:
<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> | Default: false | ||||||||||||||||||||||||||||||
| 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: MyPlanetAtmosphere | Default: (see deeper) | ||||||||||||||||||||||||||||||
| Atmosphere functional properties.
Contents:
| ||||||||||||||||||||||||||||||||
DefaultSurfaceTemperature<DefaultSurfaceTemperature> | Type: MyTemperatureLevel | Default: Cozy | ||||||||||||||||||||||||||||||
| 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:
| ||||||||||||||||||||||||||||||||
AllowMeteors<AllowMeteors> | Type: Boolean | Default: true | ||||||||||||||||||||||||||||||
| Whether meteorites can target players that are within this planet's gravity field. (Added in SE v1.207) | ||||||||||||||||||||||||||||||||
SolarRadiationProtectionFactor<SolarRadiationProtectionFactor> | Type: Single | Default: 1 | ||||||||||||||||||||||||||||||
| 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: Single | Default: 0 | ||||||||||||||||||||||||||||||
| 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> | Default: null | ||||||||||||||||||||||||||||||
| 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>. (Added in SE v1.207) | ||||||||||||||||||||||||||||||||
RadiationEndHeight<RadiationEndHeight> | Type: Nullable<Single> | Default: null | ||||||||||||||||||||||||||||||
| 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:
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> | Default: null | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| List of cloud spheres and textures to roll around the planet. Does not require an atmosphere. Each
<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: MyAtmosphereColorShift | Default: all 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: MyPlanetAnimalSpawnInfo | Default: null | ||||||||||||||||||||||||||||||||||||||||||||||||
| 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. Contains more elements:
<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: MyPlanetAnimalSpawnInfo | Default: null | ||||||||||||||||||||||||||||||||||||||||||||||||
| Optional. Animals to spawn only at night. Same syntax as <AnimalSpawnInfo>. | ||||||||||||||||||||||||||||||||||||||||||||||||||
Ambiance
SoundRules<SoundRules> | Type: MySerializablePlanetEnvironmentalSoundRule[] | Default: null | ||||||||||||||||||||||||
| List of sounds to play in the background with some positioning rules. Each
<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> | Default: null | ||||||||||||||||||||||||
| List of music categories to play while visiting this planet.
Each
<MusicCategories>
<MusicCategory Category="Mystery" Frequency="0.15"/>
<!-- ... -->
</MusicCategories>
| ||||||||||||||||||||||||||
Weather
GlobalWeather<GlobalWeather> | Type: Boolean | Default: False | ||||||||||||||||||||||||||||||||||||||||||
| Whether weather is for the entire planet instead of localized. Does not work because of a game bug. | ||||||||||||||||||||||||||||||||||||||||||||
PersistentWeather<PersistentWeather> | Type: String | Default: null | ||||||||||||||||||||||||||||||||||||||||||
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: Int32 | Default: 0 | ||||||||||||||||||||||||||||||||||||||||||
| Minimum amount of seconds between weather changes. | ||||||||||||||||||||||||||||||||||||||||||||
WeatherFrequencyMax<WeatherFrequencyMax> | Type: Int32 | Default: 0 | ||||||||||||||||||||||||||||||||||||||||||
| Maximum amount of seconds between weather changes. | ||||||||||||||||||||||||||||||||||||||||||||
WeatherGenerators<WeatherGenerators> | Type: List<MyWeatherGeneratorSettings> | Default: null | ||||||||||||||||||||||||||||||||||||||||||
| List of weather effects. Each
| ||||||||||||||||||||||||||||||||||||||||||||
Advanced
Environment<Environment> | Type: Nullable<SerializableDefinitionId> | Default: null | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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.
<MaterialBlending>
<Texture>Data/PlanetDataFiles/Extra/material_blend_grass</Texture>
<CellSize>64</CellSize>
</MaterialBlending>
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
MesherPostprocessing<MesherPostprocessing> | Type: VoxelMesherComponentDefinition | Default: null | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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.
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: SerializableDefinitionId | Default: (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.
<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: String | Default: null | ||||||||||||||||||||||||
| 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.
| ||||||||||||||||||||||||||
Description<Description> | Type: String | Default: null | ||||||||||||||||||||||||
| 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.
{0}, {1}, etc, then they will replaced by kb&m control binds defined in <DescriptionArgs>. | ||||||||||||||||||||||||||
DescriptionArgs<DescriptionArgs> | Type: String | Default: null | ||||||||||||||||||||||||
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. | ||||||||||||||||||||||||||
Icon<Icon> | Type: String[] | Default: null | ||||||||||||||||||||||||
| 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
| ||||||||||||||||||||||||||
DLC<DLC> | Type: String[] | Default: null | ||||||||||||||||||||||||
| Optional. The DLC subtypeId that this definition will require. For the IDs, refer to <SE>\Content\Data\Game\DLCs.sbc. | ||||||||||||||||||||||||||
AvailableInSurvival<AvailableInSurvival> | Type: Boolean | Default: true | ||||||||||||||||||||||||
| 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: Boolean | Default: true | ||||||||||||||||||||||||
| 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. | ||||||||||||||||||||||||||
EnabledEnabled (attribute[1]) | Type: Boolean | Default: true | ||||||||||||||||||||||||
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 <Component>, <Blueprint>, etc. | ||||||||||||||||||||||||||
xsi:typexsi:type (attribute[1]) | Type: string | Default: null | ||||||||||||||||||||||||
Name of an object that this definition will be deserialized as. 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 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
Note: this list only contains root-level from this definition only, nothing from inherited ones.
| <MaterialsMinDepth> | Type: Nullable<SerializableRange> | Default: null | ||||||||||||||||||||||||||||||
| Not used. | ||||||||||||||||||||||||||||||||
| <MaterialsMaxDepth> | Type: Nullable<SerializableRange> | Default: null | ||||||||||||||||||||||||||||||
| Not used. | ||||||||||||||||||||||||||||||||
| <StationBlockingMaterials> | Type: List<SerializableDefinitionId> | Default: (empty) | ||||||||||||||||||||||||||||||
| Not used. | ||||||||||||||||||||||||||||||||
| <SectorDensity> | Type: Nullable<Single> | Default: 0.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
<DistortionTable>
<Distortion Type="Perlin" Value="92" Frequency="10" Height="4" LayerCount="6" />
<!-- ... -->
</DistortionTable>
| ||||||||||||||||||||||||||||||||