Character Definition

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

Defines a character, be it playable or otherwise.

Basics

Name

<Name>
Type: StringDefaultnull
Used as the character ID in certain cases and should be unique and recommended the same as the <SubtypeId>.
Also used as the displayed name in wardrobe and supports localization.

Model

<Model>
Type: StringDefaultnull
The character model that contains the skeleton and visual mesh.

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

Mass

<Mass>
Type: SingleDefault100
In kg. Does not affect jetpack flight.
This is added to a ship when this engineer enters a cockpit, but only this - their inventory mass is not added.

Gender

<Gender>
Type: StringDefaultMale
Used by Cockpit definition's <CharacterAnimations> to decide which animation set to use.
Available options (case sensitive): Male, Female or anything else would use the default/shared animations.

UsableByPlayer

<UsableByPlayer>
Type: BooleanDefaulttrue
Whether players can choose this character in MedicalRoom block's wardrobe in survival.
Always accessible in creative mode.

Body

PhysicalMaterial

<PhysicalMaterial>
Type: StringDefaultCharacter
SubtypeId of a PhysicalMaterial Definition (PhysicalMaterials.sbc).

Visit Collision Effects for more details on what it's used for in general.

As seen in MaterialProperties.sbc, this affects sound and particle effects when stepping on surfaces and things impacting the character (including being hit by hand tools, which depends on their physical material to what they register as).

CharacterCollisionWidth

<CharacterCollisionWidth>
Type: SingleDefault1
The radius of the collision capsule of the character.

This together with <CharacterCollisionHeight> and <CharacterCollisionCrouchHeight> defines the physical size of the character, which is also required for bullet hits.

Shown as a yellow wireframe capsule in debug draw.

CharacterCollisionHeight

<CharacterCollisionHeight>
Type: SingleDefault1.8
The height of the collision capsule of the character, while standing.
Note that <CharacterCollisionWidth> is subtracted from this and a hardcoded 0.13 is also subtracted.

CharacterCollisionCrouchHeight

<CharacterCollisionCrouchHeight>
Type: SingleDefault1.25
The height of the collision capsule of the character while crouching.
Note that <CharacterCollisionWidth> is subtracted from this.

CharacterCollisionScale

<CharacterCollisionScale>
Type: SingleDefault1
Multiplies the value of <CharacterCollisionWidth> and <CharacterHeadSize> but not in all cases, recommended to leave as 1.

CharacterHeadSize

<CharacterHeadSize>
Type: SingleDefault0.55
Optional physical sphere, gets multiplied by <CharacterCollisionScale>.
Shown as a white sphere in debug draw and can be set to 0 to remove.

CharacterHeadHeight

