SE v202 modding & scripting changes - THDigi/SE-ModScript-Examples GitHub Wiki
Moved to SE wiki: https://spaceengineers.wiki.gg/wiki/Modding/Reference/Patch_Changes/1.202
Old content
I compared the decompiled Space Engineers' game code for v202.124 against v201.014 and this is what I found that is relevant to modding and scripting (including PB).-
v202.124 additions:
- Dedicated server config (IMyDedicatedConfig) got
RemoteApiIP.
- Dedicated server config (IMyDedicatedConfig) got
-
v202.112 additions:
- Dedicated server config (IMyDedicatedConfig) had
string WorldPlatformreplaced withbool CrossPlatform.
- Dedicated server config (IMyDedicatedConfig) had
-
World settings got (
MyAPIGateway.Session.SessionSettings):-
EnableSpaceSuitRespawn=true (Enables player to respawn in space suit) -
MatchRestartWhenEmptyTime=0 (Server will restart after specified time [minutes], when it's empty after match started. Works only in PvP scenarios. When 0 feature is disabled.) -
EnableFactionVoiceChat=false (Faction Voice Chat removes the need of antennas and broadcasting of the character for faction.) -
EnableOrca=true (Enable advanced Optimal Reciprocal Collision Avoidance) -
MaxProductionQueueLength=50 (Maximum allowed length of a production queue. Can affect performance.)
-
-
v202.112 additions:
- Fonts (folder) got 3 new characters (the platform icons) which are added before every player's name.
- Fonts.sbc got a
SwappedPathattribute per<Path>tag which is used in PlayStation when "AreEnterBackButtonsSwapped" which is never true on PC (also we don't have the XML they point to, gonna be tricky for mod.io font mods).
-
New block types:
- EventControllerBlock (CubeBlocks_Automation.sbc)
- PathRecorderBlock (CubeBlocks_Automation.sbc)
- BasicMissionBlock (CubeBlocks_Automation.sbc)
- FlightMovementBlock (CubeBlocks_Automation.sbc)
- DefensiveCombatBlock (CubeBlocks_Automation.sbc)
- OffensiveCombatBlock (CubeBlocks_Automation.sbc)
- EmotionControllerBlock (CubeBlocks_GridAiPack.sbc)
-
All block definitions got:
- <EnableUseObjectSimpleTargeting> (bool, defaults false) which if set true I think ignores the visual model when targetting an UseObject (terminal, inventory, etc)
- <MechanicalTopInitialPlacementOffset> (Vector3, defaults null) which is used only by rotors/pistons/suspensions to offset the top part spawn point, used by 2x2 suspensions.
-
Camera block got a
cameradummy option which is used for position offset only (no rotation). -
AirVent definition got <RotationSpeed>, <SpinUpSpeed>, <SpinDownSpeed>.
- these are for the new rotating subpart support, which grabs the very first subpart it finds no matter the name.
-
Missile ammo definition got <MissileRicochetAngle> (float, -1, degrees), <MissileRicochetDamage> (float, 0), <MissileRicochetProbability> (float, 0)
-
EntityComponents got a <RemoveExistingComponentOnNewInsert> (bool, true), where setting it false allows this component to be used multiple times on the same entity.
-
Detailed info got color support (bottom right in terminal):
-
[color=#AARRGGBB]for custom colors (in hex format),[/color]closing tag. - surround with
[and]for yellow. - to print [ or ] without coloring, use
[[or]].
-
-
New objects:
IMyEventControllerBlockIMyOffensiveCombatBlockIMyDefensiveCombatBlockIMyBasicMissionBlockIMyFlightMovementBlockIMyPathRecorderBlockIMyEmotionControllerBlockIMySearchlightIMyWindTurbine- and a few others that are accessible from the interfaces above.
-
IMyOxygenTankwas removed (it was obsolete for several years). -
IMyThrustgotCurrentThrustPercentage. -
IMyPistonBasegotNormalizedPosition. -
IMyTurretControlBlockgotIsSunTrackerEnabled. -
IMyShipConnector'sIsConnectedis no longer tagged obsolete. -
IMyCubeGridgotLinearVelocityandSpeed(accessible viablock.CubeGrid). -
IMyInventorygotVolumeFillFactor. -
Vector3D&Vector3got a staticAngle(). -
⚠️ Caution:Vector3D&Vector3got an instancedNormalized()which returnsVector3[D].Normalize(this), easily mistaken forNormalize()which mutates the vector. -
⚠️ Caution:Vector2andVector2Dare now implicitly castable (accidental precision loss). -
BoundingBoxD&MyOrientedBoundingBoxDgotGetCorner().
-
v202.112 additions:
- MyEntity got UpdateDuration (get only, overrideable by custom entity classes).
- MyRenderComponentBase.TextureChanges (Entity.Render) changed from
stringkey toMyStringIdkey. - [I]MyEntity.SetTextureChangesForSubparts() changed its dictionary parameter from
stringkey toMyStringIdkey.
NOTE: the previous method still exists and it allocates a new dictionary! - IMyDedicatedConfig had
string WorldPlatformreplaced withbool CrossPlatform. - MyLog got ReportCodeLine().
- MyUtils got GetFixedInvalidFileNameChars() and GetFixedInvalidPathChars().
-
New objects:
-
IMyStoredPowerRatio(cast a power-storing block or component to it). -
IMyComponentStack(access fromIMySlimBlock.ComponentStack). -
MyModAPINaturalGravityComponent,IMyModAPINaturalGravityComponent,IMyNaturalGravityComponent(seeMyAPIGateway.GravityProviderSystem). MyAutopilotComponent-
IMyEventControllerEntityComponent,IMyEventComponentWithGui -
IMyWorkAreaTool(cast ship tools to it)
-
-
MyFakes.ENABLE_TYPES_FROM_MODSwas set totruewhich means custom OBs can be declared in mods. -
PathUtils.GetFilesRecursively()was added...⚠️ it restricts to local mods folder and user folder only, it won't work after mod is published. -
MyAPIGateway.GravityProviderSystemwas added which can get/add/remove gravity providers. -
MyGamePruningStructure.Instancewas added which cloned all methods there, can't tell if there's new stuff. -
MyRadioBroadcasterswas made public. -
MyCubeGridchanges:-
ColorBlocks()andSkinBlocks()lost thevalidateOwnershiparg. -
ColorGridOrBlockRequestValidation()lost itsplayerarg. -
ContainerOpened()andCompetetiveContainerOpened()got anentityIdarg. - lost 2 overloads of
BuildBlockRequest(), lostRequestSetToConstruction(). - lost a bunch of methods regarding multiblocks (which is not a supported SE feature anyway).
- got
ChangePowerProducerState(),BlocksWaitingOnAttachUpdate,InternalInitFinished,NaturalGravity,LockedByCount. - got
GetConnectedGrids(GridLinkTypeEnum, Action\<MyCubeGrid\>),MechanicalConnectionBlockAttachUpdateStatusChanged(). - got static
ShowAiInfo. - got events:
OnMinMaxChanged,OnConnectionChangeCompleted,OnTargetLockLost,OnDeschedule.
-
-
IMyCubeGridgotGetMaxThrustInDirection(),RvoAgentId,IsBlockTrasferInProgress,NaturalGravity. -
IMyCubeGridgot events:OnGridBlockDamaged,OnTargetLocked,OnNaturalGravityChanged,SpeedChanged,OnMaxThrustChanged,OnBlockIntegrityChanged. -
IMyGridControlSystemgotCurrentShipController(accessible fromgrid.ControlSystem). -
IMyGridGasSystemgotForcePressurize(accessible fromgrid.GasSystem; NOTE: server-side only). -
IMySlimBlockgotComponentStack,BlockGeneralDamageModifier,IsMovedBySplit. -
MyCubeBlock'sResourceSinksetter is now accessible, gotGetEmissiveStateHashFromComponent,OnUpdateBeforenextFrameevents. -
IMyCubeBlockgotCubeGridChangedevent. -
IMyTerminalBlockgotIsDetailedInfoDirty,ClearDetailedInfo(),GetDetailedInfo(),SetDetailedInfoDirty(). -
IMyControllableEntitygotIsAutopilotControlled,RelativeDampeningDistanceandRelativeDampeningTarget. -
MyRemoteControlhas a billion changes... -
MyShipController'sPrioritygetter was made public. -
IMyCockpitgot,IsOccupied,IsOccupiedChanged. -
MyDoorBasegotOpenChangedevent. -
IMyDoorgotOnDoorOpen,OnDoorClosedevents. -
IMyThrustgotThrustChangedevent. -
IMyMechanicalConnectionBlockgotOnAttachedChangedevent. -
IMyMotorStatorgotAngleChangedevent. -
IMyPistonBasegotNormalizedPositionChangedevent. -
IMyShipConnectorgotIsConnectedChangedandAttachFinishedevents. -
IMyShipMergeBlockgotMergeStateChangedevent. -
IMyPowerProducergotCurrentOutputRatioChangedevent. -
IMyStoreBlockgotCreateStoreItem()(4 overloads),GetStoreItems(),GetStoreItemById(),InsertStoreItem(),RemoveStoreItem(). -
IMyInventorygotOnVolumeChangedevent. -
IMyCharactergotCharacterGeneralDamageModifier. -
IMyConfigDedicatedgotDedicatedId. -
MyEntities got IsShapePenetrating()(which we cannot use because it asks forHkShape). -
MyEntities'TestPlaceInSpace()got 2 new args. -
MyGridTargetinggot many changes. -
MyPhysics.CollisionLayersgotOpenableSubpartLayer(4). -
MyVisualScriptLogicProvidergotTriggerTimerBlockForNonFriendlyPlayer(),GetPlayerRespawnPoints(),GoToPostMatchState(),ReportMatchEndToAnalytics(),SetScenarioWinTypeForAnalytics(). -
Setting
MyEntity.Namenow automatically callsMyEntitiesInterface.SetEntityName(). -
Billboard reflections now work: