SE v200 modding & scripting changes - THDigi/SE-ModScript-Examples GitHub Wiki

Moved to SE wiki: https://spaceengineers.wiki.gg/wiki/Modding/Reference/Patch_Changes/1.200

Old content

I compared the decompiled Space Engineers' game code for v200 against v199 and this is what I found that is relevant to modding and scripting (including PB).

SBC modding/modelling (affects modAPI too)

  • New block types:
    • TurretControlBlock (CubeBlocks_Automation.sbc)
    • Searchlight (CubeBlocks_Warfare2.sbc)
    • HeatVentBlock (CubeBlocks_Warfare2.sbc)
  • ControllerSchemes.sbc now exists (not sure if it's intended to be modded)
  • TargetGroups.sbc now exists (has the groups that turrets can target, including types that automatically get them)
  • Fonts.sbc got Japanese data.
  • Block replaced: Cockpit/PassengerSeatSmall is now hidden and replaced by PassengerSeatSmallNew (CubeBlocks_Interiors.sbc)
  • All blocks that have On/Off in terminal got LCD support (<ScreenAreas> tag)
  • All blocks got:
    • <TargetingGroups> (string list) (see TargetGroups.sbc for values)
    • <PriorityModifier> and <NotWorkingPriorityMultiplier> (float) (cannot easily be set by modAPI, private setter)
    • <DamageEffectOffset> (vector3)
    • <AimingOffset> (vector3) (affects where turrets aim at this block, useful for blocks that have nothing in the center of the boundingbox)
    • <DamageMultiplierExplosion> (float)
    • <DetonateChance>, <DamageThreshold> (float)
    • <AmmoExplosionEffect>, <AmmoExplosionSound> (string)
  • All turret definitions got:
    • <HiddenTargetingOptions> and <EnabledTargetingOptions> (space separated tags), values: Players SmallShips LargeShips Stations Asteroids Missiles Neutrals Friends Enemies (mods cannot add to this list)
    • <UpCameraOffset> and <ForwardCameraOffset> (float)
    • <SubpartPairing> (see vanilla definition in CubeBlocks_Weapons.sbc at AutoCannonTurret)
    • <CameraDummyName> (string)
  • All weapon block definitions got:
    • <MuzzleProjectileDummyName>, <MuzzleMissileDummyName>, <HoldingDummyName> (string)
  • Weapon definitions (Weapon.sbc) got:
    • <ShotDelay> (float) (only usable on static missile launcher)
    • FlightSoundName and PreShotSoundName inside <MissileAmmoData ...>
    • <Effects>'s <Effect ...> now has a lot more params inside it + new Action="BeforeShoot" (usable by railguns).
    • <MinimumTimeBetweenIdleRotationsMs> (int, default: 3500, likely only usable on turrets)
    • <MaximumTimeBetweenIdleRotationsMs> (int, default: 4500, likely only usable on turrets)
  • Ammo definition (Ammo.sbc) got:
    • <MissileHealthPool> (float) (how much block health it can penetrate through, basically)
    • <MissileTrailEffect> (string, particle subtypeId)
    • <MissileGravityEnabled> (bool)
    • <ProjectileExplosionRadius> and <ProjectileExplosionDamage> (float)
  • Game.sbc got <Explosion*> tags at the bottom for ammo explosion.
  • HUD/Default.sbc got <TargetingMarkers> section.
  • EntityComponents.sbc got TargetFocusComponent (character) and EntityCapacitorComponent (static missile launcher).
  • Lighting blocks (interior light and spotlight) got:
    • <PointLightEmissiveMaterial>, <SpotLightEmissiveMaterial> (string)
    • <LightDummyName> (string)
  • JumpDrive definition got:
    • <PowerEfficiency> (float, default: 0.8)
    • <MinJumpDistance> (double, default: 5000)
  • Bot definition (Bots.sbc) got:
    • <GridDamage>, </CharacterDamage> (int)
    • <AttackLength>, <AttackRadius> (float)
    • <TargetGrids>, <TargetCharacters> (bool)
    • <AttackSound> (audio def subtypeId)
  • Planet generator definition got:
    • <MaxBotCount> (int, default 16)
    • <MaxBotsPerPlayer> (int, default 32)
  • Character definition got <HeadServerOffset> (float)
  • Cockpit/cryo block definition got <BackpackEnabled> (bool)
  • Cockpit/RC/cryo block definition got <TargetLockingEnabled> (bool, default: false)
  • ExhaustBlock block definition got <AvailableEffects> (string list) (probably is moddable now?)
  • Thruster's flame dummies (model) got "_nodamage" suffix to disable damage capsule on those flames
  • Gas/oxygen tank definition got:
    • <LeakPercent> (float, default 1)
    • <GasExplosionMaxRadius>, <GasExplosionNeededVolumeToReachMaxRadius>, <GasExplosionDamageMultiplier>
    • <GasExplosionSound> (string)
    • <EmptyDamagedSound> (string, default: ParticleWeapExpl)
    • <EmptyDamageEffectName> (string, default: Damage_HeavyMech_Damaged)

PB API (affects ModAPI too):

  • IMyHeatVentgot, IMyTurretControlBlock got added
  • IMyShipMergeBlock got State
  • IMyLargeTurretBase got TargetEnemies, GetTargetingGroups(), GetTargetingGroup(), SetTargetingGroup(), SetManualAzimuthAndElevation()
  • IMyShipDrill now implements IMyShipToolBase
  • IMyTextSurfaceProvider got UseGenericLcd (it's false for the classic LCD blocks)
  • MyGridProgram's ElapsedTime was removed (was obsolete before)

ModAPI:

  • Whitelist changes:
    • namespace of MyObjectBuilder_TextPanelDefinition (Sandbox.Common.ObjectBuilders.Definitions.* from VRage.Game.dll)
    • namespace of MyObjectBuilder_SafeZoneBlock (ObjectBuilders.SafeZone.* from SpaceEngineers.ObjectBuilders.dll)
    • namespace of MySessionComponentEconomyDefinition (VRage.Game.Definitions.SessionComponents* from VRage.Game.dll)
    • namespace of MySafeZoneSettingsDefinition (VRage.Game.Definitions.* from VRage.Game.dll)
    • namespace of MyReputationSettingsDefinition (VRage.Game.Definitions.Reputation.* from VRage.Game.dll)
    • namespace of MyHudDefinition (Sandbox.Definitions.GUI.* from Sandbox.Game.dll)
    • namespace of MySync<, > (VRage.Game.ModAPI.Network.* from VRage.Game.dll)
    • SyncDirection.BothWays, SyncDirection.FromServer, SyncExtensions, IMyEventProxy
    • MyBillboard, MyTriangleBillboard, MyBillboard.LocalTypeEnum
    • MyDecalPositionUpdate, MyDecalRenderInfo, MyDecalBindingInfo, MyDecalFlags
    • MyControlStateType, MyControlType, IMyControllerControl
    • MyTextureChange, MyMeshDrawTechnique, MyIntersectionResultLineTriangleEx, MyIntersectionResultLineTriangle
    • MyAmmoBase
  • Various interfaces and objects were moved in other namespaces, you'll need to update them in your own code (keen adds usings to mods themselves).
  • MyFunctionalBlockDefinition, MyHeatVentBlockDefinition, MyControllerSchemeDefinition was added
  • MyChatBotResponseDefinition was removed
  • MyJumpDriveDefinition's JumpDelay field was removed from code
  • MyCubeBlockDefinition.GetObjectBuilder() no longer hardcodedly throws an exception.
  • MyCubeBlockDefinition got MatchingTurretTargetingGroup(MyStringHash)
  • MyDefinitionManager got:
    • GetChatBotResponseDefinitions() was removed
    • GetControllerSchemesSelectable(), GetControllerScheme(), GetEmoteDefinitions() were added
    • GetTargetingGroupDefinitions(), HasDefaultTargetingGroup() were added
  • MyFactionDefinition got FactionIconWorkshopId (a mystery in how it works)
  • MyWeaponDefinition and MyWeaponItemDefinition got DummyNames dictionary (0 = projectile, 1 = missile, 2 = holding)
  • MyDecals got:
    • HandleAddDecal() got a List<int> param to get IDs of added decals, and a few other new params
    • AddDecal() got added
  • MyExplosionInfo got DirectionNormal, ShouldDetonateAmmo and EffectHitAngle
  • MyExplosions got OnExplosion static event
  • MyInventory got ExternalMass field
  • MyCompositeGameLogicComponent got Add<T>(), Remove<T>(), Remove(string) and GetComponents().
  • IMyCubeGrid got:
    • OnGridMerge event
    • GetGridGroup(), GetFatBlocks<T>(), ApplyDeformation()
    • ResourceDistributor, ConveyorSystem, WeaponSystem, ControlSystem, JumpSystem, GasSystem
  • MyCubeGrid got IsSolarOccluded, OnConnectionChanged, IsConnectedTo(), GetConnectedGrids(), ShootOrigin, GetAmmoDefinition, MaxShootRange
  • IMyGridGroups (MyAPIGateway.GridGroups) got OnGridGroupCreated, OnGridGroupDestroyed, GetGridGroup(), GetGridGroups<T>(), AddGridGroupLogic<T>()
  • MyDataBroadcaster got IsBeacon
  • MyEntity3DSoundEmitter got ClearSecondaryCue()
  • MyJumpDrive got CanJumpIfFull and CanJumpIfFullAndHasAccess()
  • MyPlanet got PrefetchShapeOnRay()
  • IMyProjectileDetector got added (MySafeZone implements it for example)
  • IMyTargetingCapableBlock got added (and is implemented by MyShipController and turret base)
  • MyShipController got IsTargetLockingEnabled and IsTargetLockingEnabled() (same thing)
  • MyVoxelBase got GetMaterialAt()
  • IMyVoxelMaps got CreatePredefinedVoxelMap(), CreateProceduralVoxelMap(), SpawnPlanet()
  • MyResourceDistributorComponent got OnPowerGenerationChanged, MaxAvailableResourceByType(), TotalRequiredInputByType()
  • MyResourceSinkComponent's SetRequiredInputFuncByType() now returns the old func
  • MyTargetingHelper now exists, Instance is statically accessible.
  • MyAPIGateway got Projectiles, Missiles, DLC
  • IMyMissile and IMyGunObject<T> (T:MyDeviceBase) was added
  • IMyUtilities (MyAPIGateway.Utilities) got ReadFileInModLocation(), ReadFileInGameContent(), ReadBinaryFileInModLocation(), ReadBinaryFileInGameContent(), FileExistsInModLocation(), FileExistsInGameContent()
  • IMyGui (MyAPIGateway.Gui) got ShowTerminalPage(), ChangeInteractedEntity()
  • IMyPhysics (MyAPIGateway.Physics) got CreatePhysics(), CreateMass(), CreateSettingsFor*()
  • MyModContext got ModItem
  • MyTransparentGeometry got AddBillboard(), AddBillboards(), RemovePersistentBillboard(), RemovePersistentBillboards(), ApplyActionOnPersistentBillboards() (2 overloads)
  • MyGameLogicComponent and IMyGameLogicComponent got ModContext
  • MyGameDefinition got Explosion*
  • MyEntity.Name is now a property that calls the proper things when you set the name (MyEntitiesInterface.SetEntityName())
  • MyEntity got RemovedFromScene event
  • IMyEntity got ModelCollision
  • IMyConfig got LightsQuality
  • IMyConfigDedicated removed AutoRestartSave, added RestartSave
  • IMyCubeBlock lost DebugDraw()
  • IMyCubeBuilder.AddConstruction() was marked obsolete
  • IMyDamageSystem (MyAPIGateway.Session.DamageSystem) got RaiseBeforeDamageApplied(), RaiseAfterDamageApplied()
  • IMyFactionCollection (MyAPIGateway.Session.Factions) got GetReputationBetweenPlayerAndFaction()
  • IMyModel got GetTriangle(), GetDrawTechnique(), GetVertex(), GetVertex()
  • IMyPlayerCollection (MyAPIGateway.Players) got ItemConsumed event
  • IMySession (MyAPIGateway.Session) got TotalBotLimit, TryGetAdminSettings(), IsUser*()
  • IMyDestroyableObject's DoDamage() got a shouldDetonateAmmo=true optional parameter
  • MyObjectBuilderType.LEGACY_TYPE_PREFIX is now public
  • IMyInput (MyAPIGateway.Input) got (for gamepad): GetControl(), TryGetControl(), GetCodeForControl(), IsControlAnalog(), IsDefined(), IsControl()
  • MySpectator got OnModeChanged event
  • IMyGridTerminalSystem (MyAPIGateway.TerminalActionsHelper.GetTerminalSystemForGrid(grid)) got GroupAdded and GroupRemoved events
⚠️ **GitHub.com Fallback** ⚠️