<CharacterHeadHeight>
Type: SingleDefault0.25
Affects two things:
  • Height offset of the extra sphere collider from <CharacterHeadSize> (if not 0).
  • Weapon position (it's complicated).

HeadServerOffset

<HeadServerOffset>
Type: SingleDefault1.4
Used by two things in different ways:
  • Block turrets aim at character's boundingbox center plus this many meters upwards (relative to character orientation), and this is only when character is not crouching.
  • Wolves raycast from character's feet plus this many meters upwards (relative to character orientation), and this does not care about crouch state.

CrouchHeadServerOffset

<CrouchHeadServerOffset>
Type: SingleDefault1
Used by two things in different ways and only when character is crouching:
  • Block turrets aim at character's boundingbox center plus this many meters upwards (relative to character orientation).
  • Some system called "dynamic range distance" that affects first person shooting in some way. Regardless it does a raycast that starts from character's feet plus this many meters upwards (relative to character orientation) and ends 20m forward, it finds first hit that isn't self and computes direction between gun position and that hit... not entirely sure what it's for but be sure to test first person shooting up close to things if touching this value.

WeakPointBoneIndices

<WeakPointBoneIndices>
Type: MySerializableList<Int32>Defaultnull
List of <RagdollBonesMappings> indexes to tag as weak points for the purpose of taking bonus damage from ProjectileAmmo's headshot damage.

The first entry from <RagdollBonesMappings> is 0. For example, if the character's head is the 3rd entry, then you enter 2 in this list.

Example:
<WeakPointBoneIndices>
  <int>2</int>
  <!-- ... -->
</WeakPointBoneIndices>

Movement

MaxSprintSpeed

<MaxSprintSpeed>
Type: SingleDefault11
Forward movement speed while sprinting, in m/s.
This and all the movement speeds below are multiplied by world's CharacterSpeedMultiplier.

MaxRunSpeed

<MaxRunSpeed>
Type: SingleDefault11
Forward movement speed, in m/s.

MaxRunStrafingSpeed

<MaxRunStrafingSpeed>
Type: SingleDefault11
Sideways movement speed, in m/s.

MaxBackrunSpeed

<MaxBackrunSpeed>
Type: SingleDefault11
Backwards movement speed, in m/s.

UseOnlyWalking

<UseOnlyWalking>
Type: BooleanDefaulttrue
Forces character to always be in walking mode.

MaxWalkSpeed

<MaxWalkSpeed>
Type: SingleDefault6
Forward movement speed while walking, in m/s.

MaxWalkStrafingSpeed

<MaxWalkStrafingSpeed>
Type: SingleDefault6
Sideways movement speed while walking, in m/s.

MaxBackwalkSpeed

<MaxBackwalkSpeed>
Type: SingleDefault6
Backwards movement speed while walking, in m/s.

CanCrouch

<CanCrouch>
Type: BooleanDefaulttrue
Whether the character is allowed to crouch down.

MaxCrouchWalkSpeed

<MaxCrouchWalkSpeed>
Type: SingleDefault4
Forward movement speed while crouching, in m/s.

MaxCrouchStrafingSpeed

<MaxCrouchStrafingSpeed>
Type: SingleDefault4
Sideways movement speed while crouching, in m/s.

MaxCrouchBackwalkSpeed

<MaxCrouchBackwalkSpeed>
Type: SingleDefault4
Backwards movement speed while crouching, in m/s.

MaxSlope

<MaxSlope>
Type: SingleDefault60
Maximum slope angle the character can walk up on, in degrees.

FootprintDecal

<FootprintDecal>
Type: StringDefault(empty)
The name of a <Source> that's used by one or more DecalDefinitions (Decals*.sbc).
Used when the left foot steps on a surface.

FootprintMirroredDecal

<FootprintMirroredDecal>
Type: StringDefault(empty)
The name of a <Source> that's used by one or more DecalDefinitions (Decals*.sbc).
Used when the right foot steps on a surface.

Camera

EnableFirstPersonView

<EnableFirstPersonView>
Type: BooleanDefaulttrue
If first person view is allowed when controlling this character.

HeadBone

<HeadBone>
Type: StringDefaultnull
Bone name from inside the model, where the first person camera should be placed.

Camera3rdBone

<Camera3rdBone>
Type: StringDefaultnull
Name of the bone to use for 3rd person camera.
If the specified bone is not found, it will use <HeadBone> instead.

MaterialsDisabledIn1st

<MaterialsDisabledIn1st>
Type: String[]Defaultnull
List of material names from the <Model> to not render when using first person view with this character.
<MaterialsDisabledIn1st>
  <Material>SomeMaterialName</Material>
  <!-- ... -->
</MaterialsDisabledIn1st>

Animation

AnimationController

<AnimationController>
Type: StringDefaultnull
SubtypeId for an AnimationController definition (AnimationControllers\AC_*.sbc).
If left undefined or declared null, the character will be set to use the old animation system.

AnimationMappings

<AnimationMappings>
Type: MyMovementAnimationMapping[]Defaultnull
Unknown exact usage, only the declaration format being a list:
<AnimationMappings>
  <Mapping Name="Walk" AnimationSubtypeName="Walk" />
  <!-- ... -->
</AnimationMappings>

Skeleton

<Skeleton>
Type: StringDefaultHumanoid
If set to Humanoid then the wardrobe will show skin selection (steam items).
Does not seem to be used for anything else, therefore can be anything you want for non-humanoids.

SpineBone

<SpineBone>
Type: StringDefaultnull

LeftUpperarmBone

<LeftUpperarmBone>
Type: StringDefaultnull

RightUpperarmBone

<RightUpperarmBone>
Type: StringDefaultnull

LeftForearmBone

<LeftForearmBone>
Type: StringDefaultnull

RightForearmBone

<RightForearmBone>
Type: StringDefaultnull

LeftHandItemBone

<LeftHandItemBone>
Type: StringDefaultnull
For left-handed items (not two-handed).

RightHandItemBone

<RightHandItemBone>
Type: StringDefaultnull
Required to be found to be able to equip right-handed tools/weapons (which is all vanilla ones).
It's not actually used for anything past this check.

WeaponBone

<WeaponBone>
Type: StringDefaultnull
Bone name where the equipped right-handed tool/weapon is positioned and oriented.
The item's <RightHandPosition> & <RightHandOrientation> are relative to this.

BoneSets

<BoneSets>
Type: MyBoneSetDefinition[]Defaultnull
A list of bone sets, unknown exact behavior.

Each <BoneSet> can have:

<Name>Type: stringDefaultnull
<Bones>Type: stringDefaultnull
A list of bone names separated by space.
Example:
<BoneSets>
  <BoneSet>
    <Name>Head</Name>
    <Bones>SE_RigHead SE_RigNeck1</Bones>
  </BoneSet>
  <!-- ... -->
</BoneSets>

BoneLODs

<BoneLODs>
Type: MyBoneSetDefinition[]Defaultnull
A list of bone sets for LODs, unknown exact behavior.

Each <BoneSet> can have:

<Name>Type: stringDefaultnull
Required and is expected to be a floating-point number!
<Bones>Type: stringDefaultnull
A list of bone names separated by space.
Example:
<BoneLODs>
  <BoneSet>
    <Name>10</Name>
    <Bones>SE_RigHelmetGlassBone SE_RigPelvis SE_RigSpine1</Bones>
  </BoneSet>
  <!-- ... -->
</BoneLODs>

BendMultiplier1st

<BendMultiplier1st>
Type: SingleDefault1
Only used when <AnimationController> is undefined (old animation system).
Affects spine rotation in first person.

BendMultiplier3rd

<BendMultiplier3rd>
Type: SingleDefault1
Only used when <AnimationController> is undefined (old animation system).
Affects spine rotation in 3rd person.

InitialAnimation

<InitialAnimation>
Type: StringDefaultIdle
Only used when <AnimationController> is undefined (old animation system).
The animation to play when character spawns.

Inverse-kinematics

LeftAnkleBoneName

<LeftAnkleBoneName>
Type: StringDefaultnull
Exact bone name. Its Y (up) position is used in the feet inverse-kinematics, or falls back to character boundingbox center if not found.

RightAnkleBoneName

<RightAnkleBoneName>
Type: StringDefaultnull
Exact bone name. Its Y (up) position is used in the feet inverse-kinematics, or falls back to character boundingbox center if not found.

AnkleHeightWhileStanding

<AnkleHeightWhileStanding>
Type: SingleDefault0.187
Offset Y (up) for ankle bones in relation to feet inverse-kinematics, unclear what exactly it affects.

LeftHandIKStartBone

<LeftHandIKStartBone>
Type: StringDefaultnull

LeftHandIKEndBone

<LeftHandIKEndBone>
Type: StringDefaultnull

RightHandIKStartBone

<RightHandIKStartBone>
Type: StringDefaultnull

RightHandIKEndBone

<RightHandIKEndBone>
Type: StringDefaultnull

Suit

VisibleOnHud

<VisibleOnHud>
Type: BooleanDefaulttrue
If false, the character spawns with their radio broadcaster turned off, but can still be turned on by the player.

HUD

<HUD>
Type: StringDefaultnull
<SubtypeId> for a HUD definition (HUD\Default.sbc) to use when controlling this character.
Uses Default if undefined, empty or the specified subtypeId is not found.

SuitResourceStorage

<SuitResourceStorage>
Type: List<SuitResourceDefinition>Defaultnull
The list of gases that the suit can store. Each <Resource> entry can contain various elements:
<Id>Type: SerializableDefinitionIdDefault(invalid)
The Id of a gas (GasProperties.sbc).

The typeId is expected to be a GasProperties, but the subtype can be any gas from that file including mod-added ones.

Has the same syntax as <Id>.
<MaxCapacity>Type: SingleDefault0
Total liters it can store.
<Throughput>Type: SingleDefault0
Maximum liters/sec for consuming (and possibly refilling? needs testing).
<ReducedOnSpawn>Type: SingleDefault0
Optional. The filled ratio to respawn with at medical room or survival kit.
Must be higher than 0, world must be in survival mode and <EnableReducedStatsOnRespawn> needs to be enabled in order to function.
Example:
<SuitResourceStorage>
  <Resource>
    <Id Type="GasProperties" Subtype="Oxygen" />
    <Throughput>1000</Throughput>
    <MaxCapacity>60</MaxCapacity>
	<ReducedOnSpawn>0.2</ReducedOnSpawn>
  </Resource>
  <!-- ... --->
</SuitResourceStorage>

NeedsOxygen

<NeedsOxygen>
Type: BooleanDefaultfalse
Seems obsolete and would define if character needs oxygen from suit, which also seems to be the helmet toggle.

Either way, it's only used if both of these conditions fail:

  • Using new animation system and the Helmet layer exists
  • Using old animation system and HelmetOpen and HelmetClose animations are linked.

DamageAmountAtZeroPressure

<DamageAmountAtZeroPressure>
Type: SingleDefault7
Damage taken every ~1.66s when there's no oxygen anywhere.

PressureLevelForLowDamage

<PressureLevelForLowDamage>
Type: SingleDefault0.5
Room or atmosphere pressure level (0.0 to 1.0) required to not take damage, anything under will take 1 damage every 1.66s.

OxygenConsumption

<OxygenConsumption>
Type: SingleDefault10
The formula used: Liters consumed per second=OxygenConsumption*OxygenConsumptionMultiplier*60100

OxygenConsumptionMultiplier

<OxygenConsumptionMultiplier>
Type: SingleDefault1
A multiplier for <OxygenConsumption>. Seems redundant.

OxygenSuitRefillTime

<OxygenSuitRefillTime>
Type: SingleDefault0
Must be higher than 0 to allow oxygen refill from within a pressurized room or planet oxygen atmosphere.

Formula: Liters gain per second=SuitResourceStorage's MaxCapacityOxygenSuitRefillTime*Nearby oxygen level

Where oxygen level is usually 0.0 to 1.0.

MinOxygenLevelForSuitRefill

<MinOxygenLevelForSuitRefill>
Type: SingleDefault0.75
Oxygen level (0.0 to 1.0 usually) required for automatic refill from pressurized room or planet oxygen atmosphere.

SuitConsumptionInTemperatureExtreme

<SuitConsumptionInTemperatureExtreme>
Type: SingleDefault3
Additional suit power consumption when the environment temperature is at either extreme (Freeze or Inferno) and linearly scaled down to 0 when at Warm.

The value is in deci-watts (probably because of a bug), meaning the value entered here has to be 10 times smaller than the desired watts at extreme temperatures.

Visit Temperature (section Temperature effects on the character) for details on how temperature and this element are calculated.

Suit power consumption is calculated as follows:

  • 1 W constant usage.
  • +9 W if helmet is closed and suit can provide oxygen.
  • +2 W if headlamps are on.
  • +(<SuitConsumptionInTemperatureExtreme> * 10) W scaled by the temperature severity.
  • +1 W if a block/welder/grinder/drill is held.
  • +99 W if the welder or grinder is activated.
  • +39 W if the drill is activated.

Radio does not consume any power, but it does require the suit to have power in order to remain enabled.

All of these are hardcoded and unlikely to be changeable by mod scripts either.

Suit battery capacity is hardcoded to 10 Wh, and mod scripts can't change it either.

EnabledComponents

<EnabledComponents>
Type: StringDefaultnull
List of entity components to add.

Internally marked obsolete and points us to EntityContainers & EntityComponents SBCs, however the RagdollComponent and InventorySpawnComponent (which are also the only values this supports) aren't in those vanilla sbcs therefore requires experimenting if this can truly be discarded.

Example:
<EnabledComponents>RagdollComponent InventorySpawnComponent</EnabledComponents>

Inventory

<Inventory>
Type: (complex)Defaultnull
Defines the inventory stats, contains:
<InventoryVolume>Type: SingleDefault3.40282347E+38
Max inventory volume in cubic meters (1 m3 = 1000 liters).
<InventoryMass>Type: SingleDefault3.40282347E+38
Max inventory mass in kg. Might not work reliably considering nothing uses this in the game.
<Inventory>
  <InventoryVolume>0.4</InventoryVolume>
  <InventoryMass>3.40282347E+38</InventoryMass>
</Inventory>

ReducedEnergyOnSpawn

<ReducedEnergyOnSpawn>
Type: SingleDefault0
Optional. Battery proportion (0 to 1) to have when spawning at medical room/survival kit.
To use this must be higher than 0 and the world's <EnableReducedStatsOnRespawn> to be enabled.
(Added in SE v1.207)

Flying

Jetpack

<Jetpack>
Type: (complex)Defaultnull
Jetpack properties, contains a complex structure:
<Thrusts>Type: (list)Defaultnull
A list of jetpack visual definitions, where each spawns 5 flames relative to the bone's orientation.
Each <Thrust> element can have:
<ThrustBone>Type: stringDefaultnull
The bone name where this thruster is placed and oriented.
<SideFlameOffset>Type: SingleDefault0.12
The position away from the center of the forward, left, right and back flames.
<FrontFlameOffset>Type: SingleDefault0.04
The position away from the center of the up flame.

ThrustProperties

<ThrustProperties>
Type: (complex)Defaultnull
The jetpack properties, contains more elements:
<ForceMagnitude>Type: SingleDefault0
Maximum force in newtons this propells the character with. Gets multiplied by <EffectivenessAtMinInfluence> and <EffectivenessAtMaxInfluence>.
The character's <Mass> is all that's needed to calculate their acceleration because their inventory mass does not count.
<MinPlanetaryInfluence>Type: SingleDefault0
Minimum air density for the interpolation between <EffectivenessAtMinInfluence> and <EffectivenessAtMaxInfluence>.
Space has 0 air density.
<MaxPlanetaryInfluence>Type: SingleDefault1
Maximum air density for the interpolation between <EffectivenessAtMinInfluence> and <EffectivenessAtMaxInfluence>.
Usually values between 0 and 1, but there are planets with higher density atmospheres.
<NeedsAtmosphereForInfluence>Type: BooleanDefaultfalse
If enabled it will always use <EffectivenessAtMinInfluence> while on a planet without atmosphere.
However, because "planetary influence" is always air density, this setting does not seem very useful.
<EffectivenessAtMinInfluence>Type: SingleDefault1
Thrust force multiplier that is used at <MinPlanetaryInfluence> air density or lower.
If air density is higher than that, the multiplier is interpolated between this and <EffectivenessAtMaxInfluence> within the air density range (between <MinPlanetaryInfluence> and <MaxPlanetaryInfluence>).
<EffectivenessAtMaxInfluence>Type: SingleDefault1
Thrust force multiplier that is used at <MaxPlanetaryInfluence> air density or higher. If air density is lower than that, the efficiency is interpolated between <EffectivenessAtMinInfluence> and this within that air density range (between <MinPlanetaryInfluence> and <MaxPlanetaryInfluence>).
<SlowdownFactor>Type: SingleDefault10.0
Multiplies thrust force when inertia dampeners act. Not recommended because it requires player letting go of the controls to stop faster.
<FuelConverter>Type: MyFuelConverterInfoDefaultnull
The fuel to use. To use electricity either leave it undefined or enter Electricity for the Subtype.
<FuelId>Type: SerializableDefinitionIdDefault(invalid)
The Type must be GasProperties.
The Subtype can be any gas definition's <SubtypeId> (GasProperties.sbc).
<Efficiency>Type: SingleDefault1.0
Affects fuel consumption, higher makes it consume less.
Refer to Thrust for the fuel consumption formula.
Usage:
<FuelConverter>
  <FuelId Type="GasProperties" Subtype="Hydrogen" />
  <Efficiency>1</Efficiency>
</FuelConverter>
<MinPowerConsumption>Type: SingleDefault0
The fuel or electricity consumption when idle (turned on but not actively thrusting).
See <MaxPowerConsumption> for the formula.
<MaxPowerConsumption>Type: SingleDefault0
The fuel or electricity consumption when thrusters are firing.

For electricity it's megawatts, however for gases there's a formula:
MaxFuelPerSec = <MaxPowerConsumption> / (Fuel_EnergyDensity * <Efficiency>)

  • <MaxPowerConsumption> shows the maximum possible, it is however variable with thrust's current output percentage.
  • Fuel_EnergyDensity is the <EnergyDensity> of the gas definition (GasProperties.sbc).
  • <Efficiency> is in this definition's <FuelConverter>.
<ConsumptionFactorPerG>Type: SingleDefault0
Increases fuel consumption the higher the gravity, or 0 to disable.

The value given is multiplied by gravity (in g) and divided by 9.81, resulting in this being per 10% of a g.
Think of the multiplier you want per g, then multiply that by 10 (or by 9.81 if you want to be accurate) before entering it here.
Actual formula used: ConsumptionMultiplier = 1 + (ConsumptionFactorPerG * (GravityPercentage / 9.81))

The 'GravityPercentage' is 0 to 1 so at EarthLike ground level it's ConsumptionFactorPerG * 0.102 rounded a bit. This is clearly a game bug, but too late to do anything about now without breaking mods.
<FlamePointMaterial>Type: StringDefaultEngineThrustMiddle
<SubtypeId> of a TransparentMaterial to show at each nozzle when the jetpack is idle but on.
<FlameLengthMaterial>Type: StringDefaultEngineThrustMiddle
<SubtypeId> of a TransparentMaterial to stretch along the flame line from each nozzle when thrusting in the relevant directions.
<FlameIdleColor>Type: Vector4Default{X:0.2745098 Y:0.4090196
Z:0.6505882 W:0.75}
Color of the jetpack flames in RGBA (as XYZW), values from 0 to 1 but can go past 1 to glow.
Example usage:
<FlameIdleColor>
  <X>0.0</X>
  <Y>1.0</Y>
  <Z>0.0</Z>
  <W>1.0</W>
</FlameIdleColor>

Note that the <W> is multiplied by 0.4 therefore it's 40% as strong as it normally would be.

There are other elements in the code (like <FlameFullColor>) but they are not used by the jetpack code, only the ones listed above are.
Elements that exist in the game code or vanilla SBC, but do nothing
<FlameGlareMaterial>Type: -Default-
Seen in SBC but does not exist in game code.
<FlameGlareSize>Type: -Default-
Seen in SBC but does not exist in game code.
<FlameDamage>Type: -Default-
Not used for characters jetpack.
<FlameDamageLengthScale>Type: -Default-
Not used for characters jetpack.
<FlameFlare>Type: -Default-
Not used for characters jetpack.
<FlameFullColor>Type: -Default-
Not used for characters jetpack.
<FlameGlareQuerySize>Type: -Default-
Not used for characters jetpack.
<FlameLengthScale>Type: -Default-
Not used for characters jetpack.
<FlameVisibilityDistance>Type: -Default-
Not used for characters jetpack.
<PropellerAccelerationTime>Type: -Default-
Not used for characters jetpack.
<PropellerDecelerationTime>Type: -Default-
Not used for characters jetpack.
<PropellerMaxVisibleDistance>Type: -Default-
Not used for characters jetpack.
<PropellerRoundsPerSecondOnFullSpeed>Type: -Default-
Not used for characters jetpack.
<PropellerRoundsPerSecondOnIdleSpeed>Type: -Default-
Not used for characters jetpack.
<PropellerSubpartEntityName>Type: -Default-
Not used for characters jetpack.
<PropellerUsesPropellerSystem>Type: -Default-
Not used for characters jetpack.
<ResourceSinkGroup>Type: -Default-
Not used for characters jetpack.
<ThrusterType>Type: -Default-
Not used for characters jetpack.
Full example:
<Jetpack>
  <Thrusts>
    <Thrust>
      <ThrustBone>FrontJetpackDummy_01</ThrustBone>
      <SideFlameOffset>0.1</SideFlameOffset>
      <FrontFlameOffset>0.04</FrontFlameOffset>
    </Thrust>
    <Thrust>
      <ThrustBone>BackJetpackDummy_01</ThrustBone>
      <SideFlameOffset>0.1</SideFlameOffset>
      <FrontFlameOffset>0.04</FrontFlameOffset>
    </Thrust>
  </Thrusts>
  <ThrustProperties>
    <ForceMagnitude>3200</ForceMagnitude>
    <SlowdownFactor>5</SlowdownFactor>
    <MinPowerConsumption>0.000000001</MinPowerConsumption>
    <MaxPowerConsumption>0.0001</MaxPowerConsumption>
    <ConsumptionFactorPerG>250</ConsumptionFactorPerG>

    <MinPlanetaryInfluence>0</MinPlanetaryInfluence>
    <MaxPlanetaryInfluence>1</MaxPlanetaryInfluence>
    <EffectivenessAtMinInfluence>0.67</EffectivenessAtMinInfluence>
    <EffectivenessAtMaxInfluence>1</EffectivenessAtMaxInfluence>
    <NeedsAtmosphereForInfluence>false</NeedsAtmosphereForInfluence>

    <FuelConverter>
      <FuelId>
        <TypeId>GasProperties</TypeId>
        <SubtypeId>Hydrogen</SubtypeId>
      </FuelId>
      <Efficiency>1</Efficiency>
    </FuelConverter>

    <FlameIdleColor>
      <X>0.08</X>
      <Y>0.47</Y>
      <Z>0.94</Z>
      <W>0.75</W>
    </FlameIdleColor>
    <FlamePointMaterial>JetpackThrustMiddle</FlamePointMaterial>
    <FlameLengthMaterial>JetpackThrustMiddle</FlameLengthMaterial>
  </ThrustProperties>
</Jetpack>
The character's max jetpack speed is the largest of <SmallShipMaxSpeed> or <LargeShipMaxSpeed> plus the largest of <MaxSprintSpeed> or <MaxRunSpeed> or <MaxBackrunSpeed>.

VerticalPositionFlyingOnly

<VerticalPositionFlyingOnly>
Type: BooleanDefaultfalse
If enabled and using jetpack it prevents rotating pitch and roll.
The alignment is tied to gravity (both natural and artificial) and remains that way when going outside of gravity and can be re-aligned further with magboots.

RotationToSupport

<RotationToSupport>
Type: (enum)DefaultNone
Available values:
  • None
  • Full - Rotates character to the orientation of the surface they're walking on even when in gravity (similar to magboots in zero-g).
  • OneAxis - Similar to above except it doesn't roll you to align to surface.

MaxForce

<MaxForce>
Type: Nullable<Single>Defaultnull
Something to do with limiting physical forces applied to the character by external sources. It's unclear because it goes into the Havok physics engine.
If undefined or null it will use 100000.

ImpulseLimit

<ImpulseLimit>
Type: SingleDefaultInfinity
Something to do with limiting physical impulses applied to the character by external sources. It's unclear because it goes into the Havok physics engine.

Weapon handling

CanIronsight

<CanIronsight>
Type: BooleanDefaulttrue
Whether this character can aim down sights of hand-held weapons.

RecoilJetpackDampeningDegPerS

<RecoilJetpackDampeningDegPerS>
Type: SingleDefault0
Hand-weapon recoil dampening when using jetpack.

Lights

LeftLightBone

<LeftLightBone>
Type: StringDefaultnull
Optional. The bone name used for the left headlamp glare and "volumetric cone" (both which are hardcoded to use Headlamp flare and ReflectorConeCharacter transparent material).
If left as null or the bone is not found, it does not draw the glare and cone, the actual emitted light however is still present.

RightLightBone

<RightLightBone>
Type: StringDefaultnull
Same as <LeftLightBone> but for the right side.

LightOffset

<LightOffset>
Type: Vector3Default{X:0 Y:0 Z:-0.5}
Offset for the headlight spotlight emitter (singular, it emits a single light not two), relative to character's <HeadBone> position.
Example usage:
<LightOffset>
  <X>0.5</X>
  <Y>0.0</Y>
  <Z>0.0</Z>
</LightOffset>

Where X/Y/Z correspond to Right/Up/Back axis.

To disable the light (as there's no other ways), this can be set to absurdly high values (ideally not a single axis so that the player can't aim it).

Sounds

UsesAtmosphereDetector

<UsesAtmosphereDetector>
Type: BooleanDefaultfalse
Provides various logic for atmosphere detection that affect realistic sounds. Probably only needed for playable characters.

UsesReverbDetector

<UsesReverbDetector>
Type: BooleanDefaultfalse
Provides various logic to detect nearby objects to provide reverb sound effects. Probably only needed for playable characters.

LoopingFootsteps

<LoopingFootsteps>
Type: BooleanDefaultfalse

MovementSoundName

<MovementSoundName>
Type: StringDefault(empty)
SubtypeId (without Arc or Real prefix) of an audio definition (Audio_*.sbc).
Played while the character is moving on the ground.

FastFlySoundName

<FastFlySoundName>
Type: StringDefault(empty)
SubtypeId (without Arc or Real prefix) of an audio definition (Audio_*.sbc).
Played while the character is moving faster than 40m/s (either with or without jetpack).

JetpackIdleSoundName

<JetpackIdleSoundName>
Type: StringDefault(empty)
SubtypeId (without Arc or Real prefix) of an audio definition (Audio_*.sbc).
Played continuously while the jetpack is on, but not thrusting.

JetpackRunSoundName

<JetpackRunSoundName>
Type: StringDefault(empty)
SubtypeId (without Arc or Real prefix) of an audio definition (Audio_*.sbc).
Played continuously while the jetpack is on and thrusting.

JumpSoundName

<JumpSoundName>
Type: StringDefault(empty)
SubtypeId (without Arc or Real prefix) of an audio definition (Audio_*.sbc).
Played once when the character jumps.

CrouchDownSoundName

<CrouchDownSoundName>
Type: StringDefault(empty)
SubtypeId (without Arc or Real prefix) of an audio definition (Audio_*.sbc).
Played once when the character crouches down.

CrouchUpSoundName

<CrouchUpSoundName>
Type: StringDefault(empty)
SubtypeId (without Arc or Real prefix) of an audio definition (Audio_*.sbc).
Played once when the character stands up from a crouch.

BreathCalmSoundName

<BreathCalmSoundName>
Type: StringDefault(empty)

BreathHeavySoundName

<BreathHeavySoundName>
Type: StringDefault(empty)

MagnetBootsEndSoundName

<MagnetBootsEndSoundName>
Type: StringDefault(empty)

MagnetBootsProximitySoundName

<MagnetBootsProximitySoundName>
Type: StringDefault(empty)

MagnetBootsStartSoundName

<MagnetBootsStartSoundName>
Type: StringDefault(empty)

MagnetBootsStepsSoundName

<MagnetBootsStepsSoundName>
Type: StringDefault(empty)

IronsightActSoundName

<IronsightActSoundName>
Type: StringDefault(empty)

IronsightDeactSoundName

<IronsightDeactSoundName>
Type: StringDefault(empty)

PainSoundName

<PainSoundName>
Type: StringDefault(empty)

DeathSoundName

<DeathSoundName>
Type: StringDefault(empty)

DeathBySuffocationSoundName

<DeathBySuffocationSoundName>
Type: StringDefault(empty)

SuffocateSoundName

<SuffocateSoundName>
Type: StringDefault(empty)

OxygenChokeCriticalSoundName

<OxygenChokeCriticalSoundName>
Type: StringDefault(empty)

OxygenChokeLowSoundName

<OxygenChokeLowSoundName>
Type: StringDefault(empty)

OxygenChokeNormalSoundName

<OxygenChokeNormalSoundName>
Type: StringDefault(empty)

HelmetOxygenCriticalSoundName

<HelmetOxygenCriticalSoundName>
Type: StringDefault(empty)

HelmetOxygenLowSoundName

<HelmetOxygenLowSoundName>
Type: StringDefault(empty)

HelmetOxygenNoneSoundName

<HelmetOxygenNoneSoundName>
Type: StringDefault(empty)

HelmetOxygenNormalSoundName

<HelmetOxygenNormalSoundName>
Type: StringDefault(empty)

Ragdoll

RagdollRootBody

<RagdollRootBody>
Type: StringDefault(empty)
Expects a bone name to use as the root bone for the ragdoll.

RagdollDataFile

<RagdollDataFile>
Type: StringDefaultnull
Only used if the character's model doesn't have havok data.
Path in game folder (does not work in mods) to a .hkt file to use for the ragdoll.

RagdollBonesMappings

<RagdollBonesMappings>
Type: MyRagdollBoneSetDefinition[]Defaultnull
A list of bone sets that make up capsules.

These capsules are used by ragdoll system in some way, but also by bullets when hitting this character. For the character to be hit, it first has to hit the physical capsule of the character, then it has to hit an actual triangle of the model and that has to be inside one of these capsules. One of these capsules can also be marked as a weakpoint in <WeakPointBoneIndices> to take bonus damage.
Each <BoneSet> can have:

<Name>Type: stringDefaultnull
<Bones>Type: stringDefaultnull
A list of bone names. Only really need 2 to create a capsule between their positions.
<CollisionRadius>Type: SingleDefault0
Sets the radius of the capsule made from the bones.
If 0 it will use some math or the relevant havok shape, unclear how it's linked.
Example:
<RagdollBonesMappings>
  <BoneSet>
    <Name>Ragdoll_SE_rig_Pelvis001</Name>
    <Bones>SE_RigPelvis SE_RigSpine1</Bones>
  </BoneSet>
  <!-- ... -->
</BoneLODs>

RagdollPartialSimulations

<RagdollPartialSimulations>
Type: MyBoneSetDefinition[]Defaultnull
Used when flying or falling to flail the character's limbs.

If a name is not present it will automatically fill in a hardcoded set of bones which happen to be the exact ones in the example (which is from the game sbc).

Each <BoneSet> can have:

<Name>Type: stringDefaultnull
Available values: Jetpack, Jetpack_Weapon.
<Bones>Type: stringDefaultnull
A list of bone names separated by space.
Example:
<RagdollPartialSimulations>
  <BoneSet>
    <Name>Jetpack</Name>
    <Bones>Ragdoll_SE_rig_LUpperarm001 Ragdoll_SE_rig_LForearm001 Ragdoll_SE_rig_LPalm001 Ragdoll_SE_rig_RUpperarm001 Ragdoll_SE_rig_RForearm001 Ragdoll_SE_rig_RPalm001 Ragdoll_SE_rig_LThigh001 Ragdoll_SE_rig_LCalf001 Ragdoll_SE_rig_LFoot001 Ragdoll_SE_rig_RThigh001 Ragdoll_SE_rig_RCalf001 Ragdoll_SE_rig_RFoot001</Bones>
  </BoneSet>
  <BoneSet>
    <Name>Jetpack_Weapon</Name>
    <Bones>Ragdoll_SE_rig_LThigh001 Ragdoll_SE_rig_LCalf001 Ragdoll_SE_rig_LFoot001 Ragdoll_SE_rig_RThigh001 Ragdoll_SE_rig_RCalf001 Ragdoll_SE_rig_RFoot001</Bones>
  </BoneSet>
</RagdollPartialSimulations>

Dead body

LootingTime

<LootingTime>
Type: SingleDefault300
Seconds until the dead body vanishes.

EnableSpawnInventoryAsContainer

<EnableSpawnInventoryAsContainer>
Type: BooleanDefaultfalse

SpawnInventoryOnBodyRemoval

<SpawnInventoryOnBodyRemoval>
Type: BooleanDefaultfalse
Only used if <EnableSpawnInventoryAsContainer> is enabled.

InventorySpawnContainerId

<InventorySpawnContainerId>
Type: Nullable<SerializableDefinitionId>Defaultnull
Only used if <EnableSpawnInventoryAsContainer> is enabled.
Has the same contents format as <Id> except of course the element name.

DeadBodyShape

<DeadBodyShape>
Type: DeadBodyShapeDefaultnull
Optional but does not seem to do anything different on engineer characters. Contains more elements:
<BoxShapeScale>Type: SerializableVector3Default0,0,0
<RelativeCenterOfMass>Type: SerializableVector3Default0,0,0
<RelativeShapeTranslation>Type: SerializableVector3Default0,0,0
<Friction>Type: SingleDefault0
Example:
<DeadBodyShape>
  <BoxShapeScale x="1.0" y="1.0" z="1.0" />
  <RelativeCenterOfMass x="0.0" y="0.0" z="0.0" />
  <RelativeShapeTranslation x="0.0" y="0.0" z="0.0" />
  <Friction>20.0</Friction>
</DeadBodyShape>

(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.

<JumpForce>Type: SingleDefault2.5
Not used. Unclear how the jump height is actually determined because it's handled entirely by the Havok physics engine.
<FeetIKEnabled>Type: BooleanDefaultfalse
Not used, leg inverse-kinematics are always enabled.
<ModelRootBoneName>Type: StringDefaultnull
Not used.
<LeftHipBoneName>Type: StringDefaultnull
Not used.
<RightHipBoneName>Type: StringDefaultnull
Not used.
<LeftKneeBoneName>Type: StringDefaultnull
Not used.
<RightKneeBoneName>Type: StringDefaultnull
Not used.
<IKSettings>Type: MyFeetIKSettings[]Defaultnull
Not used except for some debug render code, likely Medieval Engineers leftover.
<FootLenght>Type: -Default-
Seen in SBC but does not exist in game code at root level.
It's in <IKSettings> however but that is also not used.
<FootWidth>Type: -Default-
Seen in SBC but does not exist in game code at root level.
It's in <IKSettings> however but that is also not used.
<AnkleHeight>Type: -Default-
Seen in SBC but does not exist in game code at root level.
It's in <IKSettings> however but that is also not used.
<ReachableDistanceBelowStanding>Type: -Default-
Seen in SBC but does not exist in game code.
<MaxRaisedFootHeightStanding>Type: -Default-
Seen in SBC but does not exist in game code.
<MaxFootPlacementDistanceStanding>Type: -Default-
Seen in SBC but does not exist in game code.
<ReachableDistanceBelowRunning>Type: -Default-
Seen in SBC but does not exist in game code.
<MaxRaisedFootHeightRunning>Type: -Default-
Seen in SBC but does not exist in game code.
<MaxFootPlacementDistanceRunning>Type: -Default-
Seen in SBC but does not exist in game code.
<FootOnGroundPostions>Type: List<MyObjectBuilder_FootsPosition>Defaultnull
Not used.
<LightGlareSize>Type: SingleDefault0.02
Not used.
<ReflectorTexture>Type: StringDefaultTextures\Lights\reflector.dds
Not used. Game hardcodedly uses the Textures\Lights\dual_reflector_2.png for the projected light texture, and ReflectorConeCharacter for the dual "volumetric light" cones.
<LeftGlare>Type: StringDefaultnull
Not used. Game hardcodedly uses the Headlamp flare definition.
<RightGlare>Type: StringDefaultnull
Not used. Game hardcodedly uses the Headlamp flare definition.
<StepSoundDelay>Type: Int32Default100
Not used.
<StepSoundInterval>Type: -Default-
Seen in SBC but does not exist in game code.
<MaxHealth>Type: -Default-
Seen in SBC but does not exist in game code.
<BoneSet>Type: -Default-
Seen in SBC but does not exist in game code, probably a mistake with <BoneSets>.