1.205

From Space Engineers Wiki
Jump to navigation Jump to search

Deeper changes relevant to scripters, modders and server admins.

Official patch notes: 1.205

Created by manually analyzing the differences between 1.204.018b2 and 1.205.026.

Page last edited on 2026 January 14 12:53

All sections can affect modAPI too.
For example a new element in a definition noted in SBC section would not also be marked in the ModAPI section.

Servers & Admins

  • All servers in server browsers now include total mod size.
  • Clients are now declined connection if their name is longer than 32 characters.
  • Players are no longer able to transfer to "nobody", only admin-rank can.
  • AssemblerSpeedMultiplier's math changed:
    • Was: (World_AssemblerSpeedMultiplier * block_AssemblySpeed) + modules_Productivity
    • Now: World_AssemblerSpeedMultiplier * (block_AssemblySpeed + modules_Productivity)

Note: The "default" below means the value if not defined in the world file, however world templates and scenarios will likely have a different predefined value, search for the <TagName> in files to find them.

  • New visible world settings:
    • Block Limits: Limit Blocks by (<LimitBlocksBy> - enum, default BlockPairName; all values: BlockPairName, Tag)
    • Others: Max messages in HUD chat (<MaxHudChatMessageCount> - int, default 100)
      • Game's description: Maximum number of messages displayed in HUD chat
    • Environment: Encounter Density (<EncounterDensity> - float, default 0.35)
      • Game's description: Defines density of the procedurally generated encounters.
    • NPCs: Global Encounter PCU (<GlobalEncounterPCU> - int, default 25000)
      • Game's description: Number of Performance Cost Units allocated for global encounters.
    • NPCs: Global Encounter Timer [min] (<GlobalEncounterTimer> - int, default 15)
      • Game's description: Global Encounter spawns every X minutes.
    • NPCs: Global Encounter Cap (<GlobalEncounterCap> - int, default 1)
      • Game's description: Maximum of active Global Encounters at the same time. Turned off when 0.
    • NPCs: Global Encounter Enable Removal (<GlobalEncounterEnableRemovalTimer> - bool, default true)
      • Game's description: Enable of removal of Global Encounters.
    • NPCs: Removal Timer Min [mins] (<GlobalEncounterMinRemovalTimer> - int, default 90)
      • Game's description: Minimum removal timer [minutes] for Global Encounters.
    • NPCs: Removal Timer Max [mins] (<GlobalEncounterMaxRemovalTimer> - int, default 180)
      • Game's description: Maximum removal timer [minutes] for Global Encounters.
    • NPCs: Removal Time Clock [mins] (<GlobalEncounterRemovalTimeClock> - int, default 30)
      • Game's description: When the game should start countdown for removal of Global Encounter.
    • NPCs: Enable Planetary Encounters (<EnablePlanetaryEncounters> - bool, default true)
      • Game's description: Enables planetary encounters in the world.
    • NPCs: Installations Timer Min [mins] (<PlanetaryEncounterTimerMin> - float, default 15)
      • Game's description: Minimum [minutes] for Planetary Encounter spawn timer.
    • NPCs: Installations Timer Max [mins] (<PlanetaryEncounterTimerMax> - float, default 30)
      • Game's description: Maximum [minutes] for Planetary Encounter spawn timer.
    • NPCs: Existing structures allowed [m] (<PlanetaryEncounterExistingStructuresRange> - int, default 7000)
      • Game's description: Minimum distance to existing structures for Planetary Encounter spawns.
    • NPCs: Existing installations allowed [m] (<PlanetaryEncounterAreaLockdownRange> - int, default 10000)
      • Game's description: Claim area radius for Planetary Encounter spawns - no more installations would spawn there until clean-up.
    • NPCs: Desired spawn distance [m] (<PlanetaryEncounterDesiredSpawnRange> - int, default 6000)
      • Game's description: Player-based distance for Planetary Encounter spawns.
    • NPCs: Presence distance [m] (<PlanetaryEncounterPresenceRange> - int, default 20000)
      • Game's description: Player presence within this range prevents installation auto-removal.
    • NPCs: Installations despawn timeout [mins] (<PlanetaryEncounterDespawnTimeout> - float, default 120)
      • Game's description: Timeout [minutes] for permanent installation auto-removal.
  • New hidden world settings:
    • <EncounterGeneratorVersion> - int, default 6
  • World setting changes:
    • NPCs: Pirate PCU (<PiratePCU>) default changed from 50000 to 25000.
    • NPCs: NPC Factions Count (<TradeFactionsCount>) default changed from 15 to 10.
    • NPCs: Stations Inner Radius (StationsDistanceInnerRadius) default changed from 10000000 to 5000000.
    • NPCs: Stations Outer Radius Start (StationsDistanceInnerRadius) default changed from 10000000 to 5000000.
    • NPCs: Stations Outer Radius End (StationsDistanceInnerRadius) default changed from 30000000 to 10000000.
    • Environment: "Procedural Density" renamed to "Procedural Asteroids Density".
    • Environment: "Max Broadcast Controller distance when owner offline [m]" renamed to "Offline Broadcast Controller Distance [m]"

SBC & Art Modding

  • Factions:
    • SessionComponentEconomyDefinition (Game/SessionComponents_Economy.sbc) - all the <Station_Rule_*> tags got moved to FactionTypes_Economy.sbc.
    • FactionTypeDefinition (FactionTypes.sbc) got <Station_Rule_*> (see above) plus <PreferDeep>, <Relations>, <FriendsWith>, <TypeDescription>, <TypeDescriptionVariants>, <FactionRatio> (refer to FactionTypes.sbc for documentation).
    • FactionNameDefinition (FactionNames.sbc) got <Type> (refer to Factions.sbc for documentation).
    • FactionDefinition (Factions.sbc) got <Type>, <StaticReputation>, <IconColor>, <BackgroundColor> (refer to Factions.sbc for documentation).
  • Blocks:
    • All door types now open/close from interacting with detector_terminal empty (was only the Door type previously).
    • All block definition (CubeBlockDefinition) changes:
      • <UsePhysicsCastForInteractionCheck> renamed to <AllowInteractionThroughBlock> (bool, default false) - game's doc: Used when block has see-through parts (like holodisplay) that you want to be able to interact through.
      • Got <NewsletterSubscriptionNeeded> (bool, default false) - if true the block requires client to've subscribed to Keen's newsletter to be able to use.
      • Got <SimpleUpdateVisualOnSkinChange> (bool, default false) - game's doc: Set to true if you dont want to reset subpart positions or reload the whole model on skin change.
    • AirtightSlideDoor and AirtightHangarDoor now get placed closed instead of open.
    • Assembler and SurvivalKit got <IgnoreEfficiencyMultiplier> (bool, defaults false) - this assembler ignores the AssemblerEfficiencyMultiplier world setting.
    • JumpDrive got:
      • <ShipJumpDriveChargingSound> (audio subtypeId, default: ShipJumpDriveCharging)
      • <ShipJumpDriveJumpInSound> (audio subtypeId, default: ShipJumpDriveJumpIn)
      • <ShipJumpDriveJumpOutSound> (audio subtypeId, default: ShipJumpDriveJumpOut)
      • <JumpParticleEffect> (particle subtypeId, default: Warp)
    • InteriorLight and ReflectorLight got <LightOnlyNoEffectsDummyName> (string, dummy name, default empty; separates light source from flare and cone).
    • Rotors got <MediumTopPart> (string, blockpair name, defaults null) - the tag exists for all mechanical blocks but it's only implemented for rotor types; used by the "Add Medium Head" button in terminal and toolbar.
    • ShipConnector got <ConnectDirection> (SerializableVector3, defaults 0,0,-1) - Determines which direction the connector can connect, at a max hardcoded angle of 45deg off. +X is right, +Y is down (yes it's wrong) and +Z is back. You can mix all 3 to get a diagonal direction too. Example: <ConnectDirection x="-1" y="0" z="1" /> for 45deg left and forward.
    • ShipDrill got:
      • <DiscardingMultiplier> (float, default 3)
      • <Speed> (float, radians, default 12.566371 or pi*4)
      • <CounterRotatingSubparts> (<string> list of model paths; see CubeBlocks_Prototech.sbc)
      • <DustEffect> (particle subtypeId, default Smoke_DrillDust)
      • <DustStoneEffect> (particle subtypeId, default Smoke_DrillDust)
      • <SparksEffect> (particle subtypeId, default Smoke_DrillDust_Metal)
      • <DrillingMaterialName> (PhysicalMaterial subtypeId, default ShipDrill)
    • <ThrusterType> from Thrust block type can also be assigned to Prototech now (see ShipSoundGroups.sbc).
  • Encounters & Loot:
    • Game\Game.sbc got <EncounterColors> (list of hex RGB values, defaults empty); prefabs spawned with SpawningOptions.RandomizeColor get colors randomized for blocks painted as a specific red color (360°, 100%, 100% in-game HSV or 1, 0.2, 0.55 inside the file).
    • ContainerTypeDefinition (ContainerTypes.sbc, loot)'s <Item> got <StoryCategory> (string for Stories.sbc subtypeId)
    • DropContainerDefinition (DropContainers.sbc) got <AuthorshipFaction> (string, faction definition subtypeId).
    • GlobalEncountersGeneratorDefinition got added to Game\SessionComponents.sbc and GpsColor is indeed the only tag available.
    • Configuration.sbc changes:
      • No longer uses a single <LootBag> but multiple inside <LootBags>
      • <LootBag> (ContainerDefinition) got <Size> (grid size either Small or Large, defaults Large).
    • SpawnGroupDefinition (SpawnGroups_*.sbc) has changes:
      • Note: SpawnGroups_GlobalEncounters.sbc has documentation for these.
      • Got <IsGlobalEncounter> (bool, default false)
      • Got <GlobalEncounterSettings> (complex, default null)
      • Got <FactionTypes> (list of <Type> with string values, default empty)
      • Got <Factions> (list of <SubtypeId> with string values, default empty)
      • Got <IsPlanetaryEncounter> (bool, default false)
      • Got <PlanetaryInstallationSettings> (complex, default null) with some mentions that are not in the SBC's docs:
        • <PlanetName> is checked as contains for the planet name (case-sensitive), so if you had a planet called NotEuropa it will get the vanilla planetary encounters meant for Europa.
        • <MaterialTypeName> refers to a voxel material's <MaterialTypeName> (where multiple can use the same one), not the <SubtypeId>.
      • Got <RandomizedPaint> (bool, default false)
      • Got <MinFactionSubEncounters> (byte, default 0)
      • Got <MaxFactionSubEncounters> (byte, default 5)
      • Got <MinHostileSubEncounters> (byte, default 0)
      • Got <MaxHostileSubEncounters> (byte, default 1 or 5 who knows which one is respected)
      • Got <FactionSubEncounters> (complex, default null)
      • Got <HostileSubEncounters> (complex, default null)
      • <IsPirate> was removed (replacement is to use Pirate value in <FactionTypes>)
      • <Prefab> got <GpsGrid> (bool, default false)
      • <Voxel> got <Orientation> (nullable quaternion, default null)
  • EntityComponents:
    • EntityCapacitorComponentDefinition (EntityComponents.sbc for railguns) got <ChargeMultiplier> (float, default 0.8 - multiplies input power, 0.8 means 20% loss)
    • RandomCargoEntityComponent can exist in prefabs' blocks; it's a block-independent version of ContainerType tag in cargo containers, it still requires the prefab to be spawned via with SpawningOptions.SpawnRandomCargo to function; refer to /Content/Data/Prefabs/GlobalEncounters or PlanetaryEncounters for examples.
    • RotatingSubpartComponentDefinition (EntityComponents.sbc) got:
      • <PropagateRotationToChildernSubparts> (bool, default false)
      • <Spinup> (float, default 1)
      • <Spindown> (float, default 1)
      • <NeedsEnergyToRotate> (bool, default false)
  • ShipSoundGroup's <Sounds> (ShipSoundGroups.sbc) got PrototechThrusters, PrototechThrustersIdle, PrototechThrusterSpeedUp types.

Programmable Block API

  • PB's Run toolbar action now has a second prompt for a label which is written on the action icon (it's normally for status).
  • New objects:
    • MyRotationDirection (enum, used by IMyMotorStator.RotateToAngle())
  • The obsolete Ingame.IMyOxygenGenerator was removed.
  • IMyTerminalBlock.CustomName setter is now limited to max 512 characters.
  • IMyGasGenerator got IsProducing.
  • IMyMotorStator got RotateToAngle().
  • IMyPistonBase got MoveToPosition().
  • IUserCustomizableTerminalAction got GetBlock() (still inaccessible).
  • IMyShipController.GetCurrentMass() was changed which mass value it adds to tally physical mass, unclear what the consequences are.
  • MathHelper got Clamp(byte, byte, byte) overload.
  • Terminal Property "ShowInToolbarConfig" was removed (bugreport) - this does not affect the interface property.

