diff --git a/Content.Client/GameObjects/Components/Body/Scanner/BodyScannerDisplay.cs b/Content.Client/GameObjects/Components/Body/Scanner/BodyScannerDisplay.cs index 09739e7432..f4b8cd11ca 100644 --- a/Content.Client/GameObjects/Components/Body/Scanner/BodyScannerDisplay.cs +++ b/Content.Client/GameObjects/Components/Body/Scanner/BodyScannerDisplay.cs @@ -144,11 +144,10 @@ namespace Content.Client.GameObjects.Components.Body.Scanner { BodyPartLabel.Text = $"{Loc.GetString(slotName)}: {Loc.GetString(part.Owner.Name)}"; - // TODO BODY Make dead not be the destroy threshold for a body part - if (part.Owner.TryGetComponent(out IDamageableComponent? damageable) && - damageable.TryHealth(DamageState.Critical, out var health)) + // TODO BODY Part damage + if (part.Owner.TryGetComponent(out IDamageableComponent? damageable)) { - BodyPartHealth.Text = $"{health.current} / {health.max}"; + BodyPartHealth.Text = Loc.GetString("{0} damage", damageable.TotalDamage); } MechanismList.Clear(); diff --git a/Content.Client/GameObjects/Components/Kitchen/ReagentGrinderBoundUserInterface.cs b/Content.Client/GameObjects/Components/Kitchen/ReagentGrinderBoundUserInterface.cs index 41ae8e015e..d52359a31e 100644 --- a/Content.Client/GameObjects/Components/Kitchen/ReagentGrinderBoundUserInterface.cs +++ b/Content.Client/GameObjects/Components/Kitchen/ReagentGrinderBoundUserInterface.cs @@ -22,8 +22,8 @@ namespace Content.Client.GameObjects.Components.Kitchen [Dependency] private readonly IPrototypeManager _prototypeManager = default!; private GrinderMenu _menu; - private Dictionary _chamberVisualContents = new Dictionary(); - private Dictionary _beakerVisualContents = new Dictionary(); + private Dictionary _chamberVisualContents = new(); + private Dictionary _beakerVisualContents = new(); public ReagentGrinderBoundUserInterface(ClientUserInterfaceComponent owner, object uiKey) : base(owner, uiKey) { } protected override void Open() diff --git a/Content.Client/GameObjects/Components/Mobs/State/CriticalMobState.cs b/Content.Client/GameObjects/Components/Mobs/State/CriticalMobState.cs new file mode 100644 index 0000000000..e468de5d43 --- /dev/null +++ b/Content.Client/GameObjects/Components/Mobs/State/CriticalMobState.cs @@ -0,0 +1,8 @@ +using Content.Shared.GameObjects.Components.Mobs.State; + +namespace Content.Client.GameObjects.Components.Mobs.State +{ + public class CriticalMobState : SharedCriticalMobState + { + } +} diff --git a/Content.Client/GameObjects/Components/Mobs/State/CriticalState.cs b/Content.Client/GameObjects/Components/Mobs/State/CriticalState.cs deleted file mode 100644 index 39b750d525..0000000000 --- a/Content.Client/GameObjects/Components/Mobs/State/CriticalState.cs +++ /dev/null @@ -1,30 +0,0 @@ -using Content.Client.GameObjects.EntitySystems; -using Content.Shared.GameObjects.Components.Damage; -using Content.Shared.GameObjects.Components.Mobs; -using Content.Shared.GameObjects.Components.Mobs.State; -using Robust.Client.GameObjects; -using Robust.Shared.GameObjects.Systems; -using Robust.Shared.Interfaces.GameObjects; - -namespace Content.Client.GameObjects.Components.Mobs.State -{ - public class CriticalState : SharedCriticalState - { - public override void EnterState(IEntity entity) - { - if (entity.TryGetComponent(out AppearanceComponent appearance)) - { - appearance.SetData(DamageStateVisuals.State, DamageState.Critical); - } - - EntitySystem.Get().Down(entity); - } - - public override void ExitState(IEntity entity) - { - EntitySystem.Get().Standing(entity); - } - - public override void UpdateState(IEntity entity) { } - } -} diff --git a/Content.Client/GameObjects/Components/Mobs/State/DeadState.cs b/Content.Client/GameObjects/Components/Mobs/State/DeadMobState.cs similarity index 87% rename from Content.Client/GameObjects/Components/Mobs/State/DeadState.cs rename to Content.Client/GameObjects/Components/Mobs/State/DeadMobState.cs index f9395b87e5..f3345be4c2 100644 --- a/Content.Client/GameObjects/Components/Mobs/State/DeadState.cs +++ b/Content.Client/GameObjects/Components/Mobs/State/DeadMobState.cs @@ -1,5 +1,4 @@ using Content.Client.GameObjects.EntitySystems; -using Content.Shared.GameObjects.Components.Damage; using Content.Shared.GameObjects.Components.Mobs; using Content.Shared.GameObjects.Components.Mobs.State; using Robust.Client.GameObjects; @@ -9,10 +8,12 @@ using Robust.Shared.Interfaces.GameObjects; namespace Content.Client.GameObjects.Components.Mobs.State { - public class DeadState : SharedDeadState + public class DeadMobState : SharedDeadMobState { public override void EnterState(IEntity entity) { + base.EnterState(entity); + if (entity.TryGetComponent(out AppearanceComponent appearance)) { appearance.SetData(DamageStateVisuals.State, DamageState.Dead); @@ -28,6 +29,8 @@ namespace Content.Client.GameObjects.Components.Mobs.State public override void ExitState(IEntity entity) { + base.ExitState(entity); + EntitySystem.Get().Standing(entity); if (entity.TryGetComponent(out PhysicsComponent physics)) @@ -35,7 +38,5 @@ namespace Content.Client.GameObjects.Components.Mobs.State physics.CanCollide = true; } } - - public override void UpdateState(IEntity entity) { } } } diff --git a/Content.Client/GameObjects/Components/Mobs/State/MobStateComponent.cs b/Content.Client/GameObjects/Components/Mobs/State/MobStateComponent.cs new file mode 100644 index 0000000000..eb29f6a8c3 --- /dev/null +++ b/Content.Client/GameObjects/Components/Mobs/State/MobStateComponent.cs @@ -0,0 +1,13 @@ +#nullable enable +using Content.Shared.GameObjects.Components.Mobs.State; +using Robust.Shared.GameObjects; + +namespace Content.Client.GameObjects.Components.Mobs.State +{ + [RegisterComponent] + [ComponentReference(typeof(SharedMobStateComponent))] + [ComponentReference(typeof(IMobStateComponent))] + public class MobStateComponent : SharedMobStateComponent + { + } +} diff --git a/Content.Client/GameObjects/Components/Mobs/State/MobStateManagerComponent.cs b/Content.Client/GameObjects/Components/Mobs/State/MobStateManagerComponent.cs deleted file mode 100644 index f9ca367df3..0000000000 --- a/Content.Client/GameObjects/Components/Mobs/State/MobStateManagerComponent.cs +++ /dev/null @@ -1,62 +0,0 @@ -#nullable enable -using System.Collections.Generic; -using Content.Shared.GameObjects.Components.Damage; -using Content.Shared.GameObjects.Components.Mobs.State; -using Robust.Shared.GameObjects; - -namespace Content.Client.GameObjects.Components.Mobs.State -{ - [RegisterComponent] - [ComponentReference(typeof(SharedMobStateManagerComponent))] - public class MobStateManagerComponent : SharedMobStateManagerComponent - { - private readonly Dictionary _behavior = new() - { - {DamageState.Alive, new NormalState()}, - {DamageState.Critical, new CriticalState()}, - {DamageState.Dead, new DeadState()} - }; - - private DamageState _currentDamageState; - - protected override IReadOnlyDictionary Behavior => _behavior; - - public override DamageState CurrentDamageState - { - get => _currentDamageState; - protected set - { - if (_currentDamageState == value) - { - return; - } - - if (_currentDamageState != DamageState.Invalid) - { - CurrentMobState.ExitState(Owner); - } - - _currentDamageState = value; - CurrentMobState = Behavior[CurrentDamageState]; - CurrentMobState.EnterState(Owner); - - Dirty(); - } - } - - public override void HandleComponentState(ComponentState? curState, ComponentState? nextState) - { - base.HandleComponentState(curState, nextState); - - if (curState is not MobStateManagerComponentState state) - { - return; - } - - _currentDamageState = state.DamageState; - CurrentMobState?.ExitState(Owner); - CurrentMobState = Behavior[CurrentDamageState]; - CurrentMobState.EnterState(Owner); - } - } -} diff --git a/Content.Client/GameObjects/Components/Mobs/State/NormalState.cs b/Content.Client/GameObjects/Components/Mobs/State/NormalMobState.cs similarity index 60% rename from Content.Client/GameObjects/Components/Mobs/State/NormalState.cs rename to Content.Client/GameObjects/Components/Mobs/State/NormalMobState.cs index af65dcc082..d4cb18b30a 100644 --- a/Content.Client/GameObjects/Components/Mobs/State/NormalState.cs +++ b/Content.Client/GameObjects/Components/Mobs/State/NormalMobState.cs @@ -1,25 +1,20 @@ -using Content.Shared.GameObjects.Components.Damage; -using Content.Shared.GameObjects.Components.Mobs; +using Content.Shared.GameObjects.Components.Mobs; using Content.Shared.GameObjects.Components.Mobs.State; using Robust.Client.GameObjects; using Robust.Shared.Interfaces.GameObjects; namespace Content.Client.GameObjects.Components.Mobs.State { - public class NormalState : SharedNormalState + public class NormalMobState : SharedNormalMobState { public override void EnterState(IEntity entity) { + base.EnterState(entity); + if (entity.TryGetComponent(out AppearanceComponent appearance)) { appearance.SetData(DamageStateVisuals.State, DamageState.Alive); } - - UpdateState(entity); } - - public override void ExitState(IEntity entity) { } - - public override void UpdateState(IEntity entity) { } } } diff --git a/Content.IntegrationTests/Tests/Commands/RejuvenateTest.cs b/Content.IntegrationTests/Tests/Commands/RejuvenateTest.cs index 898aa1220e..3a6013df74 100644 --- a/Content.IntegrationTests/Tests/Commands/RejuvenateTest.cs +++ b/Content.IntegrationTests/Tests/Commands/RejuvenateTest.cs @@ -2,6 +2,7 @@ using Content.Server.GlobalVerbs; using Content.Shared.Damage; using Content.Shared.GameObjects.Components.Damage; +using Content.Shared.GameObjects.Components.Mobs.State; using NUnit.Framework; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Interfaces.Map; @@ -14,7 +15,7 @@ namespace Content.IntegrationTests.Tests.Commands [TestOf(typeof(RejuvenateVerb))] public class RejuvenateTest : ContentIntegrationTest { - private const string PROTOTYPES = @" + private const string Prototypes = @" - type: entity name: DamageableDummy id: DamageableDummy @@ -23,12 +24,17 @@ namespace Content.IntegrationTests.Tests.Commands damagePrototype: biologicalDamageContainer criticalThreshold: 100 deadThreshold: 200 + - type: MobState + thresholds: + 0: !type:NormalMobState {} + 100: !type:CriticalMobState {} + 200: !type:DeadMobState {} "; [Test] public async Task RejuvenateDeadTest() { - var options = new ServerIntegrationOptions{ExtraPrototypes = PROTOTYPES}; + var options = new ServerIntegrationOptions{ExtraPrototypes = Prototypes}; var server = StartServerDummyTicker(options); await server.WaitAssertion(() => @@ -43,19 +49,30 @@ namespace Content.IntegrationTests.Tests.Commands // Sanity check Assert.True(human.TryGetComponent(out IDamageableComponent damageable)); - Assert.That(damageable.CurrentState, Is.EqualTo(DamageState.Alive)); + Assert.True(human.TryGetComponent(out IMobStateComponent mobState)); + Assert.That(mobState.IsAlive, Is.True); + Assert.That(mobState.IsCritical, Is.False); + Assert.That(mobState.IsDead, Is.False); + Assert.That(mobState.IsIncapacitated, Is.False); // Kill the entity damageable.ChangeDamage(DamageClass.Brute, 10000000, true); // Check that it is dead - Assert.That(damageable.CurrentState, Is.EqualTo(DamageState.Dead)); + Assert.That(mobState.IsAlive, Is.False); + Assert.That(mobState.IsCritical, Is.False); + Assert.That(mobState.IsDead, Is.True); + Assert.That(mobState.IsIncapacitated, Is.True); // Rejuvenate them RejuvenateVerb.PerformRejuvenate(human); // Check that it is alive and with no damage - Assert.That(damageable.CurrentState, Is.EqualTo(DamageState.Alive)); + Assert.That(mobState.IsAlive, Is.True); + Assert.That(mobState.IsCritical, Is.False); + Assert.That(mobState.IsDead, Is.False); + Assert.That(mobState.IsIncapacitated, Is.False); + Assert.That(damageable.TotalDamage, Is.Zero); }); } diff --git a/Content.IntegrationTests/Tests/Destructible/DestructibleTests.cs b/Content.IntegrationTests/Tests/Destructible/DestructibleTests.cs new file mode 100644 index 0000000000..8a8767d6bd --- /dev/null +++ b/Content.IntegrationTests/Tests/Destructible/DestructibleTests.cs @@ -0,0 +1,294 @@ +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Content.Server.GameObjects.Components.Destructible; +using Content.Shared.Damage; +using Content.Shared.GameObjects.Components.Damage; +using NUnit.Framework; +using Robust.Shared.GameObjects; +using Robust.Shared.Interfaces.GameObjects; +using Robust.Shared.Interfaces.Map; +using Robust.Shared.IoC; +using Robust.Shared.Map; + +namespace Content.IntegrationTests.Tests.Destructible +{ + [TestFixture] + [TestOf(typeof(DestructibleComponent))] + [TestOf(typeof(Threshold))] + public class DestructibleTests : ContentIntegrationTest + { + private static readonly string DestructibleEntityId = "DestructibleTestsDestructibleEntity"; + + private static readonly string Prototypes = $@" +- type: entity + id: {DestructibleEntityId} + name: {DestructibleEntityId} + components: + - type: Damageable + - type: Destructible + thresholds: + 20: + TriggersOnce: false + 50: + Sound: /Audio/Effects/woodhit.ogg + Spawn: + WoodPlank: + Min: 1 + Max: 1 + Acts: [""Breakage""] + TriggersOnce: false + - type: TestThresholdListener +"; + + private class TestThresholdListenerComponent : Component + { + public override string Name => "TestThresholdListener"; + + public List ThresholdsReached { get; } = new(); + + public override void HandleMessage(ComponentMessage message, IComponent component) + { + base.HandleMessage(message, component); + + switch (message) + { + case DestructibleThresholdReachedMessage msg: + ThresholdsReached.Add(msg); + break; + } + } + } + + [Test] + public async Task TestThresholdActivation() + { + var server = StartServerDummyTicker(new ServerContentIntegrationOption + { + ExtraPrototypes = Prototypes, + ContentBeforeIoC = () => + { + IoCManager.Resolve().Register(); + } + }); + + await server.WaitIdleAsync(); + + var sEntityManager = server.ResolveDependency(); + var sMapManager = server.ResolveDependency(); + + IEntity sDestructibleEntity = null; + IDamageableComponent sDamageableComponent = null; + DestructibleComponent sDestructibleComponent = null; + TestThresholdListenerComponent sThresholdListenerComponent = null; + + await server.WaitPost(() => + { + var mapId = new MapId(1); + var coordinates = new MapCoordinates(0, 0, mapId); + sMapManager.CreateMap(mapId); + + sDestructibleEntity = sEntityManager.SpawnEntity(DestructibleEntityId, coordinates); + sDamageableComponent = sDestructibleEntity.GetComponent(); + sDestructibleComponent = sDestructibleEntity.GetComponent(); + sThresholdListenerComponent = sDestructibleEntity.GetComponent(); + }); + + await server.WaitRunTicks(5); + + await server.WaitAssertion(() => + { + Assert.That(sThresholdListenerComponent.ThresholdsReached.Count, Is.Zero); + }); + + await server.WaitAssertion(() => + { + Assert.True(sDamageableComponent.ChangeDamage(DamageType.Blunt, 10, true)); + + // No thresholds reached yet, the earliest one is at 20 damage + Assert.That(sThresholdListenerComponent.ThresholdsReached.Count, Is.Zero); + + Assert.True(sDamageableComponent.ChangeDamage(DamageType.Blunt, 10, true)); + + // Only one threshold reached, 20 + Assert.That(sThresholdListenerComponent.ThresholdsReached.Count, Is.EqualTo(1)); + + var msg = sThresholdListenerComponent.ThresholdsReached[0]; + + // Check that it matches the total damage dealt + Assert.That(msg.TotalDamage, Is.EqualTo(20)); + + var threshold = msg.Threshold; + + // Check that it matches the YAML prototype + Assert.That(threshold.Acts, Is.EqualTo(0)); + Assert.That(threshold.Sound, Is.Null.Or.Empty); + Assert.That(threshold.Spawn, Is.Null); + Assert.That(threshold.SoundCollection, Is.Null.Or.Empty); + Assert.That(threshold.Triggered, Is.True); + + sThresholdListenerComponent.ThresholdsReached.Clear(); + + Assert.True(sDamageableComponent.ChangeDamage(DamageType.Blunt, 30, true)); + + // Only one threshold reached, 50, since 20 was already reached before + Assert.That(sThresholdListenerComponent.ThresholdsReached.Count, Is.EqualTo(1)); + + msg = sThresholdListenerComponent.ThresholdsReached[0]; + + // Check that it matches the total damage dealt + Assert.That(msg.TotalDamage, Is.EqualTo(50)); + + threshold = msg.Threshold; + + // Check that it matches the YAML prototype + Assert.That(threshold.Acts, Is.EqualTo((int) ThresholdActs.Breakage)); + Assert.That(threshold.Sound, Is.EqualTo("/Audio/Effects/woodhit.ogg")); + Assert.That(threshold.Spawn, Is.Not.Null); + Assert.That(threshold.Spawn.Count, Is.EqualTo(1)); + Assert.That(threshold.Spawn.Single().Key, Is.EqualTo("WoodPlank")); + Assert.That(threshold.Spawn.Single().Value.Min, Is.EqualTo(1)); + Assert.That(threshold.Spawn.Single().Value.Max, Is.EqualTo(1)); + Assert.That(threshold.SoundCollection, Is.Null.Or.Empty); + Assert.That(threshold.Triggered, Is.True); + + sThresholdListenerComponent.ThresholdsReached.Clear(); + + // Damage for 50 again, up to 100 now + Assert.True(sDamageableComponent.ChangeDamage(DamageType.Blunt, 50, true)); + + // No new thresholds reached as even though they don't only trigger once, the entity was not healed below the threshold + Assert.That(sThresholdListenerComponent.ThresholdsReached, Is.Empty); + + // Heal the entity for 40 damage, down to 60 + sDamageableComponent.ChangeDamage(DamageType.Blunt, -40, true); + + // Thresholds don't work backwards + Assert.That(sThresholdListenerComponent.ThresholdsReached, Is.Empty); + + // Damage for 10, up to 70 + sDamageableComponent.ChangeDamage(DamageType.Blunt, 10, true); + + // Not enough healing to de-trigger a threshold + Assert.That(sThresholdListenerComponent.ThresholdsReached, Is.Empty); + + // Heal by 30, down to 40 + sDamageableComponent.ChangeDamage(DamageType.Blunt, -30, true); + + // Thresholds don't work backwards + Assert.That(sThresholdListenerComponent.ThresholdsReached, Is.Empty); + + // Damage up to 50 again + sDamageableComponent.ChangeDamage(DamageType.Blunt, 10, true); + + // The 50 threshold should have triggered again, after being healed + Assert.That(sThresholdListenerComponent.ThresholdsReached.Count, Is.EqualTo(1)); + + msg = sThresholdListenerComponent.ThresholdsReached[0]; + + // Check that it matches the total damage dealt + Assert.That(msg.TotalDamage, Is.EqualTo(50)); + + threshold = msg.Threshold; + + // Check that it matches the YAML prototype + Assert.That(threshold.Acts, Is.EqualTo((int) ThresholdActs.Breakage)); + Assert.That(threshold.Sound, Is.EqualTo("/Audio/Effects/woodhit.ogg")); + Assert.That(threshold.Spawn, Is.Not.Null); + Assert.That(threshold.Spawn.Count, Is.EqualTo(1)); + Assert.That(threshold.Spawn.Single().Key, Is.EqualTo("WoodPlank")); + Assert.That(threshold.Spawn.Single().Value.Min, Is.EqualTo(1)); + Assert.That(threshold.Spawn.Single().Value.Max, Is.EqualTo(1)); + Assert.That(threshold.SoundCollection, Is.Null.Or.Empty); + Assert.That(threshold.Triggered, Is.True); + + // Reset thresholds reached + sThresholdListenerComponent.ThresholdsReached.Clear(); + + // Heal all damage + sDamageableComponent.Heal(); + + // Damage up to 50 + sDamageableComponent.ChangeDamage(DamageType.Blunt, 50, true); + + // Check that the total damage matches + Assert.That(sDamageableComponent.TotalDamage, Is.EqualTo(50)); + + // Both thresholds should have triggered + Assert.That(sThresholdListenerComponent.ThresholdsReached, Has.Exactly(2).Items); + + // Verify the first one, should be the lowest one (20) + msg = sThresholdListenerComponent.ThresholdsReached[0]; + Assert.That(msg.ThresholdAmount, Is.EqualTo(20)); + + // The total damage should be 50 + Assert.That(msg.TotalDamage, Is.EqualTo(50)); + + threshold = msg.Threshold; + + // Check that it matches the YAML prototype + Assert.That(threshold.Acts, Is.EqualTo(0)); + Assert.That(threshold.Sound, Is.Null.Or.Empty); + Assert.That(threshold.Spawn, Is.Null); + Assert.That(threshold.SoundCollection, Is.Null.Or.Empty); + Assert.That(threshold.Triggered, Is.True); + + // Verify the second one, should be the highest one (50) + msg = sThresholdListenerComponent.ThresholdsReached[1]; + Assert.That(msg.ThresholdAmount, Is.EqualTo(50)); + + // Check that it matches the total damage dealt + Assert.That(msg.TotalDamage, Is.EqualTo(50)); + + threshold = msg.Threshold; + + // Check that it matches the YAML prototype + Assert.That(threshold.Acts, Is.EqualTo((int) ThresholdActs.Breakage)); + Assert.That(threshold.Sound, Is.EqualTo("/Audio/Effects/woodhit.ogg")); + Assert.That(threshold.Spawn, Is.Not.Null); + Assert.That(threshold.Spawn.Count, Is.EqualTo(1)); + Assert.That(threshold.Spawn.Single().Key, Is.EqualTo("WoodPlank")); + Assert.That(threshold.Spawn.Single().Value.Min, Is.EqualTo(1)); + Assert.That(threshold.Spawn.Single().Value.Max, Is.EqualTo(1)); + Assert.That(threshold.SoundCollection, Is.Null.Or.Empty); + Assert.That(threshold.Triggered, Is.True); + + // Reset thresholds reached + sThresholdListenerComponent.ThresholdsReached.Clear(); + + // Heal the entity completely + sDamageableComponent.Heal(); + + // Check that the entity has 0 damage + Assert.That(sDamageableComponent.TotalDamage, Is.EqualTo(0)); + + // Set both thresholds to only trigger once + foreach (var destructibleThreshold in sDestructibleComponent.LowestToHighestThresholds.Values) + { + destructibleThreshold.TriggersOnce = true; + } + + // Damage the entity up to 50 damage again + sDamageableComponent.ChangeDamage(DamageType.Blunt, 50, true); + + // Check that the total damage matches + Assert.That(sDamageableComponent.TotalDamage, Is.EqualTo(50)); + + // No thresholds should have triggered as they were already triggered before, and they are set to only trigger once + Assert.That(sThresholdListenerComponent.ThresholdsReached, Is.Empty); + + // Set both thresholds to trigger multiple times + foreach (var destructibleThreshold in sDestructibleComponent.LowestToHighestThresholds.Values) + { + destructibleThreshold.TriggersOnce = false; + } + + // Check that the total damage matches + Assert.That(sDamageableComponent.TotalDamage, Is.EqualTo(50)); + + // They shouldn't have been triggered by changing TriggersOnce + Assert.That(sThresholdListenerComponent.ThresholdsReached, Is.Empty); + }); + } + } +} diff --git a/Content.Server/AI/Utility/AiLogic/UtilityAI.cs b/Content.Server/AI/Utility/AiLogic/UtilityAI.cs index 68343c4cc1..305e8ebfca 100644 --- a/Content.Server/AI/Utility/AiLogic/UtilityAI.cs +++ b/Content.Server/AI/Utility/AiLogic/UtilityAI.cs @@ -10,6 +10,7 @@ using Content.Server.GameObjects.EntitySystems.AI; using Content.Server.GameObjects.EntitySystems.AI.LoadBalancer; using Content.Server.GameObjects.EntitySystems.JobQueues; using Content.Shared.GameObjects.Components.Damage; +using Content.Shared.GameObjects.Components.Mobs.State; using Robust.Server.AI; using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Systems; @@ -130,28 +131,18 @@ namespace Content.Server.AI.Utility.AiLogic _planCooldownRemaining = PlanCooldown; _blackboard = new Blackboard(SelfEntity); _planner = IoCManager.Resolve().GetEntitySystem(); - if (SelfEntity.TryGetComponent(out IDamageableComponent damageableComponent)) - { - damageableComponent.HealthChangedEvent += DeathHandle; - } } public override void Shutdown() { - // TODO: If DamageableComponent removed still need to unsubscribe? - if (SelfEntity.TryGetComponent(out IDamageableComponent damageableComponent)) - { - damageableComponent.HealthChangedEvent -= DeathHandle; - } - var currentOp = CurrentAction?.ActionOperators.Peek(); currentOp?.Shutdown(Outcome.Failed); } - private void DeathHandle(HealthChangedEventArgs eventArgs) + public void MobStateChanged(MobStateChangedMessage message) { var oldDeadState = _isDead; - _isDead = eventArgs.Damageable.CurrentState == DamageState.Dead || eventArgs.Damageable.CurrentState == DamageState.Critical; + _isDead = message.Component.IsIncapacitated(); if (oldDeadState != _isDead) { diff --git a/Content.Server/AI/Utility/Considerations/Combat/TargetIsCritCon.cs b/Content.Server/AI/Utility/Considerations/Combat/TargetIsCritCon.cs index c26b590dac..ae2ed521d1 100644 --- a/Content.Server/AI/Utility/Considerations/Combat/TargetIsCritCon.cs +++ b/Content.Server/AI/Utility/Considerations/Combat/TargetIsCritCon.cs @@ -1,6 +1,7 @@ using Content.Server.AI.WorldState; using Content.Server.AI.WorldState.States; using Content.Shared.GameObjects.Components.Damage; +using Content.Shared.GameObjects.Components.Mobs.State; namespace Content.Server.AI.Utility.Considerations.Combat { @@ -10,12 +11,12 @@ namespace Content.Server.AI.Utility.Considerations.Combat { var target = context.GetState().GetValue(); - if (target == null || !target.TryGetComponent(out IDamageableComponent damageableComponent)) + if (target == null || !target.TryGetComponent(out IMobStateComponent mobState)) { return 0.0f; } - if (damageableComponent.CurrentState == DamageState.Critical) + if (mobState.IsCritical()) { return 1.0f; } diff --git a/Content.Server/AI/Utility/Considerations/Combat/TargetIsDeadCon.cs b/Content.Server/AI/Utility/Considerations/Combat/TargetIsDeadCon.cs index dc9d3edcc7..8eb020f443 100644 --- a/Content.Server/AI/Utility/Considerations/Combat/TargetIsDeadCon.cs +++ b/Content.Server/AI/Utility/Considerations/Combat/TargetIsDeadCon.cs @@ -1,6 +1,7 @@ using Content.Server.AI.WorldState; using Content.Server.AI.WorldState.States; using Content.Shared.GameObjects.Components.Damage; +using Content.Shared.GameObjects.Components.Mobs.State; namespace Content.Server.AI.Utility.Considerations.Combat { @@ -10,12 +11,12 @@ namespace Content.Server.AI.Utility.Considerations.Combat { var target = context.GetState().GetValue(); - if (target == null || !target.TryGetComponent(out IDamageableComponent damageableComponent)) + if (target == null || !target.TryGetComponent(out IMobStateComponent mobState)) { return 0.0f; } - if (damageableComponent.CurrentState == DamageState.Dead) + if (mobState.IsDead()) { return 1.0f; } diff --git a/Content.Server/Commands/Observer/Ghost.cs b/Content.Server/Commands/Observer/Ghost.cs index 07ae0d820a..6e0e510b37 100644 --- a/Content.Server/Commands/Observer/Ghost.cs +++ b/Content.Server/Commands/Observer/Ghost.cs @@ -1,4 +1,5 @@ -using Content.Server.Administration; +#nullable enable +using Content.Server.Administration; using Content.Server.GameObjects.Components.Mobs; using Content.Server.GameObjects.Components.Observer; using Content.Server.Interfaces.GameTicking; @@ -6,6 +7,7 @@ using Content.Server.Players; using Content.Shared.Damage; using Content.Shared.GameObjects.Components.Damage; using Content.Shared.GameObjects.Components.Mobs; +using Content.Shared.GameObjects.Components.Mobs.State; using Robust.Server.Interfaces.Console; using Robust.Server.Interfaces.Player; using Robust.Shared.Interfaces.GameObjects; @@ -21,25 +23,25 @@ namespace Content.Server.Commands.Observer public string Help => "ghost"; public bool CanReturn { get; set; } = true; - public void Execute(IConsoleShell shell, IPlayerSession player, string[] args) + public void Execute(IConsoleShell shell, IPlayerSession? player, string[] args) { if (player == null) { - shell.SendText((IPlayerSession) null, "Nah"); + shell.SendText(player, "Nah"); return; } - var mind = player.ContentData().Mind; + var mind = player.ContentData()?.Mind; + if (mind == null) { shell.SendText(player, "You can't ghost here!"); return; } - var canReturn = player.AttachedEntity != null && CanReturn; - var name = player.AttachedEntity?.Name ?? player.Name; + var playerEntity = player.AttachedEntity; - if (player.AttachedEntity != null && player.AttachedEntity.HasComponent()) + if (playerEntity != null && playerEntity.HasComponent()) return; if (mind.VisitingEntity != null) @@ -48,22 +50,28 @@ namespace Content.Server.Commands.Observer mind.VisitingEntity.Delete(); } - var position = player.AttachedEntity?.Transform.Coordinates ?? IoCManager.Resolve().GetObserverSpawnPoint(); + var position = playerEntity?.Transform.Coordinates ?? IoCManager.Resolve().GetObserverSpawnPoint(); + var canReturn = false; - if (canReturn && player.AttachedEntity.TryGetComponent(out IDamageableComponent damageable)) + if (playerEntity != null && CanReturn && playerEntity.TryGetComponent(out IMobStateComponent? mobState)) { - switch (damageable.CurrentState) + if (mobState.IsDead()) { - case DamageState.Dead: - canReturn = true; - break; - case DamageState.Critical: - canReturn = true; - damageable.ChangeDamage(DamageType.Asphyxiation, 100, true, null); //todo: what if they dont breathe lol - break; - default: - canReturn = false; - break; + canReturn = true; + } + else if (mobState.IsCritical()) + { + canReturn = true; + + if (playerEntity.TryGetComponent(out IDamageableComponent? damageable)) + { + //todo: what if they dont breathe lol + damageable.ChangeDamage(DamageType.Asphyxiation, 100, true); + } + } + else + { + canReturn = false; } } @@ -74,9 +82,10 @@ namespace Content.Server.Commands.Observer var ghostComponent = ghost.GetComponent(); ghostComponent.CanReturnToBody = canReturn; - if (player.AttachedEntity.TryGetComponent(out ServerOverlayEffectsComponent overlayComponent)) + if (playerEntity != null && + playerEntity.TryGetComponent(out ServerOverlayEffectsComponent? overlayComponent)) { - overlayComponent?.RemoveOverlay(SharedOverlayID.CircleMaskOverlay); + overlayComponent.RemoveOverlay(SharedOverlayID.CircleMaskOverlay); } if (canReturn) diff --git a/Content.Server/GameObjects/Components/Body/BodyComponent.cs b/Content.Server/GameObjects/Components/Body/BodyComponent.cs index 32a9338ad4..71637b13ea 100644 --- a/Content.Server/GameObjects/Components/Body/BodyComponent.cs +++ b/Content.Server/GameObjects/Components/Body/BodyComponent.cs @@ -1,12 +1,16 @@ #nullable enable +using System; using Content.Server.Commands.Observer; using Content.Shared.GameObjects.Components.Body; using Content.Shared.GameObjects.Components.Body.Part; using Content.Shared.GameObjects.Components.Damage; +using Content.Shared.GameObjects.Components.Mobs.State; using Content.Shared.GameObjects.Components.Movement; using Robust.Server.GameObjects.Components.Container; +using Robust.Server.Interfaces.Console; using Robust.Server.Interfaces.Player; using Robust.Shared.GameObjects; +using Robust.Shared.IoC; using Robust.Shared.Log; using Robust.Shared.Players; @@ -76,10 +80,12 @@ namespace Content.Server.GameObjects.Components.Body void IRelayMoveInput.MoveInputPressed(ICommonSession session) { - if (Owner.TryGetComponent(out IDamageableComponent? damageable) && - damageable.CurrentState == DamageState.Dead) + if (Owner.TryGetComponent(out IMobStateComponent? mobState) && + mobState.IsDead()) { - new Ghost().Execute(null, (IPlayerSession) session, null); + var shell = IoCManager.Resolve(); + + new Ghost().Execute(shell, (IPlayerSession) session, Array.Empty()); } } } diff --git a/Content.Server/GameObjects/Components/Body/BodyManagerHealthChangeParams.cs b/Content.Server/GameObjects/Components/Body/BodyManagerHealthChangeParams.cs index 06edc4a351..7a1335edf6 100644 --- a/Content.Server/GameObjects/Components/Body/BodyManagerHealthChangeParams.cs +++ b/Content.Server/GameObjects/Components/Body/BodyManagerHealthChangeParams.cs @@ -8,9 +8,9 @@ namespace Content.Server.GameObjects.Components.Body BodyPartType Part { get; } } - public class BodyHealthChangeParams : HealthChangeParams, IBodyHealthChangeParams + public class BodyDamageChangeParams : DamageChangeParams, IBodyHealthChangeParams { - public BodyHealthChangeParams(BodyPartType part) + public BodyDamageChangeParams(BodyPartType part) { Part = part; } diff --git a/Content.Server/GameObjects/Components/Buckle/BuckleComponent.cs b/Content.Server/GameObjects/Components/Buckle/BuckleComponent.cs index 430fe45c39..2c7cdc67d4 100644 --- a/Content.Server/GameObjects/Components/Buckle/BuckleComponent.cs +++ b/Content.Server/GameObjects/Components/Buckle/BuckleComponent.cs @@ -40,7 +40,7 @@ namespace Content.Server.GameObjects.Components.Buckle [ComponentDependency] public readonly AppearanceComponent? AppearanceComponent = null; [ComponentDependency] private readonly ServerAlertsComponent? _serverAlertsComponent = null; [ComponentDependency] private readonly StunnableComponent? _stunnableComponent = null; - [ComponentDependency] private readonly MobStateManagerComponent? _mobStateManagerComponent = null; + [ComponentDependency] private readonly MobStateComponent? _mobStateComponent = null; private int _size; @@ -351,7 +351,7 @@ namespace Content.Server.GameObjects.Components.Buckle EntitySystem.Get().Standing(Owner); } - _mobStateManagerComponent?.CurrentMobState.EnterState(Owner); + _mobStateComponent?.CurrentState?.EnterState(Owner); UpdateBuckleStatus(); diff --git a/Content.Server/GameObjects/Components/Damage/BreakableComponent.cs b/Content.Server/GameObjects/Components/Damage/BreakableComponent.cs index 85588e3981..e7b5d3f120 100644 --- a/Content.Server/GameObjects/Components/Damage/BreakableComponent.cs +++ b/Content.Server/GameObjects/Components/Damage/BreakableComponent.cs @@ -1,72 +1,10 @@ -using System.Collections.Generic; -using Content.Shared.Audio; -using Content.Shared.GameObjects.Components.Damage; -using Content.Shared.GameObjects.EntitySystems; -using Robust.Server.GameObjects.EntitySystems; -using Robust.Shared.GameObjects; -using Robust.Shared.GameObjects.Systems; -using Robust.Shared.Interfaces.GameObjects; -using Robust.Shared.Interfaces.Random; -using Robust.Shared.IoC; -using Robust.Shared.Log; -using Robust.Shared.Random; +using Robust.Shared.GameObjects; namespace Content.Server.GameObjects.Components.Damage { - // TODO: Repair needs to set CurrentDamageState to DamageState.Alive, but it doesn't exist... should be easy enough if it's just an interface you can slap on BreakableComponent - - /// - /// When attached to an , allows it to take damage and sets it to a "broken state" after taking - /// enough damage. - /// [RegisterComponent] - [ComponentReference(typeof(IDamageableComponent))] - public class BreakableComponent : RuinableComponent, IExAct + public class BreakableComponent : Component { - [Dependency] private readonly IEntitySystemManager _entitySystemManager = default!; - [Dependency] private readonly IRobustRandom _random = default!; - public override string Name => "Breakable"; - - private ActSystem _actSystem; - - public override List SupportedDamageStates => - new() {DamageState.Alive, DamageState.Dead}; - - void IExAct.OnExplosion(ExplosionEventArgs eventArgs) - { - switch (eventArgs.Severity) - { - case ExplosionSeverity.Destruction: - case ExplosionSeverity.Heavy: - PerformDestruction(); - break; - case ExplosionSeverity.Light: - if (_random.Prob(0.5f)) - { - PerformDestruction(); - } - - break; - } - } - - public override void Initialize() - { - base.Initialize(); - _actSystem = _entitySystemManager.GetEntitySystem(); - } - - // Might want to move this down and have a more standardized method of revival - public void FixAllDamage() - { - Heal(); - CurrentState = DamageState.Alive; - } - - protected override void DestructionBehavior() - { - _actSystem.HandleBreakage(Owner); - } } } diff --git a/Content.Server/GameObjects/Components/Damage/BreakableConstructionComponent.cs b/Content.Server/GameObjects/Components/Damage/BreakableConstructionComponent.cs index e6c415325b..fcfbb9cef3 100644 --- a/Content.Server/GameObjects/Components/Damage/BreakableConstructionComponent.cs +++ b/Content.Server/GameObjects/Components/Damage/BreakableConstructionComponent.cs @@ -1,7 +1,5 @@ #nullable enable -using System; using Content.Server.GameObjects.Components.Construction; -using Content.Shared.GameObjects.Components.Damage; using Content.Shared.GameObjects.EntitySystems; using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Systems; @@ -10,11 +8,8 @@ using Robust.Shared.Serialization; namespace Content.Server.GameObjects.Components.Damage { [RegisterComponent] - [ComponentReference(typeof(IDamageableComponent))] - public class BreakableConstructionComponent : RuinableComponent + public class BreakableConstructionComponent : Component, IDestroyAct { - private ActSystem _actSystem = default!; - public override string Name => "BreakableConstruction"; public override void ExposeData(ObjectSerializer serializer) @@ -24,20 +19,16 @@ namespace Content.Server.GameObjects.Components.Damage serializer.DataField(this, x => x.Node, "node", string.Empty); } - public override void Initialize() - { - base.Initialize(); - - _actSystem = EntitySystem.Get(); - } - public string Node { get; private set; } = string.Empty; - protected override async void DestructionBehavior() + async void IDestroyAct.OnDestroy(DestructionEventArgs eventArgs) { - if (Owner.Deleted || !Owner.TryGetComponent(out ConstructionComponent? construction) || string.IsNullOrEmpty(Node)) return; - - _actSystem.HandleBreakage(Owner); + if (Owner.Deleted || + !Owner.TryGetComponent(out ConstructionComponent? construction) || + string.IsNullOrEmpty(Node)) + { + return; + } await construction.ChangeNode(Node); } diff --git a/Content.Server/GameObjects/Components/Damage/DestructibleComponent.cs b/Content.Server/GameObjects/Components/Damage/DestructibleComponent.cs deleted file mode 100644 index 91521563c3..0000000000 --- a/Content.Server/GameObjects/Components/Damage/DestructibleComponent.cs +++ /dev/null @@ -1,101 +0,0 @@ -using System.Collections.Generic; -using Content.Server.GameObjects.Components.Stack; -using Content.Shared.GameObjects.Components.Damage; -using Content.Shared.GameObjects.EntitySystems; -using Content.Shared.Utility; -using Robust.Shared.GameObjects; -using Robust.Shared.Interfaces.GameObjects; -using Robust.Shared.Interfaces.Random; -using Robust.Shared.IoC; -using Robust.Shared.Prototypes; -using Robust.Shared.Serialization; - -namespace Content.Server.GameObjects.Components.Damage -{ - /// - /// When attached to an , allows it to take damage and deletes it after taking enough damage. - /// - [RegisterComponent] - [ComponentReference(typeof(IDamageableComponent))] - public class DestructibleComponent : RuinableComponent, IDestroyAct - { - [Dependency] private readonly IEntitySystemManager _entitySystemManager = default!; - [Dependency] private readonly IRobustRandom _random = default!; - - protected ActSystem ActSystem; - - /// - public override string Name => "Destructible"; - - /// - /// Entities spawned on destruction plus the min and max amount spawned. - /// - public Dictionary SpawnOnDestroy { get; private set; } - - void IDestroyAct.OnDestroy(DestructionEventArgs eventArgs) - { - if (SpawnOnDestroy == null || !eventArgs.IsSpawnWreck) return; - foreach (var (key, value) in SpawnOnDestroy) - { - int count; - if (value.Min >= value.Max) - { - count = value.Min; - } - else - { - count = _random.Next(value.Min, value.Max + 1); - } - - if (count == 0) continue; - - if (EntityPrototypeHelpers.HasComponent(key)) - { - var spawned = Owner.EntityManager.SpawnEntity(key, Owner.Transform.Coordinates); - var stack = spawned.GetComponent(); - stack.Count = count; - spawned.RandomOffset(0.5f); - } - else - { - for (var i = 0; i < count; i++) - { - var spawned = Owner.EntityManager.SpawnEntity(key, Owner.Transform.Coordinates); - spawned.RandomOffset(0.5f); - } - } - } - } - - public override void ExposeData(ObjectSerializer serializer) - { - base.ExposeData(serializer); - - - serializer.DataField(this, d => d.SpawnOnDestroy, "spawnOnDestroy", null); - } - - public override void Initialize() - { - base.Initialize(); - ActSystem = _entitySystemManager.GetEntitySystem(); - } - - - protected override void DestructionBehavior() - { - if (!Owner.Deleted) - { - var pos = Owner.Transform.Coordinates; - ActSystem.HandleDestruction(Owner, - true); //This will call IDestroyAct.OnDestroy on this component (and all other components on this entity) - } - } - - public struct MinMax - { - public int Min; - public int Max; - } - } -} diff --git a/Content.Server/GameObjects/Components/Damage/RuinableComponent.cs b/Content.Server/GameObjects/Components/Damage/RuinableComponent.cs deleted file mode 100644 index 8cd2ad426a..0000000000 --- a/Content.Server/GameObjects/Components/Damage/RuinableComponent.cs +++ /dev/null @@ -1,104 +0,0 @@ -using System.Collections.Generic; -using Content.Shared.Audio; -using Content.Shared.GameObjects.Components.Damage; -using Robust.Server.GameObjects.EntitySystems; -using Robust.Shared.GameObjects; -using Robust.Shared.GameObjects.Systems; -using Robust.Shared.Interfaces.GameObjects; -using Robust.Shared.Interfaces.Random; -using Robust.Shared.IoC; -using Robust.Shared.Serialization; -using Robust.Shared.ViewVariables; -using Logger = Robust.Shared.Log.Logger; - -namespace Content.Server.GameObjects.Components.Damage -{ - /// - /// When attached to an , allows it to take damage and - /// "ruins" or "destroys" it after enough damage is taken. - /// - [ComponentReference(typeof(IDamageableComponent))] - public abstract class RuinableComponent : DamageableComponent - { - /// - /// Sound played upon destruction. - /// - [ViewVariables] - protected string DestroySound { get; private set; } - - /// - /// Used instead of if specified. - /// - [ViewVariables] - protected string DestroySoundCollection { get; private set; } - - public override List SupportedDamageStates => - new() {DamageState.Alive, DamageState.Dead}; - - public override void ExposeData(ObjectSerializer serializer) - { - base.ExposeData(serializer); - - serializer.DataReadWriteFunction( - "deadThreshold", - 100, - t => - { - if (t == null) - { - return; - } - - Thresholds[DamageState.Dead] = t.Value; - }, - () => Thresholds.TryGetValue(DamageState.Dead, out var value) ? value : (int?) null); - - serializer.DataField(this, ruinable => ruinable.DestroySound, "destroySound", string.Empty); - serializer.DataField(this, ruinable => ruinable.DestroySoundCollection, "destroySoundCollection", string.Empty); - } - - protected override void EnterState(DamageState state) - { - base.EnterState(state); - - if (state == DamageState.Dead) - { - PerformDestruction(); - } - } - - /// - /// Destroys the Owner , setting - /// to - /// - /// - protected void PerformDestruction() - { - CurrentState = DamageState.Dead; - - if (!Owner.Deleted) - { - var pos = Owner.Transform.Coordinates; - string sound = string.Empty; - if (DestroySoundCollection != string.Empty) - { - sound = AudioHelpers.GetRandomFileFromSoundCollection(DestroySoundCollection); - - } - else if (DestroySound != string.Empty) - { - sound = DestroySound; - } - if (sound != string.Empty) - { - Logger.Debug("Playing destruction sound"); - EntitySystem.Get().PlayAtCoords(sound, pos, AudioHelpers.WithVariation(0.125f)); - } - } - - DestructionBehavior(); - } - - protected abstract void DestructionBehavior(); - } -} diff --git a/Content.Server/GameObjects/Components/Destructible/ActsFlags.cs b/Content.Server/GameObjects/Components/Destructible/ActsFlags.cs new file mode 100644 index 0000000000..6dd944c358 --- /dev/null +++ b/Content.Server/GameObjects/Components/Destructible/ActsFlags.cs @@ -0,0 +1,4 @@ +namespace Content.Server.GameObjects.Components.Destructible +{ + public sealed class ActsFlags { } +} diff --git a/Content.Server/GameObjects/Components/Destructible/DestructibleComponent.cs b/Content.Server/GameObjects/Components/Destructible/DestructibleComponent.cs new file mode 100644 index 0000000000..05060b4880 --- /dev/null +++ b/Content.Server/GameObjects/Components/Destructible/DestructibleComponent.cs @@ -0,0 +1,97 @@ +#nullable enable +using System.Collections.Generic; +using Content.Shared.GameObjects.Components.Damage; +using Content.Shared.GameObjects.EntitySystems; +using Robust.Shared.GameObjects; +using Robust.Shared.GameObjects.Systems; +using Robust.Shared.Interfaces.GameObjects; +using Robust.Shared.Interfaces.Random; +using Robust.Shared.IoC; +using Robust.Shared.Serialization; +using Robust.Shared.ViewVariables; + +namespace Content.Server.GameObjects.Components.Destructible +{ + /// + /// When attached to an , allows it to take damage + /// and triggers thresholds when reached. + /// + [RegisterComponent] + public class DestructibleComponent : Component + { + [Dependency] private readonly IRobustRandom _random = default!; + + private ActSystem _actSystem = default!; + + public override string Name => "Destructible"; + + [ViewVariables] + private SortedDictionary _lowestToHighestThresholds = new(); + + [ViewVariables] private int PreviousTotalDamage { get; set; } + + public IReadOnlyDictionary LowestToHighestThresholds => _lowestToHighestThresholds; + + public override void ExposeData(ObjectSerializer serializer) + { + base.ExposeData(serializer); + + serializer.DataReadWriteFunction( + "thresholds", + new Dictionary(), + thresholds => _lowestToHighestThresholds = new SortedDictionary(thresholds), + () => new Dictionary(_lowestToHighestThresholds)); + } + + public override void Initialize() + { + base.Initialize(); + + _actSystem = EntitySystem.Get(); + } + + public override void HandleMessage(ComponentMessage message, IComponent? component) + { + base.HandleMessage(message, component); + + switch (message) + { + case DamageChangedMessage msg: + { + if (msg.Damageable.Owner != Owner) + { + break; + } + + foreach (var (damage, threshold) in _lowestToHighestThresholds) + { + if (threshold.Triggered) + { + if (threshold.TriggersOnce) + { + continue; + } + + if (PreviousTotalDamage >= damage) + { + continue; + } + } + + if (msg.Damageable.TotalDamage >= damage) + { + var thresholdMessage = new DestructibleThresholdReachedMessage(this, threshold, msg.Damageable.TotalDamage, damage); + SendMessage(thresholdMessage); + + threshold.Trigger(Owner, _random, _actSystem); + } + } + + PreviousTotalDamage = msg.Damageable.TotalDamage; + + break; + } + } + } + } +} diff --git a/Content.Server/GameObjects/Components/Destructible/DestructibleThresholdReachedMessage.cs b/Content.Server/GameObjects/Components/Destructible/DestructibleThresholdReachedMessage.cs new file mode 100644 index 0000000000..dd58f49974 --- /dev/null +++ b/Content.Server/GameObjects/Components/Destructible/DestructibleThresholdReachedMessage.cs @@ -0,0 +1,29 @@ +using Robust.Shared.GameObjects; + +namespace Content.Server.GameObjects.Components.Destructible +{ + public class DestructibleThresholdReachedMessage : ComponentMessage + { + public DestructibleThresholdReachedMessage(DestructibleComponent parent, Threshold threshold, int totalDamage, int thresholdAmount) + { + Parent = parent; + Threshold = threshold; + TotalDamage = totalDamage; + ThresholdAmount = thresholdAmount; + } + + public DestructibleComponent Parent { get; } + + public Threshold Threshold { get; } + + /// + /// The amount of total damage currently had that triggered this threshold. + /// + public int TotalDamage { get; } + + /// + /// The amount of damage at which this threshold triggers. + /// + public int ThresholdAmount { get; } + } +} diff --git a/Content.Server/GameObjects/Components/Destructible/MinMax.cs b/Content.Server/GameObjects/Components/Destructible/MinMax.cs new file mode 100644 index 0000000000..f806cfa2ab --- /dev/null +++ b/Content.Server/GameObjects/Components/Destructible/MinMax.cs @@ -0,0 +1,13 @@ +using Robust.Shared.ViewVariables; + +namespace Content.Server.GameObjects.Components.Destructible +{ + public struct MinMax + { + [ViewVariables] + public int Min; + + [ViewVariables] + public int Max; + } +} diff --git a/Content.Server/GameObjects/Components/Destructible/Threshold.cs b/Content.Server/GameObjects/Components/Destructible/Threshold.cs new file mode 100644 index 0000000000..63d2e86c82 --- /dev/null +++ b/Content.Server/GameObjects/Components/Destructible/Threshold.cs @@ -0,0 +1,148 @@ +#nullable enable +using System.Collections.Generic; +using Content.Server.GameObjects.Components.Stack; +using Content.Shared.Audio; +using Content.Shared.GameObjects.EntitySystems; +using Content.Shared.Utility; +using Robust.Server.GameObjects.EntitySystems; +using Robust.Shared.GameObjects.Systems; +using Robust.Shared.Interfaces.GameObjects; +using Robust.Shared.Interfaces.Random; +using Robust.Shared.Interfaces.Serialization; +using Robust.Shared.Serialization; +using Robust.Shared.ViewVariables; + +namespace Content.Server.GameObjects.Components.Destructible +{ + public class Threshold : IExposeData + { + /// + /// Entities spawned on reaching this threshold, from a min to a max. + /// + [ViewVariables] public Dictionary? Spawn; + + /// + /// Sound played upon destruction. + /// + [ViewVariables] public string Sound = string.Empty; + + /// + /// Used instead of if specified. + /// + [ViewVariables] public string SoundCollection = string.Empty; + + /// + /// What acts this threshold should trigger upon activation. + /// See . + /// + [ViewVariables] public int Acts; + + /// + /// Whether or not this threshold has already been triggered. + /// + [ViewVariables] public bool Triggered; + + /// + /// Whether or not this threshold only triggers once. + /// If false, it will trigger again once the entity is healed + /// and then damaged to reach this threshold once again. + /// It will not repeatedly trigger as damage rises beyond that. + /// + [ViewVariables] public bool TriggersOnce; + + public void ExposeData(ObjectSerializer serializer) + { + serializer.DataField(ref Spawn, "Spawn", null); + serializer.DataField(ref Sound, "Sound", string.Empty); + serializer.DataField(ref SoundCollection, "SoundCollection", string.Empty); + serializer.DataField(ref Acts, "Acts", 0, WithFormat.Flags()); + serializer.DataField(ref Triggered, "Triggered", false); + serializer.DataField(ref TriggersOnce, "TriggersOnce", false); + } + + /// + /// Triggers this threshold. + /// + /// The entity that owns this threshold. + /// + /// An instance of to get randomness from, if relevant. + /// + /// + /// An instance of to call acts on, if relevant. + /// + public void Trigger(IEntity owner, IRobustRandom random, ActSystem actSystem) + { + Triggered = true; + + PlaySound(owner); + DoSpawn(owner, random); + DoActs(owner, actSystem); + } + + private void PlaySound(IEntity owner) + { + var pos = owner.Transform.Coordinates; + var actualSound = string.Empty; + + if (SoundCollection != string.Empty) + { + actualSound = AudioHelpers.GetRandomFileFromSoundCollection(SoundCollection); + } + else if (Sound != string.Empty) + { + actualSound = Sound; + } + + if (actualSound != string.Empty) + { + EntitySystem.Get().PlayAtCoords(actualSound, pos, AudioHelpers.WithVariation(0.125f)); + } + } + + private void DoSpawn(IEntity owner, IRobustRandom random) + { + if (Spawn == null) + { + return; + } + + foreach (var (key, value) in Spawn) + { + var count = value.Min >= value.Max + ? value.Min + : random.Next(value.Min, value.Max + 1); + + if (count == 0) continue; + + if (EntityPrototypeHelpers.HasComponent(key)) + { + var spawned = owner.EntityManager.SpawnEntity(key, owner.Transform.Coordinates); + var stack = spawned.GetComponent(); + stack.Count = count; + spawned.RandomOffset(0.5f); + } + else + { + for (var i = 0; i < count; i++) + { + var spawned = owner.EntityManager.SpawnEntity(key, owner.Transform.Coordinates); + spawned.RandomOffset(0.5f); + } + } + } + } + + private void DoActs(IEntity owner, ActSystem acts) + { + if ((Acts & (int) ThresholdActs.Breakage) != 0) + { + acts.HandleBreakage(owner); + } + + if ((Acts & (int) ThresholdActs.Destruction) != 0) + { + acts.HandleDestruction(owner); + } + } + } +} diff --git a/Content.Server/GameObjects/Components/Destructible/ThresholdActs.cs b/Content.Server/GameObjects/Components/Destructible/ThresholdActs.cs new file mode 100644 index 0000000000..67aa5e5a4e --- /dev/null +++ b/Content.Server/GameObjects/Components/Destructible/ThresholdActs.cs @@ -0,0 +1,14 @@ +using System; +using Robust.Shared.Serialization; + +namespace Content.Server.GameObjects.Components.Destructible +{ + [Flags, FlagsFor(typeof(ActsFlags))] + [Serializable] + public enum ThresholdActs + { + Invalid = 0, + Breakage, + Destruction + } +} diff --git a/Content.Server/GameObjects/Components/Disposal/DisposalUnitComponent.cs b/Content.Server/GameObjects/Components/Disposal/DisposalUnitComponent.cs index c8b2dfb202..061fd9a0ba 100644 --- a/Content.Server/GameObjects/Components/Disposal/DisposalUnitComponent.cs +++ b/Content.Server/GameObjects/Components/Disposal/DisposalUnitComponent.cs @@ -16,6 +16,7 @@ using Content.Shared.GameObjects.Components.Body; using Content.Shared.GameObjects.Components.Damage; using Content.Shared.GameObjects.Components.Disposal; using Content.Shared.GameObjects.Components.Items; +using Content.Shared.GameObjects.Components.Mobs.State; using Content.Shared.GameObjects.EntitySystems; using Content.Shared.GameObjects.Verbs; using Content.Shared.Interfaces; @@ -139,11 +140,10 @@ namespace Content.Server.GameObjects.Components.Disposal return false; } - if (!entity.TryGetComponent(out IPhysicsComponent? physics) || !physics.CanCollide) { - if (!(entity.TryGetComponent(out IDamageableComponent? damageState) && damageState.CurrentState == DamageState.Dead)) { + if (!(entity.TryGetComponent(out IMobStateComponent? state) && state.IsDead())) { return false; } } diff --git a/Content.Server/GameObjects/Components/Gravity/GravityGeneratorComponent.cs b/Content.Server/GameObjects/Components/Gravity/GravityGeneratorComponent.cs index 94da79a1f8..dbf6f5818b 100644 --- a/Content.Server/GameObjects/Components/Gravity/GravityGeneratorComponent.cs +++ b/Content.Server/GameObjects/Components/Gravity/GravityGeneratorComponent.cs @@ -4,6 +4,7 @@ using Content.Server.GameObjects.Components.Damage; using Content.Server.GameObjects.Components.Interactable; using Content.Server.GameObjects.Components.Power.ApcNetComponents; using Content.Server.Utility; +using Content.Shared.GameObjects.Components.Damage; using Content.Shared.GameObjects.Components.Gravity; using Content.Shared.GameObjects.Components.Interactable; using Content.Shared.GameObjects.EntitySystems; @@ -108,8 +109,11 @@ namespace Content.Server.GameObjects.Components.Gravity return false; // Repair generator - var breakable = Owner.GetComponent(); - breakable.FixAllDamage(); + if (Owner.TryGetComponent(out IDamageableComponent? damageable)) + { + damageable.Heal(); + } + _intact = true; Owner.PopupMessage(eventArgs.User, diff --git a/Content.Server/GameObjects/Components/Medical/CloningPodComponent.cs b/Content.Server/GameObjects/Components/Medical/CloningPodComponent.cs index 9b5d750b4e..eea9446d34 100644 --- a/Content.Server/GameObjects/Components/Medical/CloningPodComponent.cs +++ b/Content.Server/GameObjects/Components/Medical/CloningPodComponent.cs @@ -9,6 +9,8 @@ using Content.Server.Mobs; using Content.Server.Utility; using Content.Shared.GameObjects.Components.Damage; using Content.Shared.GameObjects.Components.Medical; +using Content.Shared.GameObjects.Components.Mobs; +using Content.Shared.GameObjects.Components.Mobs.State; using Content.Shared.Interfaces.GameObjects.Components; using Content.Shared.Preferences; using Robust.Server.GameObjects; @@ -163,8 +165,8 @@ namespace Content.Server.GameObjects.Components.Medical } var dead = - mind.OwnedEntity.TryGetComponent(out var damageable) && - damageable.CurrentState == DamageState.Dead; + mind.OwnedEntity.TryGetComponent(out var state) && + state.IsDead(); if (!dead) return; diff --git a/Content.Server/GameObjects/Components/Medical/MedicalScannerComponent.cs b/Content.Server/GameObjects/Components/Medical/MedicalScannerComponent.cs index a7381ef05e..5b5fff76f2 100644 --- a/Content.Server/GameObjects/Components/Medical/MedicalScannerComponent.cs +++ b/Content.Server/GameObjects/Components/Medical/MedicalScannerComponent.cs @@ -11,6 +11,7 @@ using Content.Shared.Damage; using Content.Shared.GameObjects.Components.Body; using Content.Shared.GameObjects.Components.Damage; using Content.Shared.GameObjects.Components.Medical; +using Content.Shared.GameObjects.Components.Mobs.State; using Content.Shared.GameObjects.EntitySystems; using Content.Shared.GameObjects.Verbs; using Content.Shared.Interfaces.GameObjects.Components; @@ -146,14 +147,23 @@ namespace Content.Server.GameObjects.Components.Medical UserInterface?.SetState(newState); } - private MedicalScannerStatus GetStatusFromDamageState(DamageState damageState) + private MedicalScannerStatus GetStatusFromDamageState(IMobStateComponent state) { - switch (damageState) + if (state.IsAlive()) { - case DamageState.Alive: return MedicalScannerStatus.Green; - case DamageState.Critical: return MedicalScannerStatus.Red; - case DamageState.Dead: return MedicalScannerStatus.Death; - default: throw new ArgumentException(nameof(damageState)); + return MedicalScannerStatus.Green; + } + else if (state.IsCritical()) + { + return MedicalScannerStatus.Red; + } + else if (state.IsDead()) + { + return MedicalScannerStatus.Death; + } + else + { + return MedicalScannerStatus.Yellow; } } @@ -162,9 +172,11 @@ namespace Content.Server.GameObjects.Components.Medical if (Powered) { var body = _bodyContainer.ContainedEntity; - return body == null + var state = body?.GetComponentOrNull(); + + return state == null ? MedicalScannerStatus.Open - : GetStatusFromDamageState(body.GetComponent().CurrentState); + : GetStatusFromDamageState(state); } return MedicalScannerStatus.Off; diff --git a/Content.Server/GameObjects/Components/Metabolism/MetabolismComponent.cs b/Content.Server/GameObjects/Components/Metabolism/MetabolismComponent.cs index 348f53dbc8..f745d6b720 100644 --- a/Content.Server/GameObjects/Components/Metabolism/MetabolismComponent.cs +++ b/Content.Server/GameObjects/Components/Metabolism/MetabolismComponent.cs @@ -12,6 +12,7 @@ using Content.Shared.Damage; using Content.Shared.GameObjects.Components.Body; using Content.Shared.GameObjects.Components.Body.Mechanism; using Content.Shared.GameObjects.Components.Damage; +using Content.Shared.GameObjects.Components.Mobs.State; using Content.Shared.GameObjects.EntitySystems; using Content.Shared.Interfaces; using Content.Shared.Interfaces.Chemistry; @@ -355,8 +356,8 @@ namespace Content.Server.GameObjects.Components.Metabolism /// public void Update(float frameTime) { - if (!Owner.TryGetComponent(out var damageable) || - damageable.CurrentState == DamageState.Dead) + if (!Owner.TryGetComponent(out var state) || + state.IsDead()) { return; } diff --git a/Content.Server/GameObjects/Components/Mobs/MindComponent.cs b/Content.Server/GameObjects/Components/Mobs/MindComponent.cs index 86aa98ea70..027abe368e 100644 --- a/Content.Server/GameObjects/Components/Mobs/MindComponent.cs +++ b/Content.Server/GameObjects/Components/Mobs/MindComponent.cs @@ -6,6 +6,7 @@ using Content.Server.Mobs; using Content.Server.Utility; using Content.Shared.GameObjects.Components; using Content.Shared.GameObjects.Components.Damage; +using Content.Shared.GameObjects.Components.Mobs.State; using Content.Shared.GameObjects.EntitySystems; using Robust.Server.GameObjects.Components.UserInterface; using Robust.Shared.GameObjects; @@ -174,8 +175,8 @@ namespace Content.Server.GameObjects.Components.Mobs } var dead = - Owner.TryGetComponent(out var damageable) && - damageable.CurrentState == DamageState.Dead; + Owner.TryGetComponent(out var state) && + state.IsDead(); if (!HasMind) { diff --git a/Content.Server/GameObjects/Components/Mobs/State/CriticalState.cs b/Content.Server/GameObjects/Components/Mobs/State/CriticalMobState.cs similarity index 79% rename from Content.Server/GameObjects/Components/Mobs/State/CriticalState.cs rename to Content.Server/GameObjects/Components/Mobs/State/CriticalMobState.cs index 9e6d92a0e0..a7d5c7c8e0 100644 --- a/Content.Server/GameObjects/Components/Mobs/State/CriticalState.cs +++ b/Content.Server/GameObjects/Components/Mobs/State/CriticalMobState.cs @@ -9,20 +9,17 @@ using Robust.Shared.Interfaces.GameObjects; namespace Content.Server.GameObjects.Components.Mobs.State { - public class CriticalState : SharedCriticalState + public class CriticalMobState : SharedCriticalMobState { public override void EnterState(IEntity entity) { + base.EnterState(entity); + if (entity.TryGetComponent(out AppearanceComponent appearance)) { appearance.SetData(DamageStateVisuals.State, DamageState.Critical); } - if (entity.TryGetComponent(out ServerAlertsComponent status)) - { - status.ShowAlert(AlertType.HumanCrit); //Todo: combine humancrit-0 and humancrit-1 into a gif and display it - } - if (entity.TryGetComponent(out ServerOverlayEffectsComponent overlay)) { overlay.AddOverlay(SharedOverlayID.GradientCircleMaskOverlay); @@ -38,12 +35,12 @@ namespace Content.Server.GameObjects.Components.Mobs.State public override void ExitState(IEntity entity) { + base.ExitState(entity); + if (entity.TryGetComponent(out ServerOverlayEffectsComponent overlay)) { overlay.ClearOverlays(); } } - - public override void UpdateState(IEntity entity) { } } } diff --git a/Content.Server/GameObjects/Components/Mobs/State/DeadState.cs b/Content.Server/GameObjects/Components/Mobs/State/DeadMobState.cs similarity index 93% rename from Content.Server/GameObjects/Components/Mobs/State/DeadState.cs rename to Content.Server/GameObjects/Components/Mobs/State/DeadMobState.cs index cdd4673510..819ade09ac 100644 --- a/Content.Server/GameObjects/Components/Mobs/State/DeadState.cs +++ b/Content.Server/GameObjects/Components/Mobs/State/DeadMobState.cs @@ -10,10 +10,12 @@ using Robust.Shared.Interfaces.GameObjects; namespace Content.Server.GameObjects.Components.Mobs.State { - public class DeadState : SharedDeadState + public class DeadMobState : SharedDeadMobState { public override void EnterState(IEntity entity) { + base.EnterState(entity); + if (entity.TryGetComponent(out AppearanceComponent appearance)) { appearance.SetData(DamageStateVisuals.State, DamageState.Dead); @@ -44,6 +46,8 @@ namespace Content.Server.GameObjects.Components.Mobs.State public override void ExitState(IEntity entity) { + base.ExitState(entity); + if (entity.TryGetComponent(out IPhysicsComponent physics)) { physics.CanCollide = true; @@ -54,7 +58,5 @@ namespace Content.Server.GameObjects.Components.Mobs.State overlay.ClearOverlays(); } } - - public override void UpdateState(IEntity entity) { } } } diff --git a/Content.Server/GameObjects/Components/Mobs/State/MobStateManager.cs b/Content.Server/GameObjects/Components/Mobs/State/MobStateManager.cs index 0c8eaa8b3e..9e45c1395b 100644 --- a/Content.Server/GameObjects/Components/Mobs/State/MobStateManager.cs +++ b/Content.Server/GameObjects/Components/Mobs/State/MobStateManager.cs @@ -1,71 +1,22 @@ -using System.Collections.Generic; -using Content.Shared.Alert; -using Content.Shared.GameObjects.Components.Damage; -using Content.Shared.GameObjects.Components.Mobs; -using Content.Shared.GameObjects.Components.Mobs.State; +using Content.Shared.GameObjects.Components.Mobs.State; using Robust.Shared.GameObjects; namespace Content.Server.GameObjects.Components.Mobs.State { [RegisterComponent] - [ComponentReference(typeof(SharedMobStateManagerComponent))] - public class MobStateManagerComponent : SharedMobStateManagerComponent + [ComponentReference(typeof(SharedMobStateComponent))] + [ComponentReference(typeof(IMobStateComponent))] + public class MobStateComponent : SharedMobStateComponent { - private readonly Dictionary _behavior = new() - { - {DamageState.Alive, new NormalState()}, - {DamageState.Critical, new CriticalState()}, - {DamageState.Dead, new DeadState()} - }; - - private DamageState _currentDamageState; - - protected override IReadOnlyDictionary Behavior => _behavior; - - public override IMobState CurrentMobState { get; protected set; } - - public override DamageState CurrentDamageState - { - get => _currentDamageState; - protected set - { - if (_currentDamageState == value) - { - return; - } - - if (_currentDamageState != DamageState.Invalid) - { - CurrentMobState.ExitState(Owner); - } - - _currentDamageState = value; - CurrentMobState = Behavior[CurrentDamageState]; - CurrentMobState.EnterState(Owner); - - Dirty(); - } - } - public override void OnRemove() { // TODO: Might want to add an OnRemove() to IMobState since those are where these components are being used - base.OnRemove(); - - if (Owner.TryGetComponent(out ServerAlertsComponent status)) - { - status.ClearAlert(AlertType.HumanHealth); - } - if (Owner.TryGetComponent(out ServerOverlayEffectsComponent overlay)) { overlay.ClearOverlays(); } - } - public override ComponentState GetComponentState() - { - return new MobStateManagerComponentState(CurrentDamageState); + base.OnRemove(); } } } diff --git a/Content.Server/GameObjects/Components/Mobs/State/NormalMobState.cs b/Content.Server/GameObjects/Components/Mobs/State/NormalMobState.cs new file mode 100644 index 0000000000..54a5435404 --- /dev/null +++ b/Content.Server/GameObjects/Components/Mobs/State/NormalMobState.cs @@ -0,0 +1,56 @@ +#nullable enable +using Content.Server.GameObjects.EntitySystems; +using Content.Shared.Alert; +using Content.Shared.GameObjects.Components.Damage; +using Content.Shared.GameObjects.Components.Mobs; +using Content.Shared.GameObjects.Components.Mobs.State; +using Robust.Server.GameObjects; +using Robust.Shared.GameObjects.Systems; +using Robust.Shared.Interfaces.GameObjects; + +namespace Content.Server.GameObjects.Components.Mobs.State +{ + public class NormalMobState : SharedNormalMobState + { + public override void EnterState(IEntity entity) + { + base.EnterState(entity); + + EntitySystem.Get().Standing(entity); + + if (entity.TryGetComponent(out AppearanceComponent? appearance)) + { + appearance.SetData(DamageStateVisuals.State, DamageState.Alive); + } + } + + public override void UpdateState(IEntity entity, int threshold) + { + base.UpdateState(entity, threshold); + + if (!entity.TryGetComponent(out IDamageableComponent? damageable)) + { + return; + } + + if (!entity.TryGetComponent(out ServerAlertsComponent? alerts)) + { + return; + } + + if (!entity.TryGetComponent(out IMobStateComponent? stateComponent)) + { + return; + } + + short modifier = 0; + + if (stateComponent.TryGetEarliestIncapacitatedState(threshold, out _, out var earliestThreshold)) + { + modifier = (short) (damageable.TotalDamage / (earliestThreshold / 7f)); + } + + alerts.ShowAlert(AlertType.HumanHealth, modifier); + } + } +} diff --git a/Content.Server/GameObjects/Components/Mobs/State/NormalState.cs b/Content.Server/GameObjects/Components/Mobs/State/NormalState.cs deleted file mode 100644 index 5915ccebbe..0000000000 --- a/Content.Server/GameObjects/Components/Mobs/State/NormalState.cs +++ /dev/null @@ -1,73 +0,0 @@ -using Content.Server.GameObjects.Components.Damage; -using Content.Server.GameObjects.EntitySystems; -using Content.Shared.Alert; -using Content.Shared.GameObjects.Components.Damage; -using Content.Shared.GameObjects.Components.Mobs; -using Content.Shared.GameObjects.Components.Mobs.State; -using Robust.Server.GameObjects; -using Robust.Shared.GameObjects.Systems; -using Robust.Shared.Interfaces.GameObjects; - -namespace Content.Server.GameObjects.Components.Mobs.State -{ - public class NormalState : SharedNormalState - { - public override void EnterState(IEntity entity) - { - EntitySystem.Get().Standing(entity); - - if (entity.TryGetComponent(out AppearanceComponent appearance)) - { - appearance.SetData(DamageStateVisuals.State, DamageState.Alive); - } - - UpdateState(entity); - } - - public override void ExitState(IEntity entity) { } - - public override void UpdateState(IEntity entity) - { - if (!entity.TryGetComponent(out ServerAlertsComponent status)) - { - return; - } - - if (!entity.TryGetComponent(out IDamageableComponent damageable)) - { - status.ShowAlert(AlertType.HumanHealth, 0); - return; - } - - // TODO - switch (damageable) - { - case RuinableComponent ruinable: - { - if (!ruinable.Thresholds.TryGetValue(DamageState.Dead, out var threshold)) - { - return; - } - - var modifier = (short) (ruinable.TotalDamage / (threshold / 7f)); - - status.ShowAlert(AlertType.HumanHealth, modifier); - - break; - } - default: - { - if (!damageable.Thresholds.TryGetValue(DamageState.Critical, out var threshold)) - { - return; - } - - var modifier = (short) (damageable.TotalDamage / (threshold / 7f)); - - status.ShowAlert(AlertType.HumanHealth, modifier); - break; - } - } - } - } -} diff --git a/Content.Server/GameObjects/Components/Movement/AiControllerComponent.cs b/Content.Server/GameObjects/Components/Movement/AiControllerComponent.cs index 9fd66b2f02..38f8f9a0bc 100644 --- a/Content.Server/GameObjects/Components/Movement/AiControllerComponent.cs +++ b/Content.Server/GameObjects/Components/Movement/AiControllerComponent.cs @@ -1,9 +1,9 @@ #nullable enable +using Content.Server.AI.Utility.AiLogic; using Content.Server.GameObjects.EntitySystems.AI; using Content.Server.Interfaces.GameTicking; using Content.Shared.GameObjects.Components.Movement; using Content.Shared.Roles; -using Robust.Server.AI; using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Components; using Robust.Shared.GameObjects.Systems; @@ -38,7 +38,7 @@ namespace Content.Server.GameObjects.Components.Movement } } - public AiLogicProcessor? Processor { get; set; } + public UtilityAi? Processor { get; set; } [ViewVariables(VVAccess.ReadWrite)] public string? StartingGearPrototype { get; set; } diff --git a/Content.Server/GameObjects/Components/Nutrition/HungerComponent.cs b/Content.Server/GameObjects/Components/Nutrition/HungerComponent.cs index cc7d79a072..8a434ca6f8 100644 --- a/Content.Server/GameObjects/Components/Nutrition/HungerComponent.cs +++ b/Content.Server/GameObjects/Components/Nutrition/HungerComponent.cs @@ -4,6 +4,7 @@ using Content.Server.GameObjects.Components.Mobs; using Content.Shared.Alert; using Content.Shared.Damage; using Content.Shared.GameObjects.Components.Damage; +using Content.Shared.GameObjects.Components.Mobs.State; using Content.Shared.GameObjects.Components.Movement; using Content.Shared.GameObjects.Components.Nutrition; using Robust.Shared.GameObjects; @@ -185,15 +186,19 @@ namespace Content.Server.GameObjects.Components.Nutrition HungerThresholdEffect(); Dirty(); } - if (_currentHungerThreshold == HungerThreshold.Dead) + + if (_currentHungerThreshold != HungerThreshold.Dead) + return; + + if (!Owner.TryGetComponent(out IDamageableComponent damageable)) + return; + + if (!Owner.TryGetComponent(out IMobStateComponent mobState)) + return; + + if (!mobState.IsDead()) { - if (Owner.TryGetComponent(out IDamageableComponent damageable)) - { - if (damageable.CurrentState != DamageState.Dead) - { - damageable.ChangeDamage(DamageType.Blunt, 2, true, null); - } - } + damageable.ChangeDamage(DamageType.Blunt, 2, true); } } @@ -209,6 +214,4 @@ namespace Content.Server.GameObjects.Components.Nutrition return new HungerComponentState(_currentHungerThreshold); } } - - } diff --git a/Content.Server/GameObjects/Components/Nutrition/ThirstComponent.cs b/Content.Server/GameObjects/Components/Nutrition/ThirstComponent.cs index c3b376b4c0..b6a7b031ce 100644 --- a/Content.Server/GameObjects/Components/Nutrition/ThirstComponent.cs +++ b/Content.Server/GameObjects/Components/Nutrition/ThirstComponent.cs @@ -5,6 +5,7 @@ using Content.Shared.Alert; using Content.Shared.Damage; using Content.Shared.GameObjects.Components.Damage; using Content.Shared.GameObjects.Components.Mobs; +using Content.Shared.GameObjects.Components.Mobs.State; using Content.Shared.GameObjects.Components.Movement; using Content.Shared.GameObjects.Components.Nutrition; using Robust.Shared.GameObjects; @@ -183,19 +184,21 @@ namespace Content.Server.GameObjects.Components.Nutrition Dirty(); } - if (_currentThirstThreshold == ThirstThreshold.Dead) + if (_currentThirstThreshold != ThirstThreshold.Dead) + return; + + if (!Owner.TryGetComponent(out IDamageableComponent damageable)) + return; + + if (!Owner.TryGetComponent(out IMobStateComponent mobState)) + return; + + if (!mobState.IsDead()) { - if (Owner.TryGetComponent(out IDamageableComponent damageable)) - { - if (damageable.CurrentState != DamageState.Dead) - { - damageable.ChangeDamage(DamageType.Blunt, 2, true, null); - } - } + damageable.ChangeDamage(DamageType.Blunt, 2, true); } } - public void ResetThirst() { _currentThirstThreshold = ThirstThreshold.Okay; @@ -208,5 +211,4 @@ namespace Content.Server.GameObjects.Components.Nutrition return new ThirstComponentState(_currentThirstThreshold); } } - } diff --git a/Content.Server/GameObjects/Components/Suspicion/SuspicionRoleComponent.cs b/Content.Server/GameObjects/Components/Suspicion/SuspicionRoleComponent.cs index 3ec6e6d70c..06ea81e88e 100644 --- a/Content.Server/GameObjects/Components/Suspicion/SuspicionRoleComponent.cs +++ b/Content.Server/GameObjects/Components/Suspicion/SuspicionRoleComponent.cs @@ -7,6 +7,7 @@ using Content.Server.Mobs; using Content.Server.Mobs.Roles; using Content.Server.Mobs.Roles.Suspicion; using Content.Shared.GameObjects.Components.Damage; +using Content.Shared.GameObjects.Components.Mobs.State; using Content.Shared.GameObjects.Components.Suspicion; using Content.Shared.GameObjects.EntitySystems; using Robust.Server.GameObjects; @@ -60,8 +61,8 @@ namespace Content.Server.GameObjects.Components.Suspicion public bool IsDead() { - return Owner.TryGetComponent(out IDamageableComponent? damageable) && - damageable.CurrentState == DamageState.Dead; + return Owner.TryGetComponent(out IMobStateComponent? state) && + state.IsDead(); } public bool IsInnocent() diff --git a/Content.Server/GameObjects/Components/WindowComponent.cs b/Content.Server/GameObjects/Components/WindowComponent.cs index f506fefb33..266f25e85d 100644 --- a/Content.Server/GameObjects/Components/WindowComponent.cs +++ b/Content.Server/GameObjects/Components/WindowComponent.cs @@ -1,4 +1,5 @@ -using System; +#nullable enable +using System; using Content.Server.Utility; using Content.Shared.Audio; using Content.Shared.GameObjects.Components; @@ -10,7 +11,9 @@ using Robust.Server.GameObjects; using Robust.Server.GameObjects.EntitySystems; using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Systems; +using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Localization; +using Robust.Shared.Serialization; using Robust.Shared.Utility; namespace Content.Server.GameObjects.Components @@ -19,57 +22,46 @@ namespace Content.Server.GameObjects.Components [ComponentReference(typeof(SharedWindowComponent))] public class WindowComponent : SharedWindowComponent, IExamine, IInteractHand { - private int? Damage + private int _maxDamage; + + public override void ExposeData(ObjectSerializer serializer) { - get + base.ExposeData(serializer); + + serializer.DataField(ref _maxDamage, "maxDamage", 100); + } + + public override void HandleMessage(ComponentMessage message, IComponent? component) + { + base.HandleMessage(message, component); + + switch (message) { - if (!Owner.TryGetComponent(out IDamageableComponent damageableComponent)) return null; - return damageableComponent.TotalDamage; + case DamageChangedMessage msg: + { + var current = msg.Damageable.TotalDamage; + UpdateVisuals(current); + break; + } } } - private int? MaxDamage + private void UpdateVisuals(int currentDamage) { - get + if (Owner.TryGetComponent(out AppearanceComponent? appearance)) { - if (!Owner.TryGetComponent(out IDamageableComponent damageableComponent)) return null; - return damageableComponent.Thresholds[DamageState.Dead]; + appearance.SetData(WindowVisuals.Damage, (float) currentDamage / _maxDamage); } } - public override void Initialize() - { - base.Initialize(); - if (Owner.TryGetComponent(out IDamageableComponent damageableComponent)) - { - damageableComponent.HealthChangedEvent += OnDamage; - } - } - - private void OnDamage(HealthChangedEventArgs eventArgs) - { - int current = eventArgs.Damageable.TotalDamage; - int max = eventArgs.Damageable.Thresholds[DamageState.Dead]; - if (eventArgs.Damageable.CurrentState == DamageState.Dead) return; - UpdateVisuals(current, max); - } - - private void UpdateVisuals(int currentDamage, int maxDamage) - { - if (Owner.TryGetComponent(out AppearanceComponent appearance)) - { - appearance.SetData(WindowVisuals.Damage, (float) currentDamage / maxDamage); - } - } - - void IExamine.Examine(FormattedMessage message, bool inDetailsRange) { - int? damage = Damage; - int? maxDamage = MaxDamage; - if (damage == null || maxDamage == null) return; - float fraction = ((damage == 0 || maxDamage == 0) ? 0f : (float) damage / maxDamage) ?? 0f; - int level = Math.Min(ContentHelpers.RoundToLevels(fraction, 1, 7), 5); + var damage = Owner.GetComponentOrNull()?.TotalDamage; + if (damage == null) return; + var fraction = ((damage == 0 || _maxDamage == 0) + ? 0f + : (float) damage / _maxDamage); + var level = Math.Min(ContentHelpers.RoundToLevels(fraction, 1, 7), 5); switch (level) { case 0: diff --git a/Content.Server/GameObjects/EntitySystems/AI/AiSystem.cs b/Content.Server/GameObjects/EntitySystems/AI/AiSystem.cs index 33bc8819cc..d5a17bf19c 100644 --- a/Content.Server/GameObjects/EntitySystems/AI/AiSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/AI/AiSystem.cs @@ -1,8 +1,10 @@ #nullable enable using System; using System.Collections.Generic; +using Content.Server.AI.Utility.AiLogic; using Content.Server.Administration; using Content.Server.GameObjects.Components.Movement; +using Content.Shared.GameObjects.Components.Mobs.State; using Content.Shared; using Content.Shared.Administration; using Content.Shared.GameObjects.Components.Movement; @@ -38,6 +40,8 @@ namespace Content.Server.GameObjects.EntitySystems.AI // To avoid modifying awakeAi while iterating over it. private readonly List _queuedSleepMessages = new(); + private readonly List _queuedMobStateMessages = new(); + public bool IsAwake(AiLogicProcessor processor) => _awakeAi.Contains(processor); /// @@ -45,8 +49,9 @@ namespace Content.Server.GameObjects.EntitySystems.AI { base.Initialize(); SubscribeLocalEvent(HandleAiSleep); + SubscribeLocalEvent(MobStateChanged); - var processors = _reflectionManager.GetAllChildren(); + var processors = _reflectionManager.GetAllChildren(); foreach (var processor in processors) { var att = (AiLogicProcessorAttribute) Attribute.GetCustomAttribute(processor, typeof(AiLogicProcessorAttribute))!; @@ -63,6 +68,18 @@ namespace Content.Server.GameObjects.EntitySystems.AI if (cvarMaxUpdates <= 0) return; + foreach (var message in _queuedMobStateMessages) + { + if (!message.Entity.TryGetComponent(out AiControllerComponent? controller)) + { + continue; + } + + controller.Processor?.MobStateChanged(message); + } + + _queuedMobStateMessages.Clear(); + foreach (var message in _queuedSleepMessages) { switch (message.Sleep) @@ -118,6 +135,16 @@ namespace Content.Server.GameObjects.EntitySystems.AI _queuedSleepMessages.Add(message); } + private void MobStateChanged(MobStateChangedMessage message) + { + if (!message.Entity.HasComponent()) + { + return; + } + + _queuedMobStateMessages.Add(message); + } + /// /// Will start up the controller's processor if not already done so. /// Also add them to the awakeAi for updates. @@ -132,11 +159,11 @@ namespace Content.Server.GameObjects.EntitySystems.AI _awakeAi.Add(controller.Processor); } - private AiLogicProcessor CreateProcessor(string name) + private UtilityAi CreateProcessor(string name) { if (_processorTypes.TryGetValue(name, out var type)) { - return (AiLogicProcessor)_typeFactory.CreateInstance(type); + return (UtilityAi)_typeFactory.CreateInstance(type); } // processor needs to inherit AiLogicProcessor, and needs an AiLogicProcessorAttribute to define the YAML name diff --git a/Content.Server/GameObjects/EntitySystems/DoAfter/DoAfter.cs b/Content.Server/GameObjects/EntitySystems/DoAfter/DoAfter.cs index 2e4d2e5380..f1d5bf38e1 100644 --- a/Content.Server/GameObjects/EntitySystems/DoAfter/DoAfter.cs +++ b/Content.Server/GameObjects/EntitySystems/DoAfter/DoAfter.cs @@ -63,7 +63,7 @@ namespace Content.Server.GameObjects.EntitySystems.DoAfter AsTask = Tcs.Task; } - public void HandleDamage(HealthChangedEventArgs args) + public void HandleDamage(DamageChangedEventArgs args) { _tookDamage = true; } diff --git a/Content.Server/GameTicking/GameRules/RuleDeathMatch.cs b/Content.Server/GameTicking/GameRules/RuleDeathMatch.cs index 97d0dfb0a8..d72873f16b 100644 --- a/Content.Server/GameTicking/GameRules/RuleDeathMatch.cs +++ b/Content.Server/GameTicking/GameRules/RuleDeathMatch.cs @@ -4,6 +4,7 @@ using Content.Server.Interfaces.Chat; using Content.Server.Interfaces.GameTicking; using Content.Shared; using Content.Shared.GameObjects.Components.Damage; +using Content.Shared.GameObjects.Components.Mobs.State; using Robust.Server.Interfaces.Player; using Robust.Server.Player; using Robust.Shared.Enums; @@ -36,7 +37,7 @@ namespace Content.Server.GameTicking.GameRules { _chatManager.DispatchServerAnnouncement(Loc.GetString("The game is now a death match. Kill everybody else to win!")); - _entityManager.EventBus.SubscribeEvent(EventSource.Local, this, OnHealthChanged); + _entityManager.EventBus.SubscribeEvent(EventSource.Local, this, OnHealthChanged); _playerManager.PlayerStatusChanged += PlayerManagerOnPlayerStatusChanged; } @@ -44,11 +45,11 @@ namespace Content.Server.GameTicking.GameRules { base.Removed(); - _entityManager.EventBus.UnsubscribeEvent(EventSource.Local, this); + _entityManager.EventBus.UnsubscribeEvent(EventSource.Local, this); _playerManager.PlayerStatusChanged -= PlayerManagerOnPlayerStatusChanged; } - private void OnHealthChanged(HealthChangedEventArgs message) + private void OnHealthChanged(DamageChangedEventArgs message) { _runDelayedCheck(); } @@ -63,13 +64,14 @@ namespace Content.Server.GameTicking.GameRules IPlayerSession winner = null; foreach (var playerSession in _playerManager.GetAllPlayers()) { - if (playerSession.AttachedEntity == null - || !playerSession.AttachedEntity.TryGetComponent(out IDamageableComponent damageable)) + var playerEntity = playerSession.AttachedEntity; + if (playerEntity == null + || !playerEntity.TryGetComponent(out IMobStateComponent state)) { continue; } - if (damageable.CurrentState != DamageState.Alive) + if (!state.IsAlive()) { continue; } diff --git a/Content.Server/GameTicking/GameRules/RuleSuspicion.cs b/Content.Server/GameTicking/GameRules/RuleSuspicion.cs index 32f185162c..e2b46d4f23 100644 --- a/Content.Server/GameTicking/GameRules/RuleSuspicion.cs +++ b/Content.Server/GameTicking/GameRules/RuleSuspicion.cs @@ -8,6 +8,7 @@ using Content.Server.Mobs.Roles.Suspicion; using Content.Server.Players; using Content.Shared; using Content.Shared.GameObjects.Components.Damage; +using Content.Shared.GameObjects.Components.Mobs.State; using Robust.Server.GameObjects.EntitySystems; using Robust.Server.Interfaces.Player; using Robust.Shared.Audio; @@ -111,13 +112,13 @@ namespace Content.Server.GameTicking.GameRules foreach (var playerSession in _playerManager.GetAllPlayers()) { if (playerSession.AttachedEntity == null - || !playerSession.AttachedEntity.TryGetComponent(out IDamageableComponent damageable) + || !playerSession.AttachedEntity.TryGetComponent(out IMobStateComponent mobState) || !playerSession.AttachedEntity.HasComponent()) { continue; } - if (damageable.CurrentState != DamageState.Alive) + if (!mobState.IsAlive()) { continue; } diff --git a/Content.Server/GlobalVerbs/RejuvenateVerb.cs b/Content.Server/GlobalVerbs/RejuvenateVerb.cs index 67fc9137ba..aec9e54783 100644 --- a/Content.Server/GlobalVerbs/RejuvenateVerb.cs +++ b/Content.Server/GlobalVerbs/RejuvenateVerb.cs @@ -2,6 +2,7 @@ using Content.Server.GameObjects.Components.Mobs; using Content.Server.GameObjects.Components.Nutrition; using Content.Shared.GameObjects.Components.Damage; +using Content.Shared.GameObjects.Components.Mobs.State; using Content.Shared.GameObjects.Verbs; using Robust.Server.Console; using Robust.Server.Interfaces.GameObjects; @@ -58,7 +59,11 @@ namespace Content.Server.GlobalVerbs if (target.TryGetComponent(out IDamageableComponent damage)) { damage.Heal(); - damage.CurrentState = DamageState.Alive; + } + + if (target.TryGetComponent(out IMobStateComponent mobState)) + { + mobState.UpdateState(0); } if (target.TryGetComponent(out HungerComponent hunger)) diff --git a/Content.Server/Objectives/Conditions/DieCondition.cs b/Content.Server/Objectives/Conditions/DieCondition.cs index 93453b8cee..d6b198d581 100644 --- a/Content.Server/Objectives/Conditions/DieCondition.cs +++ b/Content.Server/Objectives/Conditions/DieCondition.cs @@ -1,7 +1,7 @@ #nullable enable using Content.Server.Mobs; using Content.Server.Objectives.Interfaces; -using Content.Shared.GameObjects.Components.Damage; +using Content.Shared.GameObjects.Components.Mobs.State; using JetBrains.Annotations; using Robust.Shared.Localization; using Robust.Shared.Utility; @@ -24,11 +24,12 @@ namespace Content.Server.Objectives.Conditions public SpriteSpecifier Icon => new SpriteSpecifier.Rsi(new ResourcePath("Mobs/Ghosts/ghost_human.rsi"), "icon"); - public float Progress => _mind?.OwnedEntity != null && - _mind.OwnedEntity.TryGetComponent(out var damageableComponent) && - damageableComponent.CurrentState != DamageState.Dead - ? 0f - : 1f; + public float Progress => _mind? + .OwnedEntity? + .GetComponentOrNull()? + .IsDead() ?? false + ? 0f + : 1f; public float Difficulty => 1f; diff --git a/Content.Server/Objectives/Conditions/KillPersonCondition.cs b/Content.Server/Objectives/Conditions/KillPersonCondition.cs index 74248e5324..7e7bd0a76c 100644 --- a/Content.Server/Objectives/Conditions/KillPersonCondition.cs +++ b/Content.Server/Objectives/Conditions/KillPersonCondition.cs @@ -1,7 +1,7 @@ #nullable enable using Content.Server.Mobs; using Content.Server.Objectives.Interfaces; -using Content.Shared.GameObjects.Components.Damage; +using Content.Shared.GameObjects.Components.Mobs.State; using Robust.Shared.Localization; using Robust.Shared.Utility; @@ -18,12 +18,12 @@ namespace Content.Server.Objectives.Conditions public SpriteSpecifier Icon => new SpriteSpecifier.Rsi(new ResourcePath("Objects/Weapons/Guns/Pistols/mk58_wood.rsi"), "icon"); - public float Progress => Target?.OwnedEntity != null && - Target.OwnedEntity - .TryGetComponent(out var damageableComponent) && - damageableComponent.CurrentState == DamageState.Dead - ? 1f - : 0f; + public float Progress => Target? + .OwnedEntity? + .GetComponentOrNull()? + .IsDead() ?? false + ? 1f + : 0f; public float Difficulty => 2f; diff --git a/Content.Server/Objectives/Conditions/KillRandomPersonCondition.cs b/Content.Server/Objectives/Conditions/KillRandomPersonCondition.cs index 7a1f3e7c07..fd3a583d38 100644 --- a/Content.Server/Objectives/Conditions/KillRandomPersonCondition.cs +++ b/Content.Server/Objectives/Conditions/KillRandomPersonCondition.cs @@ -2,7 +2,7 @@ using Content.Server.GameObjects.Components.Mobs; using Content.Server.Mobs; using Content.Server.Objectives.Interfaces; -using Content.Shared.GameObjects.Components.Damage; +using Content.Shared.GameObjects.Components.Mobs.State; using JetBrains.Annotations; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Interfaces.Random; @@ -20,10 +20,7 @@ namespace Content.Server.Objectives.Conditions var allHumans = entityMgr.ComponentManager.EntityQuery().Where(mc => { var entity = mc.Mind?.OwnedEntity; - return entity != null && - entity.TryGetComponent(out var damageableComponent) && - damageableComponent.CurrentState == DamageState.Alive - && mc.Mind != mind; + return (entity?.GetComponentOrNull()?.IsAlive() ?? false) && mc.Mind != mind; }).Select(mc => mc.Mind).ToList(); return new KillRandomPersonCondition {Target = IoCManager.Resolve().Pick(allHumans)}; } diff --git a/Content.Server/Objectives/Conditions/StayAliveCondition.cs b/Content.Server/Objectives/Conditions/StayAliveCondition.cs index da85e1f7a7..b98cb88842 100644 --- a/Content.Server/Objectives/Conditions/StayAliveCondition.cs +++ b/Content.Server/Objectives/Conditions/StayAliveCondition.cs @@ -1,7 +1,7 @@ #nullable enable using Content.Server.Mobs; using Content.Server.Objectives.Interfaces; -using Content.Shared.GameObjects.Components.Damage; +using Content.Shared.GameObjects.Components.Mobs.State; using JetBrains.Annotations; using Robust.Shared.Localization; using Robust.Shared.Utility; @@ -24,11 +24,12 @@ namespace Content.Server.Objectives.Conditions public SpriteSpecifier Icon => new SpriteSpecifier.Rsi(new ResourcePath("Objects/Misc/skub.rsi"), "icon"); //didn't know what else would have been a good icon for staying alive - public float Progress => _mind?.OwnedEntity != null && - _mind.OwnedEntity.TryGetComponent(out var damageableComponent) && - damageableComponent.CurrentState == DamageState.Dead - ? 0f - : 1f; + public float Progress => _mind? + .OwnedEntity? + .GetComponentOrNull()? + .IsDead() ?? false + ? 0f + : 1f; public float Difficulty => 1f; diff --git a/Content.Server/StationEvents/BoltsDown.cs b/Content.Server/StationEvents/BoltsDown.cs index ba64b41be4..39a6dcbee1 100644 --- a/Content.Server/StationEvents/BoltsDown.cs +++ b/Content.Server/StationEvents/BoltsDown.cs @@ -5,6 +5,7 @@ using Content.Server.GameObjects.Components.GUI; using Content.Server.GameObjects.Components.Items.Storage; using Content.Shared.GameObjects.Components.Inventory; using Content.Shared.GameObjects.Components.Damage; +using Content.Shared.GameObjects.Components.Mobs.State; using Robust.Server.GameObjects.EntitySystems; using Robust.Server.Interfaces.Player; using Robust.Shared.Audio; @@ -40,17 +41,23 @@ namespace Content.Server.StationEvents var playerManager = IoCManager.Resolve(); foreach (var player in playerManager.GetAllPlayers()) { - if (player.AttachedEntity == null || !player.AttachedEntity.TryGetComponent(out InventoryComponent? inventory)) return; + var playerEntity = player.AttachedEntity; + if (playerEntity == null || !playerEntity.TryGetComponent(out InventoryComponent? inventory)) return; if (inventory.TryGetSlotItem(EquipmentSlotDefines.Slots.BELT, out ItemComponent? item) && item?.Owner.Prototype?.ID == "UtilityBeltClothingFilledEvent") return; - if (player.AttachedEntity.TryGetComponent(out var damageable) - && damageable.CurrentState == DamageState.Dead) return; + if (playerEntity.TryGetComponent(out IDamageableComponent? damageable) && + playerEntity.TryGetComponent(out IMobStateComponent? mobState) && + mobState.IsDead()) + { + return; + } var entityManager = IoCManager.Resolve(); - var playerPos = player.AttachedEntity.Transform.Coordinates; + var playerPos = playerEntity.Transform.Coordinates; entityManager.SpawnEntity("UtilityBeltClothingFilledEvent", playerPos); } } + public override void Shutdown() { base.Shutdown(); @@ -59,6 +66,7 @@ namespace Content.Server.StationEvents var componentManager = IoCManager.Resolve(); foreach (var component in componentManager.EntityQuery()) component.BoltsDown = false; } + public override void Update(float frameTime) { if (!Running) diff --git a/Content.Shared/Damage/DamageClass.cs b/Content.Shared/Damage/DamageClass.cs index 406dc8bb73..55e6a47045 100644 --- a/Content.Shared/Damage/DamageClass.cs +++ b/Content.Shared/Damage/DamageClass.cs @@ -18,6 +18,7 @@ namespace Content.Shared.Damage public static class DamageClassExtensions { + // TODO DAMAGE This but not hardcoded private static readonly ImmutableDictionary> ClassToType = new Dictionary> { diff --git a/Content.Shared/Damage/DamageContainer/DamageContainer.cs b/Content.Shared/Damage/DamageContainer/DamageContainer.cs deleted file mode 100644 index 141b0f1d30..0000000000 --- a/Content.Shared/Damage/DamageContainer/DamageContainer.cs +++ /dev/null @@ -1,285 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; -using System.Linq; -using Content.Shared.GameObjects.Components.Damage; -using Robust.Shared.Serialization; -using Robust.Shared.ViewVariables; - -namespace Content.Shared.Damage.DamageContainer -{ - /// - /// Holds the information regarding the various forms of damage an object has - /// taken (i.e. brute, burn, or toxic damage). - /// - [Serializable, NetSerializable] - public class DamageContainer - { - private Dictionary _damageList = DamageTypeExtensions.ToDictionary(); - - public delegate void HealthChangedDelegate(List changes); - - [NonSerialized] public readonly HealthChangedDelegate OnHealthChanged; - - public DamageContainer(HealthChangedDelegate onHealthChanged, DamageContainerPrototype data) - { - ID = data.ID; - OnHealthChanged = onHealthChanged; - SupportedClasses = data.ActiveDamageClasses; - } - - public string ID { get; } - - [ViewVariables] public virtual List SupportedClasses { get; } - - [ViewVariables] - public virtual List SupportedTypes - { - get - { - var toReturn = new List(); - foreach (var @class in SupportedClasses) - { - toReturn.AddRange(@class.ToTypes()); - } - - return toReturn; - } - } - - /// - /// Sum of all damages kept on record. - /// - [ViewVariables] - public int TotalDamage => _damageList.Values.Sum(); - - public IReadOnlyDictionary DamageClasses => - DamageTypeExtensions.ToClassDictionary(DamageTypes); - - public IReadOnlyDictionary DamageTypes => _damageList; - - public bool SupportsDamageClass(DamageClass @class) - { - return SupportedClasses.Contains(@class); - } - - public bool SupportsDamageType(DamageType type) - { - return SupportedClasses.Contains(type.ToClass()); - } - - /// - /// Attempts to grab the damage value for the given . - /// - /// - /// False if the container does not support that type, true otherwise. - /// - public bool TryGetDamageValue(DamageType type, [NotNullWhen(true)] out int damage) - { - return _damageList.TryGetValue(type, out damage); - } - - /// - /// Grabs the damage value for the given . - /// - public int GetDamageValue(DamageType type) - { - return TryGetDamageValue(type, out var damage) ? damage : 0; - } - - /// - /// Attempts to grab the sum of damage values for the given - /// . - /// - /// The class to get the sum for. - /// The resulting amount of damage, if any. - /// - /// True if the class is supported in this container, false otherwise. - /// - public bool TryGetDamageClassSum(DamageClass @class, [NotNullWhen(true)] out int damage) - { - damage = 0; - - if (SupportsDamageClass(@class)) - { - foreach (var type in @class.ToTypes()) - { - damage += GetDamageValue(type); - } - - return true; - } - - return false; - } - - /// - /// Grabs the sum of damage values for the given . - /// - public int GetDamageClassSum(DamageClass damageClass) - { - var sum = 0; - - foreach (var type in damageClass.ToTypes()) - { - sum += GetDamageValue(type); - } - - return sum; - } - - /// - /// Attempts to change the damage value for the given - /// - /// - /// - /// True if successful, false if this container does not support that type. - /// - public bool TryChangeDamageValue(DamageType type, int delta) - { - var damageClass = type.ToClass(); - - if (SupportsDamageClass(damageClass)) - { - var current = _damageList[type]; - current = _damageList[type] = current + delta; - - if (_damageList[type] < 0) - { - _damageList[type] = 0; - delta = -current; - current = 0; - } - - var datum = new HealthChangeData(type, current, delta); - var data = new List {datum}; - - OnHealthChanged(data); - - return true; - } - - return false; - } - - /// - /// Changes the damage value for the given . - /// - /// The type of damage to change. - /// The amount to change it by. - /// - /// Whether or not to suppress the health change event. - /// - /// - /// True if successful, false if this container does not support that type. - /// - public bool ChangeDamageValue(DamageType type, int delta, bool quiet = false) - { - if (!_damageList.TryGetValue(type, out var current)) - { - return false; - } - - _damageList[type] = current + delta; - - if (_damageList[type] < 0) - { - _damageList[type] = 0; - delta = -current; - } - - current = _damageList[type]; - - var datum = new HealthChangeData(type, current, delta); - var data = new List {datum}; - - OnHealthChanged(data); - - return true; - } - - /// - /// Attempts to set the damage value for the given . - /// - /// - /// True if successful, false if this container does not support that type. - /// - public bool TrySetDamageValue(DamageType type, int newValue) - { - if (newValue < 0) - { - return false; - } - - var damageClass = type.ToClass(); - - if (SupportedClasses.Contains(damageClass)) - { - var old = _damageList[type] = newValue; - _damageList[type] = newValue; - - var delta = newValue - old; - var datum = new HealthChangeData(type, newValue, delta); - var data = new List {datum}; - - OnHealthChanged(data); - - return true; - } - - return false; - } - - /// - /// Tries to set the damage value for the given . - /// - /// The type of damage to set. - /// The value to set it to. - /// - /// Whether or not to suppress the health changed event. - /// - /// True if successful, false otherwise. - public bool SetDamageValue(DamageType type, int newValue, bool quiet = false) - { - if (newValue < 0) - { - return false; - } - - if (!_damageList.ContainsKey(type)) - { - return false; - } - - var old = _damageList[type]; - _damageList[type] = newValue; - - if (!quiet) - { - var delta = newValue - old; - var datum = new HealthChangeData(type, 0, delta); - var data = new List {datum}; - - OnHealthChanged(data); - } - - return true; - } - - public void Heal() - { - var data = new List(); - - foreach (var type in SupportedTypes) - { - var delta = -GetDamageValue(type); - var datum = new HealthChangeData(type, 0, delta); - - data.Add(datum); - SetDamageValue(type, 0, true); - } - - OnHealthChanged(data); - } - } -} diff --git a/Content.Shared/Damage/DamageContainer/DamageContainerPrototype.cs b/Content.Shared/Damage/DamageContainer/DamageContainerPrototype.cs index 63a67a2a0a..2138a2520a 100644 --- a/Content.Shared/Damage/DamageContainer/DamageContainerPrototype.cs +++ b/Content.Shared/Damage/DamageContainer/DamageContainerPrototype.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Linq; using Robust.Shared.Prototypes; using Robust.Shared.Serialization; using Robust.Shared.ViewVariables; @@ -14,18 +15,37 @@ namespace Content.Shared.Damage.DamageContainer [Serializable, NetSerializable] public class DamageContainerPrototype : IPrototype, IIndexedPrototype { - private List _activeDamageClasses; + private HashSet _supportedClasses; + private HashSet _supportedTypes; private string _id; - [ViewVariables] public List ActiveDamageClasses => _activeDamageClasses; + // TODO NET 5 IReadOnlySet + [ViewVariables] public IReadOnlyCollection SupportedClasses => _supportedClasses; + + [ViewVariables] public IReadOnlyCollection SupportedTypes => _supportedTypes; [ViewVariables] public string ID => _id; public virtual void LoadFrom(YamlMappingNode mapping) { var serializer = YamlObjectSerializer.NewReader(mapping); + serializer.DataField(ref _id, "id", string.Empty); - serializer.DataField(ref _activeDamageClasses, "activeDamageClasses", new List()); + serializer.DataField(ref _supportedClasses, "supportedClasses", new HashSet()); + serializer.DataField(ref _supportedTypes, "supportedTypes", new HashSet()); + + var originalTypes = _supportedTypes.ToArray(); + + foreach (var supportedClass in _supportedClasses) + foreach (var supportedType in supportedClass.ToTypes()) + { + _supportedTypes.Add(supportedType); + } + + foreach (var originalType in originalTypes) + { + _supportedClasses.Add(originalType.ToClass()); + } } } } diff --git a/Content.Shared/Damage/DamageType.cs b/Content.Shared/Damage/DamageType.cs index 0de82925f7..810707fcd2 100644 --- a/Content.Shared/Damage/DamageType.cs +++ b/Content.Shared/Damage/DamageType.cs @@ -38,8 +38,7 @@ namespace Content.Shared.Damage {DamageType.Radiation, DamageClass.Toxin}, {DamageType.Asphyxiation, DamageClass.Airloss}, {DamageType.Bloodloss, DamageClass.Airloss}, - {DamageType.Cellular, DamageClass.Genetic } - + {DamageType.Cellular, DamageClass.Genetic} }.ToImmutableDictionary(); public static DamageClass ToClass(this DamageType type) diff --git a/Content.Shared/Damage/ResistanceSet/ResistanceSet.cs b/Content.Shared/Damage/ResistanceSet/ResistanceSet.cs index 2c0a4eadac..8f2b345c4d 100644 --- a/Content.Shared/Damage/ResistanceSet/ResistanceSet.cs +++ b/Content.Shared/Damage/ResistanceSet/ResistanceSet.cs @@ -6,7 +6,9 @@ using Robust.Shared.ViewVariables; namespace Content.Shared.Damage.ResistanceSet { /// - /// Set of resistances used by damageable objects. Each DamageType has a multiplier and flat damage reduction value. + /// Set of resistances used by damageable objects. + /// Each has a multiplier and flat damage + /// reduction value. /// [NetSerializable] [Serializable] @@ -33,14 +35,15 @@ namespace Content.Shared.Damage.ResistanceSet public string ID { get; } /// - /// Adjusts input damage with the resistance set values. Only applies reduction if the amount is damage (positive), not + /// Adjusts input damage with the resistance set values. + /// Only applies reduction if the amount is damage (positive), not /// healing (negative). /// /// Type of damage. /// Incoming amount of damage. public int CalculateDamage(DamageType damageType, int amount) { - if (amount > 0) //Only apply reduction if it's healing, not damage. + if (amount > 0) // Only apply reduction if it's healing, not damage. { amount -= _resistances[damageType].FlatReduction; @@ -59,8 +62,7 @@ namespace Content.Shared.Damage.ResistanceSet /// /// Settings for a specific damage type in a resistance set. Flat reduction is applied before the coefficient. /// - [NetSerializable] - [Serializable] + [Serializable, NetSerializable] public struct ResistanceSetSettings { [ViewVariables] public float Coefficient { get; private set; } diff --git a/Content.Shared/GameObjects/Components/Body/SharedBodyComponent.cs b/Content.Shared/GameObjects/Components/Body/SharedBodyComponent.cs index b343c4e66a..33dda03b24 100644 --- a/Content.Shared/GameObjects/Components/Body/SharedBodyComponent.cs +++ b/Content.Shared/GameObjects/Components/Body/SharedBodyComponent.cs @@ -3,6 +3,7 @@ using System; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; using System.Linq; +using Content.Shared.Damage; using Content.Shared.GameObjects.Components.Body.Part; using Content.Shared.GameObjects.Components.Body.Part.Property; using Content.Shared.GameObjects.Components.Body.Preset; @@ -103,8 +104,7 @@ namespace Content.Shared.GameObjects.Components.Body { if (part.IsVital && Parts.Count(x => x.Value.PartType == part.PartType) == 0) { - damageable.CurrentState = DamageState.Dead; - damageable.ForceHealthChangedEvent(); + damageable.ChangeDamage(DamageType.Bloodloss, 300, true); // TODO BODY KILL } } diff --git a/Content.Shared/GameObjects/Components/Damage/DamageChangeData.cs b/Content.Shared/GameObjects/Components/Damage/DamageChangeData.cs new file mode 100644 index 0000000000..2abf87a92e --- /dev/null +++ b/Content.Shared/GameObjects/Components/Damage/DamageChangeData.cs @@ -0,0 +1,33 @@ +using Content.Shared.Damage; + +namespace Content.Shared.GameObjects.Components.Damage +{ + /// + /// Data class with information on how the value of a + /// single has changed. + /// + public struct DamageChangeData + { + /// + /// Type of damage that changed. + /// + public DamageType Type; + + /// + /// The new current value for that damage. + /// + public int NewValue; + + /// + /// How much the health value changed from its last value (negative is heals, positive is damage). + /// + public int Delta; + + public DamageChangeData(DamageType type, int newValue, int delta) + { + Type = type; + NewValue = newValue; + Delta = delta; + } + } +} diff --git a/Content.Shared/GameObjects/Components/Damage/DamageChangeParams.cs b/Content.Shared/GameObjects/Components/Damage/DamageChangeParams.cs new file mode 100644 index 0000000000..4c09c8bf28 --- /dev/null +++ b/Content.Shared/GameObjects/Components/Damage/DamageChangeParams.cs @@ -0,0 +1,16 @@ +using System; +using Content.Shared.GameObjects.Components.Body; + +namespace Content.Shared.GameObjects.Components.Damage +{ + /// + /// Data class with information on how to damage a + /// . + /// While not necessary to damage for all instances, classes such as + /// may require it for extra data + /// (such as selecting which limb to target). + /// + public class DamageChangeParams : EventArgs + { + } +} diff --git a/Content.Shared/GameObjects/Components/Damage/DamageChangedEventArgs.cs b/Content.Shared/GameObjects/Components/Damage/DamageChangedEventArgs.cs new file mode 100644 index 0000000000..65dc0d6b5a --- /dev/null +++ b/Content.Shared/GameObjects/Components/Damage/DamageChangedEventArgs.cs @@ -0,0 +1,35 @@ +using System; +using System.Collections.Generic; +using Content.Shared.Damage; + +namespace Content.Shared.GameObjects.Components.Damage +{ + public class DamageChangedEventArgs : EventArgs + { + public DamageChangedEventArgs(IDamageableComponent damageable, IReadOnlyList data) + { + Damageable = damageable; + Data = data; + } + + public DamageChangedEventArgs(IDamageableComponent damageable, DamageType type, int newValue, int delta) + { + Damageable = damageable; + + var datum = new DamageChangeData(type, newValue, delta); + var data = new List {datum}; + + Data = data; + } + + /// + /// Reference to the that invoked the event. + /// + public IDamageableComponent Damageable { get; } + + /// + /// List containing data on each that was changed. + /// + public IReadOnlyList Data { get; } + } +} diff --git a/Content.Shared/GameObjects/Components/Damage/DamageChangedMessage.cs b/Content.Shared/GameObjects/Components/Damage/DamageChangedMessage.cs new file mode 100644 index 0000000000..505ece598a --- /dev/null +++ b/Content.Shared/GameObjects/Components/Damage/DamageChangedMessage.cs @@ -0,0 +1,35 @@ +using System.Collections.Generic; +using Content.Shared.Damage; +using Robust.Shared.GameObjects; + +namespace Content.Shared.GameObjects.Components.Damage +{ + public class DamageChangedMessage : ComponentMessage + { + public DamageChangedMessage(IDamageableComponent damageable, IReadOnlyList data) + { + Damageable = damageable; + Data = data; + } + + public DamageChangedMessage(IDamageableComponent damageable, DamageType type, int newValue, int delta) + { + Damageable = damageable; + + var datum = new DamageChangeData(type, newValue, delta); + var data = new List {datum}; + + Data = data; + } + + /// + /// Reference to the that invoked the event. + /// + public IDamageableComponent Damageable { get; } + + /// + /// List containing data on each that was changed. + /// + public IReadOnlyList Data { get; } + } +} diff --git a/Content.Shared/GameObjects/Components/Damage/DamageState.cs b/Content.Shared/GameObjects/Components/Damage/DamageState.cs deleted file mode 100644 index ab49364b6f..0000000000 --- a/Content.Shared/GameObjects/Components/Damage/DamageState.cs +++ /dev/null @@ -1,24 +0,0 @@ -using System; -using Robust.Shared.Interfaces.GameObjects; -using Robust.Shared.Serialization; - -namespace Content.Shared.GameObjects.Components.Damage -{ - // TODO: Fix summary - /// - /// Defines what state an with a - /// is in. - /// Not all states must be supported - for instance, the - /// only supports - /// and , - /// as inanimate objects don't go into crit. - /// - [Serializable, NetSerializable] - public enum DamageState - { - Invalid = 0, - Alive, - Critical, - Dead - } -} diff --git a/Content.Shared/GameObjects/Components/Damage/DamageableComponent.cs b/Content.Shared/GameObjects/Components/Damage/DamageableComponent.cs index 288f5fdaa5..81fa174b9b 100644 --- a/Content.Shared/GameObjects/Components/Damage/DamageableComponent.cs +++ b/Content.Shared/GameObjects/Components/Damage/DamageableComponent.cs @@ -1,6 +1,7 @@ #nullable enable using System; using System.Collections.Generic; +using System.Linq; using Content.Shared.Damage; using Content.Shared.Damage.DamageContainer; using Content.Shared.Damage.ResistanceSet; @@ -31,51 +32,28 @@ namespace Content.Shared.GameObjects.Components.Damage public override string Name => "Damageable"; - private DamageState _damageState; + public override uint? NetID => ContentNetIDs.DAMAGEABLE; + + private readonly Dictionary _damageList = DamageTypeExtensions.ToDictionary(); + private readonly HashSet _supportedTypes = new(); + private readonly HashSet _supportedClasses = new(); private DamageFlag _flags; - public event Action? HealthChangedEvent; + public event Action? HealthChangedEvent; + + // TODO DAMAGE Use as default values, specify overrides in a separate property through yaml for better (de)serialization + [ViewVariables] public string DamageContainerId { get; set; } = default!; [ViewVariables] private ResistanceSet Resistances { get; set; } = default!; - [ViewVariables] private DamageContainer Damage { get; set; } = default!; + // TODO DAMAGE Cache this + [ViewVariables] public int TotalDamage => _damageList.Values.Sum(); - public Dictionary Thresholds { get; set; } = new(); + [ViewVariables] + public IReadOnlyDictionary DamageClasses => + DamageTypeExtensions.ToClassDictionary(_damageList); - public virtual List SupportedDamageStates - { - get - { - var states = new List {DamageState.Alive}; - - states.AddRange(Thresholds.Keys); - - return states; - } - } - - public virtual DamageState CurrentState - { - get => _damageState; - set - { - var old = _damageState; - _damageState = value; - - if (old != value) - { - EnterState(value); - } - - Dirty(); - } - } - - [ViewVariables] public int TotalDamage => Damage.TotalDamage; - - public IReadOnlyDictionary DamageClasses => Damage.DamageClasses; - - public IReadOnlyDictionary DamageTypes => Damage.DamageTypes; + [ViewVariables] public IReadOnlyDictionary DamageTypes => _damageList; public DamageFlag Flags { @@ -107,41 +85,20 @@ namespace Content.Shared.GameObjects.Components.Damage Flags &= ~flag; } + public bool SupportsDamageClass(DamageClass @class) + { + return _supportedClasses.Contains(@class); + } + + public bool SupportsDamageType(DamageType type) + { + return _supportedTypes.Contains(type); + } + public override void ExposeData(ObjectSerializer serializer) { base.ExposeData(serializer); - // TODO DAMAGE Serialize as a dictionary of damage states to thresholds - serializer.DataReadWriteFunction( - "criticalThreshold", - null, - t => - { - if (t == null) - { - return; - } - - Thresholds[DamageState.Critical] = t.Value; - }, - () => Thresholds.TryGetValue(DamageState.Critical, out var value) ? value : (int?) null); - - serializer.DataReadWriteFunction( - "deadThreshold", - null, - t => - { - if (t == null) - { - return; - } - - Thresholds[DamageState.Dead] = t.Value; - }, - () => Thresholds.TryGetValue(DamageState.Dead, out var value) ? value : (int?) null); - - serializer.DataField(ref _damageState, "damageState", DamageState.Alive); - serializer.DataReadWriteFunction( "flags", new List(), @@ -161,7 +118,9 @@ namespace Content.Shared.GameObjects.Components.Damage var writeFlags = new List(); if (Flags == DamageFlag.None) + { return writeFlags; + } foreach (var flag in (DamageFlag[]) Enum.GetValues(typeof(DamageFlag))) { @@ -181,9 +140,15 @@ namespace Content.Shared.GameObjects.Components.Damage prototype => { var damagePrototype = _prototypeManager.Index(prototype); - Damage = new DamageContainer(OnHealthChanged, damagePrototype); + + _supportedClasses.Clear(); + _supportedTypes.Clear(); + + DamageContainerId = damagePrototype.ID; + _supportedClasses.UnionWith(damagePrototype.SupportedClasses); + _supportedTypes.UnionWith(damagePrototype.SupportedTypes); }, - () => Damage.ID); + () => DamageContainerId); serializer.DataReadWriteFunction( "resistancePrototype", @@ -196,16 +161,6 @@ namespace Content.Shared.GameObjects.Components.Damage () => Resistances.ID); } - public override void Initialize() - { - base.Initialize(); - - foreach (var behavior in Owner.GetAllComponents()) - { - HealthChangedEvent += behavior.OnHealthChanged; - } - } - protected override void Startup() { base.Startup(); @@ -213,215 +168,302 @@ namespace Content.Shared.GameObjects.Components.Damage ForceHealthChangedEvent(); } - public bool TryGetDamage(DamageType type, out int damage) + public override ComponentState GetComponentState() { - return Damage.TryGetDamageValue(type, out damage); + return new DamageableComponentState(_damageList, _flags); } - public bool ChangeDamage(DamageType type, int amount, bool ignoreResistances, + public override void HandleComponentState(ComponentState? curState, ComponentState? nextState) + { + base.HandleComponentState(curState, nextState); + + if (!(curState is DamageableComponentState state)) + { + return; + } + + _damageList.Clear(); + + foreach (var (type, damage) in state.DamageList) + { + _damageList[type] = damage; + } + + _flags = state.Flags; + } + + public int GetDamage(DamageType type) + { + return _damageList.GetValueOrDefault(type); + } + + public bool TryGetDamage(DamageType type, out int damage) + { + return _damageList.TryGetValue(type, out damage); + } + + public int GetDamage(DamageClass @class) + { + if (!SupportsDamageClass(@class)) + { + return 0; + } + + var damage = 0; + + foreach (var type in @class.ToTypes()) + { + damage += GetDamage(type); + } + + return damage; + } + + public bool TryGetDamage(DamageClass @class, out int damage) + { + if (!SupportsDamageClass(@class)) + { + damage = 0; + return false; + } + + damage = GetDamage(@class); + return true; + } + + /// + /// Attempts to set the damage value for the given . + /// + /// + /// True if successful, false if this container does not support that type. + /// + public bool TrySetDamage(DamageType type, int newValue) + { + if (newValue < 0) + { + return false; + } + + var damageClass = type.ToClass(); + + if (_supportedClasses.Contains(damageClass)) + { + var old = _damageList[type] = newValue; + _damageList[type] = newValue; + + var delta = newValue - old; + var datum = new DamageChangeData(type, newValue, delta); + var data = new List {datum}; + + OnHealthChanged(data); + + return true; + } + + return false; + } + + public void Heal(DamageType type) + { + SetDamage(type, 0); + } + + public void Heal() + { + foreach (var type in _supportedTypes) + { + Heal(type); + } + } + + public bool ChangeDamage( + DamageType type, + int amount, + bool ignoreResistances, IEntity? source = null, - HealthChangeParams? extraParams = null) + DamageChangeParams? extraParams = null) { if (amount > 0 && HasFlag(DamageFlag.Invulnerable)) { return false; } - if (Damage.SupportsDamageType(type)) + if (!SupportsDamageType(type)) { - var finalDamage = amount; - if (!ignoreResistances) - { - finalDamage = Resistances.CalculateDamage(type, amount); - } - - Damage.ChangeDamageValue(type, finalDamage); - - return true; + return false; } - return false; + var finalDamage = amount; + + if (!ignoreResistances) + { + finalDamage = Resistances.CalculateDamage(type, amount); + } + + if (!_damageList.TryGetValue(type, out var current)) + { + return false; + } + + _damageList[type] = current + finalDamage; + + if (_damageList[type] < 0) + { + _damageList[type] = 0; + finalDamage = -current; + } + + current = _damageList[type]; + + var datum = new DamageChangeData(type, current, finalDamage); + var data = new List {datum}; + + OnHealthChanged(data); + + return true; } public bool ChangeDamage(DamageClass @class, int amount, bool ignoreResistances, IEntity? source = null, - HealthChangeParams? extraParams = null) + DamageChangeParams? extraParams = null) { if (amount > 0 && HasFlag(DamageFlag.Invulnerable)) { return false; } - if (Damage.SupportsDamageClass(@class)) + if (!SupportsDamageClass(@class)) { - var types = @class.ToTypes(); + return false; + } - if (amount < 0) + var types = @class.ToTypes(); + + if (amount < 0) + { + // Changing multiple types is a bit more complicated. Might be a better way (formula?) to do this, + // but essentially just loops between each damage category until all healing is used up. + var healingLeft = amount; + var healThisCycle = 1; + + // While we have healing left... + while (healingLeft > 0 && healThisCycle != 0) { - // Changing multiple types is a bit more complicated. Might be a better way (formula?) to do this, - // but essentially just loops between each damage category until all healing is used up. - var healingLeft = amount; - var healThisCycle = 1; + // Infinite loop fallback, if no healing was done in a cycle + // then exit + healThisCycle = 0; - // While we have healing left... - while (healingLeft > 0 && healThisCycle != 0) + int healPerType; + if (healingLeft > -types.Count) { - // Infinite loop fallback, if no healing was done in a cycle - // then exit - healThisCycle = 0; - - int healPerType; - if (healingLeft > -types.Count && healingLeft < 0) - { - // Say we were to distribute 2 healing between 3 - // this will distribute 1 to each (and stop after 2 are given) - healPerType = -1; - } - else - { - // Say we were to distribute 62 healing between 3 - // this will distribute 20 to each, leaving 2 for next loop - healPerType = healingLeft / types.Count; - } - - foreach (var type in types) - { - var healAmount = - Math.Max(Math.Max(healPerType, -Damage.GetDamageValue(type)), - healingLeft); - - Damage.ChangeDamageValue(type, healAmount); - healThisCycle += healAmount; - healingLeft -= healAmount; - } - } - - return true; - } - - var damageLeft = amount; - - while (damageLeft > 0) - { - int damagePerType; - - if (damageLeft < types.Count && damageLeft > 0) - { - damagePerType = 1; + // Say we were to distribute 2 healing between 3 + // this will distribute 1 to each (and stop after 2 are given) + healPerType = -1; } else { - damagePerType = damageLeft / types.Count; + // Say we were to distribute 62 healing between 3 + // this will distribute 20 to each, leaving 2 for next loop + healPerType = healingLeft / types.Count; } foreach (var type in types) { - var damageAmount = Math.Min(damagePerType, damageLeft); - Damage.ChangeDamageValue(type, damageAmount); - damageLeft -= damageAmount; + var healAmount = + Math.Max(Math.Max(healPerType, -GetDamage(type)), healingLeft); + + ChangeDamage(type, healAmount, true); + healThisCycle += healAmount; + healingLeft -= healAmount; } } return true; } - return false; + var damageLeft = amount; + + while (damageLeft > 0) + { + int damagePerType; + + if (damageLeft < types.Count) + { + damagePerType = 1; + } + else + { + damagePerType = damageLeft / types.Count; + } + + foreach (var type in types) + { + var damageAmount = Math.Min(damagePerType, damageLeft); + ChangeDamage(type, damageAmount, true); + damageLeft -= damageAmount; + } + } + + return true; } - public bool SetDamage(DamageType type, int newValue, IEntity? source = null, - HealthChangeParams? extraParams = null) + public bool SetDamage(DamageType type, int newValue, IEntity? source = null, DamageChangeParams? extraParams = null) { if (newValue >= TotalDamage && HasFlag(DamageFlag.Invulnerable)) { return false; } - if (Damage.SupportsDamageType(type)) + if (newValue < 0) { - Damage.SetDamageValue(type, newValue); - - return true; + return false; } - return false; - } + if (!_damageList.ContainsKey(type)) + { + return false; + } - public void Heal() - { - Damage.Heal(); + var old = _damageList[type]; + _damageList[type] = newValue; + + var delta = newValue - old; + var datum = new DamageChangeData(type, 0, delta); + var data = new List {datum}; + + OnHealthChanged(data); + + return true; } public void ForceHealthChangedEvent() { - var data = new List(); + var data = new List(); - foreach (var type in Damage.SupportedTypes) + foreach (var type in _supportedTypes) { - var damage = Damage.GetDamageValue(type); - var datum = new HealthChangeData(type, damage, 0); + var damage = GetDamage(type); + var datum = new DamageChangeData(type, damage, 0); data.Add(datum); } OnHealthChanged(data); } - public (int current, int max)? Health(DamageState threshold) + private void OnHealthChanged(List changes) { - if (!SupportedDamageStates.Contains(threshold) || - !Thresholds.TryGetValue(threshold, out var thresholdValue)) - { - return null; - } - - var current = thresholdValue - TotalDamage; - return (current, thresholdValue); - } - - public bool TryHealth(DamageState threshold, out (int current, int max) health) - { - var temp = Health(threshold); - - if (temp == null) - { - health = (default, default); - return false; - } - - health = temp.Value; - return true; - } - - private void OnHealthChanged(List changes) - { - var args = new HealthChangedEventArgs(this, changes); + var args = new DamageChangedEventArgs(this, changes); OnHealthChanged(args); } - protected virtual void EnterState(DamageState state) { } - - protected virtual void OnHealthChanged(HealthChangedEventArgs e) + protected virtual void OnHealthChanged(DamageChangedEventArgs e) { - if (CurrentState != DamageState.Dead) - { - if (Thresholds.TryGetValue(DamageState.Dead, out var deadThreshold) && - TotalDamage > deadThreshold) - { - CurrentState = DamageState.Dead; - } - else if (Thresholds.TryGetValue(DamageState.Critical, out var critThreshold) && - TotalDamage > critThreshold) - { - CurrentState = DamageState.Critical; - } - else - { - CurrentState = DamageState.Alive; - } - } - Owner.EntityManager.EventBus.RaiseEvent(EventSource.Local, e); HealthChangedEvent?.Invoke(e); + var message = new DamageChangedMessage(this, e.Data); + SendMessage(message); + Dirty(); } @@ -446,4 +488,17 @@ namespace Content.Shared.GameObjects.Components.Damage ChangeDamage(DamageType.Heat, damage, false); } } + + [Serializable, NetSerializable] + public class DamageableComponentState : ComponentState + { + public readonly Dictionary DamageList; + public readonly DamageFlag Flags; + + public DamageableComponentState(Dictionary damageList, DamageFlag flags) : base(ContentNetIDs.DAMAGEABLE) + { + DamageList = damageList; + Flags = flags; + } + } } diff --git a/Content.Shared/GameObjects/Components/Damage/IDamageableComponent.cs b/Content.Shared/GameObjects/Components/Damage/IDamageableComponent.cs index 766ddfbfce..5e1f3e2f81 100644 --- a/Content.Shared/GameObjects/Components/Damage/IDamageableComponent.cs +++ b/Content.Shared/GameObjects/Components/Damage/IDamageableComponent.cs @@ -1,9 +1,7 @@ #nullable enable using System; using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; using Content.Shared.Damage; -using Content.Shared.GameObjects.Components.Body; using Content.Shared.GameObjects.EntitySystems; using Robust.Shared.Interfaces.GameObjects; @@ -17,20 +15,7 @@ namespace Content.Shared.GameObjects.Components.Damage /// (including both damage negated by resistance or simply inputting 0 as /// the amount of damage to deal). /// - event Action HealthChangedEvent; - - Dictionary Thresholds { get; } - - /// - /// List of all DamageStates that - /// can be. - /// - List SupportedDamageStates { get; } - - /// - /// The currently representing this component. - /// - DamageState CurrentState { get; set; } + event Action HealthChangedEvent; /// /// Sum of all damages taken. @@ -71,6 +56,10 @@ namespace Content.Shared.GameObjects.Components.Damage /// The flag to remove. void RemoveFlag(DamageFlag flag); + bool SupportsDamageClass(DamageClass @class); + + bool SupportsDamageType(DamageType type); + /// /// Gets the amount of damage of a type. /// @@ -79,7 +68,7 @@ namespace Content.Shared.GameObjects.Components.Damage /// /// True if the given is supported, false otherwise. /// - bool TryGetDamage(DamageType type, [NotNullWhen(true)] out int damage); + bool TryGetDamage(DamageType type, out int damage); /// /// Changes the specified , applying @@ -101,10 +90,14 @@ namespace Content.Shared.GameObjects.Components.Damage /// /// /// False if the given type is not supported or improper - /// were provided; true otherwise. + /// were provided; true otherwise. /// - bool ChangeDamage(DamageType type, int amount, bool ignoreResistances, IEntity? source = null, - HealthChangeParams? extraParams = null); + bool ChangeDamage( + DamageType type, + int amount, + bool ignoreResistances, + IEntity? source = null, + DamageChangeParams? extraParams = null); /// /// Changes the specified , applying @@ -127,10 +120,14 @@ namespace Content.Shared.GameObjects.Components.Damage /// /// /// Returns false if the given class is not supported or improper - /// were provided; true otherwise. + /// were provided; true otherwise. /// - bool ChangeDamage(DamageClass @class, int amount, bool ignoreResistances, IEntity? source = null, - HealthChangeParams? extraParams = null); + bool ChangeDamage( + DamageClass @class, + int amount, + bool ignoreResistances, + IEntity? source = null, + DamageChangeParams? extraParams = null); /// /// Forcefully sets the specified to the given @@ -145,9 +142,13 @@ namespace Content.Shared.GameObjects.Components.Damage /// /// /// Returns false if the given type is not supported or improper - /// were provided; true otherwise. + /// were provided; true otherwise. /// - bool SetDamage(DamageType type, int newValue, IEntity? source = null, HealthChangeParams? extraParams = null); + bool SetDamage( + DamageType type, + int newValue, + IEntity? source = null, + DamageChangeParams? extraParams = null); /// /// Sets all damage values to zero. @@ -158,103 +159,5 @@ namespace Content.Shared.GameObjects.Components.Damage /// Invokes the HealthChangedEvent with the current values of health. /// void ForceHealthChangedEvent(); - - /// - /// Calculates the health of an entity until it enters - /// . - /// - /// The state to use as a threshold. - /// - /// The current and maximum health on this entity based on - /// , or null if the state is not supported. - /// - (int current, int max)? Health(DamageState threshold); - - /// - /// Calculates the health of an entity until it enters - /// . - /// - /// The state to use as a threshold. - /// - /// The current and maximum health on this entity based on - /// , or null if the state is not supported. - /// - /// - /// True if is supported, false otherwise. - /// - bool TryHealth(DamageState threshold, [NotNullWhen(true)] out (int current, int max) health); - } - - /// - /// Data class with information on how to damage a - /// . - /// While not necessary to damage for all instances, classes such as - /// may require it for extra data - /// (such as selecting which limb to target). - /// - public class HealthChangeParams : EventArgs - { - } - - /// - /// Data class with information on how the - /// values of a have changed. - /// - public class HealthChangedEventArgs : EventArgs - { - /// - /// Reference to the that invoked the event. - /// - public readonly IDamageableComponent Damageable; - - /// - /// List containing data on each that was changed. - /// - public readonly List Data; - - public HealthChangedEventArgs(IDamageableComponent damageable, List data) - { - Damageable = damageable; - Data = data; - } - - public HealthChangedEventArgs(IDamageableComponent damageable, DamageType type, int newValue, int delta) - { - Damageable = damageable; - - var datum = new HealthChangeData(type, newValue, delta); - var data = new List {datum}; - - Data = data; - } - } - - /// - /// Data class with information on how the value of a - /// single has changed. - /// - public struct HealthChangeData - { - /// - /// Type of damage that changed. - /// - public DamageType Type; - - /// - /// The new current value for that damage. - /// - public int NewValue; - - /// - /// How much the health value changed from its last value (negative is heals, positive is damage). - /// - public int Delta; - - public HealthChangeData(DamageType type, int newValue, int delta) - { - Type = type; - NewValue = newValue; - Delta = delta; - } } } diff --git a/Content.Shared/GameObjects/Components/Damage/IOnHealthChangedBehavior.cs b/Content.Shared/GameObjects/Components/Damage/IOnHealthChangedBehavior.cs deleted file mode 100644 index 64d31971c9..0000000000 --- a/Content.Shared/GameObjects/Components/Damage/IOnHealthChangedBehavior.cs +++ /dev/null @@ -1,22 +0,0 @@ -using Robust.Shared.Interfaces.GameObjects; - -namespace Content.Shared.GameObjects.Components.Damage -{ - // TODO - /// - /// Component interface that gets triggered after the values of a - /// on the same change. - /// - public interface IOnHealthChangedBehavior - { - /// - /// Called when the entity's - /// is healed or hurt. - /// Of note is that a "deal 0 damage" call will still trigger - /// this function (including both damage negated by resistance or - /// simply inputting 0 as the amount of damage to deal). - /// - /// Details of how the health changed. - public void OnHealthChanged(HealthChangedEventArgs e); - } -} diff --git a/Content.Shared/GameObjects/Components/Mobs/DamageStateHelpers.cs b/Content.Shared/GameObjects/Components/Mobs/DamageStateHelpers.cs new file mode 100644 index 0000000000..4592576bd8 --- /dev/null +++ b/Content.Shared/GameObjects/Components/Mobs/DamageStateHelpers.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; + +namespace Content.Shared.GameObjects.Components.Mobs +{ + public static class DamageStateHelpers + { + /// + /// Enumerates over , returning them in order + /// of alive to dead. + /// + /// An enumerable of . + public static IEnumerable AliveToDead() + { + foreach (DamageState state in Enum.GetValues(typeof(DamageState))) + { + if (state == DamageState.Invalid) + { + continue; + } + + yield return state; + } + } + } +} diff --git a/Content.Shared/GameObjects/Components/Mobs/DamageStateVisuals.cs b/Content.Shared/GameObjects/Components/Mobs/DamageStateVisuals.cs new file mode 100644 index 0000000000..c23adb4987 --- /dev/null +++ b/Content.Shared/GameObjects/Components/Mobs/DamageStateVisuals.cs @@ -0,0 +1,28 @@ +using System; +using Robust.Shared.Interfaces.GameObjects; +using Robust.Shared.Serialization; + +namespace Content.Shared.GameObjects.Components.Mobs +{ + [Serializable, NetSerializable] + public enum DamageStateVisuals + { + State + } + + /// + /// Defines what state an is in. + /// + /// Ordered from most alive to least alive. + /// To enumerate them in this way see + /// . + /// + [Serializable, NetSerializable] + public enum DamageState : byte + { + Invalid = 0, + Alive = 1, + Critical = 2, + Dead = 3 + } +} diff --git a/Content.Shared/GameObjects/Components/Mobs/SharedDamageState.cs b/Content.Shared/GameObjects/Components/Mobs/SharedDamageState.cs deleted file mode 100644 index 87f6d6469c..0000000000 --- a/Content.Shared/GameObjects/Components/Mobs/SharedDamageState.cs +++ /dev/null @@ -1,11 +0,0 @@ -using System; -using Robust.Shared.Serialization; - -namespace Content.Shared.GameObjects.Components.Mobs -{ - [Serializable, NetSerializable] - public enum DamageStateVisuals - { - State - } -} diff --git a/Content.Shared/GameObjects/Components/Mobs/State/BaseMobState.cs b/Content.Shared/GameObjects/Components/Mobs/State/BaseMobState.cs new file mode 100644 index 0000000000..02d3cbd586 --- /dev/null +++ b/Content.Shared/GameObjects/Components/Mobs/State/BaseMobState.cs @@ -0,0 +1,98 @@ +using Robust.Shared.Interfaces.GameObjects; +using Robust.Shared.Serialization; + +namespace Content.Shared.GameObjects.Components.Mobs.State +{ + public abstract class BaseMobState : IMobState + { + protected abstract DamageState DamageState { get; } + + public virtual bool IsAlive() + { + return DamageState == DamageState.Alive; + } + + public virtual bool IsCritical() + { + return DamageState == DamageState.Critical; + } + + public virtual bool IsDead() + { + return DamageState == DamageState.Dead; + } + + public virtual bool IsIncapacitated() + { + return IsCritical() || IsDead(); + } + + public virtual void EnterState(IEntity entity) { } + + public virtual void ExitState(IEntity entity) { } + + public virtual void UpdateState(IEntity entity, int threshold) { } + + public virtual void ExposeData(ObjectSerializer serializer) { } + + public virtual bool CanInteract() + { + return true; + } + + public virtual bool CanMove() + { + return true; + } + + public virtual bool CanUse() + { + return true; + } + + public virtual bool CanThrow() + { + return true; + } + + public virtual bool CanSpeak() + { + return true; + } + + public virtual bool CanDrop() + { + return true; + } + + public virtual bool CanPickup() + { + return true; + } + + public virtual bool CanEmote() + { + return true; + } + + public virtual bool CanAttack() + { + return true; + } + + public virtual bool CanEquip() + { + return true; + } + + public virtual bool CanUnequip() + { + return true; + } + + public virtual bool CanChangeDirection() + { + return true; + } + } +} diff --git a/Content.Shared/GameObjects/Components/Mobs/State/IMobState.cs b/Content.Shared/GameObjects/Components/Mobs/State/IMobState.cs index f22265dd92..e17fa2f2b2 100644 --- a/Content.Shared/GameObjects/Components/Mobs/State/IMobState.cs +++ b/Content.Shared/GameObjects/Components/Mobs/State/IMobState.cs @@ -1,6 +1,6 @@ -using Content.Shared.GameObjects.Components.Damage; -using Content.Shared.GameObjects.EntitySystems; +using Content.Shared.GameObjects.EntitySystems; using Robust.Shared.Interfaces.GameObjects; +using Robust.Shared.Interfaces.Serialization; namespace Content.Shared.GameObjects.Components.Mobs.State { @@ -9,8 +9,21 @@ namespace Content.Shared.GameObjects.Components.Mobs.State /// (i.e. Normal, Critical, Dead) and what effects to apply upon entering or /// exiting the state. /// - public interface IMobState : IActionBlocker + public interface IMobState : IExposeData, IActionBlocker { + bool IsAlive(); + + bool IsCritical(); + + bool IsDead(); + + /// + /// Checks if the mob is in a critical or dead state. + /// See and . + /// + /// true if it is, false otherwise. + bool IsIncapacitated(); + /// /// Called when this state is entered. /// @@ -24,6 +37,6 @@ namespace Content.Shared.GameObjects.Components.Mobs.State /// /// Called when this state is updated. /// - void UpdateState(IEntity entity); + void UpdateState(IEntity entity, int threshold); } } diff --git a/Content.Shared/GameObjects/Components/Mobs/State/IMobStateComponent.cs b/Content.Shared/GameObjects/Components/Mobs/State/IMobStateComponent.cs new file mode 100644 index 0000000000..9f39fa4f78 --- /dev/null +++ b/Content.Shared/GameObjects/Components/Mobs/State/IMobStateComponent.cs @@ -0,0 +1,28 @@ +#nullable enable +using System.Diagnostics.CodeAnalysis; +using Robust.Shared.Interfaces.GameObjects; + +namespace Content.Shared.GameObjects.Components.Mobs.State +{ + public interface IMobStateComponent : IComponent + { + IMobState? CurrentState { get; } + + bool IsAlive(); + + bool IsCritical(); + + bool IsDead(); + + bool IsIncapacitated(); + + (IMobState state, int threshold)? GetEarliestIncapacitatedState(int minimumDamage); + + bool TryGetEarliestIncapacitatedState( + int minimumDamage, + [NotNullWhen(true)] out IMobState? state, + out int threshold); + + void UpdateState(int damage, bool syncing = false); + } +} diff --git a/Content.Shared/GameObjects/Components/Mobs/State/MobStateChangedMessage.cs b/Content.Shared/GameObjects/Components/Mobs/State/MobStateChangedMessage.cs new file mode 100644 index 0000000000..660056d7c6 --- /dev/null +++ b/Content.Shared/GameObjects/Components/Mobs/State/MobStateChangedMessage.cs @@ -0,0 +1,27 @@ +#nullable enable +using Robust.Shared.GameObjects; +using Robust.Shared.Interfaces.GameObjects; + +namespace Content.Shared.GameObjects.Components.Mobs.State +{ + public class MobStateChangedMessage : ComponentMessage + { + public MobStateChangedMessage( + IMobStateComponent component, + IMobState? oldMobState, + IMobState currentMobState) + { + Component = component; + OldMobState = oldMobState; + CurrentMobState = currentMobState; + } + + public IEntity Entity => Component.Owner; + + public IMobStateComponent Component { get; } + + public IMobState? OldMobState { get; } + + public IMobState CurrentMobState { get; } + } +} diff --git a/Content.Shared/GameObjects/Components/Mobs/State/SharedCriticalMobState.cs b/Content.Shared/GameObjects/Components/Mobs/State/SharedCriticalMobState.cs new file mode 100644 index 0000000000..87e5d5b1a4 --- /dev/null +++ b/Content.Shared/GameObjects/Components/Mobs/State/SharedCriticalMobState.cs @@ -0,0 +1,92 @@ +using Content.Shared.Alert; +using Content.Shared.GameObjects.EntitySystems; +using Robust.Shared.GameObjects.Systems; +using Robust.Shared.Interfaces.GameObjects; + +namespace Content.Shared.GameObjects.Components.Mobs.State +{ + /// + /// A state in which an entity is disabled from acting due to sufficient damage (considered unconscious). + /// + public abstract class SharedCriticalMobState : BaseMobState + { + protected override DamageState DamageState => DamageState.Critical; + + public override void EnterState(IEntity entity) + { + base.EnterState(entity); + + if (entity.TryGetComponent(out SharedAlertsComponent status)) + { + status.ShowAlert(AlertType.HumanCrit); // TODO: combine humancrit-0 and humancrit-1 into a gif and display it + } + } + + public override void ExitState(IEntity entity) + { + base.ExitState(entity); + + EntitySystem.Get().Standing(entity); + } + + public override bool CanInteract() + { + return false; + } + + public override bool CanMove() + { + return false; + } + + public override bool CanUse() + { + return false; + } + + public override bool CanThrow() + { + return false; + } + + public override bool CanSpeak() + { + return false; + } + + public override bool CanDrop() + { + return false; + } + + public override bool CanPickup() + { + return false; + } + + public override bool CanEmote() + { + return false; + } + + public override bool CanAttack() + { + return false; + } + + public override bool CanEquip() + { + return false; + } + + public override bool CanUnequip() + { + return false; + } + + public override bool CanChangeDirection() + { + return false; + } + } +} diff --git a/Content.Shared/GameObjects/Components/Mobs/State/SharedCriticalState.cs b/Content.Shared/GameObjects/Components/Mobs/State/SharedCriticalState.cs deleted file mode 100644 index bd50cc36ca..0000000000 --- a/Content.Shared/GameObjects/Components/Mobs/State/SharedCriticalState.cs +++ /dev/null @@ -1,76 +0,0 @@ -using Robust.Shared.Interfaces.GameObjects; - -namespace Content.Shared.GameObjects.Components.Mobs.State -{ - /// - /// A state in which an entity is disabled from acting due to sufficient damage (considered unconscious). - /// - public abstract class SharedCriticalState : IMobState - { - public abstract void EnterState(IEntity entity); - - public abstract void ExitState(IEntity entity); - - public abstract void UpdateState(IEntity entity); - - public bool CanInteract() - { - return false; - } - - public bool CanMove() - { - return false; - } - - public bool CanUse() - { - return false; - } - - public bool CanThrow() - { - return false; - } - - public bool CanSpeak() - { - return false; - } - - public bool CanDrop() - { - return false; - } - - public bool CanPickup() - { - return false; - } - - public bool CanEmote() - { - return false; - } - - public bool CanAttack() - { - return false; - } - - public bool CanEquip() - { - return false; - } - - public bool CanUnequip() - { - return false; - } - - public bool CanChangeDirection() - { - return false; - } - } -} diff --git a/Content.Shared/GameObjects/Components/Mobs/State/SharedDeadMobState.cs b/Content.Shared/GameObjects/Components/Mobs/State/SharedDeadMobState.cs new file mode 100644 index 0000000000..49d7e7227a --- /dev/null +++ b/Content.Shared/GameObjects/Components/Mobs/State/SharedDeadMobState.cs @@ -0,0 +1,77 @@ +namespace Content.Shared.GameObjects.Components.Mobs.State +{ + public abstract class SharedDeadMobState : BaseMobState + { + protected override DamageState DamageState => DamageState.Dead; + + public override bool CanInteract() + { + return false; + } + + public override bool CanMove() + { + return false; + } + + public override bool CanUse() + { + return false; + } + + public override bool CanThrow() + { + return false; + } + + public override bool CanSpeak() + { + return false; + } + + public override bool CanDrop() + { + return false; + } + + public override bool CanPickup() + { + return false; + } + + public override bool CanEmote() + { + return false; + } + + public override bool CanAttack() + { + return false; + } + + public override bool CanEquip() + { + return false; + } + + public override bool CanUnequip() + { + return false; + } + + public override bool CanChangeDirection() + { + return false; + } + + public bool CanShiver() + { + return false; + } + + public bool CanSweat() + { + return false; + } + } +} diff --git a/Content.Shared/GameObjects/Components/Mobs/State/SharedDeadState.cs b/Content.Shared/GameObjects/Components/Mobs/State/SharedDeadState.cs deleted file mode 100644 index 43887b878b..0000000000 --- a/Content.Shared/GameObjects/Components/Mobs/State/SharedDeadState.cs +++ /dev/null @@ -1,76 +0,0 @@ -using Robust.Shared.Interfaces.GameObjects; - -namespace Content.Shared.GameObjects.Components.Mobs.State -{ - public abstract class SharedDeadState : IMobState - { - public abstract void EnterState(IEntity entity); - - public abstract void ExitState(IEntity entity); - - public abstract void UpdateState(IEntity entity); - - public bool CanInteract() - { - return false; - } - - public bool CanMove() - { - return false; - } - - public bool CanUse() - { - return false; - } - - public bool CanThrow() - { - return false; - } - - public bool CanSpeak() - { - return false; - } - - public bool CanDrop() - { - return false; - } - - public bool CanPickup() - { - return false; - } - - public bool CanEmote() - { - return false; - } - - public bool CanAttack() - { - return false; - } - - public bool CanEquip() - { - return false; - } - - public bool CanUnequip() - { - return false; - } - - public bool CanChangeDirection() - { - return false; - } - - public bool CanShiver() => false; - public bool CanSweat() => false; - } -} diff --git a/Content.Shared/GameObjects/Components/Mobs/State/SharedMobStateComponent.cs b/Content.Shared/GameObjects/Components/Mobs/State/SharedMobStateComponent.cs new file mode 100644 index 0000000000..cd34d1297b --- /dev/null +++ b/Content.Shared/GameObjects/Components/Mobs/State/SharedMobStateComponent.cs @@ -0,0 +1,345 @@ +#nullable enable +using System; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Linq; +using Content.Shared.Alert; +using Content.Shared.GameObjects.Components.Damage; +using Content.Shared.GameObjects.EntitySystems; +using Robust.Shared.GameObjects; +using Robust.Shared.Interfaces.GameObjects; +using Robust.Shared.Serialization; +using Robust.Shared.ViewVariables; + +namespace Content.Shared.GameObjects.Components.Mobs.State +{ + /// + /// When attached to an , + /// this component will handle critical and death behaviors for mobs. + /// Additionally, it handles sending effects to clients + /// (such as blur effect for unconsciousness) and managing the health HUD. + /// + public abstract class SharedMobStateComponent : Component, IMobStateComponent, IActionBlocker + { + public override string Name => "MobState"; + + public override uint? NetID => ContentNetIDs.MOB_STATE; + + /// + /// States that this mapped to + /// the amount of damage at which they are triggered. + /// A threshold is reached when the total damage of an entity is equal + /// to or higher than the int key, but lower than the next threshold. + /// Ordered from lowest to highest. + /// + [ViewVariables] + private SortedDictionary _lowestToHighestStates = default!; + + // TODO Remove Nullability? + [ViewVariables] + public IMobState? CurrentState { get; private set; } + + [ViewVariables] + public int? CurrentThreshold { get; private set; } + + public override void ExposeData(ObjectSerializer serializer) + { + base.ExposeData(serializer); + + serializer.DataReadWriteFunction( + "thresholds", + new Dictionary(), + thresholds => + { + _lowestToHighestStates = new SortedDictionary(thresholds); + }, + () => new Dictionary(_lowestToHighestStates)); + } + + protected override void Startup() + { + base.Startup(); + + if (CurrentState != null && CurrentThreshold != null) + { + UpdateState(null, (CurrentState, CurrentThreshold.Value)); + } + } + + public override void OnRemove() + { + if (Owner.TryGetComponent(out SharedAlertsComponent? status)) + { + status.ClearAlert(AlertType.HumanHealth); + } + + base.OnRemove(); + } + + public override ComponentState GetComponentState() + { + return new MobStateComponentState(CurrentThreshold); + } + + public override void HandleComponentState(ComponentState? curState, ComponentState? nextState) + { + base.HandleComponentState(curState, nextState); + + if (curState is not MobStateComponentState state) + { + return; + } + + if (CurrentThreshold == state.CurrentThreshold) + { + return; + } + + if (state.CurrentThreshold == null) + { + RemoveState(true); + } + else + { + UpdateState(state.CurrentThreshold.Value, true); + } + } + + public override void HandleMessage(ComponentMessage message, IComponent? component) + { + base.HandleMessage(message, component); + + switch (message) + { + case DamageChangedMessage msg: + if (msg.Damageable.Owner != Owner) + { + break; + } + + UpdateState(msg.Damageable.TotalDamage); + + break; + } + } + + public bool IsAlive() + { + return CurrentState?.IsAlive() ?? false; + } + + public bool IsCritical() + { + return CurrentState?.IsCritical() ?? false; + } + + public bool IsDead() + { + return CurrentState?.IsDead() ?? false; + } + + public bool IsIncapacitated() + { + return CurrentState?.IsIncapacitated() ?? false; + } + + public (IMobState state, int threshold)? GetState(int damage) + { + foreach (var (threshold, state) in _lowestToHighestStates.Reverse()) + { + if (damage >= threshold) + { + return (state, threshold); + } + } + + return null; + } + + public bool TryGetState( + int damage, + [NotNullWhen(true)] out IMobState? state, + out int threshold) + { + var highestState = GetState(damage); + + if (highestState == null) + { + state = default; + threshold = default; + return false; + } + + (state, threshold) = highestState.Value; + return true; + } + + public (IMobState state, int threshold)? GetEarliestIncapacitatedState(int minimumDamage) + { + foreach (var (threshold, state) in _lowestToHighestStates) + { + if (!state.IsIncapacitated()) + { + continue; + } + + if (threshold < minimumDamage) + { + continue; + } + + return (state, threshold); + } + + return null; + } + + public bool TryGetEarliestIncapacitatedState( + int minimumDamage, + [NotNullWhen(true)] out IMobState? state, + out int threshold) + { + var earliestState = GetEarliestIncapacitatedState(minimumDamage); + + if (earliestState == null) + { + state = default; + threshold = default; + return false; + } + + (state, threshold) = earliestState.Value; + return true; + } + + private void RemoveState(bool syncing = false) + { + var old = CurrentState; + CurrentState = null; + CurrentThreshold = null; + + UpdateState(old, null); + + if (!syncing) + { + Dirty(); + } + } + + public void UpdateState(int damage, bool syncing = false) + { + if (!TryGetState(damage, out var newState, out var threshold)) + { + return; + } + + UpdateState(CurrentState, (newState, threshold)); + + if (!syncing) + { + Dirty(); + } + } + + private void UpdateState(IMobState? old, (IMobState state, int threshold)? current) + { + if (!current.HasValue) + { + old?.ExitState(Owner); + return; + } + + var (state, threshold) = current.Value; + + CurrentThreshold = threshold; + + if (state == old) + { + state.UpdateState(Owner, threshold); + return; + } + + old?.ExitState(Owner); + + CurrentState = state; + + state.EnterState(Owner); + state.UpdateState(Owner, threshold); + + var message = new MobStateChangedMessage(this, old, state); + + SendMessage(message); + } + + bool IActionBlocker.CanInteract() + { + return CurrentState?.CanInteract() ?? true; + } + + bool IActionBlocker.CanMove() + { + return CurrentState?.CanMove() ?? true; + } + + bool IActionBlocker.CanUse() + { + return CurrentState?.CanUse() ?? true; + } + + bool IActionBlocker.CanThrow() + { + return CurrentState?.CanThrow() ?? true; + } + + bool IActionBlocker.CanSpeak() + { + return CurrentState?.CanSpeak() ?? true; + } + + bool IActionBlocker.CanDrop() + { + return CurrentState?.CanDrop() ?? true; + } + + bool IActionBlocker.CanPickup() + { + return CurrentState?.CanPickup() ?? true; + } + + bool IActionBlocker.CanEmote() + { + return CurrentState?.CanEmote() ?? true; + } + + bool IActionBlocker.CanAttack() + { + return CurrentState?.CanAttack() ?? true; + } + + bool IActionBlocker.CanEquip() + { + return CurrentState?.CanEquip() ?? true; + } + + bool IActionBlocker.CanUnequip() + { + return CurrentState?.CanUnequip() ?? true; + } + + bool IActionBlocker.CanChangeDirection() + { + return CurrentState?.CanChangeDirection() ?? true; + } + } + + [Serializable, NetSerializable] + public class MobStateComponentState : ComponentState + { + public readonly int? CurrentThreshold; + + public MobStateComponentState(int? currentThreshold) : base(ContentNetIDs.MOB_STATE) + { + CurrentThreshold = currentThreshold; + } + } +} diff --git a/Content.Shared/GameObjects/Components/Mobs/State/SharedMobStateManagerComponent.cs b/Content.Shared/GameObjects/Components/Mobs/State/SharedMobStateManagerComponent.cs deleted file mode 100644 index 5bc6391d48..0000000000 --- a/Content.Shared/GameObjects/Components/Mobs/State/SharedMobStateManagerComponent.cs +++ /dev/null @@ -1,122 +0,0 @@ -using System; -using System.Collections.Generic; -using Content.Shared.GameObjects.Components.Damage; -using Content.Shared.GameObjects.EntitySystems; -using Robust.Shared.GameObjects; -using Robust.Shared.Serialization; - -namespace Content.Shared.GameObjects.Components.Mobs.State -{ - /// - /// When attacked to an , this component will - /// handle critical and death behaviors for mobs. - /// Additionally, it handles sending effects to clients - /// (such as blur effect for unconsciousness) and managing the health HUD. - /// - public abstract class SharedMobStateManagerComponent : Component, IOnHealthChangedBehavior, IActionBlocker - { - public override string Name => "MobStateManager"; - - public override uint? NetID => ContentNetIDs.MOB_STATE_MANAGER; - - protected abstract IReadOnlyDictionary Behavior { get; } - - public virtual IMobState CurrentMobState { get; protected set; } - - public virtual DamageState CurrentDamageState { get; protected set; } - - public override void Initialize() - { - base.Initialize(); - - CurrentDamageState = DamageState.Alive; - CurrentMobState = Behavior[CurrentDamageState]; - CurrentMobState.EnterState(Owner); - CurrentMobState.UpdateState(Owner); - } - - bool IActionBlocker.CanInteract() - { - return CurrentMobState.CanInteract(); - } - - bool IActionBlocker.CanMove() - { - return CurrentMobState.CanMove(); - } - - bool IActionBlocker.CanUse() - { - return CurrentMobState.CanUse(); - } - - bool IActionBlocker.CanThrow() - { - return CurrentMobState.CanThrow(); - } - - bool IActionBlocker.CanSpeak() - { - return CurrentMobState.CanSpeak(); - } - - bool IActionBlocker.CanDrop() - { - return CurrentMobState.CanDrop(); - } - - bool IActionBlocker.CanPickup() - { - return CurrentMobState.CanPickup(); - } - - bool IActionBlocker.CanEmote() - { - return CurrentMobState.CanEmote(); - } - - bool IActionBlocker.CanAttack() - { - return CurrentMobState.CanAttack(); - } - - bool IActionBlocker.CanEquip() - { - return CurrentMobState.CanEquip(); - } - - bool IActionBlocker.CanUnequip() - { - return CurrentMobState.CanUnequip(); - } - - bool IActionBlocker.CanChangeDirection() - { - return CurrentMobState.CanChangeDirection(); - } - - public void OnHealthChanged(HealthChangedEventArgs e) - { - if (e.Damageable.CurrentState != CurrentDamageState) - { - CurrentDamageState = e.Damageable.CurrentState; - CurrentMobState.ExitState(Owner); - CurrentMobState = Behavior[CurrentDamageState]; - CurrentMobState.EnterState(Owner); - } - - CurrentMobState.UpdateState(Owner); - } - } - - [Serializable, NetSerializable] - public class MobStateManagerComponentState : ComponentState - { - public readonly DamageState DamageState; - - public MobStateManagerComponentState(DamageState damageState) : base(ContentNetIDs.MOB_STATE_MANAGER) - { - DamageState = damageState; - } - } -} diff --git a/Content.Shared/GameObjects/Components/Mobs/State/SharedNormalMobState.cs b/Content.Shared/GameObjects/Components/Mobs/State/SharedNormalMobState.cs new file mode 100644 index 0000000000..08fbc9f044 --- /dev/null +++ b/Content.Shared/GameObjects/Components/Mobs/State/SharedNormalMobState.cs @@ -0,0 +1,70 @@ +namespace Content.Shared.GameObjects.Components.Mobs.State +{ + /// + /// The standard state an entity is in; no negative effects. + /// + public abstract class SharedNormalMobState : BaseMobState + { + protected override DamageState DamageState => DamageState.Alive; + + public override bool CanInteract() + { + return true; + } + + public override bool CanMove() + { + return true; + } + + public override bool CanUse() + { + return true; + } + + public override bool CanThrow() + { + return true; + } + + public override bool CanSpeak() + { + return true; + } + + public override bool CanDrop() + { + return true; + } + + public override bool CanPickup() + { + return true; + } + + public override bool CanEmote() + { + return true; + } + + public override bool CanAttack() + { + return true; + } + + public override bool CanEquip() + { + return true; + } + + public override bool CanUnequip() + { + return true; + } + + public override bool CanChangeDirection() + { + return true; + } + } +} diff --git a/Content.Shared/GameObjects/Components/Mobs/State/SharedNormalState.cs b/Content.Shared/GameObjects/Components/Mobs/State/SharedNormalState.cs deleted file mode 100644 index 6b68620834..0000000000 --- a/Content.Shared/GameObjects/Components/Mobs/State/SharedNormalState.cs +++ /dev/null @@ -1,76 +0,0 @@ -using Robust.Shared.Interfaces.GameObjects; - -namespace Content.Shared.GameObjects.Components.Mobs.State -{ - /// - /// The standard state an entity is in; no negative effects. - /// - public abstract class SharedNormalState : IMobState - { - public abstract void EnterState(IEntity entity); - - public abstract void ExitState(IEntity entity); - - public abstract void UpdateState(IEntity entity); - - public bool CanInteract() - { - return true; - } - - public bool CanMove() - { - return true; - } - - public bool CanUse() - { - return true; - } - - public bool CanThrow() - { - return true; - } - - public bool CanSpeak() - { - return true; - } - - public bool CanDrop() - { - return true; - } - - public bool CanPickup() - { - return true; - } - - public bool CanEmote() - { - return true; - } - - public bool CanAttack() - { - return true; - } - - public bool CanEquip() - { - return true; - } - - public bool CanUnequip() - { - return true; - } - - public bool CanChangeDirection() - { - return true; - } - } -} diff --git a/Content.Shared/GameObjects/ContentNetIDs.cs b/Content.Shared/GameObjects/ContentNetIDs.cs index 7d4905c7f0..d0a17dc3c0 100644 --- a/Content.Shared/GameObjects/ContentNetIDs.cs +++ b/Content.Shared/GameObjects/ContentNetIDs.cs @@ -73,7 +73,7 @@ public const uint BATTERY_BARREL = 1067; public const uint SUSPICION_ROLE = 1068; public const uint ROTATION = 1069; - public const uint MOB_STATE_MANAGER = 1070; + public const uint MOB_STATE = 1070; public const uint SLIP = 1071; public const uint SPACE_VILLAIN_ARCADE = 1072; public const uint BLOCKGAME_ARCADE = 1073; @@ -86,6 +86,7 @@ public const uint SINGULARITY = 1080; public const uint CHARACTERINFO = 1081; public const uint REAGENT_GRINDER = 1082; + public const uint DAMAGEABLE = 1083; // Net IDs for integration tests. public const uint PREDICTION_TEST = 10001; diff --git a/Content.Shared/GameObjects/EntitySystems/ActSystem.cs b/Content.Shared/GameObjects/EntitySystems/ActSystem.cs index 27ac9d68f5..d3512bbda5 100644 --- a/Content.Shared/GameObjects/EntitySystems/ActSystem.cs +++ b/Content.Shared/GameObjects/EntitySystems/ActSystem.cs @@ -8,7 +8,7 @@ using Robust.Shared.Map; namespace Content.Shared.GameObjects.EntitySystems { /// - /// This interface gives components behavior on getting destoyed. + /// This interface gives components behavior on getting destroyed. /// public interface IDestroyAct { @@ -21,7 +21,6 @@ namespace Content.Shared.GameObjects.EntitySystems public class DestructionEventArgs : EventArgs { public IEntity Owner { get; set; } - public bool IsSpawnWreck { get; set; } } public class BreakageEventArgs : EventArgs @@ -55,19 +54,20 @@ namespace Content.Shared.GameObjects.EntitySystems [UsedImplicitly] public sealed class ActSystem : EntitySystem { - public void HandleDestruction(IEntity owner, bool isWreck) + public void HandleDestruction(IEntity owner) { var eventArgs = new DestructionEventArgs { - Owner = owner, - IsSpawnWreck = isWreck + Owner = owner }; + var destroyActs = owner.GetAllComponents().ToList(); foreach (var destroyAct in destroyActs) { destroyAct.OnDestroy(eventArgs); } + owner.Delete(); } diff --git a/Resources/Maps/saltern.yml b/Resources/Maps/saltern.yml index 5438b5a7f2..d1f49cabfe 100644 --- a/Resources/Maps/saltern.yml +++ b/Resources/Maps/saltern.yml @@ -554,8 +554,6 @@ entities: pos: 18.296293,-18.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 64 type: Drill components: @@ -891,8 +889,6 @@ entities: pos: 24.996767,-0.60842 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 110 type: SignSomethingOld components: @@ -900,8 +896,6 @@ entities: pos: 17.158585,-23.619913 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 111 type: SignAtmos components: @@ -909,8 +903,6 @@ entities: pos: 31.498556,7.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 112 type: Paper components: @@ -1110,8 +1102,6 @@ entities: pos: 30.305984,-0.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 134 type: Poweredlight components: @@ -1159,24 +1149,18 @@ entities: pos: 33.498077,11.399912 rot: 1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 138 type: SignDirectionalEng components: - parent: 855 pos: 5.987236,6.2578936 type: Transform - - deadThreshold: 100 - type: Destructible - uid: 139 type: SignBridge components: - parent: 855 pos: 5.6507263,22.5 type: Transform - - deadThreshold: 100 - type: Destructible - uid: 140 type: Poweredlight components: @@ -1209,8 +1193,6 @@ entities: pos: -5.506548,-18.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 143 type: SignMedical components: @@ -1218,8 +1200,6 @@ entities: pos: 6.500677,2.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 144 type: SignGravity components: @@ -1227,8 +1207,6 @@ entities: pos: 48.325787,-1.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 145 type: SignToolStorage components: @@ -1236,8 +1214,6 @@ entities: pos: -26.694574,6.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 146 type: Poweredlight components: @@ -1258,8 +1234,6 @@ entities: pos: 10.691145,6.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 148 type: SignChem components: @@ -1267,8 +1241,6 @@ entities: pos: 14.317627,-3.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 149 type: SignCargoDock components: @@ -1276,8 +1248,6 @@ entities: pos: 18.501179,14.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 150 type: solid_wall components: @@ -1313,8 +1283,6 @@ entities: pos: -20.488556,6.5 rot: 1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 155 type: SignDirectionalSupply components: @@ -1322,8 +1290,6 @@ entities: pos: -25.704908,7.5 rot: 1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 156 type: AirlockMaint components: @@ -1356,8 +1322,6 @@ entities: - parent: 855 pos: 17.5,-0.5 type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalBend: type: Robust.Server.GameObjects.Components.Container.Container @@ -1369,8 +1333,6 @@ entities: pos: 17.5,-1.5 rot: 3.141592653589793 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalBend: type: Robust.Server.GameObjects.Components.Container.Container @@ -1381,8 +1343,6 @@ entities: - parent: 855 pos: 16.5,-1.5 type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -1403,8 +1363,6 @@ entities: pos: 34.5,3.5 rot: 3.141592653589793 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalJunction: type: Robust.Server.GameObjects.Components.Container.Container @@ -1416,8 +1374,6 @@ entities: pos: 24.5,3.5 rot: 3.141592653589793 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalJunction: type: Robust.Server.GameObjects.Components.Container.Container @@ -1429,8 +1385,6 @@ entities: pos: 12.5,-1.5 rot: 1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalJunction: type: Robust.Server.GameObjects.Components.Container.Container @@ -1442,8 +1396,6 @@ entities: pos: 12.5,3.5 rot: 3.141592653589793 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalJunction: type: Robust.Server.GameObjects.Components.Container.Container @@ -1455,8 +1407,6 @@ entities: pos: 2.5,17.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalJunction: type: Robust.Server.GameObjects.Components.Container.Container @@ -1468,8 +1418,6 @@ entities: pos: 2.5,11.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalJunction: type: Robust.Server.GameObjects.Components.Container.Container @@ -1481,8 +1429,6 @@ entities: pos: -10.5,-15.5 rot: 3.141592653589793 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalJunction: type: Robust.Server.GameObjects.Components.Container.Container @@ -1494,8 +1440,6 @@ entities: pos: -17.5,-15.5 rot: 1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalJunction: type: Robust.Server.GameObjects.Components.Container.Container @@ -1507,8 +1451,6 @@ entities: pos: -23.5,-10.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalJunction: type: Robust.Server.GameObjects.Components.Container.Container @@ -1519,8 +1461,6 @@ entities: - parent: 855 pos: -27.5,-10.5 type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalJunction: type: Robust.Server.GameObjects.Components.Container.Container @@ -1532,8 +1472,6 @@ entities: pos: -28.5,3.5 rot: 3.141592653589793 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalJunction: type: Robust.Server.GameObjects.Components.Container.Container @@ -1545,8 +1483,6 @@ entities: pos: -22.5,3.5 rot: 3.141592653589793 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalJunction: type: Robust.Server.GameObjects.Components.Container.Container @@ -1558,8 +1494,6 @@ entities: pos: -12.5,3.5 rot: 3.141592653589793 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalJunction: type: Robust.Server.GameObjects.Components.Container.Container @@ -1571,8 +1505,6 @@ entities: pos: 0.5,3.5 rot: 3.141592653589793 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalJunction: type: Robust.Server.GameObjects.Components.Container.Container @@ -1584,8 +1516,6 @@ entities: pos: 2.5,3.5 rot: 3.141592653589793 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalJunction: type: Robust.Server.GameObjects.Components.Container.Container @@ -1597,8 +1527,6 @@ entities: pos: 3.5,3.5 rot: 3.141592653589793 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalJunction: type: Robust.Server.GameObjects.Components.Container.Container @@ -1610,8 +1538,6 @@ entities: pos: -17.5,-14.5 rot: 1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -1623,8 +1549,6 @@ entities: pos: -17.5,-13.5 rot: 1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -1636,8 +1560,6 @@ entities: pos: -17.5,-12.5 rot: 1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -1649,8 +1571,6 @@ entities: pos: -17.5,-11.5 rot: 1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -1662,8 +1582,6 @@ entities: pos: -17.5,-22.5 rot: 1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalEntry: type: Robust.Server.GameObjects.Components.Container.Container @@ -1677,8 +1595,6 @@ entities: type: Transform - entryDelay: 0 type: DisposalUnit - - deadThreshold: 100 - type: Destructible - containers: DisposalUnit: type: Robust.Server.GameObjects.Components.Container.Container @@ -1689,8 +1605,6 @@ entities: - parent: 855 pos: -16.5,-15.5 type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -1702,8 +1616,6 @@ entities: pos: -28.5,5.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -1715,8 +1627,6 @@ entities: pos: -28.5,6.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -1728,8 +1638,6 @@ entities: pos: -28.5,7.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -1741,8 +1649,6 @@ entities: pos: -28.5,8.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -1754,8 +1660,6 @@ entities: pos: -28.5,9.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -1776,8 +1680,6 @@ entities: type: Transform - entryDelay: 0 type: DisposalUnit - - deadThreshold: 100 - type: Destructible - containers: DisposalUnit: type: Robust.Server.GameObjects.Components.Container.Container @@ -1789,8 +1691,6 @@ entities: pos: -8.5,-15.5 rot: 3.141592653589793 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalBend: type: Robust.Server.GameObjects.Components.Container.Container @@ -1802,8 +1702,6 @@ entities: pos: -17.5,-16.5 rot: 1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -1814,8 +1712,6 @@ entities: - parent: 855 pos: 0.5,17.5 type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -1826,8 +1722,6 @@ entities: - parent: 855 pos: -0.5,17.5 type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -1838,8 +1732,6 @@ entities: - parent: 855 pos: -1.5,17.5 type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -1850,8 +1742,6 @@ entities: - parent: 855 pos: -2.5,17.5 type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -1862,8 +1752,6 @@ entities: - parent: 855 pos: -3.5,17.5 type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -1874,8 +1762,6 @@ entities: - parent: 855 pos: -4.5,17.5 type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -1886,8 +1772,6 @@ entities: - parent: 855 pos: -5.5,17.5 type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalEntry: type: Robust.Server.GameObjects.Components.Container.Container @@ -1901,8 +1785,6 @@ entities: type: Transform - entryDelay: 0 type: DisposalUnit - - deadThreshold: 100 - type: Destructible - containers: DisposalUnit: type: Robust.Server.GameObjects.Components.Container.Container @@ -1914,8 +1796,6 @@ entities: pos: -17.5,-17.5 rot: 1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -1927,8 +1807,6 @@ entities: pos: 4.5,11.5 rot: 3.141592653589793 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -1940,8 +1818,6 @@ entities: pos: 5.5,11.5 rot: 3.141592653589793 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -1953,8 +1829,6 @@ entities: pos: 6.5,11.5 rot: 3.141592653589793 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalEntry: type: Robust.Server.GameObjects.Components.Container.Container @@ -1968,8 +1842,6 @@ entities: type: Transform - entryDelay: 0 type: DisposalUnit - - deadThreshold: 100 - type: Destructible - containers: DisposalUnit: type: Robust.Server.GameObjects.Components.Container.Container @@ -1981,8 +1853,6 @@ entities: pos: -17.5,-18.5 rot: 1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -1994,8 +1864,6 @@ entities: pos: 24.5,5.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -2007,8 +1875,6 @@ entities: pos: 24.5,6.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -2020,8 +1886,6 @@ entities: pos: 24.5,7.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -2033,8 +1897,6 @@ entities: pos: 24.5,8.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalEntry: type: Robust.Server.GameObjects.Components.Container.Container @@ -2048,8 +1910,6 @@ entities: type: Transform - entryDelay: 0 type: DisposalUnit - - deadThreshold: 100 - type: Destructible - containers: DisposalUnit: type: Robust.Server.GameObjects.Components.Container.Container @@ -2060,8 +1920,6 @@ entities: - parent: 855 pos: 13.5,-1.5 type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -2072,8 +1930,6 @@ entities: - parent: 855 pos: 14.5,-1.5 type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -2084,8 +1940,6 @@ entities: - parent: 855 pos: 15.5,-1.5 type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -2097,8 +1951,6 @@ entities: pos: -17.5,-19.5 rot: 1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -2116,8 +1968,6 @@ entities: pos: -17.5,-20.5 rot: 1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -2129,8 +1979,6 @@ entities: pos: 34.5,1.5 rot: 1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -2142,8 +1990,6 @@ entities: pos: 34.5,0.5 rot: 1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -2155,8 +2001,6 @@ entities: pos: 34.5,-0.5 rot: 1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -2168,8 +2012,6 @@ entities: pos: 34.5,-1.5 rot: 1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -2181,8 +2023,6 @@ entities: pos: 34.5,-2.5 rot: 1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -2194,8 +2034,6 @@ entities: pos: 34.5,-3.5 rot: 1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -2207,8 +2045,6 @@ entities: pos: 34.5,-4.5 rot: 1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalEntry: type: Robust.Server.GameObjects.Components.Container.Container @@ -2222,8 +2058,6 @@ entities: type: Transform - entryDelay: 0 type: DisposalUnit - - deadThreshold: 100 - type: Destructible - containers: DisposalUnit: type: Robust.Server.GameObjects.Components.Container.Container @@ -2235,8 +2069,6 @@ entities: pos: 30.5,3.5 rot: 3.141592653589793 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -2248,8 +2080,6 @@ entities: pos: 36.5,3.5 rot: 3.141592653589793 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -2261,8 +2091,6 @@ entities: pos: 35.5,3.5 rot: 3.141592653589793 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -2274,8 +2102,6 @@ entities: pos: 34.5,2.5 rot: 1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -2287,8 +2113,6 @@ entities: pos: 33.5,3.5 rot: 3.141592653589793 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -2300,8 +2124,6 @@ entities: pos: 32.5,3.5 rot: 3.141592653589793 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -2313,8 +2135,6 @@ entities: pos: 31.5,3.5 rot: 3.141592653589793 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -2326,8 +2146,6 @@ entities: pos: 37.5,3.5 rot: 3.141592653589793 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalBend: type: Robust.Server.GameObjects.Components.Container.Container @@ -2339,8 +2157,6 @@ entities: pos: 37.5,4.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -2352,8 +2168,6 @@ entities: pos: 37.5,5.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -2365,8 +2179,6 @@ entities: pos: 37.5,6.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalEntry: type: Robust.Server.GameObjects.Components.Container.Container @@ -2380,8 +2192,6 @@ entities: type: Transform - entryDelay: 0 type: DisposalUnit - - deadThreshold: 100 - type: Destructible - containers: DisposalUnit: type: Robust.Server.GameObjects.Components.Container.Container @@ -2393,8 +2203,6 @@ entities: pos: 2.5,29.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalBend: type: Robust.Server.GameObjects.Components.Container.Container @@ -2406,8 +2214,6 @@ entities: pos: 2.5,5.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -2419,8 +2225,6 @@ entities: pos: 2.5,6.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -2432,8 +2236,6 @@ entities: pos: 2.5,7.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -2445,8 +2247,6 @@ entities: pos: 2.5,8.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -2458,8 +2258,6 @@ entities: pos: 2.5,9.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -2471,8 +2269,6 @@ entities: pos: 2.5,10.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -2484,8 +2280,6 @@ entities: pos: 3.5,11.5 rot: 3.141592653589793 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -2497,8 +2291,6 @@ entities: pos: 2.5,12.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -2510,8 +2302,6 @@ entities: pos: 2.5,13.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -2523,8 +2313,6 @@ entities: pos: 2.5,14.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -2536,8 +2324,6 @@ entities: pos: 2.5,15.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -2549,8 +2335,6 @@ entities: pos: 2.5,16.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -2561,8 +2345,6 @@ entities: - parent: 855 pos: 1.5,17.5 type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -2574,8 +2356,6 @@ entities: pos: 2.5,18.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -2587,8 +2367,6 @@ entities: pos: 2.5,19.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -2600,8 +2378,6 @@ entities: pos: 2.5,20.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -2613,8 +2389,6 @@ entities: pos: 2.5,21.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -2626,8 +2400,6 @@ entities: pos: 2.5,22.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -2639,8 +2411,6 @@ entities: pos: 2.5,23.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -2652,8 +2422,6 @@ entities: pos: 2.5,24.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -2665,8 +2433,6 @@ entities: pos: 2.5,25.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -2678,8 +2444,6 @@ entities: pos: 2.5,26.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -2691,8 +2455,6 @@ entities: pos: 2.5,27.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -2711,8 +2473,6 @@ entities: pos: 2.5,28.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -2724,8 +2484,6 @@ entities: pos: -17.5,-21.5 rot: 1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -2736,8 +2494,6 @@ entities: - parent: 855 pos: 1.5,29.5 type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -2748,8 +2504,6 @@ entities: - parent: 855 pos: 0.5,29.5 type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -2760,8 +2514,6 @@ entities: - parent: 855 pos: -0.5,29.5 type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -2772,8 +2524,6 @@ entities: - parent: 855 pos: -1.5,29.5 type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -2784,8 +2534,6 @@ entities: - parent: 855 pos: -2.5,29.5 type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalEntry: type: Robust.Server.GameObjects.Components.Container.Container @@ -2799,8 +2547,6 @@ entities: type: Transform - entryDelay: 0 type: DisposalUnit - - deadThreshold: 100 - type: Destructible - containers: DisposalUnit: type: Robust.Server.GameObjects.Components.Container.Container @@ -2811,8 +2557,6 @@ entities: - parent: 855 pos: -18.5,-10.5 type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -2824,8 +2568,6 @@ entities: pos: 3.5,-8.5 rot: 1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -2837,8 +2579,6 @@ entities: pos: 3.5,-7.5 rot: 1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -2850,8 +2590,6 @@ entities: pos: 3.5,-6.5 rot: 1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -2863,8 +2601,6 @@ entities: pos: 3.5,-5.5 rot: 1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -2876,8 +2612,6 @@ entities: pos: 3.5,-4.5 rot: 1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -2889,8 +2623,6 @@ entities: pos: 3.5,-3.5 rot: 1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -2902,8 +2634,6 @@ entities: pos: 3.5,-2.5 rot: 1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -2915,8 +2645,6 @@ entities: pos: 3.5,-1.5 rot: 1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -2928,8 +2656,6 @@ entities: pos: 3.5,-0.5 rot: 1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -2941,8 +2667,6 @@ entities: pos: 3.5,0.5 rot: 1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -2954,8 +2678,6 @@ entities: pos: 3.5,1.5 rot: 1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -2967,8 +2689,6 @@ entities: pos: 3.5,2.5 rot: 1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -2980,8 +2700,6 @@ entities: pos: 3.5,-10.5 rot: 1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -2993,8 +2711,6 @@ entities: pos: 3.5,-11.5 rot: 1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalBend: type: Robust.Server.GameObjects.Components.Container.Container @@ -3006,8 +2722,6 @@ entities: pos: 5.5,-11.5 rot: 3.141592653589793 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -3019,8 +2733,6 @@ entities: pos: 6.5,-11.5 rot: 3.141592653589793 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -3032,8 +2744,6 @@ entities: pos: 7.5,-11.5 rot: 3.141592653589793 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -3045,8 +2755,6 @@ entities: pos: 8.5,-11.5 rot: 3.141592653589793 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -3058,8 +2766,6 @@ entities: pos: 4.5,-11.5 rot: 3.141592653589793 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -3071,8 +2777,6 @@ entities: pos: 9.5,-11.5 rot: 3.141592653589793 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -3084,8 +2788,6 @@ entities: pos: 10.5,-11.5 rot: 3.141592653589793 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -3097,8 +2799,6 @@ entities: pos: 11.5,-11.5 rot: 3.141592653589793 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalEntry: type: Robust.Server.GameObjects.Components.Container.Container @@ -3112,8 +2812,6 @@ entities: type: Transform - entryDelay: 0 type: DisposalUnit - - deadThreshold: 100 - type: Destructible - containers: DisposalUnit: type: Robust.Server.GameObjects.Components.Container.Container @@ -3124,8 +2822,6 @@ entities: - parent: 855 pos: -19.5,-10.5 type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -3137,8 +2833,6 @@ entities: pos: 12.5,1.5 rot: 1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -3150,8 +2844,6 @@ entities: pos: 12.5,0.5 rot: 1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -3163,8 +2855,6 @@ entities: pos: 12.5,-0.5 rot: 1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -3176,8 +2866,6 @@ entities: pos: 12.5,-2.5 rot: 1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalEntry: type: Robust.Server.GameObjects.Components.Container.Container @@ -3191,8 +2879,6 @@ entities: type: Transform - entryDelay: 0 type: DisposalUnit - - deadThreshold: 100 - type: Destructible - containers: DisposalUnit: type: Robust.Server.GameObjects.Components.Container.Container @@ -3218,8 +2904,6 @@ entities: pos: 5.5,3.5 rot: 3.141592653589793 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -3231,8 +2915,6 @@ entities: pos: 6.5,3.5 rot: 3.141592653589793 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -3244,8 +2926,6 @@ entities: pos: 7.5,3.5 rot: 3.141592653589793 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -3257,8 +2937,6 @@ entities: pos: 8.5,3.5 rot: 3.141592653589793 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -3270,8 +2948,6 @@ entities: pos: 9.5,3.5 rot: 3.141592653589793 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -3283,8 +2959,6 @@ entities: pos: 10.5,3.5 rot: 3.141592653589793 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -3296,8 +2970,6 @@ entities: pos: 11.5,3.5 rot: 3.141592653589793 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -3309,8 +2981,6 @@ entities: pos: 12.5,2.5 rot: 1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -3322,8 +2992,6 @@ entities: pos: 13.5,3.5 rot: 3.141592653589793 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -3335,8 +3003,6 @@ entities: pos: 14.5,3.5 rot: 3.141592653589793 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -3348,8 +3014,6 @@ entities: pos: 15.5,3.5 rot: 3.141592653589793 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -3361,8 +3025,6 @@ entities: pos: 16.5,3.5 rot: 3.141592653589793 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -3374,8 +3036,6 @@ entities: pos: 17.5,3.5 rot: 3.141592653589793 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -3387,8 +3047,6 @@ entities: pos: 18.5,3.5 rot: 3.141592653589793 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -3400,8 +3058,6 @@ entities: pos: 19.5,3.5 rot: 3.141592653589793 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -3413,8 +3069,6 @@ entities: pos: 20.5,3.5 rot: 3.141592653589793 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -3426,8 +3080,6 @@ entities: pos: 21.5,3.5 rot: 3.141592653589793 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -3439,8 +3091,6 @@ entities: pos: 22.5,3.5 rot: 3.141592653589793 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -3452,8 +3102,6 @@ entities: pos: 23.5,3.5 rot: 3.141592653589793 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -3465,8 +3113,6 @@ entities: pos: 24.5,4.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -3487,8 +3133,6 @@ entities: pos: 26.5,3.5 rot: 3.141592653589793 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -3500,8 +3144,6 @@ entities: pos: 27.5,3.5 rot: 3.141592653589793 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -3513,8 +3155,6 @@ entities: pos: 28.5,3.5 rot: 3.141592653589793 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -3526,8 +3166,6 @@ entities: pos: 29.5,3.5 rot: 3.141592653589793 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -3539,8 +3177,6 @@ entities: pos: 4.5,3.5 rot: 3.141592653589793 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -3552,8 +3188,6 @@ entities: pos: 3.5,-9.5 rot: 1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -3565,8 +3199,6 @@ entities: pos: 2.5,4.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -3577,8 +3209,6 @@ entities: - parent: 855 pos: -20.5,-10.5 type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -3590,8 +3220,6 @@ entities: pos: 0.5,1.5 rot: 1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalEntry: type: Robust.Server.GameObjects.Components.Container.Container @@ -3605,8 +3233,6 @@ entities: type: Transform - entryDelay: 0 type: DisposalUnit - - deadThreshold: 100 - type: Destructible - containers: DisposalUnit: type: Robust.Server.GameObjects.Components.Container.Container @@ -3618,8 +3244,6 @@ entities: pos: -27.5,-9.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -3631,8 +3255,6 @@ entities: pos: -27.5,-8.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalEntry: type: Robust.Server.GameObjects.Components.Container.Container @@ -3643,8 +3265,6 @@ entities: - parent: 855 pos: -21.5,-10.5 type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -3656,8 +3276,6 @@ entities: pos: -12.5,2.5 rot: 1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -3669,8 +3287,6 @@ entities: pos: -12.5,1.5 rot: 1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalEntry: type: Robust.Server.GameObjects.Components.Container.Container @@ -3681,8 +3297,6 @@ entities: - parent: 855 pos: -22.5,-10.5 type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -3694,8 +3308,6 @@ entities: pos: -23.5,-12.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -3707,8 +3319,6 @@ entities: pos: -23.5,-11.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -3719,8 +3329,6 @@ entities: - parent: 855 pos: -32.5,3.5 type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalBend: type: Robust.Server.GameObjects.Components.Container.Container @@ -3732,8 +3340,6 @@ entities: pos: -22.5,4.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -3745,8 +3351,6 @@ entities: pos: -22.5,5.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -3758,8 +3362,6 @@ entities: pos: -22.5,6.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalEntry: type: Robust.Server.GameObjects.Components.Container.Container @@ -3771,8 +3373,6 @@ entities: pos: -17.5,-10.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalBend: type: Robust.Server.GameObjects.Components.Container.Container @@ -3784,8 +3384,6 @@ entities: pos: -7.5,3.5 rot: 3.141592653589793 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -3797,8 +3395,6 @@ entities: pos: -6.5,3.5 rot: 3.141592653589793 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -3810,8 +3406,6 @@ entities: pos: -5.5,3.5 rot: 3.141592653589793 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -3823,8 +3417,6 @@ entities: pos: -4.5,3.5 rot: 3.141592653589793 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -3836,8 +3428,6 @@ entities: pos: -3.5,3.5 rot: 3.141592653589793 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -3849,8 +3439,6 @@ entities: pos: -2.5,3.5 rot: 3.141592653589793 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -3862,8 +3450,6 @@ entities: pos: -1.5,3.5 rot: 3.141592653589793 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -3875,8 +3461,6 @@ entities: pos: -0.5,3.5 rot: 3.141592653589793 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -3888,8 +3472,6 @@ entities: pos: 0.5,2.5 rot: 1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -3901,8 +3483,6 @@ entities: pos: 1.5,3.5 rot: 3.141592653589793 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -3914,8 +3494,6 @@ entities: pos: -8.5,3.5 rot: 3.141592653589793 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -3927,8 +3505,6 @@ entities: pos: -9.5,3.5 rot: 3.141592653589793 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -3940,8 +3516,6 @@ entities: pos: -10.5,3.5 rot: 3.141592653589793 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -3953,8 +3527,6 @@ entities: pos: -11.5,3.5 rot: 3.141592653589793 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -3968,8 +3540,6 @@ entities: type: Transform - entryDelay: 0 type: DisposalUnit - - deadThreshold: 100 - type: Destructible - containers: DisposalUnit: type: Robust.Server.GameObjects.Components.Container.Container @@ -3981,8 +3551,6 @@ entities: pos: -13.5,3.5 rot: 3.141592653589793 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -3994,8 +3562,6 @@ entities: pos: -14.5,3.5 rot: 3.141592653589793 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -4007,8 +3573,6 @@ entities: pos: -15.5,3.5 rot: 3.141592653589793 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -4020,8 +3584,6 @@ entities: pos: -16.5,3.5 rot: 3.141592653589793 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -4033,8 +3595,6 @@ entities: pos: -17.5,3.5 rot: 3.141592653589793 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -4046,8 +3606,6 @@ entities: pos: -18.5,3.5 rot: 3.141592653589793 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -4059,8 +3617,6 @@ entities: pos: -19.5,3.5 rot: 3.141592653589793 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -4072,8 +3628,6 @@ entities: pos: -20.5,3.5 rot: 3.141592653589793 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -4085,8 +3639,6 @@ entities: pos: -21.5,3.5 rot: 3.141592653589793 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -4100,8 +3652,6 @@ entities: type: Transform - entryDelay: 0 type: DisposalUnit - - deadThreshold: 100 - type: Destructible - containers: DisposalUnit: type: Robust.Server.GameObjects.Components.Container.Container @@ -4113,8 +3663,6 @@ entities: pos: -23.5,3.5 rot: 3.141592653589793 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -4126,8 +3674,6 @@ entities: pos: -24.5,3.5 rot: 3.141592653589793 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -4139,8 +3685,6 @@ entities: pos: -25.5,3.5 rot: 3.141592653589793 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -4152,8 +3696,6 @@ entities: pos: -26.5,3.5 rot: 3.141592653589793 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -4165,8 +3707,6 @@ entities: pos: -27.5,3.5 rot: 3.141592653589793 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -4178,8 +3718,6 @@ entities: pos: -28.5,4.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -4191,8 +3729,6 @@ entities: pos: -29.5,3.5 rot: 3.141592653589793 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -4204,8 +3740,6 @@ entities: pos: -30.5,3.5 rot: 3.141592653589793 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -4217,8 +3751,6 @@ entities: pos: -31.5,3.5 rot: 3.141592653589793 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -4230,8 +3762,6 @@ entities: pos: -32.5,2.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -4243,8 +3773,6 @@ entities: pos: -32.5,1.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -4256,8 +3784,6 @@ entities: pos: -32.5,0.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -4269,8 +3795,6 @@ entities: pos: -32.5,-0.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -4282,8 +3806,6 @@ entities: pos: -32.5,-1.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -4295,8 +3817,6 @@ entities: pos: -32.5,-2.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -4308,8 +3828,6 @@ entities: pos: -32.5,-3.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -4321,8 +3839,6 @@ entities: pos: -32.5,-4.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -4334,8 +3850,6 @@ entities: pos: -32.5,-5.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -4347,8 +3861,6 @@ entities: pos: -32.5,-6.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -4360,8 +3872,6 @@ entities: pos: -32.5,-7.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -4373,8 +3883,6 @@ entities: pos: -32.5,-8.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -4386,8 +3894,6 @@ entities: pos: -32.5,-9.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -4399,8 +3905,6 @@ entities: pos: -32.5,-10.5 rot: 1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalBend: type: Robust.Server.GameObjects.Components.Container.Container @@ -4412,8 +3916,6 @@ entities: pos: -31.5,-10.5 rot: 3.141592653589793 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -4425,8 +3927,6 @@ entities: pos: -30.5,-10.5 rot: 3.141592653589793 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -4438,8 +3938,6 @@ entities: pos: -29.5,-10.5 rot: 3.141592653589793 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -4451,8 +3949,6 @@ entities: pos: -28.5,-10.5 rot: 3.141592653589793 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -4466,8 +3962,6 @@ entities: type: Transform - entryDelay: 0 type: DisposalUnit - - deadThreshold: 100 - type: Destructible - containers: DisposalUnit: type: Robust.Server.GameObjects.Components.Container.Container @@ -4479,8 +3973,6 @@ entities: pos: -26.5,-10.5 rot: 3.141592653589793 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -4492,8 +3984,6 @@ entities: pos: -25.5,-10.5 rot: 3.141592653589793 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -4505,8 +3995,6 @@ entities: pos: -24.5,-10.5 rot: 3.141592653589793 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -4520,8 +4008,6 @@ entities: type: Transform - entryDelay: 0 type: DisposalUnit - - deadThreshold: 100 - type: Destructible - containers: DisposalUnit: type: Robust.Server.GameObjects.Components.Container.Container @@ -6118,8 +5604,6 @@ entities: pos: -4.5,4.5 rot: 3.141592653589793 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 611 type: AirlockMaintEngiLocked components: @@ -8203,8 +7687,6 @@ entities: pos: -29.5,11.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalEntry: type: Robust.Server.GameObjects.Components.Container.Container @@ -8216,8 +7698,6 @@ entities: pos: -29.5,10.5 rot: 1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalBend: type: Robust.Server.GameObjects.Components.Container.Container @@ -8229,8 +7709,6 @@ entities: pos: -28.5,10.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalBend: type: Robust.Server.GameObjects.Components.Container.Container @@ -8241,8 +7719,6 @@ entities: - parent: 855 pos: -8.5,-14.5 type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalBend: type: Robust.Server.GameObjects.Components.Container.Container @@ -8254,8 +7730,6 @@ entities: pos: -7.5,-14.5 rot: 3.141592653589793 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -8267,8 +7741,6 @@ entities: pos: -6.5,-14.5 rot: 3.141592653589793 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -8280,8 +7752,6 @@ entities: pos: -5.5,-14.5 rot: 3.141592653589793 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalEntry: type: Robust.Server.GameObjects.Components.Container.Container @@ -8295,8 +7765,6 @@ entities: type: Transform - entryDelay: 0 type: DisposalUnit - - deadThreshold: 100 - type: Destructible - containers: DisposalUnit: type: Robust.Server.GameObjects.Components.Container.Container @@ -8308,8 +7776,6 @@ entities: pos: -9.5,-15.5 rot: 3.141592653589793 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -8320,8 +7786,6 @@ entities: - parent: 855 pos: -15.5,-15.5 type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -8332,8 +7796,6 @@ entities: - parent: 855 pos: -13.5,-15.5 type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -8344,8 +7806,6 @@ entities: - parent: 855 pos: -14.5,-15.5 type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -8356,8 +7816,6 @@ entities: - parent: 855 pos: -12.5,-15.5 type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -8368,8 +7826,6 @@ entities: - parent: 855 pos: -11.5,-15.5 type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -8381,8 +7837,6 @@ entities: pos: -10.5,-16.5 rot: 1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -19899,8 +19353,6 @@ entities: pos: 23.462582,6.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 938 type: solid_wall components: @@ -19929,8 +19381,6 @@ entities: pos: 5.641159,-12.7475605 rot: 1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 942 type: Brutepack components: @@ -20074,21 +19524,6 @@ entities: pos: 8.5,31.5 rot: 3.141592653589793 rad type: Transform - - products: - - cargo.dice - - cargo.Medkit - - cargo.flashlight - - cargo.fireextinguisher - - cargo.pen - - cargo.bikehorn - - cargo.cleaver - - cargo.fueltank - - cargo.medscanner - - cargo.glass - - cargo.cable - type: GalacticMarket - - deadThreshold: 100 - type: BreakableConstruction - containers: board: entities: @@ -20111,8 +19546,6 @@ entities: pos: 0.5,32.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: BreakableConstruction - uid: 964 type: ChairOfficeDark components: @@ -20189,8 +19622,6 @@ entities: pos: 7.5,32.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: BreakableConstruction - uid: 974 type: ComputerAlert components: @@ -20198,8 +19629,6 @@ entities: pos: 6.5,32.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: BreakableConstruction - uid: 975 type: ComputerId components: @@ -20207,8 +19636,6 @@ entities: pos: 7.5,21.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: BreakableConstruction - containers: IdCardConsole-privilegedId: type: Content.Server.GameObjects.ContainerSlot @@ -20226,8 +19653,6 @@ entities: pos: 8.5,23.5 rot: 1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: BreakableConstruction - containers: IdCardConsole-privilegedId: type: Content.Server.GameObjects.ContainerSlot @@ -20286,8 +19711,6 @@ entities: pos: 9.5,23.5 rot: 1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: BreakableConstruction - containers: board: entities: @@ -20390,8 +19813,6 @@ entities: pos: 3.5,32.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: BreakableConstruction - containers: board: entities: @@ -20412,8 +19833,6 @@ entities: pos: 1.5,1.5 rot: 3.141592653589793 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 997 type: Catwalk components: @@ -20436,8 +19855,6 @@ entities: pos: 0.5,2.5 rot: 3.141592653589793 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 1000 type: ApcExtensionCable components: @@ -20445,8 +19862,6 @@ entities: pos: 1.5,2.5 rot: 3.141592653589793 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 1001 type: solid_wall components: @@ -20461,8 +19876,6 @@ entities: pos: 3.5,30.5 rot: 3.141592653589793 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 1003 type: ApcExtensionCable components: @@ -20470,8 +19883,6 @@ entities: pos: 3.5,28.5 rot: 3.141592653589793 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 1004 type: ApcExtensionCable components: @@ -20479,8 +19890,6 @@ entities: pos: 26.5,4.5 rot: 3.141592653589793 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 1005 type: ApcExtensionCable components: @@ -20488,8 +19897,6 @@ entities: pos: 25.5,4.5 rot: 3.141592653589793 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 1006 type: solid_wall components: @@ -20511,8 +19918,6 @@ entities: pos: 27.5,4.5 rot: 3.141592653589793 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 1009 type: ApcExtensionCable components: @@ -20520,8 +19925,6 @@ entities: pos: 27.5,6.5 rot: 3.141592653589793 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 1010 type: ApcExtensionCable components: @@ -20529,8 +19932,6 @@ entities: pos: 27.5,5.5 rot: 3.141592653589793 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 1011 type: ApcExtensionCable components: @@ -20538,8 +19939,6 @@ entities: pos: 3.5,29.5 rot: 3.141592653589793 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 1012 type: ApcExtensionCable components: @@ -20547,8 +19946,6 @@ entities: pos: 16.5,-2.5 rot: 3.141592653589793 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 1013 type: solid_wall components: @@ -20563,8 +19960,6 @@ entities: pos: 22.5,-18.5 rot: 3.141592653589793 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 1015 type: ApcExtensionCable components: @@ -20572,8 +19967,6 @@ entities: pos: 16.5,-1.5 rot: 3.141592653589793 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 1016 type: ReinforcedWindow components: @@ -20620,8 +20013,6 @@ entities: pos: -6.5,-26.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 1022 type: Catwalk components: @@ -20817,14 +20208,27 @@ entities: - Crowbar - Multitool type: ProtolatheDatabase + - containers: + machine_board: + entities: + - 4278 + type: Robust.Server.GameObjects.Components.Container.Container + machine_parts: + entities: + - 4279 + - 4280 + - 4281 + - 4282 + - 4283 + - 4284 + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer - uid: 1046 type: Autolathe components: - parent: 855 pos: -5.5,-12.5 type: Transform - - deadThreshold: 100 - type: BreakableConstruction - recipes: - Brutepack - Ointment @@ -20961,8 +20365,6 @@ entities: - parent: 855 pos: -5.5,-15.5 type: Transform - - deadThreshold: 100 - type: BreakableConstruction - containers: board: entities: @@ -20983,8 +20385,6 @@ entities: pos: -8.494434,-16.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 1063 type: Poweredlight components: @@ -21379,8 +20779,6 @@ entities: pos: 24.5,-15.5 rot: 1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: BreakableConstruction - uid: 1104 type: Beaker components: @@ -21402,8 +20800,6 @@ entities: pos: 18.5,-0.5 rot: 3.141592653589793 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalEntry: type: Robust.Server.GameObjects.Components.Container.Container @@ -21416,8 +20812,6 @@ entities: type: Transform - entryDelay: 0 type: DisposalUnit - - deadThreshold: 100 - type: Destructible - containers: DisposalUnit: type: Robust.Server.GameObjects.Components.Container.Container @@ -21506,8 +20900,6 @@ entities: pos: -6.5,-26.5 rot: 3.141592653589793 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 1120 type: HVWire components: @@ -21515,8 +20907,6 @@ entities: pos: -4.5,-26.5 rot: 3.141592653589793 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 1121 type: Catwalk components: @@ -22028,8 +21418,6 @@ entities: pos: 6.5,-5.5 rot: 1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: BreakableConstruction - uid: 1179 type: ChairOfficeLight components: @@ -22162,8 +21550,6 @@ entities: pos: -33.298416,6.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 1195 type: Window components: @@ -22471,8 +21857,6 @@ entities: - parent: 855 pos: 29.5,-1.5 type: Transform - - deadThreshold: 100 - type: BreakableConstruction - uid: 1225 type: LockerToolFilled components: @@ -22713,8 +22097,6 @@ entities: pos: -2.5,-15.5 rot: 3.141592653589793 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 1249 type: ApcExtensionCable components: @@ -22722,8 +22104,6 @@ entities: pos: 6.5,-0.5 rot: 3.141592653589793 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 1250 type: solid_wall components: @@ -22738,8 +22118,6 @@ entities: pos: 6.5,0.5 rot: 3.141592653589793 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 1252 type: ComfyChair components: @@ -22985,8 +22363,6 @@ entities: pos: 1.3437586,6.2515917 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 1273 type: Poweredlight components: @@ -23697,8 +23073,6 @@ entities: pos: 16.688538,8.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 1329 type: Poweredlight components: @@ -23743,8 +23117,6 @@ entities: pos: 5.768486,-12.5 rot: 1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 1333 type: solid_wall components: @@ -23988,8 +23360,6 @@ entities: pos: -32.5,1.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 1354 type: solid_wall components: @@ -24236,8 +23606,6 @@ entities: pos: 26.30795,7.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 1376 type: Poweredlight components: @@ -24390,8 +23758,6 @@ entities: pos: -4.5,5.5 rot: 3.141592653589793 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 1388 type: reinforced_wall components: @@ -24449,8 +23815,6 @@ entities: - parent: 855 pos: 18.507353,6.5 type: Transform - - deadThreshold: 100 - type: Destructible - uid: 1393 type: WaterTankFull components: @@ -25104,8 +24468,6 @@ entities: pos: -7.5,-25.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 1486 type: ApcExtensionCable components: @@ -25113,8 +24475,6 @@ entities: pos: -7.5,-26.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 1487 type: Window components: @@ -25516,8 +24876,6 @@ entities: - parent: 855 pos: -13.678196,17.5 type: Transform - - deadThreshold: 100 - type: Destructible - uid: 1544 type: SignConference components: @@ -25525,8 +24883,6 @@ entities: pos: -2.6767635,22.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 1545 type: SignDirectionalBridge components: @@ -25534,8 +24890,6 @@ entities: pos: 1.3437586,6.5 rot: 1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 1546 type: WeldingFuelTank components: @@ -25560,8 +24914,6 @@ entities: - parent: 855 pos: 29.5,-2.5 type: Transform - - deadThreshold: 100 - type: BreakableConstruction - uid: 1549 type: ReinforcedWindow components: @@ -25597,8 +24949,6 @@ entities: pos: -1.2919803,-7.6148567 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 1554 type: solid_wall components: @@ -25745,8 +25095,6 @@ entities: pos: -9.687853,18.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 1574 type: ChairOfficeDark components: @@ -25936,8 +25284,6 @@ entities: pos: 42.70487,10.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 1599 type: solid_wall components: @@ -26689,8 +26035,6 @@ entities: pos: 7.326743,-12.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 1704 type: solid_wall components: @@ -27271,8 +26615,6 @@ entities: - parent: 855 pos: -20.49181,6.256847 type: Transform - - deadThreshold: 100 - type: Destructible - uid: 1787 type: SignDirectionalSec components: @@ -27280,8 +26622,6 @@ entities: pos: 5.9947615,6.5 rot: 3.141592653589793 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 1788 type: LowWall components: @@ -29409,8 +28749,6 @@ entities: pos: -7.5,-24.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2090 type: solid_wall components: @@ -29432,8 +28770,6 @@ entities: pos: 1.5,6.5 rot: 3.141592653589793 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2093 type: solid_wall components: @@ -31693,8 +31029,6 @@ entities: pos: -1.5,6.5 rot: 3.141592653589793 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2415 type: Table components: @@ -31709,8 +31043,6 @@ entities: pos: -6.5,1.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: BreakableConstruction - containers: board: entities: @@ -31736,8 +31068,6 @@ entities: pos: -3.5,6.5 rot: 3.141592653589793 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2420 type: ApcExtensionCable components: @@ -31745,8 +31075,6 @@ entities: pos: -2.5,6.5 rot: 3.141592653589793 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2421 type: solid_wall components: @@ -31768,8 +31096,6 @@ entities: pos: -4.5,6.5 rot: 3.141592653589793 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2424 type: solid_wall components: @@ -31812,8 +31138,6 @@ entities: pos: -10.5,-17.5 rot: 1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalEntry: type: Robust.Server.GameObjects.Components.Container.Container @@ -32565,8 +31889,6 @@ entities: pos: -14.5,0.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2528 type: solid_wall components: @@ -32608,8 +31930,6 @@ entities: pos: -28.5,12.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2533 type: ApcExtensionCable components: @@ -32617,8 +31937,6 @@ entities: pos: -28.5,11.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2534 type: ApcExtensionCable components: @@ -32626,8 +31944,6 @@ entities: pos: -28.5,10.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2535 type: ApcExtensionCable components: @@ -32635,8 +31951,6 @@ entities: pos: -28.5,9.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2536 type: ApcExtensionCable components: @@ -32644,8 +31958,6 @@ entities: pos: -28.5,8.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2537 type: ApcExtensionCable components: @@ -32653,8 +31965,6 @@ entities: pos: -27.5,9.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2538 type: ApcExtensionCable components: @@ -32662,8 +31972,6 @@ entities: pos: -26.5,9.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2539 type: ApcExtensionCable components: @@ -32671,8 +31979,6 @@ entities: pos: -25.5,9.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2540 type: ApcExtensionCable components: @@ -32680,8 +31986,6 @@ entities: pos: -26.5,8.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2541 type: ApcExtensionCable components: @@ -32689,8 +31993,6 @@ entities: pos: -26.5,7.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2542 type: ApcExtensionCable components: @@ -32698,8 +32000,6 @@ entities: pos: -24.5,9.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2543 type: ApcExtensionCable components: @@ -32707,8 +32007,6 @@ entities: pos: -23.5,9.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2544 type: ApcExtensionCable components: @@ -32716,8 +32014,6 @@ entities: pos: -22.5,9.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2545 type: ApcExtensionCable components: @@ -32725,8 +32021,6 @@ entities: pos: -21.5,9.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2546 type: ApcExtensionCable components: @@ -32734,8 +32028,6 @@ entities: pos: -20.5,9.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2547 type: ApcExtensionCable components: @@ -32743,8 +32035,6 @@ entities: pos: -19.5,9.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2548 type: ApcExtensionCable components: @@ -32752,8 +32042,6 @@ entities: pos: -23.5,8.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2549 type: ApcExtensionCable components: @@ -32761,8 +32049,6 @@ entities: pos: -23.5,7.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2550 type: ApcExtensionCable components: @@ -32770,8 +32056,6 @@ entities: pos: -23.5,7.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2551 type: ApcExtensionCable components: @@ -32779,8 +32063,6 @@ entities: pos: -23.5,6.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2552 type: ApcExtensionCable components: @@ -32788,8 +32070,6 @@ entities: pos: -28.5,13.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2553 type: ApcExtensionCable components: @@ -32797,8 +32077,6 @@ entities: pos: -28.5,14.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2554 type: ApcExtensionCable components: @@ -32806,8 +32084,6 @@ entities: pos: -17.5,9.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2555 type: ApcExtensionCable components: @@ -32815,8 +32091,6 @@ entities: pos: -16.5,9.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2556 type: ApcExtensionCable components: @@ -32824,8 +32098,6 @@ entities: pos: -16.5,8.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2557 type: ApcExtensionCable components: @@ -32833,8 +32105,6 @@ entities: pos: -16.5,7.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2558 type: SalternApc components: @@ -32851,8 +32121,6 @@ entities: pos: -16.5,15.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2560 type: ApcExtensionCable components: @@ -32860,8 +32128,6 @@ entities: pos: -17.5,15.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2561 type: ApcExtensionCable components: @@ -32869,8 +32135,6 @@ entities: pos: -17.5,16.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2562 type: ApcExtensionCable components: @@ -32878,8 +32142,6 @@ entities: pos: -17.5,17.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2563 type: ApcExtensionCable components: @@ -32887,8 +32149,6 @@ entities: pos: -17.5,18.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2564 type: ApcExtensionCable components: @@ -32896,8 +32156,6 @@ entities: pos: -17.5,19.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2565 type: ApcExtensionCable components: @@ -32905,8 +32163,6 @@ entities: pos: -17.5,20.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2566 type: ApcExtensionCable components: @@ -32914,8 +32170,6 @@ entities: pos: -17.5,21.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2567 type: ApcExtensionCable components: @@ -32923,8 +32177,6 @@ entities: pos: -17.5,22.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2568 type: ApcExtensionCable components: @@ -32932,8 +32184,6 @@ entities: pos: -17.5,23.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2569 type: ApcExtensionCable components: @@ -32941,8 +32191,6 @@ entities: pos: -17.5,24.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2570 type: ApcExtensionCable components: @@ -32950,8 +32198,6 @@ entities: pos: -16.5,24.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2571 type: ApcExtensionCable components: @@ -32959,8 +32205,6 @@ entities: pos: -15.5,24.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2572 type: ApcExtensionCable components: @@ -32968,8 +32212,6 @@ entities: pos: -14.5,24.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2573 type: ApcExtensionCable components: @@ -32977,8 +32219,6 @@ entities: pos: -13.5,24.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2574 type: ApcExtensionCable components: @@ -32986,8 +32226,6 @@ entities: pos: -12.5,24.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2575 type: ApcExtensionCable components: @@ -32995,8 +32233,6 @@ entities: pos: -11.5,24.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2576 type: ApcExtensionCable components: @@ -33004,8 +32240,6 @@ entities: pos: -10.5,24.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2577 type: ApcExtensionCable components: @@ -33013,8 +32247,6 @@ entities: pos: -9.5,24.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2578 type: ApcExtensionCable components: @@ -33022,8 +32254,6 @@ entities: pos: -8.5,24.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2579 type: ApcExtensionCable components: @@ -33031,8 +32261,6 @@ entities: pos: -7.5,24.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2580 type: ApcExtensionCable components: @@ -33040,8 +32268,6 @@ entities: pos: -12.5,12.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2581 type: ApcExtensionCable components: @@ -33049,8 +32275,6 @@ entities: pos: -12.5,11.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2582 type: ApcExtensionCable components: @@ -33058,8 +32282,6 @@ entities: pos: -13.5,11.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2583 type: ApcExtensionCable components: @@ -33067,8 +32289,6 @@ entities: pos: -12.5,10.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2584 type: ApcExtensionCable components: @@ -33076,8 +32296,6 @@ entities: pos: -12.5,9.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2585 type: ApcExtensionCable components: @@ -33085,8 +32303,6 @@ entities: pos: -12.5,7.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2586 type: ApcExtensionCable components: @@ -33094,8 +32310,6 @@ entities: pos: -12.5,8.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2587 type: ApcExtensionCable components: @@ -33103,8 +32317,6 @@ entities: pos: -11.5,7.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2588 type: ApcExtensionCable components: @@ -33112,8 +32324,6 @@ entities: pos: -11.5,10.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2589 type: ApcExtensionCable components: @@ -33121,8 +32331,6 @@ entities: pos: -9.5,10.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2590 type: ApcExtensionCable components: @@ -33130,8 +32338,6 @@ entities: pos: -10.5,10.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2591 type: ApcExtensionCable components: @@ -33139,8 +32345,6 @@ entities: pos: -8.5,10.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2592 type: ApcExtensionCable components: @@ -33148,8 +32352,6 @@ entities: pos: -7.5,10.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2593 type: ApcExtensionCable components: @@ -33157,8 +32359,6 @@ entities: pos: -6.5,10.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2594 type: ApcExtensionCable components: @@ -33166,8 +32366,6 @@ entities: pos: -5.5,10.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2595 type: ApcExtensionCable components: @@ -33175,8 +32373,6 @@ entities: pos: -4.5,10.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2596 type: ApcExtensionCable components: @@ -33184,8 +32380,6 @@ entities: pos: -3.5,10.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2597 type: ApcExtensionCable components: @@ -33193,8 +32387,6 @@ entities: pos: -2.5,10.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2598 type: ApcExtensionCable components: @@ -33202,8 +32394,6 @@ entities: pos: -1.5,10.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2599 type: ApcExtensionCable components: @@ -33211,8 +32401,6 @@ entities: pos: -0.5,10.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2600 type: ApcExtensionCable components: @@ -33220,8 +32408,6 @@ entities: pos: 0.5,10.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2601 type: ApcExtensionCable components: @@ -33229,8 +32415,6 @@ entities: pos: -5.5,9.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2602 type: ApcExtensionCable components: @@ -33238,8 +32422,6 @@ entities: pos: -5.5,8.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2603 type: ApcExtensionCable components: @@ -33247,8 +32429,6 @@ entities: pos: -5.5,7.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2604 type: ApcExtensionCable components: @@ -33256,8 +32436,6 @@ entities: pos: 0.5,9.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2605 type: ApcExtensionCable components: @@ -33265,8 +32443,6 @@ entities: pos: 0.5,8.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2606 type: ApcExtensionCable components: @@ -33274,8 +32450,6 @@ entities: pos: 0.5,7.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2607 type: ApcExtensionCable components: @@ -33283,8 +32457,6 @@ entities: pos: 0.5,6.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2608 type: ApcExtensionCable components: @@ -33292,8 +32464,6 @@ entities: pos: 0.5,6.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2609 type: ApcExtensionCable components: @@ -33301,8 +32471,6 @@ entities: pos: -0.5,6.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2610 type: ApcExtensionCable components: @@ -33310,8 +32478,6 @@ entities: pos: -3.5,15.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2611 type: ApcExtensionCable components: @@ -33319,8 +32485,6 @@ entities: pos: -3.5,16.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2612 type: ApcExtensionCable components: @@ -33328,8 +32492,6 @@ entities: pos: -3.5,17.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2613 type: ApcExtensionCable components: @@ -33337,8 +32499,6 @@ entities: pos: -3.5,18.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2614 type: ApcExtensionCable components: @@ -33346,8 +32506,6 @@ entities: pos: -2.5,18.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2615 type: ApcExtensionCable components: @@ -33355,8 +32513,6 @@ entities: pos: -1.5,18.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2616 type: ApcExtensionCable components: @@ -33364,8 +32520,6 @@ entities: pos: -0.5,18.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2617 type: ApcExtensionCable components: @@ -33373,8 +32527,6 @@ entities: pos: -3.5,15.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2618 type: ApcExtensionCable components: @@ -33382,8 +32534,6 @@ entities: pos: -3.5,14.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2619 type: ApcExtensionCable components: @@ -33391,8 +32541,6 @@ entities: pos: -4.5,14.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2620 type: ApcExtensionCable components: @@ -33400,8 +32548,6 @@ entities: pos: -5.5,14.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2621 type: ApcExtensionCable components: @@ -33409,8 +32555,6 @@ entities: pos: -6.5,14.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2622 type: ApcExtensionCable components: @@ -33418,8 +32562,6 @@ entities: pos: -7.5,14.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2623 type: ApcExtensionCable components: @@ -33427,8 +32569,6 @@ entities: pos: -8.5,14.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2624 type: ApcExtensionCable components: @@ -33436,8 +32576,6 @@ entities: pos: -9.5,14.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2625 type: ApcExtensionCable components: @@ -33445,8 +32583,6 @@ entities: pos: -10.5,14.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2626 type: ApcExtensionCable components: @@ -33454,8 +32590,6 @@ entities: pos: -11.5,14.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2627 type: ApcExtensionCable components: @@ -33463,8 +32597,6 @@ entities: pos: -12.5,14.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2628 type: ApcExtensionCable components: @@ -33472,8 +32604,6 @@ entities: pos: -12.5,15.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2629 type: ApcExtensionCable components: @@ -33481,8 +32611,6 @@ entities: pos: -12.5,16.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2630 type: ApcExtensionCable components: @@ -33490,8 +32618,6 @@ entities: pos: -7.5,15.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2631 type: ApcExtensionCable components: @@ -33499,8 +32625,6 @@ entities: pos: -7.5,16.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2632 type: ApcExtensionCable components: @@ -33508,8 +32632,6 @@ entities: pos: -7.5,17.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2633 type: ApcExtensionCable components: @@ -33517,8 +32639,6 @@ entities: pos: -6.5,17.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2634 type: ApcExtensionCable components: @@ -33526,8 +32646,6 @@ entities: pos: -8.5,17.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2635 type: ApcExtensionCable components: @@ -33535,8 +32653,6 @@ entities: pos: -8.5,18.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2636 type: ApcExtensionCable components: @@ -33544,8 +32660,6 @@ entities: pos: -8.5,19.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2637 type: ApcExtensionCable components: @@ -33553,8 +32667,6 @@ entities: pos: -8.5,20.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2638 type: ApcExtensionCable components: @@ -33562,8 +32674,6 @@ entities: pos: -9.5,20.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2639 type: ApcExtensionCable components: @@ -33571,8 +32681,6 @@ entities: pos: -8.5,21.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2640 type: ApcExtensionCable components: @@ -33580,8 +32688,6 @@ entities: pos: -7.5,21.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2641 type: ApcExtensionCable components: @@ -33589,8 +32695,6 @@ entities: pos: -12.5,17.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2642 type: ApcExtensionCable components: @@ -33598,8 +32702,6 @@ entities: pos: -12.5,18.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2643 type: ApcExtensionCable components: @@ -33607,8 +32709,6 @@ entities: pos: -12.5,19.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2644 type: ApcExtensionCable components: @@ -33616,8 +32716,6 @@ entities: pos: -12.5,20.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2645 type: ApcExtensionCable components: @@ -33625,8 +32723,6 @@ entities: pos: -13.5,20.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2646 type: ApcExtensionCable components: @@ -33634,8 +32730,6 @@ entities: pos: -14.5,20.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2647 type: ApcExtensionCable components: @@ -33643,8 +32737,6 @@ entities: pos: -3.5,14.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2648 type: ApcExtensionCable components: @@ -33652,8 +32744,6 @@ entities: pos: -2.5,14.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2649 type: ApcExtensionCable components: @@ -33661,8 +32751,6 @@ entities: pos: -1.5,14.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2650 type: ApcExtensionCable components: @@ -33670,8 +32758,6 @@ entities: pos: -0.5,14.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2651 type: ApcExtensionCable components: @@ -33679,8 +32765,6 @@ entities: pos: 0.5,14.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2652 type: ApcExtensionCable components: @@ -33688,8 +32772,6 @@ entities: pos: 1.5,14.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2653 type: ApcExtensionCable components: @@ -33697,8 +32779,6 @@ entities: pos: 0.5,13.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2654 type: ApcExtensionCable components: @@ -33706,8 +32786,6 @@ entities: pos: 0.5,12.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2655 type: ApcExtensionCable components: @@ -33715,8 +32793,6 @@ entities: pos: -39.5,11.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2656 type: ApcExtensionCable components: @@ -33724,8 +32800,6 @@ entities: pos: -39.5,10.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2657 type: ApcExtensionCable components: @@ -33733,8 +32807,6 @@ entities: pos: -38.5,10.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2658 type: ApcExtensionCable components: @@ -33742,8 +32814,6 @@ entities: pos: -37.5,10.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2659 type: ApcExtensionCable components: @@ -33751,8 +32821,6 @@ entities: pos: -36.5,10.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2660 type: ApcExtensionCable components: @@ -33760,8 +32828,6 @@ entities: pos: -36.5,9.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2661 type: ApcExtensionCable components: @@ -33769,8 +32835,6 @@ entities: pos: -36.5,8.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2662 type: ApcExtensionCable components: @@ -33778,8 +32842,6 @@ entities: pos: -36.5,7.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2663 type: ApcExtensionCable components: @@ -33787,8 +32849,6 @@ entities: pos: -36.5,6.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2664 type: ApcExtensionCable components: @@ -33796,8 +32856,6 @@ entities: pos: -36.5,5.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2665 type: ApcExtensionCable components: @@ -33805,8 +32863,6 @@ entities: pos: -36.5,4.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2666 type: ApcExtensionCable components: @@ -33814,8 +32870,6 @@ entities: pos: -36.5,3.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2667 type: ApcExtensionCable components: @@ -33823,8 +32877,6 @@ entities: pos: -36.5,2.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2668 type: ApcExtensionCable components: @@ -33832,8 +32884,6 @@ entities: pos: -36.5,1.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2669 type: ApcExtensionCable components: @@ -33841,8 +32891,6 @@ entities: pos: -36.5,0.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2670 type: ApcExtensionCable components: @@ -33850,8 +32898,6 @@ entities: pos: -36.5,-0.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2671 type: ApcExtensionCable components: @@ -33859,8 +32905,6 @@ entities: pos: -36.5,-1.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2672 type: ApcExtensionCable components: @@ -33868,8 +32912,6 @@ entities: pos: -36.5,-2.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2673 type: ApcExtensionCable components: @@ -33877,8 +32919,6 @@ entities: pos: -36.5,-3.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2674 type: ApcExtensionCable components: @@ -33886,8 +32926,6 @@ entities: pos: -36.5,-4.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2675 type: ApcExtensionCable components: @@ -33895,8 +32933,6 @@ entities: pos: -36.5,-5.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2676 type: ApcExtensionCable components: @@ -33904,8 +32940,6 @@ entities: pos: -36.5,-6.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2677 type: ApcExtensionCable components: @@ -33913,8 +32947,6 @@ entities: pos: -35.5,-6.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2678 type: ApcExtensionCable components: @@ -33922,8 +32954,6 @@ entities: pos: -35.5,2.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2679 type: ApcExtensionCable components: @@ -33931,8 +32961,6 @@ entities: pos: -35.5,5.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2680 type: ApcExtensionCable components: @@ -33940,8 +32968,6 @@ entities: pos: -34.5,5.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2681 type: ApcExtensionCable components: @@ -33949,8 +32975,6 @@ entities: pos: -33.5,5.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2682 type: ApcExtensionCable components: @@ -33958,8 +32982,6 @@ entities: pos: -32.5,5.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2683 type: ApcExtensionCable components: @@ -33967,8 +32989,6 @@ entities: pos: -35.5,8.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2684 type: ApcExtensionCable components: @@ -33976,8 +32996,6 @@ entities: pos: -34.5,8.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2685 type: ApcExtensionCable components: @@ -33985,8 +33003,6 @@ entities: pos: -37.5,8.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2686 type: ApcExtensionCable components: @@ -33994,8 +33010,6 @@ entities: pos: -38.5,8.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2687 type: ApcExtensionCable components: @@ -34003,8 +33017,6 @@ entities: pos: -39.5,8.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2688 type: ApcExtensionCable components: @@ -34012,8 +33024,6 @@ entities: pos: -40.5,8.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2689 type: ApcExtensionCable components: @@ -34021,8 +33031,6 @@ entities: pos: -37.5,4.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2690 type: ApcExtensionCable components: @@ -34030,8 +33038,6 @@ entities: pos: -38.5,4.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2691 type: ApcExtensionCable components: @@ -34039,8 +33045,6 @@ entities: pos: -39.5,4.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2692 type: ApcExtensionCable components: @@ -34048,8 +33052,6 @@ entities: pos: -40.5,4.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2693 type: ApcExtensionCable components: @@ -34057,8 +33059,6 @@ entities: pos: -37.5,-3.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2694 type: ApcExtensionCable components: @@ -34066,8 +33066,6 @@ entities: pos: -38.5,-3.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2695 type: ApcExtensionCable components: @@ -34075,8 +33073,6 @@ entities: pos: -18.5,9.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2696 type: ApcExtensionCable components: @@ -34084,8 +33080,6 @@ entities: pos: -17.5,7.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2697 type: ApcExtensionCable components: @@ -34093,8 +33087,6 @@ entities: pos: -18.5,7.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2698 type: ApcExtensionCable components: @@ -34102,8 +33094,6 @@ entities: pos: -30.5,-3.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2699 type: ApcExtensionCable components: @@ -34111,8 +33101,6 @@ entities: pos: -30.5,-4.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2700 type: ApcExtensionCable components: @@ -34120,8 +33108,6 @@ entities: pos: -30.5,-5.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2701 type: ApcExtensionCable components: @@ -34129,8 +33115,6 @@ entities: pos: -30.5,-6.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2702 type: ApcExtensionCable components: @@ -34138,8 +33122,6 @@ entities: pos: -30.5,-7.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2703 type: ApcExtensionCable components: @@ -34147,8 +33129,6 @@ entities: pos: -29.5,-7.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2704 type: ApcExtensionCable components: @@ -34156,8 +33136,6 @@ entities: pos: -28.5,-7.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2705 type: ApcExtensionCable components: @@ -34165,8 +33143,6 @@ entities: pos: -27.5,-7.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2706 type: ApcExtensionCable components: @@ -34174,8 +33150,6 @@ entities: pos: -26.5,-7.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2707 type: ApcExtensionCable components: @@ -34183,8 +33157,6 @@ entities: pos: -25.5,-7.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2708 type: ApcExtensionCable components: @@ -34192,8 +33164,6 @@ entities: pos: -25.5,-8.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2709 type: ApcExtensionCable components: @@ -34201,8 +33171,6 @@ entities: pos: -24.5,-7.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2710 type: ApcExtensionCable components: @@ -34210,8 +33178,6 @@ entities: pos: -23.5,-7.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2711 type: ApcExtensionCable components: @@ -34219,8 +33185,6 @@ entities: pos: -23.5,-8.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2712 type: ApcExtensionCable components: @@ -34228,8 +33192,6 @@ entities: pos: -20.5,-7.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2713 type: ApcExtensionCable components: @@ -34237,8 +33199,6 @@ entities: pos: -30.5,-2.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2714 type: ApcExtensionCable components: @@ -34246,8 +33206,6 @@ entities: pos: -30.5,-1.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2715 type: ApcExtensionCable components: @@ -34255,8 +33213,6 @@ entities: pos: -30.5,-0.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2716 type: ApcExtensionCable components: @@ -34264,8 +33220,6 @@ entities: pos: -30.5,0.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2717 type: ApcExtensionCable components: @@ -34273,8 +33227,6 @@ entities: pos: -30.5,1.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2718 type: ApcExtensionCable components: @@ -34282,8 +33234,6 @@ entities: pos: -29.5,0.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2719 type: ApcExtensionCable components: @@ -34291,8 +33241,6 @@ entities: pos: -28.5,0.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2720 type: ApcExtensionCable components: @@ -34300,8 +33248,6 @@ entities: pos: -27.5,0.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2721 type: ApcExtensionCable components: @@ -34309,8 +33255,6 @@ entities: pos: -27.5,-0.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2722 type: ApcExtensionCable components: @@ -34318,8 +33262,6 @@ entities: pos: -27.5,-1.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2723 type: solid_wall components: @@ -34334,8 +33276,6 @@ entities: pos: -31.5,-6.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2725 type: ApcExtensionCable components: @@ -34343,8 +33283,6 @@ entities: pos: -32.5,-6.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2726 type: ApcExtensionCable components: @@ -34352,8 +33290,6 @@ entities: pos: -32.5,-5.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2727 type: ApcExtensionCable components: @@ -34361,8 +33297,6 @@ entities: pos: -32.5,-4.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2728 type: ApcExtensionCable components: @@ -34370,8 +33304,6 @@ entities: pos: -32.5,-3.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2729 type: ApcExtensionCable components: @@ -34379,8 +33311,6 @@ entities: pos: -32.5,-2.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2730 type: ApcExtensionCable components: @@ -34388,8 +33318,6 @@ entities: pos: -32.5,-1.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2731 type: ApcExtensionCable components: @@ -34397,8 +33325,6 @@ entities: pos: -32.5,-0.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2732 type: ApcExtensionCable components: @@ -34406,8 +33332,6 @@ entities: pos: -32.5,0.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2733 type: ApcExtensionCable components: @@ -34415,8 +33339,6 @@ entities: pos: -32.5,1.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2734 type: ApcExtensionCable components: @@ -34424,8 +33346,6 @@ entities: pos: -20.5,-12.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2735 type: ApcExtensionCable components: @@ -34433,8 +33353,6 @@ entities: pos: -20.5,-13.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2736 type: ApcExtensionCable components: @@ -34442,8 +33360,6 @@ entities: pos: -20.5,-14.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2737 type: ApcExtensionCable components: @@ -34451,8 +33367,6 @@ entities: pos: -21.5,-14.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2738 type: ApcExtensionCable components: @@ -34460,8 +33374,6 @@ entities: pos: -22.5,-14.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2739 type: ApcExtensionCable components: @@ -34469,8 +33381,6 @@ entities: pos: -22.5,-14.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2740 type: ApcExtensionCable components: @@ -34478,8 +33388,6 @@ entities: pos: -23.5,-14.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2741 type: ApcExtensionCable components: @@ -34487,8 +33395,6 @@ entities: pos: -24.5,-14.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2742 type: ApcExtensionCable components: @@ -34496,8 +33402,6 @@ entities: pos: -24.5,-13.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2743 type: ApcExtensionCable components: @@ -34505,8 +33409,6 @@ entities: pos: -14.5,-8.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2744 type: ApcExtensionCable components: @@ -34514,8 +33416,6 @@ entities: pos: -14.5,-9.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2745 type: ApcExtensionCable components: @@ -34523,8 +33423,6 @@ entities: pos: -14.5,-10.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2746 type: ApcExtensionCable components: @@ -34532,8 +33430,6 @@ entities: pos: -14.5,-10.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2747 type: ApcExtensionCable components: @@ -34541,8 +33437,6 @@ entities: pos: -14.5,-11.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2748 type: ApcExtensionCable components: @@ -34550,8 +33444,6 @@ entities: pos: -13.5,-11.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2749 type: ApcExtensionCable components: @@ -34559,8 +33451,6 @@ entities: pos: -12.5,-11.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2750 type: ApcExtensionCable components: @@ -34568,8 +33458,6 @@ entities: pos: -11.5,-11.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2751 type: ApcExtensionCable components: @@ -34577,8 +33465,6 @@ entities: pos: -12.5,-10.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2752 type: ApcExtensionCable components: @@ -34586,8 +33472,6 @@ entities: pos: -12.5,-9.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2753 type: ApcExtensionCable components: @@ -34595,8 +33479,6 @@ entities: pos: -13.5,-12.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2754 type: ApcExtensionCable components: @@ -34604,8 +33486,6 @@ entities: pos: -12.5,-8.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2755 type: ApcExtensionCable components: @@ -34613,8 +33493,6 @@ entities: pos: -16.5,-7.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2756 type: ApcExtensionCable components: @@ -34622,8 +33500,6 @@ entities: pos: -15.5,-7.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2757 type: ApcExtensionCable components: @@ -34631,8 +33507,6 @@ entities: pos: -14.5,-7.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2758 type: ApcExtensionCable components: @@ -34640,8 +33514,6 @@ entities: pos: -17.5,-7.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2759 type: ApcExtensionCable components: @@ -34649,8 +33521,6 @@ entities: pos: -18.5,-7.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2760 type: ApcExtensionCable components: @@ -34658,8 +33528,6 @@ entities: pos: -19.5,-7.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2761 type: ApcExtensionCable components: @@ -34667,8 +33535,6 @@ entities: pos: -20.5,-7.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2762 type: ApcExtensionCable components: @@ -34676,8 +33542,6 @@ entities: pos: -18.5,-6.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2763 type: ApcExtensionCable components: @@ -34685,8 +33549,6 @@ entities: pos: -18.5,-5.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2764 type: ApcExtensionCable components: @@ -34694,8 +33556,6 @@ entities: pos: -18.5,-4.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2765 type: ApcExtensionCable components: @@ -34703,8 +33563,6 @@ entities: pos: -19.5,-4.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2766 type: ApcExtensionCable components: @@ -34712,8 +33570,6 @@ entities: pos: -20.5,-4.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2767 type: ApcExtensionCable components: @@ -34721,8 +33577,6 @@ entities: pos: -21.5,-4.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2768 type: ApcExtensionCable components: @@ -34730,8 +33584,6 @@ entities: pos: -22.5,-4.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2769 type: ApcExtensionCable components: @@ -34739,8 +33591,6 @@ entities: pos: -22.5,-3.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2770 type: ApcExtensionCable components: @@ -34748,8 +33598,6 @@ entities: pos: -22.5,-2.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2771 type: ApcExtensionCable components: @@ -34757,8 +33605,6 @@ entities: pos: -22.5,-2.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2772 type: ApcExtensionCable components: @@ -34766,8 +33612,6 @@ entities: pos: -22.5,-1.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2773 type: ApcExtensionCable components: @@ -34775,8 +33619,6 @@ entities: pos: -22.5,-0.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2774 type: ApcExtensionCable components: @@ -34784,8 +33626,6 @@ entities: pos: -22.5,0.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2775 type: ApcExtensionCable components: @@ -34793,8 +33633,6 @@ entities: pos: -22.5,1.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2776 type: ApcExtensionCable components: @@ -34802,8 +33640,6 @@ entities: pos: -23.5,0.5 rot: 3.141592653589793 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2777 type: ApcExtensionCable components: @@ -34811,8 +33647,6 @@ entities: pos: -15.5,-6.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2778 type: ApcExtensionCable components: @@ -34820,8 +33654,6 @@ entities: pos: -15.5,-5.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2779 type: ApcExtensionCable components: @@ -34829,8 +33661,6 @@ entities: pos: -15.5,-4.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2780 type: ApcExtensionCable components: @@ -34838,8 +33668,6 @@ entities: pos: -11.5,2.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2781 type: ApcExtensionCable components: @@ -34847,8 +33675,6 @@ entities: pos: -11.5,1.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2782 type: ApcExtensionCable components: @@ -34856,8 +33682,6 @@ entities: pos: -11.5,0.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2783 type: ApcExtensionCable components: @@ -34865,8 +33689,6 @@ entities: pos: -11.5,-0.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2784 type: ApcExtensionCable components: @@ -34874,8 +33696,6 @@ entities: pos: -11.5,-1.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2785 type: ApcExtensionCable components: @@ -34883,8 +33703,6 @@ entities: pos: -11.5,-2.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2786 type: ApcExtensionCable components: @@ -34892,8 +33710,6 @@ entities: pos: -11.5,-3.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2787 type: ApcExtensionCable components: @@ -34901,8 +33717,6 @@ entities: pos: -11.5,-4.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2788 type: ApcExtensionCable components: @@ -34910,8 +33724,6 @@ entities: pos: -12.5,-4.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2789 type: ApcExtensionCable components: @@ -34919,8 +33731,6 @@ entities: pos: -12.5,0.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2790 type: ApcExtensionCable components: @@ -34928,8 +33738,6 @@ entities: pos: -13.5,0.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2791 type: ApcExtensionCable components: @@ -34937,8 +33745,6 @@ entities: pos: -14.5,0.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2792 type: ApcExtensionCable components: @@ -34946,8 +33752,6 @@ entities: pos: -14.5,0.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2793 type: SalternApc components: @@ -34964,8 +33768,6 @@ entities: pos: -15.5,0.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2795 type: ApcExtensionCable components: @@ -34973,8 +33775,6 @@ entities: pos: -16.5,0.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2796 type: ApcExtensionCable components: @@ -34982,8 +33782,6 @@ entities: pos: -17.5,0.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2797 type: ApcExtensionCable components: @@ -34991,8 +33789,6 @@ entities: pos: -18.5,0.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2798 type: ApcExtensionCable components: @@ -35000,8 +33796,6 @@ entities: pos: -19.5,0.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2799 type: ApcExtensionCable components: @@ -35009,8 +33803,6 @@ entities: pos: -20.5,0.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2800 type: ApcExtensionCable components: @@ -35018,8 +33810,6 @@ entities: pos: -20.5,1.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2801 type: ApcExtensionCable components: @@ -35027,8 +33817,6 @@ entities: pos: -16.5,-0.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2802 type: ApcExtensionCable components: @@ -35036,8 +33824,6 @@ entities: pos: -16.5,-1.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2803 type: ApcExtensionCable components: @@ -35045,8 +33831,6 @@ entities: pos: -12.5,-1.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2804 type: ApcExtensionCable components: @@ -35054,8 +33838,6 @@ entities: pos: -12.5,-1.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2805 type: ApcExtensionCable components: @@ -35063,8 +33845,6 @@ entities: pos: -13.5,-1.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2806 type: ApcExtensionCable components: @@ -35072,8 +33852,6 @@ entities: pos: -20.5,-0.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2807 type: ApcExtensionCable components: @@ -35081,8 +33859,6 @@ entities: pos: -20.5,-0.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2808 type: ApcExtensionCable components: @@ -35090,8 +33866,6 @@ entities: pos: -20.5,-1.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2809 type: ApcExtensionCable components: @@ -35099,8 +33873,6 @@ entities: pos: -20.5,-2.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2810 type: ApcExtensionCable components: @@ -35108,8 +33880,6 @@ entities: pos: -10.5,0.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2811 type: ApcExtensionCable components: @@ -35117,8 +33887,6 @@ entities: pos: -9.5,0.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2812 type: ApcExtensionCable components: @@ -35126,8 +33894,6 @@ entities: pos: -8.5,0.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2813 type: ApcExtensionCable components: @@ -35135,8 +33901,6 @@ entities: pos: -7.5,0.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2814 type: ApcExtensionCable components: @@ -35144,8 +33908,6 @@ entities: pos: -6.5,0.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2815 type: ApcExtensionCable components: @@ -35153,8 +33915,6 @@ entities: pos: -5.5,0.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2816 type: ApcExtensionCable components: @@ -35162,8 +33922,6 @@ entities: pos: -4.5,0.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2817 type: ApcExtensionCable components: @@ -35171,8 +33929,6 @@ entities: pos: -3.5,0.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2818 type: ApcExtensionCable components: @@ -35180,8 +33936,6 @@ entities: pos: -2.5,0.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2819 type: ApcExtensionCable components: @@ -35189,8 +33943,6 @@ entities: pos: -1.5,0.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2820 type: ApcExtensionCable components: @@ -35198,8 +33950,6 @@ entities: pos: -0.5,0.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2821 type: ApcExtensionCable components: @@ -35207,8 +33957,6 @@ entities: pos: 0.5,0.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2822 type: ApcExtensionCable components: @@ -35216,8 +33964,6 @@ entities: pos: -0.5,0.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2823 type: ApcExtensionCable components: @@ -35225,8 +33971,6 @@ entities: pos: -0.5,-0.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2824 type: ApcExtensionCable components: @@ -35234,8 +33978,6 @@ entities: pos: -0.5,-1.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2825 type: ApcExtensionCable components: @@ -35243,8 +33985,6 @@ entities: pos: -0.5,-2.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2826 type: ApcExtensionCable components: @@ -35252,8 +33992,6 @@ entities: pos: -0.5,-3.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2827 type: ApcExtensionCable components: @@ -35261,8 +33999,6 @@ entities: pos: -0.5,-4.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2828 type: ApcExtensionCable components: @@ -35270,8 +34006,6 @@ entities: pos: 0.5,-4.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2829 type: ApcExtensionCable components: @@ -35279,8 +34013,6 @@ entities: pos: -5.5,-8.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2830 type: ApcExtensionCable components: @@ -35288,8 +34020,6 @@ entities: pos: -5.5,-7.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2831 type: ApcExtensionCable components: @@ -35297,8 +34027,6 @@ entities: pos: -4.5,-7.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2832 type: ApcExtensionCable components: @@ -35306,8 +34034,6 @@ entities: pos: -3.5,-7.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2833 type: ApcExtensionCable components: @@ -35315,8 +34041,6 @@ entities: pos: -6.5,-7.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2834 type: ApcExtensionCable components: @@ -35324,8 +34048,6 @@ entities: pos: -6.5,-7.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2835 type: ApcExtensionCable components: @@ -35333,8 +34055,6 @@ entities: pos: -7.5,-7.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2836 type: ApcExtensionCable components: @@ -35342,8 +34062,6 @@ entities: pos: -6.5,-6.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2837 type: ApcExtensionCable components: @@ -35351,8 +34069,6 @@ entities: pos: -6.5,-5.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2838 type: ApcExtensionCable components: @@ -35360,8 +34076,6 @@ entities: pos: -6.5,-4.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2839 type: ApcExtensionCable components: @@ -35369,8 +34083,6 @@ entities: pos: -5.5,-9.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2840 type: ApcExtensionCable components: @@ -35378,8 +34090,6 @@ entities: pos: -5.5,-10.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2841 type: ApcExtensionCable components: @@ -35387,8 +34097,6 @@ entities: pos: -4.5,-10.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2842 type: ApcExtensionCable components: @@ -35396,8 +34104,6 @@ entities: pos: -4.5,-10.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2843 type: ApcExtensionCable components: @@ -35405,8 +34111,6 @@ entities: pos: -3.5,-10.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2844 type: ApcExtensionCable components: @@ -35414,8 +34118,6 @@ entities: pos: -2.5,-10.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2845 type: ApcExtensionCable components: @@ -35423,8 +34125,6 @@ entities: pos: -1.5,-10.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2846 type: ApcExtensionCable components: @@ -35432,8 +34132,6 @@ entities: pos: -0.5,-10.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2847 type: ApcExtensionCable components: @@ -35441,8 +34139,6 @@ entities: pos: 0.5,-10.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2848 type: ApcExtensionCable components: @@ -35450,8 +34146,6 @@ entities: pos: 0.5,-9.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2849 type: ApcExtensionCable components: @@ -35459,8 +34153,6 @@ entities: pos: 0.5,-8.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2850 type: ApcExtensionCable components: @@ -35468,8 +34160,6 @@ entities: pos: 0.5,-7.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2851 type: ApcExtensionCable components: @@ -35477,8 +34167,6 @@ entities: pos: -0.5,-11.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2852 type: ApcExtensionCable components: @@ -35486,8 +34174,6 @@ entities: pos: -1.5,-18.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2853 type: ApcExtensionCable components: @@ -35495,8 +34181,6 @@ entities: pos: -1.5,-19.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2854 type: ApcExtensionCable components: @@ -35504,8 +34188,6 @@ entities: pos: -1.5,-20.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2855 type: ApcExtensionCable components: @@ -35513,8 +34195,6 @@ entities: pos: -0.5,-19.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2856 type: ApcExtensionCable components: @@ -35522,8 +34202,6 @@ entities: pos: -2.5,-19.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2857 type: ApcExtensionCable components: @@ -35531,8 +34209,6 @@ entities: pos: -3.5,-19.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2858 type: ApcExtensionCable components: @@ -35540,8 +34216,6 @@ entities: pos: -4.5,-19.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2859 type: ApcExtensionCable components: @@ -35549,8 +34223,6 @@ entities: pos: -3.5,-20.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2860 type: ApcExtensionCable components: @@ -35558,8 +34230,6 @@ entities: pos: -3.5,-21.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2861 type: ApcExtensionCable components: @@ -35567,8 +34237,6 @@ entities: pos: -3.5,-23.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2862 type: ApcExtensionCable components: @@ -35576,8 +34244,6 @@ entities: pos: -3.5,-22.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2863 type: ApcExtensionCable components: @@ -35585,8 +34251,6 @@ entities: pos: -2.5,-23.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2864 type: ApcExtensionCable components: @@ -35594,8 +34258,6 @@ entities: pos: -9.5,-21.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2865 type: ApcExtensionCable components: @@ -35603,8 +34265,6 @@ entities: pos: -9.5,-22.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2866 type: ApcExtensionCable components: @@ -35612,8 +34272,6 @@ entities: pos: -9.5,-23.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2867 type: ApcExtensionCable components: @@ -35621,8 +34279,6 @@ entities: pos: -8.5,-23.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2868 type: ApcExtensionCable components: @@ -35630,8 +34286,6 @@ entities: pos: -7.5,-23.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2869 type: ApcExtensionCable components: @@ -35639,8 +34293,6 @@ entities: pos: -7.5,-24.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2870 type: ApcExtensionCable components: @@ -35648,8 +34300,6 @@ entities: pos: -7.5,-25.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2871 type: ApcExtensionCable components: @@ -35657,8 +34307,6 @@ entities: pos: -9.5,-20.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2872 type: ApcExtensionCable components: @@ -35666,8 +34314,6 @@ entities: pos: -10.5,-20.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2873 type: ApcExtensionCable components: @@ -35675,8 +34321,6 @@ entities: pos: -11.5,-20.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2874 type: ApcExtensionCable components: @@ -35684,8 +34328,6 @@ entities: pos: -11.5,-19.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2875 type: ApcExtensionCable components: @@ -35693,8 +34335,6 @@ entities: pos: -9.5,-19.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2876 type: ApcExtensionCable components: @@ -35702,8 +34342,6 @@ entities: pos: -9.5,-18.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2877 type: ApcExtensionCable components: @@ -35711,8 +34349,6 @@ entities: pos: -9.5,-17.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2878 type: ApcExtensionCable components: @@ -35720,8 +34356,6 @@ entities: pos: -8.5,-17.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2879 type: ApcExtensionCable components: @@ -35729,8 +34363,6 @@ entities: pos: -3.5,-18.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2880 type: ApcExtensionCable components: @@ -35738,8 +34370,6 @@ entities: pos: -3.5,-17.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2881 type: ApcExtensionCable components: @@ -35747,8 +34377,6 @@ entities: pos: -3.5,-17.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2882 type: ApcExtensionCable components: @@ -35756,8 +34384,6 @@ entities: pos: -3.5,-16.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2883 type: ApcExtensionCable components: @@ -35765,8 +34391,6 @@ entities: pos: -3.5,-15.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2884 type: ApcExtensionCable components: @@ -35774,8 +34398,6 @@ entities: pos: -3.5,-14.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2885 type: ApcExtensionCable components: @@ -35783,8 +34405,6 @@ entities: pos: -3.5,-13.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2886 type: ApcExtensionCable components: @@ -35792,8 +34412,6 @@ entities: pos: -3.5,-12.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2887 type: ApcExtensionCable components: @@ -35801,8 +34419,6 @@ entities: pos: -2.5,-13.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2888 type: ApcExtensionCable components: @@ -35810,8 +34426,6 @@ entities: pos: -1.5,-13.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2889 type: ApcExtensionCable components: @@ -35819,8 +34433,6 @@ entities: pos: -1.5,-17.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2890 type: ApcExtensionCable components: @@ -35828,8 +34440,6 @@ entities: pos: -0.5,-17.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2891 type: ApcExtensionCable components: @@ -35837,8 +34447,6 @@ entities: pos: 0.5,-17.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2892 type: ApcExtensionCable components: @@ -35846,8 +34454,6 @@ entities: pos: -4.5,-14.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2893 type: ApcExtensionCable components: @@ -35855,8 +34461,6 @@ entities: pos: -4.5,-12.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2894 type: ApcExtensionCable components: @@ -35864,8 +34468,6 @@ entities: pos: -4.5,-17.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2895 type: ApcExtensionCable components: @@ -35873,8 +34475,6 @@ entities: pos: -5.5,-12.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2896 type: ApcExtensionCable components: @@ -35882,8 +34482,6 @@ entities: pos: -6.5,-12.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2897 type: ApcExtensionCable components: @@ -35891,8 +34489,6 @@ entities: pos: -5.5,-14.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2898 type: ApcExtensionCable components: @@ -35900,8 +34496,6 @@ entities: pos: -14.5,-16.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2899 type: ApcExtensionCable components: @@ -35909,8 +34503,6 @@ entities: pos: -14.5,-17.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2900 type: ApcExtensionCable components: @@ -35918,8 +34510,6 @@ entities: pos: -14.5,-18.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2901 type: ApcExtensionCable components: @@ -35927,8 +34517,6 @@ entities: pos: -14.5,-19.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2902 type: ApcExtensionCable components: @@ -35936,8 +34524,6 @@ entities: pos: -14.5,-20.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2903 type: ApcExtensionCable components: @@ -35945,8 +34531,6 @@ entities: pos: -14.5,-21.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2904 type: ApcExtensionCable components: @@ -35954,8 +34538,6 @@ entities: pos: -14.5,-22.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2905 type: ApcExtensionCable components: @@ -35963,8 +34545,6 @@ entities: pos: -14.5,-23.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2906 type: ApcExtensionCable components: @@ -35972,8 +34552,6 @@ entities: pos: -14.5,-24.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2907 type: ApcExtensionCable components: @@ -35981,8 +34559,6 @@ entities: pos: -14.5,-25.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2908 type: ApcExtensionCable components: @@ -35990,8 +34566,6 @@ entities: pos: -15.5,-25.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2909 type: ApcExtensionCable components: @@ -35999,8 +34573,6 @@ entities: pos: -16.5,-25.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2910 type: ApcExtensionCable components: @@ -36008,8 +34580,6 @@ entities: pos: -15.5,-22.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2911 type: ApcExtensionCable components: @@ -36017,8 +34587,6 @@ entities: pos: -16.5,-22.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2912 type: ApcExtensionCable components: @@ -36026,8 +34594,6 @@ entities: pos: -17.5,-22.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2913 type: ApcExtensionCable components: @@ -36035,8 +34601,6 @@ entities: pos: -1.5,-23.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2914 type: ApcExtensionCable components: @@ -36044,8 +34608,6 @@ entities: pos: -0.5,-23.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2915 type: ApcExtensionCable components: @@ -36053,8 +34615,6 @@ entities: pos: 0.5,-23.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2916 type: ApcExtensionCable components: @@ -36062,8 +34622,6 @@ entities: pos: 7.5,-17.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2917 type: ApcExtensionCable components: @@ -36071,8 +34629,6 @@ entities: pos: 7.5,-18.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2918 type: ApcExtensionCable components: @@ -36080,8 +34636,6 @@ entities: pos: 7.5,-19.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2919 type: ApcExtensionCable components: @@ -36089,8 +34643,6 @@ entities: pos: 8.5,-18.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2920 type: ApcExtensionCable components: @@ -36098,8 +34650,6 @@ entities: pos: 9.5,-18.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2921 type: ApcExtensionCable components: @@ -36107,8 +34657,6 @@ entities: pos: 10.5,-18.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2922 type: ApcExtensionCable components: @@ -36116,8 +34664,6 @@ entities: pos: 10.5,-19.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2923 type: ApcExtensionCable components: @@ -36125,8 +34671,6 @@ entities: pos: 11.5,-19.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2924 type: ApcExtensionCable components: @@ -36134,8 +34678,6 @@ entities: pos: 12.5,-19.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2925 type: ApcExtensionCable components: @@ -36143,8 +34685,6 @@ entities: pos: 13.5,-19.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2926 type: ApcExtensionCable components: @@ -36152,8 +34692,6 @@ entities: pos: 14.5,-19.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2927 type: ApcExtensionCable components: @@ -36161,8 +34699,6 @@ entities: pos: 15.5,-19.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2928 type: ApcExtensionCable components: @@ -36170,8 +34706,6 @@ entities: pos: 7.5,-16.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2929 type: ApcExtensionCable components: @@ -36179,8 +34713,6 @@ entities: pos: 7.5,-15.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2930 type: ApcExtensionCable components: @@ -36188,8 +34720,6 @@ entities: pos: 7.5,-14.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2931 type: ApcExtensionCable components: @@ -36197,8 +34727,6 @@ entities: pos: 7.5,-13.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2932 type: ApcExtensionCable components: @@ -36206,8 +34734,6 @@ entities: pos: 6.5,-13.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2933 type: ApcExtensionCable components: @@ -36215,8 +34741,6 @@ entities: pos: 5.5,-13.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2934 type: ApcExtensionCable components: @@ -36224,8 +34748,6 @@ entities: pos: 8.5,-13.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2935 type: ApcExtensionCable components: @@ -36233,8 +34755,6 @@ entities: pos: 9.5,-13.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2936 type: ApcExtensionCable components: @@ -36242,8 +34762,6 @@ entities: pos: 10.5,-13.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2937 type: ApcExtensionCable components: @@ -36251,8 +34769,6 @@ entities: pos: 11.5,-13.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2938 type: ApcExtensionCable components: @@ -36260,8 +34776,6 @@ entities: pos: 22.5,-4.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2939 type: ApcExtensionCable components: @@ -36269,8 +34783,6 @@ entities: pos: 22.5,-5.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2940 type: ApcExtensionCable components: @@ -36278,8 +34790,6 @@ entities: pos: 23.5,-4.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2941 type: ApcExtensionCable components: @@ -36287,8 +34797,6 @@ entities: pos: 24.5,-4.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2942 type: ApcExtensionCable components: @@ -36296,8 +34804,6 @@ entities: pos: 25.5,-4.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2943 type: ApcExtensionCable components: @@ -36305,8 +34811,6 @@ entities: pos: 22.5,-2.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2944 type: ApcExtensionCable components: @@ -36314,8 +34818,6 @@ entities: pos: 22.5,-1.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2945 type: ApcExtensionCable components: @@ -36323,8 +34825,6 @@ entities: pos: 22.5,-0.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2946 type: ApcExtensionCable components: @@ -36332,8 +34832,6 @@ entities: pos: 22.5,0.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2947 type: ApcExtensionCable components: @@ -36341,8 +34839,6 @@ entities: pos: 22.5,1.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2948 type: ApcExtensionCable components: @@ -36350,8 +34846,6 @@ entities: pos: 21.5,1.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2949 type: ApcExtensionCable components: @@ -36359,8 +34853,6 @@ entities: pos: 23.5,0.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2950 type: ApcExtensionCable components: @@ -36368,8 +34860,6 @@ entities: pos: 23.5,-1.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2951 type: ApcExtensionCable components: @@ -36377,8 +34867,6 @@ entities: pos: 24.5,-1.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2952 type: ApcExtensionCable components: @@ -36386,8 +34874,6 @@ entities: pos: 25.5,-1.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2953 type: ApcExtensionCable components: @@ -36395,8 +34881,6 @@ entities: pos: 22.5,-6.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2954 type: ApcExtensionCable components: @@ -36404,8 +34888,6 @@ entities: pos: 21.5,-6.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2955 type: ApcExtensionCable components: @@ -36413,8 +34895,6 @@ entities: pos: 20.5,-6.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2956 type: ApcExtensionCable components: @@ -36422,8 +34902,6 @@ entities: pos: 19.5,-6.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2957 type: ApcExtensionCable components: @@ -36431,8 +34909,6 @@ entities: pos: 18.5,-6.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2958 type: ApcExtensionCable components: @@ -36440,8 +34916,6 @@ entities: pos: 18.5,-5.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2959 type: ApcExtensionCable components: @@ -36449,8 +34923,6 @@ entities: pos: 18.5,-4.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2960 type: ApcExtensionCable components: @@ -36458,8 +34930,6 @@ entities: pos: 18.5,-7.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2961 type: ApcExtensionCable components: @@ -36467,8 +34937,6 @@ entities: pos: 18.5,-8.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2962 type: ApcExtensionCable components: @@ -36476,8 +34944,6 @@ entities: pos: 18.5,-9.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2963 type: ApcExtensionCable components: @@ -36485,8 +34951,6 @@ entities: pos: 18.5,-10.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2964 type: ApcExtensionCable components: @@ -36494,8 +34958,6 @@ entities: pos: 18.5,-11.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2965 type: ApcExtensionCable components: @@ -36503,8 +34965,6 @@ entities: pos: 18.5,-12.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2966 type: ApcExtensionCable components: @@ -36512,8 +34972,6 @@ entities: pos: 18.5,-13.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2967 type: ApcExtensionCable components: @@ -36521,8 +34979,6 @@ entities: pos: 18.5,-14.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2968 type: ApcExtensionCable components: @@ -36530,8 +34986,6 @@ entities: pos: 18.5,-15.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2969 type: ApcExtensionCable components: @@ -36539,8 +34993,6 @@ entities: pos: 18.5,-16.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2970 type: ApcExtensionCable components: @@ -36548,8 +35000,6 @@ entities: pos: 18.5,-17.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2971 type: ApcExtensionCable components: @@ -36557,8 +35007,6 @@ entities: pos: 18.5,-18.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2972 type: ApcExtensionCable components: @@ -36566,8 +35014,6 @@ entities: pos: 18.5,-19.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2973 type: ApcExtensionCable components: @@ -36575,8 +35021,6 @@ entities: pos: 18.5,-20.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2974 type: ApcExtensionCable components: @@ -36584,8 +35028,6 @@ entities: pos: 19.5,-13.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2975 type: ApcExtensionCable components: @@ -36593,8 +35035,6 @@ entities: pos: 20.5,-13.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2976 type: ApcExtensionCable components: @@ -36602,8 +35042,6 @@ entities: pos: 21.5,-13.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2977 type: ApcExtensionCable components: @@ -36611,8 +35049,6 @@ entities: pos: 22.5,-13.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2978 type: ApcExtensionCable components: @@ -36620,8 +35056,6 @@ entities: pos: 22.5,-13.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2979 type: ApcExtensionCable components: @@ -36629,8 +35063,6 @@ entities: pos: 23.5,-13.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2980 type: ApcExtensionCable components: @@ -36638,8 +35070,6 @@ entities: pos: 23.5,-14.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2981 type: ApcExtensionCable components: @@ -36647,8 +35077,6 @@ entities: pos: 8.5,-12.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2982 type: ApcExtensionCable components: @@ -36656,8 +35084,6 @@ entities: pos: 8.5,-11.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2983 type: ApcExtensionCable components: @@ -36665,8 +35091,6 @@ entities: pos: 7.5,-11.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2984 type: ApcExtensionCable components: @@ -36674,8 +35098,6 @@ entities: pos: 9.5,-11.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2985 type: ApcExtensionCable components: @@ -36683,8 +35105,6 @@ entities: pos: 10.5,-11.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2986 type: ApcExtensionCable components: @@ -36692,8 +35112,6 @@ entities: pos: 7.5,-7.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2987 type: ApcExtensionCable components: @@ -36701,8 +35119,6 @@ entities: pos: 8.5,-7.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2988 type: ApcExtensionCable components: @@ -36710,8 +35126,6 @@ entities: pos: 9.5,-7.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2989 type: ApcExtensionCable components: @@ -36719,8 +35133,6 @@ entities: pos: 10.5,-7.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2990 type: ApcExtensionCable components: @@ -36728,8 +35140,6 @@ entities: pos: 11.5,-7.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2991 type: ApcExtensionCable components: @@ -36737,8 +35147,6 @@ entities: pos: 12.5,-7.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2992 type: ApcExtensionCable components: @@ -36746,8 +35154,6 @@ entities: pos: 13.5,-7.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2993 type: ApcExtensionCable components: @@ -36755,8 +35161,6 @@ entities: pos: 14.5,-7.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2994 type: ApcExtensionCable components: @@ -36764,8 +35168,6 @@ entities: pos: 15.5,-7.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2995 type: ApcExtensionCable components: @@ -36773,8 +35175,6 @@ entities: pos: 16.5,-7.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2996 type: ApcExtensionCable components: @@ -36782,8 +35182,6 @@ entities: pos: 17.5,-7.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2997 type: ApcExtensionCable components: @@ -36791,8 +35189,6 @@ entities: pos: 18.5,-7.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2998 type: ApcExtensionCable components: @@ -36800,8 +35196,6 @@ entities: pos: 17.5,-17.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 2999 type: ApcExtensionCable components: @@ -36809,8 +35203,6 @@ entities: pos: 16.5,-17.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3000 type: ApcExtensionCable components: @@ -36818,8 +35210,6 @@ entities: pos: 15.5,-17.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3001 type: ApcExtensionCable components: @@ -36827,8 +35217,6 @@ entities: pos: 16.5,2.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3002 type: ApcExtensionCable components: @@ -36836,8 +35224,6 @@ entities: pos: 16.5,1.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3003 type: ApcExtensionCable components: @@ -36845,8 +35231,6 @@ entities: pos: 17.5,1.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3004 type: ApcExtensionCable components: @@ -36854,8 +35238,6 @@ entities: pos: 18.5,1.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3005 type: ApcExtensionCable components: @@ -36863,8 +35245,6 @@ entities: pos: 15.5,1.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3006 type: ApcExtensionCable components: @@ -36872,8 +35252,6 @@ entities: pos: 14.5,1.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3007 type: ApcExtensionCable components: @@ -36881,8 +35259,6 @@ entities: pos: 13.5,1.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3008 type: ApcExtensionCable components: @@ -36890,8 +35266,6 @@ entities: pos: 12.5,1.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3009 type: ApcExtensionCable components: @@ -36899,8 +35273,6 @@ entities: pos: 11.5,1.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3010 type: ApcExtensionCable components: @@ -36908,8 +35280,6 @@ entities: pos: 10.5,1.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3011 type: ApcExtensionCable components: @@ -36917,8 +35287,6 @@ entities: pos: 9.5,1.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3012 type: ApcExtensionCable components: @@ -36926,8 +35294,6 @@ entities: pos: 8.5,1.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3013 type: ApcExtensionCable components: @@ -36935,8 +35301,6 @@ entities: pos: 7.5,1.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3014 type: ApcExtensionCable components: @@ -36944,8 +35308,6 @@ entities: pos: 6.5,1.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3015 type: ApcExtensionCable components: @@ -36953,8 +35315,6 @@ entities: pos: 16.5,0.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3016 type: ApcExtensionCable components: @@ -36962,8 +35322,6 @@ entities: pos: 16.5,-0.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3017 type: ApcExtensionCable components: @@ -36971,8 +35329,6 @@ entities: pos: 17.5,-0.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3018 type: ApcExtensionCable components: @@ -36980,8 +35336,6 @@ entities: pos: 18.5,-0.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3019 type: ApcExtensionCable components: @@ -36989,8 +35343,6 @@ entities: pos: 9.5,0.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3020 type: ApcExtensionCable components: @@ -36998,8 +35350,6 @@ entities: pos: 9.5,-0.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3021 type: ApcExtensionCable components: @@ -37007,8 +35357,6 @@ entities: pos: 9.5,-1.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3022 type: ApcExtensionCable components: @@ -37016,8 +35364,6 @@ entities: pos: 9.5,-2.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3023 type: ApcExtensionCable components: @@ -37025,8 +35371,6 @@ entities: pos: 9.5,-3.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3024 type: ApcExtensionCable components: @@ -37034,8 +35378,6 @@ entities: pos: 9.5,-4.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3025 type: ApcExtensionCable components: @@ -37043,8 +35385,6 @@ entities: pos: 8.5,-4.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3026 type: ApcExtensionCable components: @@ -37052,8 +35392,6 @@ entities: pos: 7.5,-4.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3027 type: ApcExtensionCable components: @@ -37061,8 +35399,6 @@ entities: pos: 6.5,-4.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3028 type: ApcExtensionCable components: @@ -37070,8 +35406,6 @@ entities: pos: 10.5,-2.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3029 type: ApcExtensionCable components: @@ -37079,8 +35413,6 @@ entities: pos: 11.5,-2.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3030 type: ApcExtensionCable components: @@ -37088,8 +35420,6 @@ entities: pos: 6.5,-17.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3031 type: ApcExtensionCable components: @@ -37097,8 +35427,6 @@ entities: pos: 1.5,-23.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3032 type: ApcExtensionCable components: @@ -37106,8 +35434,6 @@ entities: pos: 2.5,-23.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3033 type: ApcExtensionCable components: @@ -37115,8 +35441,6 @@ entities: pos: 3.5,-23.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3034 type: ApcExtensionCable components: @@ -37124,8 +35448,6 @@ entities: pos: 3.5,-22.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3035 type: ApcExtensionCable components: @@ -37133,8 +35455,6 @@ entities: pos: 3.5,-21.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3036 type: ApcExtensionCable components: @@ -37142,8 +35462,6 @@ entities: pos: 2.5,-21.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3037 type: ApcExtensionCable components: @@ -37151,8 +35469,6 @@ entities: pos: 4.5,-21.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3038 type: ApcExtensionCable components: @@ -37160,8 +35476,6 @@ entities: pos: 22.5,-3.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3039 type: ApcExtensionCable components: @@ -37169,8 +35483,6 @@ entities: pos: 31.5,1.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3040 type: ApcExtensionCable components: @@ -37178,8 +35490,6 @@ entities: pos: 31.5,0.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3041 type: ApcExtensionCable components: @@ -37187,8 +35497,6 @@ entities: pos: 31.5,-0.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3042 type: ApcExtensionCable components: @@ -37196,8 +35504,6 @@ entities: pos: 31.5,-1.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3043 type: ApcExtensionCable components: @@ -37205,8 +35511,6 @@ entities: pos: 31.5,-3.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3044 type: ApcExtensionCable components: @@ -37214,8 +35518,6 @@ entities: pos: 31.5,-2.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3045 type: ApcExtensionCable components: @@ -37223,8 +35525,6 @@ entities: pos: 30.5,-2.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3046 type: ApcExtensionCable components: @@ -37232,8 +35532,6 @@ entities: pos: 29.5,-2.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3047 type: ApcExtensionCable components: @@ -37241,8 +35539,6 @@ entities: pos: 32.5,-2.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3048 type: ApcExtensionCable components: @@ -37250,8 +35546,6 @@ entities: pos: 33.5,-2.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3049 type: ApcExtensionCable components: @@ -37259,8 +35553,6 @@ entities: pos: 34.5,-2.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3050 type: ApcExtensionCable components: @@ -37268,8 +35560,6 @@ entities: pos: 35.5,-2.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3051 type: ApcExtensionCable components: @@ -37277,8 +35567,6 @@ entities: pos: 31.5,1.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3052 type: ApcExtensionCable components: @@ -37286,8 +35574,6 @@ entities: pos: 31.5,2.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3053 type: ApcExtensionCable components: @@ -37295,8 +35581,6 @@ entities: pos: 31.5,3.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3054 type: ApcExtensionCable components: @@ -37304,8 +35588,6 @@ entities: pos: 31.5,4.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3055 type: ApcExtensionCable components: @@ -37313,8 +35595,6 @@ entities: pos: 32.5,4.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3056 type: ApcExtensionCable components: @@ -37322,8 +35602,6 @@ entities: pos: 33.5,4.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3057 type: ApcExtensionCable components: @@ -37331,8 +35609,6 @@ entities: pos: 34.5,4.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3058 type: ApcExtensionCable components: @@ -37340,8 +35616,6 @@ entities: pos: 35.5,4.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3059 type: ApcExtensionCable components: @@ -37349,8 +35623,6 @@ entities: pos: 36.5,4.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3060 type: ApcExtensionCable components: @@ -37358,8 +35630,6 @@ entities: pos: 37.5,4.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3061 type: ApcExtensionCable components: @@ -37367,8 +35637,6 @@ entities: pos: 38.5,4.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3062 type: ApcExtensionCable components: @@ -37376,8 +35644,6 @@ entities: pos: 38.5,3.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3063 type: ApcExtensionCable components: @@ -37385,8 +35651,6 @@ entities: pos: 38.5,2.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3064 type: ApcExtensionCable components: @@ -37394,8 +35658,6 @@ entities: pos: 38.5,1.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3065 type: ApcExtensionCable components: @@ -37403,8 +35665,6 @@ entities: pos: 38.5,0.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3066 type: ApcExtensionCable components: @@ -37412,8 +35672,6 @@ entities: pos: 38.5,-0.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3067 type: ApcExtensionCable components: @@ -37421,8 +35679,6 @@ entities: pos: 38.5,-1.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3068 type: ApcExtensionCable components: @@ -37430,8 +35686,6 @@ entities: pos: 43.5,10.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3069 type: ApcExtensionCable components: @@ -37439,8 +35693,6 @@ entities: pos: 43.5,9.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3070 type: ApcExtensionCable components: @@ -37448,8 +35700,6 @@ entities: pos: 42.5,9.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3071 type: ApcExtensionCable components: @@ -37457,8 +35707,6 @@ entities: pos: 41.5,9.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3072 type: ApcExtensionCable components: @@ -37466,8 +35714,6 @@ entities: pos: 39.5,9.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3073 type: ApcExtensionCable components: @@ -37475,8 +35721,6 @@ entities: pos: 38.5,9.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3074 type: ApcExtensionCable components: @@ -37484,8 +35728,6 @@ entities: pos: 40.5,9.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3075 type: ApcExtensionCable components: @@ -37493,8 +35735,6 @@ entities: pos: 38.5,8.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3076 type: ApcExtensionCable components: @@ -37502,8 +35742,6 @@ entities: pos: 38.5,7.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3077 type: ApcExtensionCable components: @@ -37511,8 +35749,6 @@ entities: pos: 38.5,6.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3078 type: ApcExtensionCable components: @@ -37520,8 +35756,6 @@ entities: pos: 44.5,9.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3079 type: ApcExtensionCable components: @@ -37529,8 +35763,6 @@ entities: pos: 44.5,8.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3080 type: ApcExtensionCable components: @@ -37538,8 +35770,6 @@ entities: pos: 44.5,7.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3081 type: ApcExtensionCable components: @@ -37547,8 +35777,6 @@ entities: pos: 44.5,6.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3082 type: ApcExtensionCable components: @@ -37556,8 +35784,6 @@ entities: pos: 44.5,5.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3083 type: ApcExtensionCable components: @@ -37565,8 +35791,6 @@ entities: pos: 44.5,4.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3084 type: ApcExtensionCable components: @@ -37574,8 +35798,6 @@ entities: pos: 45.5,4.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3085 type: ApcExtensionCable components: @@ -37583,8 +35805,6 @@ entities: pos: 46.5,4.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3086 type: ApcExtensionCable components: @@ -37592,8 +35812,6 @@ entities: pos: 47.5,4.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3087 type: ApcExtensionCable components: @@ -37601,8 +35819,6 @@ entities: pos: 48.5,4.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3088 type: ApcExtensionCable components: @@ -37610,8 +35826,6 @@ entities: pos: 49.5,4.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3089 type: ApcExtensionCable components: @@ -37619,8 +35833,6 @@ entities: pos: 33.5,-3.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3090 type: ApcExtensionCable components: @@ -37628,8 +35840,6 @@ entities: pos: 33.5,-4.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3091 type: ApcExtensionCable components: @@ -37637,8 +35847,6 @@ entities: pos: 43.5,4.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3092 type: ApcExtensionCable components: @@ -37646,8 +35854,6 @@ entities: pos: 43.5,3.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3093 type: ApcExtensionCable components: @@ -37655,8 +35861,6 @@ entities: pos: 43.5,2.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3094 type: ApcExtensionCable components: @@ -37664,8 +35868,6 @@ entities: pos: 43.5,1.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3095 type: ApcExtensionCable components: @@ -37673,8 +35875,6 @@ entities: pos: 43.5,0.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3096 type: ApcExtensionCable components: @@ -37682,8 +35882,6 @@ entities: pos: 43.5,-0.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3097 type: ApcExtensionCable components: @@ -37691,8 +35889,6 @@ entities: pos: 43.5,-1.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3098 type: ApcExtensionCable components: @@ -37700,8 +35896,6 @@ entities: pos: 43.5,-2.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3099 type: ApcExtensionCable components: @@ -37709,8 +35903,6 @@ entities: pos: 43.5,-3.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3100 type: ApcExtensionCable components: @@ -37718,8 +35910,6 @@ entities: pos: 42.5,-3.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3101 type: ApcExtensionCable components: @@ -37727,8 +35917,6 @@ entities: pos: 41.5,-3.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3102 type: ApcExtensionCable components: @@ -37736,8 +35924,6 @@ entities: pos: 40.5,-3.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3103 type: ApcExtensionCable components: @@ -37745,8 +35931,6 @@ entities: pos: 39.5,-3.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3104 type: ApcExtensionCable components: @@ -37754,8 +35938,6 @@ entities: pos: 38.5,-3.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3105 type: ApcExtensionCable components: @@ -37763,8 +35945,6 @@ entities: pos: 37.5,-3.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3106 type: ApcExtensionCable components: @@ -37772,8 +35952,6 @@ entities: pos: 37.5,-4.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3107 type: ApcExtensionCable components: @@ -37781,8 +35959,6 @@ entities: pos: 37.5,-5.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3108 type: ApcExtensionCable components: @@ -37790,8 +35966,6 @@ entities: pos: 37.5,-6.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3109 type: ApcExtensionCable components: @@ -37799,8 +35973,6 @@ entities: pos: 36.5,-6.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3110 type: ApcExtensionCable components: @@ -37808,8 +35980,6 @@ entities: pos: 35.5,-6.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3111 type: ApcExtensionCable components: @@ -37817,8 +35987,6 @@ entities: pos: 34.5,-6.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3112 type: ApcExtensionCable components: @@ -37826,8 +35994,6 @@ entities: pos: 33.5,-6.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3113 type: ApcExtensionCable components: @@ -37835,8 +36001,6 @@ entities: pos: 32.5,-6.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3114 type: ApcExtensionCable components: @@ -37844,8 +36008,6 @@ entities: pos: 31.5,-6.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3115 type: ApcExtensionCable components: @@ -37853,8 +36015,6 @@ entities: pos: 30.5,-6.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3116 type: ApcExtensionCable components: @@ -37862,8 +36022,6 @@ entities: pos: 29.5,-6.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3117 type: ApcExtensionCable components: @@ -37871,8 +36029,6 @@ entities: pos: 28.5,-6.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3118 type: ApcExtensionCable components: @@ -37880,8 +36036,6 @@ entities: pos: 27.5,-6.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3119 type: ApcExtensionCable components: @@ -37889,8 +36043,6 @@ entities: pos: 27.5,-7.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3120 type: ApcExtensionCable components: @@ -37898,8 +36050,6 @@ entities: pos: 27.5,-8.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3121 type: ApcExtensionCable components: @@ -37907,8 +36057,6 @@ entities: pos: 27.5,-9.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3122 type: ApcExtensionCable components: @@ -37916,8 +36064,6 @@ entities: pos: 27.5,-10.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3123 type: ApcExtensionCable components: @@ -37925,8 +36071,6 @@ entities: pos: 27.5,-11.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3124 type: ApcExtensionCable components: @@ -37934,8 +36078,6 @@ entities: pos: 27.5,-12.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3125 type: ApcExtensionCable components: @@ -37943,8 +36085,6 @@ entities: pos: 27.5,-13.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3126 type: ApcExtensionCable components: @@ -37952,8 +36092,6 @@ entities: pos: 27.5,-14.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3127 type: ApcExtensionCable components: @@ -37961,8 +36099,6 @@ entities: pos: 27.5,-15.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3128 type: ApcExtensionCable components: @@ -37970,8 +36106,6 @@ entities: pos: 27.5,-16.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3129 type: ApcExtensionCable components: @@ -37979,8 +36113,6 @@ entities: pos: 27.5,-17.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3130 type: ApcExtensionCable components: @@ -37988,8 +36120,6 @@ entities: pos: 27.5,-18.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3131 type: ApcExtensionCable components: @@ -37997,8 +36127,6 @@ entities: pos: 26.5,-18.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3132 type: ApcExtensionCable components: @@ -38006,8 +36134,6 @@ entities: pos: 25.5,-18.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3133 type: ApcExtensionCable components: @@ -38015,8 +36141,6 @@ entities: pos: 24.5,-18.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3134 type: ApcExtensionCable components: @@ -38024,8 +36148,6 @@ entities: pos: 47.5,-1.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3135 type: ApcExtensionCable components: @@ -38033,8 +36155,6 @@ entities: pos: 47.5,-2.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3136 type: ApcExtensionCable components: @@ -38042,8 +36162,6 @@ entities: pos: 47.5,-3.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3137 type: ApcExtensionCable components: @@ -38051,8 +36169,6 @@ entities: pos: 48.5,-2.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3138 type: ApcExtensionCable components: @@ -38060,8 +36176,6 @@ entities: pos: 49.5,-2.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3139 type: ApcExtensionCable components: @@ -38069,8 +36183,6 @@ entities: pos: 50.5,-2.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3140 type: ApcExtensionCable components: @@ -38078,8 +36190,6 @@ entities: pos: 51.5,-2.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3141 type: ApcExtensionCable components: @@ -38087,8 +36197,6 @@ entities: pos: 51.5,-3.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3142 type: ApcExtensionCable components: @@ -38096,8 +36204,6 @@ entities: pos: 51.5,-4.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3143 type: ApcExtensionCable components: @@ -38105,8 +36211,6 @@ entities: pos: 41.5,10.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3144 type: ApcExtensionCable components: @@ -38114,8 +36218,6 @@ entities: pos: 41.5,11.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3145 type: ApcExtensionCable components: @@ -38123,8 +36225,6 @@ entities: pos: 41.5,12.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3146 type: ApcExtensionCable components: @@ -38132,8 +36232,6 @@ entities: pos: 41.5,13.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3147 type: ApcExtensionCable components: @@ -38141,8 +36239,6 @@ entities: pos: 28.5,14.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3148 type: ApcExtensionCable components: @@ -38150,8 +36246,6 @@ entities: pos: 28.5,13.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3149 type: ApcExtensionCable components: @@ -38159,8 +36253,6 @@ entities: pos: 28.5,12.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3150 type: ApcExtensionCable components: @@ -38168,8 +36260,6 @@ entities: pos: 28.5,11.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3151 type: ApcExtensionCable components: @@ -38177,8 +36267,6 @@ entities: pos: 28.5,10.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3152 type: ApcExtensionCable components: @@ -38186,8 +36274,6 @@ entities: pos: 29.5,10.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3153 type: ApcExtensionCable components: @@ -38195,8 +36281,6 @@ entities: pos: 28.5,9.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3154 type: ApcExtensionCable components: @@ -38204,8 +36288,6 @@ entities: pos: 27.5,9.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3155 type: ApcExtensionCable components: @@ -38213,8 +36295,6 @@ entities: pos: 26.5,9.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3156 type: ApcExtensionCable components: @@ -38222,8 +36302,6 @@ entities: pos: 25.5,9.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3157 type: ApcExtensionCable components: @@ -38231,8 +36309,6 @@ entities: pos: 26.5,10.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3158 type: ApcExtensionCable components: @@ -38240,8 +36316,6 @@ entities: pos: 26.5,11.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3159 type: ApcExtensionCable components: @@ -38249,8 +36323,6 @@ entities: pos: 27.5,8.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3160 type: ApcExtensionCable components: @@ -38258,8 +36330,6 @@ entities: pos: 27.5,7.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3161 type: ApcExtensionCable components: @@ -38267,8 +36337,6 @@ entities: pos: 30.5,10.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3162 type: ApcExtensionCable components: @@ -38276,8 +36344,6 @@ entities: pos: 31.5,10.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3163 type: ApcExtensionCable components: @@ -38285,8 +36351,6 @@ entities: pos: 32.5,10.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3164 type: ApcExtensionCable components: @@ -38294,8 +36358,6 @@ entities: pos: 33.5,10.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3165 type: ApcExtensionCable components: @@ -38303,8 +36365,6 @@ entities: pos: 34.5,10.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3166 type: ApcExtensionCable components: @@ -38312,8 +36372,6 @@ entities: pos: 35.5,10.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3167 type: ApcExtensionCable components: @@ -38321,8 +36379,6 @@ entities: pos: 36.5,10.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3168 type: ApcExtensionCable components: @@ -38330,8 +36386,6 @@ entities: pos: 30.5,9.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3169 type: ApcExtensionCable components: @@ -38339,8 +36393,6 @@ entities: pos: 33.5,9.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3170 type: ApcExtensionCable components: @@ -38348,8 +36400,6 @@ entities: pos: 35.5,9.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3171 type: ApcExtensionCable components: @@ -38357,8 +36407,6 @@ entities: pos: 35.5,8.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3172 type: ApcExtensionCable components: @@ -38366,8 +36414,6 @@ entities: pos: 35.5,7.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3173 type: ApcExtensionCable components: @@ -38375,8 +36421,6 @@ entities: pos: 36.5,11.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3174 type: ApcExtensionCable components: @@ -38384,8 +36428,6 @@ entities: pos: 36.5,12.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3175 type: ApcExtensionCable components: @@ -38393,8 +36435,6 @@ entities: pos: 30.5,11.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3176 type: ApcExtensionCable components: @@ -38402,8 +36442,6 @@ entities: pos: 30.5,12.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3177 type: ApcExtensionCable components: @@ -38411,8 +36449,6 @@ entities: pos: 24.5,14.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3178 type: ApcExtensionCable components: @@ -38420,8 +36456,6 @@ entities: pos: 24.5,13.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3179 type: ApcExtensionCable components: @@ -38429,8 +36463,6 @@ entities: pos: 23.5,13.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3180 type: ApcExtensionCable components: @@ -38438,8 +36470,6 @@ entities: pos: 22.5,13.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3181 type: ApcExtensionCable components: @@ -38447,8 +36477,6 @@ entities: pos: 22.5,14.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3182 type: ApcExtensionCable components: @@ -38456,8 +36484,6 @@ entities: pos: 22.5,14.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3183 type: ApcExtensionCable components: @@ -38465,8 +36491,6 @@ entities: pos: 22.5,15.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3184 type: ApcExtensionCable components: @@ -38474,8 +36498,6 @@ entities: pos: 21.5,13.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3185 type: ApcExtensionCable components: @@ -38483,8 +36505,6 @@ entities: pos: 20.5,13.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3186 type: ApcExtensionCable components: @@ -38492,8 +36512,6 @@ entities: pos: 20.5,14.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3187 type: ApcExtensionCable components: @@ -38501,8 +36519,6 @@ entities: pos: 20.5,15.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3188 type: ApcExtensionCable components: @@ -38510,8 +36526,6 @@ entities: pos: 19.5,13.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3189 type: ApcExtensionCable components: @@ -38519,8 +36533,6 @@ entities: pos: 18.5,13.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3190 type: ApcExtensionCable components: @@ -38528,8 +36540,6 @@ entities: pos: 21.5,12.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3191 type: ApcExtensionCable components: @@ -38537,8 +36547,6 @@ entities: pos: 21.5,11.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3192 type: ApcExtensionCable components: @@ -38546,8 +36554,6 @@ entities: pos: 21.5,10.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3193 type: ApcExtensionCable components: @@ -38555,8 +36561,6 @@ entities: pos: 21.5,9.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3194 type: ApcExtensionCable components: @@ -38564,8 +36568,6 @@ entities: pos: 21.5,8.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3195 type: ApcExtensionCable components: @@ -38573,8 +36575,6 @@ entities: pos: 22.5,8.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3196 type: ApcExtensionCable components: @@ -38582,8 +36582,6 @@ entities: pos: 23.5,8.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3197 type: ApcExtensionCable components: @@ -38591,8 +36589,6 @@ entities: pos: 20.5,8.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3198 type: ApcExtensionCable components: @@ -38600,8 +36596,6 @@ entities: pos: 19.5,8.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3199 type: ApcExtensionCable components: @@ -38609,8 +36603,6 @@ entities: pos: 18.5,8.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3200 type: ApcExtensionCable components: @@ -38618,8 +36610,6 @@ entities: pos: 17.5,8.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3201 type: ApcExtensionCable components: @@ -38627,8 +36617,6 @@ entities: pos: 18.5,12.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3202 type: ApcExtensionCable components: @@ -38636,8 +36624,6 @@ entities: pos: 18.5,11.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3203 type: ApcExtensionCable components: @@ -38645,8 +36631,6 @@ entities: pos: 12.5,13.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3204 type: ApcExtensionCable components: @@ -38654,8 +36638,6 @@ entities: pos: 12.5,12.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3205 type: ApcExtensionCable components: @@ -38663,8 +36645,6 @@ entities: pos: 12.5,11.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3206 type: ApcExtensionCable components: @@ -38672,8 +36652,6 @@ entities: pos: 12.5,10.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3207 type: ApcExtensionCable components: @@ -38681,8 +36659,6 @@ entities: pos: 13.5,10.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3208 type: ApcExtensionCable components: @@ -38690,8 +36666,6 @@ entities: pos: 14.5,10.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3209 type: ApcExtensionCable components: @@ -38699,8 +36673,6 @@ entities: pos: 15.5,10.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3210 type: ApcExtensionCable components: @@ -38708,8 +36680,6 @@ entities: pos: 16.5,10.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3211 type: ApcExtensionCable components: @@ -38717,8 +36687,6 @@ entities: pos: 15.5,11.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3212 type: ApcExtensionCable components: @@ -38726,8 +36694,6 @@ entities: pos: 13.5,9.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3213 type: ApcExtensionCable components: @@ -38735,8 +36701,6 @@ entities: pos: 11.5,10.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3214 type: ApcExtensionCable components: @@ -38744,8 +36708,6 @@ entities: pos: 10.5,10.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3215 type: ApcExtensionCable components: @@ -38753,8 +36715,6 @@ entities: pos: 9.5,10.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3216 type: ApcExtensionCable components: @@ -38762,8 +36722,6 @@ entities: pos: 8.5,10.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3217 type: ApcExtensionCable components: @@ -38771,8 +36729,6 @@ entities: pos: 7.5,10.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3218 type: ApcExtensionCable components: @@ -38780,8 +36736,6 @@ entities: pos: 6.5,10.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3219 type: ApcExtensionCable components: @@ -38789,8 +36743,6 @@ entities: pos: 8.5,11.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3220 type: ApcExtensionCable components: @@ -38798,8 +36750,6 @@ entities: pos: 8.5,9.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3221 type: ApcExtensionCable components: @@ -38807,8 +36757,6 @@ entities: pos: 8.5,8.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3222 type: ApcExtensionCable components: @@ -38816,8 +36764,6 @@ entities: pos: 8.5,7.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3223 type: ApcExtensionCable components: @@ -38825,8 +36771,6 @@ entities: pos: 8.5,6.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3224 type: ApcExtensionCable components: @@ -38834,8 +36778,6 @@ entities: pos: 12.5,13.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3225 type: ApcExtensionCable components: @@ -38843,8 +36785,6 @@ entities: pos: 12.5,14.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3226 type: ApcExtensionCable components: @@ -38852,8 +36792,6 @@ entities: pos: 11.5,14.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3227 type: ApcExtensionCable components: @@ -38861,8 +36799,6 @@ entities: pos: 10.5,14.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3228 type: ApcExtensionCable components: @@ -38870,8 +36806,6 @@ entities: pos: 9.5,14.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3229 type: ApcExtensionCable components: @@ -38879,8 +36813,6 @@ entities: pos: 8.5,14.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3230 type: ApcExtensionCable components: @@ -38888,8 +36820,6 @@ entities: pos: 7.5,14.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3231 type: ApcExtensionCable components: @@ -38897,8 +36827,6 @@ entities: pos: 6.5,14.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3232 type: ApcExtensionCable components: @@ -38906,8 +36834,6 @@ entities: pos: 12.5,14.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3233 type: ApcExtensionCable components: @@ -38915,8 +36841,6 @@ entities: pos: 13.5,14.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3234 type: ApcExtensionCable components: @@ -38924,8 +36848,6 @@ entities: pos: 14.5,14.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3235 type: ApcExtensionCable components: @@ -38933,8 +36855,6 @@ entities: pos: 15.5,14.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3236 type: ApcExtensionCable components: @@ -38942,8 +36862,6 @@ entities: pos: 15.5,15.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3237 type: ApcExtensionCable components: @@ -38951,8 +36869,6 @@ entities: pos: 13.5,16.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3238 type: ApcExtensionCable components: @@ -38960,8 +36876,6 @@ entities: pos: 13.5,15.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3239 type: ApcExtensionCable components: @@ -38969,8 +36883,6 @@ entities: pos: 9.5,22.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3240 type: ApcExtensionCable components: @@ -38978,8 +36890,6 @@ entities: pos: 9.5,21.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3241 type: ApcExtensionCable components: @@ -38987,8 +36897,6 @@ entities: pos: 9.5,20.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3242 type: ApcExtensionCable components: @@ -38996,8 +36904,6 @@ entities: pos: 9.5,19.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3243 type: ApcExtensionCable components: @@ -39005,8 +36911,6 @@ entities: pos: 9.5,18.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3244 type: ApcExtensionCable components: @@ -39014,8 +36918,6 @@ entities: pos: 9.5,17.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3245 type: ApcExtensionCable components: @@ -39023,8 +36925,6 @@ entities: pos: 9.5,16.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3246 type: ApcExtensionCable components: @@ -39032,8 +36932,6 @@ entities: pos: 10.5,20.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3247 type: ApcExtensionCable components: @@ -39041,8 +36939,6 @@ entities: pos: 8.5,17.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3248 type: ApcExtensionCable components: @@ -39050,8 +36946,6 @@ entities: pos: 8.5,17.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3249 type: ApcExtensionCable components: @@ -39059,8 +36953,6 @@ entities: pos: 7.5,17.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3250 type: ApcExtensionCable components: @@ -39068,8 +36960,6 @@ entities: pos: 8.5,20.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3251 type: ApcExtensionCable components: @@ -39077,8 +36967,6 @@ entities: pos: 6.5,17.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3252 type: ApcExtensionCable components: @@ -39086,8 +36974,6 @@ entities: pos: 5.5,17.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3253 type: ApcExtensionCable components: @@ -39095,8 +36981,6 @@ entities: pos: 5.5,16.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3254 type: ApcExtensionCable components: @@ -39104,8 +36988,6 @@ entities: pos: 4.5,17.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3255 type: ApcExtensionCable components: @@ -39113,8 +36995,6 @@ entities: pos: 3.5,17.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3256 type: ApcExtensionCable components: @@ -39122,8 +37002,6 @@ entities: pos: 3.5,18.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3257 type: ApcExtensionCable components: @@ -39131,8 +37009,6 @@ entities: pos: 3.5,19.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3258 type: ApcExtensionCable components: @@ -39140,8 +37016,6 @@ entities: pos: 3.5,20.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3259 type: ApcExtensionCable components: @@ -39149,8 +37023,6 @@ entities: pos: 3.5,20.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3260 type: ApcExtensionCable components: @@ -39158,8 +37030,6 @@ entities: pos: 3.5,21.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3261 type: ApcExtensionCable components: @@ -39167,8 +37037,6 @@ entities: pos: 3.5,22.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3262 type: ApcExtensionCable components: @@ -39176,8 +37044,6 @@ entities: pos: 2.5,20.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3263 type: ApcExtensionCable components: @@ -39185,8 +37051,6 @@ entities: pos: 1.5,20.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3264 type: ApcExtensionCable components: @@ -39194,8 +37058,6 @@ entities: pos: 9.5,27.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3265 type: ApcExtensionCable components: @@ -39203,8 +37065,6 @@ entities: pos: 9.5,26.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3266 type: ApcExtensionCable components: @@ -39212,8 +37072,6 @@ entities: pos: 9.5,25.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3267 type: ApcExtensionCable components: @@ -39221,8 +37079,6 @@ entities: pos: 9.5,24.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3268 type: ApcExtensionCable components: @@ -39230,8 +37086,6 @@ entities: pos: 8.5,24.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3269 type: ApcExtensionCable components: @@ -39239,8 +37093,6 @@ entities: pos: 7.5,24.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3270 type: ApcExtensionCable components: @@ -39248,8 +37100,6 @@ entities: pos: 6.5,24.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3271 type: ApcExtensionCable components: @@ -39257,8 +37107,6 @@ entities: pos: 9.5,28.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3272 type: ApcExtensionCable components: @@ -39266,8 +37114,6 @@ entities: pos: 9.5,29.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3273 type: ApcExtensionCable components: @@ -39275,8 +37121,6 @@ entities: pos: 9.5,30.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3274 type: ApcExtensionCable components: @@ -39284,8 +37128,6 @@ entities: pos: 8.5,30.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3275 type: ApcExtensionCable components: @@ -39293,8 +37135,6 @@ entities: pos: 7.5,30.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3276 type: ApcExtensionCable components: @@ -39302,8 +37142,6 @@ entities: pos: 6.5,30.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3277 type: ApcExtensionCable components: @@ -39311,8 +37149,6 @@ entities: pos: 6.5,31.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3278 type: ApcExtensionCable components: @@ -39320,8 +37156,6 @@ entities: pos: -2.5,27.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3279 type: ApcExtensionCable components: @@ -39329,8 +37163,6 @@ entities: pos: -2.5,28.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3280 type: ApcExtensionCable components: @@ -39338,8 +37170,6 @@ entities: pos: -2.5,29.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3281 type: ApcExtensionCable components: @@ -39347,8 +37177,6 @@ entities: pos: -2.5,30.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3282 type: ApcExtensionCable components: @@ -39356,8 +37184,6 @@ entities: pos: -1.5,30.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3283 type: ApcExtensionCable components: @@ -39365,8 +37191,6 @@ entities: pos: -0.5,30.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3284 type: ApcExtensionCable components: @@ -39374,8 +37198,6 @@ entities: pos: 0.5,30.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3285 type: ApcExtensionCable components: @@ -39383,8 +37205,6 @@ entities: pos: 1.5,30.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3286 type: ApcExtensionCable components: @@ -39392,8 +37212,6 @@ entities: pos: 2.5,30.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3287 type: ApcExtensionCable components: @@ -39401,8 +37219,6 @@ entities: pos: 3.5,30.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3288 type: ApcExtensionCable components: @@ -39410,8 +37226,6 @@ entities: pos: 0.5,31.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3289 type: ApcExtensionCable components: @@ -39419,8 +37233,6 @@ entities: pos: 3.5,31.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3290 type: ApcExtensionCable components: @@ -39428,8 +37240,6 @@ entities: pos: -2.5,26.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3291 type: ApcExtensionCable components: @@ -39437,8 +37247,6 @@ entities: pos: -2.5,25.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3292 type: ApcExtensionCable components: @@ -39446,8 +37254,6 @@ entities: pos: -1.5,25.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3293 type: ApcExtensionCable components: @@ -39455,8 +37261,6 @@ entities: pos: -0.5,25.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3294 type: ApcExtensionCable components: @@ -39464,8 +37268,6 @@ entities: pos: 0.5,25.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3295 type: ApcExtensionCable components: @@ -39473,8 +37275,6 @@ entities: pos: 0.5,24.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3296 type: ApcExtensionCable components: @@ -39482,8 +37282,6 @@ entities: pos: -2.5,24.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3297 type: ApcExtensionCable components: @@ -39491,8 +37289,6 @@ entities: pos: -2.5,23.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3298 type: ApcExtensionCable components: @@ -39500,8 +37296,6 @@ entities: pos: -1.5,23.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3299 type: SalternSmes components: @@ -39523,8 +37317,6 @@ entities: pos: 41.5,6.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3302 type: HVWire components: @@ -39532,8 +37324,6 @@ entities: pos: 41.5,5.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3303 type: HVWire components: @@ -39541,8 +37331,6 @@ entities: pos: 42.5,4.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3304 type: HVWire components: @@ -39550,8 +37338,6 @@ entities: pos: 42.5,3.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3305 type: HVWire components: @@ -39559,8 +37345,6 @@ entities: pos: 42.5,2.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3306 type: HVWire components: @@ -39568,8 +37352,6 @@ entities: pos: 42.5,1.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3307 type: HVWire components: @@ -39577,8 +37359,6 @@ entities: pos: 42.5,0.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3308 type: HVWire components: @@ -39586,8 +37366,6 @@ entities: pos: 42.5,-0.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3309 type: HVWire components: @@ -39595,8 +37373,6 @@ entities: pos: 42.5,-1.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3310 type: HVWire components: @@ -39604,8 +37380,6 @@ entities: pos: 42.5,-2.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3311 type: HVWire components: @@ -39613,8 +37387,6 @@ entities: pos: 42.5,-3.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3312 type: HVWire components: @@ -39622,8 +37394,6 @@ entities: pos: 42.5,-4.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3313 type: HVWire components: @@ -39631,8 +37401,6 @@ entities: pos: 42.5,-4.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3314 type: HVWire components: @@ -39640,8 +37408,6 @@ entities: pos: 41.5,-4.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3315 type: HVWire components: @@ -39649,8 +37415,6 @@ entities: pos: 40.5,-4.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3316 type: HVWire components: @@ -39658,8 +37422,6 @@ entities: pos: 39.5,-4.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3317 type: HVWire components: @@ -39667,8 +37429,6 @@ entities: pos: 38.5,-4.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3318 type: HVWire components: @@ -39676,8 +37436,6 @@ entities: pos: 38.5,-5.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3319 type: HVWire components: @@ -39685,8 +37443,6 @@ entities: pos: 38.5,-6.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3320 type: HVWire components: @@ -39694,8 +37450,6 @@ entities: pos: 38.5,-7.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3321 type: HVWire components: @@ -39703,8 +37457,6 @@ entities: pos: 37.5,-7.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3322 type: HVWire components: @@ -39712,8 +37464,6 @@ entities: pos: 36.5,-7.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3323 type: HVWire components: @@ -39721,8 +37471,6 @@ entities: pos: 35.5,-7.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3324 type: HVWire components: @@ -39730,8 +37478,6 @@ entities: pos: 34.5,-7.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3325 type: HVWire components: @@ -39739,8 +37485,6 @@ entities: pos: 33.5,-7.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3326 type: HVWire components: @@ -39748,8 +37492,6 @@ entities: pos: 32.5,-7.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3327 type: HVWire components: @@ -39757,8 +37499,6 @@ entities: pos: 31.5,-7.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3328 type: HVWire components: @@ -39766,8 +37506,6 @@ entities: pos: 30.5,-7.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3329 type: HVWire components: @@ -39775,8 +37513,6 @@ entities: pos: 29.5,-7.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3330 type: HVWire components: @@ -39784,8 +37520,6 @@ entities: pos: 28.5,-7.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3331 type: HVWire components: @@ -39793,8 +37527,6 @@ entities: pos: 27.5,-7.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3332 type: HVWire components: @@ -39802,8 +37534,6 @@ entities: pos: 26.5,-7.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3333 type: HVWire components: @@ -39811,8 +37541,6 @@ entities: pos: 26.5,-8.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3334 type: HVWire components: @@ -39820,8 +37548,6 @@ entities: pos: 26.5,-9.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3335 type: HVWire components: @@ -39829,8 +37555,6 @@ entities: pos: 26.5,-10.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3336 type: HVWire components: @@ -39838,8 +37562,6 @@ entities: pos: 26.5,-11.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3337 type: HVWire components: @@ -39847,8 +37569,6 @@ entities: pos: 26.5,-12.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3338 type: HVWire components: @@ -39856,8 +37576,6 @@ entities: pos: 26.5,-13.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3339 type: HVWire components: @@ -39865,8 +37583,6 @@ entities: pos: 26.5,-14.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3340 type: HVWire components: @@ -39874,8 +37590,6 @@ entities: pos: 26.5,-15.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3341 type: HVWire components: @@ -39883,8 +37597,6 @@ entities: pos: 26.5,-16.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3342 type: HVWire components: @@ -39892,8 +37604,6 @@ entities: pos: 26.5,-17.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3343 type: HVWire components: @@ -39901,8 +37611,6 @@ entities: pos: 25.5,-9.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3344 type: HVWire components: @@ -39910,8 +37618,6 @@ entities: pos: 24.5,-9.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3345 type: HVWire components: @@ -39919,8 +37625,6 @@ entities: pos: 23.5,-9.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3346 type: HVWire components: @@ -39928,8 +37632,6 @@ entities: pos: 22.5,-9.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3347 type: HVWire components: @@ -39937,8 +37639,6 @@ entities: pos: 21.5,-9.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3348 type: HVWire components: @@ -39946,8 +37646,6 @@ entities: pos: 25.5,-17.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3349 type: HVWire components: @@ -39955,8 +37653,6 @@ entities: pos: 24.5,-17.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3350 type: HVWire components: @@ -39964,8 +37660,6 @@ entities: pos: 23.5,-17.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3351 type: HVWire components: @@ -39973,8 +37667,6 @@ entities: pos: 22.5,-17.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3352 type: HVWire components: @@ -39982,8 +37674,6 @@ entities: pos: 22.5,-18.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3353 type: HVWire components: @@ -39991,8 +37681,6 @@ entities: pos: 22.5,-19.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3354 type: HVWire components: @@ -40000,8 +37688,6 @@ entities: pos: 22.5,-20.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3355 type: HVWire components: @@ -40009,8 +37695,6 @@ entities: pos: 22.5,-21.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3356 type: HVWire components: @@ -40018,8 +37702,6 @@ entities: pos: 22.5,-22.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3357 type: HVWire components: @@ -40027,8 +37709,6 @@ entities: pos: 22.5,-23.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3358 type: HVWire components: @@ -40036,8 +37716,6 @@ entities: pos: 22.5,-24.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3359 type: HVWire components: @@ -40045,8 +37723,6 @@ entities: pos: 22.5,-25.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3360 type: HVWire components: @@ -40054,8 +37730,6 @@ entities: pos: 21.5,-25.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3361 type: HVWire components: @@ -40063,8 +37737,6 @@ entities: pos: 20.5,-25.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3362 type: HVWire components: @@ -40072,8 +37744,6 @@ entities: pos: 19.5,-25.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3363 type: HVWire components: @@ -40081,8 +37751,6 @@ entities: pos: 18.5,-25.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3364 type: HVWire components: @@ -40090,8 +37758,6 @@ entities: pos: 17.5,-25.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3365 type: HVWire components: @@ -40099,8 +37765,6 @@ entities: pos: 16.5,-25.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3366 type: HVWire components: @@ -40108,8 +37772,6 @@ entities: pos: 15.5,-25.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3367 type: HVWire components: @@ -40117,8 +37779,6 @@ entities: pos: 14.5,-25.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3368 type: HVWire components: @@ -40126,8 +37786,6 @@ entities: pos: 14.5,-24.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3369 type: HVWire components: @@ -40135,8 +37793,6 @@ entities: pos: 14.5,-23.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3370 type: HVWire components: @@ -40144,8 +37800,6 @@ entities: pos: 14.5,-22.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3371 type: HVWire components: @@ -40153,8 +37807,6 @@ entities: pos: 14.5,-21.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3372 type: HVWire components: @@ -40162,8 +37814,6 @@ entities: pos: 14.5,-20.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3373 type: HVWire components: @@ -40171,8 +37821,6 @@ entities: pos: 13.5,-20.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3374 type: HVWire components: @@ -40180,8 +37828,6 @@ entities: pos: 12.5,-20.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3375 type: HVWire components: @@ -40189,8 +37835,6 @@ entities: pos: 11.5,-20.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3376 type: HVWire components: @@ -40198,8 +37842,6 @@ entities: pos: 10.5,-20.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3377 type: HVWire components: @@ -40207,8 +37849,6 @@ entities: pos: 9.5,-20.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3378 type: HVWire components: @@ -40216,8 +37856,6 @@ entities: pos: 8.5,-20.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3379 type: HVWire components: @@ -40225,8 +37863,6 @@ entities: pos: 7.5,-20.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3380 type: HVWire components: @@ -40234,8 +37870,6 @@ entities: pos: 6.5,-20.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3381 type: HVWire components: @@ -40243,8 +37877,6 @@ entities: pos: 5.5,-20.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3382 type: HVWire components: @@ -40252,8 +37884,6 @@ entities: pos: 4.5,-20.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3383 type: HVWire components: @@ -40261,8 +37891,6 @@ entities: pos: 3.5,-20.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3384 type: HVWire components: @@ -40270,8 +37898,6 @@ entities: pos: 2.5,-20.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3385 type: HVWire components: @@ -40279,8 +37905,6 @@ entities: pos: 2.5,-21.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3386 type: HVWire components: @@ -40288,8 +37912,6 @@ entities: pos: 2.5,-22.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3387 type: HVWire components: @@ -40297,8 +37919,6 @@ entities: pos: 2.5,-23.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3388 type: HVWire components: @@ -40306,8 +37926,6 @@ entities: pos: 1.5,-23.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3389 type: HVWire components: @@ -40315,8 +37933,6 @@ entities: pos: -0.5,-23.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3390 type: HVWire components: @@ -40324,8 +37940,6 @@ entities: pos: 0.5,-23.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3391 type: HVWire components: @@ -40333,8 +37947,6 @@ entities: pos: -0.5,-24.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3392 type: HVWire components: @@ -40342,8 +37954,6 @@ entities: pos: -0.5,-25.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3393 type: HVWire components: @@ -40351,8 +37961,6 @@ entities: pos: -0.5,-26.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3394 type: HVWire components: @@ -40360,8 +37968,6 @@ entities: pos: -1.5,-26.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3395 type: HVWire components: @@ -40369,8 +37975,6 @@ entities: pos: -2.5,-26.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3396 type: HVWire components: @@ -40378,8 +37982,6 @@ entities: pos: -3.5,-26.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3397 type: ApcExtensionCable components: @@ -40387,8 +37989,6 @@ entities: pos: -0.5,-15.5 rot: 3.141592653589793 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3398 type: ApcExtensionCable components: @@ -40396,8 +37996,6 @@ entities: pos: -4.5,-26.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3399 type: ApcExtensionCable components: @@ -40405,8 +38003,6 @@ entities: pos: -1.5,-15.5 rot: 3.141592653589793 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3400 type: HVWire components: @@ -40414,8 +38010,6 @@ entities: pos: -7.5,-26.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3401 type: HVWire components: @@ -40423,8 +38017,6 @@ entities: pos: -8.5,-26.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3402 type: HVWire components: @@ -40432,8 +38024,6 @@ entities: pos: -9.5,-26.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3403 type: HVWire components: @@ -40441,8 +38031,6 @@ entities: pos: -10.5,-26.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3404 type: HVWire components: @@ -40450,8 +38038,6 @@ entities: pos: -11.5,-26.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3405 type: HVWire components: @@ -40459,8 +38045,6 @@ entities: pos: -11.5,-26.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3406 type: HVWire components: @@ -40468,8 +38052,6 @@ entities: pos: -11.5,-25.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3407 type: HVWire components: @@ -40477,8 +38059,6 @@ entities: pos: -11.5,-24.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3408 type: HVWire components: @@ -40486,8 +38066,6 @@ entities: pos: -11.5,-23.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3409 type: HVWire components: @@ -40495,8 +38073,6 @@ entities: pos: -11.5,-22.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3410 type: HVWire components: @@ -40504,8 +38080,6 @@ entities: pos: -11.5,-21.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3411 type: HVWire components: @@ -40513,8 +38087,6 @@ entities: pos: -11.5,-20.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3412 type: HVWire components: @@ -40522,8 +38094,6 @@ entities: pos: -11.5,-19.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3413 type: HVWire components: @@ -40531,8 +38101,6 @@ entities: pos: -11.5,-18.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3414 type: HVWire components: @@ -40540,8 +38108,6 @@ entities: pos: -11.5,-17.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3415 type: HVWire components: @@ -40549,8 +38115,6 @@ entities: pos: -11.5,-16.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3416 type: HVWire components: @@ -40558,8 +38122,6 @@ entities: pos: -11.5,-15.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3417 type: HVWire components: @@ -40567,8 +38129,6 @@ entities: pos: -11.5,-14.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3418 type: HVWire components: @@ -40576,8 +38136,6 @@ entities: pos: -10.5,-14.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3419 type: HVWire components: @@ -40585,8 +38143,6 @@ entities: pos: -9.5,-14.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3420 type: HVWire components: @@ -40594,8 +38150,6 @@ entities: pos: -9.5,-13.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3421 type: HVWire components: @@ -40603,8 +38157,6 @@ entities: pos: -9.5,-12.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3422 type: HVWire components: @@ -40612,8 +38164,6 @@ entities: pos: -9.5,-11.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3423 type: HVWire components: @@ -40621,8 +38171,6 @@ entities: pos: -9.5,-10.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3424 type: HVWire components: @@ -40630,8 +38178,6 @@ entities: pos: -8.5,-10.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3425 type: HVWire components: @@ -40639,8 +38185,6 @@ entities: pos: -7.5,-10.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3426 type: HVWire components: @@ -40648,8 +38192,6 @@ entities: pos: -6.5,-10.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3427 type: HVWire components: @@ -40657,8 +38199,6 @@ entities: pos: -5.5,-10.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3428 type: HVWire components: @@ -40666,8 +38206,6 @@ entities: pos: -4.5,-10.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3429 type: HVWire components: @@ -40675,8 +38213,6 @@ entities: pos: -3.5,-10.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3430 type: HVWire components: @@ -40684,8 +38220,6 @@ entities: pos: -2.5,-10.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3431 type: HVWire components: @@ -40693,8 +38227,6 @@ entities: pos: -1.5,-10.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3432 type: HVWire components: @@ -40702,8 +38234,6 @@ entities: pos: -0.5,-10.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3433 type: HVWire components: @@ -40711,8 +38241,6 @@ entities: pos: 0.5,-10.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3434 type: HVWire components: @@ -40720,8 +38248,6 @@ entities: pos: 0.5,-9.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3435 type: HVWire components: @@ -40729,8 +38255,6 @@ entities: pos: 0.5,-8.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3436 type: HVWire components: @@ -40738,8 +38262,6 @@ entities: pos: 0.5,-7.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3437 type: HVWire components: @@ -40747,8 +38269,6 @@ entities: pos: 0.5,-6.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3438 type: HVWire components: @@ -40756,8 +38276,6 @@ entities: pos: -12.5,-14.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3439 type: HVWire components: @@ -40765,8 +38283,6 @@ entities: pos: -13.5,-14.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3440 type: HVWire components: @@ -40774,8 +38290,6 @@ entities: pos: -14.5,-14.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3441 type: HVWire components: @@ -40783,8 +38297,6 @@ entities: pos: -15.5,-14.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3442 type: HVWire components: @@ -40792,8 +38304,6 @@ entities: pos: -16.5,-14.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3443 type: HVWire components: @@ -40801,8 +38311,6 @@ entities: pos: -17.5,-14.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3444 type: HVWire components: @@ -40810,8 +38318,6 @@ entities: pos: -18.5,-14.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3445 type: HVWire components: @@ -40819,8 +38325,6 @@ entities: pos: -18.5,-13.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3446 type: HVWire components: @@ -40828,8 +38332,6 @@ entities: pos: -18.5,-12.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3447 type: HVWire components: @@ -40837,8 +38339,6 @@ entities: pos: -18.5,-11.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3448 type: HVWire components: @@ -40846,8 +38346,6 @@ entities: pos: -18.5,-11.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3449 type: HVWire components: @@ -40855,8 +38353,6 @@ entities: pos: -19.5,-11.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3450 type: HVWire components: @@ -40864,8 +38360,6 @@ entities: pos: -20.5,-11.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3451 type: HVWire components: @@ -40873,8 +38367,6 @@ entities: pos: -21.5,-11.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3452 type: HVWire components: @@ -40882,8 +38374,6 @@ entities: pos: -22.5,-11.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3453 type: HVWire components: @@ -40891,8 +38381,6 @@ entities: pos: -23.5,-11.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3454 type: HVWire components: @@ -40900,8 +38388,6 @@ entities: pos: -24.5,-11.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3455 type: HVWire components: @@ -40909,8 +38395,6 @@ entities: pos: -25.5,-11.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3456 type: HVWire components: @@ -40918,8 +38402,6 @@ entities: pos: -26.5,-11.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3457 type: HVWire components: @@ -40927,8 +38409,6 @@ entities: pos: -27.5,-11.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3458 type: HVWire components: @@ -40936,8 +38416,6 @@ entities: pos: -21.5,-10.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3459 type: HVWire components: @@ -40945,8 +38423,6 @@ entities: pos: -28.5,-11.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3460 type: HVWire components: @@ -40954,8 +38430,6 @@ entities: pos: -29.5,-11.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3461 type: HVWire components: @@ -40963,8 +38437,6 @@ entities: pos: -30.5,-11.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3462 type: HVWire components: @@ -40972,8 +38444,6 @@ entities: pos: -31.5,-11.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3463 type: HVWire components: @@ -40981,8 +38451,6 @@ entities: pos: -32.5,-11.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3464 type: HVWire components: @@ -40990,8 +38458,6 @@ entities: pos: -33.5,-11.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3465 type: HVWire components: @@ -40999,8 +38465,6 @@ entities: pos: -33.5,-10.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3466 type: HVWire components: @@ -41008,8 +38472,6 @@ entities: pos: -33.5,-9.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3467 type: HVWire components: @@ -41017,8 +38479,6 @@ entities: pos: -33.5,-8.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3468 type: HVWire components: @@ -41026,8 +38486,6 @@ entities: pos: -33.5,-7.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3469 type: HVWire components: @@ -41035,8 +38493,6 @@ entities: pos: -33.5,-6.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3470 type: HVWire components: @@ -41044,8 +38500,6 @@ entities: pos: -33.5,-5.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3471 type: HVWire components: @@ -41053,8 +38507,6 @@ entities: pos: -33.5,-4.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3472 type: HVWire components: @@ -41062,8 +38514,6 @@ entities: pos: -33.5,-3.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3473 type: HVWire components: @@ -41071,8 +38521,6 @@ entities: pos: -33.5,-2.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3474 type: HVWire components: @@ -41080,8 +38528,6 @@ entities: pos: -33.5,-1.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3475 type: HVWire components: @@ -41089,8 +38535,6 @@ entities: pos: -33.5,-0.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3476 type: HVWire components: @@ -41098,8 +38542,6 @@ entities: pos: -33.5,0.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3477 type: HVWire components: @@ -41107,8 +38549,6 @@ entities: pos: -32.5,0.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3478 type: HVWire components: @@ -41116,8 +38556,6 @@ entities: pos: -32.5,1.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3479 type: HVWire components: @@ -41125,8 +38563,6 @@ entities: pos: -32.5,2.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3480 type: HVWire components: @@ -41134,8 +38570,6 @@ entities: pos: -32.5,3.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3481 type: HVWire components: @@ -41143,8 +38577,6 @@ entities: pos: -32.5,4.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3482 type: HVWire components: @@ -41152,8 +38584,6 @@ entities: pos: -32.5,5.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3483 type: HVWire components: @@ -41161,8 +38591,6 @@ entities: pos: -32.5,6.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3484 type: HVWire components: @@ -41170,8 +38598,6 @@ entities: pos: -32.5,7.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3485 type: HVWire components: @@ -41179,8 +38605,6 @@ entities: pos: -32.5,8.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3486 type: HVWire components: @@ -41188,8 +38612,6 @@ entities: pos: -32.5,9.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3487 type: HVWire components: @@ -41197,8 +38619,6 @@ entities: pos: -32.5,10.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3488 type: HVWire components: @@ -41206,8 +38626,6 @@ entities: pos: -32.5,11.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3489 type: HVWire components: @@ -41215,8 +38633,6 @@ entities: pos: -32.5,12.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3490 type: HVWire components: @@ -41224,8 +38640,6 @@ entities: pos: -32.5,13.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3491 type: HVWire components: @@ -41233,8 +38647,6 @@ entities: pos: -32.5,14.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3492 type: HVWire components: @@ -41242,8 +38654,6 @@ entities: pos: -32.5,14.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3493 type: HVWire components: @@ -41251,8 +38661,6 @@ entities: pos: -31.5,14.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3494 type: HVWire components: @@ -41260,8 +38668,6 @@ entities: pos: -30.5,14.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3495 type: HVWire components: @@ -41269,8 +38675,6 @@ entities: pos: -29.5,14.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3496 type: HVWire components: @@ -41278,8 +38682,6 @@ entities: pos: -28.5,14.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3497 type: HVWire components: @@ -41287,8 +38689,6 @@ entities: pos: -27.5,14.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3498 type: HVWire components: @@ -41296,8 +38696,6 @@ entities: pos: -26.5,14.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3499 type: HVWire components: @@ -41305,8 +38703,6 @@ entities: pos: -25.5,14.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3500 type: HVWire components: @@ -41314,8 +38710,6 @@ entities: pos: -24.5,14.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3501 type: HVWire components: @@ -41323,8 +38717,6 @@ entities: pos: -23.5,14.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3502 type: HVWire components: @@ -41332,8 +38724,6 @@ entities: pos: -22.5,14.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3503 type: HVWire components: @@ -41341,8 +38731,6 @@ entities: pos: -21.5,14.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3504 type: HVWire components: @@ -41350,8 +38738,6 @@ entities: pos: -20.5,14.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3505 type: HVWire components: @@ -41359,8 +38745,6 @@ entities: pos: -20.5,13.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3506 type: HVWire components: @@ -41368,8 +38752,6 @@ entities: pos: -19.5,13.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3507 type: HVWire components: @@ -41377,8 +38759,6 @@ entities: pos: -18.5,13.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3508 type: HVWire components: @@ -41386,8 +38766,6 @@ entities: pos: -18.5,13.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3509 type: HVWire components: @@ -41395,8 +38773,6 @@ entities: pos: -17.5,13.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3510 type: HVWire components: @@ -41404,8 +38780,6 @@ entities: pos: -17.5,14.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3511 type: HVWire components: @@ -41413,8 +38787,6 @@ entities: pos: -17.5,15.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3512 type: HVWire components: @@ -41422,8 +38794,6 @@ entities: pos: -18.5,16.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3513 type: HVWire components: @@ -41431,8 +38801,6 @@ entities: pos: -17.5,16.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3514 type: HVWire components: @@ -41440,8 +38808,6 @@ entities: pos: -16.5,16.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3515 type: HVWire components: @@ -41449,8 +38815,6 @@ entities: pos: -15.5,16.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3516 type: HVWire components: @@ -41458,8 +38822,6 @@ entities: pos: -18.5,17.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3517 type: HVWire components: @@ -41467,8 +38829,6 @@ entities: pos: -18.5,18.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3518 type: HVWire components: @@ -41476,8 +38836,6 @@ entities: pos: -18.5,19.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3519 type: HVWire components: @@ -41485,8 +38843,6 @@ entities: pos: -18.5,20.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3520 type: HVWire components: @@ -41494,8 +38850,6 @@ entities: pos: -18.5,21.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3521 type: HVWire components: @@ -41503,8 +38857,6 @@ entities: pos: -18.5,22.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3522 type: HVWire components: @@ -41512,8 +38864,6 @@ entities: pos: -18.5,23.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3523 type: HVWire components: @@ -41521,8 +38871,6 @@ entities: pos: -18.5,24.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3524 type: HVWire components: @@ -41530,8 +38878,6 @@ entities: pos: -18.5,25.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3525 type: HVWire components: @@ -41539,8 +38885,6 @@ entities: pos: -17.5,25.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3526 type: HVWire components: @@ -41548,8 +38892,6 @@ entities: pos: -16.5,25.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3527 type: HVWire components: @@ -41557,8 +38899,6 @@ entities: pos: -15.5,25.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3528 type: HVWire components: @@ -41566,8 +38906,6 @@ entities: pos: -14.5,25.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3529 type: HVWire components: @@ -41575,8 +38913,6 @@ entities: pos: -13.5,25.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3530 type: HVWire components: @@ -41584,8 +38920,6 @@ entities: pos: -12.5,25.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3531 type: HVWire components: @@ -41593,8 +38927,6 @@ entities: pos: -11.5,25.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3532 type: HVWire components: @@ -41602,8 +38934,6 @@ entities: pos: -10.5,25.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3533 type: HVWire components: @@ -41611,8 +38941,6 @@ entities: pos: -9.5,25.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3534 type: HVWire components: @@ -41620,8 +38948,6 @@ entities: pos: -8.5,25.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3535 type: HVWire components: @@ -41629,8 +38955,6 @@ entities: pos: -7.5,25.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3536 type: HVWire components: @@ -41638,8 +38962,6 @@ entities: pos: -7.5,24.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3537 type: HVWire components: @@ -41647,8 +38969,6 @@ entities: pos: -6.5,24.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3538 type: HVWire components: @@ -41656,8 +38976,6 @@ entities: pos: -5.5,24.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3539 type: HVWire components: @@ -41665,8 +38983,6 @@ entities: pos: -4.5,24.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3540 type: HVWire components: @@ -41674,8 +38990,6 @@ entities: pos: -4.5,24.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3541 type: HVWire components: @@ -41683,8 +38997,6 @@ entities: pos: -4.5,23.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3542 type: HVWire components: @@ -41692,8 +39004,6 @@ entities: pos: -4.5,22.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3543 type: HVWire components: @@ -41701,8 +39011,6 @@ entities: pos: -4.5,21.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3544 type: HVWire components: @@ -41710,8 +39018,6 @@ entities: pos: -4.5,21.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3545 type: HVWire components: @@ -41719,8 +39025,6 @@ entities: pos: -3.5,21.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3546 type: HVWire components: @@ -41728,8 +39032,6 @@ entities: pos: -2.5,21.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3547 type: HVWire components: @@ -41737,8 +39039,6 @@ entities: pos: -1.5,21.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3548 type: HVWire components: @@ -41746,8 +39046,6 @@ entities: pos: -0.5,21.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3549 type: HVWire components: @@ -41755,8 +39053,6 @@ entities: pos: -0.5,20.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3550 type: HVWire components: @@ -41764,8 +39060,6 @@ entities: pos: 0.5,20.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3551 type: HVWire components: @@ -41773,8 +39067,6 @@ entities: pos: 1.5,20.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3552 type: HVWire components: @@ -41782,8 +39074,6 @@ entities: pos: 2.5,20.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3553 type: HVWire components: @@ -41791,8 +39081,6 @@ entities: pos: 3.5,20.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3554 type: HVWire components: @@ -41800,8 +39088,6 @@ entities: pos: 4.5,20.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3555 type: HVWire components: @@ -41809,8 +39095,6 @@ entities: pos: 5.5,20.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3556 type: HVWire components: @@ -41818,8 +39102,6 @@ entities: pos: 6.5,20.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3557 type: HVWire components: @@ -41827,8 +39109,6 @@ entities: pos: 7.5,20.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3558 type: HVWire components: @@ -41836,8 +39116,6 @@ entities: pos: 8.5,20.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3559 type: HVWire components: @@ -41845,8 +39123,6 @@ entities: pos: 9.5,20.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3560 type: HVWire components: @@ -41854,8 +39130,6 @@ entities: pos: 10.5,20.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3561 type: HVWire components: @@ -41863,8 +39137,6 @@ entities: pos: 11.5,20.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3562 type: HVWire components: @@ -41872,8 +39144,6 @@ entities: pos: 12.5,20.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3563 type: HVWire components: @@ -41881,8 +39151,6 @@ entities: pos: 12.5,21.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3564 type: HVWire components: @@ -41890,8 +39158,6 @@ entities: pos: 12.5,22.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3565 type: HVWire components: @@ -41899,8 +39165,6 @@ entities: pos: 12.5,23.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3566 type: HVWire components: @@ -41908,8 +39172,6 @@ entities: pos: 12.5,24.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3567 type: HVWire components: @@ -41917,8 +39179,6 @@ entities: pos: 11.5,24.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3568 type: HVWire components: @@ -41926,8 +39186,6 @@ entities: pos: 12.5,20.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3569 type: HVWire components: @@ -41935,8 +39193,6 @@ entities: pos: 12.5,19.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3570 type: HVWire components: @@ -41944,8 +39200,6 @@ entities: pos: 12.5,18.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3571 type: HVWire components: @@ -41953,8 +39207,6 @@ entities: pos: 12.5,17.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3572 type: HVWire components: @@ -41962,8 +39214,6 @@ entities: pos: 12.5,16.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3573 type: HVWire components: @@ -41971,8 +39221,6 @@ entities: pos: 12.5,15.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3574 type: HVWire components: @@ -41980,8 +39228,6 @@ entities: pos: 12.5,14.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3575 type: HVWire components: @@ -41989,8 +39235,6 @@ entities: pos: 11.5,14.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3576 type: HVWire components: @@ -41998,8 +39242,6 @@ entities: pos: 10.5,14.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3577 type: HVWire components: @@ -42007,8 +39249,6 @@ entities: pos: 10.5,13.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3578 type: HVWire components: @@ -42016,8 +39256,6 @@ entities: pos: 10.5,12.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3579 type: HVWire components: @@ -42025,8 +39263,6 @@ entities: pos: 10.5,11.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3580 type: HVWire components: @@ -42034,8 +39270,6 @@ entities: pos: 11.5,11.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3581 type: HVWire components: @@ -42043,8 +39277,6 @@ entities: pos: 12.5,11.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3582 type: HVWire components: @@ -42052,8 +39284,6 @@ entities: pos: 13.5,11.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3583 type: HVWire components: @@ -42061,8 +39291,6 @@ entities: pos: 14.5,11.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3584 type: HVWire components: @@ -42070,8 +39298,6 @@ entities: pos: 15.5,11.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3585 type: HVWire components: @@ -42079,8 +39305,6 @@ entities: pos: 16.5,11.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3586 type: HVWire components: @@ -42088,8 +39312,6 @@ entities: pos: 17.5,11.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3587 type: HVWire components: @@ -42097,8 +39319,6 @@ entities: pos: 18.5,11.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3588 type: HVWire components: @@ -42106,8 +39326,6 @@ entities: pos: 19.5,11.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3589 type: HVWire components: @@ -42115,8 +39333,6 @@ entities: pos: 20.5,11.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3590 type: HVWire components: @@ -42124,8 +39340,6 @@ entities: pos: 21.5,11.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3591 type: HVWire components: @@ -42133,8 +39347,6 @@ entities: pos: 22.5,11.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3592 type: HVWire components: @@ -42142,8 +39354,6 @@ entities: pos: 23.5,11.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3593 type: HVWire components: @@ -42151,8 +39361,6 @@ entities: pos: 24.5,11.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3594 type: HVWire components: @@ -42160,8 +39368,6 @@ entities: pos: 25.5,11.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3595 type: HVWire components: @@ -42169,8 +39375,6 @@ entities: pos: 26.5,11.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3596 type: HVWire components: @@ -42178,8 +39382,6 @@ entities: pos: 27.5,11.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3597 type: HVWire components: @@ -42187,8 +39389,6 @@ entities: pos: 27.5,12.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3598 type: HVWire components: @@ -42196,8 +39396,6 @@ entities: pos: 27.5,13.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3599 type: HVWire components: @@ -42205,8 +39403,6 @@ entities: pos: 28.5,11.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3600 type: HVWire components: @@ -42214,8 +39410,6 @@ entities: pos: 29.5,11.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3601 type: HVWire components: @@ -42223,8 +39417,6 @@ entities: pos: 30.5,11.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3602 type: HVWire components: @@ -42232,8 +39424,6 @@ entities: pos: 31.5,11.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3603 type: HVWire components: @@ -42241,8 +39431,6 @@ entities: pos: 32.5,11.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3604 type: HVWire components: @@ -42250,8 +39438,6 @@ entities: pos: 33.5,11.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3605 type: HVWire components: @@ -42259,8 +39445,6 @@ entities: pos: 34.5,11.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3606 type: HVWire components: @@ -42268,8 +39452,6 @@ entities: pos: 34.5,10.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3607 type: HVWire components: @@ -42277,8 +39459,6 @@ entities: pos: 34.5,9.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3608 type: HVWire components: @@ -42286,8 +39466,6 @@ entities: pos: 34.5,8.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3609 type: HVWire components: @@ -42295,8 +39473,6 @@ entities: pos: 34.5,7.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3610 type: HVWire components: @@ -42304,8 +39480,6 @@ entities: pos: 34.5,6.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3611 type: HVWire components: @@ -42313,8 +39487,6 @@ entities: pos: 34.5,5.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3612 type: HVWire components: @@ -42322,8 +39494,6 @@ entities: pos: 35.5,5.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3613 type: HVWire components: @@ -42331,8 +39501,6 @@ entities: pos: 36.5,5.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3614 type: HVWire components: @@ -42340,8 +39508,6 @@ entities: pos: 37.5,5.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3615 type: HVWire components: @@ -42349,8 +39515,6 @@ entities: pos: 38.5,5.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3616 type: HVWire components: @@ -42358,8 +39522,6 @@ entities: pos: 39.5,5.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3617 type: SalternSubstation components: @@ -42367,10 +39529,8 @@ entities: pos: 42.5,-0.5 rot: -1.5707963267948966 rad type: Transform - - startingCharge: 3999870 + - startingCharge: 3999970 type: Battery - - drawRate: 8000 - type: PowerConsumer - supplyRate: 6000 type: PowerSupplier - uid: 3618 @@ -42380,10 +39540,8 @@ entities: pos: 27.5,13.5 rot: -1.5707963267948966 rad type: Transform - - startingCharge: 3999870 + - startingCharge: 3999970 type: Battery - - drawRate: 8000 - type: PowerConsumer - supplyRate: 6000 type: PowerSupplier - uid: 3619 @@ -42393,10 +39551,8 @@ entities: pos: 11.5,24.5 rot: -1.5707963267948966 rad type: Transform - - startingCharge: 3999870 + - startingCharge: 3999970 type: Battery - - drawRate: 8000 - type: PowerConsumer - supplyRate: 6000 type: PowerSupplier - uid: 3620 @@ -42406,10 +39562,8 @@ entities: pos: 21.5,-9.5 rot: -1.5707963267948966 rad type: Transform - - startingCharge: 3999870 + - startingCharge: 3999970 type: Battery - - drawRate: 8000 - type: PowerConsumer - supplyRate: 6000 type: PowerSupplier - uid: 3621 @@ -42419,10 +39573,8 @@ entities: pos: -15.5,16.5 rot: -1.5707963267948966 rad type: Transform - - startingCharge: 3999870 + - startingCharge: 3999970 type: Battery - - drawRate: 8000 - type: PowerConsumer - supplyRate: 6000 type: PowerSupplier - uid: 3622 @@ -42432,10 +39584,8 @@ entities: pos: -0.5,-22.5 rot: -1.5707963267948966 rad type: Transform - - startingCharge: 3999870 + - startingCharge: 3999970 type: Battery - - drawRate: 8000 - type: PowerConsumer - supplyRate: 6000 type: PowerSupplier - uid: 3623 @@ -42445,8 +39595,6 @@ entities: pos: -0.5,-22.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3624 type: SalternSubstation components: @@ -42454,10 +39602,8 @@ entities: pos: 0.5,-6.5 rot: -1.5707963267948966 rad type: Transform - - startingCharge: 3999870 + - startingCharge: 3999970 type: Battery - - drawRate: 8000 - type: PowerConsumer - supplyRate: 6000 type: PowerSupplier - uid: 3625 @@ -42467,10 +39613,8 @@ entities: pos: -21.5,-10.5 rot: -1.5707963267948966 rad type: Transform - - startingCharge: 3999870 + - startingCharge: 3999970 type: Battery - - drawRate: 8000 - type: PowerConsumer - supplyRate: 6000 type: PowerSupplier - uid: 3626 @@ -42480,10 +39624,8 @@ entities: pos: -32.5,7.5 rot: -1.5707963267948966 rad type: Transform - - startingCharge: 3999870 + - startingCharge: 3999970 type: Battery - - drawRate: 8000 - type: PowerConsumer - supplyRate: 6000 type: PowerSupplier - uid: 3627 @@ -42493,8 +39635,6 @@ entities: pos: 27.5,13.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3628 type: MVWire components: @@ -42502,8 +39642,6 @@ entities: pos: 28.5,13.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3629 type: MVWire components: @@ -42511,8 +39649,6 @@ entities: pos: 28.5,14.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3630 type: MVWire components: @@ -42520,8 +39656,6 @@ entities: pos: 26.5,13.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3631 type: MVWire components: @@ -42529,8 +39663,6 @@ entities: pos: 25.5,13.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3632 type: MVWire components: @@ -42538,8 +39670,6 @@ entities: pos: 24.5,13.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3633 type: MVWire components: @@ -42547,8 +39677,6 @@ entities: pos: 24.5,14.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3634 type: MVWire components: @@ -42556,8 +39684,6 @@ entities: pos: 24.5,12.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3635 type: MVWire components: @@ -42565,8 +39691,6 @@ entities: pos: 23.5,12.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3636 type: MVWire components: @@ -42574,8 +39698,6 @@ entities: pos: 22.5,12.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3637 type: MVWire components: @@ -42583,8 +39705,6 @@ entities: pos: 21.5,12.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3638 type: MVWire components: @@ -42592,8 +39712,6 @@ entities: pos: 20.5,12.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3639 type: MVWire components: @@ -42601,8 +39719,6 @@ entities: pos: 19.5,12.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3640 type: MVWire components: @@ -42610,8 +39726,6 @@ entities: pos: 18.5,12.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3641 type: MVWire components: @@ -42619,8 +39733,6 @@ entities: pos: 17.5,12.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3642 type: MVWire components: @@ -42628,8 +39740,6 @@ entities: pos: 16.5,12.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3643 type: MVWire components: @@ -42637,8 +39747,6 @@ entities: pos: 15.5,12.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3644 type: MVWire components: @@ -42646,8 +39754,6 @@ entities: pos: 14.5,12.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3645 type: MVWire components: @@ -42655,8 +39761,6 @@ entities: pos: 13.5,12.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3646 type: MVWire components: @@ -42664,8 +39768,6 @@ entities: pos: 12.5,12.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3647 type: MVWire components: @@ -42673,8 +39775,6 @@ entities: pos: 12.5,13.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3648 type: MVWire components: @@ -42682,8 +39782,6 @@ entities: pos: 11.5,24.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3649 type: MVWire components: @@ -42691,8 +39789,6 @@ entities: pos: 9.5,24.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3650 type: MVWire components: @@ -42700,8 +39796,6 @@ entities: pos: 10.5,24.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3651 type: MVWire components: @@ -42709,8 +39803,6 @@ entities: pos: 9.5,23.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3652 type: MVWire components: @@ -42718,8 +39810,6 @@ entities: pos: 9.5,22.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3653 type: MVWire components: @@ -42727,8 +39817,6 @@ entities: pos: 9.5,24.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3654 type: MVWire components: @@ -42736,8 +39824,6 @@ entities: pos: 9.5,25.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3655 type: MVWire components: @@ -42745,8 +39831,6 @@ entities: pos: 9.5,26.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3656 type: MVWire components: @@ -42754,8 +39838,6 @@ entities: pos: 9.5,26.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3657 type: MVWire components: @@ -42763,8 +39845,6 @@ entities: pos: 9.5,27.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3658 type: MVWire components: @@ -42772,8 +39852,6 @@ entities: pos: 8.5,25.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3659 type: MVWire components: @@ -42781,8 +39859,6 @@ entities: pos: 7.5,25.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3660 type: MVWire components: @@ -42790,8 +39866,6 @@ entities: pos: 6.5,25.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3661 type: MVWire components: @@ -42799,8 +39873,6 @@ entities: pos: 5.5,25.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3662 type: MVWire components: @@ -42808,8 +39880,6 @@ entities: pos: 4.5,25.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3663 type: MVWire components: @@ -42817,8 +39887,6 @@ entities: pos: 3.5,25.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3664 type: MVWire components: @@ -42826,8 +39894,6 @@ entities: pos: 2.5,25.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3665 type: MVWire components: @@ -42835,8 +39901,6 @@ entities: pos: 1.5,25.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3666 type: MVWire components: @@ -42844,8 +39908,6 @@ entities: pos: 0.5,25.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3667 type: MVWire components: @@ -42853,8 +39915,6 @@ entities: pos: 0.5,26.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3668 type: MVWire components: @@ -42862,8 +39922,6 @@ entities: pos: 0.5,26.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3669 type: MVWire components: @@ -42871,8 +39929,6 @@ entities: pos: -0.5,26.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3670 type: MVWire components: @@ -42880,8 +39936,6 @@ entities: pos: -1.5,26.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3671 type: MVWire components: @@ -42889,8 +39943,6 @@ entities: pos: -2.5,26.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3672 type: MVWire components: @@ -42898,8 +39950,6 @@ entities: pos: -2.5,27.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3673 type: MVWire components: @@ -42907,8 +39957,6 @@ entities: pos: 42.5,-0.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3674 type: MVWire components: @@ -42916,8 +39964,6 @@ entities: pos: 43.5,-0.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3675 type: MVWire components: @@ -42925,8 +39971,6 @@ entities: pos: 43.5,0.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3676 type: MVWire components: @@ -42934,8 +39978,6 @@ entities: pos: 43.5,1.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3677 type: MVWire components: @@ -42943,8 +39985,6 @@ entities: pos: 44.5,1.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3678 type: MVWire components: @@ -42952,8 +39992,6 @@ entities: pos: 45.5,1.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3679 type: MVWire components: @@ -42961,8 +39999,6 @@ entities: pos: 46.5,1.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3680 type: MVWire components: @@ -42970,8 +40006,6 @@ entities: pos: 47.5,1.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3681 type: MVWire components: @@ -42979,8 +40013,6 @@ entities: pos: 48.5,1.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3682 type: MVWire components: @@ -42988,8 +40020,6 @@ entities: pos: 48.5,0.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3683 type: MVWire components: @@ -42997,8 +40027,6 @@ entities: pos: 48.5,-0.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3684 type: MVWire components: @@ -43006,8 +40034,6 @@ entities: pos: 48.5,-1.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3685 type: MVWire components: @@ -43015,8 +40041,6 @@ entities: pos: 48.5,-2.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3686 type: MVWire components: @@ -43024,8 +40048,6 @@ entities: pos: 47.5,-2.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3687 type: MVWire components: @@ -43033,8 +40055,6 @@ entities: pos: 47.5,-1.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3688 type: MVWire components: @@ -43042,8 +40062,6 @@ entities: pos: 41.5,-0.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3689 type: MVWire components: @@ -43051,8 +40069,6 @@ entities: pos: 40.5,-0.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3690 type: MVWire components: @@ -43060,8 +40076,6 @@ entities: pos: 39.5,-0.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3691 type: MVWire components: @@ -43069,8 +40083,6 @@ entities: pos: 38.5,-0.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3692 type: MVWire components: @@ -43078,8 +40090,6 @@ entities: pos: 37.5,-0.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3693 type: MVWire components: @@ -43087,8 +40097,6 @@ entities: pos: 36.5,-0.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3694 type: MVWire components: @@ -43096,8 +40104,6 @@ entities: pos: 35.5,-0.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3695 type: MVWire components: @@ -43105,8 +40111,6 @@ entities: pos: 34.5,-0.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3696 type: MVWire components: @@ -43114,8 +40118,6 @@ entities: pos: 33.5,-0.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3697 type: MVWire components: @@ -43123,8 +40125,6 @@ entities: pos: 32.5,-0.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3698 type: MVWire components: @@ -43132,8 +40132,6 @@ entities: pos: 32.5,0.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3699 type: MVWire components: @@ -43141,8 +40139,6 @@ entities: pos: 31.5,0.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3700 type: MVWire components: @@ -43150,8 +40146,6 @@ entities: pos: 31.5,1.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3701 type: MVWire components: @@ -43159,8 +40153,6 @@ entities: pos: 43.5,2.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3702 type: MVWire components: @@ -43168,8 +40160,6 @@ entities: pos: 43.5,3.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3703 type: MVWire components: @@ -43177,8 +40167,6 @@ entities: pos: 43.5,4.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3704 type: MVWire components: @@ -43186,8 +40174,6 @@ entities: pos: 43.5,5.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3705 type: MVWire components: @@ -43195,8 +40181,6 @@ entities: pos: 43.5,6.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3706 type: MVWire components: @@ -43204,8 +40188,6 @@ entities: pos: 43.5,7.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3707 type: MVWire components: @@ -43213,8 +40195,6 @@ entities: pos: 43.5,8.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3708 type: MVWire components: @@ -43222,8 +40202,6 @@ entities: pos: 43.5,9.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3709 type: MVWire components: @@ -43231,8 +40209,6 @@ entities: pos: 43.5,10.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3710 type: MVWire components: @@ -43240,8 +40216,6 @@ entities: pos: 21.5,-9.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3711 type: MVWire components: @@ -43249,8 +40223,6 @@ entities: pos: 21.5,-8.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3712 type: MVWire components: @@ -43258,8 +40230,6 @@ entities: pos: 21.5,-7.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3713 type: MVWire components: @@ -43267,8 +40237,6 @@ entities: pos: 21.5,-6.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3714 type: MVWire components: @@ -43276,8 +40244,6 @@ entities: pos: 21.5,-5.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3715 type: MVWire components: @@ -43285,8 +40251,6 @@ entities: pos: 21.5,-4.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3716 type: MVWire components: @@ -43294,8 +40258,6 @@ entities: pos: 22.5,-4.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3717 type: MVWire components: @@ -43303,8 +40265,6 @@ entities: pos: 22.5,-3.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3718 type: MVWire components: @@ -43312,8 +40272,6 @@ entities: pos: 20.5,-9.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3719 type: MVWire components: @@ -43321,8 +40279,6 @@ entities: pos: 19.5,-9.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3720 type: MVWire components: @@ -43330,8 +40286,6 @@ entities: pos: 21.5,-9.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3721 type: MVWire components: @@ -43339,8 +40293,6 @@ entities: pos: 18.5,-9.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3722 type: MVWire components: @@ -43348,8 +40300,6 @@ entities: pos: 17.5,-9.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3723 type: MVWire components: @@ -43357,8 +40307,6 @@ entities: pos: 16.5,-9.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3724 type: MVWire components: @@ -43366,8 +40314,6 @@ entities: pos: 15.5,-9.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3725 type: MVWire components: @@ -43375,8 +40321,6 @@ entities: pos: 14.5,-9.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3726 type: MVWire components: @@ -43384,8 +40328,6 @@ entities: pos: 13.5,-9.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3727 type: MVWire components: @@ -43393,8 +40335,6 @@ entities: pos: 12.5,-9.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3728 type: MVWire components: @@ -43402,8 +40342,6 @@ entities: pos: 11.5,-9.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3729 type: MVWire components: @@ -43411,8 +40349,6 @@ entities: pos: 10.5,-9.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3730 type: MVWire components: @@ -43420,8 +40356,6 @@ entities: pos: 9.5,-9.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3731 type: MVWire components: @@ -43429,8 +40363,6 @@ entities: pos: 8.5,-9.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3732 type: MVWire components: @@ -43438,8 +40370,6 @@ entities: pos: 8.5,-10.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3733 type: MVWire components: @@ -43447,8 +40377,6 @@ entities: pos: 8.5,-11.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3734 type: MVWire components: @@ -43456,8 +40384,6 @@ entities: pos: 8.5,-12.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3735 type: MVWire components: @@ -43465,8 +40391,6 @@ entities: pos: 8.5,-13.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3736 type: MVWire components: @@ -43474,8 +40398,6 @@ entities: pos: 8.5,-14.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3737 type: MVWire components: @@ -43483,8 +40405,6 @@ entities: pos: 8.5,-15.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3738 type: MVWire components: @@ -43492,8 +40412,6 @@ entities: pos: 8.5,-16.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3739 type: MVWire components: @@ -43501,8 +40419,6 @@ entities: pos: 7.5,-16.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3740 type: MVWire components: @@ -43510,8 +40426,6 @@ entities: pos: 7.5,-17.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3741 type: MVWire components: @@ -43519,8 +40433,6 @@ entities: pos: 15.5,-8.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3742 type: MVWire components: @@ -43528,8 +40440,6 @@ entities: pos: 15.5,-7.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3743 type: MVWire components: @@ -43537,8 +40447,6 @@ entities: pos: 15.5,-6.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3744 type: MVWire components: @@ -43546,8 +40454,6 @@ entities: pos: 15.5,-5.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3745 type: MVWire components: @@ -43555,8 +40461,6 @@ entities: pos: 15.5,-4.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3746 type: MVWire components: @@ -43564,8 +40468,6 @@ entities: pos: 15.5,-3.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3747 type: MVWire components: @@ -43573,8 +40475,6 @@ entities: pos: 15.5,-2.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3748 type: MVWire components: @@ -43582,8 +40482,6 @@ entities: pos: 15.5,-1.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3749 type: MVWire components: @@ -43591,8 +40489,6 @@ entities: pos: 15.5,-0.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3750 type: MVWire components: @@ -43600,8 +40496,6 @@ entities: pos: 15.5,0.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3751 type: MVWire components: @@ -43609,8 +40503,6 @@ entities: pos: 15.5,1.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3752 type: MVWire components: @@ -43618,8 +40510,6 @@ entities: pos: 16.5,1.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3753 type: MVWire components: @@ -43627,8 +40517,6 @@ entities: pos: 16.5,2.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3754 type: MVWire components: @@ -43636,8 +40524,6 @@ entities: pos: -0.5,-22.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3755 type: MVWire components: @@ -43645,8 +40531,6 @@ entities: pos: -0.5,-21.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3756 type: MVWire components: @@ -43654,8 +40538,6 @@ entities: pos: -0.5,-20.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3757 type: MVWire components: @@ -43663,8 +40545,6 @@ entities: pos: -16.5,15.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3758 type: MVWire components: @@ -43672,8 +40552,6 @@ entities: pos: -1.5,-19.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3759 type: MVWire components: @@ -43681,8 +40559,6 @@ entities: pos: -1.5,-18.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3760 type: MVWire components: @@ -43690,8 +40566,6 @@ entities: pos: -1.5,-20.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3761 type: MVWire components: @@ -43699,8 +40573,6 @@ entities: pos: -2.5,-20.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3762 type: MVWire components: @@ -43708,8 +40580,6 @@ entities: pos: -3.5,-20.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3763 type: MVWire components: @@ -43717,8 +40587,6 @@ entities: pos: -4.5,-20.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3764 type: MVWire components: @@ -43726,8 +40594,6 @@ entities: pos: -5.5,-20.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3765 type: MVWire components: @@ -43735,8 +40601,6 @@ entities: pos: -6.5,-20.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3766 type: MVWire components: @@ -43744,8 +40608,6 @@ entities: pos: -7.5,-20.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3767 type: MVWire components: @@ -43753,8 +40615,6 @@ entities: pos: -8.5,-20.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3768 type: MVWire components: @@ -43762,8 +40622,6 @@ entities: pos: -9.5,-20.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3769 type: MVWire components: @@ -43771,8 +40629,6 @@ entities: pos: -9.5,-21.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3770 type: MVWire components: @@ -43780,8 +40636,6 @@ entities: pos: -10.5,-20.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3771 type: MVWire components: @@ -43789,8 +40643,6 @@ entities: pos: -11.5,-20.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3772 type: MVWire components: @@ -43798,8 +40650,6 @@ entities: pos: -12.5,-20.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3773 type: MVWire components: @@ -43807,8 +40657,6 @@ entities: pos: -13.5,-20.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3774 type: MVWire components: @@ -43816,8 +40664,6 @@ entities: pos: -13.5,-19.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3775 type: MVWire components: @@ -43825,8 +40671,6 @@ entities: pos: -13.5,-18.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3776 type: MVWire components: @@ -43834,8 +40678,6 @@ entities: pos: -13.5,-17.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3777 type: MVWire components: @@ -43843,8 +40685,6 @@ entities: pos: -14.5,-17.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3778 type: MVWire components: @@ -43852,8 +40692,6 @@ entities: pos: -14.5,-16.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3779 type: MVWire components: @@ -43861,8 +40699,6 @@ entities: pos: 0.5,-6.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3780 type: MVWire components: @@ -43870,8 +40706,6 @@ entities: pos: 0.5,-7.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3781 type: MVWire components: @@ -43879,8 +40713,6 @@ entities: pos: 0.5,-8.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3782 type: MVWire components: @@ -43888,8 +40720,6 @@ entities: pos: -0.5,-8.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3783 type: MVWire components: @@ -43897,8 +40727,6 @@ entities: pos: -1.5,-8.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3784 type: MVWire components: @@ -43906,8 +40734,6 @@ entities: pos: -1.5,-9.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3785 type: MVWire components: @@ -43915,8 +40741,6 @@ entities: pos: -2.5,-9.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3786 type: MVWire components: @@ -43924,8 +40748,6 @@ entities: pos: -3.5,-9.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3787 type: MVWire components: @@ -43933,8 +40755,6 @@ entities: pos: -4.5,-9.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3788 type: MVWire components: @@ -43942,8 +40762,6 @@ entities: pos: -5.5,-9.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3789 type: MVWire components: @@ -43951,8 +40769,6 @@ entities: pos: -5.5,-8.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3790 type: MVWire components: @@ -43960,8 +40776,6 @@ entities: pos: -6.5,-9.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3791 type: MVWire components: @@ -43969,8 +40783,6 @@ entities: pos: -7.5,-9.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3792 type: MVWire components: @@ -43978,8 +40790,6 @@ entities: pos: -8.5,-9.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3793 type: MVWire components: @@ -43987,8 +40797,6 @@ entities: pos: -9.5,-9.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3794 type: MVWire components: @@ -43996,8 +40804,6 @@ entities: pos: -9.5,-8.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3795 type: MVWire components: @@ -44005,8 +40811,6 @@ entities: pos: -9.5,-7.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3796 type: MVWire components: @@ -44014,8 +40818,6 @@ entities: pos: -9.5,-6.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3797 type: MVWire components: @@ -44023,8 +40825,6 @@ entities: pos: -10.5,-6.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3798 type: MVWire components: @@ -44032,8 +40832,6 @@ entities: pos: -11.5,-6.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3799 type: MVWire components: @@ -44041,8 +40839,6 @@ entities: pos: -12.5,-6.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3800 type: MVWire components: @@ -44050,8 +40846,6 @@ entities: pos: -12.5,-5.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3801 type: MVWire components: @@ -44059,8 +40853,6 @@ entities: pos: -12.5,-4.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3802 type: MVWire components: @@ -44068,8 +40860,6 @@ entities: pos: -12.5,-3.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3803 type: MVWire components: @@ -44077,8 +40867,6 @@ entities: pos: -12.5,-2.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3804 type: MVWire components: @@ -44086,8 +40874,6 @@ entities: pos: -12.5,-1.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3805 type: MVWire components: @@ -44095,8 +40881,6 @@ entities: pos: -12.5,-0.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3806 type: MVWire components: @@ -44104,8 +40888,6 @@ entities: pos: -12.5,0.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3807 type: MVWire components: @@ -44113,8 +40895,6 @@ entities: pos: -12.5,1.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3808 type: MVWire components: @@ -44122,8 +40902,6 @@ entities: pos: -11.5,1.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3809 type: MVWire components: @@ -44131,8 +40909,6 @@ entities: pos: -11.5,2.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3810 type: MVWire components: @@ -44140,8 +40916,6 @@ entities: pos: -21.5,-10.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3811 type: MVWire components: @@ -44149,8 +40923,6 @@ entities: pos: -21.5,-9.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3812 type: MVWire components: @@ -44158,8 +40930,6 @@ entities: pos: -21.5,-8.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3813 type: MVWire components: @@ -44167,8 +40937,6 @@ entities: pos: -20.5,-8.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3814 type: MVWire components: @@ -44176,8 +40944,6 @@ entities: pos: -19.5,-8.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3815 type: MVWire components: @@ -44185,8 +40951,6 @@ entities: pos: -18.5,-8.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3816 type: MVWire components: @@ -44194,8 +40958,6 @@ entities: pos: -17.5,-8.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3817 type: MVWire components: @@ -44203,8 +40965,6 @@ entities: pos: -17.5,-9.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3818 type: MVWire components: @@ -44212,8 +40972,6 @@ entities: pos: -16.5,-9.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3819 type: MVWire components: @@ -44221,8 +40979,6 @@ entities: pos: -15.5,-9.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3820 type: MVWire components: @@ -44230,8 +40986,6 @@ entities: pos: -14.5,-9.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3821 type: MVWire components: @@ -44239,8 +40993,6 @@ entities: pos: -14.5,-8.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3822 type: MVWire components: @@ -44248,8 +41000,6 @@ entities: pos: -22.5,-8.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3823 type: MVWire components: @@ -44257,8 +41007,6 @@ entities: pos: -21.5,-11.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3824 type: MVWire components: @@ -44266,8 +41014,6 @@ entities: pos: -21.5,-12.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3825 type: MVWire components: @@ -44275,8 +41021,6 @@ entities: pos: -20.5,-12.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3826 type: MVWire components: @@ -44284,8 +41028,6 @@ entities: pos: -23.5,-8.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3827 type: MVWire components: @@ -44293,8 +41035,6 @@ entities: pos: -24.5,-8.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3828 type: MVWire components: @@ -44302,8 +41042,6 @@ entities: pos: -25.5,-8.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3829 type: MVWire components: @@ -44311,8 +41049,6 @@ entities: pos: -26.5,-8.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3830 type: MVWire components: @@ -44320,8 +41056,6 @@ entities: pos: -27.5,-8.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3831 type: MVWire components: @@ -44329,8 +41063,6 @@ entities: pos: -28.5,-8.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3832 type: MVWire components: @@ -44338,8 +41070,6 @@ entities: pos: -29.5,-8.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3833 type: MVWire components: @@ -44347,8 +41077,6 @@ entities: pos: -29.5,-7.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3834 type: MVWire components: @@ -44356,8 +41084,6 @@ entities: pos: -29.5,-6.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3835 type: MVWire components: @@ -44365,8 +41091,6 @@ entities: pos: -29.5,-5.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3836 type: MVWire components: @@ -44374,8 +41098,6 @@ entities: pos: -29.5,-4.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3837 type: MVWire components: @@ -44383,8 +41105,6 @@ entities: pos: -30.5,-4.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3838 type: MVWire components: @@ -44392,8 +41112,6 @@ entities: pos: -30.5,-3.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3839 type: MVWire components: @@ -44401,8 +41119,6 @@ entities: pos: -32.5,7.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3840 type: MVWire components: @@ -44410,8 +41126,6 @@ entities: pos: -32.5,8.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3841 type: MVWire components: @@ -44419,8 +41133,6 @@ entities: pos: -32.5,9.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3842 type: MVWire components: @@ -44428,8 +41140,6 @@ entities: pos: -33.5,9.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3843 type: MVWire components: @@ -44437,8 +41147,6 @@ entities: pos: -34.5,9.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3844 type: MVWire components: @@ -44446,8 +41154,6 @@ entities: pos: -35.5,9.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3845 type: MVWire components: @@ -44455,8 +41161,6 @@ entities: pos: -36.5,9.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3846 type: MVWire components: @@ -44464,8 +41168,6 @@ entities: pos: -37.5,9.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3847 type: MVWire components: @@ -44473,8 +41175,6 @@ entities: pos: -38.5,9.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3848 type: MVWire components: @@ -44482,8 +41182,6 @@ entities: pos: -38.5,10.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3849 type: MVWire components: @@ -44491,8 +41189,6 @@ entities: pos: -39.5,10.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3850 type: MVWire components: @@ -44500,8 +41196,6 @@ entities: pos: -39.5,11.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3851 type: MVWire components: @@ -44509,8 +41203,6 @@ entities: pos: -28.5,12.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3852 type: MVWire components: @@ -44518,8 +41210,6 @@ entities: pos: -31.5,9.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3853 type: MVWire components: @@ -44527,8 +41217,6 @@ entities: pos: -31.5,10.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3854 type: MVWire components: @@ -44536,8 +41224,6 @@ entities: pos: -31.5,11.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3855 type: MVWire components: @@ -44545,8 +41231,6 @@ entities: pos: -31.5,12.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3856 type: MVWire components: @@ -44554,8 +41238,6 @@ entities: pos: -31.5,13.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3857 type: MVWire components: @@ -44563,8 +41245,6 @@ entities: pos: -30.5,13.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3858 type: MVWire components: @@ -44572,8 +41252,6 @@ entities: pos: -29.5,13.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3859 type: MVWire components: @@ -44581,8 +41259,6 @@ entities: pos: -28.5,13.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3860 type: MVWire components: @@ -44590,8 +41266,6 @@ entities: pos: -15.5,16.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3861 type: MVWire components: @@ -44599,8 +41273,6 @@ entities: pos: -14.5,16.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3862 type: MVWire components: @@ -44608,8 +41280,6 @@ entities: pos: -13.5,16.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3863 type: MVWire components: @@ -44617,8 +41287,6 @@ entities: pos: -13.5,15.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3864 type: MVWire components: @@ -44626,8 +41294,6 @@ entities: pos: -13.5,14.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3865 type: MVWire components: @@ -44635,8 +41301,6 @@ entities: pos: -13.5,13.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3866 type: MVWire components: @@ -44644,8 +41308,6 @@ entities: pos: -12.5,13.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3867 type: MVWire components: @@ -44653,8 +41315,6 @@ entities: pos: -12.5,12.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3868 type: MVWire components: @@ -44662,8 +41322,6 @@ entities: pos: -11.5,13.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3869 type: MVWire components: @@ -44671,8 +41329,6 @@ entities: pos: -10.5,13.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3870 type: MVWire components: @@ -44680,8 +41336,6 @@ entities: pos: -9.5,13.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3871 type: MVWire components: @@ -44689,8 +41343,6 @@ entities: pos: -8.5,13.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3872 type: MVWire components: @@ -44698,8 +41350,6 @@ entities: pos: -7.5,13.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3873 type: MVWire components: @@ -44707,8 +41357,6 @@ entities: pos: -6.5,13.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3874 type: MVWire components: @@ -44716,8 +41364,6 @@ entities: pos: -5.5,13.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3875 type: MVWire components: @@ -44725,8 +41371,6 @@ entities: pos: -4.5,13.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3876 type: MVWire components: @@ -44734,8 +41378,6 @@ entities: pos: -3.5,13.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3877 type: MVWire components: @@ -44743,8 +41385,6 @@ entities: pos: -3.5,14.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3878 type: MVWire components: @@ -44752,8 +41392,6 @@ entities: pos: -3.5,15.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3879 type: MVWire components: @@ -44761,8 +41399,6 @@ entities: pos: -15.5,16.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3880 type: MVWire components: @@ -44770,8 +41406,6 @@ entities: pos: -16.5,16.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3881 type: solid_wall components: @@ -44799,8 +41433,6 @@ entities: pos: 22.5,-7.5 rot: 1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3884 type: AirlockMaintMedLocked components: @@ -45069,8 +41701,6 @@ entities: pos: -24.5,10.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3916 type: ApcExtensionCable components: @@ -45078,8 +41708,6 @@ entities: pos: -24.5,11.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3917 type: HVWire components: @@ -45087,8 +41715,6 @@ entities: pos: 41.5,7.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3918 type: SalternGenerator components: @@ -45358,15 +41984,11 @@ entities: - parent: 855 pos: 3.5,0.5 type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3949 type: ApcExtensionCable components: - parent: 975 type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3950 type: FirelockGlass components: @@ -45382,8 +42004,6 @@ entities: pos: 8.5,20.5 rot: 3.141592653589793 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3952 type: FirelockGlass components: @@ -45408,8 +42028,6 @@ entities: - parent: 855 pos: 3.5,1.5 type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3955 type: FirelockGlass components: @@ -45470,16 +42088,12 @@ entities: - parent: 855 pos: 2.5,0.5 type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3962 type: ApcExtensionCable components: - parent: 855 pos: 1.5,0.5 type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3963 type: FirelockGlass components: @@ -45522,8 +42136,6 @@ entities: - parent: 855 pos: -31.5,5.5 type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3968 type: ApcExtensionCable components: @@ -45531,8 +42143,6 @@ entities: pos: 7.5,20.5 rot: 3.141592653589793 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3969 type: FirelockGlass components: @@ -45558,8 +42168,6 @@ entities: pos: -30.5,5.5 rot: 3.141592653589793 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3972 type: ApcExtensionCable components: @@ -45567,8 +42175,6 @@ entities: pos: -23.5,5.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3973 type: FirelockGlass components: @@ -45594,8 +42200,6 @@ entities: pos: 12.5,-8.5 rot: 3.141592653589793 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3976 type: DisposalPipe components: @@ -45603,8 +42207,6 @@ entities: pos: 25.5,3.5 rot: 3.141592653589793 rad type: Transform - - deadThreshold: 100 - type: Breakable - containers: DisposalTransit: type: Robust.Server.GameObjects.Components.Container.Container @@ -45625,8 +42227,6 @@ entities: pos: 2.5,6.5 rot: 3.141592653589793 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3979 type: ApcExtensionCable components: @@ -45634,8 +42234,6 @@ entities: pos: -26.5,7.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3980 type: ApcExtensionCable components: @@ -45643,8 +42241,6 @@ entities: pos: -26.5,6.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3981 type: ApcExtensionCable components: @@ -45652,8 +42248,6 @@ entities: pos: -21.5,13.5 rot: 3.141592653589793 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3982 type: Firelock components: @@ -45670,8 +42264,6 @@ entities: pos: -26.5,6.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3984 type: ApcExtensionCable components: @@ -45679,8 +42271,6 @@ entities: pos: -26.5,5.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3985 type: solid_wall components: @@ -45695,8 +42285,6 @@ entities: pos: 3.5,6.5 rot: 3.141592653589793 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3987 type: ApcExtensionCable components: @@ -45704,8 +42292,6 @@ entities: pos: 4.5,6.5 rot: 3.141592653589793 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3988 type: FirelockGlass components: @@ -45731,8 +42317,6 @@ entities: pos: 12.5,-9.5 rot: 3.141592653589793 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3991 type: Firelock components: @@ -45776,8 +42360,6 @@ entities: pos: -32.5,-8.5 rot: 3.141592653589793 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 3996 type: CommsComputerCircuitboard components: @@ -45895,8 +42477,6 @@ entities: pos: -32.5,-7.5 rot: 3.141592653589793 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 4010 type: FirelockGlass components: @@ -46033,8 +42613,6 @@ entities: pos: 23.5,-18.5 rot: 3.141592653589793 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 4026 type: Firelock components: @@ -46263,8 +42841,6 @@ entities: pos: -18.5,13.5 rot: 3.141592653589793 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 4053 type: ApcExtensionCable components: @@ -46272,8 +42848,6 @@ entities: pos: -17.5,13.5 rot: 3.141592653589793 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 4054 type: ApcExtensionCable components: @@ -46281,8 +42855,6 @@ entities: pos: -17.5,14.5 rot: 3.141592653589793 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 4055 type: HVWire components: @@ -46290,8 +42862,6 @@ entities: pos: -5.5,-26.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 4056 type: FirelockGlass components: @@ -46308,8 +42878,6 @@ entities: pos: -5.5,-26.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 4058 type: FirelockGlass components: @@ -46326,8 +42894,6 @@ entities: pos: -4.5,-26.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 4060 type: FirelockGlass components: @@ -46388,8 +42954,6 @@ entities: pos: -20.5,13.5 rot: 3.141592653589793 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 4068 type: Firelock components: @@ -46406,8 +42970,6 @@ entities: pos: -8.5,-7.5 rot: 3.141592653589793 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 4070 type: ApcExtensionCable components: @@ -46415,8 +42977,6 @@ entities: pos: -32.5,-6.5 rot: 3.141592653589793 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 4071 type: Firelock components: @@ -46442,8 +43002,6 @@ entities: pos: -26.5,4.5 rot: 3.141592653589793 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 4074 type: Firelock components: @@ -46478,8 +43036,6 @@ entities: pos: -19.5,13.5 rot: 3.141592653589793 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 4078 type: ApcExtensionCable components: @@ -46487,8 +43043,6 @@ entities: pos: 0.5,6.5 rot: 3.141592653589793 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 4079 type: ApcExtensionCable components: @@ -46496,8 +43050,6 @@ entities: pos: -0.5,6.5 rot: 3.141592653589793 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 4080 type: solid_wall components: @@ -46533,8 +43085,6 @@ entities: pos: -5.5,-7.5 rot: 1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 4085 type: EmergencyLight components: @@ -47233,8 +43783,6 @@ entities: - parent: 855 pos: 17.313038,-12.573634 type: Transform - - deadThreshold: 100 - type: Destructible - uid: 4172 type: TableMetal components: @@ -47298,8 +43846,6 @@ entities: pos: 10.5,-13.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: BreakableConstruction - containers: board: entities: @@ -47332,8 +43878,6 @@ entities: pos: 0.7031777,2.4187772 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 4183 type: Poweredlight components: @@ -47374,21 +43918,6 @@ entities: pos: 23.5,13.5 rot: -1.5707963267948966 rad type: Transform - - products: - - cargo.dice - - cargo.Medkit - - cargo.flashlight - - cargo.fireextinguisher - - cargo.pen - - cargo.bikehorn - - cargo.cleaver - - cargo.fueltank - - cargo.medscanner - - cargo.glass - - cargo.cable - type: GalacticMarket - - deadThreshold: 100 - type: BreakableConstruction - containers: board: entities: @@ -47420,8 +43949,6 @@ entities: pos: 26.5,-10.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 4190 type: ApcExtensionCable components: @@ -47429,8 +43956,6 @@ entities: pos: 25.5,-10.5 rot: -1.5707963267948966 rad type: Transform - - deadThreshold: 100 - type: Destructible - uid: 4191 type: Carpet components: @@ -48119,4 +44644,39 @@ entities: pos: -10.5,0.5 rot: -1.5707963267948966 rad type: Transform +- uid: 4278 + type: ProtolatheMachineCircuitboard + components: + - parent: 1045 + type: Transform +- uid: 4279 + type: MatterBinStockPart + components: + - parent: 1045 + type: Transform +- uid: 4280 + type: MatterBinStockPart + components: + - parent: 1045 + type: Transform +- uid: 4281 + type: MicroManipulatorStockPart + components: + - parent: 1045 + type: Transform +- uid: 4282 + type: MicroManipulatorStockPart + components: + - parent: 1045 + type: Transform +- uid: 4283 + type: Beaker + components: + - parent: 1045 + type: Transform +- uid: 4284 + type: Beaker + components: + - parent: 1045 + type: Transform ... diff --git a/Resources/Prototypes/Body/Parts/humanoid_parts.yml b/Resources/Prototypes/Body/Parts/humanoid_parts.yml index 0a520b9b68..4852b5b86b 100644 --- a/Resources/Prototypes/Body/Parts/humanoid_parts.yml +++ b/Resources/Prototypes/Body/Parts/humanoid_parts.yml @@ -1,3 +1,4 @@ +# TODO BODY: Part damage - type: entity id: PartHuman name: "human body part" @@ -30,8 +31,8 @@ # TODO BODY DettachableDamageableComponent? damageContainer: biologicalDamageContainer resistances: defaultResistances - criticalThreshold: 100 - deadThreshold: 150 +# criticalThreshold: 100 +# deadThreshold: 150 - type: entity id: HeadHuman @@ -57,8 +58,8 @@ - type: Damageable damageContainer: biologicalDamageContainer resistances: defaultResistances - criticalThreshold: 50 - deadThreshold: 120 +# criticalThreshold: 50 +# deadThreshold: 120 - type: entity id: LeftArmHuman @@ -81,8 +82,8 @@ - type: Damageable damageContainer: biologicalDamageContainer resistances: defaultResistances - criticalThreshold: 40 - deadThreshold: 80 +# criticalThreshold: 40 +# deadThreshold: 80 - type: Extension distance: 2.4 @@ -107,8 +108,8 @@ - type: Damageable damageContainer: biologicalDamageContainer resistances: defaultResistances - criticalThreshold: 40 - deadThreshold: 80 +# criticalThreshold: 40 +# deadThreshold: 80 - type: Extension distance: 2.4 @@ -133,8 +134,8 @@ - type: Damageable damageContainer: biologicalDamageContainer resistances: defaultResistances - criticalThreshold: 30 - deadThreshold: 60 +# criticalThreshold: 30 +# deadThreshold: 60 - type: Grasp - type: entity @@ -151,8 +152,6 @@ state: "r_hand" - type: BodyPart partType: Hand - durability: 30 - destroyThreshold: -60 size: 3 compatibility: Biological symmetry: Right @@ -160,8 +159,8 @@ - type: Damageable damageContainer: biologicalDamageContainer resistances: defaultResistances - criticalThreshold: 30 - deadThreshold: 60 +# criticalThreshold: 30 +# deadThreshold: 60 - type: Grasp - type: entity @@ -185,8 +184,8 @@ - type: Damageable damageContainer: biologicalDamageContainer resistances: defaultResistances - criticalThreshold: 45 - deadThreshold: 90 +# criticalThreshold: 45 +# deadThreshold: 90 - type: Leg speed: 2.6 - type: Extension @@ -206,8 +205,6 @@ state: "r_leg" - type: BodyPart partType: Leg - durability: 45 - destroyThreshold: -90 size: 6 compatibility: Biological symmetry: Right @@ -215,8 +212,8 @@ - type: Damageable damageContainer: biologicalDamageContainer resistances: defaultResistances - criticalThreshold: 45 - deadThreshold: 90 +# criticalThreshold: 45 +# deadThreshold: 90 - type: Leg speed: 2.6 - type: Extension @@ -243,8 +240,8 @@ - type: Damageable damageContainer: biologicalDamageContainer resistances: defaultResistances - criticalThreshold: 30 - deadThreshold: 60 +# criticalThreshold: 30 +# deadThreshold: 60 - type: entity id: RightFootHuman @@ -267,5 +264,5 @@ - type: Damageable damageContainer: biologicalDamageContainer resistances: defaultResistances - criticalThreshold: 30 - deadThreshold: 60 +# criticalThreshold: 30 +# deadThreshold: 60 diff --git a/Resources/Prototypes/Damage/damage_containers.yml b/Resources/Prototypes/Damage/damage_containers.yml index 5fad0c557c..ca55e0fb95 100644 --- a/Resources/Prototypes/Damage/damage_containers.yml +++ b/Resources/Prototypes/Damage/damage_containers.yml @@ -1,6 +1,6 @@ - type: damageContainer id: biologicalDamageContainer - activeDamageClasses: + supportedClasses: - Brute - Burn - Toxin @@ -9,6 +9,6 @@ - type: damageContainer id: metallicDamageContainer - activeDamageClasses: + supportedClasses: - Brute - Burn diff --git a/Resources/Prototypes/Entities/Constructible/Doors/airlock_base.yml b/Resources/Prototypes/Entities/Constructible/Doors/airlock_base.yml index a2a5e423b2..07d9cea26b 100644 --- a/Resources/Prototypes/Entities/Constructible/Doors/airlock_base.yml +++ b/Resources/Prototypes/Entities/Constructible/Doors/airlock_base.yml @@ -56,9 +56,12 @@ - type: Occluder - type: SnapGrid offset: Center - - type: Destructible - deadThreshold: 500 + - type: Damageable resistances: metallicResistances + - type: Destructible + thresholds: + 500: + Acts: ["Destruction"] placement: mode: SnapgridCenter diff --git a/Resources/Prototypes/Entities/Constructible/Furniture/beds.yml b/Resources/Prototypes/Entities/Constructible/Furniture/beds.yml index 23cdc76fd0..06cac55925 100644 --- a/Resources/Prototypes/Entities/Constructible/Furniture/beds.yml +++ b/Resources/Prototypes/Entities/Constructible/Furniture/beds.yml @@ -27,8 +27,11 @@ - type: Strap position: Down rotation: -90 - - type: Destructible - deadThreshold: 75 + - type: Damageable resistances: metallicResistances + - type: Destructible + thresholds: + 75: + Acts: ["Destruction"] placement: mode: SnapgridCenter diff --git a/Resources/Prototypes/Entities/Constructible/Furniture/bookshelf.yml b/Resources/Prototypes/Entities/Constructible/Furniture/bookshelf.yml index 96916f483d..b534409be3 100644 --- a/Resources/Prototypes/Entities/Constructible/Furniture/bookshelf.yml +++ b/Resources/Prototypes/Entities/Constructible/Furniture/bookshelf.yml @@ -19,14 +19,17 @@ - MobImpassable - VaultImpassable - SmallImpassable - - type: Destructible - deadThreshold: 30 - destroySound: /Audio/Effects/woodhit.ogg - spawnOnDestroy: - WoodPlank: - Min: 1 - Max: 1 + - type: Damageable resistances: metallicResistances + - type: Destructible + thresholds: + 30: + Sound: /Audio/Effects/woodhit.ogg + Spawn: + WoodPlank: + Min: 1 + Max: 1 + Acts: ["Destruction"] - type: Occluder sizeX: 32 sizeY: 32 diff --git a/Resources/Prototypes/Entities/Constructible/Furniture/instruments.yml b/Resources/Prototypes/Entities/Constructible/Furniture/instruments.yml index 99aa62e453..28070ec478 100644 --- a/Resources/Prototypes/Entities/Constructible/Furniture/instruments.yml +++ b/Resources/Prototypes/Entities/Constructible/Furniture/instruments.yml @@ -1,77 +1,80 @@ - - type: entity - name: baseinstrument - id: BasePlaceableInstrument - abstract: true - placement: - mode: SnapgridCenter - components: - - type: Instrument - handheld: false - - type: Clickable - - type: InteractionOutline - - type: Anchorable - - type: Physics - shapes: - - !type:PhysShapeAabb - layer: [MobMask] - mask: - - Impassable - - MobImpassable - - VaultImpassable - - type: SnapGrid - offset: Center - - type: Destructible - deadThreshold: 50 - resistances: metallicResistances - - type: UserInterface - interfaces: - - key: enum.InstrumentUiKey.Key - type: InstrumentBoundUserInterface +- type: entity + name: baseinstrument + id: BasePlaceableInstrument + abstract: true + placement: + mode: SnapgridCenter + components: + - type: Instrument + handheld: false + - type: Clickable + - type: InteractionOutline + - type: Anchorable + - type: Physics + shapes: + - !type:PhysShapeAabb + layer: [MobMask] + mask: + - Impassable + - MobImpassable + - VaultImpassable + - type: SnapGrid + offset: Center + - type: Damageable + resistances: metallicResistances + - type: Destructible + thresholds: + 50: + Acts: ["Destruction"] + - type: UserInterface + interfaces: + - key: enum.InstrumentUiKey.Key + type: InstrumentBoundUserInterface - - type: entity - name: piano - parent: BasePlaceableInstrument - id: PianoInstrument - description: Play Needles Piano Now. - components: - - type: Instrument - program: 1 - - type: Sprite - sprite: Objects/Fun/Instruments/otherinstruments.rsi - state: piano +- type: entity + name: piano + parent: BasePlaceableInstrument + id: PianoInstrument + description: Play Needles Piano Now. + components: + - type: Instrument + program: 1 + - type: Sprite + sprite: Objects/Fun/Instruments/otherinstruments.rsi + state: piano - - type: entity - name: minimoog - parent: BasePlaceableInstrument - id: MinimoogInstrument - description: 'This is a minimoog, like a space piano, but more spacey!' - components: - - type: Instrument - program: 81 - - type: Sprite - sprite: Objects/Fun/Instruments/otherinstruments.rsi - state: minimoog +- type: entity + name: minimoog + parent: BasePlaceableInstrument + id: MinimoogInstrument + description: 'This is a minimoog, like a space piano, but more spacey!' + components: + - type: Instrument + program: 81 + - type: Sprite + sprite: Objects/Fun/Instruments/otherinstruments.rsi + state: minimoog - - type: entity - name: church organ - parent: BasePlaceableInstrument - id: ChurchOrganInstrument - description: This thing really blows! - components: - - type: Instrument - program: 20 - - type: Sprite - sprite: Objects/Fun/Instruments/otherinstruments.rsi - state: church_organ +- type: entity + name: church organ + parent: BasePlaceableInstrument + id: ChurchOrganInstrument + description: This thing really blows! + components: + - type: Instrument + program: 20 + - type: Sprite + sprite: Objects/Fun/Instruments/otherinstruments.rsi + state: church_organ - - type: entity - name: xylophone - parent: BasePlaceableInstrument - id: XylophoneInstrument - description: Rainbow colored glockenspiel. - components: - - type: Instrument - program: 13 - - type: Sprite - sprite: Objects/Fun/Instruments/otherinstruments.rsi - state: xylophone +- type: entity + name: xylophone + parent: BasePlaceableInstrument + id: XylophoneInstrument + description: Rainbow colored glockenspiel. + components: + - type: Instrument + program: 13 + - type: Sprite + sprite: Objects/Fun/Instruments/otherinstruments.rsi + state: xylophone diff --git a/Resources/Prototypes/Entities/Constructible/Furniture/pilot_chair.yml b/Resources/Prototypes/Entities/Constructible/Furniture/pilot_chair.yml index 57ad71ad9f..584491ded2 100644 --- a/Resources/Prototypes/Entities/Constructible/Furniture/pilot_chair.yml +++ b/Resources/Prototypes/Entities/Constructible/Furniture/pilot_chair.yml @@ -11,9 +11,12 @@ - type: Physics - type: Clickable - type: InteractionOutline - - type: Destructible - deadThreshold: 100 + - type: Damageable resistances: metallicResistances + - type: Destructible + thresholds: + 100: + Acts: ["Destruction"] - type: ShuttleController - type: Strap position: Stand diff --git a/Resources/Prototypes/Entities/Constructible/Furniture/seats.yml b/Resources/Prototypes/Entities/Constructible/Furniture/seats.yml index 72cb9438a7..fd6ccca4bd 100644 --- a/Resources/Prototypes/Entities/Constructible/Furniture/seats.yml +++ b/Resources/Prototypes/Entities/Constructible/Furniture/seats.yml @@ -30,9 +30,12 @@ position: Stand - type: Anchorable - type: Pullable - - type: Destructible - deadThreshold: 50 + - type: Damageable resistances: metallicResistances + - type: Destructible + thresholds: + 50: + Acts: ["Destruction"] - type: entity name: chair diff --git a/Resources/Prototypes/Entities/Constructible/Furniture/storage.yml b/Resources/Prototypes/Entities/Constructible/Furniture/storage.yml index 19160ebdf5..f7a3c6c3fc 100644 --- a/Resources/Prototypes/Entities/Constructible/Furniture/storage.yml +++ b/Resources/Prototypes/Entities/Constructible/Furniture/storage.yml @@ -27,14 +27,17 @@ - VaultImpassable - type: Pullable - type: Anchorable - - type: Destructible - deadThreshold: 30 - destroySound: /Audio/Effects/metalbreak.ogg - spawnOnDestroy: - SteelSheet1: - Min: 1 - Max: 1 + - type: Damageable resistances: metallicResistances + - type: Destructible + thresholds: + 30: + Sound: /Audio/Effects/metalbreak.ogg + Spawn: + SteelSheet1: + Min: 1 + Max: 1 + Acts: ["Destruction"] - type: entity id: Shelf @@ -65,11 +68,14 @@ - VaultImpassable - type: Pullable - type: Anchorable - - type: Destructible - deadThreshold: 30 - destroySound: /Audio/Effects/metalbreak.ogg - spawnOnDestroy: - SteelSheet1: - Min: 1 - Max: 1 + - type: Damageable resistances: metallicResistances + - type: Destructible + thresholds: + 30: + Sound: /Audio/Effects/metalbreak.ogg + Spawn: + SteelSheet1: + Min: 1 + Max: 1 + Acts: ["Destruction"] diff --git a/Resources/Prototypes/Entities/Constructible/Furniture/tables.yml b/Resources/Prototypes/Entities/Constructible/Furniture/tables.yml index 16651ae08a..c58f0d4fc9 100644 --- a/Resources/Prototypes/Entities/Constructible/Furniture/tables.yml +++ b/Resources/Prototypes/Entities/Constructible/Furniture/tables.yml @@ -35,14 +35,17 @@ sprite: Constructible/Structures/Tables/generic.rsi - type: Icon sprite: Constructible/Structures/Tables/generic.rsi - - type: Destructible - deadThreshold: 15 - destroySound: /Audio/Effects/metalbreak.ogg + - type: Damageable resistances: metallicResistances - spawnOnDestroy: - SteelSheet1: - Min: 1 - Max: 1 + - type: Destructible + thresholds: + 15: + Sound: /Audio/Effects/metalbreak.ogg + Spawn: + SteelSheet1: + Min: 1 + Max: 1 + Acts: ["Destruction"] - type: entity id: TableFrame @@ -54,14 +57,17 @@ sprite: Constructible/Structures/Tables/frame.rsi - type: Icon sprite: Constructible/Structures/Tables/frame.rsi - - type: Destructible - deadThreshold: 1 - destroySound: /Audio/Effects/metalbreak.ogg + - type: Damageable resistances: metallicResistances - spawnOnDestroy: - SteelSheet1: - Min: 1 - Max: 1 + - type: Destructible + thresholds: + 1: + Sound: /Audio/Effects/metalbreak.ogg + Spawn: + SteelSheet1: + Min: 1 + Max: 1 + Acts: ["Destruction"] - type: Construction graph: Tables node: TableFrame @@ -76,14 +82,17 @@ sprite: Constructible/Structures/Tables/bar.rsi - type: Icon sprite: Constructible/Structures/Tables/bar.rsi - - type: Destructible - deadThreshold: 1 - destroySound: /Audio/Effects/metalbreak.ogg + - type: Damageable resistances: metallicResistances - spawnOnDestroy: - SteelSheet1: - Min: 1 - Max: 1 + - type: Destructible + thresholds: + 1: + Sound: /Audio/Effects/metalbreak.ogg + Spawn: + SteelSheet1: + Min: 1 + Max: 1 + Acts: ["Destruction"] - type: entity id: TableMetal @@ -95,14 +104,17 @@ sprite: Constructible/Structures/Tables/metal.rsi - type: Icon sprite: Constructible/Structures/Tables/metal.rsi - - type: Destructible - deadThreshold: 15 - destroySound: /Audio/Effects/metalbreak.ogg + - type: Damageable resistances: metallicResistances - spawnOnDestroy: - SteelSheet1: - Min: 1 - Max: 1 + - type: Destructible + thresholds: + 15: + Sound: /Audio/Effects/metalbreak.ogg + Spawn: + SteelSheet1: + Min: 1 + Max: 1 + Acts: ["Destruction"] - type: Construction graph: Tables node: MetalTable @@ -117,14 +129,17 @@ sprite: Constructible/Structures/Tables/reinforced.rsi - type: Icon sprite: Constructible/Structures/Tables/reinforced.rsi - - type: Destructible - deadThreshold: 75 - destroySound: /Audio/Effects/metalbreak.ogg + - type: Damageable resistances: metallicResistances - spawnOnDestroy: - SteelSheet1: - Min: 1 - Max: 1 + - type: Destructible + thresholds: + 75: + Sound: /Audio/Effects/metalbreak.ogg + Spawn: + SteelSheet1: + Min: 1 + Max: 1 + Acts: ["Destruction"] - type: Construction graph: Tables node: ReinforcedTable @@ -139,14 +154,17 @@ sprite: Constructible/Structures/Tables/glass.rsi - type: Icon sprite: Constructible/Structures/Tables/glass.rsi - - type: Destructible - deadThreshold: 5 - destroySound: /Audio/Effects/glass_break2.ogg + - type: Damageable resistances: metallicResistances - spawnOnDestroy: - ShardGlass: - Min: 1 - Max: 1 + - type: Destructible + thresholds: + 5: + Sound: /Audio/Effects/glass_break2.ogg + Spawn: + ShardGlass: + Min: 1 + Max: 1 + Acts: ["Destruction"] - type: Construction graph: Tables node: GlassTable @@ -161,14 +179,17 @@ sprite: Constructible/Structures/Tables/r_glass.rsi - type: Icon sprite: Constructible/Structures/Tables/r_glass.rsi - - type: Destructible - deadThreshold: 20 - destroySound: /Audio/Effects/glass_break2.ogg + - type: Damageable resistances: metallicResistances - spawnOnDestroy: - ShardGlass: - Min: 1 - Max: 1 + - type: Destructible + thresholds: + 20: + Sound: /Audio/Effects/glass_break2.ogg + Spawn: + ShardGlass: + Min: 1 + Max: 1 + Acts: ["Destruction"] - type: Construction graph: Tables node: RGlassTable @@ -183,14 +204,17 @@ sprite: Constructible/Structures/Tables/wood.rsi - type: Icon sprite: Constructible/Structures/Tables/wood.rsi - - type: Destructible - deadThreshold: 15 - destroySound: /Audio/Effects/woodhit.ogg + - type: Damageable resistances: metallicResistances - spawnOnDestroy: - WoodPlank: - Min: 1 - Max: 1 + - type: Destructible + thresholds: + 15: + Sound: /Audio/Effects/woodhit.ogg + Spawn: + WoodPlank: + Min: 1 + Max: 1 + Acts: ["Destruction"] - type: Construction graph: Tables node: WoodTable @@ -205,14 +229,17 @@ sprite: Constructible/Structures/Tables/carpet.rsi - type: Icon sprite: Constructible/Structures/Tables/carpet.rsi - - type: Destructible - deadThreshold: 15 - destroySound: /Audio/Effects/woodhit.ogg + - type: Damageable resistances: metallicResistances - spawnOnDestroy: - WoodPlank: - Min: 1 - Max: 1 + - type: Destructible + thresholds: + 15: + Sound: /Audio/Effects/woodhit.ogg + Spawn: + WoodPlank: + Min: 1 + Max: 1 + Acts: ["Destruction"] - type: Construction graph: Tables node: PokerTable @@ -227,10 +254,13 @@ sprite: Constructible/Structures/Tables/stone.rsi - type: Icon sprite: Constructible/Structures/Tables/stone.rsi - - type: Destructible - deadThreshold: 50 - destroySound: /Audio/Effects/picaxe2.ogg + - type: Damageable resistances: metallicResistances + - type: Destructible + thresholds: + 50: + Sound: /Audio/Effects/picaxe2.ogg + Acts: ["Destruction"] - type: entity id: TableDebug @@ -242,6 +272,9 @@ sprite: Constructible/Structures/Tables/debug.rsi - type: Icon sprite: Constructible/Structures/Tables/debug.rsi - - type: Destructible - deadThreshold: 1 + - type: Damageable resistances: metallicResistances + - type: Destructible + thresholds: + 1: + Acts: ["Destruction"] diff --git a/Resources/Prototypes/Entities/Constructible/Ground/gascanisterports.yml b/Resources/Prototypes/Entities/Constructible/Ground/gascanisterports.yml index 61be8748a4..84223f0a92 100644 --- a/Resources/Prototypes/Entities/Constructible/Ground/gascanisterports.yml +++ b/Resources/Prototypes/Entities/Constructible/Ground/gascanisterports.yml @@ -10,8 +10,11 @@ - type: SnapGrid offset: Center - type: Sprite + - type: Damageable - type: Destructible - thresholdvalue: 100 + thresholds: + 100: + Acts: ["Destruction"] - type: GasCanisterPort - type: entity diff --git a/Resources/Prototypes/Entities/Constructible/Ground/gascanisters.yml b/Resources/Prototypes/Entities/Constructible/Ground/gascanisters.yml index 96c67b69e7..276cacbbf6 100644 --- a/Resources/Prototypes/Entities/Constructible/Ground/gascanisters.yml +++ b/Resources/Prototypes/Entities/Constructible/Ground/gascanisters.yml @@ -10,8 +10,11 @@ - type: SnapGrid offset: Center - type: Sprite + - type: Damageable - type: Destructible - thresholdvalue: 100 + thresholds: + 100: + Acts: ["Destruction"] - type: GasCanister - type: Anchorable - type: Pullable diff --git a/Resources/Prototypes/Entities/Constructible/Ground/kitchen.yml b/Resources/Prototypes/Entities/Constructible/Ground/kitchen.yml index 47c4749775..b377c07d43 100644 --- a/Resources/Prototypes/Entities/Constructible/Ground/kitchen.yml +++ b/Resources/Prototypes/Entities/Constructible/Ground/kitchen.yml @@ -20,6 +20,9 @@ state: spike - type: Anchorable - type: Pullable + - type: Damageable - type: Destructible - deadThreshold: 50 + thresholds: + 50: + Acts: ["Destruction"] - type: KitchenSpike diff --git a/Resources/Prototypes/Entities/Constructible/Ground/pipes.yml b/Resources/Prototypes/Entities/Constructible/Ground/pipes.yml index 25caa729a4..070e975392 100644 --- a/Resources/Prototypes/Entities/Constructible/Ground/pipes.yml +++ b/Resources/Prototypes/Entities/Constructible/Ground/pipes.yml @@ -11,8 +11,11 @@ - type: Physics - type: SnapGrid offset: Center + - type: Damageable - type: Destructible - thresholdvalue: 100 + thresholds: + 100: + Acts: ["Destruction"] - type: Sprite - type: Appearance visuals: diff --git a/Resources/Prototypes/Entities/Constructible/Ground/pumps.yml b/Resources/Prototypes/Entities/Constructible/Ground/pumps.yml index 74a44e0665..47cb7fda02 100644 --- a/Resources/Prototypes/Entities/Constructible/Ground/pumps.yml +++ b/Resources/Prototypes/Entities/Constructible/Ground/pumps.yml @@ -9,9 +9,12 @@ - type: Physics - type: SnapGrid offset: Center - - type: Destructible - thresholdvalue: 100 + - type: Damageable resistances: metallicResistances + - type: Destructible + thresholds: + 100: + Acts: ["Destruction"] - type: Sprite sprite: Constructible/Atmos/pump.rsi - type: Icon diff --git a/Resources/Prototypes/Entities/Constructible/Ground/scrubbers.yml b/Resources/Prototypes/Entities/Constructible/Ground/scrubbers.yml index 4f45f0acf6..2c6595a102 100644 --- a/Resources/Prototypes/Entities/Constructible/Ground/scrubbers.yml +++ b/Resources/Prototypes/Entities/Constructible/Ground/scrubbers.yml @@ -19,9 +19,12 @@ pipeRSI: Constructible/Atmos/pipe.rsi - type: SiphonVisualizer siphonRSI: Constructible/Atmos/scrubber.rsi - - type: Destructible - thresholdvalue: 100 + - type: Damageable resistances: metallicResistances + - type: Destructible + thresholds: + 100: + Acts: ["Destruction"] - type: entity parent: ScrubberBase diff --git a/Resources/Prototypes/Entities/Constructible/Ground/vents.yml b/Resources/Prototypes/Entities/Constructible/Ground/vents.yml index 6d84db2f63..64493d89a2 100644 --- a/Resources/Prototypes/Entities/Constructible/Ground/vents.yml +++ b/Resources/Prototypes/Entities/Constructible/Ground/vents.yml @@ -19,9 +19,12 @@ pipeRSI: Constructible/Atmos/pipe.rsi - type: VentVisualizer ventRSI: Constructible/Atmos/vent.rsi - - type: Destructible + - type: Damageable resistances: metallicResistances - thresholdvalue: 100 + - type: Destructible + thresholds: + 100: + Acts: ["Destruction"] - type: entity parent: VentBase diff --git a/Resources/Prototypes/Entities/Constructible/Power/cloning_machine.yml b/Resources/Prototypes/Entities/Constructible/Power/cloning_machine.yml index bcf2a05315..80c1e75916 100644 --- a/Resources/Prototypes/Entities/Constructible/Power/cloning_machine.yml +++ b/Resources/Prototypes/Entities/Constructible/Power/cloning_machine.yml @@ -5,38 +5,41 @@ placement: mode: SnapgridCenter components: - - type: Sprite - netsync: false - sprite: Objects/Specific/Medical/cloning.rsi - layers: - - state: pod_0 - map: ["enum.CloningPodVisualLayers.Machine"] - - type: PowerReceiver - - type: Anchorable - - type: Clickable - - type: InteractionOutline - - type: Physics - mass: 25 - anchored: true - shapes: - - !type:PhysShapeAabb - bounds: "-0.5,-0.25,0.5,0.25" - layer: - - Opaque - - Impassable - - MobImpassable - - VaultImpassable - - type: SnapGrid - offset: Center - - type: CloningPod - cloningTime: 10.0 - - type: Destructible - deadThreshold: 100 - resistances: metallicResistances - - type: Appearance - visuals: - - type: CloningPodVisualizer - - type: UserInterface - interfaces: - - key: enum.CloningPodUIKey.Key - type: CloningPodBoundUserInterface + - type: Sprite + netsync: false + sprite: Objects/Specific/Medical/cloning.rsi + layers: + - state: pod_0 + map: ["enum.CloningPodVisualLayers.Machine"] + - type: PowerReceiver + - type: Anchorable + - type: Clickable + - type: InteractionOutline + - type: Physics + mass: 25 + anchored: true + shapes: + - !type:PhysShapeAabb + bounds: "-0.5,-0.25,0.5,0.25" + layer: + - Opaque + - Impassable + - MobImpassable + - VaultImpassable + - type: SnapGrid + offset: Center + - type: CloningPod + cloningTime: 10.0 + - type: Damageable + resistances: metallicResistances + - type: Destructible + thresholds: + 100: + Acts: ["Destruction"] + - type: Appearance + visuals: + - type: CloningPodVisualizer + - type: UserInterface + interfaces: + - key: enum.CloningPodUIKey.Key + type: CloningPodBoundUserInterface diff --git a/Resources/Prototypes/Entities/Constructible/Power/computers.yml b/Resources/Prototypes/Entities/Constructible/Power/computers.yml index 6e175a10a2..12fef88d91 100644 --- a/Resources/Prototypes/Entities/Constructible/Power/computers.yml +++ b/Resources/Prototypes/Entities/Constructible/Power/computers.yml @@ -94,6 +94,12 @@ - type: PowerReceiver - type: Anchorable - type: Pullable + - type: Damageable + resistances: metallicResistances + - type: Destructible + thresholds: + 100: + Acts: ["Destruction"] - type: BreakableConstruction node: monitorBroken - type: Sprite diff --git a/Resources/Prototypes/Entities/Constructible/Power/debug_power.yml b/Resources/Prototypes/Entities/Constructible/Power/debug_power.yml index f6012f54ee..d81b620554 100644 --- a/Resources/Prototypes/Entities/Constructible/Power/debug_power.yml +++ b/Resources/Prototypes/Entities/Constructible/Power/debug_power.yml @@ -27,9 +27,12 @@ nodeGroupID: HVPower - type: PowerConsumer drawRate: 50 - - type: Breakable - deadThreshold: 100 + - type: Damageable resistances: metallicResistances + - type: Destructible + thresholds: + 100: + Acts: ["Breakage"] - type: Anchorable - type: entity diff --git a/Resources/Prototypes/Entities/Constructible/Power/medical_scanner.yml b/Resources/Prototypes/Entities/Constructible/Power/medical_scanner.yml index bc625d7375..558abd5a9d 100644 --- a/Resources/Prototypes/Entities/Constructible/Power/medical_scanner.yml +++ b/Resources/Prototypes/Entities/Constructible/Power/medical_scanner.yml @@ -31,9 +31,12 @@ - type: SnapGrid offset: Center - type: MedicalScanner - - type: Destructible - deadThreshold: 100 + - type: Damageable resistances: metallicResistances + - type: Destructible + thresholds: + 100: + Acts: ["Destruction"] - type: Appearance visuals: - type: MedicalScannerVisualizer diff --git a/Resources/Prototypes/Entities/Constructible/Power/power_base.yml b/Resources/Prototypes/Entities/Constructible/Power/power_base.yml index 04d65e1751..94642be5fd 100644 --- a/Resources/Prototypes/Entities/Constructible/Power/power_base.yml +++ b/Resources/Prototypes/Entities/Constructible/Power/power_base.yml @@ -232,8 +232,11 @@ supply: 1500 - type: SnapGrid offset: Center - - type: Breakable - deadThreshold: 100 + - type: Damageable resistances: metallicResistances + - type: Destructible + thresholds: + 100: + Acts: ["Breakage"] - type: Anchorable - type: Pullable diff --git a/Resources/Prototypes/Entities/Constructible/Power/vending_machines.yml b/Resources/Prototypes/Entities/Constructible/Power/vending_machines.yml index 5f4ccee31f..3fdd6bdd91 100644 --- a/Resources/Prototypes/Entities/Constructible/Power/vending_machines.yml +++ b/Resources/Prototypes/Entities/Constructible/Power/vending_machines.yml @@ -28,9 +28,12 @@ - SmallImpassable - type: SnapGrid offset: Center - - type: Breakable - deadThreshold: 50 + - type: Damageable resistances: metallicResistances + - type: Destructible + thresholds: + 50: + Acts: ["Breakage"] - type: UserInterface interfaces: - key: enum.VendingMachineUiKey.Key diff --git a/Resources/Prototypes/Entities/Constructible/Power/wires.yml b/Resources/Prototypes/Entities/Constructible/Power/wires.yml index bfbce84ce5..19d8e4bf47 100644 --- a/Resources/Prototypes/Entities/Constructible/Power/wires.yml +++ b/Resources/Prototypes/Entities/Constructible/Power/wires.yml @@ -18,9 +18,12 @@ drawdepth: BelowFloor - type: IconSmooth mode: CardinalFlags - - type: Destructible - thresholdvalue: 100 + - type: Damageable resistances: metallicResistances + - type: Destructible + thresholds: + 100: + Acts: ["Destruction"] - type: SubFloorHide - type: entity @@ -47,11 +50,13 @@ wireDroppedOnCutPrototype: HVWireStack1 wireType: HighVoltage - type: Destructible - resistances: metallicResistances - spawnOnDestroy: - HVWireStack1: - Min: 1 - Max: 1 + thresholds: + 100: + Spawn: + HVWireStack1: + Min: 1 + Max: 1 + Acts: ["Destruction"] - type: entity parent: WireBase @@ -79,11 +84,13 @@ wireDroppedOnCutPrototype: MVWireStack1 wireType: MediumVoltage - type: Destructible - resistances: metallicResistances - spawnOnDestroy: - MVWireStack1: - Min: 1 - Max: 1 + thresholds: + 100: + Spawn: + MVWireStack1: + Min: 1 + Max: 1 + Acts: ["Destruction"] - type: entity parent: WireBase @@ -113,8 +120,10 @@ wireDroppedOnCutPrototype: ApcExtensionCableStack1 wireType: Apc - type: Destructible - resistances: metallicResistances - spawnOnDestroy: - ApcExtensionCableStack1: - Min: 1 - Max: 1 + thresholds: + 100: + Spawn: + ApcExtensionCableStack1: + Min: 1 + Max: 1 + Acts: ["Destruction"] diff --git a/Resources/Prototypes/Entities/Constructible/Specific/Engines/AME/ame_controller.yml b/Resources/Prototypes/Entities/Constructible/Specific/Engines/AME/ame_controller.yml index 258af627e1..fc1ee02e47 100644 --- a/Resources/Prototypes/Entities/Constructible/Specific/Engines/AME/ame_controller.yml +++ b/Resources/Prototypes/Entities/Constructible/Specific/Engines/AME/ame_controller.yml @@ -19,9 +19,12 @@ - MobImpassable - VaultImpassable - SmallImpassable - - type: Destructible - maxHP: 500 + - type: Damageable resistances: metallicResistances + - type: Destructible + thresholds: + 500: + Acts: ["Destruction"] - type: SnapGrid offset: Center - type: Anchorable diff --git a/Resources/Prototypes/Entities/Constructible/Specific/Engines/AME/ame_structure.yml b/Resources/Prototypes/Entities/Constructible/Specific/Engines/AME/ame_structure.yml index 7cfc07bfc0..5fcd251a0e 100644 --- a/Resources/Prototypes/Entities/Constructible/Specific/Engines/AME/ame_structure.yml +++ b/Resources/Prototypes/Entities/Constructible/Specific/Engines/AME/ame_structure.yml @@ -21,13 +21,16 @@ - MobImpassable - VaultImpassable - SmallImpassable - - type: Destructible - maxHP: 500 + - type: Damageable resistances: metallicResistances - spawnOnDestroy: - AMEPart: - Min: 1 - Max: 1 + - type: Destructible + thresholds: + 500: + Spawn: + AMEPart: + Min: 1 + Max: 1 + Acts: ["Destruction"] - type: SnapGrid offset: Center - type: Airtight diff --git a/Resources/Prototypes/Entities/Constructible/Specific/chem_master.yml b/Resources/Prototypes/Entities/Constructible/Specific/chem_master.yml index b64ca01e64..e5657d66e2 100644 --- a/Resources/Prototypes/Entities/Constructible/Specific/chem_master.yml +++ b/Resources/Prototypes/Entities/Constructible/Specific/chem_master.yml @@ -32,12 +32,15 @@ - VaultImpassable - type: SnapGrid offset: Center + - type: Damageable - type: Destructible - deadThreshold: 50 - spawnOnDestroy: - chem_master_broken: - Min: 1 - Max: 1 + thresholds: + 50: + Spawn: + chem_master_broken: + Min: 1 + Max: 1 + Acts: ["Destruction"] - type: UserInterface interfaces: - key: enum.ChemMasterUiKey.Key @@ -75,12 +78,15 @@ - VaultImpassable - type: SnapGrid offset: Center + - type: Damageable - type: Destructible - deadThreshold: 25 - spawnOnDestroy: - SteelSheet1: - Min: 1 - Max: 1 + thresholds: + 25: + Spawn: + SteelSheet1: + Min: 1 + Max: 1 + Acts: ["Destruction"] - type: UserInterface interfaces: - key: enum.ChemMasterUiKey.Key diff --git a/Resources/Prototypes/Entities/Constructible/Specific/disposal.yml b/Resources/Prototypes/Entities/Constructible/Specific/disposal.yml index 375ebb16ee..6bc35ddb1b 100644 --- a/Resources/Prototypes/Entities/Constructible/Specific/disposal.yml +++ b/Resources/Prototypes/Entities/Constructible/Specific/disposal.yml @@ -13,8 +13,12 @@ - type: SnapGrid offset: Center - type: Anchorable - - type: Breakable + - type: Damageable resistances: metallicResistances + - type: Destructible + thresholds: + 100: + Acts: ["Breakage"] - type: Rotatable - type: Pullable @@ -141,9 +145,12 @@ - type: SnapGrid offset: Center - type: Anchorable - - type: Destructible - thresholdvalue: 100 + - type: Damageable resistances: metallicResistances + - type: Destructible + thresholds: + 100: + Acts: ["Destruction"] - type: Appearance visuals: - type: DisposalUnitVisualizer @@ -350,7 +357,6 @@ map: ["enum.DisposalUnitVisualLayers.Handle"] - state: dispover-ready map: ["enum.DisposalUnitVisualLayers.Light"] - - type: PowerReceiver - type: Configuration keys: @@ -378,9 +384,12 @@ - type: SnapGrid offset: Center - type: Anchorable - - type: Destructible - thresholdvalue: 100 + - type: Damageable resistances: metallicResistances + - type: Destructible + thresholds: + 100: + Acts: ["Destruction"] - type: Appearance visuals: - type: DisposalUnitVisualizer diff --git a/Resources/Prototypes/Entities/Constructible/Specific/gravity_generator.yml b/Resources/Prototypes/Entities/Constructible/Specific/gravity_generator.yml index 60d687e25f..f23c9824c7 100644 --- a/Resources/Prototypes/Entities/Constructible/Specific/gravity_generator.yml +++ b/Resources/Prototypes/Entities/Constructible/Specific/gravity_generator.yml @@ -29,9 +29,12 @@ - VaultImpassable - type: Clickable - type: InteractionOutline - - type: Breakable - deadThreshold: 150 + - type: Damageable resistances: metallicResistances + - type: Destructible + thresholds: + 150: + Acts: ["Breakage"] - type: GravityGenerator - type: UserInterface interfaces: diff --git a/Resources/Prototypes/Entities/Constructible/Specific/hydroponics.yml b/Resources/Prototypes/Entities/Constructible/Specific/hydroponics.yml index 40ead1d570..46b857a9c6 100644 --- a/Resources/Prototypes/Entities/Constructible/Specific/hydroponics.yml +++ b/Resources/Prototypes/Entities/Constructible/Specific/hydroponics.yml @@ -4,42 +4,45 @@ placement: mode: SnapgridCenter components: - - type: Clickable - - type: InteractionOutline - - type: Physics - mass: 25 - anchored: true - hard: false - shapes: - - !type:PhysShapeAabb - bounds: "-0.5, -0.5, 0.1, 0.5" - mask: - - Impassable - - MobImpassable - - VaultImpassable - - SmallImpassable - layer: - - Opaque - - MobImpassable - - VaultImpassable - - SmallImpassable - - type: Destructible - deadThreshold: 50 - resistances: metallicResistances - - type: Sprite - sprite: Constructible/Hydroponics/hydro_tools.rsi - state: soil - - type: PlantHolder - drawWarnings: false - - type: SolutionContainer - maxVol: 200 - caps: AddTo, NoExamine - - type: Pourable - - type: SnapGrid - offset: Center - - type: Appearance - visuals: - - type: PlantHolderVisualizer + - type: Clickable + - type: InteractionOutline + - type: Physics + mass: 25 + anchored: true + hard: false + shapes: + - !type:PhysShapeAabb + bounds: "-0.5, -0.5, 0.1, 0.5" + mask: + - Impassable + - MobImpassable + - VaultImpassable + - SmallImpassable + layer: + - Opaque + - MobImpassable + - VaultImpassable + - SmallImpassable + - type: Damageable + resistances: metallicResistances + - type: Destructible + thresholds: + 50: + Acts: ["Destruction"] + - type: Sprite + sprite: Constructible/Hydroponics/hydro_tools.rsi + state: soil + - type: PlantHolder + drawWarnings: false + - type: SolutionContainer + maxVol: 200 + caps: AddTo, NoExamine + - type: Pourable + - type: SnapGrid + offset: Center + - type: Appearance + visuals: + - type: PlantHolderVisualizer - type: entity name: hydroponics tray @@ -47,14 +50,14 @@ id: hydroponicsTray description: An interstellar-grade space farmplot allowing for rapid growth and selective breeding of crops. Just... keep in mind the space weeds. components: - - type: Physics - mass: 25 - hard: true - - type: Anchorable - snap: true - - type: Pullable - - type: Sprite - sprite: Constructible/Hydroponics/hydro_tools.rsi - state: hydrotray3 - - type: PlantHolder - drawWarnings: true + - type: Physics + mass: 25 + hard: true + - type: Anchorable + snap: true + - type: Pullable + - type: Sprite + sprite: Constructible/Hydroponics/hydro_tools.rsi + state: hydrotray3 + - type: PlantHolder + drawWarnings: true diff --git a/Resources/Prototypes/Entities/Constructible/Storage/Closets/closet.yml b/Resources/Prototypes/Entities/Constructible/Storage/Closets/closet.yml index 91518d49f9..d84a4291c6 100644 --- a/Resources/Prototypes/Entities/Constructible/Storage/Closets/closet.yml +++ b/Resources/Prototypes/Entities/Constructible/Storage/Closets/closet.yml @@ -38,9 +38,12 @@ - SmallImpassable - type: EntityStorage - type: PlaceableSurface - - type: Destructible - deadThreshold: 100 + - type: Damageable resistances: metallicResistances + - type: Destructible + thresholds: + 100: + Acts: ["Destruction"] - type: Appearance visuals: - type: StorageVisualizer diff --git a/Resources/Prototypes/Entities/Constructible/Storage/Crates/crate_base.yml b/Resources/Prototypes/Entities/Constructible/Storage/Crates/crate_base.yml index 3b89643bbd..412fc6f5d0 100644 --- a/Resources/Prototypes/Entities/Constructible/Storage/Crates/crate_base.yml +++ b/Resources/Prototypes/Entities/Constructible/Storage/Crates/crate_base.yml @@ -35,10 +35,12 @@ Capacity: 500 CanWeldShut: true - type: PlaceableSurface - - type: Destructible - deadThreshold: 100 + - type: Damageable resistances: metallicResistances - + - type: Destructible + thresholds: + 100: + Acts: ["Destruction"] - type: Appearance visuals: - type: StorageVisualizer diff --git a/Resources/Prototypes/Entities/Constructible/Storage/StorageTanks/base_tank.yml b/Resources/Prototypes/Entities/Constructible/Storage/StorageTanks/base_tank.yml index 8877d5c7a5..a1ceff4fa7 100644 --- a/Resources/Prototypes/Entities/Constructible/Storage/StorageTanks/base_tank.yml +++ b/Resources/Prototypes/Entities/Constructible/Storage/StorageTanks/base_tank.yml @@ -23,9 +23,12 @@ - MobImpassable - VaultImpassable - SmallImpassable - - type: Destructible - deadThreshold: 10 + - type: Damageable resistances: metallicResistances + - type: Destructible + thresholds: + 10: + Acts: ["Destruction"] - type: SolutionContainer maxVol: 1500 caps: RemoveFrom diff --git a/Resources/Prototypes/Entities/Constructible/Walls/asteroid.yml b/Resources/Prototypes/Entities/Constructible/Walls/asteroid.yml index 1a46eff500..633f67b1db 100644 --- a/Resources/Prototypes/Entities/Constructible/Walls/asteroid.yml +++ b/Resources/Prototypes/Entities/Constructible/Walls/asteroid.yml @@ -14,9 +14,12 @@ shapes: - !type:PhysShapeAabb layer: [MobMask] - - type: Destructible - deadThreshold: 100 + - type: Damageable resistances: metallicResistances + - type: Destructible + thresholds: + 100: + Acts: [ "Destruction" ] - type: Occluder sizeX: 32 sizeY: 32 diff --git a/Resources/Prototypes/Entities/Constructible/Walls/girder.yml b/Resources/Prototypes/Entities/Constructible/Walls/girder.yml index 1afdeca842..1ec2f250fc 100644 --- a/Resources/Prototypes/Entities/Constructible/Walls/girder.yml +++ b/Resources/Prototypes/Entities/Constructible/Walls/girder.yml @@ -28,13 +28,16 @@ - VaultImpassable - SmallImpassable - type: Pullable - - type: Destructible - deadThreshold: 50 + - type: Damageable resistances: metallicResistances - spawnOnDestroy: - SteelSheet1: - Min: 1 - Max: 1 + - type: Destructible + thresholds: + 50: + Spawn: + SteelSheet1: + Min: 1 + Max: 1 + Acts: ["Destruction"] - type: SnapGrid offset: Edge placement: diff --git a/Resources/Prototypes/Entities/Constructible/Walls/lighting.yml b/Resources/Prototypes/Entities/Constructible/Walls/lighting.yml index b33d343532..ad40159923 100644 --- a/Resources/Prototypes/Entities/Constructible/Walls/lighting.yml +++ b/Resources/Prototypes/Entities/Constructible/Walls/lighting.yml @@ -36,9 +36,12 @@ - type: PoweredLight bulb: Tube - type: PowerReceiver - - type: Destructible - deadThreshold: 50 + - type: Damageable resistances: metallicResistances + - type: Destructible + thresholds: + 50: + Acts: [ "Destruction" ] - type: entity name: small light @@ -60,22 +63,28 @@ - type: PoweredLight bulb: Bulb - type: PowerReceiver - - type: Destructible - deadThreshold: 25 + - type: Damageable resistances: metallicResistances + - type: Destructible + thresholds: + 25: + Acts: [ "Destruction" ] - type: entity name: unpowered small light id: SmallLight parent: WallLight components: - - type: Sprite - sprite: Constructible/Lighting/light_small.rsi - state: on - - type: PointLight - energy: 1.0 - enabled: true - offset: "-0.5, 0" - - type: Destructible - deadThreshold: 25 - resistances: metallicResistances + - type: Sprite + sprite: Constructible/Lighting/light_small.rsi + state: on + - type: PointLight + energy: 1.0 + enabled: true + offset: "-0.5, 0" + - type: Damageable + resistances: metallicResistances + - type: Destructible + thresholds: + 25: + Acts: [ "Destruction" ] diff --git a/Resources/Prototypes/Entities/Constructible/Walls/low_wall.yml b/Resources/Prototypes/Entities/Constructible/Walls/low_wall.yml index f66b00b08b..c917dc6ba4 100644 --- a/Resources/Prototypes/Entities/Constructible/Walls/low_wall.yml +++ b/Resources/Prototypes/Entities/Constructible/Walls/low_wall.yml @@ -25,10 +25,14 @@ layer: - VaultImpassable - SmallImpassable + - type: Damageable + resistances: metallicResistances + - type: Destructible + thresholds: + 100: + Acts: [ "Destruction" ] - type: BreakableConstruction node: start - deadThreshold: 100 - resistances: metallicResistances - type: SnapGrid offset: Center - type: Climbable diff --git a/Resources/Prototypes/Entities/Constructible/Walls/signs.yml b/Resources/Prototypes/Entities/Constructible/Walls/signs.yml index f6716e4a2c..f5683c831a 100644 --- a/Resources/Prototypes/Entities/Constructible/Walls/signs.yml +++ b/Resources/Prototypes/Entities/Constructible/Walls/signs.yml @@ -8,9 +8,12 @@ - type: Physics shapes: - !type:PhysShapeAabb - - type: Destructible - thresholdvalue: 5 + - type: Damageable resistances: metallicResistances + - type: Destructible + thresholds: + 5: + Acts: [ "Destruction" ] - type: Sprite drawdepth: WallTops sprite: Constructible/Misc/decals.rsi diff --git a/Resources/Prototypes/Entities/Constructible/Walls/walls.yml b/Resources/Prototypes/Entities/Constructible/Walls/walls.yml index 56772e4b08..05b2794815 100644 --- a/Resources/Prototypes/Entities/Constructible/Walls/walls.yml +++ b/Resources/Prototypes/Entities/Constructible/Walls/walls.yml @@ -44,13 +44,16 @@ sprite: Constructible/Structures/Walls/brick.rsi - type: Icon sprite: Constructible/Structures/Walls/brick.rsi - - type: Destructible - deadThreshold: 300 - spawnOnDestroy: - Girder: - Min: 1 - Max: 1 + - type: Damageable resistances: metallicResistances + - type: Destructible + thresholds: + 300: + Spawn: + Girder: + Min: 1 + Max: 1 + Acts: [ "Destruction" ] - type: IconSmooth key: walls base: brick @@ -64,13 +67,16 @@ sprite: Constructible/Structures/Walls/clock.rsi - type: Icon sprite: Constructible/Structures/Walls/clock.rsi - - type: Destructible - deadThreshold: 300 - spawnOnDestroy: - Girder: - Min: 1 - Max: 1 + - type: Damageable resistances: metallicResistances + - type: Destructible + thresholds: + 300: + Spawn: + Girder: + Min: 1 + Max: 1 + Acts: ["Destruction"] - type: IconSmooth key: walls base: clock @@ -84,13 +90,16 @@ sprite: Constructible/Structures/Walls/clown.rsi - type: Icon sprite: Constructible/Structures/Walls/clown.rsi - - type: Destructible - deadThreshold: 300 - spawnOnDestroy: - Girder: - Min: 1 - Max: 1 + - type: Damageable resistances: metallicResistances + - type: Destructible + thresholds: + 300: + Spawn: + Girder: + Min: 1 + Max: 1 + Acts: ["Destruction"] - type: IconSmooth key: walls base: clown @@ -105,13 +114,16 @@ sprite: Constructible/Structures/Walls/cult.rsi - type: Icon sprite: Constructible/Structures/Walls/cult.rsi - - type: Destructible - deadThreshold: 300 - spawnOnDestroy: - Girder: - Min: 1 - Max: 1 + - type: Damageable resistances: metallicResistances + - type: Destructible + thresholds: + 300: + Spawn: + Girder: + Min: 1 + Max: 1 + Acts: ["Destruction"] - type: IconSmooth key: walls base: cult @@ -125,13 +137,16 @@ sprite: Constructible/Structures/Walls/debug.rsi - type: Icon sprite: Constructible/Structures/Walls/debug.rsi - - type: Destructible - deadThreshold: 300 - spawnOnDestroy: - Girder: - Min: 1 - Max: 1 + - type: Damageable resistances: metallicResistances + - type: Destructible + thresholds: + 300: + Spawn: + Girder: + Min: 1 + Max: 1 + Acts: ["Destruction"] - type: IconSmooth key: walls base: debug @@ -145,13 +160,16 @@ sprite: Constructible/Structures/Walls/diamond.rsi - type: Icon sprite: Constructible/Structures/Walls/diamond.rsi - - type: Destructible - deadThreshold: 300 - spawnOnDestroy: - Girder: - Min: 1 - Max: 1 + - type: Damageable resistances: metallicResistances + - type: Destructible + thresholds: + 300: + Spawn: + Girder: + Min: 1 + Max: 1 + Acts: ["Destruction"] - type: IconSmooth key: walls base: diamond @@ -166,13 +184,16 @@ sprite: Constructible/Structures/Walls/gold.rsi - type: Icon sprite: Constructible/Structures/Walls/gold.rsi - - type: Destructible - deadThreshold: 300 - spawnOnDestroy: - Girder: - Min: 1 - Max: 1 + - type: Damageable resistances: metallicResistances + - type: Destructible + thresholds: + 300: + Spawn: + Girder: + Min: 1 + Max: 1 + Acts: ["Destruction"] - type: IconSmooth key: walls base: gold @@ -186,13 +207,16 @@ sprite: Constructible/Structures/Walls/ice.rsi - type: Icon sprite: Constructible/Structures/Walls/ice.rsi - - type: Destructible - deadThreshold: 300 - spawnOnDestroy: - Girder: - Min: 1 - Max: 1 + - type: Damageable resistances: metallicResistances + - type: Destructible + thresholds: + 300: + Spawn: + Girder: + Min: 1 + Max: 1 + Acts: ["Destruction"] - type: IconSmooth key: walls base: ice @@ -206,13 +230,16 @@ sprite: Constructible/Structures/Walls/metal.rsi - type: Icon sprite: Constructible/Structures/Walls/metal.rsi - - type: Destructible - deadThreshold: 300 - spawnOnDestroy: - Girder: - Min: 1 - Max: 1 + - type: Damageable resistances: metallicResistances + - type: Destructible + thresholds: + 300: + Spawn: + Girder: + Min: 1 + Max: 1 + Acts: ["Destruction"] - type: IconSmooth key: walls base: metal @@ -226,13 +253,16 @@ sprite: Constructible/Structures/Walls/plasma.rsi - type: Icon sprite: Constructible/Structures/Walls/plasma.rsi - - type: Destructible - deadThreshold: 300 - spawnOnDestroy: - Girder: - Min: 1 - Max: 1 + - type: Damageable resistances: metallicResistances + - type: Destructible + thresholds: + 300: + Spawn: + Girder: + Min: 1 + Max: 1 + Acts: ["Destruction"] - type: IconSmooth key: walls base: plasma @@ -246,13 +276,16 @@ sprite: Constructible/Structures/Walls/plastic.rsi - type: Icon sprite: Constructible/Structures/Walls/plastic.rsi - - type: Destructible - deadThreshold: 300 - spawnOnDestroy: - Girder: - Min: 1 - Max: 1 + - type: Damageable resistances: metallicResistances + - type: Destructible + thresholds: + 300: + Spawn: + Girder: + Min: 1 + Max: 1 + Acts: ["Destruction"] - type: IconSmooth key: walls base: plastic @@ -271,10 +304,14 @@ - type: Construction graph: girder node: reinforcedWall - - type: BreakableConstruction - deadThreshold: 600 - node: girder + - type: Damageable resistances: metallicResistances + - type: Destructible + thresholds: + 600: + Acts: ["Destruction"] + - type: BreakableConstruction + node: girder - type: ReinforcedWall key: walls base: solid @@ -293,13 +330,16 @@ sprite: Constructible/Structures/Walls/riveted.rsi - type: Icon sprite: Constructible/Structures/Walls/riveted.rsi - - type: Destructible - deadThreshold: 1000 - spawnOnDestroy: - Girder: - Min: 1 - Max: 1 + - type: Damageable resistances: metallicResistances + - type: Destructible + thresholds: + 1000: + Spawn: + Girder: + Min: 1 + Max: 1 + Acts: ["Destruction"] - type: IconSmooth key: walls base: riveted @@ -313,13 +353,16 @@ sprite: Constructible/Structures/Walls/sandstone.rsi - type: Icon sprite: Constructible/Structures/Walls/sandstone.rsi - - type: Destructible - deadThreshold: 300 - spawnOnDestroy: - Girder: - Min: 1 - Max: 1 + - type: Damageable resistances: metallicResistances + - type: Destructible + thresholds: + 300: + Spawn: + Girder: + Min: 1 + Max: 1 + Acts: [ "Destruction" ] - type: IconSmooth key: walls base: sandstone @@ -333,13 +376,16 @@ sprite: Constructible/Structures/Walls/silver.rsi - type: Icon sprite: Constructible/Structures/Walls/silver.rsi - - type: Destructible - deadThreshold: 300 - spawnOnDestroy: - Girder: - Min: 1 - Max: 1 + - type: Damageable resistances: metallicResistances + - type: Destructible + thresholds: + 300: + Spawn: + Girder: + Min: 1 + Max: 1 + Acts: [ "Destruction" ] - type: IconSmooth key: walls base: silver @@ -357,11 +403,15 @@ node: wall - type: Icon sprite: Constructible/Structures/Walls/solid.rsi + - type: Damageable + resistances: metallicResistances + - type: Destructible + thresholds: + 300: + Acts: [ "Destruction" ] - type: BreakableConstruction - deadThreshold: 300 node: girder destroySound: /Audio/Effects/metalbreak.ogg - resistances: metallicResistances - type: IconSmooth key: walls base: solid @@ -375,13 +425,16 @@ sprite: Constructible/Structures/Walls/uranium.rsi - type: Icon sprite: Constructible/Structures/Walls/uranium.rsi - - type: Destructible - deadThreshold: 300 - spawnOnDestroy: - Girder: - Min: 1 - Max: 1 + - type: Damageable resistances: metallicResistances + - type: Destructible + thresholds: + 300: + Spawn: + Girder: + Min: 1 + Max: 1 + Acts: [ "Destruction" ] - type: IconSmooth key: walls base: uranium @@ -395,13 +448,16 @@ sprite: Constructible/Structures/Walls/wood.rsi - type: Icon sprite: Constructible/Structures/Walls/wood.rsi - - type: Destructible - deadThreshold: 300 - spawnOnDestroy: - Girder: - Min: 1 - Max: 1 + - type: Damageable resistances: metallicResistances + - type: Destructible + thresholds: + 300: + Spawn: + Girder: + Min: 1 + Max: 1 + Acts: [ "Destruction" ] - type: IconSmooth key: walls base: wood diff --git a/Resources/Prototypes/Entities/Constructible/Walls/windows.yml b/Resources/Prototypes/Entities/Constructible/Walls/windows.yml index 87ee34936b..c499effc12 100644 --- a/Resources/Prototypes/Entities/Constructible/Walls/windows.yml +++ b/Resources/Prototypes/Entities/Constructible/Walls/windows.yml @@ -26,19 +26,23 @@ - MobImpassable - VaultImpassable - SmallImpassable - - type: Destructible - deadThreshold: 15 + - type: Damageable resistances: metallicResistances - destroySoundCollection: WindowBreak - spawnOnDestroy: - ShardGlass: - Min: 1 - Max: 2 + - type: Destructible + thresholds: + 15: + SoundCollection: WindowBreak + Spawn: + ShardGlass: + Min: 1 + Max: 2 + Acts: ["Destruction"] - type: SnapGrid offset: Center - type: Airtight - type: Window base: window + maxDamage: 15 - type: Construction graph: window node: window @@ -56,15 +60,20 @@ sprite: Constructible/Structures/Windows/reinforced_window.rsi - type: Icon sprite: Constructible/Structures/Windows/reinforced_window.rsi - - type: Destructible - deadThreshold: 75 - spawnOnDestroy: - ShardGlassReinforced: - Min: 1 - Max: 2 + - type: Damageable resistances: metallicResistances + - type: Destructible + thresholds: + 75: + SoundCollection: WindowBreak + Spawn: + ShardGlassReinforced: + Min: 1 + Max: 2 + Acts: ["Destruction"] - type: Window base: rwindow + maxDamage: 75 - type: Construction graph: window node: reinforcedWindow @@ -79,15 +88,21 @@ sprite: Constructible/Structures/Windows/phoron_window.rsi - type: Icon sprite: Constructible/Structures/Windows/phoron_window.rsi + - type: Damageable + resistances: metallicResistances - type: Destructible - deadThreshold: 100 - spawnOnDestroy: - ShardGlassPhoron: - Min: 1 - Max: 2 + thresholds: + 100: + SoundCollection: WindowBreak + Spawn: + ShardGlassPhoron: + Min: 1 + Max: 2 + Acts: ["Destruction"] resistances: metallicResistances - type: Window base: pwindow + maxDamage: 100 - type: Construction graph: window node: phoronWindow diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml b/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml index 1cee22ec48..0a232cb063 100644 --- a/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml +++ b/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml @@ -40,9 +40,11 @@ - Opaque - MobImpassable - type: Damageable - criticalThreshold: 50 - deadThreshold: 100 - - type: MobStateManager + - type: MobState + thresholds: + 0: !type:NormalMobState {} + 50: !type:CriticalMobState {} + 100: !type:DeadMobState {} - type: HeatResistance - type: CombatMode - type: Teleportable diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/carp.yml b/Resources/Prototypes/Entities/Mobs/NPCs/carp.yml index 436f64d0a3..4d0d511738 100644 --- a/Resources/Prototypes/Entities/Mobs/NPCs/carp.yml +++ b/Resources/Prototypes/Entities/Mobs/NPCs/carp.yml @@ -34,9 +34,11 @@ - Opaque - MobImpassable - type: Damageable - criticalThreshold: 50 - deadThreshold: 100 - - type: MobStateManager + - type: MobState + thresholds: + 0: !type:NormalMobState {} + 50: !type:CriticalMobState {} + 100: !type:DeadMobState {} - type: HeatResistance - type: CombatMode - type: Teleportable diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/mimic.yml b/Resources/Prototypes/Entities/Mobs/NPCs/mimic.yml index 8a487abc24..9d93e75b23 100644 --- a/Resources/Prototypes/Entities/Mobs/NPCs/mimic.yml +++ b/Resources/Prototypes/Entities/Mobs/NPCs/mimic.yml @@ -38,9 +38,11 @@ - Opaque - MobImpassable - type: Damageable - criticalThreshold: 100 - deadThreshold: 200 - - type: MobStateManager + - type: MobState + thresholds: + 0: !type:NormalMobState {} + 100: !type:CriticalMobState {} + 200: !type:DeadMobState {} - type: HeatResistance - type: CombatMode - type: Teleportable diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/pets.yml b/Resources/Prototypes/Entities/Mobs/NPCs/pets.yml index 478b3bb634..20545cb1ba 100644 --- a/Resources/Prototypes/Entities/Mobs/NPCs/pets.yml +++ b/Resources/Prototypes/Entities/Mobs/NPCs/pets.yml @@ -35,9 +35,11 @@ - Opaque - MobImpassable - type: Damageable - criticalThreshold: 50 - deadThreshold: 100 - - type: MobStateManager + - type: MobState + thresholds: + 0: !type:NormalMobState {} + 50: !type:CriticalMobState {} + 100: !type:DeadMobState {} - type: HeatResistance - type: CombatMode - type: Teleportable diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/xeno.yml b/Resources/Prototypes/Entities/Mobs/NPCs/xeno.yml index ccd3a203e6..54a40dc731 100644 --- a/Resources/Prototypes/Entities/Mobs/NPCs/xeno.yml +++ b/Resources/Prototypes/Entities/Mobs/NPCs/xeno.yml @@ -37,9 +37,11 @@ - Opaque - MobImpassable - type: Damageable - criticalThreshold: 150 - deadThreshold: 200 - - type: MobStateManager + - type: MobState + thresholds: + 0: !type:NormalMobState {} + 150: !type:CriticalMobState {} + 200: !type:DeadMobState {} - type: Metabolism - type: HeatResistance - type: CombatMode diff --git a/Resources/Prototypes/Entities/Mobs/Species/human.yml b/Resources/Prototypes/Entities/Mobs/Species/human.yml index c5b20bba9a..64af99abc8 100644 --- a/Resources/Prototypes/Entities/Mobs/Species/human.yml +++ b/Resources/Prototypes/Entities/Mobs/Species/human.yml @@ -142,8 +142,6 @@ centerSlot: torso - type: Damageable damagePrototype: biologicalDamageContainer - criticalThreshold: 100 - deadThreshold: 200 - type: Metabolism metabolismHeat: 5000 radiatedHeat: 400 @@ -158,7 +156,11 @@ Oxygen: 0.00045572916 CarbonDioxide: 0.00015190972 - type: Internals - - type: MobStateManager + - type: MobState + thresholds: + 0: !type:NormalMobState {} + 100: !type:CriticalMobState {} + 200: !type:DeadMobState {} - type: HeatResistance - type: Appearance visuals: @@ -304,9 +306,11 @@ centerSlot: torso - type: Damageable damagePrototype: biologicalDamageContainer - criticalThreshold: 100 - deadThreshold: 200 - - type: MobStateManager + - type: MobState + thresholds: + 0: !type:NormalMobState {} + 100: !type:CriticalMobState {} + 200: !type:DeadMobState {} - type: Appearance visuals: - type: RotationVisualizer diff --git a/Resources/Prototypes/Entities/Objects/Misc/fluff_lights.yml b/Resources/Prototypes/Entities/Objects/Misc/fluff_lights.yml index 52fb36990e..41169aa299 100644 --- a/Resources/Prototypes/Entities/Objects/Misc/fluff_lights.yml +++ b/Resources/Prototypes/Entities/Objects/Misc/fluff_lights.yml @@ -5,12 +5,12 @@ description: abstract: true components: - - type: HandheldLight - - type: Sprite - sprite: Objects/Misc/lights.rsi - - type: Item - sprite: Objects/Misc/lights.rsi - HeldPrefix: off + - type: HandheldLight + - type: Sprite + sprite: Objects/Misc/lights.rsi + - type: Item + sprite: Objects/Misc/lights.rsi + HeldPrefix: off - type: entity name: lamp @@ -18,19 +18,19 @@ parent: BaseLamp description: A light emitting device. components: - - type: Sprite - layers: - - state: lamp - - state: lamp_on - shader: unshaded - visible: false - - type: PointLight - enabled: false - radius: 3 - energy: 2 - - type: Appearance - visuals: - - type: FlashLightVisualizer + - type: Sprite + layers: + - state: lamp + - state: lamp_on + shader: unshaded + visible: false + - type: PointLight + enabled: false + radius: 3 + energy: 2 + - type: Appearance + visuals: + - type: FlashLightVisualizer - type: entity name: banana lamp @@ -38,19 +38,19 @@ parent: BaseLamp description: A light emitting device, shaped like bannana. components: - - type: Sprite - layers: - - state: bananalamp - - state: bananalamp_on - shader: unshaded - visible: false - - type: PointLight - enabled: false - radius: 3 - energy: 2 - - type: Appearance - visuals: - - type: FlashLightVisualizer + - type: Sprite + layers: + - state: bananalamp + - state: bananalamp_on + shader: unshaded + visible: false + - type: PointLight + enabled: false + radius: 3 + energy: 2 + - type: Appearance + visuals: + - type: FlashLightVisualizer - type: entity name: desk lamp @@ -58,19 +58,19 @@ parent: BaseLamp description: A light emitting device, that would look great on a desk. components: - - type: Sprite - layers: - - state: lampgreen - - state: lampgreen_on - shader: unshaded - visible: false - - type: PointLight - enabled: false - radius: 3 - energy: 2 - - type: Appearance - visuals: - - type: FlashLightVisualizer + - type: Sprite + layers: + - state: lampgreen + - state: lampgreen_on + shader: unshaded + visible: false + - type: PointLight + enabled: false + radius: 3 + energy: 2 + - type: Appearance + visuals: + - type: FlashLightVisualizer - type: entity name: torch @@ -78,25 +78,25 @@ parent: BaseLamp description: components: - - type: Sprite - sprite: Objects/Misc/torch.rsi - layers: - - state: torch - - state: torch_on - shader: unshaded - visible: false - - type: Item - sprite: Objects/Misc/torch.rsi - HeldPrefix: off - - type: PointLight - enabled: false - radius: 1 - energy: 4 - color: "#FFC458" - - type: LoopingSound - - type: Appearance - visuals: - - type: LanternVisualizer + - type: Sprite + sprite: Objects/Misc/torch.rsi + layers: + - state: torch + - state: torch_on + shader: unshaded + visible: false + - type: Item + sprite: Objects/Misc/torch.rsi + HeldPrefix: off + - type: PointLight + enabled: false + radius: 1 + energy: 4 + color: "#FFC458" + - type: LoopingSound + - type: Appearance + visuals: + - type: LanternVisualizer - type: entity name: floodlight @@ -104,37 +104,40 @@ parent: BaseLamp description: components: - - type: Sprite - layers: - - state: floodlight - - state: floodlight_on - shader: unshaded - visible: false - - type: Physics - shapes: - - !type:PhysShapeAabb - layer: - - Opaque - - Impassable - - MobImpassable - - VaultImpassable - - SmallImpassable - - type: PointLight - enabled: false - radius: 8 - energy: 5 - - type: Anchorable - - type: Destructible - deadThreshold: 10 - spawnOnDestroy: - FloodlightBroken: - Min: 1 - Max: 1 - destroySound: /Audio/Effects/glass_break1.ogg - resistances: metallicResistances - - type: Appearance - visuals: - - type: FlashLightVisualizer + - type: Sprite + layers: + - state: floodlight + - state: floodlight_on + shader: unshaded + visible: false + - type: Physics + shapes: + - !type:PhysShapeAabb + layer: + - Opaque + - Impassable + - MobImpassable + - VaultImpassable + - SmallImpassable + - type: PointLight + enabled: false + radius: 8 + energy: 5 + - type: Anchorable + - type: Damageable + resistances: metallicResistances + - type: Destructible + thresholds: + 10: + Sound: /Audio/Effects/glass_break1.ogg + Spawn: + FloodlightBroken: + Min: 1 + Max: 1 + Acts: ["Destruction"] + - type: Appearance + visuals: + - type: FlashLightVisualizer - type: entity name: broken floodlight @@ -142,24 +145,27 @@ parent: BaseItem description: components: - - type: Sprite - sprite: Objects/Misc/lights.rsi - state: floodlight_broken - - type: Anchorable - - type: Destructible - deadThreshold: 20 - spawnOnDestroy: - SteelSheet1: - Min: 1 - Max: 1 - destroySound: /Audio/Effects/metalbreak.ogg - resistances: metallicResistances - - type: Physics - shapes: - - !type:PhysShapeAabb - layer: - - Opaque - - Impassable - - MobImpassable - - VaultImpassable - - SmallImpassable + - type: Sprite + sprite: Objects/Misc/lights.rsi + state: floodlight_broken + - type: Anchorable + - type: Damageable + resistances: metallicResistances + - type: Destructible + thresholds: + 20: + Spawn: + SteelSheet1: + Min: 1 + Max: 1 + Sound: /Audio/Effects/metalbreak.ogg + Acts: ["Destruction"] + - type: Physics + shapes: + - !type:PhysShapeAabb + layer: + - Opaque + - Impassable + - MobImpassable + - VaultImpassable + - SmallImpassable diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Explosives/grenades.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Explosives/grenades.yml index c6790d818c..add77e2e91 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Explosives/grenades.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Explosives/grenades.yml @@ -9,7 +9,6 @@ layers: - state: icon map: ["enum.TriggerVisualLayers.Base"] - - type: Item size: 5 - type: OnUseTimerTrigger @@ -19,8 +18,11 @@ heavyImpactRange: 2 lightImpactRange: 4 flashRange: 7 + - type: Damageable - type: Destructible - deadThreshold: 10 + thresholds: + 10: + Acts: ["Destruction"] - type: Appearance visuals: - type: TimerTriggerVisualizer @@ -37,14 +39,16 @@ layers: - state: icon map: ["enum.TriggerVisualLayers.Base"] - - type: Item size: 5 - type: OnUseTimerTrigger delay: 3.5 - type: FlashExplosive + - type: Damageable - type: Destructible - deadThreshold: 10 + thresholds: + 10: + Acts: ["Destruction"] - type: Appearance visuals: - type: TimerTriggerVisualizer @@ -61,7 +65,6 @@ layers: - state: icon map: ["enum.TriggerVisualLayers.Base"] - - type: Item size: 5 - type: OnUseTimerTrigger @@ -71,8 +74,11 @@ heavyImpactRange: 5 lightImpactRange: 7 flashRange: 10 + - type: Damageable - type: Destructible - deadThreshold: 10 + thresholds: + 10: + Acts: ["Destruction"] - type: Appearance visuals: - type: TimerTriggerVisualizer @@ -89,7 +95,6 @@ layers: - state: icon map: ["enum.TriggerVisualLayers.Base"] - - type: Item size: 5 - type: OnUseTimerTrigger @@ -98,8 +103,11 @@ devastationRange: 25 heavyImpactRange: 25 flashRange: 50 + - type: Damageable - type: Destructible - thresholdvalue: 50 + thresholds: + 50: + Acts: ["Destruction"] - type: Appearance visuals: - type: TimerTriggerVisualizer