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