Visual Scripting Tool

  • SetChatMaxMessageCount() no longer does anything.

Mod API

  • Official API docs have been updated for 205 (changes)
  • Unofficial/community API docs
  • New Objects:
    • IMyGlobalEncounterComponent (entity component marking a global encounter, can be on grids and voxelmaps)
    • IMyRandomCargoEntityComponent (block entity component)
    • IMyRespawnComponent (block entity component)
    • GlobalEncounterSettings (data struct)
    • MyCubeBlockTagDefinition (BlockTags.sbc; currently the Tag is assigned from SubtypeId)
    • MyStoryCategoryDefinition and MyStoryDefinition (Stories.sbc)
    • PlanetaryInstallationSettings and SubEncounter (used by MyObjectBuilder_SpawnGroupDefinition)
    • MyBlueprintIdTracker
    • MyLightSourceType (used by MyLight)
    • IMyRandomCargoEntityComponent (block entity component)
    • IMySubtypedComponent
  • The obsolete ModAPI.IMyOxygenGenerator was removed.
  • MyCubeBlockDefinition got TagDefinition field reference (it's not defined in block SBC however, but in BlockTags.sbc)
  • MyPhysics.CollisionLayers got StaticGridsSearchCollisionLayer (5) which ignores collisions with a lot of things, see Physics (section Layers) for details.
  • SpawningOptions enum got:
    • RandomizeColor - Replaces mask color (Vector3(1f, 0.2f, 0.55f)) with a random color
    • SetNpcSpawnedGrid -Sets NPC spawned grid to true for the spawned grids
    • SetOwnerNobody - Sets ownership to nobody
  • IMyNPCGridClaimSessionComponent got some events (doesn't matter, no way to get reference to this).
  • MyDefinitionManager got:
    • TryGetSpawnGroupDefinition()
    • GetStoryDefinition(), GetStoryDefinitions(), GetRandomStoryDefinition(), GetAllStoriesDefinition()
    • GetStoryCategoryDefinition(), GetAllStoryCategoriesDefinition()
    • GetTagDefinition(), GetStoryDefinition()
    • GetLootBagDefinition() now has a required parameter MyCubeSize size
  • Sandbox.Game.StringExtensions got Truncate().
  • MyCubeBlock.UpdateEmissiveParts() is no longer static.
  • MyAutopilotWaypoint got a Toolbar field (not directly usable).
  • MyCubeBlockHighlightModes enum got WhenIsWorking value (and it's used by all doors).
  • MyCubeGrid got:
    • OnBlockAddedGlobally, OnBlockRemovedGlobally, OnBlocksChangeFinishedGlobally static events
    • OnDynamicNPCGridOrSubgridShooting event
    • HasMechanicalTopPenindingReattach bool field (and HasMechanicalBlocksWaitingOnAttachUpdate includes it with OR)
    • HasCubeGridRender and IsBlockAreaChange bool get properties
    • InitFromClipboard bool get&set property; game doc: "True if created from <see cref="T:Sandbox.Game.Entities.Cube.MyGridClipboard" />. Set earlier than IsProjected, before blocks/ec are handled"
    • RemoveBlocksBuiltByID(long) was replaced by RemoveBlocksBuiltByIDs(List<long>)
    • ChangeShareRequest() static method
    • Probably should not be used: HandleRemovalOfOwnershipTransferRequests(), OnChangeOwnersRequestConfirmation(), CancelPendingTransferRequestsServerSide(), Players_PlayerRemoved() static methods and GunShooting() method.
  • IMyGridGroups (MyAPIGateway.GridGroups), MyGridGroupsHelper, MyCubeGridGroups all got FindConnection() (has docs on it).
  • MyEntities no longer has IsWorldLimited(), WorldHalfExtent(), WorldSafeHalfExtent(), IsInsideWorld() (the ones in MyAPIGateway.Entities / IMyEntities still work, they got redirected to their new internal location).
  • MyEntities.RemapObjectBuilder() now returns IMyRemapHelper.
  • IMyRemapHelper got GetRemapInfo().
  • MyEntityList.GetEntityList() got an overload with IEnumerable<MyEntity> parameter.
  • MyFloatingObject got ShouldUpdateTooltips bool get property.
  • MyGyro got OnGyroPowerChanged event and IsAccountedByGyroSystem bool get&set property.
  • MySessionComponentSafeZones got GetBelongingSafezones() and IsInSafezone() static methods.
  • MyVoxelBase got IsGlobalEncounterAsteroid property.
  • MyStoreBuyItemResults enum got LimitsGridSize, LimitsNoFaction, LimitsPerBlockType, LimitsPlayer values.
  • MyLightingLogic.LightLocalData got Type field.
  • MyResourceSinkComponent got ForceCallNextIsPoweredChanged().
  • MyLight got LightSourceType.
  • IMyEntityCapacitorComponent is now implemented by the internal component therefore can be retrieved via block.Components.TryGet<IMyEntityCapacitorComponent>(out variable).
  • MyFactionTypes enum got Custom option (which is automatically used if it's not one of the other presets).
  • MyFactionNameTypeEnum enum got Unknown option.
  • MyComponentContainer got TryGet(Type, MyStringHash, out MyComponentBase) overload.
  • MyHierarchyComponentBase changed return type of ChildrenNeedingWorldMatrix from ListReader<MyHierarchyComponentBase> to HashSetReader<MyHierarchyComponentBase>.
  • MyEntity got PropagateSubpartRotationThroughHieerarchy bool field and GetCubeBlockParent() static method.
  • MyEntity.SetEmissivePartsForSubparts() is now recursive to affect the entire tree of subparts.
  • IMyUseObject got ShouldUpdateTooltips bool property.
  • MyActionDescription and MyUseObjectBase got thing.
  • IMyCubeGrid got IsNpcSpawnedGrid bool property.
  • IMyFaction got FactionType property and HasLastMember() method.
  • IMyFactionCollection's (MyAPIGateway.Session.Factions) CreateFaction() method got marked obsolete, and CreateFactionNew() was added.
  • ObjectBuilder notable changes (there's more than this transformed in other sections):
    • MyObjectBuilder_AirVent got Toolbar.
    • MyObjectBuilder_Gps.Entry:
      • Got IsGlobalEncounterGPS.
      • Notice: List<MyObjectBuilder_Gps.Entry> Entries has a different ProtoMember tag number (31 to 35), only affects modders storing these as binary and reading them back, won't get any entries; game uses XML parser.
    • MyObjectBuilder_Identity got IsGlobalEncounterSpawner.
    • MyObjectBuilder_Player got GameAcronym.