From 05e31c2cd38b3b718bd1cb2e41a2c0d2f353ea31 Mon Sep 17 00:00:00 2001 From: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com> Date: Mon, 28 Jun 2021 14:17:08 +1000 Subject: [PATCH 01/30] Don't pushback when throwing while buckled (#4232) * Don't pushback when throwing while buckled * Address reviews * Fix --- Content.Server/Throwing/ThrowHelper.cs | 8 +++++++- Content.Shared/Buckle/SharedBuckleSystem.cs | 8 ++++++++ Content.Shared/Throwing/ThrowAttemptEvent.cs | 5 +++++ 3 files changed, 20 insertions(+), 1 deletion(-) diff --git a/Content.Server/Throwing/ThrowHelper.cs b/Content.Server/Throwing/ThrowHelper.cs index c188b41aba..52145f357b 100644 --- a/Content.Server/Throwing/ThrowHelper.cs +++ b/Content.Server/Throwing/ThrowHelper.cs @@ -54,7 +54,13 @@ namespace Content.Server.Throwing // Give thrower an impulse in the other direction if (user != null && pushbackRatio > 0.0f && user.TryGetComponent(out IPhysBody? body)) { - body.ApplyLinearImpulse(-direction * pushbackRatio); + var msg = new ThrowPushbackAttemptEvent(); + body.Owner.EntityManager.EventBus.RaiseLocalEvent(body.Owner.Uid, msg); + + if (!msg.Cancelled) + { + body.ApplyLinearImpulse(-direction * pushbackRatio); + } } } } diff --git a/Content.Shared/Buckle/SharedBuckleSystem.cs b/Content.Shared/Buckle/SharedBuckleSystem.cs index 2072ca2d2d..2363b2b196 100644 --- a/Content.Shared/Buckle/SharedBuckleSystem.cs +++ b/Content.Shared/Buckle/SharedBuckleSystem.cs @@ -1,5 +1,6 @@ using Content.Shared.Buckle.Components; using Content.Shared.Standing; +using Content.Shared.Throwing; using Robust.Shared.GameObjects; using Robust.Shared.Physics.Dynamics; @@ -13,6 +14,7 @@ namespace Content.Shared.Buckle SubscribeLocalEvent(PreventCollision); SubscribeLocalEvent(HandleDown); SubscribeLocalEvent(HandleStand); + SubscribeLocalEvent(HandleThrowPushback); } private void HandleStand(EntityUid uid, SharedBuckleComponent component, StandAttemptEvent args) @@ -31,6 +33,12 @@ namespace Content.Shared.Buckle } } + private void HandleThrowPushback(EntityUid uid, SharedBuckleComponent component, ThrowPushbackAttemptEvent args) + { + if (!component.Buckled) return; + args.Cancel(); + } + private void PreventCollision(EntityUid uid, SharedBuckleComponent component, PreventCollideEvent args) { if (args.BodyB.Owner.Uid != component.LastEntityBuckledTo) return; diff --git a/Content.Shared/Throwing/ThrowAttemptEvent.cs b/Content.Shared/Throwing/ThrowAttemptEvent.cs index a862a8a82e..ba17ab4789 100644 --- a/Content.Shared/Throwing/ThrowAttemptEvent.cs +++ b/Content.Shared/Throwing/ThrowAttemptEvent.cs @@ -11,4 +11,9 @@ namespace Content.Shared.Throwing public IEntity Entity { get; } } + + /// + /// Raised when we try to pushback an entity from throwing + /// + public sealed class ThrowPushbackAttemptEvent : CancellableEntityEventArgs {} } From 2307dcb675f55a68a36daf57bc321a2b8c18e966 Mon Sep 17 00:00:00 2001 From: Vera Aguilera Puerto Date: Mon, 28 Jun 2021 11:01:46 +0200 Subject: [PATCH 02/30] Update submodule, fixes MIDI stop crash --- Resources/Changelog/Parts/midi.yml | 4 ++++ RobustToolbox | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) create mode 100644 Resources/Changelog/Parts/midi.yml diff --git a/Resources/Changelog/Parts/midi.yml b/Resources/Changelog/Parts/midi.yml new file mode 100644 index 0000000000..fa68fa7c34 --- /dev/null +++ b/Resources/Changelog/Parts/midi.yml @@ -0,0 +1,4 @@ +author: Zumorica +changes: + - type: Fix + message: Fix crash when MIDI stops playing. diff --git a/RobustToolbox b/RobustToolbox index 0dfd3b7443..a6be66949d 160000 --- a/RobustToolbox +++ b/RobustToolbox @@ -1 +1 @@ -Subproject commit 0dfd3b7443cf11bb763b29059732053917a2cacb +Subproject commit a6be66949dcba74fac0c0f2eaa88bd4700e81e42 From ff6cd0043843207d11f8eb067e413940b734469e Mon Sep 17 00:00:00 2001 From: Vera Aguilera Puerto Date: Mon, 28 Jun 2021 13:08:10 +0200 Subject: [PATCH 03/30] Fix spray puff and fire extinguisher cloud not moving. They were anchored and had the wrong body type... --- Resources/Changelog/Parts/spray.yml | 4 ++++ .../Prototypes/Entities/Objects/Misc/fire_extinguisher.yml | 2 +- .../Prototypes/Entities/Objects/Specific/Janitorial/spray.yml | 3 +-- 3 files changed, 6 insertions(+), 3 deletions(-) create mode 100644 Resources/Changelog/Parts/spray.yml diff --git a/Resources/Changelog/Parts/spray.yml b/Resources/Changelog/Parts/spray.yml new file mode 100644 index 0000000000..444be3dd4b --- /dev/null +++ b/Resources/Changelog/Parts/spray.yml @@ -0,0 +1,4 @@ +author: Zumorica +changes: + - type: Fix # One of the following: Add, Remove, Tweak, Fix + message: Fixes spray puff and fire extinguisher cloud not moving. diff --git a/Resources/Prototypes/Entities/Objects/Misc/fire_extinguisher.yml b/Resources/Prototypes/Entities/Objects/Misc/fire_extinguisher.yml index dcbe3d4fde..a024fba25d 100644 --- a/Resources/Prototypes/Entities/Objects/Misc/fire_extinguisher.yml +++ b/Resources/Prototypes/Entities/Objects/Misc/fire_extinguisher.yml @@ -53,7 +53,7 @@ - state: extinguish map: [ "enum.VaporVisualLayers.Base" ] - type: Physics - bodyType: KinematicController + bodyType: Dynamic fixtures: - shape: !type:PhysShapeAabb diff --git a/Resources/Prototypes/Entities/Objects/Specific/Janitorial/spray.yml b/Resources/Prototypes/Entities/Objects/Specific/Janitorial/spray.yml index 2226d60bbd..0bae25cef0 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Janitorial/spray.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Janitorial/spray.yml @@ -57,7 +57,6 @@ name: "vapor" abstract: true components: - - type: SnapGrid - type: SolutionContainer maxVol: 50 - type: Vapor @@ -69,7 +68,7 @@ - state: chempuff map: [ "enum.VaporVisualLayers.Base" ] - type: Physics - bodyType: KinematicController + bodyType: Dynamic fixtures: - shape: !type:PhysShapeAabb From dfe29a1550618ff0574eff22d10acb94ce9d85db Mon Sep 17 00:00:00 2001 From: Vera Aguilera Puerto Date: Mon, 28 Jun 2021 13:17:37 +0200 Subject: [PATCH 04/30] Clean up vending machine prototypes. --- .../Constructible/Power/vending_machines.yml | 36 ------------------- 1 file changed, 36 deletions(-) diff --git a/Resources/Prototypes/Entities/Constructible/Power/vending_machines.yml b/Resources/Prototypes/Entities/Constructible/Power/vending_machines.yml index eabdb87ed6..50f2e4c882 100644 --- a/Resources/Prototypes/Entities/Constructible/Power/vending_machines.yml +++ b/Resources/Prototypes/Entities/Constructible/Power/vending_machines.yml @@ -54,8 +54,6 @@ pack: AmmoVendInventory - type: Advertise pack: AmmoVendAds - minWait: 480 # 8 minutes - maxWait: 600 # 10 minutes - type: Speech - type: Sprite sprite: Constructible/Power/VendingMachines/ammo.rsi @@ -84,8 +82,6 @@ pack: BoozeOMatInventory - type: Advertise pack: BoozeOMatAds - minWait: 480 # 8 minutes - maxWait: 600 # 10 minutes - type: Speech - type: Sprite sprite: Constructible/Power/VendingMachines/boozeomat.rsi @@ -116,8 +112,6 @@ pack: BarDrobe - type: Advertise pack: BarDrobeAds - minWait: 480 # 8 minutes - maxWait: 600 # 10 minutes - type: Sprite sprite: Constructible/Power/VendingMachines/bardrobe.rsi layers: @@ -174,8 +168,6 @@ pack: CigaretteMachineInventory - type: Advertise pack: CigaretteMachineAds - minWait: 480 # 8 minutes - maxWait: 600 # 10 minutes - type: Speech - type: Sprite sprite: Constructible/Power/VendingMachines/cigs.rsi @@ -206,8 +198,6 @@ pack: ClothesMateInventory - type: Advertise pack: ClothesMateAds - minWait: 480 # 8 minutes - maxWait: 600 # 10 minutes - type: Speech - type: Sprite sprite: Constructible/Power/VendingMachines/clothing.rsi @@ -237,8 +227,6 @@ pack: HotDrinksMachineInventory - type: Advertise pack: HotDrinksMachineAds - minWait: 480 # 8 minutes - maxWait: 600 # 10 minutes - type: Speech - type: Sprite sprite: Constructible/Power/VendingMachines/coffee.rsi @@ -273,8 +261,6 @@ pack: RobustSoftdrinksInventory - type: Advertise pack: RobustSoftdrinksAds - minWait: 480 # 8 minutes - maxWait: 600 # 10 minutes - type: Speech - type: Sprite sprite: Constructible/Power/VendingMachines/cola.rsi @@ -305,8 +291,6 @@ pack: DinnerwareInventory - type: Advertise pack: DinnerwareAds - minWait: 480 # 8 minutes - maxWait: 600 # 10 minutes - type: Sprite sprite: Constructible/Power/VendingMachines/dinnerware.rsi layers: @@ -336,8 +320,6 @@ pack: DiscountDansInventory - type: Advertise pack: DiscountDansAds - minWait: 480 # 8 minutes - maxWait: 600 # 10 minutes - type: Speech - type: Sprite sprite: Constructible/Power/VendingMachines/discount.rsi @@ -395,8 +377,6 @@ pack: NanoMedPlusInventory - type: Advertise pack: NanoMedAds - minWait: 480 # 8 minutes - maxWait: 600 # 10 minutes - type: Sprite sprite: Constructible/Power/VendingMachines/medical.rsi layers: @@ -428,8 +408,6 @@ pack: NutriMaxInventory - type: Advertise pack: NutriMaxAds - minWait: 480 # 8 minutes - maxWait: 600 # 10 minutes - type: Sprite sprite: Constructible/Power/VendingMachines/nutri.rsi layers: @@ -460,8 +438,6 @@ pack: SecTechInventory - type: Advertise pack: SecTechAds - minWait: 480 # 8 minutes - maxWait: 600 # 10 minutes - type: Sprite sprite: Constructible/Power/VendingMachines/sec.rsi layers: @@ -491,8 +467,6 @@ pack: MegaSeedServitorInventory - type: Advertise pack: MegaSeedAds - minWait: 480 # 8 minutes - maxWait: 600 # 10 minutes - type: Sprite sprite: Constructible/Power/VendingMachines/seeds.rsi layers: @@ -522,8 +496,6 @@ pack: SmartFridgeInventory - type: Advertise pack: SmartFridgeAds - minWait: 480 # 8 minutes - maxWait: 600 # 10 minutes - type: Speech - type: Sprite sprite: Constructible/Power/VendingMachines/smartfridge.rsi @@ -551,8 +523,6 @@ pack: GetmoreChocolateCorpInventory - type: Advertise pack: GetmoreChocolateCorpAds - minWait: 480 # 8 minutes - maxWait: 600 # 10 minutes - type: Speech - type: Sprite sprite: Constructible/Power/VendingMachines/snack.rsi @@ -582,8 +552,6 @@ pack: BodaInventory - type: Advertise pack: BodaAds - minWait: 480 # 8 minutes - maxWait: 600 # 10 minutes - type: Speech - type: Sprite sprite: Constructible/Power/VendingMachines/sovietsoda.rsi @@ -613,8 +581,6 @@ pack: AutoDrobeInventory - type: Advertise pack: AutoDrobeAds - minWait: 480 # 8 minutes - maxWait: 600 # 10 minutes - type: Speech - type: Sprite sprite: Constructible/Power/VendingMachines/theater.rsi @@ -648,8 +614,6 @@ pack: VendomatInventory - type: Advertise pack: VendomatAds - minWait: 480 # 8 minutes - maxWait: 600 # 10 minutes - type: Speech - type: Sprite sprite: Constructible/Power/VendingMachines/vendomat.rsi From 599814d5a02719c71508251032ec9cd1787c0044 Mon Sep 17 00:00:00 2001 From: Vera Aguilera Puerto Date: Mon, 28 Jun 2021 13:21:41 +0200 Subject: [PATCH 05/30] Chat manager won't enqueue speech bubbles in a different map than you eye. Fixes #4215 --- Content.Client/Chat/Managers/ChatManager.cs | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/Content.Client/Chat/Managers/ChatManager.cs b/Content.Client/Chat/Managers/ChatManager.cs index 5f77e97c15..4af4b111e4 100644 --- a/Content.Client/Chat/Managers/ChatManager.cs +++ b/Content.Client/Chat/Managers/ChatManager.cs @@ -585,6 +585,10 @@ namespace Content.Client.Chat.Managers private void EnqueueSpeechBubble(IEntity entity, string contents, SpeechBubble.SpeechType speechType) { + // Don't enqueue speech bubbles for other maps. TODO: Support multiple viewports/maps? + if (entity.Transform.MapID != _eyeManager.CurrentMap) + return; + if (!_queuedSpeechBubbles.TryGetValue(entity.Uid, out var queueData)) { queueData = new SpeechBubbleQueueData(); @@ -600,8 +604,7 @@ namespace Content.Client.Chat.Managers private void CreateSpeechBubble(IEntity entity, SpeechBubbleData speechData) { - var bubble = - SpeechBubble.CreateSpeechBubble(speechData.Type, speechData.Message, entity, _eyeManager, this); + var bubble = SpeechBubble.CreateSpeechBubble(speechData.Type, speechData.Message, entity, _eyeManager, this); if (_activeSpeechBubbles.TryGetValue(entity.Uid, out var existing)) { From 6a4e0beacc5231cb099b9a80c4535186e0c39046 Mon Sep 17 00:00:00 2001 From: Vera Aguilera Puerto Date: Mon, 28 Jun 2021 13:45:23 +0200 Subject: [PATCH 06/30] Fix being able to play structure instruments while in crit/dead. Fixes #4038 --- .../Instruments/InstrumentComponent.cs | 28 +++++++++++-------- Resources/Changelog/Parts/instrument_dead.yml | 4 +++ 2 files changed, 20 insertions(+), 12 deletions(-) create mode 100644 Resources/Changelog/Parts/instrument_dead.yml diff --git a/Content.Server/Instruments/InstrumentComponent.cs b/Content.Server/Instruments/InstrumentComponent.cs index 62749507e2..98fed4906d 100644 --- a/Content.Server/Instruments/InstrumentComponent.cs +++ b/Content.Server/Instruments/InstrumentComponent.cs @@ -292,26 +292,30 @@ namespace Content.Server.Instruments void IActivate.Activate(ActivateEventArgs eventArgs) { - if (Handheld || !eventArgs.User.TryGetComponent(out ActorComponent? actor)) return; + if (Handheld) + return; - if (InstrumentPlayer != null) return; - - InstrumentPlayer = actor.PlayerSession; - OpenUserInterface(actor.PlayerSession); + InteractInstrument(eventArgs.User); } bool IUse.UseEntity(UseEntityEventArgs eventArgs) { - if (!eventArgs.User.TryGetComponent(out ActorComponent? actor)) return false; - - if (InstrumentPlayer == actor.PlayerSession) - { - OpenUserInterface(actor.PlayerSession); - } - + InteractInstrument(eventArgs.User); return false; } + private void InteractInstrument(IEntity user) + { + if (!user.TryGetComponent(out ActorComponent? actor)) return; + + if (InstrumentPlayer != null || !EntitySystem.Get().CanInteract(user)) return; + + InstrumentPlayer = actor.PlayerSession; + OpenUserInterface(InstrumentPlayer); + + return; + } + private void UserInterfaceOnClosed(IPlayerSession player) { if (Handheld || player != InstrumentPlayer) return; diff --git a/Resources/Changelog/Parts/instrument_dead.yml b/Resources/Changelog/Parts/instrument_dead.yml new file mode 100644 index 0000000000..727a4a6ce6 --- /dev/null +++ b/Resources/Changelog/Parts/instrument_dead.yml @@ -0,0 +1,4 @@ +author: Zumorica +changes: + - type: Fix + message: Fix being able to play From a1088faa3508f4ad456dce6ae6b5f53bf6082d76 Mon Sep 17 00:00:00 2001 From: Vera Aguilera Puerto Date: Mon, 28 Jun 2021 14:09:46 +0200 Subject: [PATCH 07/30] When the changelog is sus. --- Resources/Changelog/Parts/instrument_dead.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Resources/Changelog/Parts/instrument_dead.yml b/Resources/Changelog/Parts/instrument_dead.yml index 727a4a6ce6..a7d3cb0b31 100644 --- a/Resources/Changelog/Parts/instrument_dead.yml +++ b/Resources/Changelog/Parts/instrument_dead.yml @@ -1,4 +1,4 @@ author: Zumorica changes: - type: Fix - message: Fix being able to play + message: Fix being able to play instruments while incapacitated. From 9bedfe79becae34dd47abbb070e3f6ab31f7c56b Mon Sep 17 00:00:00 2001 From: Vera Aguilera Puerto <6766154+Zumorica@users.noreply.github.com> Date: Mon, 28 Jun 2021 14:17:37 +0200 Subject: [PATCH 08/30] Fix being able to start pulling something while incapacitated. (#4240) --- Content.Client/MobState/MobStateComponent.cs | 1 + .../MobState/States/MobStateManager.cs | 1 + .../SharedMobStateComponent.cs | 3 ++- .../EntitySystems/SharedMobStateSystem.cs | 22 +++++++++++++++++++ .../Components/SharedPullableComponent.cs | 5 +++++ .../Pulling/Events/StartPullAttemptEvent.cs | 19 ++++++++++++++++ Content.Shared/Pulling/SharedPullingSystem.cs | 8 +++++++ 7 files changed, 58 insertions(+), 1 deletion(-) rename Content.Shared/MobState/{State => Components}/SharedMobStateComponent.cs (99%) create mode 100644 Content.Shared/MobState/EntitySystems/SharedMobStateSystem.cs create mode 100644 Content.Shared/Pulling/Events/StartPullAttemptEvent.cs diff --git a/Content.Client/MobState/MobStateComponent.cs b/Content.Client/MobState/MobStateComponent.cs index caa215c0c1..55d67780ef 100644 --- a/Content.Client/MobState/MobStateComponent.cs +++ b/Content.Client/MobState/MobStateComponent.cs @@ -1,4 +1,5 @@ using Content.Shared.MobState; +using Content.Shared.MobState.Components; using Content.Shared.MobState.State; using Robust.Shared.GameObjects; diff --git a/Content.Server/MobState/States/MobStateManager.cs b/Content.Server/MobState/States/MobStateManager.cs index 3e607b46e2..ac15fba39a 100644 --- a/Content.Server/MobState/States/MobStateManager.cs +++ b/Content.Server/MobState/States/MobStateManager.cs @@ -1,4 +1,5 @@ using Content.Shared.MobState; +using Content.Shared.MobState.Components; using Content.Shared.MobState.State; using Robust.Shared.GameObjects; diff --git a/Content.Shared/MobState/State/SharedMobStateComponent.cs b/Content.Shared/MobState/Components/SharedMobStateComponent.cs similarity index 99% rename from Content.Shared/MobState/State/SharedMobStateComponent.cs rename to Content.Shared/MobState/Components/SharedMobStateComponent.cs index c9bfe76b69..ffc8112549 100644 --- a/Content.Shared/MobState/State/SharedMobStateComponent.cs +++ b/Content.Shared/MobState/Components/SharedMobStateComponent.cs @@ -7,6 +7,7 @@ using Content.Shared.ActionBlocker; using Content.Shared.Alert; using Content.Shared.Damage; using Content.Shared.Damage.Components; +using Content.Shared.MobState.State; using Content.Shared.NetIDs; using Robust.Shared.GameObjects; using Robust.Shared.Players; @@ -14,7 +15,7 @@ using Robust.Shared.Serialization; using Robust.Shared.Serialization.Manager.Attributes; using Robust.Shared.ViewVariables; -namespace Content.Shared.MobState.State +namespace Content.Shared.MobState.Components { /// /// When attached to an , diff --git a/Content.Shared/MobState/EntitySystems/SharedMobStateSystem.cs b/Content.Shared/MobState/EntitySystems/SharedMobStateSystem.cs new file mode 100644 index 0000000000..6db4899389 --- /dev/null +++ b/Content.Shared/MobState/EntitySystems/SharedMobStateSystem.cs @@ -0,0 +1,22 @@ +using Content.Shared.MobState.Components; +using Content.Shared.Pulling.Events; +using Robust.Shared.GameObjects; + +namespace Content.Shared.MobState.EntitySystems +{ + public class SharedMobStateSystem : EntitySystem + { + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnStartPullAttempt); + } + + private void OnStartPullAttempt(EntityUid uid, SharedMobStateComponent component, StartPullAttemptEvent args) + { + if(component.IsIncapacitated()) + args.Cancel(); + } + } +} diff --git a/Content.Shared/Pulling/Components/SharedPullableComponent.cs b/Content.Shared/Pulling/Components/SharedPullableComponent.cs index 0ed2464601..d5c7c9e066 100644 --- a/Content.Shared/Pulling/Components/SharedPullableComponent.cs +++ b/Content.Shared/Pulling/Components/SharedPullableComponent.cs @@ -204,6 +204,11 @@ namespace Content.Shared.Pulling.Components return false; } + if (!EntitySystem.Get().CanPull(puller, Owner)) + { + return false; + } + if (_physics == null) { return false; diff --git a/Content.Shared/Pulling/Events/StartPullAttemptEvent.cs b/Content.Shared/Pulling/Events/StartPullAttemptEvent.cs new file mode 100644 index 0000000000..a45e289b7a --- /dev/null +++ b/Content.Shared/Pulling/Events/StartPullAttemptEvent.cs @@ -0,0 +1,19 @@ +using Robust.Shared.GameObjects; + +namespace Content.Shared.Pulling.Events +{ + /// + /// Directed event raised on the puller to see if it can start pulling something. + /// + public class StartPullAttemptEvent : CancellableEntityEventArgs + { + public StartPullAttemptEvent(IEntity puller, IEntity pulled) + { + Puller = puller; + Pulled = pulled; + } + + public IEntity Puller { get; } + public IEntity Pulled { get; } + } +} diff --git a/Content.Shared/Pulling/SharedPullingSystem.cs b/Content.Shared/Pulling/SharedPullingSystem.cs index 40374f3756..efe4d2b1d5 100644 --- a/Content.Shared/Pulling/SharedPullingSystem.cs +++ b/Content.Shared/Pulling/SharedPullingSystem.cs @@ -6,6 +6,7 @@ using Content.Shared.GameTicking; using Content.Shared.Input; using Content.Shared.Physics.Pull; using Content.Shared.Pulling.Components; +using Content.Shared.Pulling.Events; using Content.Shared.Rotatable; using JetBrains.Annotations; using Robust.Shared.Containers; @@ -237,5 +238,12 @@ namespace Content.Shared.Pulling pulled.Transform.WorldRotation = newAngle; } } + + public bool CanPull(IEntity puller, IEntity pulled) + { + var startPull = new StartPullAttemptEvent(puller, pulled); + RaiseLocalEvent(puller.Uid, startPull); + return !startPull.Cancelled; + } } } From 77ae49fd9c53f52b945a016042d5040c0905c9df Mon Sep 17 00:00:00 2001 From: Vera Aguilera Puerto <6766154+Zumorica@users.noreply.github.com> Date: Mon, 28 Jun 2021 16:20:57 +0200 Subject: [PATCH 09/30] Sound Specifiers. (#4239) * Adds SoundSpecifier and a type serializer. * DiceComponent makes use of SoundSpecifier. * When rider autorefactoring decices to add field: * Remove SoundEmptySpecifier, use nullable everywhere --- Content.Server/Dice/DiceComponent.cs | 37 +++++----- Content.Shared/Sound/SoundSpecifier.cs | 67 +++++++++++++++++++ .../Sound/SoundSpecifierTypeSerializer.cs | 48 +++++++++++++ .../Prototypes/Entities/Objects/Fun/dice.yml | 1 - .../Prototypes/SoundCollections/dice.yml | 2 +- 5 files changed, 135 insertions(+), 20 deletions(-) create mode 100644 Content.Shared/Sound/SoundSpecifier.cs create mode 100644 Content.Shared/Sound/SoundSpecifierTypeSerializer.cs diff --git a/Content.Server/Dice/DiceComponent.cs b/Content.Server/Dice/DiceComponent.cs index 94cb65945b..99bdf36eaa 100644 --- a/Content.Server/Dice/DiceComponent.cs +++ b/Content.Server/Dice/DiceComponent.cs @@ -1,6 +1,7 @@ using Content.Shared.Audio; using Content.Shared.Examine; using Content.Shared.Interaction; +using Content.Shared.Sound; using Content.Shared.Throwing; using Robust.Server.GameObjects; using Robust.Shared.Audio; @@ -24,15 +25,16 @@ namespace Content.Server.Dice public override string Name => "Dice"; - [DataField("step")] - private int _step = 1; private int _sides = 20; - private int _currentSide = 20; + [ViewVariables] - [DataField("diceSoundCollection")] - public string _soundCollectionName = "dice"; + [DataField("sound")] + private readonly SoundSpecifier _sound = new SoundCollectionSpecifier("Dice"); + [ViewVariables] - public int Step => _step; + [DataField("step")] + public int Step { get; } = 1; + [ViewVariables] [DataField("sides")] public int Sides @@ -41,29 +43,28 @@ namespace Content.Server.Dice set { _sides = value; - _currentSide = value; + CurrentSide = value; } } [ViewVariables] - public int CurrentSide => _currentSide; + public int CurrentSide { get; private set; } = 20; public void Roll() { - _currentSide = _random.Next(1, (_sides/_step)+1) * _step; - if (!Owner.TryGetComponent(out SpriteComponent? sprite)) return; - sprite.LayerSetState(0, $"d{_sides}{_currentSide}"); + CurrentSide = _random.Next(1, (_sides/Step)+1) * Step; + PlayDiceEffect(); + + if (!Owner.TryGetComponent(out SpriteComponent? sprite)) + return; + + sprite.LayerSetState(0, $"d{_sides}{CurrentSide}"); } public void PlayDiceEffect() { - if (!string.IsNullOrWhiteSpace(_soundCollectionName)) - { - var soundCollection = _prototypeManager.Index(_soundCollectionName); - var file = _random.Pick(soundCollection.PickFiles); - SoundSystem.Play(Filter.Pvs(Owner), file, Owner, AudioParams.Default); - } + SoundSystem.Play(Filter.Pvs(Owner), _sound.GetSound(), Owner, AudioParams.Default); } void IActivate.Activate(ActivateEventArgs eventArgs) @@ -89,7 +90,7 @@ namespace Content.Server.Dice ("sidesAmount", _sides)) + "\n" + Loc.GetString("dice-component-on-examine-message-part-2", - ("currentSide", _currentSide))); + ("currentSide", CurrentSide))); } } } diff --git a/Content.Shared/Sound/SoundSpecifier.cs b/Content.Shared/Sound/SoundSpecifier.cs new file mode 100644 index 0000000000..616ccf9551 --- /dev/null +++ b/Content.Shared/Sound/SoundSpecifier.cs @@ -0,0 +1,67 @@ +using System; +using Content.Shared.Audio; +using Robust.Shared; +using Robust.Shared.Serialization.Manager.Attributes; +using Robust.Shared.Serialization.TypeSerializers.Implementations; +using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; +using Robust.Shared.Utility; + +namespace Content.Shared.Sound +{ + [DataDefinition] + public abstract class SoundSpecifier + { + public abstract string GetSound(); + } + + [DataDefinition] + public sealed class SoundPathSpecifier : SoundSpecifier + { + public const string Node = "path"; + + [DataField(Node, customTypeSerializer:typeof(ResourcePathSerializer), required:true)] + public ResourcePath? Path { get; } + + public SoundPathSpecifier() + { + } + + public SoundPathSpecifier(string path) + { + Path = new ResourcePath(path); + } + + public SoundPathSpecifier(ResourcePath path) + { + Path = path; + } + + public override string GetSound() + { + return Path == null ? string.Empty : Path.ToString(); + } + } + + [DataDefinition] + public sealed class SoundCollectionSpecifier : SoundSpecifier + { + public const string Node = "collection"; + + [DataField(Node, customTypeSerializer:typeof(PrototypeIdSerializer), required:true)] + public string? Collection { get; } + + public SoundCollectionSpecifier() + { + } + + public SoundCollectionSpecifier(string collection) + { + Collection = collection; + } + + public override string GetSound() + { + return Collection == null ? string.Empty : AudioHelpers.GetRandomFileFromSoundCollection(Collection); + } + } +} diff --git a/Content.Shared/Sound/SoundSpecifierTypeSerializer.cs b/Content.Shared/Sound/SoundSpecifierTypeSerializer.cs new file mode 100644 index 0000000000..26596961c5 --- /dev/null +++ b/Content.Shared/Sound/SoundSpecifierTypeSerializer.cs @@ -0,0 +1,48 @@ +using System; +using Robust.Shared.IoC; +using Robust.Shared.Serialization.Manager; +using Robust.Shared.Serialization.Manager.Attributes; +using Robust.Shared.Serialization.Manager.Result; +using Robust.Shared.Serialization.Markdown.Mapping; +using Robust.Shared.Serialization.Markdown.Validation; +using Robust.Shared.Serialization.TypeSerializers.Interfaces; + +namespace Content.Shared.Sound +{ + [TypeSerializer] + public class SoundSpecifierTypeSerializer : ITypeReader + { + private Type GetType(MappingDataNode node) + { + var hasPath = node.Has(SoundPathSpecifier.Node); + var hasCollection = node.Has(SoundCollectionSpecifier.Node); + + if (hasPath || !(hasPath ^ hasCollection)) + return typeof(SoundPathSpecifier); + + if (hasCollection) + return typeof(SoundCollectionSpecifier); + + return typeof(SoundPathSpecifier); + } + + public DeserializationResult Read(ISerializationManager serializationManager, MappingDataNode node, + IDependencyCollection dependencies, bool skipHook, ISerializationContext? context = null) + { + var type = GetType(node); + return serializationManager.Read(type, node, context, skipHook); + } + + public ValidationNode Validate(ISerializationManager serializationManager, MappingDataNode node, + IDependencyCollection dependencies, ISerializationContext? context = null) + { + if (node.Has(SoundPathSpecifier.Node) && node.Has(SoundCollectionSpecifier.Node)) + return new ErrorNode(node, "You can only specify either a sound path or a sound collection!"); + + if (!node.Has(SoundPathSpecifier.Node) && !node.Has(SoundCollectionSpecifier.Node)) + return new ErrorNode(node, "You need to specify either a sound path or a sound collection!"); + + return serializationManager.ValidateNode(GetType(node), node, context); + } + } +} diff --git a/Resources/Prototypes/Entities/Objects/Fun/dice.yml b/Resources/Prototypes/Entities/Objects/Fun/dice.yml index 90005db59b..93ae58dd7c 100644 --- a/Resources/Prototypes/Entities/Objects/Fun/dice.yml +++ b/Resources/Prototypes/Entities/Objects/Fun/dice.yml @@ -4,7 +4,6 @@ id: BaseDice components: - type: Dice - - type: LoopingSound - type: Sprite sprite: Objects/Fun/dice.rsi diff --git a/Resources/Prototypes/SoundCollections/dice.yml b/Resources/Prototypes/SoundCollections/dice.yml index 6ae970bc91..2683441098 100644 --- a/Resources/Prototypes/SoundCollections/dice.yml +++ b/Resources/Prototypes/SoundCollections/dice.yml @@ -1,5 +1,5 @@ - type: soundCollection - id: dice + id: Dice files: - /Audio/Items/Dice/dice1.ogg - /Audio/Items/Dice/dice2.ogg From 16e1c2c798a007889afe6970a6cfe01c8275a47d Mon Sep 17 00:00:00 2001 From: metalgearsloth Date: Tue, 29 Jun 2021 22:45:33 +1000 Subject: [PATCH 10/30] Update submodule --- RobustToolbox | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/RobustToolbox b/RobustToolbox index a6be66949d..d02d186a2f 160000 --- a/RobustToolbox +++ b/RobustToolbox @@ -1 +1 @@ -Subproject commit a6be66949dcba74fac0c0f2eaa88bd4700e81e42 +Subproject commit d02d186a2f046f37d10b12ed746d50a227f2f836 From bc7b315b187fd625225b4020a2700539fcba9b9d Mon Sep 17 00:00:00 2001 From: Vera Aguilera Puerto <6766154+Zumorica@users.noreply.github.com> Date: Tue, 29 Jun 2021 15:56:07 +0200 Subject: [PATCH 11/30] Replace IResettingEntitySystem with RoundRestartCleanupEvent. (#4245) * Replace IResettingEntitySystem with RoundRestartCleanupEvent. * oops --- .../EntitySystems/AtmosDebugOverlaySystem.cs | 5 +++-- .../HealthOverlay/HealthOverlaySystem.cs | 5 +++-- Content.Client/Verbs/VerbSystem.cs | 5 +++-- .../Tests/ResettingEntitySystemTests.cs | 17 ++++++++++++----- .../StationEvents/StationEventsSystemTest.cs | 3 ++- .../Pathfinding/Accessible/AiReachableSystem.cs | 5 +++-- .../AI/Pathfinding/PathfindingSystem.cs | 5 +++-- Content.Server/APC/ApcNetSystem.cs | 11 +++++++++-- .../Atmos/EntitySystems/GasTileOverlaySystem.cs | 6 ++++-- .../Surgery/Components/SurgeryToolSystem.cs | 5 +++-- Content.Server/Cargo/CargoConsoleSystem.cs | 6 ++++-- Content.Server/Climbing/ClimbSystem.cs | 11 +++++++++-- Content.Server/Cloning/CloningSystem.cs | 5 +++-- Content.Server/Damage/GodmodeSystem.cs | 11 +++++++++-- .../GameTicking/GameTicker.RoundFlow.cs | 14 +++++++------- Content.Server/Ghost/Roles/GhostRoleSystem.cs | 5 +++-- .../Gravity/EntitySystems/WeightlessSystem.cs | 5 +++-- Content.Server/Plants/PlantSystem.cs | 6 ++++-- Content.Server/RoundEnd/RoundEndSystem.cs | 12 ++++++++++-- .../StationEvents/StationEventSystem.cs | 6 ++++-- .../EntitySystems/SuspicionEndTimerSystem.cs | 6 ++++-- .../EntitySystems/SuspicionRoleSystem.cs | 5 +++-- Content.Server/Verbs/VerbSystem.cs | 5 +++-- Content.Server/Wires/WireHackingSystem.cs | 11 +++++++++-- .../GameTicking/IResettingEntitySystem.cs | 9 --------- .../GameTicking/RoundRestartCleanupEvent.cs | 13 +++++++++++++ Content.Shared/Pulling/SharedPullingSystem.cs | 5 +++-- 27 files changed, 136 insertions(+), 66 deletions(-) delete mode 100644 Content.Shared/GameTicking/IResettingEntitySystem.cs create mode 100644 Content.Shared/GameTicking/RoundRestartCleanupEvent.cs diff --git a/Content.Client/Atmos/EntitySystems/AtmosDebugOverlaySystem.cs b/Content.Client/Atmos/EntitySystems/AtmosDebugOverlaySystem.cs index fe18e1fc5f..d714789aa0 100644 --- a/Content.Client/Atmos/EntitySystems/AtmosDebugOverlaySystem.cs +++ b/Content.Client/Atmos/EntitySystems/AtmosDebugOverlaySystem.cs @@ -13,7 +13,7 @@ using Robust.Shared.Maths; namespace Content.Client.Atmos.EntitySystems { [UsedImplicitly] - internal sealed class AtmosDebugOverlaySystem : SharedAtmosDebugOverlaySystem, IResettingEntitySystem + internal sealed class AtmosDebugOverlaySystem : SharedAtmosDebugOverlaySystem { [Dependency] private readonly IMapManager _mapManager = default!; @@ -37,6 +37,7 @@ namespace Content.Client.Atmos.EntitySystems { base.Initialize(); + SubscribeNetworkEvent(Reset); SubscribeNetworkEvent(HandleAtmosDebugOverlayMessage); SubscribeNetworkEvent(HandleAtmosDebugOverlayDisableMessage); @@ -66,7 +67,7 @@ namespace Content.Client.Atmos.EntitySystems overlayManager.RemoveOverlay(); } - public void Reset() + public void Reset(RoundRestartCleanupEvent ev) { _tileData.Clear(); } diff --git a/Content.Client/HealthOverlay/HealthOverlaySystem.cs b/Content.Client/HealthOverlay/HealthOverlaySystem.cs index 5dd348934f..2e92fb4245 100644 --- a/Content.Client/HealthOverlay/HealthOverlaySystem.cs +++ b/Content.Client/HealthOverlay/HealthOverlaySystem.cs @@ -13,7 +13,7 @@ using Robust.Shared.IoC; namespace Content.Client.HealthOverlay { [UsedImplicitly] - public class HealthOverlaySystem : EntitySystem, IResettingEntitySystem + public class HealthOverlaySystem : EntitySystem { [Dependency] private readonly IEyeManager _eyeManager = default!; @@ -44,10 +44,11 @@ namespace Content.Client.HealthOverlay { base.Initialize(); + SubscribeNetworkEvent(Reset); SubscribeLocalEvent(HandlePlayerAttached); } - public void Reset() + public void Reset(RoundRestartCleanupEvent ev) { foreach (var gui in _guis.Values) { diff --git a/Content.Client/Verbs/VerbSystem.cs b/Content.Client/Verbs/VerbSystem.cs index a0fd186a07..36a01098d6 100644 --- a/Content.Client/Verbs/VerbSystem.cs +++ b/Content.Client/Verbs/VerbSystem.cs @@ -28,7 +28,7 @@ using Timer = Robust.Shared.Timing.Timer; namespace Content.Client.Verbs { [UsedImplicitly] - public sealed class VerbSystem : SharedVerbSystem, IResettingEntitySystem + public sealed class VerbSystem : SharedVerbSystem { [Dependency] private readonly IPlayerManager _playerManager = default!; [Dependency] private readonly IUserInterfaceManager _userInterfaceManager = default!; @@ -47,6 +47,7 @@ namespace Content.Client.Verbs { base.Initialize(); + SubscribeNetworkEvent(Reset); SubscribeNetworkEvent(FillEntityPopup); SubscribeNetworkEvent(HandleContainerVisibilityMessage); @@ -68,7 +69,7 @@ namespace Content.Client.Verbs CommandBinds.Unregister(); } - public void Reset() + public void Reset(RoundRestartCleanupEvent ev) { ToggleContainerVisibility?.Invoke(this, false); } diff --git a/Content.IntegrationTests/Tests/ResettingEntitySystemTests.cs b/Content.IntegrationTests/Tests/ResettingEntitySystemTests.cs index a7b8740c73..58af6d2bc4 100644 --- a/Content.IntegrationTests/Tests/ResettingEntitySystemTests.cs +++ b/Content.IntegrationTests/Tests/ResettingEntitySystemTests.cs @@ -9,15 +9,22 @@ using Robust.Shared.Reflection; namespace Content.IntegrationTests.Tests { [TestFixture] - [TestOf(typeof(IResettingEntitySystem))] + [TestOf(typeof(RoundRestartCleanupEvent))] public class ResettingEntitySystemTests : ContentIntegrationTest { [Reflect(false)] - private class TestResettingEntitySystem : EntitySystem, IResettingEntitySystem + private class TestRoundRestartCleanupEvent : EntitySystem { public bool HasBeenReset { get; set; } - public void Reset() + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(Reset); + } + + public void Reset(RoundRestartCleanupEvent ev) { HasBeenReset = true; } @@ -30,7 +37,7 @@ namespace Content.IntegrationTests.Tests { ContentBeforeIoC = () => { - IoCManager.Resolve().LoadExtraSystemType(); + IoCManager.Resolve().LoadExtraSystemType(); } }); @@ -43,7 +50,7 @@ namespace Content.IntegrationTests.Tests { Assert.That(gameTicker.RunLevel, Is.EqualTo(GameRunLevel.InRound)); - var system = entitySystemManager.GetEntitySystem(); + var system = entitySystemManager.GetEntitySystem(); system.HasBeenReset = false; diff --git a/Content.IntegrationTests/Tests/StationEvents/StationEventsSystemTest.cs b/Content.IntegrationTests/Tests/StationEvents/StationEventsSystemTest.cs index f58c049720..099e5fb6b1 100644 --- a/Content.IntegrationTests/Tests/StationEvents/StationEventsSystemTest.cs +++ b/Content.IntegrationTests/Tests/StationEvents/StationEventsSystemTest.cs @@ -1,5 +1,6 @@ using System.Threading.Tasks; using Content.Server.StationEvents; +using Content.Shared.GameTicking; using NUnit.Framework; using Robust.Shared.GameObjects; using Robust.Shared.IoC; @@ -33,7 +34,7 @@ namespace Content.IntegrationTests.Tests.StationEvents Assert.That(stationEvent.Occurrences > 0); } - stationEventsSystem.Reset(); + stationEventsSystem.Reset(new RoundRestartCleanupEvent()); foreach (var stationEvent in stationEventsSystem.StationEvents) { diff --git a/Content.Server/AI/Pathfinding/Accessible/AiReachableSystem.cs b/Content.Server/AI/Pathfinding/Accessible/AiReachableSystem.cs index 7b39db4ea0..5f66ec5e2e 100644 --- a/Content.Server/AI/Pathfinding/Accessible/AiReachableSystem.cs +++ b/Content.Server/AI/Pathfinding/Accessible/AiReachableSystem.cs @@ -21,7 +21,7 @@ namespace Content.Server.AI.Pathfinding.Accessible /// /// Long-term can be used to do hierarchical pathfinding [UsedImplicitly] - public sealed class AiReachableSystem : EntitySystem, IResettingEntitySystem + public sealed class AiReachableSystem : EntitySystem { /* * The purpose of this is to provide a higher-level / hierarchical abstraction of the actual pathfinding graph @@ -81,6 +81,7 @@ namespace Content.Server.AI.Pathfinding.Accessible public override void Initialize() { _pathfindingSystem = Get(); + SubscribeLocalEvent(Reset); SubscribeLocalEvent(RecalculateNodeRegions); #if DEBUG SubscribeNetworkEvent(HandleSubscription); @@ -699,7 +700,7 @@ namespace Content.Server.AI.Pathfinding.Accessible #endif } - public void Reset() + public void Reset(RoundRestartCleanupEvent ev) { _queuedUpdates.Clear(); _regions.Clear(); diff --git a/Content.Server/AI/Pathfinding/PathfindingSystem.cs b/Content.Server/AI/Pathfinding/PathfindingSystem.cs index 91c189a069..98cf1f500c 100644 --- a/Content.Server/AI/Pathfinding/PathfindingSystem.cs +++ b/Content.Server/AI/Pathfinding/PathfindingSystem.cs @@ -27,7 +27,7 @@ namespace Content.Server.AI.Pathfinding /// This system handles pathfinding graph updates as well as dispatches to the pathfinder /// (90% of what it's doing is graph updates so not much point splitting the 2 roles) /// - public class PathfindingSystem : EntitySystem, IResettingEntitySystem + public class PathfindingSystem : EntitySystem { [Dependency] private readonly IMapManager _mapManager = default!; [Dependency] private readonly IEntityManager _entityManager = default!; @@ -201,6 +201,7 @@ namespace Content.Server.AI.Pathfinding public override void Initialize() { + SubscribeLocalEvent(Reset); SubscribeLocalEvent(QueueCollisionChangeMessage); SubscribeLocalEvent(QueueMoveEvent); SubscribeLocalEvent(QueueAccessChangeMessage); @@ -385,7 +386,7 @@ namespace Content.Server.AI.Pathfinding return true; } - public void Reset() + public void Reset(RoundRestartCleanupEvent ev) { _graph.Clear(); _collidableUpdateQueue.Clear(); diff --git a/Content.Server/APC/ApcNetSystem.cs b/Content.Server/APC/ApcNetSystem.cs index ccf5835eac..ad19216340 100644 --- a/Content.Server/APC/ApcNetSystem.cs +++ b/Content.Server/APC/ApcNetSystem.cs @@ -9,12 +9,19 @@ using Robust.Shared.Timing; namespace Content.Server.APC { [UsedImplicitly] - internal sealed class ApcNetSystem : EntitySystem, IResettingEntitySystem + internal sealed class ApcNetSystem : EntitySystem { [Dependency] private readonly IPauseManager _pauseManager = default!; private HashSet _apcNets = new(); + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(Reset); + } + public override void Update(float frameTime) { foreach (var apcNet in _apcNets) @@ -35,7 +42,7 @@ namespace Content.Server.APC _apcNets.Remove(apcNet); } - public void Reset() + public void Reset(RoundRestartCleanupEvent ev) { // NodeGroupSystem does not remake ApcNets affected during restarting until a frame later, // when their grid is invalid. So, we are clearing them on round restart. diff --git a/Content.Server/Atmos/EntitySystems/GasTileOverlaySystem.cs b/Content.Server/Atmos/EntitySystems/GasTileOverlaySystem.cs index fd0101e5c4..4c9d0516b6 100644 --- a/Content.Server/Atmos/EntitySystems/GasTileOverlaySystem.cs +++ b/Content.Server/Atmos/EntitySystems/GasTileOverlaySystem.cs @@ -25,7 +25,7 @@ using Dependency = Robust.Shared.IoC.DependencyAttribute; namespace Content.Server.Atmos.EntitySystems { [UsedImplicitly] - internal sealed class GasTileOverlaySystem : SharedGasTileOverlaySystem, IResettingEntitySystem + internal sealed class GasTileOverlaySystem : SharedGasTileOverlaySystem { [Dependency] private readonly IGameTiming _gameTiming = default!; [Dependency] private readonly IPlayerManager _playerManager = default!; @@ -67,6 +67,8 @@ namespace Content.Server.Atmos.EntitySystems { base.Initialize(); + SubscribeLocalEvent(Reset); + _atmosphereSystem = Get(); _playerManager.PlayerStatusChanged += OnPlayerStatusChanged; _mapManager.OnGridRemoved += OnGridRemoved; @@ -479,7 +481,7 @@ namespace Content.Server.Atmos.EntitySystems } } - public void Reset() + public void Reset(RoundRestartCleanupEvent ev) { _invalidTiles.Clear(); _overlay.Clear(); diff --git a/Content.Server/Body/Surgery/Components/SurgeryToolSystem.cs b/Content.Server/Body/Surgery/Components/SurgeryToolSystem.cs index 36f3eb743c..b628e7f89c 100644 --- a/Content.Server/Body/Surgery/Components/SurgeryToolSystem.cs +++ b/Content.Server/Body/Surgery/Components/SurgeryToolSystem.cs @@ -10,7 +10,7 @@ using Robust.Shared.GameObjects; namespace Content.Server.Body.Surgery.Components { [UsedImplicitly] - public class SurgeryToolSystem : EntitySystem, IResettingEntitySystem + public class SurgeryToolSystem : EntitySystem { private readonly HashSet _openSurgeryUIs = new(); @@ -18,11 +18,12 @@ namespace Content.Server.Body.Surgery.Components { base.Initialize(); + SubscribeLocalEvent(Reset); SubscribeLocalEvent(OnSurgeryWindowOpen); SubscribeLocalEvent(OnSurgeryWindowClose); } - public void Reset() + public void Reset(RoundRestartCleanupEvent ev) { _openSurgeryUIs.Clear(); } diff --git a/Content.Server/Cargo/CargoConsoleSystem.cs b/Content.Server/Cargo/CargoConsoleSystem.cs index db81e4629b..183bd723a1 100644 --- a/Content.Server/Cargo/CargoConsoleSystem.cs +++ b/Content.Server/Cargo/CargoConsoleSystem.cs @@ -7,7 +7,7 @@ using Robust.Shared.GameObjects; namespace Content.Server.Cargo { - public class CargoConsoleSystem : EntitySystem, IResettingEntitySystem + public class CargoConsoleSystem : EntitySystem { /// /// How much time to wait (in seconds) before increasing bank accounts balance. @@ -45,6 +45,8 @@ namespace Content.Server.Cargo public override void Initialize() { + SubscribeLocalEvent(Reset); + CreateBankAccount("Space Station 14", 1000); CreateOrderDatabase(0); } @@ -64,7 +66,7 @@ namespace Content.Server.Cargo } } - public void Reset() + public void Reset(RoundRestartCleanupEvent ev) { _accountsDict.Clear(); _databasesDict.Clear(); diff --git a/Content.Server/Climbing/ClimbSystem.cs b/Content.Server/Climbing/ClimbSystem.cs index 862795ddec..3a4a0517bb 100644 --- a/Content.Server/Climbing/ClimbSystem.cs +++ b/Content.Server/Climbing/ClimbSystem.cs @@ -8,10 +8,17 @@ using Robust.Shared.GameObjects; namespace Content.Server.Climbing { [UsedImplicitly] - internal sealed class ClimbSystem : EntitySystem, IResettingEntitySystem + internal sealed class ClimbSystem : EntitySystem { private readonly HashSet _activeClimbers = new(); + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(Reset); + } + public void AddActiveClimber(ClimbingComponent climbingComponent) { _activeClimbers.Add(climbingComponent); @@ -30,7 +37,7 @@ namespace Content.Server.Climbing } } - public void Reset() + public void Reset(RoundRestartCleanupEvent ev) { _activeClimbers.Clear(); } diff --git a/Content.Server/Cloning/CloningSystem.cs b/Content.Server/Cloning/CloningSystem.cs index 774d00f585..0e11d02f38 100644 --- a/Content.Server/Cloning/CloningSystem.cs +++ b/Content.Server/Cloning/CloningSystem.cs @@ -16,7 +16,7 @@ using static Content.Shared.Cloning.SharedCloningPodComponent; namespace Content.Server.Cloning { - internal sealed class CloningSystem : EntitySystem, IResettingEntitySystem + internal sealed class CloningSystem : EntitySystem { [Dependency] private readonly IGameTiming _timing = default!; public readonly Dictionary MindToId = new(); @@ -29,6 +29,7 @@ namespace Content.Server.Cloning { base.Initialize(); + SubscribeLocalEvent(Reset); SubscribeLocalEvent(HandleActivate); SubscribeLocalEvent(HandleMindAdded); } @@ -142,7 +143,7 @@ namespace Content.Server.Cloning return IdToDNA.ToDictionary(m => m.Key, m => m.Value.Mind.CharacterName); } - public void Reset() + public void Reset(RoundRestartCleanupEvent ev) { MindToId.Clear(); IdToDNA.Clear(); diff --git a/Content.Server/Damage/GodmodeSystem.cs b/Content.Server/Damage/GodmodeSystem.cs index b3ddb7dd39..788fe4bca7 100644 --- a/Content.Server/Damage/GodmodeSystem.cs +++ b/Content.Server/Damage/GodmodeSystem.cs @@ -12,11 +12,18 @@ using Robust.Shared.GameObjects; namespace Content.Server.Damage { [UsedImplicitly] - public class GodmodeSystem : EntitySystem, IResettingEntitySystem + public class GodmodeSystem : EntitySystem { private readonly Dictionary _entities = new(); - public void Reset() + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(Reset); + } + + public void Reset(RoundRestartCleanupEvent ev) { _entities.Clear(); } diff --git a/Content.Server/GameTicking/GameTicker.RoundFlow.cs b/Content.Server/GameTicking/GameTicker.RoundFlow.cs index 0d6df65844..e47c36c58a 100644 --- a/Content.Server/GameTicking/GameTicker.RoundFlow.cs +++ b/Content.Server/GameTicking/GameTicker.RoundFlow.cs @@ -11,6 +11,7 @@ using Robust.Server.Player; using Robust.Shared.IoC; using Robust.Shared.Localization; using Robust.Shared.Log; +using Robust.Shared.Player; using Robust.Shared.Random; using Robust.Shared.Timing; using Robust.Shared.Utility; @@ -296,13 +297,12 @@ namespace Content.Server.GameTicking _gameRules.Clear(); - foreach (var system in _entitySystemManager.AllSystems) - { - if (system is IResettingEntitySystem resetting) - { - resetting.Reset(); - } - } + // Round restart cleanup event, so entity systems can reset. + var ev = new RoundRestartCleanupEvent(); + RaiseLocalEvent(ev); + + // So clients' entity systems can clean up too... + RaiseNetworkEvent(ev, Filter.Broadcast()); _spawnedPositions.Clear(); _manifest.Clear(); diff --git a/Content.Server/Ghost/Roles/GhostRoleSystem.cs b/Content.Server/Ghost/Roles/GhostRoleSystem.cs index fb878ae83b..38352f7d86 100644 --- a/Content.Server/Ghost/Roles/GhostRoleSystem.cs +++ b/Content.Server/Ghost/Roles/GhostRoleSystem.cs @@ -17,7 +17,7 @@ using Robust.Shared.ViewVariables; namespace Content.Server.Ghost.Roles { [UsedImplicitly] - public class GhostRoleSystem : EntitySystem, IResettingEntitySystem + public class GhostRoleSystem : EntitySystem { [Dependency] private readonly EuiManager _euiManager = default!; @@ -33,6 +33,7 @@ namespace Content.Server.Ghost.Roles { base.Initialize(); + SubscribeLocalEvent(Reset); SubscribeLocalEvent(OnPlayerAttached); } @@ -137,7 +138,7 @@ namespace Content.Server.Ghost.Roles CloseEui(message.Player); } - public void Reset() + public void Reset(RoundRestartCleanupEvent ev) { foreach (var session in _openUis.Keys) { diff --git a/Content.Server/Gravity/EntitySystems/WeightlessSystem.cs b/Content.Server/Gravity/EntitySystems/WeightlessSystem.cs index 54bd008b42..06e452aea0 100644 --- a/Content.Server/Gravity/EntitySystems/WeightlessSystem.cs +++ b/Content.Server/Gravity/EntitySystems/WeightlessSystem.cs @@ -12,7 +12,7 @@ using Robust.Shared.Utility; namespace Content.Server.Gravity.EntitySystems { [UsedImplicitly] - public class WeightlessSystem : EntitySystem, IResettingEntitySystem + public class WeightlessSystem : EntitySystem { [Dependency] private readonly IMapManager _mapManager = default!; @@ -22,11 +22,12 @@ namespace Content.Server.Gravity.EntitySystems { base.Initialize(); + SubscribeLocalEvent(Reset); SubscribeLocalEvent(GravityChanged); SubscribeLocalEvent(EntParentChanged); } - public void Reset() + public void Reset(RoundRestartCleanupEvent ev) { _alerts.Clear(); } diff --git a/Content.Server/Plants/PlantSystem.cs b/Content.Server/Plants/PlantSystem.cs index 541a606e51..2dbe10b10e 100644 --- a/Content.Server/Plants/PlantSystem.cs +++ b/Content.Server/Plants/PlantSystem.cs @@ -10,7 +10,7 @@ using Robust.Shared.Prototypes; namespace Content.Server.Plants { [UsedImplicitly] - public class PlantSystem : EntitySystem, IResettingEntitySystem + public class PlantSystem : EntitySystem { [Dependency] private readonly IComponentManager _componentManager = default!; [Dependency] private readonly IPrototypeManager _prototypeManager = default!; @@ -26,6 +26,8 @@ namespace Content.Server.Plants { base.Initialize(); + SubscribeLocalEvent(Reset); + PopulateDatabase(); } @@ -73,7 +75,7 @@ namespace Content.Server.Plants } } - public void Reset() + public void Reset(RoundRestartCleanupEvent ev) { PopulateDatabase(); } diff --git a/Content.Server/RoundEnd/RoundEndSystem.cs b/Content.Server/RoundEnd/RoundEndSystem.cs index 649c7374b9..2e52ae73f8 100644 --- a/Content.Server/RoundEnd/RoundEndSystem.cs +++ b/Content.Server/RoundEnd/RoundEndSystem.cs @@ -13,7 +13,7 @@ using Timer = Robust.Shared.Timing.Timer; namespace Content.Server.RoundEnd { - public class RoundEndSystem : EntitySystem, IResettingEntitySystem + public class RoundEndSystem : EntitySystem { [Dependency] private readonly IGameTiming _gameTiming = default!; [Dependency] private readonly IChatManager _chatManager = default!; @@ -30,6 +30,7 @@ namespace Content.Server.RoundEnd public TimeSpan CallCooldown { get; } = TimeSpan.FromSeconds(30); + // TODO: Make these regular eventbus events... public delegate void RoundEndCountdownStarted(); public event RoundEndCountdownStarted? OnRoundEndCountdownStarted; @@ -42,7 +43,14 @@ namespace Content.Server.RoundEnd public delegate void CallCooldownEnded(); public event CallCooldownEnded? OnCallCooldownEnded; - void IResettingEntitySystem.Reset() + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(Reset); + } + + void Reset(RoundRestartCleanupEvent ev) { IsRoundEndCountdownStarted = false; _roundEndCancellationTokenSource.Cancel(); diff --git a/Content.Server/StationEvents/StationEventSystem.cs b/Content.Server/StationEvents/StationEventSystem.cs index ebd118dae9..9dc20f2aaf 100644 --- a/Content.Server/StationEvents/StationEventSystem.cs +++ b/Content.Server/StationEvents/StationEventSystem.cs @@ -25,7 +25,7 @@ namespace Content.Server.StationEvents { [UsedImplicitly] // Somewhat based off of TG's implementation of events - public sealed class StationEventSystem : EntitySystem, IResettingEntitySystem + public sealed class StationEventSystem : EntitySystem { [Dependency] private readonly IConfigurationManager _configurationManager = default!; [Dependency] private readonly IServerNetManager _netManager = default!; @@ -185,6 +185,8 @@ namespace Content.Server.StationEvents _netManager.RegisterNetMessage(RxRequest); _netManager.RegisterNetMessage(); + + SubscribeLocalEvent(Reset); } private void RxRequest(MsgRequestStationEvents msg) @@ -359,7 +361,7 @@ namespace Content.Server.StationEvents base.Shutdown(); } - public void Reset() + public void Reset(RoundRestartCleanupEvent ev) { if (CurrentEvent?.Running == true) { diff --git a/Content.Server/Suspicion/EntitySystems/SuspicionEndTimerSystem.cs b/Content.Server/Suspicion/EntitySystems/SuspicionEndTimerSystem.cs index a56d7791bd..643d4a98cd 100644 --- a/Content.Server/Suspicion/EntitySystems/SuspicionEndTimerSystem.cs +++ b/Content.Server/Suspicion/EntitySystems/SuspicionEndTimerSystem.cs @@ -13,7 +13,7 @@ using Robust.Shared.IoC; namespace Content.Server.Suspicion.EntitySystems { [UsedImplicitly] - public sealed class SuspicionEndTimerSystem : EntitySystem, IResettingEntitySystem + public sealed class SuspicionEndTimerSystem : EntitySystem { [Dependency] private readonly IPlayerManager _playerManager = null!; @@ -33,6 +33,8 @@ namespace Content.Server.Suspicion.EntitySystems { base.Initialize(); + SubscribeLocalEvent(Reset); + _playerManager.PlayerStatusChanged += PlayerManagerOnPlayerStatusChanged; } @@ -69,7 +71,7 @@ namespace Content.Server.Suspicion.EntitySystems EntityManager.EntityNetManager?.SendSystemNetworkMessage(msg, player.ConnectedClient); } - void IResettingEntitySystem.Reset() + private void Reset(RoundRestartCleanupEvent ev) { EndTime = null; } diff --git a/Content.Server/Suspicion/EntitySystems/SuspicionRoleSystem.cs b/Content.Server/Suspicion/EntitySystems/SuspicionRoleSystem.cs index 7cd2e2c292..0c1fff2703 100644 --- a/Content.Server/Suspicion/EntitySystems/SuspicionRoleSystem.cs +++ b/Content.Server/Suspicion/EntitySystems/SuspicionRoleSystem.cs @@ -7,7 +7,7 @@ using Robust.Shared.GameObjects; namespace Content.Server.Suspicion.EntitySystems { [UsedImplicitly] - public class SuspicionRoleSystem : EntitySystem, IResettingEntitySystem + public class SuspicionRoleSystem : EntitySystem { private readonly HashSet _traitors = new(); @@ -19,6 +19,7 @@ namespace Content.Server.Suspicion.EntitySystems { base.Initialize(); + SubscribeLocalEvent(Reset); SubscribeLocalEvent((HandlePlayerAttached)); SubscribeLocalEvent((HandlePlayerDetached)); } @@ -71,7 +72,7 @@ namespace Content.Server.Suspicion.EntitySystems base.Shutdown(); } - public void Reset() + public void Reset(RoundRestartCleanupEvent ev) { _traitors.Clear(); } diff --git a/Content.Server/Verbs/VerbSystem.cs b/Content.Server/Verbs/VerbSystem.cs index fa88d65367..5483f0d82a 100644 --- a/Content.Server/Verbs/VerbSystem.cs +++ b/Content.Server/Verbs/VerbSystem.cs @@ -12,7 +12,7 @@ using static Content.Shared.Verbs.VerbSystemMessages; namespace Content.Server.Verbs { - public class VerbSystem : SharedVerbSystem, IResettingEntitySystem + public class VerbSystem : SharedVerbSystem { [Dependency] private readonly IPlayerManager _playerManager = default!; @@ -24,6 +24,7 @@ namespace Content.Server.Verbs IoCManager.InjectDependencies(this); + SubscribeLocalEvent(Reset); SubscribeNetworkEvent(RequestVerbs); SubscribeNetworkEvent(UseVerb); @@ -38,7 +39,7 @@ namespace Content.Server.Verbs } } - public void Reset() + public void Reset(RoundRestartCleanupEvent ev) { _seesThroughContainers.Clear(); } diff --git a/Content.Server/Wires/WireHackingSystem.cs b/Content.Server/Wires/WireHackingSystem.cs index 7155f331e8..526db3ced7 100644 --- a/Content.Server/Wires/WireHackingSystem.cs +++ b/Content.Server/Wires/WireHackingSystem.cs @@ -7,11 +7,18 @@ using static Content.Shared.Wires.SharedWiresComponent; namespace Content.Server.Wires { - public class WireHackingSystem : EntitySystem, IResettingEntitySystem + public class WireHackingSystem : EntitySystem { [ViewVariables] private readonly Dictionary _layouts = new(); + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(Reset); + } + public bool TryGetLayout(string id, [NotNullWhen(true)] out WireLayout? layout) { return _layouts.TryGetValue(id, out layout); @@ -22,7 +29,7 @@ namespace Content.Server.Wires _layouts.Add(id, layout); } - public void Reset() + public void Reset(RoundRestartCleanupEvent ev) { _layouts.Clear(); } diff --git a/Content.Shared/GameTicking/IResettingEntitySystem.cs b/Content.Shared/GameTicking/IResettingEntitySystem.cs deleted file mode 100644 index f5daa7e1c1..0000000000 --- a/Content.Shared/GameTicking/IResettingEntitySystem.cs +++ /dev/null @@ -1,9 +0,0 @@ -#nullable enable - -namespace Content.Shared.GameTicking -{ - public interface IResettingEntitySystem - { - void Reset(); - } -} diff --git a/Content.Shared/GameTicking/RoundRestartCleanupEvent.cs b/Content.Shared/GameTicking/RoundRestartCleanupEvent.cs new file mode 100644 index 0000000000..0537925b56 --- /dev/null +++ b/Content.Shared/GameTicking/RoundRestartCleanupEvent.cs @@ -0,0 +1,13 @@ +using System; +using Robust.Shared.GameObjects; +using Robust.Shared.Serialization; + +#nullable enable + +namespace Content.Shared.GameTicking +{ + [Serializable, NetSerializable] + public class RoundRestartCleanupEvent : EntityEventArgs + { + } +} diff --git a/Content.Shared/Pulling/SharedPullingSystem.cs b/Content.Shared/Pulling/SharedPullingSystem.cs index efe4d2b1d5..9660f7f1bc 100644 --- a/Content.Shared/Pulling/SharedPullingSystem.cs +++ b/Content.Shared/Pulling/SharedPullingSystem.cs @@ -20,7 +20,7 @@ using Robust.Shared.Players; namespace Content.Shared.Pulling { [UsedImplicitly] - public abstract class SharedPullingSystem : EntitySystem, IResettingEntitySystem + public abstract class SharedPullingSystem : EntitySystem { /// /// A mapping of pullers to the entity that they are pulling. @@ -51,6 +51,7 @@ namespace Content.Shared.Pulling { base.Initialize(); + SubscribeLocalEvent(Reset); SubscribeLocalEvent(OnPullStarted); SubscribeLocalEvent(OnPullStopped); SubscribeLocalEvent(PullerMoved); @@ -70,7 +71,7 @@ namespace Content.Shared.Pulling _stoppedMoving.Clear(); } - public void Reset() + public void Reset(RoundRestartCleanupEvent ev) { _pullers.Clear(); _moving.Clear(); From 4ce05a9b758979dd054cb154962d3845316345ec Mon Sep 17 00:00:00 2001 From: Vera Aguilera Puerto Date: Tue, 29 Jun 2021 21:23:00 +0200 Subject: [PATCH 12/30] Work around transform anchoring in construction. --- Content.Server/Construction/ConstructionSystem.cs | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Content.Server/Construction/ConstructionSystem.cs b/Content.Server/Construction/ConstructionSystem.cs index a102f51697..c18701866f 100644 --- a/Content.Server/Construction/ConstructionSystem.cs +++ b/Content.Server/Construction/ConstructionSystem.cs @@ -457,9 +457,16 @@ namespace Content.Server.Construction return; } + // We do this to be able to move the construction to its proper position in case it's anchored... + // Oh wow transform anchoring is amazing wow I love it!!!! + var wasAnchored = structure.Transform.Anchored; + structure.Transform.Anchored = false; + structure.Transform.Coordinates = ev.Location; structure.Transform.LocalRotation = constructionPrototype.CanRotate ? ev.Angle : Angle.Zero; + structure.Transform.Anchored = wasAnchored; + RaiseNetworkEvent(new AckStructureConstructionMessage(ev.Ack)); Cleanup(); From eacbb3a6d23095a606ade41f239427e776cc0014 Mon Sep 17 00:00:00 2001 From: Vera Aguilera Puerto Date: Tue, 29 Jun 2021 21:23:09 +0200 Subject: [PATCH 13/30] Fix girder not being impassable. Fixes #3777 --- Resources/Prototypes/Entities/Constructible/Walls/girder.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Resources/Prototypes/Entities/Constructible/Walls/girder.yml b/Resources/Prototypes/Entities/Constructible/Walls/girder.yml index c12809b5df..b4d2401e14 100644 --- a/Resources/Prototypes/Entities/Constructible/Walls/girder.yml +++ b/Resources/Prototypes/Entities/Constructible/Walls/girder.yml @@ -4,6 +4,8 @@ name: girder description: A large structural assembly made out of metal; It requires a layer of metal before it can be considered a wall. components: + - type: Transform + anchored: true - type: Physics bodyType: Static fixtures: @@ -11,6 +13,7 @@ !type:PhysShapeAabb {} mass: 50 layer: + - Impassable - SmallImpassable mask: - VaultImpassable From 5d4952782723f896f00988c71dbc4f7e5438c146 Mon Sep 17 00:00:00 2001 From: Vera Aguilera Puerto Date: Wed, 30 Jun 2021 11:35:08 +0200 Subject: [PATCH 14/30] Fixes for computer YAML. --- .../Prototypes/Entities/Constructible/Power/computers.yml | 5 +++-- Resources/Prototypes/Entities/Constructible/base.yml | 1 - 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Resources/Prototypes/Entities/Constructible/Power/computers.yml b/Resources/Prototypes/Entities/Constructible/Power/computers.yml index d1fb21a4d7..9a53554a1d 100644 --- a/Resources/Prototypes/Entities/Constructible/Power/computers.yml +++ b/Resources/Prototypes/Entities/Constructible/Power/computers.yml @@ -1,8 +1,8 @@ - type: entity id: ComputerFrame - parent: BaseConstructibleDynamic + parent: BaseConstructible name: computer frame - description: A computer under construction. It needs a circuit board. + description: A computer under construction. components: - type: Physics bodyType: Static @@ -20,6 +20,7 @@ - VaultImpassable - type: InteractionOutline - type: Rotatable + - type: Anchorable - type: Construction graph: computer node: frameUnsecured diff --git a/Resources/Prototypes/Entities/Constructible/base.yml b/Resources/Prototypes/Entities/Constructible/base.yml index 3c8d26064e..2df3e4b3e8 100644 --- a/Resources/Prototypes/Entities/Constructible/base.yml +++ b/Resources/Prototypes/Entities/Constructible/base.yml @@ -46,4 +46,3 @@ mask: - VaultImpassable - type: Anchorable - - type: Pullable From 579f3c1103388c52e382a8f584a3843fe44107e9 Mon Sep 17 00:00:00 2001 From: DmitriyRubetskoy <75271456+DmitriyRubetskoy@users.noreply.github.com> Date: Wed, 30 Jun 2021 17:35:19 +0300 Subject: [PATCH 15/30] Thirteen Loko causes toxin damage (#4249) --- .../Catalog/ReagentDispensers/beverage.yml | 1 + .../Objects/Consumable/drinks_cans.yml | 7 +++++++ .../Reagents/Consumable/Drink/soda.yml | 20 +++++++++++++++++++ 3 files changed, 28 insertions(+) diff --git a/Resources/Prototypes/Catalog/ReagentDispensers/beverage.yml b/Resources/Prototypes/Catalog/ReagentDispensers/beverage.yml index 33e4bdfbc2..718af1cd90 100644 --- a/Resources/Prototypes/Catalog/ReagentDispensers/beverage.yml +++ b/Resources/Prototypes/Catalog/ReagentDispensers/beverage.yml @@ -7,6 +7,7 @@ - Ice - Tea - Water + - ThirteenLoko - type: reagentDispenserInventory id: BoozeDispenserInventory diff --git a/Resources/Prototypes/Entities/Objects/Consumable/drinks_cans.yml b/Resources/Prototypes/Entities/Objects/Consumable/drinks_cans.yml index 825d494e9a..74560880ac 100644 --- a/Resources/Prototypes/Entities/Objects/Consumable/drinks_cans.yml +++ b/Resources/Prototypes/Entities/Objects/Consumable/drinks_cans.yml @@ -111,6 +111,13 @@ name: thirteen loko can description: The MBO has advised crew members that consumption of Thirteen Loko may result in seizures, blindness, drunkeness, or even death. Please Drink Responsibly. components: + - type: SolutionContainer + maxVol: 20 + caps: None + contents: + reagents: + - ReagentId: ThirteenLoko + Quantity: 20 - type: Sprite sprite: Objects/Consumable/Drinks/thirteen_loko.rsi diff --git a/Resources/Prototypes/Reagents/Consumable/Drink/soda.yml b/Resources/Prototypes/Reagents/Consumable/Drink/soda.yml index d91a96dd18..eb2b34041b 100644 --- a/Resources/Prototypes/Reagents/Consumable/Drink/soda.yml +++ b/Resources/Prototypes/Reagents/Consumable/Drink/soda.yml @@ -14,3 +14,23 @@ amount: 1 - !type:AdjustHealth amount: 0.1 + +- type: reagent + id: ThirteenLoko + name: Thirteen Loko + desc: A highly processed liquid substance barely-passing intergalatic health standarts for a soft drink. + physicalDesc: fizzy + color: "#deb928" + metabolism: + - !type:DefaultDrink + rate: 1 + - !type:HealthChangeMetabolism + healthChange: 2 + damageClass: Toxin + plantMetabolism: + - !type:AdjustNutrition + amount: 0.1 + - !type:AdjustWater + amount: 1 + - !type:AdjustHealth + amount: 0.1 From 427ed727544dbc8ea76df02adda891c73d654cdb Mon Sep 17 00:00:00 2001 From: DmitriyRubetskoy <75271456+DmitriyRubetskoy@users.noreply.github.com> Date: Thu, 1 Jul 2021 14:07:18 +0300 Subject: [PATCH 16/30] Changed airlock type from service to theatre (#4246) --- Resources/Maps/saltern.yml | 2 +- .../Entities/Constructible/Doors/airlock_access.yml | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/Resources/Maps/saltern.yml b/Resources/Maps/saltern.yml index 9cb53589ce..4037e56719 100644 --- a/Resources/Maps/saltern.yml +++ b/Resources/Maps/saltern.yml @@ -5371,7 +5371,7 @@ entities: parent: 853 type: Transform - uid: 587 - type: AirlockServiceLocked + type: AirlockTheatreLocked components: - name: Theatre type: MetaData diff --git a/Resources/Prototypes/Entities/Constructible/Doors/airlock_access.yml b/Resources/Prototypes/Entities/Constructible/Doors/airlock_access.yml index a917721474..912fcecf58 100644 --- a/Resources/Prototypes/Entities/Constructible/Doors/airlock_access.yml +++ b/Resources/Prototypes/Entities/Constructible/Doors/airlock_access.yml @@ -7,6 +7,14 @@ - type: AccessReader access: [["Service"]] +- type: entity + parent: Airlock + id: AirlockTheatreLocked + suffix: Theatre, Locked + components: + - type: AccessReader + access: [["Theatre"]] + - type: entity parent: AirlockExternal id: AirlockExternalLocked From 5469f8c8b2198d306d2ed4bb8a6dd3839b656a32 Mon Sep 17 00:00:00 2001 From: DmitriyRubetskoy <75271456+DmitriyRubetskoy@users.noreply.github.com> Date: Thu, 1 Jul 2021 14:26:44 +0300 Subject: [PATCH 17/30] Give Item spell (#4241) * Cherry-picked summonspell * Renamed the script for clarity * Fixed Spell type error in yaml * Fixed Sound issues and increased the cooldown * Newline * Major script change * Fixed Namespace * Validation fixed, TryGet replaced * Typo again * Allowed for proper localisation * Typo fixed Co-authored-by: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com> * Adressed changes * Review cleanup Co-authored-by: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com> Co-authored-by: metalgearsloth --- .../Actions/Spells/GiveItemSpell.cs | 75 +++++++++++++++++++ Content.Shared/Actions/ActionType.cs | 5 +- .../Locale/en-US/actions/actions/spells.ftl | 1 + Resources/Prototypes/Actions/spells.yml | 13 ++++ 4 files changed, 92 insertions(+), 2 deletions(-) create mode 100644 Content.Server/Actions/Spells/GiveItemSpell.cs create mode 100644 Resources/Locale/en-US/actions/actions/spells.ftl create mode 100644 Resources/Prototypes/Actions/spells.yml diff --git a/Content.Server/Actions/Spells/GiveItemSpell.cs b/Content.Server/Actions/Spells/GiveItemSpell.cs new file mode 100644 index 0000000000..d7cac3a1b2 --- /dev/null +++ b/Content.Server/Actions/Spells/GiveItemSpell.cs @@ -0,0 +1,75 @@ +using Content.Server.Hands.Components; +using Content.Server.Items; +using Content.Server.Notification; +using Content.Shared.ActionBlocker; +using Content.Shared.Actions.Behaviors; +using Content.Shared.Actions.Components; +using Content.Shared.Cooldown; +using Content.Shared.Notification.Managers; +using JetBrains.Annotations; +using Robust.Shared.Audio; +using Robust.Shared.GameObjects; +using Robust.Shared.IoC; +using Robust.Shared.Localization; +using Robust.Shared.Log; +using Robust.Shared.Player; +using Robust.Shared.Prototypes; +using Robust.Shared.Serialization.Manager.Attributes; +using Robust.Shared.ViewVariables; + +namespace Content.Server.Actions.Spells +{ + [UsedImplicitly] + [DataDefinition] + public class GiveItemSpell : IInstantAction + { //TODO: Needs to be an EntityPrototype for proper validation + [ViewVariables] [DataField("castMessage")] public string? CastMessage { get; set; } = default!; + [ViewVariables] [DataField("cooldown")] public float CoolDown { get; set; } = 1f; + [ViewVariables] [DataField("spellItem")] public string ItemProto { get; set; } = default!; + + [ViewVariables] [DataField("castSound")] public string? CastSound { get; set; } = default!; + + //Rubber-band snapping items into player's hands, originally was a workaround, later found it works quite well with stuns + //Not sure if needs fixing + + public void DoInstantAction(InstantActionEventArgs args) + { + var caster = args.Performer; + + if (!caster.TryGetComponent(out HandsComponent? handsComponent)) + { + caster.PopupMessage(Loc.GetString("spell-fail-no-hands")); + return; + } + + if (!EntitySystem.Get().CanInteract(caster)) return; + + // TODO: Nix when we get EntityPrototype serializers + if (!IoCManager.Resolve().HasIndex(ItemProto)) + { + Logger.Error($"Invalid prototype {ItemProto} supplied for {nameof(GiveItemSpell)}"); + return; + } + + // TODO: Look this is shitty and ideally a test would do it + var spawnedProto = caster.EntityManager.SpawnEntity(ItemProto, caster.Transform.MapPosition); + + if (!spawnedProto.TryGetComponent(out ItemComponent? itemComponent)) + { + Logger.Error($"Tried to use {nameof(GiveItemSpell)} but prototype has no {nameof(ItemComponent)}?"); + spawnedProto.Delete(); + return; + } + + args.PerformerActions?.Cooldown(args.ActionType, Cooldowns.SecondsFromNow(CoolDown)); + + if (CastMessage != null) + caster.PopupMessageEveryone(CastMessage); + + handsComponent.PutInHandOrDrop(itemComponent); + + if (CastSound != null) + SoundSystem.Play(Filter.Pvs(caster), CastSound, caster); + } + } +} diff --git a/Content.Shared/Actions/ActionType.cs b/Content.Shared/Actions/ActionType.cs index beb5e6136d..fdca3780ea 100644 --- a/Content.Shared/Actions/ActionType.cs +++ b/Content.Shared/Actions/ActionType.cs @@ -1,4 +1,4 @@ -#nullable enable +#nullable enable namespace Content.Shared.Actions { /// @@ -17,7 +17,8 @@ namespace Content.Shared.Actions DebugTargetPoint, DebugTargetPointRepeat, DebugTargetEntity, - DebugTargetEntityRepeat + DebugTargetEntityRepeat, + SpellPie } /// diff --git a/Resources/Locale/en-US/actions/actions/spells.ftl b/Resources/Locale/en-US/actions/actions/spells.ftl new file mode 100644 index 0000000000..186e6e7fec --- /dev/null +++ b/Resources/Locale/en-US/actions/actions/spells.ftl @@ -0,0 +1 @@ +spell-fail-no-hands = You don't have hands! diff --git a/Resources/Prototypes/Actions/spells.yml b/Resources/Prototypes/Actions/spells.yml new file mode 100644 index 0000000000..cfcb1709ce --- /dev/null +++ b/Resources/Prototypes/Actions/spells.yml @@ -0,0 +1,13 @@ +- type: action + actionType: SpellPie + icon: Objects/Consumable/Food/Baked/pie.rsi/plain.png + name: "Pie" + filters: + - spells + description: "Give me a pie, I dare you!" + behaviorType: Instant + behavior: !type:GiveItemSpell + spellItem: FoodPieBananaCream + castMessage: I NEED A PIE! + cooldown: 15 + castSound: /Audio/Items/bikehorn.ogg From dcfa4dea008559e7fc958357cf556a01aa34f7ca Mon Sep 17 00:00:00 2001 From: Pieter-Jan Briers Date: Fri, 2 Jul 2021 20:35:16 +0200 Subject: [PATCH 18/30] Fix netser Rider template so it can be used in to-level class definitions. --- SpaceStation14.sln.DotSettings | 3 +++ 1 file changed, 3 insertions(+) diff --git a/SpaceStation14.sln.DotSettings b/SpaceStation14.sln.DotSettings index 7e9587d93b..4e62aebed4 100644 --- a/SpaceStation14.sln.DotSettings +++ b/SpaceStation14.sln.DotSettings @@ -164,6 +164,9 @@ True Serializable & NetSerializable types True + True + 2.0 + InCSharpTypeAndNamespace True 2.0 InCSharpTypeMember From 538ff858f34f58b558e388316cb0003bd1047db7 Mon Sep 17 00:00:00 2001 From: Pieter-Jan Briers Date: Fri, 2 Jul 2021 20:36:10 +0200 Subject: [PATCH 19/30] Update submodule --- RobustToolbox | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/RobustToolbox b/RobustToolbox index d02d186a2f..abea3024b4 160000 --- a/RobustToolbox +++ b/RobustToolbox @@ -1 +1 @@ -Subproject commit d02d186a2f046f37d10b12ed746d50a227f2f836 +Subproject commit abea3024b4a199d8ac7315c6be0752eeaa884b0a From d10885742b479849bb12973e1881fb7c06e65ec4 Mon Sep 17 00:00:00 2001 From: DmitriyRubetskoy <75271456+DmitriyRubetskoy@users.noreply.github.com> Date: Sat, 3 Jul 2021 04:16:21 +0300 Subject: [PATCH 20/30] Omnizine and donk-pockets (#4250) Co-authored-by: Swept --- .../Consumable/Food/Baked/donkpocket.yml | 36 +++++++++++++++++- .../Consumable/Food/Containers/box.yml | 16 ++++++++ Resources/Prototypes/Reagents/medicine.yml | 21 ++++++++++ .../Food/Baked/donkpocket.rsi/dink-box.png | Bin 0 -> 427 bytes .../Food/Baked/donkpocket.rsi/dink.png | Bin 0 -> 318 bytes .../Food/Baked/donkpocket.rsi/meta.json | 6 +++ 6 files changed, 77 insertions(+), 2 deletions(-) create mode 100644 Resources/Textures/Objects/Consumable/Food/Baked/donkpocket.rsi/dink-box.png create mode 100644 Resources/Textures/Objects/Consumable/Food/Baked/donkpocket.rsi/dink.png diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/donkpocket.yml b/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/donkpocket.yml index 814a195790..c24a919ef9 100644 --- a/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/donkpocket.yml +++ b/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/donkpocket.yml @@ -21,6 +21,7 @@ # Donkpocket # Warm gives +5 nutriment. +# Warm ones contain a small amount of Omnizine. - type: entity name: donk-pocket @@ -68,6 +69,8 @@ reagents: - ReagentId: Nutriment Quantity: 10 + - ReagentId: Omnizine + Quantity: 4 - type: entity name: spicy-pocket @@ -80,7 +83,7 @@ - type: entity name: warm spicy-pocket - parent: FoodDonkpocketDank + parent: FoodDonkpocketSpicy id: FoodDonkpocketSpicyWarm description: The classic snack food, now maybe a bit too spicy. components: @@ -89,6 +92,8 @@ reagents: - ReagentId: Nutriment Quantity: 10 + - ReagentId: Omnizine + Quantity: 2 - type: Sprite state: spicy @@ -112,6 +117,8 @@ reagents: - ReagentId: Nutriment Quantity: 10 + - ReagentId: Omnizine + Quantity: 2 - type: entity name: pizza-pocket @@ -131,13 +138,15 @@ name: warm pizza-pocket parent: FoodDonkpocketPizza id: FoodDonkpocketPizzaWarm - description: An East Asian take on the classic stationside snack, now steamy and warm. + description: Cheese filling really hits the spot when warm. components: - type: SolutionContainer contents: reagents: - ReagentId: Nutriment Quantity: 15 + - ReagentId: Omnizine + Quantity: 2 - type: entity name: honk-pocket @@ -150,6 +159,7 @@ reagents: - ReagentId: Nutriment Quantity: 5 + - ReagentId: Omnizine - type: Sprite state: banana @@ -164,6 +174,8 @@ reagents: - ReagentId: Nutriment Quantity: 10 + - ReagentId: Omnizine + Quantity: 2 - type: entity name: berry-pocket @@ -190,6 +202,10 @@ reagents: - ReagentId: Nutriment Quantity: 10 + - ReagentId: Omnizine + Quantity: 2 + - ReagentId: Glucose + Quantity: 2 - type: entity name: gondola-pocket @@ -215,3 +231,19 @@ reagents: - ReagentId: Nutriment Quantity: 10 + - ReagentId: Omnizine + Quantity: 2 + +- type: entity + name: dink-pocket + parent: FoodDonkpocketBase + id: FoodDonkpocketDink + description: An off-brand lizard donk-pocket, filled with pickled carrot and wrapped with seaweed. Best eaten cold, or even better, not eaten at all. + components: + - type: SolutionContainer + contents: + reagents: + - ReagentId: Nutriment + Quantity: 2 + - type: Sprite + state: dink diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Food/Containers/box.yml b/Resources/Prototypes/Entities/Objects/Consumable/Food/Containers/box.yml index 08cca5a0a2..b3264ef81e 100644 --- a/Resources/Prototypes/Entities/Objects/Consumable/Food/Containers/box.yml +++ b/Resources/Prototypes/Entities/Objects/Consumable/Food/Containers/box.yml @@ -357,3 +357,19 @@ contents: - id: FoodDonkpocketHonk amount: 6 + +- type: entity + parent: FoodBoxDonkpocket + id: FoodBoxDonkpocketDink + name: box of dink-pockets + description: Net Zero carbohydrates! No need for heating! + components: + - type: Sprite + state: dink-box + - type: Item + sprite: Objects/Consumable/Food/Baked/donkpocket.rsi + color: green + - type: StorageFill + contents: + - id: FoodDonkpocketDink + amount: 6 diff --git a/Resources/Prototypes/Reagents/medicine.yml b/Resources/Prototypes/Reagents/medicine.yml index a34e89132a..16dba85352 100644 --- a/Resources/Prototypes/Reagents/medicine.yml +++ b/Resources/Prototypes/Reagents/medicine.yml @@ -356,3 +356,24 @@ desc: Pure THC oil, extracted from the leaves of the cannabis plant. Much stronger than in it's natural form and can be used to numb chronic pain in patients. physicalDesc: skunky color: "#DAA520" + +- type: reagent + id: Omnizine + name: Omnizine + desc: A soothing milky liquid with an iridescent gleam. A well known conspiracy theory says that it's origins remain a mystery because knowing the secrets of its production would render most commercial pharmaceuticals obsolete. + physicalDesc: soothing + color: "#fcf7f9" + metabolism: + - !type:HealthChangeMetabolism + healthChange: -2 + damageClass: Burn + - !type:HealthChangeMetabolism + healthChange: -2 + damageClass: Toxin + - !type:HealthChangeMetabolism + healthChange: -2 + damageClass: Airloss + - !type:HealthChangeMetabolism + healthChange: -2 + damageClass: Brute + diff --git a/Resources/Textures/Objects/Consumable/Food/Baked/donkpocket.rsi/dink-box.png b/Resources/Textures/Objects/Consumable/Food/Baked/donkpocket.rsi/dink-box.png new file mode 100644 index 0000000000000000000000000000000000000000..eba69a81bdf21227ea852946a9fdff069a189ac9 GIT binary patch literal 427 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|CI|S0xE?rg zz)nEGT}Wt>w)VEv)cN}Q$9j6=BqeiXWs{_(3+3h8)YWt3<*SvIbM=MGl$G1n)w=^^ z=SM14x=Kw9k~=v`bAGJc^?9cIEiDseWt-I0e8t79_p*k!uqu}+%O%Q5he=C#NVsfw zQLk5*iIDN!?&-Y9x$%4Bjh{DW{-4?MvE^-=+MBuM&kC(_m$C<63-15lFR6S=8R$I2 zk|4iehW{jjR|1c&0X27ex;Tbd^uE1h$ah$Q$Khhkkr@drMxHwF>UUY)m60xed0}CE zN2_{cL+ebJq3#Jon6T9Zt-$wA-+e+Rvvbs*(^Ifw z)?@fQ!LX8b$!D8&lOx3*h#j{qnJpTyF#W<;i5W}*K8zd0Upj8P)Px#_(?=TR9J=Wl(7oJFc5}+C01w`p@Ps#!9iSF=q$dAFXiCs=F_-1xm4^>sCBR% z0)~iA6~&?^iVog4g-h=8tP4{{dd4Xf&k07*qoM6N<$f*cHp4FCWD literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Consumable/Food/Baked/donkpocket.rsi/meta.json b/Resources/Textures/Objects/Consumable/Food/Baked/donkpocket.rsi/meta.json index 7b6a77fc7a..8b64f3577a 100644 --- a/Resources/Textures/Objects/Consumable/Food/Baked/donkpocket.rsi/meta.json +++ b/Resources/Textures/Objects/Consumable/Food/Baked/donkpocket.rsi/meta.json @@ -51,6 +51,12 @@ }, { "name": "teriyaki-box" + }, + { + "name": "dink-box" + }, + { + "name": "dink" }, { "name": "inhand-left", From d5e34c6ad4a69f259b6dfca515990bea696ce2c7 Mon Sep 17 00:00:00 2001 From: Vera Aguilera Puerto <6766154+Zumorica@users.noreply.github.com> Date: Sat, 3 Jul 2021 15:23:01 +0200 Subject: [PATCH 21/30] Changes content integration tests to load content resources. (#4248) * Changes content integration tests to load content resources. * Content Integration tests override the GameControllerOptions and ServerOptions. Only engine integration tests can change these! * don't do component auto-registration by default in content integration tests * Only use empty map in integration tests if CVar not overriden already. * don't use nullable annotations in content integration tests... * Fix integration tests * Fix spawn test * Move cvar overrides out of content * Update submodule. --- .../ContentIntegrationTest.cs | 49 +++++++++++++++---- Content.IntegrationTests/Tests/EntityTest.cs | 8 ++- RobustToolbox | 2 +- 3 files changed, 47 insertions(+), 12 deletions(-) diff --git a/Content.IntegrationTests/ContentIntegrationTest.cs b/Content.IntegrationTests/ContentIntegrationTest.cs index d550bc7cc9..765d3ade75 100644 --- a/Content.IntegrationTests/ContentIntegrationTest.cs +++ b/Content.IntegrationTests/ContentIntegrationTest.cs @@ -7,6 +7,8 @@ using Content.Server.IoC; using Content.Shared.CCVar; using Moq; using NUnit.Framework; +using Robust.Client; +using Robust.Server; using Robust.Server.Maps; using Robust.Shared; using Robust.Shared.ContentPack; @@ -31,6 +33,13 @@ namespace Content.IntegrationTests FailureLogLevel = LogLevel.Warning }; + // Load content resources, but not config and user data. + options.Options = new GameControllerOptions() + { + LoadContentResources = true, + LoadConfigAndUserData = false, + }; + options.ContentStart = true; options.ContentAssemblies = new[] @@ -57,13 +66,6 @@ namespace Content.IntegrationTests }); }; - // Connecting to Discord is a massive waste of time. - // Basically just makes the CI logs a mess. - options.CVarOverrides[CVars.DiscordEnabled.Name] = "false"; - - // Avoid preloading textures in tests. - options.CVarOverrides.TryAdd(CVars.TexturePreloadingEnabled.Name, "false"); - return base.StartClient(options); } @@ -74,6 +76,13 @@ namespace Content.IntegrationTests FailureLogLevel = LogLevel.Warning }; + // Load content resources, but not config and user data. + options.Options = new ServerOptions() + { + LoadConfigAndUserData = false, + LoadContentResources = true, + }; + options.ContentStart = true; options.ContentAssemblies = new[] @@ -105,15 +114,23 @@ namespace Content.IntegrationTests // Disable holidays as some of them might mess with the map at round start. options.CVarOverrides[CCVars.HolidaysEnabled.Name] = "false"; - // Avoid loading a large map by default for integration tests. - options.CVarOverrides[CCVars.GameMap.Name] = "Maps/Test/empty.yml"; + // Avoid loading a large map by default for integration tests if none has been specified. + if(!options.CVarOverrides.ContainsKey(CCVars.GameMap.Name)) + options.CVarOverrides[CCVars.GameMap.Name] = "Maps/Test/empty.yml"; return base.StartServer(options); } protected ServerIntegrationInstance StartServerDummyTicker(ServerIntegrationOptions options = null) { - options ??= new ServerIntegrationOptions(); + options ??= new ServerContentIntegrationOption(); + + // Load content resources, but not config and user data. + options.Options = new ServerOptions() + { + LoadConfigAndUserData = false, + LoadContentResources = true, + }; // Dummy game ticker. options.CVarOverrides[CCVars.GameDummyTicker.Name] = "true"; @@ -229,6 +246,12 @@ namespace Content.IntegrationTests FailureLogLevel = LogLevel.Warning; } + public override GameControllerOptions Options { get; set; } = new() + { + LoadContentResources = true, + LoadConfigAndUserData = false, + }; + public Action ContentBeforeIoC { get; set; } } @@ -239,6 +262,12 @@ namespace Content.IntegrationTests FailureLogLevel = LogLevel.Warning; } + public override ServerOptions Options { get; set; } = new() + { + LoadContentResources = true, + LoadConfigAndUserData = false, + }; + public Action ContentBeforeIoC { get; set; } } } diff --git a/Content.IntegrationTests/Tests/EntityTest.cs b/Content.IntegrationTests/Tests/EntityTest.cs index 63f5f48633..b2812c5478 100644 --- a/Content.IntegrationTests/Tests/EntityTest.cs +++ b/Content.IntegrationTests/Tests/EntityTest.cs @@ -4,6 +4,7 @@ using System.Linq; using System.Threading.Tasks; using Content.Server.Battery.Components; using Content.Server.PowerCell.Components; +using Content.Shared.CCVar; using Content.Shared.Coordinates; using NUnit.Framework; using Robust.Shared.GameObjects; @@ -21,7 +22,12 @@ namespace Content.IntegrationTests.Tests [Test] public async Task SpawnTest() { - var server = StartServerDummyTicker(); + var options = new ServerContentIntegrationOption() + { + CVarOverrides = {{CCVars.AIMaxUpdates.Name, int.MaxValue.ToString()}} + }; + + var server = StartServerDummyTicker(options); await server.WaitIdleAsync(); var mapManager = server.ResolveDependency(); diff --git a/RobustToolbox b/RobustToolbox index abea3024b4..c06707d519 160000 --- a/RobustToolbox +++ b/RobustToolbox @@ -1 +1 @@ -Subproject commit abea3024b4a199d8ac7315c6be0752eeaa884b0a +Subproject commit c06707d51911ebb1ed8005277d0f10e58bf49d6d From ef958185fbe12fcb7156426a1adf4a23521141fb Mon Sep 17 00:00:00 2001 From: Vera Aguilera Puerto <6766154+Zumorica@users.noreply.github.com> Date: Sun, 4 Jul 2021 13:32:24 +0200 Subject: [PATCH 22/30] DoAfter can now raise events so you don't need to use async with it (#4253) --- .../Tests/DoAfter/DoAfterServerTest.cs | 4 +- .../Surgery/BiologicalSurgeryDataComponent.cs | 2 +- .../Climbing/Components/ClimbableComponent.cs | 4 +- .../Components/ConstructionComponent.cs | 4 +- .../Construction/ConstructionSystem.cs | 2 +- .../Cuffs/Components/CuffableComponent.cs | 2 +- .../Cuffs/Components/HandcuffComponent.cs | 2 +- .../Mailing/DisposalMailingUnitComponent.cs | 2 +- .../Unit/Components/DisposalUnitComponent.cs | 2 +- Content.Server/DoAfter/DoAfter.cs | 3 +- Content.Server/DoAfter/DoAfterEventArgs.cs | 30 +++++++++ Content.Server/DoAfter/DoAfterSystem.cs | 63 +++++++++++++++---- .../DisassembleOnActivateSystem.cs | 2 +- .../EntitySystems/SpawnAfterInteractSystem.cs | 2 +- .../Fluids/Components/BucketComponent.cs | 2 +- .../Fluids/Components/MopComponent.cs | 2 +- .../Components/KitchenSpikeComponent.cs | 2 +- Content.Server/RCD/Components/RCDComponent.cs | 2 +- .../Components/ServerStorageComponent.cs | 2 +- Content.Server/Strip/StrippableComponent.cs | 8 +-- .../Tools/Components/ToolComponent.cs | 2 +- 21 files changed, 106 insertions(+), 38 deletions(-) diff --git a/Content.IntegrationTests/Tests/DoAfter/DoAfterServerTest.cs b/Content.IntegrationTests/Tests/DoAfter/DoAfterServerTest.cs index 16ef7b43c9..570178cf44 100644 --- a/Content.IntegrationTests/Tests/DoAfter/DoAfterServerTest.cs +++ b/Content.IntegrationTests/Tests/DoAfter/DoAfterServerTest.cs @@ -39,7 +39,7 @@ namespace Content.IntegrationTests.Tests.DoAfter var mob = entityManager.SpawnEntity("Dummy", MapCoordinates.Nullspace); var cancelToken = new CancellationTokenSource(); var args = new DoAfterEventArgs(mob, tickTime / 2, cancelToken.Token); - task = EntitySystem.Get().DoAfter(args); + task = EntitySystem.Get().WaitDoAfter(args); }); await server.WaitRunTicks(1); @@ -62,7 +62,7 @@ namespace Content.IntegrationTests.Tests.DoAfter var mob = entityManager.SpawnEntity("Dummy", MapCoordinates.Nullspace); var cancelToken = new CancellationTokenSource(); var args = new DoAfterEventArgs(mob, tickTime * 2, cancelToken.Token); - task = EntitySystem.Get().DoAfter(args); + task = EntitySystem.Get().WaitDoAfter(args); cancelToken.Cancel(); }); diff --git a/Content.Server/Body/Surgery/BiologicalSurgeryDataComponent.cs b/Content.Server/Body/Surgery/BiologicalSurgeryDataComponent.cs index b6db086dc7..5d932a611f 100644 --- a/Content.Server/Body/Surgery/BiologicalSurgeryDataComponent.cs +++ b/Content.Server/Body/Surgery/BiologicalSurgeryDataComponent.cs @@ -68,7 +68,7 @@ namespace Content.Server.Body.Surgery BreakOnTargetMove = true }; - return await doAfterSystem.DoAfter(args) == DoAfterStatus.Finished; + return await doAfterSystem.WaitDoAfter(args) == DoAfterStatus.Finished; } private bool HasIncisionNotClamped() diff --git a/Content.Server/Climbing/Components/ClimbableComponent.cs b/Content.Server/Climbing/Components/ClimbableComponent.cs index 5b928cdf54..e8033f269d 100644 --- a/Content.Server/Climbing/Components/ClimbableComponent.cs +++ b/Content.Server/Climbing/Components/ClimbableComponent.cs @@ -157,7 +157,7 @@ namespace Content.Server.Climbing.Components BreakOnStun = true }; - var result = await EntitySystem.Get().DoAfter(doAfterEventArgs); + var result = await EntitySystem.Get().WaitDoAfter(doAfterEventArgs); if (result != DoAfterStatus.Cancelled && entityToMove.TryGetComponent(out PhysicsComponent? body) && body.Fixtures.Count >= 1) { @@ -204,7 +204,7 @@ namespace Content.Server.Climbing.Components BreakOnStun = true }; - var result = await EntitySystem.Get().DoAfter(doAfterEventArgs); + var result = await EntitySystem.Get().WaitDoAfter(doAfterEventArgs); if (result != DoAfterStatus.Cancelled && user.TryGetComponent(out PhysicsComponent? body) && body.Fixtures.Count >= 1) { diff --git a/Content.Server/Construction/Components/ConstructionComponent.cs b/Content.Server/Construction/Components/ConstructionComponent.cs index 8b86182e5a..a4de447e4c 100644 --- a/Content.Server/Construction/Components/ConstructionComponent.cs +++ b/Content.Server/Construction/Components/ConstructionComponent.cs @@ -258,7 +258,7 @@ namespace Content.Server.Construction.Components { case ArbitraryInsertConstructionGraphStep arbitraryStep: if (arbitraryStep.EntityValid(eventArgs.Using) - && await doAfterSystem.DoAfter(doAfterArgs) == DoAfterStatus.Finished) + && await doAfterSystem.WaitDoAfter(doAfterArgs) == DoAfterStatus.Finished) { valid = true; } @@ -267,7 +267,7 @@ namespace Content.Server.Construction.Components case MaterialConstructionGraphStep materialStep: if (materialStep.EntityValid(eventArgs.Using, out var stack) - && await doAfterSystem.DoAfter(doAfterArgs) == DoAfterStatus.Finished) + && await doAfterSystem.WaitDoAfter(doAfterArgs) == DoAfterStatus.Finished) { var splitStack = EntitySystem.Get().Split(eventArgs.Using.Uid, stack, materialStep.Amount, eventArgs.User.Transform.Coordinates); diff --git a/Content.Server/Construction/ConstructionSystem.cs b/Content.Server/Construction/ConstructionSystem.cs index c18701866f..4b4bcaab3c 100644 --- a/Content.Server/Construction/ConstructionSystem.cs +++ b/Content.Server/Construction/ConstructionSystem.cs @@ -238,7 +238,7 @@ namespace Content.Server.Construction NeedHand = false, }; - if (await doAfterSystem.DoAfter(doAfterArgs) == DoAfterStatus.Cancelled) + if (await doAfterSystem.WaitDoAfter(doAfterArgs) == DoAfterStatus.Cancelled) { FailCleanup(); return null; diff --git a/Content.Server/Cuffs/Components/CuffableComponent.cs b/Content.Server/Cuffs/Components/CuffableComponent.cs index 7fc5d27503..4293558043 100644 --- a/Content.Server/Cuffs/Components/CuffableComponent.cs +++ b/Content.Server/Cuffs/Components/CuffableComponent.cs @@ -253,7 +253,7 @@ namespace Content.Server.Cuffs.Components var doAfterSystem = EntitySystem.Get(); _uncuffing = true; - var result = await doAfterSystem.DoAfter(doAfterEventArgs); + var result = await doAfterSystem.WaitDoAfter(doAfterEventArgs); _uncuffing = false; diff --git a/Content.Server/Cuffs/Components/HandcuffComponent.cs b/Content.Server/Cuffs/Components/HandcuffComponent.cs index 66fd797321..bac2720916 100644 --- a/Content.Server/Cuffs/Components/HandcuffComponent.cs +++ b/Content.Server/Cuffs/Components/HandcuffComponent.cs @@ -214,7 +214,7 @@ namespace Content.Server.Cuffs.Components _cuffing = true; - var result = await EntitySystem.Get().DoAfter(doAfterEventArgs); + var result = await EntitySystem.Get().WaitDoAfter(doAfterEventArgs); _cuffing = false; diff --git a/Content.Server/Disposal/Mailing/DisposalMailingUnitComponent.cs b/Content.Server/Disposal/Mailing/DisposalMailingUnitComponent.cs index af7225fd4a..806ca63dec 100644 --- a/Content.Server/Disposal/Mailing/DisposalMailingUnitComponent.cs +++ b/Content.Server/Disposal/Mailing/DisposalMailingUnitComponent.cs @@ -217,7 +217,7 @@ namespace Content.Server.Disposal.Mailing NeedHand = false, }; - var result = await doAfterSystem.DoAfter(doAfterArgs); + var result = await doAfterSystem.WaitDoAfter(doAfterArgs); if (result == DoAfterStatus.Cancelled) return false; diff --git a/Content.Server/Disposal/Unit/Components/DisposalUnitComponent.cs b/Content.Server/Disposal/Unit/Components/DisposalUnitComponent.cs index 25075c8be7..7d483e4399 100644 --- a/Content.Server/Disposal/Unit/Components/DisposalUnitComponent.cs +++ b/Content.Server/Disposal/Unit/Components/DisposalUnitComponent.cs @@ -196,7 +196,7 @@ namespace Content.Server.Disposal.Unit.Components NeedHand = false, }; - var result = await doAfterSystem.DoAfter(doAfterArgs); + var result = await doAfterSystem.WaitDoAfter(doAfterArgs); if (result == DoAfterStatus.Cancelled) return false; diff --git a/Content.Server/DoAfter/DoAfter.cs b/Content.Server/DoAfter/DoAfter.cs index 3c41363818..4b929a060b 100644 --- a/Content.Server/DoAfter/DoAfter.cs +++ b/Content.Server/DoAfter/DoAfter.cs @@ -4,6 +4,7 @@ using System.Threading.Tasks; using Content.Server.Hands.Components; using Content.Server.Items; using Content.Server.Stunnable.Components; +using Robust.Shared.GameObjects; using Robust.Shared.IoC; using Robust.Shared.Map; using Robust.Shared.Timing; @@ -16,7 +17,7 @@ namespace Content.Server.DoAfter private TaskCompletionSource Tcs { get; } - public DoAfterEventArgs EventArgs; + public readonly DoAfterEventArgs EventArgs; public TimeSpan StartTime { get; } diff --git a/Content.Server/DoAfter/DoAfterEventArgs.cs b/Content.Server/DoAfter/DoAfterEventArgs.cs index b7ec522f5c..c4291fdc9c 100644 --- a/Content.Server/DoAfter/DoAfterEventArgs.cs +++ b/Content.Server/DoAfter/DoAfterEventArgs.cs @@ -81,6 +81,36 @@ namespace Content.Server.DoAfter /// public Func? ExtraCheck { get; set; } + /// + /// Event to be raised directed to the entity when the DoAfter is cancelled. + /// + public EntityEventArgs? UserCancelledEvent { get; set; } + + /// + /// Event to be raised directed to the entity when the DoAfter is finished successfully. + /// + public EntityEventArgs? UserFinishedEvent { get; set; } + + /// + /// Event to be raised directed to the entity when the DoAfter is cancelled. + /// + public EntityEventArgs? TargetCancelledEvent { get; set; } + + /// + /// Event to be raised directed to the entity when the DoAfter is finished successfully. + /// + public EntityEventArgs? TargetFinishedEvent { get; set; } + + /// + /// Event to be broadcast when the DoAfter is cancelled. + /// + public object? BroadcastCancelledEvent { get; set; } + + /// + /// Event to be broadcast when the DoAfter is finished successfully. + /// + public object? BroadcastFinishedEvent { get; set; } + public DoAfterEventArgs( IEntity user, float delay, diff --git a/Content.Server/DoAfter/DoAfterSystem.cs b/Content.Server/DoAfter/DoAfterSystem.cs index 8ee9372983..6934a93c61 100644 --- a/Content.Server/DoAfter/DoAfterSystem.cs +++ b/Content.Server/DoAfter/DoAfterSystem.cs @@ -11,15 +11,16 @@ namespace Content.Server.DoAfter [UsedImplicitly] public sealed class DoAfterSystem : EntitySystem { + // We cache these lists as to not allocate them every update tick... + private readonly List _cancelled = new(); + private readonly List _finished = new(); + public override void Update(float frameTime) { base.Update(frameTime); foreach (var comp in ComponentManager.EntityQuery(true)) { - var cancelled = new List(0); - var finished = new List(0); - foreach (var doAfter in comp.DoAfters.ToArray()) { doAfter.Run(frameTime); @@ -29,27 +30,47 @@ namespace Content.Server.DoAfter case DoAfterStatus.Running: break; case DoAfterStatus.Cancelled: - cancelled.Add(doAfter); + _cancelled.Add(doAfter); break; case DoAfterStatus.Finished: - finished.Add(doAfter); + _finished.Add(doAfter); break; default: throw new ArgumentOutOfRangeException(); } } - foreach (var doAfter in cancelled) + foreach (var doAfter in _cancelled) { comp.Cancelled(doAfter); + + if(!doAfter.EventArgs.User.Deleted && doAfter.EventArgs.UserCancelledEvent != null) + RaiseLocalEvent(doAfter.EventArgs.User.Uid, doAfter.EventArgs.UserCancelledEvent, false); + + if(doAfter.EventArgs.Target is { Deleted: false } && doAfter.EventArgs.TargetCancelledEvent != null) + RaiseLocalEvent(doAfter.EventArgs.Target.Uid, doAfter.EventArgs.TargetCancelledEvent, false); + + if(doAfter.EventArgs.BroadcastCancelledEvent != null) + RaiseLocalEvent(doAfter.EventArgs.BroadcastCancelledEvent); } - foreach (var doAfter in finished) + foreach (var doAfter in _finished) { comp.Finished(doAfter); + + if(!doAfter.EventArgs.User.Deleted && doAfter.EventArgs.UserFinishedEvent != null) + RaiseLocalEvent(doAfter.EventArgs.User.Uid, doAfter.EventArgs.UserFinishedEvent, false); + + if(doAfter.EventArgs.Target is { Deleted: false } && doAfter.EventArgs.TargetFinishedEvent != null) + RaiseLocalEvent(doAfter.EventArgs.Target.Uid, doAfter.EventArgs.TargetFinishedEvent, false); + + if(doAfter.EventArgs.BroadcastFinishedEvent != null) + RaiseLocalEvent(doAfter.EventArgs.BroadcastFinishedEvent); } - finished.Clear(); + // Clean the shared lists at the end, ensuring they'll be clean for the next time we need them. + _cancelled.Clear(); + _finished.Clear(); } } @@ -59,17 +80,33 @@ namespace Content.Server.DoAfter /// /// /// - public async Task DoAfter(DoAfterEventArgs eventArgs) + public async Task WaitDoAfter(DoAfterEventArgs eventArgs) + { + var doAfter = CreateDoAfter(eventArgs); + + await doAfter.AsTask; + + return doAfter.Status; + } + + /// + /// Creates a DoAfter without waiting for it to finish. You can use events with this. + /// These can be potentially cancelled by the user moving or when other things happen. + /// + /// + public void DoAfter(DoAfterEventArgs eventArgs) + { + CreateDoAfter(eventArgs); + } + + private DoAfter CreateDoAfter(DoAfterEventArgs eventArgs) { // Setup var doAfter = new DoAfter(eventArgs); // Caller's gonna be responsible for this I guess var doAfterComponent = eventArgs.User.GetComponent(); doAfterComponent.Add(doAfter); - - await doAfter.AsTask; - - return doAfter.Status; + return doAfter; } } diff --git a/Content.Server/Engineering/EntitySystems/DisassembleOnActivateSystem.cs b/Content.Server/Engineering/EntitySystems/DisassembleOnActivateSystem.cs index b123077e94..7dedae6d28 100644 --- a/Content.Server/Engineering/EntitySystems/DisassembleOnActivateSystem.cs +++ b/Content.Server/Engineering/EntitySystems/DisassembleOnActivateSystem.cs @@ -33,7 +33,7 @@ namespace Content.Server.Engineering.EntitySystems BreakOnUserMove = true, BreakOnStun = true, }; - var result = await doAfterSystem.DoAfter(doAfterArgs); + var result = await doAfterSystem.WaitDoAfter(doAfterArgs); if (result != DoAfterStatus.Finished) return; diff --git a/Content.Server/Engineering/EntitySystems/SpawnAfterInteractSystem.cs b/Content.Server/Engineering/EntitySystems/SpawnAfterInteractSystem.cs index 1ccb603416..ef71b16e43 100644 --- a/Content.Server/Engineering/EntitySystems/SpawnAfterInteractSystem.cs +++ b/Content.Server/Engineering/EntitySystems/SpawnAfterInteractSystem.cs @@ -50,7 +50,7 @@ namespace Content.Server.Engineering.EntitySystems BreakOnStun = true, PostCheck = IsTileClear, }; - var result = await doAfterSystem.DoAfter(doAfterArgs); + var result = await doAfterSystem.WaitDoAfter(doAfterArgs); if (result != DoAfterStatus.Finished) return; diff --git a/Content.Server/Fluids/Components/BucketComponent.cs b/Content.Server/Fluids/Components/BucketComponent.cs index a205e507e3..2774549cb8 100644 --- a/Content.Server/Fluids/Components/BucketComponent.cs +++ b/Content.Server/Fluids/Components/BucketComponent.cs @@ -82,7 +82,7 @@ namespace Content.Server.Fluids.Components BreakOnStun = true, BreakOnDamage = true, }; - var result = await EntitySystem.Get().DoAfter(doAfterArgs); + var result = await EntitySystem.Get().WaitDoAfter(doAfterArgs); _currentlyUsing.Remove(eventArgs.Using.Uid); diff --git a/Content.Server/Fluids/Components/MopComponent.cs b/Content.Server/Fluids/Components/MopComponent.cs index 864358d321..fa0c7ec11e 100644 --- a/Content.Server/Fluids/Components/MopComponent.cs +++ b/Content.Server/Fluids/Components/MopComponent.cs @@ -123,7 +123,7 @@ namespace Content.Server.Fluids.Components BreakOnStun = true, BreakOnDamage = true, }; - var result = await EntitySystem.Get().DoAfter(doAfterArgs); + var result = await EntitySystem.Get().WaitDoAfter(doAfterArgs); Mopping = false; diff --git a/Content.Server/Kitchen/Components/KitchenSpikeComponent.cs b/Content.Server/Kitchen/Components/KitchenSpikeComponent.cs index 4403a12c4f..8e5c27d0fd 100644 --- a/Content.Server/Kitchen/Components/KitchenSpikeComponent.cs +++ b/Content.Server/Kitchen/Components/KitchenSpikeComponent.cs @@ -133,7 +133,7 @@ namespace Content.Server.Kitchen.Components _beingButchered.Add(victimUid); - var result = await doAfterSystem.DoAfter(doAfterArgs); + var result = await doAfterSystem.WaitDoAfter(doAfterArgs); _beingButchered.Remove(victimUid); diff --git a/Content.Server/RCD/Components/RCDComponent.cs b/Content.Server/RCD/Components/RCDComponent.cs index aa344649b8..1f6f229023 100644 --- a/Content.Server/RCD/Components/RCDComponent.cs +++ b/Content.Server/RCD/Components/RCDComponent.cs @@ -119,7 +119,7 @@ namespace Content.Server.RCD.Components ExtraCheck = () => IsRCDStillValid(eventArgs, mapGrid, tile, snapPos, startingMode) //All of the sanity checks are here }; - var result = await _doAfterSystem.DoAfter(doAfterEventArgs); + var result = await _doAfterSystem.WaitDoAfter(doAfterEventArgs); if (result == DoAfterStatus.Cancelled) { return true; diff --git a/Content.Server/Storage/Components/ServerStorageComponent.cs b/Content.Server/Storage/Components/ServerStorageComponent.cs index 459f0d14e7..41def850b7 100644 --- a/Content.Server/Storage/Components/ServerStorageComponent.cs +++ b/Content.Server/Storage/Components/ServerStorageComponent.cs @@ -522,7 +522,7 @@ namespace Content.Server.Storage.Components BreakOnUserMove = true, NeedHand = true, }; - var result = await doAfterSystem.DoAfter(doAfterArgs); + var result = await doAfterSystem.WaitDoAfter(doAfterArgs); if (result != DoAfterStatus.Finished) return true; } diff --git a/Content.Server/Strip/StrippableComponent.cs b/Content.Server/Strip/StrippableComponent.cs index 05a4927e41..240d0cd0fd 100644 --- a/Content.Server/Strip/StrippableComponent.cs +++ b/Content.Server/Strip/StrippableComponent.cs @@ -197,7 +197,7 @@ namespace Content.Server.Strip NeedHand = true, }; - var result = await doAfterSystem.DoAfter(doAfterArgs); + var result = await doAfterSystem.WaitDoAfter(doAfterArgs); if (result != DoAfterStatus.Finished) return; userHands.Drop(item!.Owner, false); @@ -264,7 +264,7 @@ namespace Content.Server.Strip NeedHand = true, }; - var result = await doAfterSystem.DoAfter(doAfterArgs); + var result = await doAfterSystem.WaitDoAfter(doAfterArgs); if (result != DoAfterStatus.Finished) return; userHands.Drop(hand); @@ -314,7 +314,7 @@ namespace Content.Server.Strip BreakOnUserMove = true, }; - var result = await doAfterSystem.DoAfter(doAfterArgs); + var result = await doAfterSystem.WaitDoAfter(doAfterArgs); if (result != DoAfterStatus.Finished) return; var item = inventory.GetSlotItem(slot); @@ -370,7 +370,7 @@ namespace Content.Server.Strip BreakOnUserMove = true, }; - var result = await doAfterSystem.DoAfter(doAfterArgs); + var result = await doAfterSystem.WaitDoAfter(doAfterArgs); if (result != DoAfterStatus.Finished) return; var item = hands.GetItem(hand); diff --git a/Content.Server/Tools/Components/ToolComponent.cs b/Content.Server/Tools/Components/ToolComponent.cs index 63e1345328..8eff4dd539 100644 --- a/Content.Server/Tools/Components/ToolComponent.cs +++ b/Content.Server/Tools/Components/ToolComponent.cs @@ -85,7 +85,7 @@ namespace Content.Server.Tools.Components NeedHand = true, }; - var result = await doAfterSystem.DoAfter(doAfterArgs); + var result = await doAfterSystem.WaitDoAfter(doAfterArgs); if (result == DoAfterStatus.Cancelled) return false; From d1b0d5aa5838d84e14932f7991b50f5ca9104a65 Mon Sep 17 00:00:00 2001 From: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com> Date: Sun, 4 Jul 2021 22:31:46 +1000 Subject: [PATCH 23/30] Fix trash being spawned on substation (#4254) * Fix trash being spawned on substation Waste of an awake body * Also get this garbage --- Resources/Maps/saltern.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Resources/Maps/saltern.yml b/Resources/Maps/saltern.yml index 4037e56719..58f9423ef6 100644 --- a/Resources/Maps/saltern.yml +++ b/Resources/Maps/saltern.yml @@ -4366,7 +4366,7 @@ entities: type: RandomSpawner components: - rot: 4.371139006309477E-08 rad - pos: -0.5,-22.5 + pos: -0.5,-23.5 parent: 853 type: Transform - uid: 463 @@ -4422,7 +4422,7 @@ entities: type: RandomSpawner components: - rot: 4.371139006309477E-08 rad - pos: 0.5,-6.5 + pos: 0.5,-7.5 parent: 853 type: Transform - uid: 471 From ea60a81fdf6ccbeea17d18d33b44282e7e5082e3 Mon Sep 17 00:00:00 2001 From: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com> Date: Sun, 4 Jul 2021 22:35:09 +1000 Subject: [PATCH 24/30] "fix" potted plants bb (#4255) I believe it'd be one of the ones without worldrotation when we start doing rotated grids so I made it square for now. Really I was just trying to stop the one at arrivals being jammed between the 2 walls constantly. --- .../Entities/Constructible/Furniture/potted_plants.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Resources/Prototypes/Entities/Constructible/Furniture/potted_plants.yml b/Resources/Prototypes/Entities/Constructible/Furniture/potted_plants.yml index 2f04ab3d3c..e6d8dc2e04 100644 --- a/Resources/Prototypes/Entities/Constructible/Furniture/potted_plants.yml +++ b/Resources/Prototypes/Entities/Constructible/Furniture/potted_plants.yml @@ -9,7 +9,7 @@ fixtures: - shape: !type:PhysShapeAabb - bounds: "-0.5, -0.2, 0.5, 0.2" + bounds: "-0.2, -0.2, 0.2, 0.2" mass: 25 mask: - MobImpassable From 103bc19508c3c49ddaa261dc958c3991af3c6d5a Mon Sep 17 00:00:00 2001 From: Pieter-Jan Briers Date: Sun, 4 Jul 2021 18:11:52 +0200 Subject: [PATCH 25/30] Pow3r: stage 1 (#4208) Co-authored-by: 20kdc --- .../Content.Client.csproj.DotSettings | 2 + Content.Client/Doors/AirlockVisualizer.cs | 1 + Content.Client/Entry/IgnoredComponents.cs | 10 +- .../Visualizers/EmergencyLightVisualizer.cs | 23 + .../NodeContainer/NodeGroupSystem.cs | 99 + .../NodeContainer/NodeVisCommand.cs | 56 + .../NodeContainer/NodeVisualizationOverlay.cs | 232 + .../{ => Power}/APC/ApcBoundUserInterface.cs | 2 +- .../{ => Power}/APC/ApcVisualizer.cs | 2 +- .../{ => Power}/SMES/SmesVisualizer.cs | 2 +- .../Power/Visualizers/CableVisualizer.cs | 26 + .../PowerDeviceVisualizer.cs | 0 Content.Client/Stack/StackVisualizer.cs | 2 +- .../{ => Visualizers}/WiresVisualizer.cs | 2 +- .../Tests/Disposal/DisposalUnitTest.cs | 4 +- Content.IntegrationTests/Tests/EntityTest.cs | 2 +- .../Tests/GravityGridTest.cs | 6 +- .../Tests/Power/PowerTest.cs | 996 +++++ Content.IntegrationTests/Tests/PowerTest.cs | 292 -- .../Tests/SaveLoadSaveTest.cs | 19 +- Content.Server/AME/AMENodeGroup.cs | 21 +- .../AME/Components/AMEControllerComponent.cs | 6 +- Content.Server/APC/ApcNetNodeGroup.cs | 223 - Content.Server/APC/ApcNetSystem.cs | 52 - .../APC/Components/BaseApcNetComponent.cs | 10 - .../Components/IdCardConsoleComponent.cs | 2 +- .../Components/BlockGameArcadeComponent.cs | 2 +- .../Components/SpaceVillainArcadeComponent.cs | 4 +- .../BaseComputerUserInterfaceComponent.cs | 2 +- .../Atmos/Components/GasTankComponent.cs | 2 +- .../Atmos/EntitySystems/AtmosphereSystem.cs | 3 + .../Binary/Components/GasValveComponent.cs | 2 +- .../EntitySystems/GasPassiveGateSystem.cs | 2 +- .../EntitySystems/GasPressurePumpSystem.cs | 2 +- .../EntitySystems/GasVolumePumpSystem.cs | 2 +- .../AtmosUnsafeUnanchorSystem.cs | 2 +- .../Trinary/EntitySystems/GasFilterSystem.cs | 2 +- .../Trinary/EntitySystems/GasMixerSystem.cs | 2 +- .../Unary/EntitySystems/GasCanisterSystem.cs | 6 +- .../EntitySystems/GasOutletInjectorSystem.cs | 2 +- .../EntitySystems/GasPassiveVentSystem.cs | 2 +- .../Unary/EntitySystems/GasPortableSystem.cs | 2 +- .../EntitySystems/GasThermoMachineSystem.cs | 2 +- .../Unary/EntitySystems/GasVentPumpSystem.cs | 2 +- .../EntitySystems/GasVentScrubberSystem.cs | 2 +- Content.Server/BarSign/BarSignComponent.cs | 2 +- .../EntitySystems/BatteryDischargerSystem.cs | 19 - .../EntitySystems/BatteryStorageSystem.cs | 19 - .../Battery/EntitySystems/BatterySystem.cs | 19 - .../Components/SeedExtractorComponent.cs | 2 +- .../Cargo/Components/CargoConsoleComponent.cs | 4 +- .../Cargo/Components/CargoTelepadComponent.cs | 10 +- .../Components/ChemMasterComponent.cs | 2 +- .../Components/ReagentDispenserComponent.cs | 2 +- Content.Server/Cloning/CloningSystem.cs | 2 +- .../Cloning/Components/CloningPodComponent.cs | 2 +- .../CommunicationsConsoleComponent.cs | 2 +- Content.Server/Computer/ComputerComponent.cs | 2 +- .../Construction/Conditions/AllWiresCut.cs | 2 +- .../Construction/Conditions/WirePanel.cs | 2 +- Content.Server/Conveyor/ConveyorComponent.cs | 4 +- .../Connections/WiredNetworkConnection.cs | 12 +- .../Mailing/DisposalMailingUnitComponent.cs | 4 +- .../Unit/Components/DisposalUnitComponent.cs | 4 +- .../Doors/Components/AirlockComponent.cs | 4 +- .../Gravity/GravityGeneratorComponent.cs | 2 +- Content.Server/IoC/ServerContentIoC.cs | 1 - .../Kitchen/Components/MicrowaveComponent.cs | 2 +- .../Components/ReagentGrinderComponent.cs | 2 +- .../Lathe/Components/LatheComponent.cs | 2 +- .../Components/EmergencyLightComponent.cs | 26 +- .../Light/Components/PoweredLightComponent.cs | 2 +- .../Components/MedicalScannerComponent.cs | 2 +- .../EntitySystems/NodeContainerSystem.cs | 41 +- .../EntitySystems/NodeGroupSystem.cs | 367 +- .../NodeContainer/NodeContainerComponent.cs | 50 +- .../NodeGroups/BaseNetConnectorNodeGroup.cs | 37 - .../NodeContainer/NodeGroups/BaseNodeGroup.cs | 91 + .../NodeContainer/NodeGroups/INodeGroup.cs | 132 - .../NodeGroups/NodeGroupAttribute.cs | 2 + .../NodeGroups/NodeGroupFactory.cs | 17 +- .../NodeGroups/{IPipeNet.cs => PipeNet.cs} | 70 +- .../NodeGroups/PowerNetNodeGroup.cs | 164 - .../NodeContainer/Nodes/AdjacentNode.cs | 25 +- Content.Server/NodeContainer/Nodes/Node.cs | 142 +- .../NodeContainer/Nodes/NodeHelpers.cs | 89 + .../NodeContainer/Nodes/PipeNode.cs | 40 +- .../ParticleAcceleratorControlBoxComponent.cs | 23 +- .../ParticleAcceleratorPowerBoxComponent.cs | 6 - .../ParticleAcceleratorPartSystem.cs | 2 +- .../ParticleAcceleratorPowerBoxSystem.cs | 27 + .../Power/Commands/PowerStatCommand.cs | 26 + .../{APC => Power}/Components/ApcComponent.cs | 49 +- .../Components/ApcPowerProviderComponent.cs | 121 + ...ponent.cs => ApcPowerReceiverComponent.cs} | 132 +- .../Power/Components/BaseApcNetComponent.cs | 9 + .../Power/Components/BaseCharger.cs | 9 +- .../Components/BaseNetConnectorComponent.cs | 33 +- .../Power/Components/BasePowerNetComponent.cs | 2 +- .../Components/BatteryChargerComponent.cs | 24 + .../Components/BatteryComponent.cs | 46 +- .../Components/BatteryDischargerComponent.cs | 70 +- .../Components/BatteryStorageComponent.cs | 79 - .../Components/CableComponent.cs} | 29 +- .../Components/CablePlacerComponent.cs} | 18 +- .../Power/Components/CableVisComponent.cs | 16 + .../Components/ExaminableBatteryComponent.cs | 2 +- .../Power/Components/IPowerNetManager.cs | 39 - .../Components/PowerConsumerComponent.cs | 66 +- .../PowerNetworkBatteryComponent.cs | 119 + .../Components/PowerProviderComponent.cs | 174 - .../Components/PowerSupplierComponent.cs | 49 +- .../DrainAllBatteriesCommand.cs | 8 +- .../Power/EntitySystems/BatterySystem.cs | 42 + .../Power/EntitySystems/CableVisSystem.cs | 85 + .../EntitySystems}/PowerApcSystem.cs | 13 +- .../Power/EntitySystems/PowerNetSystem.cs | 337 +- .../EntitySystems/PowerReceiverSystem.cs | 4 +- Content.Server/Power/NodeGroups/ApcNet.cs | 112 + .../NodeGroups/BaseNetConnectorNodeGroup.cs | 34 + Content.Server/Power/NodeGroups/PowerNet.cs | 132 + Content.Server/Power/Nodes/CableDeviceNode.cs | 29 + Content.Server/Power/Nodes/CableNode.cs | 79 + .../Power/Nodes/CableTerminalNode.cs | 34 + .../Power/Nodes/CableTerminalPortNode.cs | 27 + .../Power/Pow3r/BatteryRampPegSolver.cs | 305 ++ Content.Server/Power/Pow3r/GraphWalkSolver.cs | 181 + Content.Server/Power/Pow3r/IPowerSolver.cs | 7 + Content.Server/Power/Pow3r/NoOpSolver.cs | 10 + .../Power/Pow3r/PowerSolverShared.cs | 90 + Content.Server/Power/Pow3r/PowerState.cs | 207 + .../{ => Power}/SMES/PowerSmesSystem.cs | 2 +- .../{ => Power}/SMES/SmesComponent.cs | 22 +- .../Components/PowerCellChargerComponent.cs | 1 - .../Components/PowerCellComponent.cs | 2 +- .../Recycling/Components/RecyclerComponent.cs | 4 +- .../Components/ResearchConsoleComponent.cs | 2 +- .../ResearchPointSourceComponent.cs | 4 +- .../Components/ResearchServerComponent.cs | 4 +- .../Components/EmitterComponent.cs | 42 +- .../Components/RadiationCollectorComponent.cs | 9 - .../EntitySystems/EmitterSystem.cs | 38 + .../Solar/Components/SolarPanelComponent.cs | 2 +- .../StationEvents/Events/PowerGridCheck.cs | 4 +- .../VendingMachineComponent.cs | 6 +- .../ServerBatteryBarrelComponent.cs | 2 +- .../Weapon/WeaponCapacitorChargerComponent.cs | 1 - .../WireHackingSystem.cs | 2 +- .../WiresComponent.cs | 3 +- .../SharedEmergencyLightComponent.cs | 11 + Content.Shared/NodeContainer/NodeVis.cs | 48 + .../Wires/SharedWireVisComponent.cs | 22 + Pow3r/LinqHelper.cs | 16 + Pow3r/Pow3r.csproj | 21 + Pow3r/Program.OpenGL.cs | 127 + Pow3r/Program.SaveLoad.cs | 71 + Pow3r/Program.Simulation.cs | 137 + Pow3r/Program.UI.cs | 459 ++ Pow3r/Program.Veldrid.cs | 409 ++ Pow3r/Program.cs | 389 ++ Resources/Maps/Test/singularity.yml | 302 +- Resources/Maps/saltern.yml | 3786 ++++++++--------- .../Catalog/Fills/Crates/engineering.yml | 12 +- .../Prototypes/Catalog/Fills/Items/belt.yml | 2 +- .../Catalog/Fills/Items/toolboxes.yml | 6 +- .../Catalog/Fills/Lockers/engineer.yml | 12 +- .../Catalog/Research/technologies.yml | 10 +- .../VendingMachines/Inventories/youtool.yml | 2 +- .../Constructible/Doors/airlock_base.yml | 2 +- .../Power/Engines/AME/controller.yml | 6 +- .../Power/Engines/PA/control_box.yml | 2 +- .../Power/Engines/PA/power_box.yml | 2 +- .../Power/Engines/Singularity/collector.yml | 8 +- .../Power/Engines/Singularity/emitter.yml | 2 +- .../Power/Generation/generator.yml | 7 +- .../Constructible/Power/Generation/solar.yml | 7 +- .../Power/Specific/debug_power.yml | 11 +- .../Power/Specific/saltern_power.yml | 10 - .../Entities/Constructible/Power/arcade.yml | 2 +- .../Constructible/Power/cable_terminal.yml | 42 + .../Power/{wires.yml => cables.yml} | 131 +- .../Entities/Constructible/Power/chargers.yml | 6 +- .../Constructible/Power/computers.yml | 4 +- .../Entities/Constructible/Power/lathe.yml | 6 +- .../Entities/Constructible/Power/parts.yml | 81 +- .../Entities/Constructible/Power/smes.yml | 46 + .../Constructible/Power/vending_machines.yml | 2 +- .../Specific/Conveyor/conveyor.yml | 2 +- .../Specific/Dispensers/chem_dispenser.yml | 2 +- .../Dispensers/reagent_dispenser_base.yml | 2 +- .../Specific/Kitchen/microwave.yml | 2 +- .../Specific/Kitchen/reagent_grinder.yml | 2 +- .../Specific/Research/research.yml | 4 +- .../Constructible/Specific/cargo_telepad.yml | 2 +- .../Constructible/Specific/chem_master.yml | 2 +- .../Specific/gravity_generator.yml | 2 +- .../Constructible/Specific/recycler.yml | 2 +- .../Entities/Constructible/Walls/bar_sign.yml | 4 +- .../Constructible/Walls/emergency_light.yml | 6 +- .../Entities/Constructible/Walls/lighting.yml | 4 +- .../Entities/Constructible/base_machine.yml | 4 +- .../Entities/Objects/Tools/cable_coils.yml | 44 +- .../Recipes/Construction/Graphs/airlock.yml | 2 +- .../Recipes/Construction/Graphs/computer.yml | 2 +- .../Recipes/Construction/Graphs/firelock.yml | 2 +- .../Recipes/Construction/Graphs/machine.yml | 2 +- .../Graphs/particle_accelerator.yml | 14 +- Resources/Prototypes/Recipes/Lathes/tools.yml | 10 +- Resources/Prototypes/Stacks/power_stacks.yml | 19 +- .../Power/wire_terminal.rsi/meta.json | 32 + .../Power/wire_terminal.rsi/term.png | Bin 0 -> 392 bytes SpaceStation14.sln | 6 + 212 files changed, 8584 insertions(+), 4426 deletions(-) create mode 100644 Content.Client/Content.Client.csproj.DotSettings create mode 100644 Content.Client/Light/Visualizers/EmergencyLightVisualizer.cs create mode 100644 Content.Client/NodeContainer/NodeGroupSystem.cs create mode 100644 Content.Client/NodeContainer/NodeVisCommand.cs create mode 100644 Content.Client/NodeContainer/NodeVisualizationOverlay.cs rename Content.Client/{ => Power}/APC/ApcBoundUserInterface.cs (99%) rename Content.Client/{ => Power}/APC/ApcVisualizer.cs (98%) rename Content.Client/{ => Power}/SMES/SmesVisualizer.cs (98%) create mode 100644 Content.Client/Power/Visualizers/CableVisualizer.cs rename Content.Client/Power/{ => Visualizers}/PowerDeviceVisualizer.cs (100%) rename Content.Client/Wires/{ => Visualizers}/WiresVisualizer.cs (95%) create mode 100644 Content.IntegrationTests/Tests/Power/PowerTest.cs delete mode 100644 Content.IntegrationTests/Tests/PowerTest.cs delete mode 100644 Content.Server/APC/ApcNetNodeGroup.cs delete mode 100644 Content.Server/APC/ApcNetSystem.cs delete mode 100644 Content.Server/APC/Components/BaseApcNetComponent.cs delete mode 100644 Content.Server/Battery/EntitySystems/BatteryDischargerSystem.cs delete mode 100644 Content.Server/Battery/EntitySystems/BatteryStorageSystem.cs delete mode 100644 Content.Server/Battery/EntitySystems/BatterySystem.cs delete mode 100644 Content.Server/NodeContainer/NodeGroups/BaseNetConnectorNodeGroup.cs create mode 100644 Content.Server/NodeContainer/NodeGroups/BaseNodeGroup.cs delete mode 100644 Content.Server/NodeContainer/NodeGroups/INodeGroup.cs rename Content.Server/NodeContainer/NodeGroups/{IPipeNet.cs => PipeNet.cs} (51%) delete mode 100644 Content.Server/NodeContainer/NodeGroups/PowerNetNodeGroup.cs create mode 100644 Content.Server/NodeContainer/Nodes/NodeHelpers.cs rename Content.Server/ParticleAccelerator/{ => EntitySystems}/ParticleAcceleratorPartSystem.cs (94%) create mode 100644 Content.Server/ParticleAccelerator/EntitySystems/ParticleAcceleratorPowerBoxSystem.cs create mode 100644 Content.Server/Power/Commands/PowerStatCommand.cs rename Content.Server/{APC => Power}/Components/ApcComponent.cs (84%) create mode 100644 Content.Server/Power/Components/ApcPowerProviderComponent.cs rename Content.Server/Power/Components/{PowerReceiverComponent.cs => ApcPowerReceiverComponent.cs} (65%) create mode 100644 Content.Server/Power/Components/BaseApcNetComponent.cs create mode 100644 Content.Server/Power/Components/BatteryChargerComponent.cs rename Content.Server/{Battery => Power}/Components/BatteryComponent.cs (73%) delete mode 100644 Content.Server/Power/Components/BatteryStorageComponent.cs rename Content.Server/{Wires/Components/WireComponent.cs => Power/Components/CableComponent.cs} (61%) rename Content.Server/{Wires/Components/WirePlacerComponent.cs => Power/Components/CablePlacerComponent.cs} (73%) create mode 100644 Content.Server/Power/Components/CableVisComponent.cs rename Content.Server/{Battery => Power}/Components/ExaminableBatteryComponent.cs (96%) delete mode 100644 Content.Server/Power/Components/IPowerNetManager.cs create mode 100644 Content.Server/Power/Components/PowerNetworkBatteryComponent.cs delete mode 100644 Content.Server/Power/Components/PowerProviderComponent.cs rename Content.Server/{Battery => Power}/DrainAllBatteriesCommand.cs (78%) create mode 100644 Content.Server/Power/EntitySystems/BatterySystem.cs create mode 100644 Content.Server/Power/EntitySystems/CableVisSystem.cs rename Content.Server/{APC => Power/EntitySystems}/PowerApcSystem.cs (59%) create mode 100644 Content.Server/Power/NodeGroups/ApcNet.cs create mode 100644 Content.Server/Power/NodeGroups/BaseNetConnectorNodeGroup.cs create mode 100644 Content.Server/Power/NodeGroups/PowerNet.cs create mode 100644 Content.Server/Power/Nodes/CableDeviceNode.cs create mode 100644 Content.Server/Power/Nodes/CableNode.cs create mode 100644 Content.Server/Power/Nodes/CableTerminalNode.cs create mode 100644 Content.Server/Power/Nodes/CableTerminalPortNode.cs create mode 100644 Content.Server/Power/Pow3r/BatteryRampPegSolver.cs create mode 100644 Content.Server/Power/Pow3r/GraphWalkSolver.cs create mode 100644 Content.Server/Power/Pow3r/IPowerSolver.cs create mode 100644 Content.Server/Power/Pow3r/NoOpSolver.cs create mode 100644 Content.Server/Power/Pow3r/PowerSolverShared.cs create mode 100644 Content.Server/Power/Pow3r/PowerState.cs rename Content.Server/{ => Power}/SMES/PowerSmesSystem.cs (91%) rename Content.Server/{ => Power}/SMES/SmesComponent.cs (81%) create mode 100644 Content.Server/Singularity/EntitySystems/EmitterSystem.cs rename Content.Server/{Wires => WireHacking}/WireHackingSystem.cs (97%) rename Content.Server/{Wires/Components => WireHacking}/WiresComponent.cs (99%) create mode 100644 Content.Shared/Light/Component/SharedEmergencyLightComponent.cs create mode 100644 Content.Shared/NodeContainer/NodeVis.cs create mode 100644 Content.Shared/Wires/SharedWireVisComponent.cs create mode 100644 Pow3r/LinqHelper.cs create mode 100644 Pow3r/Pow3r.csproj create mode 100644 Pow3r/Program.OpenGL.cs create mode 100644 Pow3r/Program.SaveLoad.cs create mode 100644 Pow3r/Program.Simulation.cs create mode 100644 Pow3r/Program.UI.cs create mode 100644 Pow3r/Program.Veldrid.cs create mode 100644 Pow3r/Program.cs create mode 100644 Resources/Prototypes/Entities/Constructible/Power/cable_terminal.yml rename Resources/Prototypes/Entities/Constructible/Power/{wires.yml => cables.yml} (60%) create mode 100644 Resources/Prototypes/Entities/Constructible/Power/smes.yml create mode 100644 Resources/Textures/Constructible/Power/wire_terminal.rsi/meta.json create mode 100644 Resources/Textures/Constructible/Power/wire_terminal.rsi/term.png diff --git a/Content.Client/Content.Client.csproj.DotSettings b/Content.Client/Content.Client.csproj.DotSettings new file mode 100644 index 0000000000..a558236f55 --- /dev/null +++ b/Content.Client/Content.Client.csproj.DotSettings @@ -0,0 +1,2 @@ + + True \ No newline at end of file diff --git a/Content.Client/Doors/AirlockVisualizer.cs b/Content.Client/Doors/AirlockVisualizer.cs index 4f6832b7b6..8f6c0651b1 100644 --- a/Content.Client/Doors/AirlockVisualizer.cs +++ b/Content.Client/Doors/AirlockVisualizer.cs @@ -1,5 +1,6 @@ using System; using Content.Client.Wires; +using Content.Client.Wires.Visualizers; using Content.Shared.Audio; using Content.Shared.Doors; using JetBrains.Annotations; diff --git a/Content.Client/Entry/IgnoredComponents.cs b/Content.Client/Entry/IgnoredComponents.cs index 9b19afe561..b3a76fb612 100644 --- a/Content.Client/Entry/IgnoredComponents.cs +++ b/Content.Client/Entry/IgnoredComponents.cs @@ -55,7 +55,7 @@ namespace Content.Client.Entry "AccessReader", "IdCardConsole", "Airlock", - "WirePlacer", + "CablePlacer", "Drink", "Food", "FoodContainer", @@ -73,6 +73,7 @@ namespace Content.Client.Entry "StorageFill", "Mop", "Bucket", + "CableVis", "Puddle", "CanSpill", "SpeedLoader", @@ -105,12 +106,11 @@ namespace Content.Client.Entry "PowerSupplier", "PowerConsumer", "Battery", - "BatteryStorage", "BatteryDischarger", "Apc", "PowerProvider", - "PowerReceiver", - "Wire", + "ApcPowerReceiver", + "Cable", "StressTestMovement", "Toys", "SurgeryTool", @@ -273,6 +273,8 @@ namespace Content.Client.Entry "ExplosionLaunched", "BeingCloned", "Advertise", + "PowerNetworkBattery", + "BatteryCharger", }; } } diff --git a/Content.Client/Light/Visualizers/EmergencyLightVisualizer.cs b/Content.Client/Light/Visualizers/EmergencyLightVisualizer.cs new file mode 100644 index 0000000000..4c7ed5db08 --- /dev/null +++ b/Content.Client/Light/Visualizers/EmergencyLightVisualizer.cs @@ -0,0 +1,23 @@ +using Content.Shared.Light.Component; +using Robust.Client.GameObjects; +using Robust.Shared.Serialization.Manager.Attributes; + +namespace Content.Client.Light.Visualizers +{ + [DataDefinition] + public sealed class EmergencyLightVisualizer : AppearanceVisualizer + { + public override void OnChangeData(AppearanceComponent component) + { + base.OnChangeData(component); + + if (!component.Owner.TryGetComponent(out SpriteComponent? sprite)) + return; + + if (!component.TryGetData(EmergencyLightVisuals.On, out bool on)) + on = false; + + sprite.LayerSetState(0, on ? "emergency_light_on" : "emergency_light_off"); + } + } +} diff --git a/Content.Client/NodeContainer/NodeGroupSystem.cs b/Content.Client/NodeContainer/NodeGroupSystem.cs new file mode 100644 index 0000000000..4cb7d678c4 --- /dev/null +++ b/Content.Client/NodeContainer/NodeGroupSystem.cs @@ -0,0 +1,99 @@ +using System.Collections.Generic; +using System.Linq; +using Content.Shared.NodeContainer; +using JetBrains.Annotations; +using Robust.Client.Graphics; +using Robust.Client.Input; +using Robust.Client.ResourceManagement; +using Robust.Shared.GameObjects; +using Robust.Shared.IoC; +using Robust.Shared.Map; + +namespace Content.Client.NodeContainer +{ + [UsedImplicitly] + public sealed class NodeGroupSystem : EntitySystem + { + [Dependency] private readonly IOverlayManager _overlayManager = default!; + [Dependency] private readonly IEntityLookup _entityLookup = default!; + [Dependency] private readonly IMapManager _mapManager = default!; + [Dependency] private readonly IInputManager _inputManager = default!; + [Dependency] private readonly IEyeManager _eyeManager = default!; + [Dependency] private readonly IResourceCache _resourceCache = default!; + + public bool VisEnabled { get; private set; } + + public Dictionary Groups { get; } = new(); + public HashSet Filtered { get; } = new(); + + public Dictionary + Entities { get; private set; } = new(); + + public Dictionary<(int group, int node), NodeVis.NodeDatum> NodeLookup { get; private set; } = new(); + + public override void Initialize() + { + base.Initialize(); + + SubscribeNetworkEvent(DataMsgHandler); + } + + public override void Shutdown() + { + base.Shutdown(); + + _overlayManager.RemoveOverlay(); + } + + private void DataMsgHandler(NodeVis.MsgData ev) + { + if (!VisEnabled) + return; + + foreach (var deletion in ev.GroupDeletions) + { + Groups.Remove(deletion); + } + + foreach (var group in ev.Groups) + { + Groups.Add(group.NetId, group); + } + + Entities = Groups.Values + .SelectMany(g => g.Nodes, (data, nodeData) => (data, nodeData)) + .GroupBy(n => n.nodeData.Entity) + .ToDictionary(g => g.Key, g => g.ToArray()); + + NodeLookup = Groups.Values + .SelectMany(g => g.Nodes, (data, nodeData) => (data, nodeData)) + .ToDictionary(n => (n.data.NetId, n.nodeData.NetId), n => n.nodeData); + } + + public void SetVisEnabled(bool enabled) + { + VisEnabled = enabled; + + RaiseNetworkEvent(new NodeVis.MsgEnable(enabled)); + + if (enabled) + { + var overlay = new NodeVisualizationOverlay( + this, + _entityLookup, + _mapManager, + _inputManager, + _eyeManager, + _resourceCache, + EntityManager); + + _overlayManager.AddOverlay(overlay); + } + else + { + Groups.Clear(); + Entities.Clear(); + } + } + } +} diff --git a/Content.Client/NodeContainer/NodeVisCommand.cs b/Content.Client/NodeContainer/NodeVisCommand.cs new file mode 100644 index 0000000000..c6a95fce5b --- /dev/null +++ b/Content.Client/NodeContainer/NodeVisCommand.cs @@ -0,0 +1,56 @@ +using Content.Client.Administration.Managers; +using Content.Shared.Administration; +using Robust.Shared.Console; +using Robust.Shared.GameObjects; +using Robust.Shared.IoC; + +namespace Content.Client.NodeContainer +{ + public sealed class NodeVisCommand : IConsoleCommand + { + public string Command => "nodevis"; + public string Description => "Toggles node group visualization"; + public string Help => ""; + + public void Execute(IConsoleShell shell, string argStr, string[] args) + { + var adminMan = IoCManager.Resolve(); + if (!adminMan.HasFlag(AdminFlags.Debug)) + { + shell.WriteError("You need +DEBUG for this command"); + return; + } + + var sys = EntitySystem.Get(); + sys.SetVisEnabled(!sys.VisEnabled); + } + } + + public sealed class NodeVisFilterCommand : IConsoleCommand + { + public string Command => "nodevisfilter"; + public string Description => "Toggles showing a specific group on nodevis"; + public string Help => "Usage: nodevis [filter]\nOmit filter to list currently masked-off"; + + public void Execute(IConsoleShell shell, string argStr, string[] args) + { + var sys = EntitySystem.Get(); + + if (args.Length == 0) + { + foreach (var filtered in sys.Filtered) + { + shell.WriteLine(filtered); + } + } + else + { + var filter = args[0]; + if (!sys.Filtered.Add(filter)) + { + sys.Filtered.Remove(filter); + } + } + } + } +} diff --git a/Content.Client/NodeContainer/NodeVisualizationOverlay.cs b/Content.Client/NodeContainer/NodeVisualizationOverlay.cs new file mode 100644 index 0000000000..989780f3c8 --- /dev/null +++ b/Content.Client/NodeContainer/NodeVisualizationOverlay.cs @@ -0,0 +1,232 @@ +using System; +using System.Collections.Generic; +using System.Text; +using Content.Client.Resources; +using Robust.Client.Graphics; +using Robust.Client.Input; +using Robust.Client.ResourceManagement; +using Robust.Client.UserInterface.CustomControls; +using Robust.Shared.Enums; +using Robust.Shared.GameObjects; +using Robust.Shared.Map; +using Robust.Shared.Maths; +using Robust.Shared.Timing; +using Robust.Shared.Utility; +using static Content.Shared.NodeContainer.NodeVis; + +namespace Content.Client.NodeContainer +{ + public sealed class NodeVisualizationOverlay : Overlay + { + private readonly NodeGroupSystem _system; + private readonly IEntityLookup _lookup; + private readonly IMapManager _mapManager; + private readonly IInputManager _inputManager; + private readonly IEyeManager _eyeManager; + private readonly IEntityManager _entityManager; + + private readonly Dictionary<(int, int), NodeRenderData> _nodeIndex = new(); + private readonly Dictionary>> _gridIndex = new (); + + private readonly Font _font; + + private (int group, int node)? _hovered; + private float _time; + + public override OverlaySpace Space => OverlaySpace.ScreenSpace | OverlaySpace.WorldSpace; + + public NodeVisualizationOverlay( + NodeGroupSystem system, + IEntityLookup lookup, + IMapManager mapManager, + IInputManager inputManager, + IEyeManager eyeManager, + IResourceCache cache, + IEntityManager entityManager) + { + _system = system; + _lookup = lookup; + _mapManager = mapManager; + _inputManager = inputManager; + _eyeManager = eyeManager; + _entityManager = entityManager; + + _font = cache.GetFont("/Fonts/NotoSans/NotoSans-Regular.ttf", 12); + } + + protected override void Draw(in OverlayDrawArgs args) + { + if ((args.Space & OverlaySpace.WorldSpace) != 0) + { + DrawWorld(args); + } + else if ((args.Space & OverlaySpace.ScreenSpace) != 0) + { + DrawScreen(args); + } + } + + private void DrawScreen(in OverlayDrawArgs args) + { + if (_hovered == null) + return; + + var (groupId, nodeId) = _hovered.Value; + + var group = _system.Groups[groupId]; + var node = _system.NodeLookup[(groupId, nodeId)]; + + var mousePos = _inputManager.MouseScreenPosition.Position; + + var entity = _entityManager.GetEntity(node.Entity); + + var gridId = entity.Transform.GridID; + var grid = _mapManager.GetGrid(gridId); + var gridTile = grid.TileIndicesFor(entity.Transform.Coordinates); + + var sb = new StringBuilder(); + sb.Append($"entity: {entity}\n"); + sb.Append($"group id: {group.GroupId}\n"); + sb.Append($"node: {node.Name}\n"); + sb.Append($"type: {node.Type}\n"); + sb.Append($"grid pos: {gridTile}\n"); + + args.ScreenHandle.DrawString(_font, mousePos + (20, -20), sb.ToString()); + } + + private void DrawWorld(in OverlayDrawArgs overlayDrawArgs) + { + const float nodeSize = 8f / 32; + const float nodeOffset = 6f / 32; + + var handle = overlayDrawArgs.WorldHandle; + + var map = overlayDrawArgs.Viewport.Eye?.Position.MapId ?? default; + if (map == MapId.Nullspace) + return; + + var mouseScreenPos = _inputManager.MouseScreenPosition; + var mouseWorldPos = _eyeManager.ScreenToMap(mouseScreenPos).Position; + + _hovered = default; + + var cursorBox = Box2.CenteredAround(mouseWorldPos, (nodeSize, nodeSize)); + + // Group visible nodes by grid tiles. + var worldBounds = overlayDrawArgs.WorldBounds; + _lookup.FastEntitiesIntersecting(map, ref worldBounds, entity => + { + if (!_system.Entities.TryGetValue(entity.Uid, out var nodeData)) + return; + + var gridId = entity.Transform.GridID; + var grid = _mapManager.GetGrid(gridId); + var gridDict = _gridIndex.GetOrNew(gridId); + var coords = entity.Transform.Coordinates; + + // TODO: This probably shouldn't be capable of returning NaN... + if (float.IsNaN(coords.Position.X) || float.IsNaN(coords.Position.Y)) + return; + + var tile = gridDict.GetOrNew(grid.TileIndicesFor(coords)); + + foreach (var (group, nodeDatum) in nodeData) + { + if (!_system.Filtered.Contains(group.GroupId)) + { + tile.Add((group, nodeDatum)); + } + } + }); + + foreach (var (gridId, gridDict) in _gridIndex) + { + var grid = _mapManager.GetGrid(gridId); + foreach (var (pos, list) in gridDict) + { + var centerPos = grid.GridTileToWorld(pos).Position; + list.Sort(NodeDisplayComparer.Instance); + + var offset = -(list.Count - 1) * nodeOffset / 2; + + foreach (var (group, node) in list) + { + var nodePos = centerPos + (offset, offset); + if (cursorBox.Contains(nodePos)) + _hovered = (group.NetId, node.NetId); + + _nodeIndex[(group.NetId, node.NetId)] = new NodeRenderData(group, node, nodePos); + offset += nodeOffset; + } + } + } + + foreach (var nodeRenderData in _nodeIndex.Values) + { + var pos = nodeRenderData.WorldPos; + var bounds = Box2.CenteredAround(pos, (nodeSize, nodeSize)); + + var groupData = nodeRenderData.GroupData; + var color = groupData.Color; + + if (!_hovered.HasValue) + color.A = 0.5f; + else if (_hovered.Value.group != groupData.NetId) + color.A = 0.2f; + else + color.A = 0.75f + MathF.Sin(_time * 4) * 0.25f; + + handle.DrawRect(bounds, color); + + foreach (var reachable in nodeRenderData.NodeDatum.Reachable) + { + if (_nodeIndex.TryGetValue((groupData.NetId, reachable), out var reachDat)) + { + handle.DrawLine(pos, reachDat.WorldPos, color); + } + } + } + + _nodeIndex.Clear(); + _gridIndex.Clear(); + } + + protected override void FrameUpdate(FrameEventArgs args) + { + base.FrameUpdate(args); + + _time += args.DeltaSeconds; + } + + private sealed class NodeDisplayComparer : IComparer<(GroupData, NodeDatum)> + { + public static readonly NodeDisplayComparer Instance = new(); + + public int Compare((GroupData, NodeDatum) x, (GroupData, NodeDatum) y) + { + var (groupX, nodeX) = x; + var (groupY, nodeY) = y; + + var cmp = groupX.NetId.CompareTo(groupY.NetId); + if (cmp != 0) + return cmp; + + return nodeX.NetId.CompareTo(nodeY.NetId); + } + } + + private sealed class NodeRenderData + { + public GroupData GroupData; + public NodeDatum NodeDatum; + public Vector2 WorldPos; + + public NodeRenderData(GroupData groupData, NodeDatum nodeDatum, Vector2 worldPos) + { + GroupData = groupData; + NodeDatum = nodeDatum; + WorldPos = worldPos; + } + } + } +} diff --git a/Content.Client/APC/ApcBoundUserInterface.cs b/Content.Client/Power/APC/ApcBoundUserInterface.cs similarity index 99% rename from Content.Client/APC/ApcBoundUserInterface.cs rename to Content.Client/Power/APC/ApcBoundUserInterface.cs index 567bb842b8..0df4379d78 100644 --- a/Content.Client/APC/ApcBoundUserInterface.cs +++ b/Content.Client/Power/APC/ApcBoundUserInterface.cs @@ -9,7 +9,7 @@ using Robust.Client.UserInterface.CustomControls; using Robust.Shared.GameObjects; using Robust.Shared.Maths; -namespace Content.Client.APC +namespace Content.Client.Power.APC { [UsedImplicitly] public class ApcBoundUserInterface : BoundUserInterface diff --git a/Content.Client/APC/ApcVisualizer.cs b/Content.Client/Power/APC/ApcVisualizer.cs similarity index 98% rename from Content.Client/APC/ApcVisualizer.cs rename to Content.Client/Power/APC/ApcVisualizer.cs index a112f55b42..85ed0e5d25 100644 --- a/Content.Client/APC/ApcVisualizer.cs +++ b/Content.Client/Power/APC/ApcVisualizer.cs @@ -3,7 +3,7 @@ using JetBrains.Annotations; using Robust.Client.GameObjects; using Robust.Shared.GameObjects; -namespace Content.Client.APC +namespace Content.Client.Power.APC { public class ApcVisualizer : AppearanceVisualizer { diff --git a/Content.Client/SMES/SmesVisualizer.cs b/Content.Client/Power/SMES/SmesVisualizer.cs similarity index 98% rename from Content.Client/SMES/SmesVisualizer.cs rename to Content.Client/Power/SMES/SmesVisualizer.cs index 0937cfb3ad..11fcbd41d5 100644 --- a/Content.Client/SMES/SmesVisualizer.cs +++ b/Content.Client/Power/SMES/SmesVisualizer.cs @@ -4,7 +4,7 @@ using JetBrains.Annotations; using Robust.Client.GameObjects; using Robust.Shared.GameObjects; -namespace Content.Client.SMES +namespace Content.Client.Power.SMES { [UsedImplicitly] public class SmesVisualizer : AppearanceVisualizer diff --git a/Content.Client/Power/Visualizers/CableVisualizer.cs b/Content.Client/Power/Visualizers/CableVisualizer.cs new file mode 100644 index 0000000000..b5c09c7ebc --- /dev/null +++ b/Content.Client/Power/Visualizers/CableVisualizer.cs @@ -0,0 +1,26 @@ +using Content.Shared.Wires; +using Robust.Client.GameObjects; +using Robust.Shared.Serialization.Manager.Attributes; + +namespace Content.Client.Power +{ + [DataDefinition] + public sealed class CableVisualizer : AppearanceVisualizer + { + [DataField("base")] + public string? StateBase; + + public override void OnChangeData(AppearanceComponent component) + { + base.OnChangeData(component); + + if (!component.Owner.TryGetComponent(out SpriteComponent? sprite)) + return; + + if (!component.TryGetData(WireVisVisuals.ConnectedMask, out WireVisDirFlags mask)) + mask = WireVisDirFlags.None; + + sprite.LayerSetState(0, $"{StateBase}{(int) mask}"); + } + } +} diff --git a/Content.Client/Power/PowerDeviceVisualizer.cs b/Content.Client/Power/Visualizers/PowerDeviceVisualizer.cs similarity index 100% rename from Content.Client/Power/PowerDeviceVisualizer.cs rename to Content.Client/Power/Visualizers/PowerDeviceVisualizer.cs diff --git a/Content.Client/Stack/StackVisualizer.cs b/Content.Client/Stack/StackVisualizer.cs index 3b0197ef93..7324bd1b8a 100644 --- a/Content.Client/Stack/StackVisualizer.cs +++ b/Content.Client/Stack/StackVisualizer.cs @@ -66,7 +66,7 @@ namespace Content.Client.Stack /// /// /// - /// false: they are opaque and mutually exclusive (e.g. sprites in a wire coil). Default value + /// false: they are opaque and mutually exclusive (e.g. sprites in a cable coil). Default value /// /// /// true: they are transparent and thus layered one over another in ascending order first diff --git a/Content.Client/Wires/WiresVisualizer.cs b/Content.Client/Wires/Visualizers/WiresVisualizer.cs similarity index 95% rename from Content.Client/Wires/WiresVisualizer.cs rename to Content.Client/Wires/Visualizers/WiresVisualizer.cs index e20fd1cfa4..2ad300e436 100644 --- a/Content.Client/Wires/WiresVisualizer.cs +++ b/Content.Client/Wires/Visualizers/WiresVisualizer.cs @@ -1,7 +1,7 @@ using Robust.Client.GameObjects; using static Content.Shared.Wires.SharedWiresComponent; -namespace Content.Client.Wires +namespace Content.Client.Wires.Visualizers { public class WiresVisualizer : AppearanceVisualizer { diff --git a/Content.IntegrationTests/Tests/Disposal/DisposalUnitTest.cs b/Content.IntegrationTests/Tests/Disposal/DisposalUnitTest.cs index 6f4b5f5555..a75d936594 100644 --- a/Content.IntegrationTests/Tests/Disposal/DisposalUnitTest.cs +++ b/Content.IntegrationTests/Tests/Disposal/DisposalUnitTest.cs @@ -85,7 +85,7 @@ namespace Content.IntegrationTests.Tests.Disposal components: - type: DisposalUnit - type: Anchorable - - type: PowerReceiver + - type: ApcPowerReceiver - type: Physics bodyType: Static @@ -155,7 +155,7 @@ namespace Content.IntegrationTests.Tests.Disposal Flush(unit, false, human, wrench); // Remove power need - Assert.True(disposalUnit.TryGetComponent(out PowerReceiverComponent? power)); + Assert.True(disposalUnit.TryGetComponent(out ApcPowerReceiverComponent? power)); power!.NeedsPower = false; Assert.True(unit.Powered); diff --git a/Content.IntegrationTests/Tests/EntityTest.cs b/Content.IntegrationTests/Tests/EntityTest.cs index b2812c5478..6e5bbb5469 100644 --- a/Content.IntegrationTests/Tests/EntityTest.cs +++ b/Content.IntegrationTests/Tests/EntityTest.cs @@ -2,7 +2,7 @@ using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; -using Content.Server.Battery.Components; +using Content.Server.Power.Components; using Content.Server.PowerCell.Components; using Content.Shared.CCVar; using Content.Shared.Coordinates; diff --git a/Content.IntegrationTests/Tests/GravityGridTest.cs b/Content.IntegrationTests/Tests/GravityGridTest.cs index 078d69762a..69d8c63581 100644 --- a/Content.IntegrationTests/Tests/GravityGridTest.cs +++ b/Content.IntegrationTests/Tests/GravityGridTest.cs @@ -22,7 +22,7 @@ namespace Content.IntegrationTests.Tests id: GravityGeneratorDummy components: - type: GravityGenerator - - type: PowerReceiver + - type: ApcPowerReceiver "; [Test] public async Task Test() @@ -48,9 +48,9 @@ namespace Content.IntegrationTests.Tests generator = entityMan.SpawnEntity("GravityGeneratorDummy", grid2.ToCoordinates()); Assert.That(generator.HasComponent()); - Assert.That(generator.HasComponent()); + Assert.That(generator.HasComponent()); var generatorComponent = generator.GetComponent(); - var powerComponent = generator.GetComponent(); + var powerComponent = generator.GetComponent(); Assert.That(generatorComponent.Status, Is.EqualTo(GravityGeneratorStatus.Unpowered)); powerComponent.NeedsPower = false; }); diff --git a/Content.IntegrationTests/Tests/Power/PowerTest.cs b/Content.IntegrationTests/Tests/Power/PowerTest.cs new file mode 100644 index 0000000000..b8453821f3 --- /dev/null +++ b/Content.IntegrationTests/Tests/Power/PowerTest.cs @@ -0,0 +1,996 @@ +#nullable enable +using System.Threading.Tasks; +using Content.Server.NodeContainer; +using Content.Server.NodeContainer.Nodes; +using Content.Server.Power.Components; +using Content.Server.Power.Nodes; +using Content.Shared.Coordinates; +using NUnit.Framework; +using Robust.Shared.GameObjects; +using Robust.Shared.Map; +using Robust.Shared.Maths; +using Robust.Shared.Timing; + +namespace Content.IntegrationTests.Tests.Power +{ + [Parallelizable(ParallelScope.Fixtures)] + [TestFixture] + public class PowerTest : ContentIntegrationTest + { + private const string Prototypes = @" +- type: entity + id: GeneratorDummy + components: + - type: NodeContainer + nodes: + output: + !type:CableDeviceNode + nodeGroupID: HVPower + - type: PowerSupplier + - type: Transform + anchored: true + +- type: entity + id: ConsumerDummy + components: + - type: Transform + anchored: true + - type: NodeContainer + nodes: + input: + !type:CableDeviceNode + nodeGroupID: HVPower + - type: PowerConsumer + +- type: entity + id: ChargingBatteryDummy + components: + - type: Transform + anchored: true + - type: NodeContainer + nodes: + output: + !type:CableDeviceNode + nodeGroupID: HVPower + - type: PowerNetworkBattery + - type: Battery + - type: BatteryCharger + +- type: entity + id: DischargingBatteryDummy + components: + - type: Transform + anchored: true + - type: NodeContainer + nodes: + output: + !type:CableDeviceNode + nodeGroupID: HVPower + - type: PowerNetworkBattery + - type: Battery + - type: BatteryDischarger + +- type: entity + id: FullBatteryDummy + components: + - type: Transform + anchored: true + - type: NodeContainer + nodes: + output: + !type:CableDeviceNode + nodeGroupID: HVPower + input: + !type:CableTerminalPortNode + nodeGroupID: HVPower + - type: PowerNetworkBattery + - type: Battery + - type: BatteryDischarger + node: output + - type: BatteryCharger + node: input + +- type: entity + id: SubstationDummy + components: + - type: NodeContainer + nodes: + input: + !type:CableDeviceNode + nodeGroupID: HVPower + output: + !type:CableDeviceNode + nodeGroupID: MVPower + - type: BatteryCharger + voltage: High + - type: BatteryDischarger + voltage: Medium + - type: PowerNetworkBattery + maxChargeRate: 1000 + maxSupply: 1000 + supplyRampTolerance: 1000 + - type: Battery + maxCharge: 1000 + startingCharge: 1000 + - type: Transform + anchored: true + +- type: entity + id: ApcDummy + components: + - type: Battery + maxCharge: 10000 + startingCharge: 10000 + - type: PowerNetworkBattery + maxChargeRate: 1000 + maxSupply: 1000 + supplyRampTolerance: 1000 + - type: BatteryCharger + voltage: Medium + - type: BatteryDischarger + voltage: Apc + - type: Apc + voltage: Apc + - type: NodeContainer + nodes: + input: + !type:CableDeviceNode + nodeGroupID: MVPower + output: + !type:CableDeviceNode + nodeGroupID: Apc + - type: Transform + anchored: true + - type: UserInterface + interfaces: + - key: enum.ApcUiKey.Key + type: ApcBoundUserInterface + - type: AccessReader + access: [['Engineering']] + +- type: entity + id: ApcPowerReceiverDummy + components: + - type: ApcPowerReceiver + - type: Transform + anchored: true +"; + + private ServerIntegrationInstance _server = default!; + private IMapManager _mapManager = default!; + private IEntityManager _entityManager = default!; + private IGameTiming _gameTiming = default!; + + [OneTimeSetUp] + public async Task Setup() + { + var options = new ServerIntegrationOptions {ExtraPrototypes = Prototypes}; + _server = StartServerDummyTicker(options); + + await _server.WaitIdleAsync(); + _mapManager = _server.ResolveDependency(); + _entityManager = _server.ResolveDependency(); + _gameTiming = _server.ResolveDependency(); + } + + /// + /// Test small power net with a simple surplus of power over the loads. + /// + [Test] + public async Task TestSimpleSurplus() + { + const float loadPower = 200; + PowerSupplierComponent supplier = default!; + PowerConsumerComponent consumer1 = default!; + PowerConsumerComponent consumer2 = default!; + + _server.Assert(() => + { + var map = _mapManager.CreateMap(); + var grid = _mapManager.CreateGrid(map); + + // Power only works when anchored + for (var i = 0; i < 3; i++) + { + grid.SetTile(new Vector2i(0, i), new Tile(1)); + _entityManager.SpawnEntity("CableHV", grid.ToCoordinates(0, i)); + } + + var generatorEnt = _entityManager.SpawnEntity("GeneratorDummy", grid.ToCoordinates()); + var consumerEnt1 = _entityManager.SpawnEntity("ConsumerDummy", grid.ToCoordinates(0, 1)); + var consumerEnt2 = _entityManager.SpawnEntity("ConsumerDummy", grid.ToCoordinates(0, 2)); + + supplier = generatorEnt.GetComponent(); + consumer1 = consumerEnt1.GetComponent(); + consumer2 = consumerEnt2.GetComponent(); + + // Plenty of surplus and tolerance + supplier.MaxSupply = loadPower * 4; + supplier.SupplyRampTolerance = loadPower * 4; + consumer1.DrawRate = loadPower; + consumer2.DrawRate = loadPower; + }); + + _server.RunTicks(1); //let run a tick for PowerNet to process power + + _server.Assert(() => + { + // Assert both consumers fully powered + Assert.That(consumer1.ReceivedPower, Is.EqualTo(consumer1.DrawRate).Within(0.1)); + Assert.That(consumer2.ReceivedPower, Is.EqualTo(consumer2.DrawRate).Within(0.1)); + + // Assert that load adds up on supply. + Assert.That(supplier.CurrentSupply, Is.EqualTo(loadPower * 2).Within(0.1)); + }); + + await _server.WaitIdleAsync(); + } + + + /// + /// Test small power net with a simple deficit of power over the loads. + /// + [Test] + public async Task TestSimpleDeficit() + { + const float loadPower = 200; + PowerSupplierComponent supplier = default!; + PowerConsumerComponent consumer1 = default!; + PowerConsumerComponent consumer2 = default!; + + _server.Assert(() => + { + var map = _mapManager.CreateMap(); + var grid = _mapManager.CreateGrid(map); + + // Power only works when anchored + for (var i = 0; i < 3; i++) + { + grid.SetTile(new Vector2i(0, i), new Tile(1)); + _entityManager.SpawnEntity("CableHV", grid.ToCoordinates(0, i)); + } + + var generatorEnt = _entityManager.SpawnEntity("GeneratorDummy", grid.ToCoordinates()); + var consumerEnt1 = _entityManager.SpawnEntity("ConsumerDummy", grid.ToCoordinates(0, 1)); + var consumerEnt2 = _entityManager.SpawnEntity("ConsumerDummy", grid.ToCoordinates(0, 2)); + + supplier = generatorEnt.GetComponent(); + consumer1 = consumerEnt1.GetComponent(); + consumer2 = consumerEnt2.GetComponent(); + + // Too little supply, both consumers should get 33% power. + supplier.MaxSupply = loadPower; + supplier.SupplyRampTolerance = loadPower; + consumer1.DrawRate = loadPower; + consumer2.DrawRate = loadPower * 2; + }); + + _server.RunTicks(1); //let run a tick for PowerNet to process power + + _server.Assert(() => + { + // Assert both consumers get 33% power. + Assert.That(consumer1.ReceivedPower, Is.EqualTo(consumer1.DrawRate / 3).Within(0.1)); + Assert.That(consumer2.ReceivedPower, Is.EqualTo(consumer2.DrawRate / 3).Within(0.1)); + + // Supply should be maxed out + Assert.That(supplier.CurrentSupply, Is.EqualTo(supplier.MaxSupply).Within(0.1)); + }); + + await _server.WaitIdleAsync(); + } + + [Test] + public async Task TestSupplyRamp() + { + PowerSupplierComponent supplier = default!; + PowerConsumerComponent consumer = default!; + + _server.Assert(() => + { + var map = _mapManager.CreateMap(); + var grid = _mapManager.CreateGrid(map); + + // Power only works when anchored + for (var i = 0; i < 3; i++) + { + grid.SetTile(new Vector2i(0, i), new Tile(1)); + _entityManager.SpawnEntity("CableHV", grid.ToCoordinates(0, i)); + } + + var generatorEnt = _entityManager.SpawnEntity("GeneratorDummy", grid.ToCoordinates()); + var consumerEnt = _entityManager.SpawnEntity("ConsumerDummy", grid.ToCoordinates(0, 2)); + + supplier = generatorEnt.GetComponent(); + consumer = consumerEnt.GetComponent(); + + // Supply has enough total power but needs to ramp up to match. + supplier.MaxSupply = 400; + supplier.SupplyRampRate = 400; + supplier.SupplyRampTolerance = 100; + consumer.DrawRate = 400; + }); + + // Exact values can/will be off by a tick, add tolerance for that. + var tickRate = (float) _gameTiming.TickPeriod.TotalSeconds; + var tickDev = 400 * tickRate * 1.1f; + + _server.RunTicks(1); + + _server.Assert(() => + { + // First tick, supply should be delivering 100 W (max tolerance) and start ramping up. + Assert.That(supplier.CurrentSupply, Is.EqualTo(100).Within(0.1)); + Assert.That(consumer.ReceivedPower, Is.EqualTo(100).Within(0.1)); + }); + + _server.RunTicks(14); + + _server.Assert(() => + { + // After 15 ticks (0.25 seconds), supply ramp pos should be at 100 W and supply at 100, approx. + Assert.That(supplier.CurrentSupply, Is.EqualTo(200).Within(tickDev)); + Assert.That(supplier.SupplyRampPosition, Is.EqualTo(100).Within(tickDev)); + Assert.That(consumer.ReceivedPower, Is.EqualTo(200).Within(tickDev)); + }); + + _server.RunTicks(45); + + _server.Assert(() => + { + // After 1 second total, ramp should be at 400 and supply should be at 400, everybody happy. + Assert.That(supplier.CurrentSupply, Is.EqualTo(400).Within(tickDev)); + Assert.That(supplier.SupplyRampPosition, Is.EqualTo(400).Within(tickDev)); + Assert.That(consumer.ReceivedPower, Is.EqualTo(400).Within(tickDev)); + }); + + await _server.WaitIdleAsync(); + } + + [Test] + public async Task TestBatteryRamp() + { + const float startingCharge = 100_000; + + PowerNetworkBatteryComponent netBattery = default!; + BatteryComponent battery = default!; + PowerConsumerComponent consumer = default!; + + _server.Assert(() => + { + var map = _mapManager.CreateMap(); + var grid = _mapManager.CreateGrid(map); + + // Power only works when anchored + for (var i = 0; i < 3; i++) + { + grid.SetTile(new Vector2i(0, i), new Tile(1)); + _entityManager.SpawnEntity("CableHV", grid.ToCoordinates(0, i)); + } + + var generatorEnt = _entityManager.SpawnEntity("DischargingBatteryDummy", grid.ToCoordinates()); + var consumerEnt = _entityManager.SpawnEntity("ConsumerDummy", grid.ToCoordinates(0, 2)); + + netBattery = generatorEnt.GetComponent(); + battery = generatorEnt.GetComponent(); + consumer = consumerEnt.GetComponent(); + + battery.MaxCharge = startingCharge; + battery.CurrentCharge = startingCharge; + netBattery.MaxSupply = 400; + netBattery.SupplyRampRate = 400; + netBattery.SupplyRampTolerance = 100; + consumer.DrawRate = 400; + }); + + // Exact values can/will be off by a tick, add tolerance for that. + var tickRate = (float) _gameTiming.TickPeriod.TotalSeconds; + var tickDev = 400 * tickRate * 1.1f; + + _server.RunTicks(1); + + _server.Assert(() => + { + // First tick, supply should be delivering 100 W (max tolerance) and start ramping up. + Assert.That(netBattery.CurrentSupply, Is.EqualTo(100).Within(0.1)); + Assert.That(consumer.ReceivedPower, Is.EqualTo(100).Within(0.1)); + }); + + _server.RunTicks(14); + + _server.Assert(() => + { + // After 15 ticks (0.25 seconds), supply ramp pos should be at 100 W and supply at 100, approx. + Assert.That(netBattery.CurrentSupply, Is.EqualTo(200).Within(tickDev)); + Assert.That(netBattery.SupplyRampPosition, Is.EqualTo(100).Within(tickDev)); + Assert.That(consumer.ReceivedPower, Is.EqualTo(200).Within(tickDev)); + + // Trivial integral to calculate expected power spent. + const double spentExpected = (200 + 100) / 2.0 * 0.25; + Assert.That(battery.CurrentCharge, Is.EqualTo(startingCharge - spentExpected).Within(tickDev)); + }); + + _server.RunTicks(45); + + _server.Assert(() => + { + // After 1 second total, ramp should be at 400 and supply should be at 400, everybody happy. + Assert.That(netBattery.CurrentSupply, Is.EqualTo(400).Within(tickDev)); + Assert.That(netBattery.SupplyRampPosition, Is.EqualTo(400).Within(tickDev)); + Assert.That(consumer.ReceivedPower, Is.EqualTo(400).Within(tickDev)); + + // Trivial integral to calculate expected power spent. + const double spentExpected = (400 + 100) / 2.0 * 0.75 + 400 * 0.25; + Assert.That(battery.CurrentCharge, Is.EqualTo(startingCharge - spentExpected).Within(tickDev)); + }); + + await _server.WaitIdleAsync(); + } + + + [Test] + public async Task TestSimpleBatteryChargeDeficit() + { + PowerSupplierComponent supplier = default!; + BatteryComponent battery = default!; + + _server.Assert(() => + { + var map = _mapManager.CreateMap(); + var grid = _mapManager.CreateGrid(map); + + // Power only works when anchored + for (var i = 0; i < 3; i++) + { + grid.SetTile(new Vector2i(0, i), new Tile(1)); + _entityManager.SpawnEntity("CableHV", grid.ToCoordinates(0, i)); + } + + var generatorEnt = _entityManager.SpawnEntity("GeneratorDummy", grid.ToCoordinates()); + var batteryEnt = _entityManager.SpawnEntity("ChargingBatteryDummy", grid.ToCoordinates(0, 2)); + + supplier = generatorEnt.GetComponent(); + var netBattery = batteryEnt.GetComponent(); + battery = batteryEnt.GetComponent(); + + supplier.MaxSupply = 500; + supplier.SupplyRampTolerance = 500; + battery.MaxCharge = 100000; + netBattery.MaxChargeRate = 1000; + netBattery.Efficiency = 0.5f; + }); + + _server.RunTicks(30); // 60 TPS, 0.5 seconds + + _server.Assert(() => + { + // half a second @ 500 W = 250 + // 50% efficiency, so 125 J stored total. + Assert.That(battery.CurrentCharge, Is.EqualTo(125).Within(0.1)); + Assert.That(supplier.CurrentSupply, Is.EqualTo(500).Within(0.1)); + }); + + await _server.WaitIdleAsync(); + } + + [Test] + public async Task TestFullBattery() + { + PowerConsumerComponent consumer = default!; + PowerSupplierComponent supplier = default!; + PowerNetworkBatteryComponent netBattery = default!; + BatteryComponent battery = default!; + + _server.Assert(() => + { + var map = _mapManager.CreateMap(); + var grid = _mapManager.CreateGrid(map); + + // Power only works when anchored + for (var i = 0; i < 4; i++) + { + grid.SetTile(new Vector2i(0, i), new Tile(1)); + _entityManager.SpawnEntity("CableHV", grid.ToCoordinates(0, i)); + } + + var terminal = _entityManager.SpawnEntity("CableTerminal", grid.ToCoordinates(0, 1)); + terminal.Transform.LocalRotation = Angle.FromDegrees(180); + + var batteryEnt = _entityManager.SpawnEntity("FullBatteryDummy", grid.ToCoordinates(0, 2)); + var supplyEnt = _entityManager.SpawnEntity("GeneratorDummy", grid.ToCoordinates(0, 0)); + var consumerEnt = _entityManager.SpawnEntity("ConsumerDummy", grid.ToCoordinates(0, 3)); + + consumer = consumerEnt.GetComponent(); + supplier = supplyEnt.GetComponent(); + netBattery = batteryEnt.GetComponent(); + battery = batteryEnt.GetComponent(); + + // Consumer needs 1000 W, supplier can only provide 800, battery fills in the remaining 200. + consumer.DrawRate = 1000; + supplier.MaxSupply = 800; + supplier.SupplyRampTolerance = 800; + + netBattery.MaxSupply = 400; + netBattery.SupplyRampTolerance = 400; + netBattery.SupplyRampRate = 100_000; + battery.MaxCharge = 100_000; + battery.CurrentCharge = 100_000; + }); + + // Run some ticks so everything is stable. + _server.RunTicks(60); + + // Exact values can/will be off by a tick, add tolerance for that. + var tickRate = (float) _gameTiming.TickPeriod.TotalSeconds; + var tickDev = 400 * tickRate * 1.1f; + + _server.Assert(() => + { + Assert.That(consumer.ReceivedPower, Is.EqualTo(consumer.DrawRate).Within(0.1)); + Assert.That(supplier.CurrentSupply, Is.EqualTo(supplier.MaxSupply).Within(0.1)); + + // Battery's current supply includes passed-through power from the supply. + // Assert ramp position is correct to make sure it's only supplying 200 W for real. + Assert.That(netBattery.CurrentSupply, Is.EqualTo(1000).Within(0.1)); + Assert.That(netBattery.SupplyRampPosition, Is.EqualTo(200).Within(0.1)); + + const int expectedSpent = 200; + Assert.That(battery.CurrentCharge, Is.EqualTo(battery.MaxCharge - expectedSpent).Within(tickDev)); + }); + + await _server.WaitIdleAsync(); + } + + [Test] + public async Task TestFullBatteryEfficiencyPassThrough() + { + PowerConsumerComponent consumer = default!; + PowerSupplierComponent supplier = default!; + PowerNetworkBatteryComponent netBattery = default!; + BatteryComponent battery = default!; + + _server.Assert(() => + { + var map = _mapManager.CreateMap(); + var grid = _mapManager.CreateGrid(map); + + // Power only works when anchored + for (var i = 0; i < 4; i++) + { + grid.SetTile(new Vector2i(0, i), new Tile(1)); + _entityManager.SpawnEntity("CableHV", grid.ToCoordinates(0, i)); + } + + var terminal = _entityManager.SpawnEntity("CableTerminal", grid.ToCoordinates(0, 1)); + terminal.Transform.LocalRotation = Angle.FromDegrees(180); + + var batteryEnt = _entityManager.SpawnEntity("FullBatteryDummy", grid.ToCoordinates(0, 2)); + var supplyEnt = _entityManager.SpawnEntity("GeneratorDummy", grid.ToCoordinates(0, 0)); + var consumerEnt = _entityManager.SpawnEntity("ConsumerDummy", grid.ToCoordinates(0, 3)); + + consumer = consumerEnt.GetComponent(); + supplier = supplyEnt.GetComponent(); + netBattery = batteryEnt.GetComponent(); + battery = batteryEnt.GetComponent(); + + // Consumer needs 1000 W, supply and battery can only provide 400 each. + // BUT the battery has 50% input efficiency, so 50% of the power of the supply gets lost. + consumer.DrawRate = 1000; + supplier.MaxSupply = 400; + supplier.SupplyRampTolerance = 400; + + netBattery.MaxSupply = 400; + netBattery.SupplyRampTolerance = 400; + netBattery.SupplyRampRate = 100_000; + netBattery.Efficiency = 0.5f; + battery.MaxCharge = 1_000_000; + battery.CurrentCharge = 1_000_000; + }); + + // Run some ticks so everything is stable. + _server.RunTicks(60); + + // Exact values can/will be off by a tick, add tolerance for that. + var tickRate = (float) _gameTiming.TickPeriod.TotalSeconds; + var tickDev = 400 * tickRate * 1.1f; + + _server.Assert(() => + { + Assert.That(consumer.ReceivedPower, Is.EqualTo(600).Within(0.1)); + Assert.That(supplier.CurrentSupply, Is.EqualTo(supplier.MaxSupply).Within(0.1)); + + Assert.That(netBattery.CurrentSupply, Is.EqualTo(600).Within(0.1)); + Assert.That(netBattery.SupplyRampPosition, Is.EqualTo(400).Within(0.1)); + + const int expectedSpent = 400; + Assert.That(battery.CurrentCharge, Is.EqualTo(battery.MaxCharge - expectedSpent).Within(tickDev)); + }); + + await _server.WaitIdleAsync(); + } + + [Test] + public async Task TestFullBatteryEfficiencyDemandPassThrough() + { + PowerConsumerComponent consumer1 = default!; + PowerConsumerComponent consumer2 = default!; + PowerSupplierComponent supplier = default!; + + _server.Assert(() => + { + var map = _mapManager.CreateMap(); + var grid = _mapManager.CreateGrid(map); + + // Map layout here is + // C - consumer + // B - battery + // G - generator + // B - battery + // C - consumer + // Connected in the only way that makes sense. + + // Power only works when anchored + for (var i = 0; i < 5; i++) + { + grid.SetTile(new Vector2i(0, i), new Tile(1)); + _entityManager.SpawnEntity("CableHV", grid.ToCoordinates(0, i)); + } + + _entityManager.SpawnEntity("CableTerminal", grid.ToCoordinates(0, 2)); + var terminal = _entityManager.SpawnEntity("CableTerminal", grid.ToCoordinates(0, 2)); + terminal.Transform.LocalRotation = Angle.FromDegrees(180); + + var batteryEnt1 = _entityManager.SpawnEntity("FullBatteryDummy", grid.ToCoordinates(0, 1)); + var batteryEnt2 = _entityManager.SpawnEntity("FullBatteryDummy", grid.ToCoordinates(0, 3)); + var supplyEnt = _entityManager.SpawnEntity("GeneratorDummy", grid.ToCoordinates(0, 2)); + var consumerEnt1 = _entityManager.SpawnEntity("ConsumerDummy", grid.ToCoordinates(0, 0)); + var consumerEnt2 = _entityManager.SpawnEntity("ConsumerDummy", grid.ToCoordinates(0, 4)); + + consumer1 = consumerEnt1.GetComponent(); + consumer2 = consumerEnt2.GetComponent(); + supplier = supplyEnt.GetComponent(); + var netBattery1 = batteryEnt1.GetComponent(); + var netBattery2 = batteryEnt2.GetComponent(); + var battery1 = batteryEnt1.GetComponent(); + var battery2 = batteryEnt2.GetComponent(); + + // There are two loads, 500 W and 1000 W respectively. + // The 500 W load is behind a 50% efficient battery, + // so *effectively* it needs 2x as much power from the supply to run. + // Assert that both are getting 50% power. + // Batteries are empty and only a bridge. + + consumer1.DrawRate = 500; + consumer2.DrawRate = 1000; + supplier.MaxSupply = 1000; + supplier.SupplyRampTolerance = 1000; + + battery1.MaxCharge = 1_000_000; + battery2.MaxCharge = 1_000_000; + + netBattery1.MaxChargeRate = 1_000; + netBattery2.MaxChargeRate = 1_000; + + netBattery1.Efficiency = 0.5f; + + netBattery1.MaxSupply = 1_000_000; + netBattery2.MaxSupply = 1_000_000; + + netBattery1.SupplyRampTolerance = 1_000_000; + netBattery2.SupplyRampTolerance = 1_000_000; + }); + + // Run some ticks so everything is stable. + _server.RunTicks(10); + + _server.Assert(() => + { + Assert.That(consumer1.ReceivedPower, Is.EqualTo(250).Within(0.1)); + Assert.That(consumer2.ReceivedPower, Is.EqualTo(500).Within(0.1)); + Assert.That(supplier.CurrentSupply, Is.EqualTo(supplier.MaxSupply).Within(0.1)); + }); + + await _server.WaitIdleAsync(); + } + + /// + /// Test that power is distributed proportionally, even through batteries. + /// + [Test] + public async Task TestBatteriesProportional() + { + PowerConsumerComponent consumer1 = default!; + PowerConsumerComponent consumer2 = default!; + PowerSupplierComponent supplier = default!; + + _server.Assert(() => + { + var map = _mapManager.CreateMap(); + var grid = _mapManager.CreateGrid(map); + + // Map layout here is + // C - consumer + // B - battery + // G - generator + // B - battery + // C - consumer + // Connected in the only way that makes sense. + + // Power only works when anchored + for (var i = 0; i < 5; i++) + { + grid.SetTile(new Vector2i(0, i), new Tile(1)); + _entityManager.SpawnEntity("CableHV", grid.ToCoordinates(0, i)); + } + + _entityManager.SpawnEntity("CableTerminal", grid.ToCoordinates(0, 2)); + var terminal = _entityManager.SpawnEntity("CableTerminal", grid.ToCoordinates(0, 2)); + terminal.Transform.LocalRotation = Angle.FromDegrees(180); + + var batteryEnt1 = _entityManager.SpawnEntity("FullBatteryDummy", grid.ToCoordinates(0, 1)); + var batteryEnt2 = _entityManager.SpawnEntity("FullBatteryDummy", grid.ToCoordinates(0, 3)); + var supplyEnt = _entityManager.SpawnEntity("GeneratorDummy", grid.ToCoordinates(0, 2)); + var consumerEnt1 = _entityManager.SpawnEntity("ConsumerDummy", grid.ToCoordinates(0, 0)); + var consumerEnt2 = _entityManager.SpawnEntity("ConsumerDummy", grid.ToCoordinates(0, 4)); + + consumer1 = consumerEnt1.GetComponent(); + consumer2 = consumerEnt2.GetComponent(); + supplier = supplyEnt.GetComponent(); + var netBattery1 = batteryEnt1.GetComponent(); + var netBattery2 = batteryEnt2.GetComponent(); + var battery1 = batteryEnt1.GetComponent(); + var battery2 = batteryEnt2.GetComponent(); + + consumer1.DrawRate = 500; + consumer2.DrawRate = 1000; + supplier.MaxSupply = 1000; + supplier.SupplyRampTolerance = 1000; + + battery1.MaxCharge = 1_000_000; + battery2.MaxCharge = 1_000_000; + + netBattery1.MaxChargeRate = 20; + netBattery2.MaxChargeRate = 20; + + netBattery1.MaxSupply = 1_000_000; + netBattery2.MaxSupply = 1_000_000; + + netBattery1.SupplyRampTolerance = 1_000_000; + netBattery2.SupplyRampTolerance = 1_000_000; + }); + + // Run some ticks so everything is stable. + _server.RunTicks(60); + + _server.Assert(() => + { + // NOTE: MaxChargeRate on batteries actually skews the demand. + // So that's why the tolerance is so high, the charge rate is so *low*, + // and we run so many ticks to stabilize. + Assert.That(consumer1.ReceivedPower, Is.EqualTo(333.333).Within(10)); + Assert.That(consumer2.ReceivedPower, Is.EqualTo(666.666).Within(10)); + Assert.That(supplier.CurrentSupply, Is.EqualTo(supplier.MaxSupply).Within(0.1)); + }); + + await _server.WaitIdleAsync(); + } + + [Test] + public async Task TestBatteryEngineCut() + { + PowerConsumerComponent consumer = default!; + PowerSupplierComponent supplier = default!; + PowerNetworkBatteryComponent netBattery = default!; + + _server.Post(() => + { + var map = _mapManager.CreateMap(); + var grid = _mapManager.CreateGrid(map); + + // Power only works when anchored + for (var i = 0; i < 4; i++) + { + grid.SetTile(new Vector2i(0, i), new Tile(1)); + _entityManager.SpawnEntity("CableHV", grid.ToCoordinates(0, i)); + } + + var terminal = _entityManager.SpawnEntity("CableTerminal", grid.ToCoordinates(0, 1)); + terminal.Transform.LocalRotation = Angle.FromDegrees(180); + + var batteryEnt = _entityManager.SpawnEntity("FullBatteryDummy", grid.ToCoordinates(0, 2)); + var supplyEnt = _entityManager.SpawnEntity("GeneratorDummy", grid.ToCoordinates(0, 0)); + var consumerEnt = _entityManager.SpawnEntity("ConsumerDummy", grid.ToCoordinates(0, 3)); + + consumer = consumerEnt.GetComponent(); + supplier = supplyEnt.GetComponent(); + netBattery = batteryEnt.GetComponent(); + var battery = batteryEnt.GetComponent(); + + // Consumer needs 1000 W, supplier can only provide 800, battery fills in the remaining 200. + consumer.DrawRate = 1000; + supplier.MaxSupply = 1000; + supplier.SupplyRampTolerance = 1000; + + netBattery.MaxSupply = 1000; + netBattery.SupplyRampTolerance = 200; + netBattery.SupplyRampRate = 10; + battery.MaxCharge = 100_000; + battery.CurrentCharge = 100_000; + }); + + // Run some ticks so everything is stable. + _server.RunTicks(5); + + _server.Assert(() => + { + // Supply and consumer are fully loaded/supplied. + Assert.That(consumer.ReceivedPower, Is.EqualTo(consumer.DrawRate).Within(0.5)); + Assert.That(supplier.CurrentSupply, Is.EqualTo(supplier.MaxSupply).Within(0.5)); + + // Cut off the supplier + supplier.Enabled = false; + // Remove tolerance on battery too. + netBattery.SupplyRampTolerance = 5; + }); + + _server.RunTicks(3); + + _server.Assert(() => + { + // Assert that network drops to 0 power and starts ramping up + Assert.That(consumer.ReceivedPower, Is.LessThan(50).And.GreaterThan(0)); + Assert.That(netBattery.CurrentReceiving, Is.EqualTo(0)); + Assert.That(netBattery.CurrentSupply, Is.GreaterThan(0)); + }); + + await _server.WaitIdleAsync(); + } + + /// + /// Test that correctly isolates two networks. + /// + [Test] + public async Task TestTerminalNodeGroups() + { + CableNode leftNode = default!; + CableNode rightNode = default!; + Node batteryInput = default!; + Node batteryOutput = default!; + + _server.Assert(() => + { + var map = _mapManager.CreateMap(); + var grid = _mapManager.CreateGrid(map); + + // Power only works when anchored + for (var i = 0; i < 4; i++) + { + grid.SetTile(new Vector2i(0, i), new Tile(1)); + } + + var leftEnt = _entityManager.SpawnEntity("CableHV", grid.ToCoordinates(0, 0)); + _entityManager.SpawnEntity("CableHV", grid.ToCoordinates(0, 1)); + _entityManager.SpawnEntity("CableHV", grid.ToCoordinates(0, 2)); + var rightEnt = _entityManager.SpawnEntity("CableHV", grid.ToCoordinates(0, 3)); + + var terminal = _entityManager.SpawnEntity("CableTerminal", grid.ToCoordinates(0, 1)); + terminal.Transform.LocalRotation = Angle.FromDegrees(180); + + var battery = _entityManager.SpawnEntity("FullBatteryDummy", grid.ToCoordinates(0, 2)); + var batteryNodeContainer = battery.GetComponent(); + + leftNode = leftEnt.GetComponent().GetNode("power"); + rightNode = rightEnt.GetComponent().GetNode("power"); + + batteryInput = batteryNodeContainer.GetNode("input"); + batteryOutput = batteryNodeContainer.GetNode("output"); + }); + + // Run ticks to allow node groups to update. + _server.RunTicks(1); + + _server.Assert(() => + { + Assert.That(batteryInput.NodeGroup, Is.EqualTo(leftNode.NodeGroup)); + Assert.That(batteryOutput.NodeGroup, Is.EqualTo(rightNode.NodeGroup)); + + Assert.That(leftNode.NodeGroup, Is.Not.EqualTo(rightNode.NodeGroup)); + }); + + await _server.WaitIdleAsync(); + } + + [Test] + public async Task ApcChargingTest() + { + PowerNetworkBatteryComponent substationNetBattery = default!; + BatteryComponent apcBattery = default!; + + _server.Assert(() => + { + var map = _mapManager.CreateMap(); + var grid = _mapManager.CreateGrid(map); + + // Power only works when anchored + for (var i = 0; i < 3; i++) + { + grid.SetTile(new Vector2i(0, i), new Tile(1)); + } + + _entityManager.SpawnEntity("CableHV", grid.ToCoordinates(0, 0)); + _entityManager.SpawnEntity("CableHV", grid.ToCoordinates(0, 1)); + _entityManager.SpawnEntity("CableMV", grid.ToCoordinates(0, 1)); + _entityManager.SpawnEntity("CableMV", grid.ToCoordinates(0, 2)); + + var generatorEnt = _entityManager.SpawnEntity("GeneratorDummy", grid.ToCoordinates(0, 0)); + var substationEnt = _entityManager.SpawnEntity("SubstationDummy", grid.ToCoordinates(0, 1)); + var apcEnt = _entityManager.SpawnEntity("ApcDummy", grid.ToCoordinates(0, 2)); + + var generatorSupplier = generatorEnt.GetComponent(); + substationNetBattery = substationEnt.GetComponent(); + apcBattery = apcEnt.GetComponent(); + + generatorSupplier.MaxSupply = 1000; + generatorSupplier.SupplyRampTolerance = 1000; + + apcBattery.CurrentCharge = 0; + }); + + _server.RunTicks(5); //let run a few ticks for PowerNets to reevaluate and start charging apc + + _server.Assert(() => + { + Assert.That(substationNetBattery.CurrentSupply, Is.GreaterThan(0)); //substation should be providing power + Assert.That(apcBattery.CurrentCharge, Is.GreaterThan(0)); //apc battery should have gained charge + }); + + await _server.WaitIdleAsync(); + } + + [Test] + public async Task ApcNetTest() + { + PowerNetworkBatteryComponent apcNetBattery = default!; + ApcPowerReceiverComponent receiver = default!; + + _server.Assert(() => + { + var map = _mapManager.CreateMap(); + var grid = _mapManager.CreateGrid(map); + + // Power only works when anchored + for (var i = 0; i < 3; i++) + { + grid.SetTile(new Vector2i(0, i), new Tile(1)); + } + + var apcEnt = _entityManager.SpawnEntity("ApcDummy", grid.ToCoordinates(0, 0)); + var apcExtensionEnt = _entityManager.SpawnEntity("CableApcExtension", grid.ToCoordinates(0, 0)); + var powerReceiverEnt = _entityManager.SpawnEntity("ApcPowerReceiverDummy", grid.ToCoordinates(0, 2)); + + var provider = apcExtensionEnt.GetComponent(); + receiver = powerReceiverEnt.GetComponent(); + var battery = apcEnt.GetComponent(); + apcNetBattery = apcEnt.GetComponent(); + + provider.PowerTransferRange = 5; //arbitrary range to reach receiver + receiver.PowerReceptionRange = 5; //arbitrary range to reach provider + + battery.MaxCharge = 10000; //arbitrary nonzero amount of charge + battery.CurrentCharge = battery.MaxCharge; //fill battery + + receiver.Load = 1; //arbitrary small amount of power + }); + + _server.RunTicks(1); //let run a tick for ApcNet to process power + + _server.Assert(() => + { + Assert.That(receiver.Powered); + Assert.That(apcNetBattery.CurrentSupply, Is.EqualTo(1).Within(0.1)); + }); + + await _server.WaitIdleAsync(); + } + } +} diff --git a/Content.IntegrationTests/Tests/PowerTest.cs b/Content.IntegrationTests/Tests/PowerTest.cs deleted file mode 100644 index 191288b16a..0000000000 --- a/Content.IntegrationTests/Tests/PowerTest.cs +++ /dev/null @@ -1,292 +0,0 @@ -#nullable enable -using System.Threading.Tasks; -using Content.Server.APC.Components; -using Content.Server.Battery.Components; -using Content.Server.GameObjects.Components; -using Content.Server.Power.Components; -using Content.Shared.Coordinates; -using NUnit.Framework; -using Robust.Shared.GameObjects; -using Robust.Shared.IoC; -using Robust.Shared.Map; -using Robust.Shared.Maths; -using Robust.Shared.Physics; - -namespace Content.IntegrationTests.Tests -{ - [TestFixture] - public class PowerTest : ContentIntegrationTest - { - private const string Prototypes = @" -- type: entity - name: GeneratorDummy - id: GeneratorDummy - components: - - type: NodeContainer - nodes: - output: - !type:AdjacentNode - nodeGroupID: HVPower - - type: PowerSupplier - supplyRate: 3000 - - type: Anchorable - - type: Transform - anchored: true - -- type: entity - name: ConsumerDummy - id: ConsumerDummy - components: - - type: Transform - anchored: true - - type: NodeContainer - nodes: - input: - !type:AdjacentNode - nodeGroupID: HVPower - - type: PowerConsumer - drawRate: 50 - -- type: entity - name: SubstationDummy - id: SubstationDummy - components: - - type: Battery - maxCharge: 1000 - startingCharge: 1000 - - type: NodeContainer - nodes: - input: - !type:AdjacentNode - nodeGroupID: HVPower - output: - !type:AdjacentNode - nodeGroupID: MVPower - - type: PowerConsumer - - type: BatteryStorage - activeDrawRate: 1500 - - type: PowerSupplier - voltage: Medium - - type: BatteryDischarger - activeSupplyRate: 1000 - - type: Transform - anchored: true - -- type: entity - name: ApcDummy - id: ApcDummy - components: - - type: Battery - maxCharge: 10000 - startingCharge: 10000 - - type: BatteryStorage - activeDrawRate: 1000 - - type: PowerProvider - voltage: Apc - - type: Apc - voltage: Apc - - type: PowerConsumer - voltage: Medium - - type: NodeContainer - nodes: - input: - !type:AdjacentNode - nodeGroupID: MVPower - output: - !type:AdjacentNode - nodeGroupID: Apc - - type: Transform - anchored: true - - type: UserInterface - interfaces: - - key: enum.ApcUiKey.Key - type: ApcBoundUserInterface - - type: AccessReader - access: [['Engineering']] - -- type: entity - name: ApcExtensionCableDummy - id: ApcExtensionCableDummy - components: - - type: NodeContainer - nodes: - apc: - !type:AdjacentNode - nodeGroupID: Apc - wire: - !type:AdjacentNode - nodeGroupID: WireNet - - type: PowerProvider - voltage: Apc - - type: Wire - wireType: Apc - - type: Transform - anchored: true - -- type: entity - name: PowerReceiverDummy - id: PowerReceiverDummy - components: - - type: PowerReceiver - - type: Transform - anchored: true -"; - [Test] - public async Task PowerNetTest() - { - var options = new ServerIntegrationOptions{ExtraPrototypes = Prototypes}; - var server = StartServerDummyTicker(options); - - PowerSupplierComponent supplier = default!; - PowerConsumerComponent consumer1 = default!; - PowerConsumerComponent consumer2 = default!; - - server.Assert(() => - { - var mapMan = IoCManager.Resolve(); - var entityMan = IoCManager.Resolve(); - mapMan.CreateMap(new MapId(1)); - var grid = mapMan.CreateGrid(new MapId(1)); - - // Power only works when anchored - grid.SetTile(new Vector2i(0, 0), new Tile(1)); - grid.SetTile(new Vector2i(0, 1), new Tile(1)); - grid.SetTile(new Vector2i(0, 2), new Tile(1)); - - var generatorEnt = entityMan.SpawnEntity("GeneratorDummy", grid.ToCoordinates()); - var consumerEnt1 = entityMan.SpawnEntity("ConsumerDummy", grid.ToCoordinates(0, 1)); - var consumerEnt2 = entityMan.SpawnEntity("ConsumerDummy", grid.ToCoordinates(0, 2)); - - if (generatorEnt.TryGetComponent(out PhysicsComponent? physics)) - { - physics.BodyType = BodyType.Static; - } - - supplier = generatorEnt.GetComponent(); - consumer1 = consumerEnt1.GetComponent(); - consumer2 = consumerEnt2.GetComponent(); - - var supplyRate = 1000; //arbitrary amount of power supply - - supplier.SupplyRate = supplyRate; - consumer1.DrawRate = supplyRate / 2; //arbitrary draw less than supply - consumer2.DrawRate = supplyRate * 2; //arbitrary draw greater than supply - - consumer1.Priority = Priority.First; //power goes to this consumer first - consumer2.Priority = Priority.Last; //any excess power should go to low priority consumer - }); - - server.RunTicks(1); //let run a tick for PowerNet to process power - - server.Assert(() => - { - Assert.That(consumer1.DrawRate, Is.EqualTo(consumer1.ReceivedPower)); //first should be fully powered - Assert.That(consumer2.ReceivedPower, Is.EqualTo(supplier.SupplyRate - consumer1.ReceivedPower)); //second should get remaining power - }); - - await server.WaitIdleAsync(); - } - - [Test] - public async Task ApcChargingTest() - { - var options = new ServerIntegrationOptions{ExtraPrototypes = Prototypes}; - var server = StartServerDummyTicker(options); - - BatteryComponent apcBattery = default!; - PowerSupplierComponent substationSupplier = default!; - - server.Assert(() => - { - var mapMan = IoCManager.Resolve(); - var entityMan = IoCManager.Resolve(); - mapMan.CreateMap(new MapId(1)); - var grid = mapMan.CreateGrid(new MapId(1)); - - // Power only works when anchored - grid.SetTile(new Vector2i(0, 0), new Tile(1)); - grid.SetTile(new Vector2i(0, 1), new Tile(1)); - grid.SetTile(new Vector2i(0, 2), new Tile(1)); - - var generatorEnt = entityMan.SpawnEntity("GeneratorDummy", grid.ToCoordinates()); - var substationEnt = entityMan.SpawnEntity("SubstationDummy", grid.ToCoordinates(0, 1)); - var apcEnt = entityMan.SpawnEntity("ApcDummy", grid.ToCoordinates(0, 2)); - - var generatorSupplier = generatorEnt.GetComponent(); - - substationSupplier = substationEnt.GetComponent(); - var substationStorage = substationEnt.GetComponent(); - var substationDischarger = substationEnt.GetComponent(); - - apcBattery = apcEnt.GetComponent(); - var apcStorage = apcEnt.GetComponent(); - - generatorSupplier.SupplyRate = 1000; //arbitrary nonzero amount of power - substationStorage.ActiveDrawRate = 1000; //arbitrary nonzero power draw - substationDischarger.ActiveSupplyRate = 500; //arbitirary nonzero power supply less than substation storage draw - apcStorage.ActiveDrawRate = 500; //arbitrary nonzero power draw - apcBattery.MaxCharge = 100; //abbitrary nonzero amount of charge - apcBattery.CurrentCharge = 0; //no charge - }); - - server.RunTicks(5); //let run a few ticks for PowerNets to reevaluate and start charging apc - - server.Assert(() => - { - Assert.That(substationSupplier.SupplyRate, Is.Not.EqualTo(0)); //substation should be providing power - Assert.That(apcBattery.CurrentCharge, Is.Not.EqualTo(0)); //apc battery should have gained charge - }); - - await server.WaitIdleAsync(); - } - - [Test] - public async Task ApcNetTest() - { - var options = new ServerIntegrationOptions{ExtraPrototypes = Prototypes}; - var server = StartServerDummyTicker(options); - - PowerReceiverComponent receiver = default!; - - server.Assert(() => - { - var mapMan = IoCManager.Resolve(); - var entityMan = IoCManager.Resolve(); - var mapId = new MapId(1); - mapMan.CreateMap(mapId); - var grid = mapMan.CreateGrid(mapId); - - // Power only works when anchored - grid.SetTile(new Vector2i(0, 0), new Tile(1)); - grid.SetTile(new Vector2i(0, 1), new Tile(1)); - grid.SetTile(new Vector2i(0, 2), new Tile(1)); - - var apcEnt = entityMan.SpawnEntity("ApcDummy", grid.ToCoordinates(0, 0)); - var apcExtensionEnt = entityMan.SpawnEntity("ApcExtensionCableDummy", grid.ToCoordinates(0, 1)); - var powerReceiverEnt = entityMan.SpawnEntity("PowerReceiverDummy", grid.ToCoordinates(0, 2)); - - var apc = apcEnt.GetComponent(); - var provider = apcExtensionEnt.GetComponent(); - receiver = powerReceiverEnt.GetComponent(); - var battery = apcEnt.GetComponent(); - - provider.PowerTransferRange = 5; //arbitrary range to reach receiver - receiver.PowerReceptionRange = 5; //arbitrary range to reach provider - - battery.MaxCharge = 10000; //arbitrary nonzero amount of charge - battery.CurrentCharge = battery.MaxCharge; //fill battery - - receiver.Load = 1; //arbitrary small amount of power - }); - - server.RunTicks(1); //let run a tick for ApcNet to process power - - server.Assert(() => - { - Assert.That(receiver.Powered); - }); - - await server.WaitIdleAsync(); - } - } -} diff --git a/Content.IntegrationTests/Tests/SaveLoadSaveTest.cs b/Content.IntegrationTests/Tests/SaveLoadSaveTest.cs index 9bf40017c0..e77981375b 100644 --- a/Content.IntegrationTests/Tests/SaveLoadSaveTest.cs +++ b/Content.IntegrationTests/Tests/SaveLoadSaveTest.cs @@ -122,7 +122,24 @@ namespace Content.IntegrationTests.Tests two = reader.ReadToEnd(); } - Assert.That(one, Is.EqualTo(two)); + Assert.Multiple(() => { + Assert.That(two, Is.EqualTo(one)); + var failed = TestContext.CurrentContext.Result.Assertions.FirstOrDefault(); + if (failed != null) + { + var oneTmp = Path.GetTempFileName(); + var twoTmp = Path.GetTempFileName(); + + File.WriteAllText(oneTmp, one); + File.WriteAllText(twoTmp, two); + + TestContext.AddTestAttachment(oneTmp, "First save file"); + TestContext.AddTestAttachment(twoTmp, "Second save file"); + TestContext.Error.WriteLine("Complete output:"); + TestContext.Error.WriteLine(oneTmp); + TestContext.Error.WriteLine(twoTmp); + } + }); } } } diff --git a/Content.Server/AME/AMENodeGroup.cs b/Content.Server/AME/AMENodeGroup.cs index 920cff987c..c632f39d91 100644 --- a/Content.Server/AME/AMENodeGroup.cs +++ b/Content.Server/AME/AMENodeGroup.cs @@ -8,6 +8,7 @@ using Content.Server.NodeContainer.NodeGroups; using Content.Server.NodeContainer.Nodes; using Robust.Shared.IoC; using Robust.Shared.Map; +using Robust.Shared.Maths; using Robust.Shared.Random; using Robust.Shared.ViewVariables; @@ -36,19 +37,23 @@ namespace Content.Server.AME public int CoreCount => _cores.Count; - protected override void OnAddNode(Node node) + public override void LoadNodes(List groupNodes) { - base.OnAddNode(node); - if (_masterController == null) + base.LoadNodes(groupNodes); + + foreach (var node in groupNodes) { - node.Owner.TryGetComponent(out var controller); - _masterController = controller; + if (node.Owner.TryGetComponent(out AMEControllerComponent? controller)) + { + _masterController = controller; + } } } - protected override void OnRemoveNode(Node node) + public override void RemoveNode(Node node) { - base.OnRemoveNode(node); + base.RemoveNode(node); + RefreshAMENodes(_masterController); if (_masterController != null && _masterController?.Owner == node.Owner) { _masterController = null; } } @@ -119,7 +124,7 @@ namespace Content.Server.AME // fuel > safeFuelLimit: Slow damage. Can safely run at this level for burst periods if the engine is small and someone is keeping an eye on it. if (_random.Prob(0.5f)) instability = 1; - // overloadVsSizeResult > 5: + // overloadVsSizeResult > 5: if (overloadVsSizeResult > 5) instability = 5; // overloadVsSizeResult > 10: This will explode in at most 5 injections. diff --git a/Content.Server/AME/Components/AMEControllerComponent.cs b/Content.Server/AME/Components/AMEControllerComponent.cs index b6e71fd1c2..ea65e81f94 100644 --- a/Content.Server/AME/Components/AMEControllerComponent.cs +++ b/Content.Server/AME/Components/AMEControllerComponent.cs @@ -33,7 +33,7 @@ namespace Content.Server.AME.Components private AppearanceComponent? _appearance; private PowerSupplierComponent? _powerSupplier; - private bool Powered => !Owner.TryGetComponent(out PowerReceiverComponent? receiver) || receiver.Powered; + private bool Powered => !Owner.TryGetComponent(out ApcPowerReceiverComponent? receiver) || receiver.Powered; [ViewVariables] private int _stability = 100; @@ -92,7 +92,7 @@ namespace Content.Server.AME.Components if(fuelJar != null && _powerSupplier != null) { var availableInject = fuelJar.FuelAmount >= InjectionAmount ? InjectionAmount : fuelJar.FuelAmount; - _powerSupplier.SupplyRate = group.InjectFuel(availableInject, out var overloading); + _powerSupplier.MaxSupply = group.InjectFuel(availableInject, out var overloading); fuelJar.FuelAmount -= availableInject; InjectSound(overloading); UpdateUserInterface(); @@ -252,7 +252,7 @@ namespace Content.Server.AME.Components _appearance?.SetData(AMEControllerVisuals.DisplayState, "off"); if (_powerSupplier != null) { - _powerSupplier.SupplyRate = 0; + _powerSupplier.MaxSupply = 0; } } _injecting = !_injecting; diff --git a/Content.Server/APC/ApcNetNodeGroup.cs b/Content.Server/APC/ApcNetNodeGroup.cs deleted file mode 100644 index 8b2bae38b8..0000000000 --- a/Content.Server/APC/ApcNetNodeGroup.cs +++ /dev/null @@ -1,223 +0,0 @@ -#nullable enable -using System.Collections.Generic; -using System.Linq; -using Content.Server.APC.Components; -using Content.Server.Battery.Components; -using Content.Server.NodeContainer.NodeGroups; -using Content.Server.NodeContainer.Nodes; -using Content.Server.Power.Components; -using Robust.Shared.GameObjects; -using Robust.Shared.Map; -using Robust.Shared.Utility; -using Robust.Shared.ViewVariables; - -namespace Content.Server.APC -{ - public interface IApcNet - { - bool Powered { get; } - - void AddApc(ApcComponent apc); - - void RemoveApc(ApcComponent apc); - - void AddPowerProvider(PowerProviderComponent provider); - - void RemovePowerProvider(PowerProviderComponent provider); - - void UpdatePowerProviderReceivers(PowerProviderComponent provider, int oldLoad, int newLoad); - - void Update(float frameTime); - - GridId? GridId { get; } - } - - [NodeGroup(NodeGroupID.Apc)] - public class ApcNetNodeGroup : BaseNetConnectorNodeGroup, IApcNet - { - [ViewVariables] - private readonly Dictionary _apcBatteries = new(); - - [ViewVariables] - private readonly List _providers = new(); - - [ViewVariables] - public bool Powered { get => _powered; private set => SetPowered(value); } - private bool _powered = false; - - //Debug property - [ViewVariables] - private int TotalReceivers => _providers.SelectMany(provider => provider.LinkedReceivers).Count(); - - [ViewVariables] - private int TotalPowerReceiverLoad { get => _totalPowerReceiverLoad; set => SetTotalPowerReceiverLoad(value); } - - GridId? IApcNet.GridId => GridId; - - private int _totalPowerReceiverLoad = 0; - - public static readonly IApcNet NullNet = new NullApcNet(); - - public override void Initialize(Node sourceNode) - { - base.Initialize(sourceNode); - - EntitySystem.Get().AddApcNet(this); - } - - protected override void AfterRemake(IEnumerable newGroups) - { - base.AfterRemake(newGroups); - - foreach (var group in newGroups) - { - if (group is not ApcNetNodeGroup apcNet) - continue; - - apcNet.Powered = Powered; - } - - StopUpdates(); - } - - protected override void OnGivingNodesForCombine(INodeGroup newGroup) - { - base.OnGivingNodesForCombine(newGroup); - - if (newGroup is ApcNetNodeGroup apcNet) - { - apcNet.Powered = Powered; - } - - StopUpdates(); - } - - private void StopUpdates() - { - EntitySystem.Get().RemoveApcNet(this); - } - - #region IApcNet Methods - - protected override void SetNetConnectorNet(BaseApcNetComponent netConnectorComponent) - { - netConnectorComponent.Net = this; - } - - public void AddApc(ApcComponent apc) - { - if (!apc.Owner.TryGetComponent(out BatteryComponent? battery)) - { - return; - } - - _apcBatteries.Add(apc, battery); - } - - public void RemoveApc(ApcComponent apc) - { - _apcBatteries.Remove(apc); - } - - public void AddPowerProvider(PowerProviderComponent provider) - { - _providers.Add(provider); - - foreach (var receiver in provider.LinkedReceivers) - { - TotalPowerReceiverLoad += receiver.Load; - } - } - - public void RemovePowerProvider(PowerProviderComponent provider) - { - _providers.Remove(provider); - - foreach (var receiver in provider.LinkedReceivers) - { - TotalPowerReceiverLoad -= receiver.Load; - } - } - - public void UpdatePowerProviderReceivers(PowerProviderComponent provider, int oldLoad, int newLoad) - { - DebugTools.Assert(_providers.Contains(provider)); - TotalPowerReceiverLoad -= oldLoad; - TotalPowerReceiverLoad += newLoad; - } - - public void Update(float frameTime) - { - var remainingPowerNeeded = TotalPowerReceiverLoad * frameTime; - - foreach (var apcBatteryPair in _apcBatteries) - { - var apc = apcBatteryPair.Key; - - if (!apc.MainBreakerEnabled) - continue; - - var battery = apcBatteryPair.Value; - - if (battery.CurrentCharge < remainingPowerNeeded) - { - remainingPowerNeeded -= battery.CurrentCharge; - battery.CurrentCharge = 0; - } - else - { - battery.UseCharge(remainingPowerNeeded); - remainingPowerNeeded = 0; - } - - if (remainingPowerNeeded == 0) - break; - } - - Powered = remainingPowerNeeded == 0; - } - - private void SetPowered(bool powered) - { - if (powered != Powered) - { - _powered = powered; - PoweredChanged(); - } - } - - private void PoweredChanged() - { - foreach (var provider in _providers) - { - foreach (var receiver in provider.LinkedReceivers) - { - receiver.ApcPowerChanged(); - } - } - } - - private void SetTotalPowerReceiverLoad(int totalPowerReceiverLoad) - { - DebugTools.Assert(totalPowerReceiverLoad >= 0, $"Expected load equal to or greater than 0, was {totalPowerReceiverLoad}"); - _totalPowerReceiverLoad = totalPowerReceiverLoad; - } - - #endregion - - private class NullApcNet : IApcNet - { - /// - /// It is important that this returns false, so s with a have no power. - /// - public bool Powered => false; - public GridId? GridId => default; - public void AddApc(ApcComponent apc) { } - public void AddPowerProvider(PowerProviderComponent provider) { } - public void RemoveApc(ApcComponent apc) { } - public void RemovePowerProvider(PowerProviderComponent provider) { } - public void UpdatePowerProviderReceivers(PowerProviderComponent provider, int oldLoad, int newLoad) { } - public void Update(float frameTime) { } - } - } -} diff --git a/Content.Server/APC/ApcNetSystem.cs b/Content.Server/APC/ApcNetSystem.cs deleted file mode 100644 index ad19216340..0000000000 --- a/Content.Server/APC/ApcNetSystem.cs +++ /dev/null @@ -1,52 +0,0 @@ -#nullable enable -using System.Collections.Generic; -using Content.Shared.GameTicking; -using JetBrains.Annotations; -using Robust.Shared.GameObjects; -using Robust.Shared.IoC; -using Robust.Shared.Timing; - -namespace Content.Server.APC -{ - [UsedImplicitly] - internal sealed class ApcNetSystem : EntitySystem - { - [Dependency] private readonly IPauseManager _pauseManager = default!; - - private HashSet _apcNets = new(); - - public override void Initialize() - { - base.Initialize(); - - SubscribeLocalEvent(Reset); - } - - public override void Update(float frameTime) - { - foreach (var apcNet in _apcNets) - { - var gridId = apcNet.GridId; - if (gridId != null && !_pauseManager.IsGridPaused(gridId.Value)) - apcNet.Update(frameTime); - } - } - - public void AddApcNet(ApcNetNodeGroup apcNet) - { - _apcNets.Add(apcNet); - } - - public void RemoveApcNet(ApcNetNodeGroup apcNet) - { - _apcNets.Remove(apcNet); - } - - public void Reset(RoundRestartCleanupEvent ev) - { - // NodeGroupSystem does not remake ApcNets affected during restarting until a frame later, - // when their grid is invalid. So, we are clearing them on round restart. - _apcNets.Clear(); - } - } -} diff --git a/Content.Server/APC/Components/BaseApcNetComponent.cs b/Content.Server/APC/Components/BaseApcNetComponent.cs deleted file mode 100644 index 51fa8b3c43..0000000000 --- a/Content.Server/APC/Components/BaseApcNetComponent.cs +++ /dev/null @@ -1,10 +0,0 @@ -#nullable enable -using Content.Server.Power.Components; - -namespace Content.Server.APC.Components -{ - public abstract class BaseApcNetComponent : BaseNetConnectorComponent - { - protected override IApcNet NullNet => ApcNetNodeGroup.NullNet; - } -} diff --git a/Content.Server/Access/Components/IdCardConsoleComponent.cs b/Content.Server/Access/Components/IdCardConsoleComponent.cs index 5debc68a1a..f9de78f2ac 100644 --- a/Content.Server/Access/Components/IdCardConsoleComponent.cs +++ b/Content.Server/Access/Components/IdCardConsoleComponent.cs @@ -34,7 +34,7 @@ namespace Content.Server.Access.Components private ContainerSlot _targetIdContainer = default!; [ViewVariables] private BoundUserInterface? UserInterface => Owner.GetUIOrNull(IdCardConsoleUiKey.Key); - [ViewVariables] private bool Powered => !Owner.TryGetComponent(out PowerReceiverComponent? receiver) || receiver.Powered; + [ViewVariables] private bool Powered => !Owner.TryGetComponent(out ApcPowerReceiverComponent? receiver) || receiver.Powered; private bool PrivilegedIDEmpty => _privilegedIdContainer.ContainedEntities.Count < 1; private bool TargetIDEmpty => _targetIdContainer.ContainedEntities.Count < 1; diff --git a/Content.Server/Arcade/Components/BlockGameArcadeComponent.cs b/Content.Server/Arcade/Components/BlockGameArcadeComponent.cs index 5dce5324bf..6634ae5d9a 100644 --- a/Content.Server/Arcade/Components/BlockGameArcadeComponent.cs +++ b/Content.Server/Arcade/Components/BlockGameArcadeComponent.cs @@ -27,7 +27,7 @@ namespace Content.Server.Arcade.Components public override string Name => "BlockGameArcade"; public override uint? NetID => ContentNetIDs.BLOCKGAME_ARCADE; - [ComponentDependency] private readonly PowerReceiverComponent? _powerReceiverComponent = default!; + [ComponentDependency] private readonly ApcPowerReceiverComponent? _powerReceiverComponent = default!; private bool Powered => _powerReceiverComponent?.Powered ?? false; private BoundUserInterface? UserInterface => Owner.GetUIOrNull(BlockGameUiKey.Key); diff --git a/Content.Server/Arcade/Components/SpaceVillainArcadeComponent.cs b/Content.Server/Arcade/Components/SpaceVillainArcadeComponent.cs index 40f337896a..d2aae64b6a 100644 --- a/Content.Server/Arcade/Components/SpaceVillainArcadeComponent.cs +++ b/Content.Server/Arcade/Components/SpaceVillainArcadeComponent.cs @@ -3,7 +3,7 @@ using System.Collections.Generic; using Content.Server.Power.Components; using Content.Server.UserInterface; using Content.Server.VendingMachines; -using Content.Server.Wires.Components; +using Content.Server.WireHacking; using Content.Shared.ActionBlocker; using Content.Shared.Arcade; using Content.Shared.Interaction; @@ -28,7 +28,7 @@ namespace Content.Server.Arcade.Components { [Dependency] private readonly IRobustRandom _random = null!; - [ComponentDependency] private readonly PowerReceiverComponent? _powerReceiverComponent = default!; + [ComponentDependency] private readonly ApcPowerReceiverComponent? _powerReceiverComponent = default!; [ComponentDependency] private readonly WiresComponent? _wiresComponent = default!; private bool Powered => _powerReceiverComponent != null && _powerReceiverComponent.Powered; diff --git a/Content.Server/Atmos/Components/BaseComputerUserInterfaceComponent.cs b/Content.Server/Atmos/Components/BaseComputerUserInterfaceComponent.cs index 195b1c2623..8023127069 100644 --- a/Content.Server/Atmos/Components/BaseComputerUserInterfaceComponent.cs +++ b/Content.Server/Atmos/Components/BaseComputerUserInterfaceComponent.cs @@ -20,7 +20,7 @@ namespace Content.Server.GameObjects.Components protected readonly object UserInterfaceKey; [ViewVariables] protected BoundUserInterface? UserInterface => Owner.GetUIOrNull(UserInterfaceKey); - [ViewVariables] public bool Powered => !Owner.TryGetComponent(out PowerReceiverComponent? receiver) || receiver.Powered; + [ViewVariables] public bool Powered => !Owner.TryGetComponent(out ApcPowerReceiverComponent? receiver) || receiver.Powered; public BaseComputerUserInterfaceComponent(object key) { diff --git a/Content.Server/Atmos/Components/GasTankComponent.cs b/Content.Server/Atmos/Components/GasTankComponent.cs index add95c5905..d30494b082 100644 --- a/Content.Server/Atmos/Components/GasTankComponent.cs +++ b/Content.Server/Atmos/Components/GasTankComponent.cs @@ -4,9 +4,9 @@ using System; using Content.Server.Atmos.EntitySystems; using Content.Server.Body.Respiratory; using Content.Server.Explosion; -using Content.Server.GameObjects.Components.NodeContainer.Nodes; using Content.Server.Interfaces; using Content.Server.NodeContainer; +using Content.Server.NodeContainer.Nodes; using Content.Server.UserInterface; using Content.Shared.ActionBlocker; using Content.Shared.Actions; diff --git a/Content.Server/Atmos/EntitySystems/AtmosphereSystem.cs b/Content.Server/Atmos/EntitySystems/AtmosphereSystem.cs index f7bdf1839b..2094d2a52e 100644 --- a/Content.Server/Atmos/EntitySystems/AtmosphereSystem.cs +++ b/Content.Server/Atmos/EntitySystems/AtmosphereSystem.cs @@ -1,6 +1,7 @@ using System; using System.Diagnostics.CodeAnalysis; using Content.Server.Atmos.Components; +using Content.Server.NodeContainer.EntitySystems; using Content.Shared.Atmos.EntitySystems; using Content.Shared.Maps; using JetBrains.Annotations; @@ -33,6 +34,8 @@ namespace Content.Server.Atmos.EntitySystems { base.Initialize(); + UpdatesAfter.Add(typeof(NodeGroupSystem)); + InitializeGases(); InitializeCVars(); diff --git a/Content.Server/Atmos/Piping/Binary/Components/GasValveComponent.cs b/Content.Server/Atmos/Piping/Binary/Components/GasValveComponent.cs index 6a239c0700..7a20b63509 100644 --- a/Content.Server/Atmos/Piping/Binary/Components/GasValveComponent.cs +++ b/Content.Server/Atmos/Piping/Binary/Components/GasValveComponent.cs @@ -1,5 +1,5 @@ -using Content.Server.GameObjects.Components.NodeContainer.Nodes; using Content.Server.NodeContainer; +using Content.Server.NodeContainer.Nodes; using Content.Shared.ActionBlocker; using Content.Shared.Interaction; using Content.Shared.Interaction.Helpers; diff --git a/Content.Server/Atmos/Piping/Binary/EntitySystems/GasPassiveGateSystem.cs b/Content.Server/Atmos/Piping/Binary/EntitySystems/GasPassiveGateSystem.cs index dc825a48d6..9d27211ad2 100644 --- a/Content.Server/Atmos/Piping/Binary/EntitySystems/GasPassiveGateSystem.cs +++ b/Content.Server/Atmos/Piping/Binary/EntitySystems/GasPassiveGateSystem.cs @@ -1,8 +1,8 @@ using System; using Content.Server.Atmos.Piping.Binary.Components; using Content.Server.Atmos.Piping.Components; -using Content.Server.GameObjects.Components.NodeContainer.Nodes; using Content.Server.NodeContainer; +using Content.Server.NodeContainer.Nodes; using Content.Shared.Atmos; using JetBrains.Annotations; using Robust.Shared.GameObjects; diff --git a/Content.Server/Atmos/Piping/Binary/EntitySystems/GasPressurePumpSystem.cs b/Content.Server/Atmos/Piping/Binary/EntitySystems/GasPressurePumpSystem.cs index 5e616ea68a..dc38b4da76 100644 --- a/Content.Server/Atmos/Piping/Binary/EntitySystems/GasPressurePumpSystem.cs +++ b/Content.Server/Atmos/Piping/Binary/EntitySystems/GasPressurePumpSystem.cs @@ -1,7 +1,7 @@ using Content.Server.Atmos.Piping.Binary.Components; using Content.Server.Atmos.Piping.Components; -using Content.Server.GameObjects.Components.NodeContainer.Nodes; using Content.Server.NodeContainer; +using Content.Server.NodeContainer.Nodes; using Content.Shared.Atmos; using Content.Shared.Atmos.Piping; using JetBrains.Annotations; diff --git a/Content.Server/Atmos/Piping/Binary/EntitySystems/GasVolumePumpSystem.cs b/Content.Server/Atmos/Piping/Binary/EntitySystems/GasVolumePumpSystem.cs index a157094c88..48e253167b 100644 --- a/Content.Server/Atmos/Piping/Binary/EntitySystems/GasVolumePumpSystem.cs +++ b/Content.Server/Atmos/Piping/Binary/EntitySystems/GasVolumePumpSystem.cs @@ -1,7 +1,7 @@ using Content.Server.Atmos.Piping.Binary.Components; using Content.Server.Atmos.Piping.Components; -using Content.Server.GameObjects.Components.NodeContainer.Nodes; using Content.Server.NodeContainer; +using Content.Server.NodeContainer.Nodes; using JetBrains.Annotations; using Robust.Shared.GameObjects; using Robust.Shared.IoC; diff --git a/Content.Server/Atmos/Piping/EntitySystems/AtmosUnsafeUnanchorSystem.cs b/Content.Server/Atmos/Piping/EntitySystems/AtmosUnsafeUnanchorSystem.cs index b94441e5b4..2f63c28b59 100644 --- a/Content.Server/Atmos/Piping/EntitySystems/AtmosUnsafeUnanchorSystem.cs +++ b/Content.Server/Atmos/Piping/EntitySystems/AtmosUnsafeUnanchorSystem.cs @@ -1,8 +1,8 @@ using Content.Server.Atmos.EntitySystems; using Content.Server.Atmos.Piping.Components; using Content.Server.Construction.Components; -using Content.Server.GameObjects.Components.NodeContainer.Nodes; using Content.Server.NodeContainer; +using Content.Server.NodeContainer.Nodes; using Content.Shared.Atmos; using Content.Shared.Notification.Managers; using JetBrains.Annotations; diff --git a/Content.Server/Atmos/Piping/Trinary/EntitySystems/GasFilterSystem.cs b/Content.Server/Atmos/Piping/Trinary/EntitySystems/GasFilterSystem.cs index 2b543a6a82..a2db87f7bc 100644 --- a/Content.Server/Atmos/Piping/Trinary/EntitySystems/GasFilterSystem.cs +++ b/Content.Server/Atmos/Piping/Trinary/EntitySystems/GasFilterSystem.cs @@ -1,7 +1,7 @@ using Content.Server.Atmos.Piping.Components; using Content.Server.Atmos.Piping.Trinary.Components; -using Content.Server.GameObjects.Components.NodeContainer.Nodes; using Content.Server.NodeContainer; +using Content.Server.NodeContainer.Nodes; using Content.Shared.Atmos; using JetBrains.Annotations; using Robust.Shared.GameObjects; diff --git a/Content.Server/Atmos/Piping/Trinary/EntitySystems/GasMixerSystem.cs b/Content.Server/Atmos/Piping/Trinary/EntitySystems/GasMixerSystem.cs index f2b829854f..3e886d6773 100644 --- a/Content.Server/Atmos/Piping/Trinary/EntitySystems/GasMixerSystem.cs +++ b/Content.Server/Atmos/Piping/Trinary/EntitySystems/GasMixerSystem.cs @@ -1,8 +1,8 @@ using System; using Content.Server.Atmos.Piping.Components; using Content.Server.Atmos.Piping.Trinary.Components; -using Content.Server.GameObjects.Components.NodeContainer.Nodes; using Content.Server.NodeContainer; +using Content.Server.NodeContainer.Nodes; using Content.Shared.Atmos; using JetBrains.Annotations; using Robust.Shared.GameObjects; diff --git a/Content.Server/Atmos/Piping/Unary/EntitySystems/GasCanisterSystem.cs b/Content.Server/Atmos/Piping/Unary/EntitySystems/GasCanisterSystem.cs index 2cfabfeb1f..d12a363475 100644 --- a/Content.Server/Atmos/Piping/Unary/EntitySystems/GasCanisterSystem.cs +++ b/Content.Server/Atmos/Piping/Unary/EntitySystems/GasCanisterSystem.cs @@ -4,9 +4,9 @@ using Content.Server.Atmos.EntitySystems; using Content.Server.Atmos.Piping.Binary.Components; using Content.Server.Atmos.Piping.Components; using Content.Server.Atmos.Piping.Unary.Components; -using Content.Server.GameObjects.Components.NodeContainer.Nodes; using Content.Server.Hands.Components; using Content.Server.NodeContainer; +using Content.Server.NodeContainer.Nodes; using Content.Server.UserInterface; using Content.Shared.ActionBlocker; using Content.Shared.Atmos; @@ -62,7 +62,7 @@ namespace Content.Server.Atmos.Piping.Unary.EntitySystems return; // Create a pipenet if we don't have one already. - portNode.TryAssignGroupIfNeeded(); + portNode.CreateSingleNetImmediate(); Get().Merge(portNode.Air, canister.InitialMixture); portNode.Air.Temperature = canister.InitialMixture.Temperature; portNode.Volume = canister.InitialMixture.Volume; @@ -90,7 +90,7 @@ namespace Content.Server.Atmos.Piping.Unary.EntitySystems } ui.SetState(new GasCanisterBoundUserInterfaceState(metadata.EntityName, portNode.Air.Pressure, - portNode.NodeGroup.Nodes.Count > 1, tankLabel, tankPressure, + portNode.NodeGroup!.Nodes.Count > 1, tankLabel, tankPressure, canister.ReleasePressure, canister.ReleaseValve, canister.MinReleasePressure, canister.MaxReleasePressure)); } diff --git a/Content.Server/Atmos/Piping/Unary/EntitySystems/GasOutletInjectorSystem.cs b/Content.Server/Atmos/Piping/Unary/EntitySystems/GasOutletInjectorSystem.cs index 187cee7b93..1d275837ea 100644 --- a/Content.Server/Atmos/Piping/Unary/EntitySystems/GasOutletInjectorSystem.cs +++ b/Content.Server/Atmos/Piping/Unary/EntitySystems/GasOutletInjectorSystem.cs @@ -1,7 +1,7 @@ using Content.Server.Atmos.Piping.Components; using Content.Server.Atmos.Piping.Unary.Components; -using Content.Server.GameObjects.Components.NodeContainer.Nodes; using Content.Server.NodeContainer; +using Content.Server.NodeContainer.Nodes; using Content.Shared.Atmos; using JetBrains.Annotations; using Robust.Shared.GameObjects; diff --git a/Content.Server/Atmos/Piping/Unary/EntitySystems/GasPassiveVentSystem.cs b/Content.Server/Atmos/Piping/Unary/EntitySystems/GasPassiveVentSystem.cs index c04d3c44ad..e984bd3515 100644 --- a/Content.Server/Atmos/Piping/Unary/EntitySystems/GasPassiveVentSystem.cs +++ b/Content.Server/Atmos/Piping/Unary/EntitySystems/GasPassiveVentSystem.cs @@ -1,8 +1,8 @@ using System; using Content.Server.Atmos.Piping.Components; using Content.Server.Atmos.Piping.Unary.Components; -using Content.Server.GameObjects.Components.NodeContainer.Nodes; using Content.Server.NodeContainer; +using Content.Server.NodeContainer.Nodes; using Content.Shared.Atmos; using JetBrains.Annotations; using Robust.Shared.GameObjects; diff --git a/Content.Server/Atmos/Piping/Unary/EntitySystems/GasPortableSystem.cs b/Content.Server/Atmos/Piping/Unary/EntitySystems/GasPortableSystem.cs index d675ad21c6..4ee5c723fa 100644 --- a/Content.Server/Atmos/Piping/Unary/EntitySystems/GasPortableSystem.cs +++ b/Content.Server/Atmos/Piping/Unary/EntitySystems/GasPortableSystem.cs @@ -2,8 +2,8 @@ using System.Diagnostics.CodeAnalysis; using Content.Server.Atmos.Piping.Binary.Components; using Content.Server.Atmos.Piping.Unary.Components; using Content.Server.Construction.Components; -using Content.Server.GameObjects.Components.NodeContainer.Nodes; using Content.Server.NodeContainer; +using Content.Server.NodeContainer.Nodes; using Content.Shared.Atmos.Piping.Unary.Components; using JetBrains.Annotations; using Robust.Server.GameObjects; diff --git a/Content.Server/Atmos/Piping/Unary/EntitySystems/GasThermoMachineSystem.cs b/Content.Server/Atmos/Piping/Unary/EntitySystems/GasThermoMachineSystem.cs index 43f001d186..748700d13e 100644 --- a/Content.Server/Atmos/Piping/Unary/EntitySystems/GasThermoMachineSystem.cs +++ b/Content.Server/Atmos/Piping/Unary/EntitySystems/GasThermoMachineSystem.cs @@ -1,8 +1,8 @@ using Content.Server.Atmos.EntitySystems; using Content.Server.Atmos.Piping.Components; using Content.Server.Atmos.Piping.Unary.Components; -using Content.Server.GameObjects.Components.NodeContainer.Nodes; using Content.Server.NodeContainer; +using Content.Server.NodeContainer.Nodes; using Content.Shared.Atmos.Piping; using JetBrains.Annotations; using Robust.Server.GameObjects; diff --git a/Content.Server/Atmos/Piping/Unary/EntitySystems/GasVentPumpSystem.cs b/Content.Server/Atmos/Piping/Unary/EntitySystems/GasVentPumpSystem.cs index a310e4a225..16046fd61e 100644 --- a/Content.Server/Atmos/Piping/Unary/EntitySystems/GasVentPumpSystem.cs +++ b/Content.Server/Atmos/Piping/Unary/EntitySystems/GasVentPumpSystem.cs @@ -1,8 +1,8 @@ using System; using Content.Server.Atmos.Piping.Components; using Content.Server.Atmos.Piping.Unary.Components; -using Content.Server.GameObjects.Components.NodeContainer.Nodes; using Content.Server.NodeContainer; +using Content.Server.NodeContainer.Nodes; using Content.Shared.Atmos; using Content.Shared.Atmos.Visuals; using JetBrains.Annotations; diff --git a/Content.Server/Atmos/Piping/Unary/EntitySystems/GasVentScrubberSystem.cs b/Content.Server/Atmos/Piping/Unary/EntitySystems/GasVentScrubberSystem.cs index 17559dbb4b..262924c2b6 100644 --- a/Content.Server/Atmos/Piping/Unary/EntitySystems/GasVentScrubberSystem.cs +++ b/Content.Server/Atmos/Piping/Unary/EntitySystems/GasVentScrubberSystem.cs @@ -2,8 +2,8 @@ using System; using Content.Server.Atmos.EntitySystems; using Content.Server.Atmos.Piping.Components; using Content.Server.Atmos.Piping.Unary.Components; -using Content.Server.GameObjects.Components.NodeContainer.Nodes; using Content.Server.NodeContainer; +using Content.Server.NodeContainer.Nodes; using Content.Shared.Atmos; using Content.Shared.Atmos.Piping.Unary.Visuals; using JetBrains.Annotations; diff --git a/Content.Server/BarSign/BarSignComponent.cs b/Content.Server/BarSign/BarSignComponent.cs index 1a673d1186..a0b953dc22 100644 --- a/Content.Server/BarSign/BarSignComponent.cs +++ b/Content.Server/BarSign/BarSignComponent.cs @@ -35,7 +35,7 @@ namespace Content.Server.BarSign } } - private bool Powered => !Owner.TryGetComponent(out PowerReceiverComponent? receiver) || receiver.Powered; + private bool Powered => !Owner.TryGetComponent(out ApcPowerReceiverComponent? receiver) || receiver.Powered; private void UpdateSignInfo() { diff --git a/Content.Server/Battery/EntitySystems/BatteryDischargerSystem.cs b/Content.Server/Battery/EntitySystems/BatteryDischargerSystem.cs deleted file mode 100644 index 37873eaa61..0000000000 --- a/Content.Server/Battery/EntitySystems/BatteryDischargerSystem.cs +++ /dev/null @@ -1,19 +0,0 @@ -#nullable enable -using Content.Server.Power.Components; -using JetBrains.Annotations; -using Robust.Shared.GameObjects; - -namespace Content.Server.Battery.EntitySystems -{ - [UsedImplicitly] - internal sealed class BatteryDischargerSystem : EntitySystem - { - public override void Update(float frameTime) - { - foreach (var comp in ComponentManager.EntityQuery(false)) - { - comp.Update(frameTime); - } - } - } -} diff --git a/Content.Server/Battery/EntitySystems/BatteryStorageSystem.cs b/Content.Server/Battery/EntitySystems/BatteryStorageSystem.cs deleted file mode 100644 index c32b58e725..0000000000 --- a/Content.Server/Battery/EntitySystems/BatteryStorageSystem.cs +++ /dev/null @@ -1,19 +0,0 @@ -#nullable enable -using Content.Server.Power.Components; -using JetBrains.Annotations; -using Robust.Shared.GameObjects; - -namespace Content.Server.Battery.EntitySystems -{ - [UsedImplicitly] - internal sealed class BatteryStorageSystem : EntitySystem - { - public override void Update(float frameTime) - { - foreach (var comp in ComponentManager.EntityQuery(false)) - { - comp.Update(frameTime); - } - } - } -} diff --git a/Content.Server/Battery/EntitySystems/BatterySystem.cs b/Content.Server/Battery/EntitySystems/BatterySystem.cs deleted file mode 100644 index ace6084dce..0000000000 --- a/Content.Server/Battery/EntitySystems/BatterySystem.cs +++ /dev/null @@ -1,19 +0,0 @@ -#nullable enable -using Content.Server.Battery.Components; -using JetBrains.Annotations; -using Robust.Shared.GameObjects; - -namespace Content.Server.Battery.EntitySystems -{ - [UsedImplicitly] - public class BatterySystem : EntitySystem - { - public override void Update(float frameTime) - { - foreach (var comp in ComponentManager.EntityQuery(true)) - { - comp.OnUpdate(frameTime); - } - } - } -} diff --git a/Content.Server/Botany/Components/SeedExtractorComponent.cs b/Content.Server/Botany/Components/SeedExtractorComponent.cs index 160fdad86a..c195c4f869 100644 --- a/Content.Server/Botany/Components/SeedExtractorComponent.cs +++ b/Content.Server/Botany/Components/SeedExtractorComponent.cs @@ -14,7 +14,7 @@ namespace Content.Server.Botany.Components [RegisterComponent] public class SeedExtractorComponent : Component, IInteractUsing { - [ComponentDependency] private readonly PowerReceiverComponent? _powerReceiver = default!; + [ComponentDependency] private readonly ApcPowerReceiverComponent? _powerReceiver = default!; [Dependency] private readonly IRobustRandom _random = default!; diff --git a/Content.Server/Cargo/Components/CargoConsoleComponent.cs b/Content.Server/Cargo/Components/CargoConsoleComponent.cs index 3adcf4f9bb..4a53d52b48 100644 --- a/Content.Server/Cargo/Components/CargoConsoleComponent.cs +++ b/Content.Server/Cargo/Components/CargoConsoleComponent.cs @@ -59,7 +59,7 @@ namespace Content.Server.Cargo.Components [DataField("requestOnly")] private bool _requestOnly = false; - private bool Powered => !Owner.TryGetComponent(out PowerReceiverComponent? receiver) || receiver.Powered; + private bool Powered => !Owner.TryGetComponent(out ApcPowerReceiverComponent? receiver) || receiver.Powered; private CargoConsoleSystem _cargoConsoleSystem = default!; [ViewVariables] private BoundUserInterface? UserInterface => Owner.GetUIOrNull(CargoConsoleUiKey.Key); @@ -171,7 +171,7 @@ namespace Content.Server.Cargo.Components { foreach (IEntity entity in enumerator) { - if (entity.HasComponent() && entity.TryGetComponent(out var powerReceiver) && powerReceiver.Powered) + if (entity.HasComponent() && entity.TryGetComponent(out var powerReceiver) && powerReceiver.Powered) { cargoTelepad = entity; break; diff --git a/Content.Server/Cargo/Components/CargoTelepadComponent.cs b/Content.Server/Cargo/Components/CargoTelepadComponent.cs index 1d87a7cf2b..ba31eb3d13 100644 --- a/Content.Server/Cargo/Components/CargoTelepadComponent.cs +++ b/Content.Server/Cargo/Components/CargoTelepadComponent.cs @@ -43,14 +43,14 @@ namespace Content.Server.Cargo.Components { if (args.Powered && _currentState == CargoTelepadState.Unpowered) { _currentState = CargoTelepadState.Idle; - if(Owner.TryGetComponent(out var spriteComponent)) + if(Owner.TryGetComponent(out var spriteComponent) && spriteComponent.LayerCount > 0) spriteComponent.LayerSetState(0, "idle"); TeleportLoop(); } else if (!args.Powered) { _currentState = CargoTelepadState.Unpowered; - if (Owner.TryGetComponent(out var spriteComponent)) + if (Owner.TryGetComponent(out var spriteComponent) && spriteComponent.LayerCount > 0) spriteComponent.LayerSetState(0, "offline"); } } @@ -59,14 +59,14 @@ namespace Content.Server.Cargo.Components if (_currentState == CargoTelepadState.Idle && _teleportQueue.Count > 0) { _currentState = CargoTelepadState.Charging; - if (Owner.TryGetComponent(out var spriteComponent)) + if (Owner.TryGetComponent(out var spriteComponent) && spriteComponent.LayerCount > 0) spriteComponent.LayerSetState(0, "idle"); Owner.SpawnTimer((int) (TeleportDelay * 1000), () => { if (!Deleted && !Owner.Deleted && _currentState == CargoTelepadState.Charging && _teleportQueue.Count > 0) { _currentState = CargoTelepadState.Teleporting; - if (Owner.TryGetComponent(out var spriteComponent)) + if (Owner.TryGetComponent(out var spriteComponent) && spriteComponent.LayerCount > 0) spriteComponent.LayerSetState(0, "beam"); Owner.SpawnTimer((int) (TeleportDuration * 1000), () => { @@ -75,7 +75,7 @@ namespace Content.Server.Cargo.Components SoundSystem.Play(Filter.Pvs(Owner), "/Audio/Machines/phasein.ogg", Owner, AudioParams.Default.WithVolume(-8f)); Owner.EntityManager.SpawnEntity(_teleportQueue[0].Product, Owner.Transform.Coordinates); _teleportQueue.RemoveAt(0); - if (Owner.TryGetComponent(out var spriteComponent)) + if (Owner.TryGetComponent(out var spriteComponent) && spriteComponent.LayerCount > 0) spriteComponent.LayerSetState(0, "idle"); _currentState = CargoTelepadState.Idle; TeleportLoop(); diff --git a/Content.Server/Chemistry/Components/ChemMasterComponent.cs b/Content.Server/Chemistry/Components/ChemMasterComponent.cs index b06c5c9479..7ae9b4193f 100644 --- a/Content.Server/Chemistry/Components/ChemMasterComponent.cs +++ b/Content.Server/Chemistry/Components/ChemMasterComponent.cs @@ -40,7 +40,7 @@ namespace Content.Server.Chemistry.Components [ViewVariables] private bool HasBeaker => _beakerContainer.ContainedEntity != null; [ViewVariables] private bool _bufferModeTransfer = true; - [ViewVariables] private bool Powered => !Owner.TryGetComponent(out PowerReceiverComponent? receiver) || receiver.Powered; + [ViewVariables] private bool Powered => !Owner.TryGetComponent(out ApcPowerReceiverComponent? receiver) || receiver.Powered; [ViewVariables] private readonly Solution BufferSolution = new(); diff --git a/Content.Server/Chemistry/Components/ReagentDispenserComponent.cs b/Content.Server/Chemistry/Components/ReagentDispenserComponent.cs index 66c31a9357..938f009b8e 100644 --- a/Content.Server/Chemistry/Components/ReagentDispenserComponent.cs +++ b/Content.Server/Chemistry/Components/ReagentDispenserComponent.cs @@ -51,7 +51,7 @@ namespace Content.Server.Chemistry.Components [ViewVariables] private ReagentUnit _dispenseAmount = ReagentUnit.New(10); [UsedImplicitly] [ViewVariables] private SolutionContainerComponent? Solution => _beakerContainer.ContainedEntity?.GetComponent(); - [ViewVariables] private bool Powered => !Owner.TryGetComponent(out PowerReceiverComponent? receiver) || receiver.Powered; + [ViewVariables] private bool Powered => !Owner.TryGetComponent(out ApcPowerReceiverComponent? receiver) || receiver.Powered; [ViewVariables] private BoundUserInterface? UserInterface => Owner.GetUIOrNull(ReagentDispenserUiKey.Key); diff --git a/Content.Server/Cloning/CloningSystem.cs b/Content.Server/Cloning/CloningSystem.cs index 0e11d02f38..4622ae660b 100644 --- a/Content.Server/Cloning/CloningSystem.cs +++ b/Content.Server/Cloning/CloningSystem.cs @@ -74,7 +74,7 @@ namespace Content.Server.Cloning public override void Update(float frameTime) { - foreach (var (cloning, power) in ComponentManager.EntityQuery(true)) + foreach (var (cloning, power) in ComponentManager.EntityQuery(true)) { if (cloning.UiKnownPowerState != power.Powered) { diff --git a/Content.Server/Cloning/Components/CloningPodComponent.cs b/Content.Server/Cloning/Components/CloningPodComponent.cs index 3b7f81e28c..fba96c8860 100644 --- a/Content.Server/Cloning/Components/CloningPodComponent.cs +++ b/Content.Server/Cloning/Components/CloningPodComponent.cs @@ -26,7 +26,7 @@ namespace Content.Server.Cloning.Components [Dependency] private readonly EuiManager _euiManager = null!; [ViewVariables] - public bool Powered => !Owner.TryGetComponent(out PowerReceiverComponent? receiver) || receiver.Powered; + public bool Powered => !Owner.TryGetComponent(out ApcPowerReceiverComponent? receiver) || receiver.Powered; [ViewVariables] public BoundUserInterface? UserInterface => diff --git a/Content.Server/Communications/CommunicationsConsoleComponent.cs b/Content.Server/Communications/CommunicationsConsoleComponent.cs index 4ed0b34b7b..cf0b768e78 100644 --- a/Content.Server/Communications/CommunicationsConsoleComponent.cs +++ b/Content.Server/Communications/CommunicationsConsoleComponent.cs @@ -25,7 +25,7 @@ namespace Content.Server.Communications { [Dependency] private readonly IGameTiming _gameTiming = default!; [Dependency] private readonly IChatManager _chatManager = default!; - private bool Powered => !Owner.TryGetComponent(out PowerReceiverComponent? receiver) || receiver.Powered; + private bool Powered => !Owner.TryGetComponent(out ApcPowerReceiverComponent? receiver) || receiver.Powered; private RoundEndSystem RoundEndSystem => EntitySystem.Get(); diff --git a/Content.Server/Computer/ComputerComponent.cs b/Content.Server/Computer/ComputerComponent.cs index 22527a5c7f..9e22500007 100644 --- a/Content.Server/Computer/ComputerComponent.cs +++ b/Content.Server/Computer/ComputerComponent.cs @@ -24,7 +24,7 @@ namespace Content.Server.Computer // Let's ensure the container manager and container are here. Owner.EnsureContainer("board", out var _); - if (Owner.TryGetComponent(out PowerReceiverComponent? powerReceiver) && + if (Owner.TryGetComponent(out ApcPowerReceiverComponent? powerReceiver) && Owner.TryGetComponent(out AppearanceComponent? appearance)) { appearance.SetData(ComputerVisuals.Powered, powerReceiver.Powered); diff --git a/Content.Server/Construction/Conditions/AllWiresCut.cs b/Content.Server/Construction/Conditions/AllWiresCut.cs index 0370978f64..0137c057fc 100644 --- a/Content.Server/Construction/Conditions/AllWiresCut.cs +++ b/Content.Server/Construction/Conditions/AllWiresCut.cs @@ -1,6 +1,6 @@ using System.Threading.Tasks; using Content.Server.GameObjects.Components; -using Content.Server.Wires.Components; +using Content.Server.WireHacking; using Content.Shared.Construction; using JetBrains.Annotations; using Robust.Shared.GameObjects; diff --git a/Content.Server/Construction/Conditions/WirePanel.cs b/Content.Server/Construction/Conditions/WirePanel.cs index a966a3c845..c443506a2e 100644 --- a/Content.Server/Construction/Conditions/WirePanel.cs +++ b/Content.Server/Construction/Conditions/WirePanel.cs @@ -1,6 +1,6 @@ using System.Threading.Tasks; using Content.Server.GameObjects.Components; -using Content.Server.Wires.Components; +using Content.Server.WireHacking; using Content.Shared.Construction; using JetBrains.Annotations; using Robust.Shared.GameObjects; diff --git a/Content.Server/Conveyor/ConveyorComponent.cs b/Content.Server/Conveyor/ConveyorComponent.cs index 55e8465154..31983f36ef 100644 --- a/Content.Server/Conveyor/ConveyorComponent.cs +++ b/Content.Server/Conveyor/ConveyorComponent.cs @@ -19,7 +19,7 @@ namespace Content.Server.Conveyor { public override string Name => "Conveyor"; - [ViewVariables] private bool Powered => !Owner.TryGetComponent(out PowerReceiverComponent? receiver) || receiver.Powered; + [ViewVariables] private bool Powered => !Owner.TryGetComponent(out ApcPowerReceiverComponent? receiver) || receiver.Powered; /// /// The angle to move entities by in relation to the owner's rotation. @@ -105,7 +105,7 @@ namespace Content.Server.Conveyor return false; } - if (Owner.TryGetComponent(out PowerReceiverComponent? receiver) && + if (Owner.TryGetComponent(out ApcPowerReceiverComponent? receiver) && !receiver.Powered) { return false; diff --git a/Content.Server/DeviceNetwork/Connections/WiredNetworkConnection.cs b/Content.Server/DeviceNetwork/Connections/WiredNetworkConnection.cs index c49abd3d61..710de4ea34 100644 --- a/Content.Server/DeviceNetwork/Connections/WiredNetworkConnection.cs +++ b/Content.Server/DeviceNetwork/Connections/WiredNetworkConnection.cs @@ -26,7 +26,7 @@ namespace Content.Server.DeviceNetwork.Connections return false; } - if (_owner.TryGetComponent(out var powerReceiver) + if (_owner.TryGetComponent(out var powerReceiver) && TryGetWireNet(powerReceiver, out var ownNet) && metadata.TryParseMetadata(WIRENET, out var senderNet)) { @@ -44,7 +44,7 @@ namespace Content.Server.DeviceNetwork.Connections return new Metadata(); } - if (_owner.TryGetComponent(out var powerReceiver) + if (_owner.TryGetComponent(out var powerReceiver) && TryGetWireNet(powerReceiver, out var net)) { var metadata = new Metadata @@ -63,16 +63,16 @@ namespace Content.Server.DeviceNetwork.Connections return payload; } - private bool TryGetWireNet(PowerReceiverComponent powerReceiver, [NotNullWhen(true)] out INodeGroup? net) + private bool TryGetWireNet(ApcPowerReceiverComponent apcPowerReceiver, [NotNullWhen(true)] out INodeGroup? net) { - if (powerReceiver.Provider is PowerProviderComponent provider && - provider.ProviderOwner.TryGetComponent(out var nodeContainer)) + var provider = apcPowerReceiver.Provider; + if (provider != null && provider.ProviderOwner.TryGetComponent(out var nodeContainer)) { var nodes = nodeContainer.Nodes; foreach (var node in nodes.Values) { - if (node.NodeGroupID == NodeGroupID.WireNet) + if (node.NodeGroupID == NodeGroupID.WireNet && node.NodeGroup != null) { net = node.NodeGroup; return true; diff --git a/Content.Server/Disposal/Mailing/DisposalMailingUnitComponent.cs b/Content.Server/Disposal/Mailing/DisposalMailingUnitComponent.cs index 806ca63dec..bc202065f2 100644 --- a/Content.Server/Disposal/Mailing/DisposalMailingUnitComponent.cs +++ b/Content.Server/Disposal/Mailing/DisposalMailingUnitComponent.cs @@ -117,7 +117,7 @@ namespace Content.Server.Disposal.Mailing [ViewVariables] public bool Powered => - !Owner.TryGetComponent(out PowerReceiverComponent? receiver) || + !Owner.TryGetComponent(out ApcPowerReceiverComponent? receiver) || receiver.Powered; [ViewVariables] @@ -372,7 +372,7 @@ namespace Content.Server.Disposal.Mailing private void TogglePower() { - if (!Owner.TryGetComponent(out PowerReceiverComponent? receiver)) + if (!Owner.TryGetComponent(out ApcPowerReceiverComponent? receiver)) { return; } diff --git a/Content.Server/Disposal/Unit/Components/DisposalUnitComponent.cs b/Content.Server/Disposal/Unit/Components/DisposalUnitComponent.cs index 7d483e4399..c040169240 100644 --- a/Content.Server/Disposal/Unit/Components/DisposalUnitComponent.cs +++ b/Content.Server/Disposal/Unit/Components/DisposalUnitComponent.cs @@ -107,7 +107,7 @@ namespace Content.Server.Disposal.Unit.Components [ViewVariables] public bool Powered => - !Owner.TryGetComponent(out PowerReceiverComponent? receiver) || + !Owner.TryGetComponent(out ApcPowerReceiverComponent? receiver) || receiver.Powered; [ViewVariables] @@ -314,7 +314,7 @@ namespace Content.Server.Disposal.Unit.Components private void TogglePower() { - if (!Owner.TryGetComponent(out PowerReceiverComponent? receiver)) + if (!Owner.TryGetComponent(out ApcPowerReceiverComponent? receiver)) { return; } diff --git a/Content.Server/Doors/Components/AirlockComponent.cs b/Content.Server/Doors/Components/AirlockComponent.cs index d810e71c0b..ae59d4a65c 100644 --- a/Content.Server/Doors/Components/AirlockComponent.cs +++ b/Content.Server/Doors/Components/AirlockComponent.cs @@ -3,7 +3,7 @@ using System; using System.Threading; using Content.Server.Power.Components; using Content.Server.VendingMachines; -using Content.Server.Wires.Components; +using Content.Server.WireHacking; using Content.Shared.Doors; using Content.Shared.Interaction; using Content.Shared.Notification; @@ -36,7 +36,7 @@ namespace Content.Server.Doors.Components private readonly SharedAppearanceComponent? _appearanceComponent = null; [ComponentDependency] - private readonly PowerReceiverComponent? _receiverComponent = null; + private readonly ApcPowerReceiverComponent? _receiverComponent = null; [ComponentDependency] private readonly WiresComponent? _wiresComponent = null; diff --git a/Content.Server/Gravity/GravityGeneratorComponent.cs b/Content.Server/Gravity/GravityGeneratorComponent.cs index 207f032697..b148562c72 100644 --- a/Content.Server/Gravity/GravityGeneratorComponent.cs +++ b/Content.Server/Gravity/GravityGeneratorComponent.cs @@ -26,7 +26,7 @@ namespace Content.Server.Gravity private GravityGeneratorStatus _status; - public bool Powered => !Owner.TryGetComponent(out PowerReceiverComponent? receiver) || receiver.Powered; + public bool Powered => !Owner.TryGetComponent(out ApcPowerReceiverComponent? receiver) || receiver.Powered; public bool SwitchedOn => _switchedOn; diff --git a/Content.Server/IoC/ServerContentIoC.cs b/Content.Server/IoC/ServerContentIoC.cs index 3a9682d0b3..e6f5d5238a 100644 --- a/Content.Server/IoC/ServerContentIoC.cs +++ b/Content.Server/IoC/ServerContentIoC.cs @@ -50,7 +50,6 @@ namespace Content.Server.IoC IoCManager.Register(); IoCManager.Register(); IoCManager.Register(); - IoCManager.Register(); IoCManager.Register(); IoCManager.Register(); IoCManager.Register(); diff --git a/Content.Server/Kitchen/Components/MicrowaveComponent.cs b/Content.Server/Kitchen/Components/MicrowaveComponent.cs index 26ff81bc50..a6453558c5 100644 --- a/Content.Server/Kitchen/Components/MicrowaveComponent.cs +++ b/Content.Server/Kitchen/Components/MicrowaveComponent.cs @@ -67,7 +67,7 @@ namespace Content.Server.Kitchen.Components [ViewVariables] private uint _currentCookTimerTime = 1; - private bool Powered => !Owner.TryGetComponent(out PowerReceiverComponent? receiver) || receiver.Powered; + private bool Powered => !Owner.TryGetComponent(out ApcPowerReceiverComponent? receiver) || receiver.Powered; private bool _hasContents => Owner.TryGetComponent(out SolutionContainerComponent? solution) && (solution.ReagentList.Count > 0 || _storage.ContainedEntities.Count > 0); private bool _uiDirty = true; private bool _lostPower = false; diff --git a/Content.Server/Kitchen/Components/ReagentGrinderComponent.cs b/Content.Server/Kitchen/Components/ReagentGrinderComponent.cs index 2ea4a7a955..4a9ff99166 100644 --- a/Content.Server/Kitchen/Components/ReagentGrinderComponent.cs +++ b/Content.Server/Kitchen/Components/ReagentGrinderComponent.cs @@ -53,7 +53,7 @@ namespace Content.Server.Kitchen.Components [ViewVariables] private bool HasBeaker => _beakerContainer.ContainedEntity != null; [ViewVariables] private BoundUserInterface? UserInterface => Owner.GetUIOrNull(ReagentGrinderUiKey.Key); - private bool Powered => !Owner.TryGetComponent(out PowerReceiverComponent? receiver) || receiver.Powered; + private bool Powered => !Owner.TryGetComponent(out ApcPowerReceiverComponent? receiver) || receiver.Powered; /// /// Should the BoundUI be told to update? diff --git a/Content.Server/Lathe/Components/LatheComponent.cs b/Content.Server/Lathe/Components/LatheComponent.cs index 0bd32992d2..f5494064b8 100644 --- a/Content.Server/Lathe/Components/LatheComponent.cs +++ b/Content.Server/Lathe/Components/LatheComponent.cs @@ -42,7 +42,7 @@ namespace Content.Server.Lathe.Components [ViewVariables] private LatheRecipePrototype? _producingRecipe; [ViewVariables] - private bool Powered => !Owner.TryGetComponent(out PowerReceiverComponent? receiver) || receiver.Powered; + private bool Powered => !Owner.TryGetComponent(out ApcPowerReceiverComponent? receiver) || receiver.Powered; private static readonly TimeSpan InsertionTime = TimeSpan.FromSeconds(0.9f); diff --git a/Content.Server/Light/Components/EmergencyLightComponent.cs b/Content.Server/Light/Components/EmergencyLightComponent.cs index 667ba5c925..f775c18e52 100644 --- a/Content.Server/Light/Components/EmergencyLightComponent.cs +++ b/Content.Server/Light/Components/EmergencyLightComponent.cs @@ -1,9 +1,9 @@ #nullable enable using System; using System.Collections.Generic; -using Content.Server.Battery.Components; using Content.Server.Power.Components; using Content.Shared.Examine; +using Content.Shared.Light.Component; using Robust.Server.GameObjects; using Robust.Shared.GameObjects; using Robust.Shared.Localization; @@ -60,7 +60,7 @@ namespace Content.Server.Light.Components /// public void UpdateState() { - if (!Owner.TryGetComponent(out PowerReceiverComponent? receiver)) + if (!Owner.TryGetComponent(out ApcPowerReceiverComponent? receiver)) { return; } @@ -80,7 +80,7 @@ namespace Content.Server.Light.Components public void OnUpdate(float frameTime) { - if (Owner.Deleted || !Owner.TryGetComponent(out BatteryComponent? battery)) + if (Owner.Deleted || !Owner.TryGetComponent(out BatteryComponent? battery) || Owner.Paused) { return; } @@ -96,9 +96,9 @@ namespace Content.Server.Light.Components else { battery.CurrentCharge += _chargingWattage * frameTime * _chargingEfficiency; - if (battery.BatteryState == BatteryState.Full) + if (battery.IsFullyCharged) { - if (Owner.TryGetComponent(out PowerReceiverComponent? receiver)) + if (Owner.TryGetComponent(out ApcPowerReceiverComponent? receiver)) { receiver.Load = 1; } @@ -110,28 +110,24 @@ namespace Content.Server.Light.Components private void TurnOff() { - if (Owner.TryGetComponent(out SpriteComponent? sprite)) - { - sprite.LayerSetState(0, "emergency_light_off"); - } - if (Owner.TryGetComponent(out PointLightComponent? light)) { light.Enabled = false; } + + if (Owner.TryGetComponent(out AppearanceComponent? appearance)) + appearance.SetData(EmergencyLightVisuals.On, false); } private void TurnOn() { - if (Owner.TryGetComponent(out SpriteComponent? sprite)) - { - sprite.LayerSetState(0, "emergency_light_on"); - } - if (Owner.TryGetComponent(out PointLightComponent? light)) { light.Enabled = true; } + + if (Owner.TryGetComponent(out AppearanceComponent? appearance)) + appearance.SetData(EmergencyLightVisuals.On, true); } public override void HandleMessage(ComponentMessage message, IComponent? component) diff --git a/Content.Server/Light/Components/PoweredLightComponent.cs b/Content.Server/Light/Components/PoweredLightComponent.cs index 2bc11a73f4..3e5ecd5b19 100644 --- a/Content.Server/Light/Components/PoweredLightComponent.cs +++ b/Content.Server/Light/Components/PoweredLightComponent.cs @@ -198,7 +198,7 @@ namespace Content.Server.Light.Components /// public void UpdateLight() { - var powerReceiver = Owner.GetComponent(); + var powerReceiver = Owner.GetComponent(); if (LightBulb == null) // No light bulb. { diff --git a/Content.Server/Medical/Components/MedicalScannerComponent.cs b/Content.Server/Medical/Components/MedicalScannerComponent.cs index bc677a2503..0ee7e60964 100644 --- a/Content.Server/Medical/Components/MedicalScannerComponent.cs +++ b/Content.Server/Medical/Components/MedicalScannerComponent.cs @@ -48,7 +48,7 @@ namespace Content.Server.Medical.Components private readonly Vector2 _ejectOffset = new(0f, 0f); [ViewVariables] - private bool Powered => !Owner.TryGetComponent(out PowerReceiverComponent? receiver) || receiver.Powered; + private bool Powered => !Owner.TryGetComponent(out ApcPowerReceiverComponent? receiver) || receiver.Powered; [ViewVariables] private BoundUserInterface? UserInterface => Owner.GetUIOrNull(MedicalScannerUiKey.Key); diff --git a/Content.Server/NodeContainer/EntitySystems/NodeContainerSystem.cs b/Content.Server/NodeContainer/EntitySystems/NodeContainerSystem.cs index 519ddee323..19b9de4415 100644 --- a/Content.Server/NodeContainer/EntitySystems/NodeContainerSystem.cs +++ b/Content.Server/NodeContainer/EntitySystems/NodeContainerSystem.cs @@ -11,16 +11,51 @@ namespace Content.Server.NodeContainer.EntitySystems { base.Initialize(); + SubscribeLocalEvent(OnInitEvent); + SubscribeLocalEvent(OnStartupEvent); + SubscribeLocalEvent(OnShutdownEvent); SubscribeLocalEvent(OnAnchorStateChanged); SubscribeLocalEvent(OnRotateEvent); } - private void OnAnchorStateChanged(EntityUid uid, NodeContainerComponent component, AnchorStateChangedEvent args) + private static void OnInitEvent(EntityUid uid, NodeContainerComponent component, ComponentInit args) { - component.AnchorUpdate(); + foreach (var (key, node) in component.Nodes) + { + node.Name = key; + node.Initialize(component.Owner); + } } - private void OnRotateEvent(EntityUid uid, NodeContainerComponent container, RotateEvent ev) + private static void OnStartupEvent(EntityUid uid, NodeContainerComponent component, ComponentStartup args) + { + foreach (var node in component.Nodes.Values) + { + node.OnContainerStartup(); + } + } + + private static void OnShutdownEvent(EntityUid uid, NodeContainerComponent component, ComponentShutdown args) + { + foreach (var node in component.Nodes.Values) + { + node.OnContainerShutdown(); + } + } + + private static void OnAnchorStateChanged( + EntityUid uid, + NodeContainerComponent component, + AnchorStateChangedEvent args) + { + foreach (var node in component.Nodes.Values) + { + node.AnchorUpdate(); + node.AnchorStateChanged(); + } + } + + private static void OnRotateEvent(EntityUid uid, NodeContainerComponent container, RotateEvent ev) { if (ev.NewRotation == ev.OldRotation) { diff --git a/Content.Server/NodeContainer/EntitySystems/NodeGroupSystem.cs b/Content.Server/NodeContainer/EntitySystems/NodeGroupSystem.cs index c4a0a5e0a0..ca24e0f8fb 100644 --- a/Content.Server/NodeContainer/EntitySystems/NodeGroupSystem.cs +++ b/Content.Server/NodeContainer/EntitySystems/NodeGroupSystem.cs @@ -1,30 +1,385 @@ using System.Collections.Generic; +using System.Diagnostics; +using System.Linq; +using Content.Server.Administration.Managers; using Content.Server.NodeContainer.NodeGroups; +using Content.Server.NodeContainer.Nodes; +using Content.Shared.Administration; +using Content.Shared.NodeContainer; using JetBrains.Annotations; +using Robust.Server.Player; +using Robust.Shared.Enums; using Robust.Shared.GameObjects; +using Robust.Shared.IoC; +using Robust.Shared.Log; +using Robust.Shared.Maths; +using Robust.Shared.Utility; namespace Content.Server.NodeContainer.EntitySystems { [UsedImplicitly] public class NodeGroupSystem : EntitySystem { - private readonly HashSet _dirtyNodeGroups = new(); + [Dependency] private readonly IEntityManager _entityManager = default!; - public void AddDirtyNodeGroup(INodeGroup nodeGroup) + [Dependency] private readonly IPlayerManager _playerManager = default!; + [Dependency] private readonly IAdminManager _adminManager = default!; + [Dependency] private readonly INodeGroupFactory _nodeGroupFactory = default!; + [Dependency] private readonly ILogManager _logManager = default!; + + private readonly List _visDeletes = new(); + private readonly List _visSends = new(); + + private readonly HashSet _visPlayers = new(); + private readonly HashSet _toRemake = new(); + private readonly HashSet _toRemove = new(); + private readonly List _toReflood = new(); + + private ISawmill _sawmill = default!; + + public bool VisEnabled => _visPlayers.Count != 0; + + private int _gen = 1; + private int _groupNetIdCounter = 1; + + public override void Initialize() { - _dirtyNodeGroups.Add(nodeGroup); + base.Initialize(); + + _sawmill = _logManager.GetSawmill("nodegroup"); + + _playerManager.PlayerStatusChanged += OnPlayerStatusChanged; + + SubscribeNetworkEvent(HandleEnableMsg); + } + + public override void Shutdown() + { + base.Shutdown(); + + _playerManager.PlayerStatusChanged -= OnPlayerStatusChanged; + } + + private void HandleEnableMsg(NodeVis.MsgEnable msg, EntitySessionEventArgs args) + { + var session = (IPlayerSession) args.SenderSession; + if (!_adminManager.HasAdminFlag(session, AdminFlags.Debug)) + return; + + if (msg.Enabled) + { + _visPlayers.Add(session); + VisSendFullStateImmediate(session); + } + else + { + _visPlayers.Remove(session); + } + } + + private void OnPlayerStatusChanged(object? sender, SessionStatusEventArgs e) + { + if (e.NewStatus == SessionStatus.Disconnected) + _visPlayers.Remove(e.Session); + } + + public void QueueRemakeGroup(BaseNodeGroup group) + { + if (group.Remaking) + return; + + _toRemake.Add(group); + group.Remaking = true; + + foreach (var node in group.Nodes) + { + QueueReflood(node); + } + } + + public void QueueReflood(Node node) + { + if (node.FlaggedForFlood) + return; + + _toReflood.Add(node); + node.FlaggedForFlood = true; + } + + public void QueueNodeRemove(Node node) + { + _toRemove.Add(node); + } + + public void CreateSingleNetImmediate(Node node) + { + if (node.NodeGroup != null) + return; + + QueueReflood(node); + + InitGroup(node, new List {node}); } public override void Update(float frameTime) { base.Update(frameTime); - foreach (var group in _dirtyNodeGroups) + DoGroupUpdates(); + VisDoUpdate(); + } + + private void DoGroupUpdates() + { + // "Why is there a separate queue for group remakes and node refloods when they both cause eachother" + // Future planning for the potential ability to do more intelligent group updating. + + if (_toRemake.Count == 0 && _toReflood.Count == 0 && _toRemove.Count == 0) + return; + + var sw = Stopwatch.StartNew(); + + foreach (var toRemove in _toRemove) { - group.RemakeGroup(); + if (toRemove.NodeGroup == null) + continue; + + var group = (BaseNodeGroup) toRemove.NodeGroup; + + group.RemoveNode(toRemove); + toRemove.NodeGroup = null; + + QueueRemakeGroup(group); } - _dirtyNodeGroups.Clear(); + // Break up all remaking groups. + // Don't clear the list yet, we'll come back to these later. + foreach (var toRemake in _toRemake) + { + QueueRemakeGroup(toRemake); + } + + _gen += 1; + + // Go over all nodes to calculate reachable nodes and make an undirected graph out of them. + // Node.GetReachableNodes() may return results asymmetrically, + // i.e. node A may return B, but B may not return A. + // + // Must be for loop to allow concurrent modification from RemakeGroupImmediate. + for (var i = 0; i < _toReflood.Count; i++) + { + var node = _toReflood[i]; + + if (node.Deleting) + continue; + + ClearReachableIfNecessary(node); + + if (node.NodeGroup?.Remaking == false) + { + QueueRemakeGroup((BaseNodeGroup) node.NodeGroup); + } + + foreach (var compatible in GetCompatibleNodes(node)) + { + ClearReachableIfNecessary(compatible); + + if (compatible.NodeGroup?.Remaking == false) + { + // We are expanding into an existing group, + // remake it so that we can treat it uniformly. + var group = (BaseNodeGroup) compatible.NodeGroup; + QueueRemakeGroup(group); + } + + node.ReachableNodes.Add(compatible); + compatible.ReachableNodes.Add(node); + } + } + + var newGroups = new List(); + + // Flood fill over nodes. Every node will only be flood filled once. + foreach (var node in _toReflood) + { + node.FlaggedForFlood = false; + + // Check if already flood filled. + if (node.FloodGen == _gen || node.Deleting) + continue; + + // Flood fill + var groupNodes = FloodFillNode(node); + + var newGroup = InitGroup(node, groupNodes); + newGroups.Add(newGroup); + } + + // Go over dead groups that need to be cleaned up. + // Tell them to push their data to new groups too. + foreach (var oldGroup in _toRemake) + { + // Group by the NEW group. + var newGrouped = oldGroup.Nodes.GroupBy(n => n.NodeGroup); + + oldGroup.Removed = true; + oldGroup.AfterRemake(newGrouped); + if (VisEnabled) + _visDeletes.Add(oldGroup.NetId); + } + + var refloodCount = _toReflood.Count; + + _toReflood.Clear(); + _toRemake.Clear(); + _toRemove.Clear(); + + foreach (var group in newGroups) + { + foreach (var node in group.Nodes) + { + node.OnPostRebuild(); + } + } + + _sawmill.Debug($"Updated node groups in {sw.Elapsed.TotalMilliseconds}ms. {newGroups.Count} new groups, {refloodCount} nodes processed."); + } + + private void ClearReachableIfNecessary(Node node) + { + if (node.UndirectGen != _gen) + { + node.ReachableNodes.Clear(); + node.UndirectGen = _gen; + } + } + + private BaseNodeGroup InitGroup(Node node, List groupNodes) + { + var newGroup = (BaseNodeGroup) _nodeGroupFactory.MakeNodeGroup(node.NodeGroupID); + newGroup.Initialize(node); + newGroup.NetId = _groupNetIdCounter++; + + var netIdCounter = 0; + foreach (var groupNode in groupNodes) + { + groupNode.NodeGroup = newGroup; + groupNode.NetId = ++netIdCounter; + } + + newGroup.LoadNodes(groupNodes); + + if (VisEnabled) + _visSends.Add(newGroup); + + return newGroup; + } + + private List FloodFillNode(Node rootNode) + { + // All nodes we're filling into that currently have NO network. + var allNodes = new List(); + + var stack = new Stack(); + stack.Push(rootNode); + rootNode.FloodGen = _gen; + + while (stack.TryPop(out var node)) + { + allNodes.Add(node); + + foreach (var reachable in node.ReachableNodes) + { + if (reachable.FloodGen == _gen) + continue; + + reachable.FloodGen = _gen; + stack.Push(reachable); + } + } + + return allNodes; + } + + private static IEnumerable GetCompatibleNodes(Node node) + { + foreach (var reachable in node.GetReachableNodes()) + { + DebugTools.Assert(reachable != node, "GetReachableNodes() should not include self."); + + if (reachable.Connectable && reachable.NodeGroupID == node.NodeGroupID) + yield return reachable; + } + } + + private void VisDoUpdate() + { + if (_visSends.Count == 0 && _visDeletes.Count == 0) + return; + + var msg = new NodeVis.MsgData(); + + msg.GroupDeletions.AddRange(_visDeletes); + msg.Groups.AddRange(_visSends.Select(VisMakeGroupState)); + + _visSends.Clear(); + _visDeletes.Clear(); + + foreach (var player in _visPlayers) + { + RaiseNetworkEvent(msg, player.ConnectedClient); + } + } + + private void VisSendFullStateImmediate(IPlayerSession player) + { + var msg = new NodeVis.MsgData(); + + var allNetworks = ComponentManager + .EntityQuery() + .SelectMany(nc => nc.Nodes.Values) + .Select(n => (BaseNodeGroup?) n.NodeGroup) + .Where(n => n != null) + .Distinct(); + + foreach (var network in allNetworks) + { + msg.Groups.Add(VisMakeGroupState(network!)); + } + + RaiseNetworkEvent(msg, player.ConnectedClient); + } + + private static NodeVis.GroupData VisMakeGroupState(BaseNodeGroup group) + { + return new() + { + NetId = group.NetId, + GroupId = group.GroupId.ToString(), + Color = CalcNodeGroupColor(group), + Nodes = group.Nodes.Select(n => new NodeVis.NodeDatum + { + Name = n.Name, + NetId = n.NetId, + Reachable = n.ReachableNodes.Select(r => r.NetId).ToArray(), + Entity = n.Owner.Uid, + Type = n.GetType().Name + }).ToArray() + }; + } + + private static Color CalcNodeGroupColor(BaseNodeGroup group) + { + return group.GroupId switch + { + NodeGroupID.HVPower => Color.Orange, + NodeGroupID.MVPower => Color.Yellow, + NodeGroupID.Apc => Color.LimeGreen, + NodeGroupID.AMEngine => Color.Purple, + NodeGroupID.Pipe => Color.Blue, + NodeGroupID.WireNet => Color.DarkMagenta, + _ => Color.White + }; } } } diff --git a/Content.Server/NodeContainer/NodeContainerComponent.cs b/Content.Server/NodeContainer/NodeContainerComponent.cs index 2c1e4841bf..b0943f7cb6 100644 --- a/Content.Server/NodeContainer/NodeContainerComponent.cs +++ b/Content.Server/NodeContainer/NodeContainerComponent.cs @@ -20,60 +20,18 @@ namespace Content.Server.NodeContainer { public override string Name => "NodeContainer"; - [ViewVariables] - public IReadOnlyDictionary Nodes => _nodes; + [DataField("nodes")] [ViewVariables] public Dictionary Nodes { get; } = new(); - [DataField("nodes")] - private readonly Dictionary _nodes = new(); - - [DataField("examinable")] - private bool _examinable = false; - - protected override void Initialize() - { - base.Initialize(); - foreach (var node in _nodes.Values) - { - node.Initialize(Owner); - } - } - - protected override void Startup() - { - base.Startup(); - foreach (var node in _nodes.Values) - { - node.OnContainerStartup(); - } - } - - protected override void Shutdown() - { - base.Shutdown(); - - foreach (var node in _nodes.Values) - { - node.OnContainerShutdown(); - } - } - - public void AnchorUpdate() - { - foreach (var node in Nodes.Values) - { - node.AnchorUpdate(); - node.AnchorStateChanged(); - } - } + [DataField("examinable")] private bool _examinable = false; public T GetNode(string identifier) where T : Node { - return (T)_nodes[identifier]; + return (T) Nodes[identifier]; } public bool TryGetNode(string identifier, [NotNullWhen(true)] out T? node) where T : Node { - if (_nodes.TryGetValue(identifier, out var n) && n is T t) + if (Nodes.TryGetValue(identifier, out var n) && n is T t) { node = t; return true; diff --git a/Content.Server/NodeContainer/NodeGroups/BaseNetConnectorNodeGroup.cs b/Content.Server/NodeContainer/NodeGroups/BaseNetConnectorNodeGroup.cs deleted file mode 100644 index bee595ac19..0000000000 --- a/Content.Server/NodeContainer/NodeGroups/BaseNetConnectorNodeGroup.cs +++ /dev/null @@ -1,37 +0,0 @@ -#nullable enable -using System.Collections.Generic; -using System.Linq; -using Content.Server.NodeContainer.Nodes; -using Content.Server.Power.Components; - -namespace Content.Server.NodeContainer.NodeGroups -{ - public abstract class BaseNetConnectorNodeGroup : BaseNodeGroup where TNetConnector : BaseNetConnectorComponent - { - private readonly Dictionary> _netConnectorComponents = new(); - - protected override void OnAddNode(Node node) - { - var newNetConnectorComponents = node.Owner - .GetAllComponents() - .Where(powerComp => (NodeGroupID) powerComp.Voltage == node.NodeGroupID) - .ToList(); - _netConnectorComponents[node] = newNetConnectorComponents; - foreach (var netConnectorComponent in newNetConnectorComponents) - { - SetNetConnectorNet(netConnectorComponent); - } - } - - protected abstract void SetNetConnectorNet(TNetConnector netConnectorComponent); - - protected override void OnRemoveNode(Node node) - { - foreach (var netConnectorComponent in _netConnectorComponents[node]) - { - netConnectorComponent.ClearNet(); - } - _netConnectorComponents.Remove(node); - } - } -} diff --git a/Content.Server/NodeContainer/NodeGroups/BaseNodeGroup.cs b/Content.Server/NodeContainer/NodeGroups/BaseNodeGroup.cs new file mode 100644 index 0000000000..133c8c3a33 --- /dev/null +++ b/Content.Server/NodeContainer/NodeGroups/BaseNodeGroup.cs @@ -0,0 +1,91 @@ +#nullable enable +using System.Collections.Generic; +using System.Linq; +using Content.Server.NodeContainer.EntitySystems; +using Content.Server.NodeContainer.Nodes; +using Robust.Shared.GameObjects; +using Robust.Shared.Map; +using Robust.Shared.ViewVariables; + +namespace Content.Server.NodeContainer.NodeGroups +{ + /// + /// Maintains a collection of s, and performs operations requiring a list of + /// all connected s. + /// + public interface INodeGroup + { + bool Remaking { get; } + + IReadOnlyList Nodes { get; } + + void Create(NodeGroupID groupId); + + void Initialize(Node sourceNode); + + void RemoveNode(Node node); + + void LoadNodes(List groupNodes); + + // In theory, the SS13 curse ensures this method will never be called. + void AfterRemake(IEnumerable> newGroups); + + // TODO: Why is this method needed? + void QueueRemake(); + } + + [NodeGroup(NodeGroupID.Default, NodeGroupID.WireNet)] + public class BaseNodeGroup : INodeGroup + { + public bool Remaking { get; set; } + + IReadOnlyList INodeGroup.Nodes => Nodes; + + [ViewVariables] public readonly List Nodes = new(); + + [ViewVariables] public int NodeCount => Nodes.Count; + + /// + /// Debug variable to indicate that this NodeGroup should not be being used by anything. + /// + [ViewVariables] + public bool Removed { get; set; } = false; + + [ViewVariables] + protected GridId GridId { get; private set; } + + [ViewVariables] + public int NetId; + + [ViewVariables] + public NodeGroupID GroupId { get; private set; } + + public void Create(NodeGroupID groupId) + { + GroupId = groupId; + } + + public virtual void Initialize(Node sourceNode) + { + // TODO: Can we get rid of this GridId? + GridId = sourceNode.Owner.Transform.GridID; + } + + public virtual void RemoveNode(Node node) + { + } + + public virtual void LoadNodes( + List groupNodes) + { + Nodes.AddRange(groupNodes); + } + + public virtual void AfterRemake(IEnumerable> newGroups) { } + + public void QueueRemake() + { + EntitySystem.Get().QueueRemakeGroup(this); + } + } +} diff --git a/Content.Server/NodeContainer/NodeGroups/INodeGroup.cs b/Content.Server/NodeContainer/NodeGroups/INodeGroup.cs deleted file mode 100644 index bc8868bc11..0000000000 --- a/Content.Server/NodeContainer/NodeGroups/INodeGroup.cs +++ /dev/null @@ -1,132 +0,0 @@ -#nullable enable -using System.Collections.Generic; -using Content.Server.NodeContainer.EntitySystems; -using Content.Server.NodeContainer.Nodes; -using Robust.Shared.GameObjects; -using Robust.Shared.Map; -using Robust.Shared.ViewVariables; - -namespace Content.Server.NodeContainer.NodeGroups -{ - /// - /// Maintains a collection of s, and performs operations requiring a list of - /// all connected s. - /// - public interface INodeGroup - { - IReadOnlyList Nodes { get; } - - void Initialize(Node sourceNode); - - void AddNode(Node node); - - void RemoveNode(Node node); - - void CombineGroup(INodeGroup newGroup); - - void RemakeGroup(); - } - - [NodeGroup(NodeGroupID.Default, NodeGroupID.WireNet)] - public class BaseNodeGroup : INodeGroup - { - [ViewVariables] - public IReadOnlyList Nodes => _nodes; - private readonly List _nodes = new(); - - [ViewVariables] - public int NodeCount => Nodes.Count; - - /// - /// Debug variable to indicate that this NodeGroup should not be being used by anything. - /// - [ViewVariables] - public bool Removed { get; private set; } = false; - - public static readonly INodeGroup NullGroup = new NullNodeGroup(); - - protected GridId GridId { get; private set;} - - public virtual void Initialize(Node sourceNode) - { - GridId = sourceNode.Owner.Transform.GridID; - } - - public void AddNode(Node node) - { - _nodes.Add(node); - OnAddNode(node); - } - - public void RemoveNode(Node node) - { - _nodes.Remove(node); - OnRemoveNode(node); - EntitySystem.Get().AddDirtyNodeGroup(this); - } - - public void CombineGroup(INodeGroup newGroup) - { - if (newGroup.Nodes.Count < Nodes.Count) - { - newGroup.CombineGroup(this); - return; - } - - OnGivingNodesForCombine(newGroup); - - foreach (var node in Nodes) - { - node.NodeGroup = newGroup; - } - - Removed = true; - } - - /// - /// Causes all s to remake their groups. Called when a is removed - /// and may have split a group in two, so multiple new groups may need to be formed. - /// - public void RemakeGroup() - { - foreach (var node in Nodes) - { - node.ClearNodeGroup(); - } - - var newGroups = new HashSet(); - - foreach (var node in Nodes) - { - if (node.TryAssignGroupIfNeeded()) - { - node.SpreadGroup(); - newGroups.Add(node.NodeGroup); - } - } - - AfterRemake(newGroups); - - Removed = true; - } - - protected virtual void OnAddNode(Node node) { } - - protected virtual void OnRemoveNode(Node node) { } - - protected virtual void OnGivingNodesForCombine(INodeGroup newGroup) { } - - protected virtual void AfterRemake(IEnumerable newGroups) { } - - protected class NullNodeGroup : INodeGroup - { - public IReadOnlyList Nodes => _nodes; - private readonly List _nodes = new(); - public void Initialize(Node sourceNode) { } - public void AddNode(Node node) { } - public void CombineGroup(INodeGroup newGroup) { } - public void RemoveNode(Node node) { } - public void RemakeGroup() { } - } - } -} diff --git a/Content.Server/NodeContainer/NodeGroups/NodeGroupAttribute.cs b/Content.Server/NodeContainer/NodeGroups/NodeGroupAttribute.cs index d41b8dc265..27ef01eafc 100644 --- a/Content.Server/NodeContainer/NodeGroups/NodeGroupAttribute.cs +++ b/Content.Server/NodeContainer/NodeGroups/NodeGroupAttribute.cs @@ -1,5 +1,6 @@ #nullable enable using System; +using JetBrains.Annotations; namespace Content.Server.NodeContainer.NodeGroups { @@ -9,6 +10,7 @@ namespace Content.Server.NodeContainer.NodeGroups /// have the same type of . Used by . /// [AttributeUsage(AttributeTargets.Class, AllowMultiple = false, Inherited = false)] + [MeansImplicitUse] public class NodeGroupAttribute : Attribute { public NodeGroupID[] NodeGroupIDs { get; } diff --git a/Content.Server/NodeContainer/NodeGroups/NodeGroupFactory.cs b/Content.Server/NodeContainer/NodeGroups/NodeGroupFactory.cs index 0391439ec3..33b81a55d5 100644 --- a/Content.Server/NodeContainer/NodeGroups/NodeGroupFactory.cs +++ b/Content.Server/NodeContainer/NodeGroups/NodeGroupFactory.cs @@ -19,7 +19,7 @@ namespace Content.Server.NodeContainer.NodeGroups /// /// Returns a new instance. /// - INodeGroup MakeNodeGroup(Node sourceNode); + INodeGroup MakeNodeGroup(NodeGroupID id); } public class NodeGroupFactory : INodeGroupFactory @@ -45,15 +45,14 @@ namespace Content.Server.NodeContainer.NodeGroups } } - public INodeGroup MakeNodeGroup(Node sourceNode) + public INodeGroup MakeNodeGroup(NodeGroupID id) { - if (_groupTypes.TryGetValue(sourceNode.NodeGroupID, out var type)) - { - var nodeGroup = _typeFactory.CreateInstance(type); - nodeGroup.Initialize(sourceNode); - return nodeGroup; - } - throw new ArgumentException($"{sourceNode.NodeGroupID} did not have an associated {nameof(INodeGroup)}."); + if (!_groupTypes.TryGetValue(id, out var type)) + throw new ArgumentException($"{id} did not have an associated {nameof(INodeGroup)} implementation."); + + var instance = _typeFactory.CreateInstance(type); + instance.Create(id); + return instance; } } diff --git a/Content.Server/NodeContainer/NodeGroups/IPipeNet.cs b/Content.Server/NodeContainer/NodeGroups/PipeNet.cs similarity index 51% rename from Content.Server/NodeContainer/NodeGroups/IPipeNet.cs rename to Content.Server/NodeContainer/NodeGroups/PipeNet.cs index ed740b39a4..573694cdd6 100644 --- a/Content.Server/NodeContainer/NodeGroups/IPipeNet.cs +++ b/Content.Server/NodeContainer/NodeGroups/PipeNet.cs @@ -1,14 +1,15 @@ #nullable enable using System; using System.Collections.Generic; +using System.Linq; using Content.Server.Atmos; using Content.Server.Atmos.Components; using Content.Server.Atmos.EntitySystems; -using Content.Server.GameObjects.Components.NodeContainer.Nodes; using Content.Server.Interfaces; using Content.Server.NodeContainer.Nodes; using Content.Shared.Atmos; using Robust.Shared.GameObjects; +using Robust.Shared.Maths; using Robust.Shared.ViewVariables; namespace Content.Server.NodeContainer.NodeGroups @@ -24,17 +25,15 @@ namespace Content.Server.NodeContainer.NodeGroups [NodeGroup(NodeGroupID.Pipe)] public class PipeNet : BaseNodeGroup, IPipeNet { - [ViewVariables] - public GasMixture Air { get; set; } = new() {Temperature = Atmospherics.T20C}; + [ViewVariables] public GasMixture Air { get; set; } = new() {Temperature = Atmospherics.T20C}; - public static readonly IPipeNet NullNet = new NullPipeNet(); - - [ViewVariables] - private readonly List _pipes = new(); + [ViewVariables] private readonly List _pipes = new(); [ViewVariables] private AtmosphereSystem? _atmosphereSystem; - [ViewVariables] private IGridAtmosphereComponent? GridAtmos => _atmosphereSystem?.GetGridAtmosphere(GridId); + [ViewVariables] + private IGridAtmosphereComponent? GridAtmos => + _atmosphereSystem?.GetGridAtmosphere(GridId); public override void Initialize(Node sourceNode) { @@ -49,35 +48,30 @@ namespace Content.Server.NodeContainer.NodeGroups _atmosphereSystem?.React(Air, this); } - protected override void OnAddNode(Node node) + public override void LoadNodes(List groupNodes) { - if (node is not PipeNode pipeNode) - return; + base.LoadNodes(groupNodes); - _pipes.Add(pipeNode); - pipeNode.JoinPipeNet(this); - Air.Volume += pipeNode.Volume; + foreach (var node in groupNodes) + { + var pipeNode = (PipeNode) node; + _pipes.Add(pipeNode); + pipeNode.JoinPipeNet(this); + Air.Volume += pipeNode.Volume; + } } - protected override void OnRemoveNode(Node node) + public override void RemoveNode(Node node) { - RemoveFromGridAtmos(); - if (node is not PipeNode pipeNode) - return; + base.RemoveNode(node); - pipeNode.ClearPipeNet(); + var pipeNode = (PipeNode) node; + Air.Volume -= pipeNode.Volume; + // TODO: Bad O(n^2) _pipes.Remove(pipeNode); } - protected override void OnGivingNodesForCombine(INodeGroup newGroup) - { - if (newGroup is not IPipeNet newPipeNet) - return; - - EntitySystem.Get().Merge(newPipeNet.Air, Air); - } - - protected override void AfterRemake(IEnumerable newGroups) + public override void AfterRemake(IEnumerable> newGroups) { RemoveFromGridAtmos(); @@ -86,14 +80,15 @@ namespace Content.Server.NodeContainer.NodeGroups foreach (var newGroup in newGroups) { - if (newGroup is not IPipeNet newPipeNet) + if (newGroup.Key is not IPipeNet newPipeNet) continue; var newAir = newPipeNet.Air; + var newVolume = newGroup.Cast().Sum(n => n.Volume); buffer.Clear(); atmosphereSystem.Merge(buffer, Air); - buffer.Multiply(MathF.Min(newAir.Volume / Air.Volume, 1f)); + buffer.Multiply(MathF.Min(newVolume / Air.Volume, 1f)); atmosphereSystem.Merge(newAir, buffer); } } @@ -102,20 +97,5 @@ namespace Content.Server.NodeContainer.NodeGroups { GridAtmos?.RemovePipeNet(this); } - - private class NullPipeNet : NullNodeGroup, IPipeNet - { - private readonly GasMixture _air; - - GasMixture IGasMixtureHolder.Air { get => _air; set { } } - - public NullPipeNet() - { - _air = new GasMixture(1f) {Temperature = Atmospherics.T20C}; - _air.MarkImmutable(); - } - - public void Update() { } - } } } diff --git a/Content.Server/NodeContainer/NodeGroups/PowerNetNodeGroup.cs b/Content.Server/NodeContainer/NodeGroups/PowerNetNodeGroup.cs deleted file mode 100644 index 331a3de40f..0000000000 --- a/Content.Server/NodeContainer/NodeGroups/PowerNetNodeGroup.cs +++ /dev/null @@ -1,164 +0,0 @@ -#nullable enable -using System; -using System.Collections.Generic; -using System.Diagnostics; -using Content.Server.Power.Components; -using Robust.Shared.IoC; -using Robust.Shared.ViewVariables; - -namespace Content.Server.NodeContainer.NodeGroups -{ - public interface IPowerNet - { - void AddSupplier(PowerSupplierComponent supplier); - - void RemoveSupplier(PowerSupplierComponent supplier); - - void UpdateSupplierSupply(PowerSupplierComponent supplier, int oldSupplyRate, int newSupplyRate); - - void AddConsumer(PowerConsumerComponent consumer); - - void RemoveConsumer(PowerConsumerComponent consumer); - - void UpdateConsumerDraw(PowerConsumerComponent consumer, int oldDrawRate, int newDrawRate); - - void UpdateConsumerPriority(PowerConsumerComponent consumer, Priority oldPriority, Priority newPriority); - - void UpdateConsumerReceivedPower(); - } - - [NodeGroup(NodeGroupID.HVPower, NodeGroupID.MVPower)] - public class PowerNetNodeGroup : BaseNetConnectorNodeGroup, IPowerNet - { - private static readonly Priority[] CachedPriorities = (Priority[]) Enum.GetValues(typeof(Priority)); - - [Dependency] private readonly IPowerNetManager _powerNetManager = default!; - - [ViewVariables] - private readonly List _suppliers = new(); - - [ViewVariables] - private int _totalSupply = 0; - - [ViewVariables] - private readonly Dictionary> _consumersByPriority = new(); - - [ViewVariables] - private readonly Dictionary _drawByPriority = new(); - - public static readonly IPowerNet NullNet = new NullPowerNet(); - - public PowerNetNodeGroup() - { - foreach (Priority priority in Enum.GetValues(typeof(Priority))) - { - _consumersByPriority.Add(priority, new List()); - _drawByPriority.Add(priority, 0); - } - } - - protected override void SetNetConnectorNet(BasePowerNetComponent netConnectorComponent) - { - netConnectorComponent.Net = this; - } - - #region IPowerNet Methods - - public void AddSupplier(PowerSupplierComponent supplier) - { - _suppliers.Add(supplier); - _totalSupply += supplier.SupplyRate; - _powerNetManager.AddDirtyPowerNet(this); - } - - public void RemoveSupplier(PowerSupplierComponent supplier) - { - Debug.Assert(_suppliers.Contains(supplier)); - _suppliers.Remove(supplier); - _totalSupply -= supplier.SupplyRate; - _powerNetManager.AddDirtyPowerNet(this); - } - - public void UpdateSupplierSupply(PowerSupplierComponent supplier, int oldSupplyRate, int newSupplyRate) - { - Debug.Assert(_suppliers.Contains(supplier)); - _totalSupply -= oldSupplyRate; - _totalSupply += newSupplyRate; - _powerNetManager.AddDirtyPowerNet(this); - } - - public void AddConsumer(PowerConsumerComponent consumer) - { - _consumersByPriority[consumer.Priority].Add(consumer); - _drawByPriority[consumer.Priority] += consumer.DrawRate; - _powerNetManager.AddDirtyPowerNet(this); - } - - public void RemoveConsumer(PowerConsumerComponent consumer) - { - Debug.Assert(_consumersByPriority[consumer.Priority].Contains(consumer)); - consumer.ReceivedPower = 0; - _consumersByPriority[consumer.Priority].Remove(consumer); - _drawByPriority[consumer.Priority] -= consumer.DrawRate; - _powerNetManager.AddDirtyPowerNet(this); - } - - public void UpdateConsumerDraw(PowerConsumerComponent consumer, int oldDrawRate, int newDrawRate) - { - Debug.Assert(_consumersByPriority[consumer.Priority].Contains(consumer)); - _drawByPriority[consumer.Priority] -= oldDrawRate; - _drawByPriority[consumer.Priority] += newDrawRate; - _powerNetManager.AddDirtyPowerNet(this); - } - - public void UpdateConsumerPriority(PowerConsumerComponent consumer, Priority oldPriority, Priority newPriority) - { - Debug.Assert(_consumersByPriority[oldPriority].Contains(consumer)); - _consumersByPriority[oldPriority].Remove(consumer); - _drawByPriority[oldPriority] -= consumer.DrawRate; - _consumersByPriority[newPriority].Add(consumer); - _drawByPriority[newPriority] += consumer.DrawRate; - _powerNetManager.AddDirtyPowerNet(this); - } - - public void UpdateConsumerReceivedPower() - { - var remainingSupply = _totalSupply; - foreach (var priority in CachedPriorities) - { - var categoryPowerDemand = _drawByPriority[priority]; - if (remainingSupply >= categoryPowerDemand) //can fully power all in category - { - remainingSupply -= categoryPowerDemand; - foreach (var consumer in _consumersByPriority[priority]) - { - consumer.ReceivedPower = consumer.DrawRate; - } - } - else //cannot fully power all, split power - { - var availiablePowerFraction = (float) remainingSupply / categoryPowerDemand; - remainingSupply = 0; - foreach (var consumer in _consumersByPriority[priority]) - { - consumer.ReceivedPower = (int) (consumer.DrawRate * availiablePowerFraction); //give each consumer a fraction of what they requested (rounded down to nearest int) - } - } - } - } - - #endregion - - private class NullPowerNet : IPowerNet - { - public void AddConsumer(PowerConsumerComponent consumer) { } - public void AddSupplier(PowerSupplierComponent supplier) { } - public void UpdateSupplierSupply(PowerSupplierComponent supplier, int oldSupplyRate, int newSupplyRate) { } - public void RemoveConsumer(PowerConsumerComponent consumer) { } - public void RemoveSupplier(PowerSupplierComponent supplier) { } - public void UpdateConsumerDraw(PowerConsumerComponent consumer, int oldDrawRate, int newDrawRate) { } - public void UpdateConsumerPriority(PowerConsumerComponent consumer, Priority oldPriority, Priority newPriority) { } - public void UpdateConsumerReceivedPower() { } - } - } -} diff --git a/Content.Server/NodeContainer/Nodes/AdjacentNode.cs b/Content.Server/NodeContainer/Nodes/AdjacentNode.cs index 43e9c78c1d..c28589aec9 100644 --- a/Content.Server/NodeContainer/Nodes/AdjacentNode.cs +++ b/Content.Server/NodeContainer/Nodes/AdjacentNode.cs @@ -1,5 +1,6 @@ #nullable enable using System.Collections.Generic; +using Robust.Shared.GameObjects; using Robust.Shared.IoC; using Robust.Shared.Map; using Robust.Shared.Serialization.Manager.Attributes; @@ -12,29 +13,19 @@ namespace Content.Server.NodeContainer.Nodes [DataDefinition] public class AdjacentNode : Node { - protected override IEnumerable GetReachableNodes() + public override IEnumerable GetReachableNodes() { if (!Owner.Transform.Anchored) yield break; + var compMgr = IoCManager.Resolve(); var grid = IoCManager.Resolve().GetGrid(Owner.Transform.GridID); - var coords = Owner.Transform.Coordinates; - foreach (var cell in grid.GetCardinalNeighborCells(coords)) + var gridIndex = grid.TileIndicesFor(Owner.Transform.Coordinates); + + foreach (var (_, node) in NodeHelpers.GetCardinalNeighborNodes(compMgr, grid, gridIndex)) { - foreach (var entity in grid.GetLocal(Owner.EntityManager.GetEntity(cell).Transform.Coordinates)) - { - if (!Owner.EntityManager.GetEntity(entity).TryGetComponent(out var container)) - continue; - - foreach (var node in container.Nodes.Values) - { - if (node != null && node != this) - { - yield return node; - } - } - - } + if (node != this) + yield return node; } } } diff --git a/Content.Server/NodeContainer/Nodes/Node.cs b/Content.Server/NodeContainer/Nodes/Node.cs index 614a5bff4c..e427d0d8ec 100644 --- a/Content.Server/NodeContainer/Nodes/Node.cs +++ b/Content.Server/NodeContainer/Nodes/Node.cs @@ -1,11 +1,8 @@ #nullable enable using System.Collections.Generic; -using System.Diagnostics; -using System.Linq; +using Content.Server.NodeContainer.EntitySystems; using Content.Server.NodeContainer.NodeGroups; using Robust.Shared.GameObjects; -using Robust.Shared.IoC; -using Robust.Shared.Physics; using Robust.Shared.Serialization.Manager.Attributes; using Robust.Shared.ViewVariables; @@ -26,20 +23,14 @@ namespace Content.Server.NodeContainer.Nodes [DataField("nodeGroupID")] public NodeGroupID NodeGroupID { get; private set; } = NodeGroupID.Default; - [ViewVariables] - public INodeGroup NodeGroup { get => _nodeGroup; set => SetNodeGroup(value); } - private INodeGroup _nodeGroup = BaseNodeGroup.NullGroup; + [ViewVariables] public INodeGroup? NodeGroup; - [ViewVariables] - public IEntity Owner { get; private set; } = default!; - - [ViewVariables] - private bool _needsGroup = true; + [ViewVariables] public IEntity Owner { get; private set; } = default!; /// /// If this node should be considered for connection by other nodes. /// - public bool Connectable => !_deleting && Anchored; + public bool Connectable => !Deleting && Anchored; protected bool Anchored => !NeedAnchored || Owner.Transform.Anchored; @@ -50,7 +41,15 @@ namespace Content.Server.NodeContainer.Nodes /// /// Prevents a node from being used by other nodes while midway through removal. /// - private bool _deleting; + public bool Deleting; + + public readonly HashSet ReachableNodes = new(); + + internal int FloodGen; + internal int UndirectGen; + internal bool FlaggedForFlood; + internal int NetId; + public string Name = default!; public virtual void Initialize(IEntity owner) { @@ -59,20 +58,23 @@ namespace Content.Server.NodeContainer.Nodes public virtual void OnContainerStartup() { - TryAssignGroupIfNeeded(); - CombineGroupWithReachable(); + EntitySystem.Get().QueueReflood(this); + } + + public void CreateSingleNetImmediate() + { + EntitySystem.Get().CreateSingleNetImmediate(this); } public void AnchorUpdate() { if (Anchored) { - TryAssignGroupIfNeeded(); - CombineGroupWithReachable(); + EntitySystem.Get().QueueReflood(this); } else { - RemoveSelfFromGroup(); + EntitySystem.Get().QueueNodeRemove(this); } } @@ -80,107 +82,21 @@ namespace Content.Server.NodeContainer.Nodes { } + public virtual void OnPostRebuild() + { + + } + public virtual void OnContainerShutdown() { - _deleting = true; - NodeGroup.RemoveNode(this); - } - - public bool TryAssignGroupIfNeeded() - { - if (!_needsGroup || !Connectable) - { - return false; - } - NodeGroup = GetReachableCompatibleGroups().FirstOrDefault() ?? MakeNewGroup(); - return true; - } - - public void SpreadGroup() - { - Debug.Assert(!_needsGroup); - foreach (var node in GetReachableCompatibleNodes()) - { - if (node._needsGroup) - { - node.NodeGroup = NodeGroup; - node.SpreadGroup(); - } - } - } - - public void ClearNodeGroup() - { - _nodeGroup = BaseNodeGroup.NullGroup; - _needsGroup = true; - } - - protected void RefreshNodeGroup() - { - RemoveSelfFromGroup(); - TryAssignGroupIfNeeded(); - CombineGroupWithReachable(); + Deleting = true; + EntitySystem.Get().QueueNodeRemove(this); } /// /// How this node will attempt to find other reachable s to group with. /// Returns a set of s to consider grouping with. Should not return this current . /// - protected abstract IEnumerable GetReachableNodes(); - - private IEnumerable GetReachableCompatibleNodes() - { - foreach (var node in GetReachableNodes()) - { - if (node.NodeGroupID == NodeGroupID && node.Connectable) - { - yield return node; - } - } - } - - private IEnumerable GetReachableCompatibleGroups() - { - foreach (var node in GetReachableCompatibleNodes()) - { - if (!node._needsGroup) - { - var group = node.NodeGroup; - if (group != NodeGroup) - { - yield return group; - } - } - } - } - - private void CombineGroupWithReachable() - { - if (_needsGroup || !Connectable) - return; - - foreach (var group in GetReachableCompatibleGroups()) - { - NodeGroup.CombineGroup(group); - } - } - - private void SetNodeGroup(INodeGroup newGroup) - { - _nodeGroup = newGroup; - NodeGroup.AddNode(this); - _needsGroup = false; - } - - private INodeGroup MakeNewGroup() - { - return IoCManager.Resolve().MakeNodeGroup(this); - } - - private void RemoveSelfFromGroup() - { - NodeGroup.RemoveNode(this); - ClearNodeGroup(); - } + public abstract IEnumerable GetReachableNodes(); } } diff --git a/Content.Server/NodeContainer/Nodes/NodeHelpers.cs b/Content.Server/NodeContainer/Nodes/NodeHelpers.cs new file mode 100644 index 0000000000..115e5a276f --- /dev/null +++ b/Content.Server/NodeContainer/Nodes/NodeHelpers.cs @@ -0,0 +1,89 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using Robust.Shared.GameObjects; +using Robust.Shared.Map; +using Robust.Shared.Maths; + +namespace Content.Server.NodeContainer.Nodes +{ + /// + /// Helper utilities for implementing . + /// + public static class NodeHelpers + { + public static IEnumerable GetNodesInTile(IComponentManager compMgr, IMapGrid grid, Vector2i coords) + { + foreach (var entityUid in grid.GetAnchoredEntities(coords)) + { + if (!compMgr.TryGetComponent(entityUid, out NodeContainerComponent? container)) + continue; + + foreach (var node in container.Nodes.Values) + { + yield return node; + } + } + } + + public static IEnumerable<(Direction dir, Node node)> GetCardinalNeighborNodes( + IComponentManager compMgr, + IMapGrid grid, + Vector2i coords, + bool includeSameTile = true) + { + foreach (var (dir, entityUid) in GetCardinalNeighborCells(grid, coords, includeSameTile)) + { + if (!compMgr.TryGetComponent(entityUid, out NodeContainerComponent? container)) + continue; + + foreach (var node in container.Nodes.Values) + { + yield return (dir, node); + } + } + } + + [SuppressMessage("ReSharper", "EnforceForeachStatementBraces")] + public static IEnumerable<(Direction dir, EntityUid entity)> GetCardinalNeighborCells( + IMapGrid grid, + Vector2i coords, + bool includeSameTile = true) + { + if (includeSameTile) + { + foreach (var uid in grid.GetAnchoredEntities(coords)) + yield return (Direction.Invalid, uid); + } + + foreach (var uid in grid.GetAnchoredEntities(coords + (0, 1))) + yield return (Direction.North, uid); + + foreach (var uid in grid.GetAnchoredEntities(coords + (0, -1))) + yield return (Direction.South, uid); + + foreach (var uid in grid.GetAnchoredEntities(coords + (1, 0))) + yield return (Direction.East, uid); + + foreach (var uid in grid.GetAnchoredEntities(coords + (-1, 0))) + yield return (Direction.West, uid); + } + + public static Vector2i TileOffsetForDir(Direction dir) + { + return dir switch + { + Direction.Invalid => (0, 0), + Direction.South => (0, -1), + Direction.SouthEast => (1, -1), + Direction.East => (1, 0), + Direction.NorthEast => (1, 1), + Direction.North => (0, 1), + Direction.NorthWest => (-1, 1), + Direction.West => (-1, 0), + Direction.SouthWest => (-1, -1), + _ => throw new ArgumentOutOfRangeException(nameof(dir), dir, null) + }; + } + } +} diff --git a/Content.Server/NodeContainer/Nodes/PipeNode.cs b/Content.Server/NodeContainer/Nodes/PipeNode.cs index 54f0c0fb54..68d093188c 100644 --- a/Content.Server/NodeContainer/Nodes/PipeNode.cs +++ b/Content.Server/NodeContainer/Nodes/PipeNode.cs @@ -3,9 +3,8 @@ using System.Collections.Generic; using Content.Server.Atmos; using Content.Server.Atmos.EntitySystems; using Content.Server.Interfaces; -using Content.Server.NodeContainer; +using Content.Server.NodeContainer.EntitySystems; using Content.Server.NodeContainer.NodeGroups; -using Content.Server.NodeContainer.Nodes; using Content.Shared.Atmos; using Robust.Server.GameObjects; using Robust.Shared.Containers; @@ -13,9 +12,10 @@ using Robust.Shared.GameObjects; using Robust.Shared.IoC; using Robust.Shared.Map; using Robust.Shared.Serialization.Manager.Attributes; +using Robust.Shared.Utility; using Robust.Shared.ViewVariables; -namespace Content.Server.GameObjects.Components.NodeContainer.Nodes +namespace Content.Server.NodeContainer.Nodes { /// /// Connects with other s whose @@ -63,21 +63,23 @@ namespace Content.Server.GameObjects.Components.NodeContainer.Nodes set { _connectionsEnabled = value; - RefreshNodeGroup(); + + if (NodeGroup != null) + EntitySystem.Get().QueueRemakeGroup((BaseNodeGroup) NodeGroup); } } + [DataField("connectionsEnabled")] + private bool _connectionsEnabled = true; + [DataField("rotationsEnabled")] public bool RotationsEnabled { get; set; } = true; /// - /// The this pipe is a part of. Set to when not in an . + /// The this pipe is a part of. /// [ViewVariables] - private IPipeNet _pipeNet = PipeNet.NullNet; - - [DataField("connectionsEnabled")] - private bool _connectionsEnabled = true; + private IPipeNet? PipeNet => (IPipeNet?) NodeGroup; /// /// Whether to ignore the pipenet and return the environment's air. @@ -92,8 +94,12 @@ namespace Content.Server.GameObjects.Components.NodeContainer.Nodes [ViewVariables] public GasMixture Air { - get => !EnvironmentalAir ? _pipeNet.Air : Owner.Transform.Coordinates.GetTileAir() ?? GasMixture.SpaceGas; - set => _pipeNet.Air = value; + get => (!EnvironmentalAir ? PipeNet?.Air : Owner.Transform.Coordinates.GetTileAir()) ?? GasMixture.SpaceGas; + set + { + DebugTools.Assert(PipeNet != null); + PipeNet!.Air = value; + } } public void AssumeAir(GasMixture giver) @@ -105,7 +111,7 @@ namespace Content.Server.GameObjects.Components.NodeContainer.Nodes return; } - EntitySystem.Get().Merge(_pipeNet.Air, giver); + EntitySystem.Get().Merge(PipeNet!.Air, giver); } [ViewVariables] @@ -128,13 +134,6 @@ namespace Content.Server.GameObjects.Components.NodeContainer.Nodes public void JoinPipeNet(IPipeNet pipeNet) { - _pipeNet = pipeNet; - OnConnectedDirectionsNeedsUpdating(); - } - - public void ClearPipeNet() - { - _pipeNet = PipeNet.NullNet; OnConnectedDirectionsNeedsUpdating(); } @@ -146,12 +145,11 @@ namespace Content.Server.GameObjects.Components.NodeContainer.Nodes if (!RotationsEnabled) return; var diff = ev.NewRotation - ev.OldRotation; PipeDirection = PipeDirection.RotatePipeDirection(diff); - RefreshNodeGroup(); OnConnectedDirectionsNeedsUpdating(); UpdateAppearance(); } - protected override IEnumerable GetReachableNodes() + public override IEnumerable GetReachableNodes() { for (var i = 0; i < PipeDirectionHelpers.AllPipeDirections; i++) { diff --git a/Content.Server/ParticleAccelerator/Components/ParticleAcceleratorControlBoxComponent.cs b/Content.Server/ParticleAccelerator/Components/ParticleAcceleratorControlBoxComponent.cs index b3ef6644ee..8562cccfbe 100644 --- a/Content.Server/ParticleAccelerator/Components/ParticleAcceleratorControlBoxComponent.cs +++ b/Content.Server/ParticleAccelerator/Components/ParticleAcceleratorControlBoxComponent.cs @@ -6,9 +6,10 @@ using System.Diagnostics.CodeAnalysis; using System.Threading; using Content.Server.Notification; using Content.Server.Power.Components; +using Content.Server.Power.EntitySystems; using Content.Server.UserInterface; using Content.Server.VendingMachines; -using Content.Server.Wires.Components; +using Content.Server.WireHacking; using Content.Shared.ActionBlocker; using Content.Shared.Interaction; using Content.Shared.Interaction.Events; @@ -47,7 +48,7 @@ namespace Content.Server.ParticleAccelerator.Components /// /// Power receiver for the control console itself. /// - [ViewVariables] private PowerReceiverComponent _powerReceiverComponent = default!; + [ViewVariables] private ApcPowerReceiverComponent _apcPowerReceiverComponent = default!; [ViewVariables] private ParticleAcceleratorFuelChamberComponent? _partFuelChamber; [ViewVariables] private ParticleAcceleratorEndCapComponent? _partEndCap; @@ -88,7 +89,7 @@ namespace Content.Server.ParticleAccelerator.Components [ViewVariables(VVAccess.ReadWrite)] [DataField("powerDrawBase")] private int _powerDrawBase = 500; [ViewVariables(VVAccess.ReadWrite)] [DataField("powerDrawMult")] private int _powerDrawMult = 1500; - [ViewVariables] private bool ConsolePowered => _powerReceiverComponent?.Powered ?? true; + [ViewVariables] private bool ConsolePowered => _apcPowerReceiverComponent?.Powered ?? true; public ParticleAcceleratorControlBoxComponent() { @@ -107,9 +108,9 @@ namespace Content.Server.ParticleAccelerator.Components UserInterface.OnReceiveMessage += UserInterfaceOnOnReceiveMessage; } - Owner.EnsureComponent(out _powerReceiverComponent); + Owner.EnsureComponent(out _apcPowerReceiverComponent); - _powerReceiverComponent!.Load = 250; + _apcPowerReceiverComponent!.Load = 250; } public override void HandleMessage(ComponentMessage message, IComponent? component) @@ -189,8 +190,8 @@ namespace Content.Server.ParticleAccelerator.Components public void UpdateUI() { - var draw = 0; - var receive = 0; + var draw = 0f; + var receive = 0f; if (_isEnabled) { @@ -202,8 +203,8 @@ namespace Content.Server.ParticleAccelerator.Components _isAssembled, _isEnabled, _selectedStrength, - draw, - receive, + (int) draw, + (int) receive, _partEmitterLeft != null, _partEmitterCenter != null, _partEmitterRight != null, @@ -577,7 +578,7 @@ namespace Content.Server.ParticleAccelerator.Components if (Owner.TryGetComponent(out AppearanceComponent? appearance)) { appearance.SetData(ParticleAcceleratorVisuals.VisualState, - _powerReceiverComponent!.Powered + _apcPowerReceiverComponent!.Powered ? (ParticleAcceleratorVisualState) _selectedStrength : ParticleAcceleratorVisualState.Unpowered); } @@ -645,7 +646,7 @@ namespace Content.Server.ParticleAccelerator.Components } * _powerDrawMult + _powerDrawBase; } - public void PowerBoxReceivedChanged(object? sender, ReceivedPowerChangedEventArgs eventArgs) + public void PowerBoxReceivedChanged(PowerConsumerReceivedChanged eventArgs) { DebugTools.Assert(_isAssembled); diff --git a/Content.Server/ParticleAccelerator/Components/ParticleAcceleratorPowerBoxComponent.cs b/Content.Server/ParticleAccelerator/Components/ParticleAcceleratorPowerBoxComponent.cs index c3f79a8be7..c37486bc81 100644 --- a/Content.Server/ParticleAccelerator/Components/ParticleAcceleratorPowerBoxComponent.cs +++ b/Content.Server/ParticleAccelerator/Components/ParticleAcceleratorPowerBoxComponent.cs @@ -17,12 +17,6 @@ namespace Content.Server.ParticleAccelerator.Components base.Initialize(); PowerConsumerComponent = Owner.EnsureComponentWarn(); - PowerConsumerComponent.OnReceivedPowerChanged += PowerReceivedChanged; - } - - private void PowerReceivedChanged(object? sender, ReceivedPowerChangedEventArgs e) - { - Master?.PowerBoxReceivedChanged(sender, e); } } } diff --git a/Content.Server/ParticleAccelerator/ParticleAcceleratorPartSystem.cs b/Content.Server/ParticleAccelerator/EntitySystems/ParticleAcceleratorPartSystem.cs similarity index 94% rename from Content.Server/ParticleAccelerator/ParticleAcceleratorPartSystem.cs rename to Content.Server/ParticleAccelerator/EntitySystems/ParticleAcceleratorPartSystem.cs index 10f386d959..79be10ebae 100644 --- a/Content.Server/ParticleAccelerator/ParticleAcceleratorPartSystem.cs +++ b/Content.Server/ParticleAccelerator/EntitySystems/ParticleAcceleratorPartSystem.cs @@ -3,7 +3,7 @@ using Content.Server.ParticleAccelerator.Components; using JetBrains.Annotations; using Robust.Shared.GameObjects; -namespace Content.Server.ParticleAccelerator +namespace Content.Server.ParticleAccelerator.EntitySystems { [UsedImplicitly] public class ParticleAcceleratorPartSystem : EntitySystem diff --git a/Content.Server/ParticleAccelerator/EntitySystems/ParticleAcceleratorPowerBoxSystem.cs b/Content.Server/ParticleAccelerator/EntitySystems/ParticleAcceleratorPowerBoxSystem.cs new file mode 100644 index 0000000000..92bef8bfeb --- /dev/null +++ b/Content.Server/ParticleAccelerator/EntitySystems/ParticleAcceleratorPowerBoxSystem.cs @@ -0,0 +1,27 @@ +using Content.Server.ParticleAccelerator.Components; +using Content.Server.Power.EntitySystems; +using JetBrains.Annotations; +using Robust.Shared.GameObjects; + +namespace Content.Server.ParticleAccelerator.EntitySystems +{ + [UsedImplicitly] + public class ParticleAcceleratorPowerBoxSystem : EntitySystem + { + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent( + PowerBoxReceivedChanged); + } + + private static void PowerBoxReceivedChanged( + EntityUid uid, + ParticleAcceleratorPowerBoxComponent component, + PowerConsumerReceivedChanged args) + { + component.Master!.PowerBoxReceivedChanged(args); + } + } +} diff --git a/Content.Server/Power/Commands/PowerStatCommand.cs b/Content.Server/Power/Commands/PowerStatCommand.cs new file mode 100644 index 0000000000..16be3b82a0 --- /dev/null +++ b/Content.Server/Power/Commands/PowerStatCommand.cs @@ -0,0 +1,26 @@ +using Content.Server.Administration; +using Content.Server.Power.EntitySystems; +using Content.Shared.Administration; +using Robust.Shared.Console; +using Robust.Shared.GameObjects; + +namespace Content.Server.Power.Commands +{ + [AdminCommand(AdminFlags.Debug)] + public sealed class PowerStatCommand : IConsoleCommand + { + public string Command => "powerstat"; + public string Description => "Shows statistics for pow3r"; + public string Help => "Usage: powerstat"; + + public void Execute(IConsoleShell shell, string argStr, string[] args) + { + var stats = EntitySystem.Get().GetStatistics(); + + shell.WriteLine($"networks: {stats.CountNetworks}"); + shell.WriteLine($"loads: {stats.CountLoads}"); + shell.WriteLine($"supplies: {stats.CountSupplies}"); + shell.WriteLine($"batteries: {stats.CountBatteries}"); + } + } +} diff --git a/Content.Server/APC/Components/ApcComponent.cs b/Content.Server/Power/Components/ApcComponent.cs similarity index 84% rename from Content.Server/APC/Components/ApcComponent.cs rename to Content.Server/Power/Components/ApcComponent.cs index 07df66a3fc..5182551775 100644 --- a/Content.Server/APC/Components/ApcComponent.cs +++ b/Content.Server/Power/Components/ApcComponent.cs @@ -1,23 +1,22 @@ #nullable enable using System; using Content.Server.Access.Components; -using Content.Server.Battery.Components; -using Content.Server.Power.Components; +using Content.Server.Power.NodeGroups; using Content.Server.UserInterface; using Content.Shared.APC; using Content.Shared.Interaction; -using Content.Shared.Notification; using Content.Shared.Notification.Managers; using Robust.Server.GameObjects; using Robust.Shared.Audio; using Robust.Shared.GameObjects; using Robust.Shared.IoC; using Robust.Shared.Localization; +using Robust.Shared.Maths; using Robust.Shared.Player; using Robust.Shared.Timing; using Robust.Shared.ViewVariables; -namespace Content.Server.APC.Components +namespace Content.Server.Power.Components { [RegisterComponent] [ComponentReference(typeof(IActivate))] @@ -57,7 +56,6 @@ namespace Content.Server.APC.Components { base.Initialize(); - Owner.EnsureComponent(); Owner.EnsureComponentWarn(); Owner.EnsureComponentWarn(); @@ -89,6 +87,8 @@ namespace Content.Server.APC.Components if (_accessReader == null || _accessReader.IsAllowed(user)) { MainBreakerEnabled = !MainBreakerEnabled; + Owner.GetComponent().CanDischarge = MainBreakerEnabled; + _uiDirty = true; SoundSystem.Play(Filter.Pvs(Owner), "/Audio/Machines/machine_switch.ogg", Owner, AudioParams.Default.WithVolume(-2f)); } @@ -153,44 +153,31 @@ namespace Content.Server.APC.Components return ApcChargeState.Full; } - if (!Owner.TryGetComponent(out PowerConsumerComponent? consumer)) - { - return ApcChargeState.Full; - } + var netBattery = Owner.GetComponent(); + var delta = netBattery.CurrentSupply - netBattery.CurrentReceiving; - if (consumer.DrawRate == consumer.ReceivedPower) - { - return ApcChargeState.Charging; - } - else - { - return ApcChargeState.Lack; - } + return delta < 0 ? ApcChargeState.Charging : ApcChargeState.Lack; } private ApcExternalPowerState CalcExtPowerState() { - if (!Owner.TryGetComponent(out BatteryStorageComponent? batteryStorage)) + var bat = Battery; + if (bat == null) + return ApcExternalPowerState.None; + + var netBat = Owner.GetComponent(); + if (netBat.CurrentReceiving == 0 && netBat.LoadingNetworkDemand != 0) { return ApcExternalPowerState.None; } - var consumer = batteryStorage.Consumer; - if (consumer == null) - return ApcExternalPowerState.None; - - if (consumer.ReceivedPower == 0 && consumer.DrawRate != 0) - { - return ApcExternalPowerState.None; - } - else if (consumer.ReceivedPower < consumer.DrawRate) + var delta = netBat.CurrentReceiving - netBat.LoadingNetworkDemand; + if (!MathHelper.CloseTo(delta, 0, 0.1f) && delta < 0) { return ApcExternalPowerState.Low; } - else - { - return ApcExternalPowerState.Good; - } + + return ApcExternalPowerState.Good; } void IActivate.Activate(ActivateEventArgs eventArgs) diff --git a/Content.Server/Power/Components/ApcPowerProviderComponent.cs b/Content.Server/Power/Components/ApcPowerProviderComponent.cs new file mode 100644 index 0000000000..c87e4b6c54 --- /dev/null +++ b/Content.Server/Power/Components/ApcPowerProviderComponent.cs @@ -0,0 +1,121 @@ +#nullable enable +using System; +using System.Collections.Generic; +using Content.Server.Power.NodeGroups; +using Robust.Shared.GameObjects; +using Robust.Shared.IoC; +using Robust.Shared.Serialization.Manager.Attributes; +using Robust.Shared.ViewVariables; + +namespace Content.Server.Power.Components +{ + [RegisterComponent] + public class ApcPowerProviderComponent : BaseApcNetComponent + { + public override string Name => "PowerProvider"; + + public IEntity ProviderOwner => Owner; + + /// + /// The max distance this can transmit power to s from. + /// + [ViewVariables(VVAccess.ReadWrite)] + public int PowerTransferRange { get => _powerTransferRange; set => SetPowerTransferRange(value); } + [DataField("powerTransferRange")] + private int _powerTransferRange = 3; + + [ViewVariables] public List LinkedReceivers { get; } = new(); + + /// + /// If s should consider connecting to this. + /// + [ViewVariables(VVAccess.ReadWrite)] + public bool Connectable { get; private set; } = true; + + public void AddReceiver(ApcPowerReceiverComponent receiver) + { + LinkedReceivers.Add(receiver); + receiver.NetworkLoad.LinkedNetwork = default; + + Net?.QueueNetworkReconnect(); + } + + public void RemoveReceiver(ApcPowerReceiverComponent receiver) + { + LinkedReceivers.Remove(receiver); + receiver.NetworkLoad.LinkedNetwork = default; + + Net?.QueueNetworkReconnect(); + } + + protected override void Startup() + { + base.Startup(); + + foreach (var receiver in FindAvailableReceivers()) + { + receiver.Provider = this; + } + } + + protected override void OnRemove() + { + Connectable = false; + var receivers = LinkedReceivers.ToArray(); + foreach (var receiver in receivers) + { + receiver.Provider = null; + } + foreach (var receiver in receivers) + { + receiver.TryFindAndSetProvider(); + } + base.OnRemove(); + } + + private IEnumerable FindAvailableReceivers() + { + var nearbyEntities = IoCManager.Resolve() + .GetEntitiesInRange(Owner, PowerTransferRange); + + foreach (var entity in nearbyEntities) + { + if (entity.TryGetComponent(out var receiver) && + receiver.Connectable && + receiver.NeedsProvider && + receiver.Owner.Transform.Coordinates.TryDistance(Owner.EntityManager, Owner.Transform.Coordinates, out var distance) && + distance < Math.Min(PowerTransferRange, receiver.PowerReceptionRange)) + { + yield return receiver; + } + } + } + + protected override void AddSelfToNet(IApcNet apcNet) + { + apcNet.AddPowerProvider(this); + } + + protected override void RemoveSelfFromNet(IApcNet apcNet) + { + apcNet.RemovePowerProvider(this); + } + + private void SetPowerTransferRange(int newPowerTransferRange) + { + var receivers = LinkedReceivers.ToArray(); + + foreach (var receiver in receivers) + { + receiver.Provider = null; + } + + _powerTransferRange = newPowerTransferRange; + + foreach (var receiver in receivers) + { + receiver.TryFindAndSetProvider(); + } + } + } +} diff --git a/Content.Server/Power/Components/PowerReceiverComponent.cs b/Content.Server/Power/Components/ApcPowerReceiverComponent.cs similarity index 65% rename from Content.Server/Power/Components/PowerReceiverComponent.cs rename to Content.Server/Power/Components/ApcPowerReceiverComponent.cs index 89d44c13a7..b95db5cc86 100644 --- a/Content.Server/Power/Components/PowerReceiverComponent.cs +++ b/Content.Server/Power/Components/ApcPowerReceiverComponent.cs @@ -1,12 +1,15 @@ #nullable enable using System; -using Content.Server.APC; +using System.Diagnostics.CodeAnalysis; +using Content.Server.Power.NodeGroups; +using Content.Server.Power.Pow3r; using Content.Shared.Examine; using Content.Shared.Power; using Robust.Server.GameObjects; using Robust.Shared.GameObjects; using Robust.Shared.IoC; using Robust.Shared.Localization; +using Robust.Shared.Maths; using Robust.Shared.Physics; using Robust.Shared.Serialization.Manager.Attributes; using Robust.Shared.Utility; @@ -15,26 +18,21 @@ using Robust.Shared.ViewVariables; namespace Content.Server.Power.Components { /// - /// Attempts to link with a nearby s so that it can receive power from a . + /// Attempts to link with a nearby s + /// so that it can receive power from a . /// [RegisterComponent] - public class PowerReceiverComponent : Component, IExamine + public class ApcPowerReceiverComponent : Component, IExamine { [ViewVariables] [ComponentDependency] private readonly IPhysBody? _physicsComponent = null; - public override string Name => "PowerReceiver"; + public override string Name => "ApcPowerReceiver"; [ViewVariables] - public bool Powered => (HasApcPower || !NeedsPower) && !PowerDisabled; + public bool Powered => (MathHelper.CloseTo(NetworkLoad.ReceivingPower, Load) || !NeedsPower) && !PowerDisabled; /// - /// If this is being powered by an Apc. - /// - [ViewVariables] - public bool HasApcPower { get; private set; } - - /// - /// The max distance from a that this can receive power from. + /// The max distance from a that this can receive power from. /// [ViewVariables(VVAccess.ReadWrite)] public int PowerReceptionRange { get => _powerReceptionRange; set => SetPowerReceptionRange(value); } @@ -42,32 +40,53 @@ namespace Content.Server.Power.Components private int _powerReceptionRange = 3; [ViewVariables] - public IPowerProvider Provider { get => _provider; set => SetProvider(value); } - private IPowerProvider _provider = PowerProviderComponent.NullProvider; + public ApcPowerProviderComponent? Provider + { + get => _provider; + set + { + // Will get updated before power networks process. + NetworkLoad.LinkedNetwork = default; + _provider?.RemoveReceiver(this); + _provider = value; + value?.AddReceiver(this); + ApcPowerChanged(); + } + } + + private ApcPowerProviderComponent? _provider; /// - /// If this should be considered for connection by s. + /// If this should be considered for connection by s. /// public bool Connectable => Anchored; private bool Anchored => _physicsComponent == null || _physicsComponent.BodyType == BodyType.Static; - [ViewVariables] - public bool NeedsProvider { get; private set; } = true; + [ViewVariables] public bool NeedsProvider => Provider == null; /// /// Amount of charge this needs from an APC per second to function. /// [ViewVariables(VVAccess.ReadWrite)] - public int Load { get => _load; set => SetLoad(value); } [DataField("powerLoad")] - private int _load = 5; + public float Load { get => NetworkLoad.DesiredPower; set => NetworkLoad.DesiredPower = value; } /// /// When false, causes this to appear powered even if not receiving power from an Apc. /// [ViewVariables(VVAccess.ReadWrite)] - public bool NeedsPower { get => _needsPower; set => SetNeedsPower(value); } + public bool NeedsPower + { + get => _needsPower; + set + { + _needsPower = value; + // Reset this so next tick will do a power update. + LastPowerReceived = float.NaN; + } + } + [DataField("needsPower")] private bool _needsPower = true; @@ -75,9 +94,16 @@ namespace Content.Server.Power.Components /// When true, causes this to never appear powered. /// [ViewVariables(VVAccess.ReadWrite)] - public bool PowerDisabled { get => _powerDisabled; set => SetPowerDisabled(value); } [DataField("powerDisabled")] - private bool _powerDisabled; + public bool PowerDisabled { get => !NetworkLoad.Enabled; set => NetworkLoad.Enabled = !value; } + + public float LastPowerReceived = float.NaN; + + [ViewVariables] + public PowerState.Load NetworkLoad { get; } = new PowerState.Load + { + DesiredPower = 5 + }; protected override void Startup() { @@ -94,7 +120,8 @@ namespace Content.Server.Power.Components protected override void OnRemove() { - _provider.RemoveReceiver(this); + _provider?.RemoveReceiver(this); + base.OnRemove(); } @@ -108,20 +135,17 @@ namespace Content.Server.Power.Components public void ApcPowerChanged() { - var oldPowered = Powered; - HasApcPower = Provider.HasApcPower; - if (Powered != oldPowered) - OnNewPowerState(); + OnNewPowerState(); } - private bool TryFindAvailableProvider(out IPowerProvider foundProvider) + private bool TryFindAvailableProvider([NotNullWhen(true)] out ApcPowerProviderComponent? foundProvider) { var nearbyEntities = IoCManager.Resolve() .GetEntitiesInRange(Owner, PowerReceptionRange); foreach (var entity in nearbyEntities) { - if (entity.TryGetComponent(out var provider)) + if (entity.TryGetComponent(out var provider)) { if (provider.Connectable) { @@ -136,60 +160,18 @@ namespace Content.Server.Power.Components } } } - foundProvider = default!; + + foundProvider = default; return false; } - public void ClearProvider() - { - _provider.RemoveReceiver(this); - _provider = PowerProviderComponent.NullProvider; - NeedsProvider = true; - ApcPowerChanged(); - } - - private void SetProvider(IPowerProvider newProvider) - { - _provider.RemoveReceiver(this); - _provider = newProvider; - newProvider.AddReceiver(this); - NeedsProvider = false; - ApcPowerChanged(); - } - private void SetPowerReceptionRange(int newPowerReceptionRange) { - ClearProvider(); + Provider = null; _powerReceptionRange = newPowerReceptionRange; TryFindAndSetProvider(); } - private void SetLoad(int newLoad) - { - Provider.UpdateReceiverLoad(Load, newLoad); - _load = newLoad; - } - - private void SetNeedsPower(bool newNeedsPower) - { - var oldPowered = Powered; - _needsPower = newNeedsPower; - if (oldPowered != Powered) - { - OnNewPowerState(); - } - } - - private void SetPowerDisabled(bool newPowerDisabled) - { - var oldPowered = Powered; - _powerDisabled = newPowerDisabled; - if (oldPowered != Powered) - { - OnNewPowerState(); - } - } - private void OnNewPowerState() { SendMessage(new PowerChangedMessage(Powered)); @@ -211,7 +193,7 @@ namespace Content.Server.Power.Components } else { - ClearProvider(); + Provider = null; } } diff --git a/Content.Server/Power/Components/BaseApcNetComponent.cs b/Content.Server/Power/Components/BaseApcNetComponent.cs new file mode 100644 index 0000000000..e004606107 --- /dev/null +++ b/Content.Server/Power/Components/BaseApcNetComponent.cs @@ -0,0 +1,9 @@ +#nullable enable +using Content.Server.Power.NodeGroups; + +namespace Content.Server.Power.Components +{ + public abstract class BaseApcNetComponent : BaseNetConnectorComponent + { + } +} diff --git a/Content.Server/Power/Components/BaseCharger.cs b/Content.Server/Power/Components/BaseCharger.cs index a438ad97cb..753e5d59e8 100644 --- a/Content.Server/Power/Components/BaseCharger.cs +++ b/Content.Server/Power/Components/BaseCharger.cs @@ -1,7 +1,6 @@ #nullable enable using System; using System.Threading.Tasks; -using Content.Server.Battery.Components; using Content.Server.Hands.Components; using Content.Server.Items; using Content.Server.Weapon.Ranged.Barrels.Components; @@ -45,7 +44,7 @@ namespace Content.Server.Power.Components { base.Initialize(); - Owner.EnsureComponent(); + Owner.EnsureComponent(); _container = ContainerHelpers.EnsureContainer(Owner, $"{Name}-powerCellContainer"); // Default state in the visualizer is OFF, so when this gets powered on during initialization it will generally show empty } @@ -191,7 +190,7 @@ namespace Content.Server.Power.Components private CellChargerStatus GetStatus() { - if (Owner.TryGetComponent(out PowerReceiverComponent? receiver) && + if (Owner.TryGetComponent(out ApcPowerReceiverComponent? receiver) && !receiver.Powered) { return CellChargerStatus.Off; @@ -234,7 +233,7 @@ namespace Content.Server.Power.Components // Not called UpdateAppearance just because it messes with the load var status = GetStatus(); if (_status == status || - !Owner.TryGetComponent(out PowerReceiverComponent? receiver)) + !Owner.TryGetComponent(out ApcPowerReceiverComponent? receiver)) { return; } @@ -279,7 +278,7 @@ namespace Content.Server.Power.Components private void TransferPower(float frameTime) { - if (Owner.TryGetComponent(out PowerReceiverComponent? receiver) && + if (Owner.TryGetComponent(out ApcPowerReceiverComponent? receiver) && !receiver.Powered) { return; diff --git a/Content.Server/Power/Components/BaseNetConnectorComponent.cs b/Content.Server/Power/Components/BaseNetConnectorComponent.cs index 017b80ca65..d24fb16191 100644 --- a/Content.Server/Power/Components/BaseNetConnectorComponent.cs +++ b/Content.Server/Power/Components/BaseNetConnectorComponent.cs @@ -17,23 +17,18 @@ namespace Content.Server.Power.Components private Voltage _voltage = Voltage.High; [ViewVariables] - public TNetType Net { get => _net; set => SetNet(value); } - private TNetType _net = default!; //set in OnAdd() - - protected abstract TNetType NullNet { get; } + public TNetType? Net { get => _net; set => SetNet(value); } + private TNetType? _net; [ViewVariables] - private bool _needsNet = true; + private bool _needsNet => _net != null; - protected override void OnAdd() - { - base.OnAdd(); - _net = NullNet; - } + [DataField("node")] [ViewVariables] public string? NodeId; protected override void Initialize() { base.Initialize(); + if (_needsNet) { TryFindAndSetNet(); @@ -56,9 +51,8 @@ namespace Content.Server.Power.Components public void ClearNet() { - RemoveSelfFromNet(_net); - _net = NullNet; - _needsNet = true; + if (_net != null) + RemoveSelfFromNet(_net); } protected abstract void AddSelfToNet(TNetType net); @@ -70,7 +64,7 @@ namespace Content.Server.Power.Components if (Owner.TryGetComponent(out var container)) { var compatibleNet = container.Nodes.Values - .Where(node => node.NodeGroupID == (NodeGroupID) Voltage) + .Where(node => (NodeId == null || NodeId == node.Name) && node.NodeGroupID == (NodeGroupID) Voltage) .Select(node => node.NodeGroup) .OfType() .FirstOrDefault(); @@ -85,12 +79,15 @@ namespace Content.Server.Power.Components return false; } - private void SetNet(TNetType newNet) + private void SetNet(TNetType? newNet) { - RemoveSelfFromNet(_net); - AddSelfToNet(newNet); + if (_net != null) + RemoveSelfFromNet(_net); + + if (newNet != null) + AddSelfToNet(newNet); + _net = newNet; - _needsNet = false; } private void SetVoltage(Voltage newVoltage) diff --git a/Content.Server/Power/Components/BasePowerNetComponent.cs b/Content.Server/Power/Components/BasePowerNetComponent.cs index 78e00cf9dd..c25715abb4 100644 --- a/Content.Server/Power/Components/BasePowerNetComponent.cs +++ b/Content.Server/Power/Components/BasePowerNetComponent.cs @@ -1,10 +1,10 @@ #nullable enable using Content.Server.NodeContainer.NodeGroups; +using Content.Server.Power.NodeGroups; namespace Content.Server.Power.Components { public abstract class BasePowerNetComponent : BaseNetConnectorComponent { - protected override IPowerNet NullNet => PowerNetNodeGroup.NullNet; } } diff --git a/Content.Server/Power/Components/BatteryChargerComponent.cs b/Content.Server/Power/Components/BatteryChargerComponent.cs new file mode 100644 index 0000000000..f6b472cdb4 --- /dev/null +++ b/Content.Server/Power/Components/BatteryChargerComponent.cs @@ -0,0 +1,24 @@ +using Content.Server.Power.NodeGroups; +using Robust.Shared.GameObjects; + +namespace Content.Server.Power.Components +{ + /// + /// Connects the loading side of a to a non-APC power network. + /// + [RegisterComponent] + public class BatteryChargerComponent : BasePowerNetComponent + { + public override string Name => "BatteryCharger"; + + protected override void AddSelfToNet(IPowerNet net) + { + net.AddCharger(this); + } + + protected override void RemoveSelfFromNet(IPowerNet net) + { + net.RemoveCharger(this); + } + } +} diff --git a/Content.Server/Battery/Components/BatteryComponent.cs b/Content.Server/Power/Components/BatteryComponent.cs similarity index 73% rename from Content.Server/Battery/Components/BatteryComponent.cs rename to Content.Server/Power/Components/BatteryComponent.cs index bc0ea33f65..480afbde0e 100644 --- a/Content.Server/Battery/Components/BatteryComponent.cs +++ b/Content.Server/Power/Components/BatteryComponent.cs @@ -5,8 +5,11 @@ using Robust.Shared.Maths; using Robust.Shared.Serialization.Manager.Attributes; using Robust.Shared.ViewVariables; -namespace Content.Server.Battery.Components +namespace Content.Server.Power.Components { + /// + /// Battery node on the pow3r network. Needs other components to connect to actual networks. + /// [RegisterComponent] public class BatteryComponent : Component { @@ -15,9 +18,9 @@ namespace Content.Server.Battery.Components /// /// Maximum charge of the battery in joules (ie. watt seconds) /// - [ViewVariables(VVAccess.ReadWrite)] public int MaxCharge { get => _maxCharge; set => SetMaxCharge(value); } + [ViewVariables(VVAccess.ReadWrite)] public float MaxCharge { get => _maxCharge; set => SetMaxCharge(value); } [DataField("maxCharge")] - private int _maxCharge = 1000; + private float _maxCharge; /// /// Current charge of the battery in joules (ie. watt seconds) @@ -25,7 +28,7 @@ namespace Content.Server.Battery.Components [ViewVariables(VVAccess.ReadWrite)] public float CurrentCharge { get => _currentCharge; set => SetCurrentCharge(value); } [DataField("startingCharge")] - private float _currentCharge = 500; + private float _currentCharge; /// /// True if the battery is fully charged. @@ -36,14 +39,6 @@ namespace Content.Server.Battery.Components [ViewVariables(VVAccess.ReadWrite)] [DataField("autoRechargeRate")] public float AutoRechargeRate { get; set; } - [ViewVariables] public BatteryState BatteryState { get; private set; } - - protected override void Initialize() - { - base.Initialize(); - UpdateStorageState(); - } - /// /// If sufficient charge is avaiable on the battery, use it. Otherwise, don't. /// @@ -83,34 +78,16 @@ namespace Content.Server.Battery.Components protected virtual void OnChargeChanged() { } - private void UpdateStorageState() - { - if (IsFullyCharged) - { - BatteryState = BatteryState.Full; - } - else if (CurrentCharge == 0) - { - BatteryState = BatteryState.Empty; - } - else - { - BatteryState = BatteryState.PartlyFull; - } - } - - private void SetMaxCharge(int newMax) + private void SetMaxCharge(float newMax) { _maxCharge = Math.Max(newMax, 0); _currentCharge = Math.Min(_currentCharge, MaxCharge); - UpdateStorageState(); OnChargeChanged(); } private void SetCurrentCharge(float newChargeAmount) { _currentCharge = MathHelper.Clamp(newChargeAmount, 0, MaxCharge); - UpdateStorageState(); OnChargeChanged(); } @@ -121,11 +98,4 @@ namespace Content.Server.Battery.Components CurrentCharge += AutoRechargeRate * frameTime; } } - - public enum BatteryState - { - Full, - PartlyFull, - Empty - } } diff --git a/Content.Server/Power/Components/BatteryDischargerComponent.cs b/Content.Server/Power/Components/BatteryDischargerComponent.cs index 62335e2727..37cb8dbe58 100644 --- a/Content.Server/Power/Components/BatteryDischargerComponent.cs +++ b/Content.Server/Power/Components/BatteryDischargerComponent.cs @@ -1,79 +1,21 @@ -#nullable enable -using Content.Server.Battery.Components; +using Content.Server.Power.NodeGroups; using Robust.Shared.GameObjects; -using Robust.Shared.Serialization.Manager.Attributes; -using Robust.Shared.ViewVariables; namespace Content.Server.Power.Components { - /// - /// Uses charge from a to supply power via a . - /// [RegisterComponent] - public class BatteryDischargerComponent : Component + public class BatteryDischargerComponent : BasePowerNetComponent { public override string Name => "BatteryDischarger"; - [ViewVariables] - [ComponentDependency] private BatteryComponent? _battery = default!; - - [ViewVariables] - [ComponentDependency] private PowerSupplierComponent? _supplier = default!; - - [ViewVariables(VVAccess.ReadWrite)] - public int ActiveSupplyRate { get => _activeSupplyRate; set => SetActiveSupplyRate(value); } - - [DataField("activeSupplyRate")] - private int _activeSupplyRate = 50; - - protected override void Initialize() + protected override void AddSelfToNet(IPowerNet net) { - base.Initialize(); - Owner.EnsureComponentWarn(); - UpdateSupplyRate(); + net.AddDischarger(this); } - public void Update(float frameTime) + protected override void RemoveSelfFromNet(IPowerNet net) { - if (_battery == null) - return; - - //Simplified implementation - if the battery is empty, and charge is being added to the battery - //at a lower rate that this is using it, the charge is used without creating power supply. - _battery.CurrentCharge -= ActiveSupplyRate * frameTime; - UpdateSupplyRate(); - } - - private void UpdateSupplyRate() - { - if (_battery == null) - return; - - if (_battery.BatteryState == BatteryState.Empty) - { - SetSupplierSupplyRate(0); - } - else - { - SetSupplierSupplyRate(ActiveSupplyRate); - } - } - - private void SetSupplierSupplyRate(int newSupplierSupplyRate) - { - if (_supplier == null) - return; - - if (_supplier.SupplyRate != newSupplierSupplyRate) - { - _supplier.SupplyRate = newSupplierSupplyRate; - } - } - - private void SetActiveSupplyRate(int newEnabledSupplyRate) - { - _activeSupplyRate = newEnabledSupplyRate; - UpdateSupplyRate(); + net.RemoveDischarger(this); } } } diff --git a/Content.Server/Power/Components/BatteryStorageComponent.cs b/Content.Server/Power/Components/BatteryStorageComponent.cs deleted file mode 100644 index daa1dba4d6..0000000000 --- a/Content.Server/Power/Components/BatteryStorageComponent.cs +++ /dev/null @@ -1,79 +0,0 @@ -#nullable enable -using Content.Server.Battery.Components; -using Robust.Shared.GameObjects; -using Robust.Shared.Serialization.Manager.Attributes; -using Robust.Shared.ViewVariables; - -namespace Content.Server.Power.Components -{ - /// - /// Takes power via a to charge a . - /// - [RegisterComponent] - public class BatteryStorageComponent : Component - { - public override string Name => "BatteryStorage"; - - [ViewVariables(VVAccess.ReadWrite)] - public int ActiveDrawRate { get => _activeDrawRate; set => SetActiveDrawRate(value); } - [DataField("activeDrawRate")] - private int _activeDrawRate = 100; - - [ViewVariables] - [ComponentDependency] private BatteryComponent? _battery = default!; - - [ViewVariables] - public PowerConsumerComponent? Consumer => _consumer; - - [ComponentDependency] private PowerConsumerComponent? _consumer = default!; - - protected override void Initialize() - { - base.Initialize(); - Owner.EnsureComponentWarn(); - UpdateDrawRate(); - } - - public void Update(float frameTime) - { - if (_consumer == null || _battery == null) - return; - - //Simplified implementation - If a frame adds more power to a partially full battery than it can hold, the power is lost. - _battery.CurrentCharge += _consumer.ReceivedPower * frameTime; - UpdateDrawRate(); - } - - private void UpdateDrawRate() - { - if (_battery == null) - return; - - if (_battery.BatteryState == BatteryState.Full) - { - SetConsumerDraw(0); - } - else - { - SetConsumerDraw(ActiveDrawRate); - } - } - - private void SetConsumerDraw(int newConsumerDrawRate) - { - if (_consumer == null) - return; - - if (_consumer.DrawRate != newConsumerDrawRate) - { - _consumer.DrawRate = newConsumerDrawRate; - } - } - - private void SetActiveDrawRate(int newEnabledDrawRate) - { - _activeDrawRate = newEnabledDrawRate; - UpdateDrawRate(); - } - } -} diff --git a/Content.Server/Wires/Components/WireComponent.cs b/Content.Server/Power/Components/CableComponent.cs similarity index 61% rename from Content.Server/Wires/Components/WireComponent.cs rename to Content.Server/Power/Components/CableComponent.cs index 473a6d8375..b95f790953 100644 --- a/Content.Server/Wires/Components/WireComponent.cs +++ b/Content.Server/Power/Components/CableComponent.cs @@ -3,45 +3,44 @@ using System.Threading.Tasks; using Content.Server.Stack; using Content.Server.Tools.Components; using Content.Shared.Interaction; -using Content.Shared.Stacks; using Content.Shared.Tool; using Robust.Shared.GameObjects; using Robust.Shared.Serialization.Manager.Attributes; using Robust.Shared.ViewVariables; -namespace Content.Server.Wires.Components +namespace Content.Server.Power.Components { /// - /// Allows the attached entity to be destroyed by a cutting tool, dropping a piece of wire. + /// Allows the attached entity to be destroyed by a cutting tool, dropping a piece of cable. /// [RegisterComponent] - public class WireComponent : Component, IInteractUsing + public class CableComponent : Component, IInteractUsing { - public override string Name => "Wire"; + public override string Name => "Cable"; [ViewVariables] - [DataField("wireDroppedOnCutPrototype")] - private string? _wireDroppedOnCutPrototype = "HVWireStack1"; + [DataField("cableDroppedOnCutPrototype")] + private string? _cableDroppedOnCutPrototype = "CableHVStack1"; /// - /// Checked by to determine if there is - /// already a wire of a type on a tile. + /// Checked by to determine if there is + /// already a cable of a type on a tile. /// [ViewVariables] - public WireType WireType => _wireType; - [DataField("wireType")] - private WireType _wireType = WireType.HighVoltage; + public CableType CableType => _cableType; + [DataField("cableType")] + private CableType _cableType = CableType.HighVoltage; async Task IInteractUsing.InteractUsing(InteractUsingEventArgs eventArgs) { - if (_wireDroppedOnCutPrototype == null) + if (_cableDroppedOnCutPrototype == null) return false; if (!eventArgs.Using.TryGetComponent(out var tool)) return false; if (!await tool.UseTool(eventArgs.User, Owner, 0.25f, ToolQuality.Cutting)) return false; Owner.Delete(); - var droppedEnt = Owner.EntityManager.SpawnEntity(_wireDroppedOnCutPrototype, eventArgs.ClickLocation); + var droppedEnt = Owner.EntityManager.SpawnEntity(_cableDroppedOnCutPrototype, eventArgs.ClickLocation); // TODO: Literally just use a prototype that has a single thing in the stack, it's not that complicated... if (droppedEnt.TryGetComponent(out var stack)) @@ -51,7 +50,7 @@ namespace Content.Server.Wires.Components } } - public enum WireType + public enum CableType { HighVoltage, MediumVoltage, diff --git a/Content.Server/Wires/Components/WirePlacerComponent.cs b/Content.Server/Power/Components/CablePlacerComponent.cs similarity index 73% rename from Content.Server/Wires/Components/WirePlacerComponent.cs rename to Content.Server/Power/Components/CablePlacerComponent.cs index 6b83e9de6c..a2eb805730 100644 --- a/Content.Server/Wires/Components/WirePlacerComponent.cs +++ b/Content.Server/Power/Components/CablePlacerComponent.cs @@ -9,28 +9,28 @@ using Robust.Shared.Map; using Robust.Shared.Serialization.Manager.Attributes; using Robust.Shared.ViewVariables; -namespace Content.Server.Wires.Components +namespace Content.Server.Power.Components { [RegisterComponent] - internal class WirePlacerComponent : Component, IAfterInteract + internal class CablePlacerComponent : Component, IAfterInteract { [Dependency] private readonly IMapManager _mapManager = default!; /// - public override string Name => "WirePlacer"; + public override string Name => "CablePlacer"; [ViewVariables] - [DataField("wirePrototypeID")] - private string? _wirePrototypeID = "HVWire"; + [DataField("cablePrototypeID")] + private string? _cablePrototypeID = "CableHV"; [ViewVariables] [DataField("blockingWireType")] - private WireType _blockingWireType = WireType.HighVoltage; + private CableType _blockingCableType = CableType.HighVoltage; /// async Task IAfterInteract.AfterInteract(AfterInteractEventArgs eventArgs) { - if (_wirePrototypeID == null) + if (_cablePrototypeID == null) return true; if (!eventArgs.InRangeUnobstructed(ignoreInsideBlocker: true, popup: true)) return true; @@ -41,7 +41,7 @@ namespace Content.Server.Wires.Components return true; foreach (var anchored in grid.GetAnchoredEntities(snapPos)) { - if (Owner.EntityManager.ComponentManager.TryGetComponent(anchored, out var wire) && wire.WireType == _blockingWireType) + if (Owner.EntityManager.ComponentManager.TryGetComponent(anchored, out var wire) && wire.CableType == _blockingCableType) { return true; } @@ -51,7 +51,7 @@ namespace Content.Server.Wires.Components && !EntitySystem.Get().Use(Owner.Uid, stack, 1)) return true; - Owner.EntityManager.SpawnEntity(_wirePrototypeID, grid.GridTileToLocal(snapPos)); + Owner.EntityManager.SpawnEntity(_cablePrototypeID, grid.GridTileToLocal(snapPos)); return true; } } diff --git a/Content.Server/Power/Components/CableVisComponent.cs b/Content.Server/Power/Components/CableVisComponent.cs new file mode 100644 index 0000000000..add61d7de5 --- /dev/null +++ b/Content.Server/Power/Components/CableVisComponent.cs @@ -0,0 +1,16 @@ +using Robust.Shared.GameObjects; +using Robust.Shared.Serialization.Manager.Attributes; +using Robust.Shared.ViewVariables; + +namespace Content.Server.Power.Components +{ + [RegisterComponent] + public sealed class CableVisComponent : Component + { + public override string Name => "CableVis"; + + [ViewVariables(VVAccess.ReadWrite)] + [DataField("node")] + public string? Node; + } +} diff --git a/Content.Server/Battery/Components/ExaminableBatteryComponent.cs b/Content.Server/Power/Components/ExaminableBatteryComponent.cs similarity index 96% rename from Content.Server/Battery/Components/ExaminableBatteryComponent.cs rename to Content.Server/Power/Components/ExaminableBatteryComponent.cs index 202572e568..e5da57a61c 100644 --- a/Content.Server/Battery/Components/ExaminableBatteryComponent.cs +++ b/Content.Server/Power/Components/ExaminableBatteryComponent.cs @@ -5,7 +5,7 @@ using Robust.Shared.Localization; using Robust.Shared.Utility; using Robust.Shared.ViewVariables; -namespace Content.Server.Battery.Components +namespace Content.Server.Power.Components { [RegisterComponent] public class ExaminableBatteryComponent : Component, IExamine diff --git a/Content.Server/Power/Components/IPowerNetManager.cs b/Content.Server/Power/Components/IPowerNetManager.cs deleted file mode 100644 index 51487f2297..0000000000 --- a/Content.Server/Power/Components/IPowerNetManager.cs +++ /dev/null @@ -1,39 +0,0 @@ -#nullable enable -using System.Collections.Generic; -using Content.Server.NodeContainer.NodeGroups; - -namespace Content.Server.Power.Components -{ - /// - /// Maintains a set of s that need to be updated with . - /// Defers updating to reduce recalculations when a group is altered multiple times in a frame. - /// - public interface IPowerNetManager - { - /// - /// Queue up an to be updated. - /// - void AddDirtyPowerNet(IPowerNet powerNet); - - void Update(float frameTime); - } - - public class PowerNetManager : IPowerNetManager - { - private readonly HashSet _dirtyPowerNets = new(); - - public void AddDirtyPowerNet(IPowerNet powerNet) - { - _dirtyPowerNets.Add(powerNet); - } - - public void Update(float frameTime) - { - foreach (var powerNet in _dirtyPowerNets) - { - powerNet.UpdateConsumerReceivedPower(); - } - _dirtyPowerNets.Clear(); - } - } -} diff --git a/Content.Server/Power/Components/PowerConsumerComponent.cs b/Content.Server/Power/Components/PowerConsumerComponent.cs index 94c3f2b064..a9c44434bd 100644 --- a/Content.Server/Power/Components/PowerConsumerComponent.cs +++ b/Content.Server/Power/Components/PowerConsumerComponent.cs @@ -1,13 +1,15 @@ #nullable enable -using System; -using System.Diagnostics; -using Content.Server.NodeContainer.NodeGroups; +using Content.Server.Power.NodeGroups; +using Content.Server.Power.Pow3r; using Robust.Shared.GameObjects; using Robust.Shared.Serialization.Manager.Attributes; using Robust.Shared.ViewVariables; namespace Content.Server.Power.Components { + /// + /// Draws power directly from an MV or HV wire it is on top of. + /// [RegisterComponent] public class PowerConsumerComponent : BasePowerNetComponent { @@ -16,28 +18,19 @@ namespace Content.Server.Power.Components /// /// How much power this needs to be fully powered. /// - [ViewVariables(VVAccess.ReadWrite)] - public int DrawRate { get => _drawRate; set => SetDrawRate(value); } [DataField("drawRate")] - private int _drawRate; - - /// - /// Determines which s receive power when there is not enough - /// power for each. - /// [ViewVariables(VVAccess.ReadWrite)] - public Priority Priority { get => _priority; set => SetPriority(value); } - [DataField("priority")] - private Priority _priority = Priority.First; + public float DrawRate { get => NetworkLoad.DesiredPower; set => NetworkLoad.DesiredPower = value; } /// /// How much power this is currently receiving from s. /// [ViewVariables] - public int ReceivedPower { get => _receivedPower; set => SetReceivedPower(value); } - private int _receivedPower; + public float ReceivedPower => NetworkLoad.ReceivingPower; - public event EventHandler? OnReceivedPowerChanged; + public float LastReceived = float.NaN; + + public PowerState.Load NetworkLoad { get; } = new(); protected override void AddSelfToNet(IPowerNet powerNet) { @@ -48,44 +41,5 @@ namespace Content.Server.Power.Components { powerNet.RemoveConsumer(this); } - - private void SetDrawRate(int newDrawRate) - { - var oldDrawRate = DrawRate; - _drawRate = newDrawRate; //must be set before updating powernet, as it checks the DrawRate of every consumer - Net.UpdateConsumerDraw(this, oldDrawRate, newDrawRate); - } - - private void SetReceivedPower(int newReceivedPower) - { - Debug.Assert(newReceivedPower >= 0 && newReceivedPower <= DrawRate); - if(_receivedPower == newReceivedPower) return; - _receivedPower = newReceivedPower; - OnReceivedPowerChanged?.Invoke(this, new ReceivedPowerChangedEventArgs(_drawRate, _receivedPower)); - } - - private void SetPriority(Priority newPriority) - { - Net.UpdateConsumerPriority(this, Priority, newPriority); - _priority = newPriority; - } - } - - public enum Priority - { - First, - Last, - } - - public class ReceivedPowerChangedEventArgs : EventArgs - { - public readonly int DrawRate; - public readonly int ReceivedPower; - - public ReceivedPowerChangedEventArgs(int drawRate, int receivedPower) - { - DrawRate = drawRate; - ReceivedPower = receivedPower; - } } } diff --git a/Content.Server/Power/Components/PowerNetworkBatteryComponent.cs b/Content.Server/Power/Components/PowerNetworkBatteryComponent.cs new file mode 100644 index 0000000000..5da505e03d --- /dev/null +++ b/Content.Server/Power/Components/PowerNetworkBatteryComponent.cs @@ -0,0 +1,119 @@ +using Content.Server.Power.Pow3r; +using Robust.Shared.GameObjects; +using Robust.Shared.Serialization.Manager.Attributes; +using Robust.Shared.ViewVariables; + +namespace Content.Server.Power.Components +{ + /// + /// Glue component that manages the pow3r network node for batteries that are connected to the power network. + /// + /// + /// This needs components like to work correctly, + /// and battery storage should be handed off to components like . + /// + [RegisterComponent] + public sealed class PowerNetworkBatteryComponent : Component + { + public override string Name => "PowerNetworkBattery"; + + [DataField("maxChargeRate")] + [ViewVariables(VVAccess.ReadWrite)] + public float MaxChargeRate + { + get => NetworkBattery.MaxChargeRate; + set => NetworkBattery.MaxChargeRate = value; + } + + [DataField("maxSupply")] + [ViewVariables(VVAccess.ReadWrite)] + public float MaxSupply + { + get => NetworkBattery.MaxSupply; + set => NetworkBattery.MaxSupply = value; + } + + [DataField("supplyRampTolerance")] + [ViewVariables(VVAccess.ReadWrite)] + public float SupplyRampTolerance + { + get => NetworkBattery.SupplyRampTolerance; + set => NetworkBattery.SupplyRampTolerance = value; + } + + [DataField("supplyRampRate")] + [ViewVariables(VVAccess.ReadWrite)] + public float SupplyRampRate + { + get => NetworkBattery.SupplyRampRate; + set => NetworkBattery.SupplyRampRate = value; + } + + [DataField("supplyRampPosition")] + [ViewVariables(VVAccess.ReadWrite)] + public float SupplyRampPosition + { + get => NetworkBattery.SupplyRampPosition; + set => NetworkBattery.SupplyRampPosition = value; + } + + [DataField("currentSupply")] + [ViewVariables(VVAccess.ReadWrite)] + public float CurrentSupply + { + get => NetworkBattery.CurrentSupply; + set => NetworkBattery.CurrentSupply = value; + } + + [DataField("currentReceiving")] + [ViewVariables(VVAccess.ReadWrite)] + public float CurrentReceiving + { + get => NetworkBattery.CurrentReceiving; + set => NetworkBattery.CurrentReceiving = value; + } + + [DataField("loadingNetworkDemand")] + [ViewVariables(VVAccess.ReadWrite)] + public float LoadingNetworkDemand + { + get => NetworkBattery.LoadingNetworkDemand; + set => NetworkBattery.LoadingNetworkDemand = value; + } + + [DataField("enabled")] + [ViewVariables(VVAccess.ReadWrite)] + public bool Enabled + { + get => NetworkBattery.Enabled; + set => NetworkBattery.Enabled = value; + } + + [DataField("canCharge")] + [ViewVariables(VVAccess.ReadWrite)] + public bool CanCharge + { + get => NetworkBattery.CanCharge; + set => NetworkBattery.CanCharge = value; + } + + [DataField("canDisharge")] + [ViewVariables(VVAccess.ReadWrite)] + public bool CanDischarge + { + get => NetworkBattery.CanDischarge; + set => NetworkBattery.CanDischarge = value; + } + + [DataField("efficiency")] + [ViewVariables(VVAccess.ReadWrite)] + public float Efficiency + { + get => NetworkBattery.Efficiency; + set => NetworkBattery.Efficiency = value; + } + + [ViewVariables] + public PowerState.Battery NetworkBattery { get; } = new(); + } +} diff --git a/Content.Server/Power/Components/PowerProviderComponent.cs b/Content.Server/Power/Components/PowerProviderComponent.cs deleted file mode 100644 index 1b8a35cbf2..0000000000 --- a/Content.Server/Power/Components/PowerProviderComponent.cs +++ /dev/null @@ -1,174 +0,0 @@ -#nullable enable -using System; -using System.Collections.Generic; -using Content.Server.APC; -using Content.Server.APC.Components; -using Robust.Shared.GameObjects; -using Robust.Shared.IoC; -using Robust.Shared.Serialization.Manager.Attributes; -using Robust.Shared.ViewVariables; - -namespace Content.Server.Power.Components -{ - /// - /// Relays s in an area to a so they can receive power. - /// - public interface IPowerProvider - { - void AddReceiver(PowerReceiverComponent receiver); - - void RemoveReceiver(PowerReceiverComponent receiver); - - void UpdateReceiverLoad(int oldLoad, int newLoad); - - public IEntity? ProviderOwner { get; } - - public bool HasApcPower { get; } - } - - [RegisterComponent] - public class PowerProviderComponent : BaseApcNetComponent, IPowerProvider - { - public override string Name => "PowerProvider"; - - public IEntity ProviderOwner => Owner; - - [ViewVariables] - public bool HasApcPower => Net.Powered; - - /// - /// The max distance this can transmit power to s from. - /// - [ViewVariables(VVAccess.ReadWrite)] - public int PowerTransferRange { get => _powerTransferRange; set => SetPowerTransferRange(value); } - [DataField("powerTransferRange")] - private int _powerTransferRange = 3; - - [ViewVariables] - public IReadOnlyList LinkedReceivers => _linkedReceivers; - private List _linkedReceivers = new(); - - /// - /// If s should consider connecting to this. - /// - [ViewVariables(VVAccess.ReadWrite)] - public bool Connectable { get; private set; } = true; - - public static readonly IPowerProvider NullProvider = new NullPowerProvider(); - - public void AddReceiver(PowerReceiverComponent receiver) - { - var oldLoad = GetTotalLoad(); - _linkedReceivers.Add(receiver); - var newLoad = oldLoad + receiver.Load; - Net.UpdatePowerProviderReceivers(this, oldLoad, newLoad); - } - - public void RemoveReceiver(PowerReceiverComponent receiver) - { - var oldLoad = GetTotalLoad(); - _linkedReceivers.Remove(receiver); - var newLoad = oldLoad - receiver.Load; - Net.UpdatePowerProviderReceivers(this, oldLoad, newLoad); - } - - public void UpdateReceiverLoad(int oldLoad, int newLoad) - { - Net.UpdatePowerProviderReceivers(this, oldLoad, newLoad); - } - - protected override void Startup() - { - base.Startup(); - foreach (var receiver in FindAvailableReceivers()) - { - receiver.Provider = this; - } - } - - protected override void OnRemove() - { - Connectable = false; - var receivers = _linkedReceivers.ToArray(); - foreach (var receiver in receivers) - { - receiver.ClearProvider(); - } - foreach (var receiver in receivers) - { - receiver.TryFindAndSetProvider(); - } - base.OnRemove(); - } - - private List FindAvailableReceivers() - { - var nearbyEntities = IoCManager.Resolve() - .GetEntitiesInRange(Owner, PowerTransferRange); - - var receivers = new List(); - - foreach (var entity in nearbyEntities) - { - if (entity.TryGetComponent(out var receiver) && - receiver.Connectable && - receiver.NeedsProvider && - receiver.Owner.Transform.Coordinates.TryDistance(Owner.EntityManager, Owner.Transform.Coordinates, out var distance) && - distance < Math.Min(PowerTransferRange, receiver.PowerReceptionRange)) - { - receivers.Add(receiver); - } - } - return receivers; - } - - protected override void AddSelfToNet(IApcNet apcNet) - { - apcNet.AddPowerProvider(this); - } - - protected override void RemoveSelfFromNet(IApcNet apcNet) - { - apcNet.RemovePowerProvider(this); - } - - private void SetPowerTransferRange(int newPowerTransferRange) - { - var receivers = _linkedReceivers.ToArray(); - - foreach (var receiver in receivers) - { - receiver.ClearProvider(); - } - _powerTransferRange = newPowerTransferRange; - - foreach (var receiver in receivers) - { - receiver.TryFindAndSetProvider(); - } - } - - private int GetTotalLoad() - { - var load = 0; - foreach (var receiver in _linkedReceivers) - { - load += receiver.Load; - } - return load; - } - - private class NullPowerProvider : IPowerProvider - { - /// - /// It is important that this returns false, so s with a have no power. - /// - public bool HasApcPower => false; - - public void AddReceiver(PowerReceiverComponent receiver) { } - public void RemoveReceiver(PowerReceiverComponent receiver) { } - public void UpdateReceiverLoad(int oldLoad, int newLoad) { } - public IEntity? ProviderOwner => default; - } - } -} diff --git a/Content.Server/Power/Components/PowerSupplierComponent.cs b/Content.Server/Power/Components/PowerSupplierComponent.cs index bbd8b658fd..c145cd6803 100644 --- a/Content.Server/Power/Components/PowerSupplierComponent.cs +++ b/Content.Server/Power/Components/PowerSupplierComponent.cs @@ -1,5 +1,6 @@ #nullable enable -using Content.Server.NodeContainer.NodeGroups; +using Content.Server.Power.NodeGroups; +using Content.Server.Power.Pow3r; using Robust.Shared.GameObjects; using Robust.Shared.Serialization.Manager.Attributes; using Robust.Shared.ViewVariables; @@ -12,9 +13,45 @@ namespace Content.Server.Power.Components public override string Name => "PowerSupplier"; [ViewVariables(VVAccess.ReadWrite)] - public int SupplyRate { get => _supplyRate; set => SetSupplyRate(value); } [DataField("supplyRate")] - private int _supplyRate; + public float MaxSupply { get => NetworkSupply.MaxSupply; set => NetworkSupply.MaxSupply = value; } + + [ViewVariables(VVAccess.ReadWrite)] + [DataField("supplyRampTolerance")] + public float SupplyRampTolerance + { + get => NetworkSupply.SupplyRampTolerance; + set => NetworkSupply.SupplyRampTolerance = value; + } + + [ViewVariables(VVAccess.ReadWrite)] + [DataField("supplyRampRate")] + public float SupplyRampRate + { + get => NetworkSupply.SupplyRampRate; + set => NetworkSupply.SupplyRampRate = value; + } + + [ViewVariables(VVAccess.ReadWrite)] + [DataField("supplyRampPosition")] + public float SupplyRampPosition + { + get => NetworkSupply.SupplyRampPosition; + set => NetworkSupply.SupplyRampPosition = value; + } + + [ViewVariables(VVAccess.ReadWrite)] + [DataField("enabled")] + public bool Enabled + { + get => NetworkSupply.Enabled; + set => NetworkSupply.Enabled = value; + } + + [ViewVariables] public float CurrentSupply => NetworkSupply.CurrentSupply; + + [ViewVariables] + public PowerState.Supply NetworkSupply { get; } = new(); protected override void AddSelfToNet(IPowerNet powerNet) { @@ -25,11 +62,5 @@ namespace Content.Server.Power.Components { powerNet.RemoveSupplier(this); } - - private void SetSupplyRate(int newSupplyRate) - { - Net.UpdateSupplierSupply(this, SupplyRate, newSupplyRate); - _supplyRate = newSupplyRate; - } } } diff --git a/Content.Server/Battery/DrainAllBatteriesCommand.cs b/Content.Server/Power/DrainAllBatteriesCommand.cs similarity index 78% rename from Content.Server/Battery/DrainAllBatteriesCommand.cs rename to Content.Server/Power/DrainAllBatteriesCommand.cs index 561d171d5b..431e68c4d8 100644 --- a/Content.Server/Battery/DrainAllBatteriesCommand.cs +++ b/Content.Server/Power/DrainAllBatteriesCommand.cs @@ -1,12 +1,12 @@ #nullable enable using Content.Server.Administration; -using Content.Server.Battery.Components; +using Content.Server.Power.Components; using Content.Shared.Administration; using Robust.Shared.Console; using Robust.Shared.GameObjects; using Robust.Shared.IoC; -namespace Content.Server.Battery +namespace Content.Server.Power { [AdminCommand(AdminFlags.Admin)] public class DrainAllBatteriesCommand : IConsoleCommand @@ -23,8 +23,8 @@ namespace Content.Server.Battery return; } - var entityManager = IoCManager.Resolve(); - foreach (var batteryComp in entityManager.ComponentManager.EntityQuery()) + var comp = IoCManager.Resolve(); + foreach (var batteryComp in comp.EntityQuery()) { batteryComp.CurrentCharge = 0; } diff --git a/Content.Server/Power/EntitySystems/BatterySystem.cs b/Content.Server/Power/EntitySystems/BatterySystem.cs new file mode 100644 index 0000000000..ce54a7e866 --- /dev/null +++ b/Content.Server/Power/EntitySystems/BatterySystem.cs @@ -0,0 +1,42 @@ +#nullable enable +using Content.Server.Power.Components; +using JetBrains.Annotations; +using Robust.Shared.GameObjects; + +namespace Content.Server.Power.EntitySystems +{ + [UsedImplicitly] + public class BatterySystem : EntitySystem + { + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(PreSync); + SubscribeLocalEvent(PostSync); + } + + private void PreSync(EntityUid uid, BatteryComponent component, NetworkBatteryPreSync args) + { + var networkBattery = ComponentManager.GetComponent(uid); + + networkBattery.NetworkBattery.Capacity = component.MaxCharge; + networkBattery.NetworkBattery.CurrentStorage = component.CurrentCharge; + } + + private void PostSync(EntityUid uid, BatteryComponent component, NetworkBatteryPostSync args) + { + var networkBattery = ComponentManager.GetComponent(uid); + + component.CurrentCharge = networkBattery.NetworkBattery.CurrentStorage; + } + + public override void Update(float frameTime) + { + foreach (var comp in ComponentManager.EntityQuery()) + { + comp.OnUpdate(frameTime); + } + } + } +} diff --git a/Content.Server/Power/EntitySystems/CableVisSystem.cs b/Content.Server/Power/EntitySystems/CableVisSystem.cs new file mode 100644 index 0000000000..d0425d63b5 --- /dev/null +++ b/Content.Server/Power/EntitySystems/CableVisSystem.cs @@ -0,0 +1,85 @@ +using System.Collections.Generic; +using Content.Server.NodeContainer; +using Content.Server.NodeContainer.EntitySystems; +using Content.Server.Power.Components; +using Content.Server.Power.Nodes; +using Content.Shared.Wires; +using JetBrains.Annotations; +using Robust.Server.GameObjects; +using Robust.Shared.GameObjects; +using Robust.Shared.IoC; +using Robust.Shared.Map; + +namespace Content.Server.Power.EntitySystems +{ + [UsedImplicitly] + public sealed class CableVisSystem : EntitySystem + { + [Dependency] private readonly IMapManager _mapManager = default!; + + private readonly HashSet _toUpdate = new(); + + public void QueueUpdate(EntityUid uid) + { + _toUpdate.Add(uid); + } + + public override void Initialize() + { + base.Initialize(); + + UpdatesAfter.Add(typeof(NodeGroupSystem)); + } + + public override void Update(float frameTime) + { + base.Update(frameTime); + + foreach (var uid in _toUpdate) + { + if (!ComponentManager.TryGetComponent(uid, out NodeContainerComponent? nodeContainer) + || !ComponentManager.TryGetComponent(uid, out CableVisComponent? cableVis) + || !ComponentManager.TryGetComponent(uid, out AppearanceComponent? appearance)) + { + continue; + } + + if (cableVis.Node == null) + continue; + + var mask = WireVisDirFlags.None; + + var transform = ComponentManager.GetComponent(uid); + var grid = _mapManager.GetGrid(transform.GridID); + var tile = grid.TileIndicesFor(transform.Coordinates); + var node = nodeContainer.GetNode(cableVis.Node); + + foreach (var reachable in node.ReachableNodes) + { + if (reachable is not CableNode) + continue; + + var otherTransform = reachable.Owner.Transform; + if (otherTransform.GridID != grid.Index) + continue; + + var otherTile = grid.TileIndicesFor(otherTransform.Coordinates); + var diff = otherTile - tile; + + mask |= diff switch + { + (0, 1) => WireVisDirFlags.North, + (0, -1) => WireVisDirFlags.South, + (1, 0) => WireVisDirFlags.East, + (-1, 0) => WireVisDirFlags.West, + _ => WireVisDirFlags.None + }; + } + + appearance.SetData(WireVisVisuals.ConnectedMask, mask); + } + + _toUpdate.Clear(); + } + } +} diff --git a/Content.Server/APC/PowerApcSystem.cs b/Content.Server/Power/EntitySystems/PowerApcSystem.cs similarity index 59% rename from Content.Server/APC/PowerApcSystem.cs rename to Content.Server/Power/EntitySystems/PowerApcSystem.cs index 1aefa669f4..e44b66f260 100644 --- a/Content.Server/APC/PowerApcSystem.cs +++ b/Content.Server/Power/EntitySystems/PowerApcSystem.cs @@ -1,16 +1,23 @@ #nullable enable -using Content.Server.APC.Components; +using Content.Server.Power.Components; using JetBrains.Annotations; using Robust.Shared.GameObjects; -namespace Content.Server.APC +namespace Content.Server.Power.EntitySystems { [UsedImplicitly] internal sealed class PowerApcSystem : EntitySystem { + public override void Initialize() + { + base.Initialize(); + + UpdatesAfter.Add(typeof(PowerNetSystem)); + } + public override void Update(float frameTime) { - foreach (var apc in ComponentManager.EntityQuery(false)) + foreach (var apc in ComponentManager.EntityQuery()) { apc.Update(); } diff --git a/Content.Server/Power/EntitySystems/PowerNetSystem.cs b/Content.Server/Power/EntitySystems/PowerNetSystem.cs index bcb8ec6926..e2b54ac769 100644 --- a/Content.Server/Power/EntitySystems/PowerNetSystem.cs +++ b/Content.Server/Power/EntitySystems/PowerNetSystem.cs @@ -1,20 +1,351 @@ #nullable enable +using System.Collections.Generic; +using Content.Server.NodeContainer.EntitySystems; using Content.Server.Power.Components; +using Content.Server.Power.NodeGroups; +using Content.Server.Power.Pow3r; using JetBrains.Annotations; using Robust.Shared.GameObjects; -using Robust.Shared.IoC; +using Robust.Shared.Maths; namespace Content.Server.Power.EntitySystems { + /// + /// Manages power networks, power state, and all power components. + /// [UsedImplicitly] public class PowerNetSystem : EntitySystem { - [Dependency] private readonly IPowerNetManager _powerNetManager = default!; + private readonly PowerState _powerState = new(); + private readonly HashSet _powerNetReconnectQueue = new(); + private readonly HashSet _apcNetReconnectQueue = new(); + + private int _nextId = 1; + private readonly BatteryRampPegSolver _solver = new(); + + public override void Initialize() + { + base.Initialize(); + + UpdatesAfter.Add(typeof(NodeGroupSystem)); + + SubscribeLocalEvent(ApcPowerReceiverInit); + SubscribeLocalEvent(ApcPowerReceiverShutdown); + SubscribeLocalEvent(ApcPowerReceiverPaused); + SubscribeLocalEvent(BatteryInit); + SubscribeLocalEvent(BatteryShutdown); + SubscribeLocalEvent(BatteryPaused); + SubscribeLocalEvent(PowerConsumerInit); + SubscribeLocalEvent(PowerConsumerShutdown); + SubscribeLocalEvent(PowerConsumerPaused); + SubscribeLocalEvent(PowerSupplierInit); + SubscribeLocalEvent(PowerSupplierShutdown); + SubscribeLocalEvent(PowerSupplierPaused); + } + + private void ApcPowerReceiverInit(EntityUid uid, ApcPowerReceiverComponent component, ComponentInit args) + { + AllocLoad(component.NetworkLoad); + } + + private void ApcPowerReceiverShutdown(EntityUid uid, ApcPowerReceiverComponent component, + ComponentShutdown args) + { + _powerState.Loads.Remove(component.NetworkLoad.Id); + } + + private static void ApcPowerReceiverPaused( + EntityUid uid, + ApcPowerReceiverComponent component, + EntityPausedEvent args) + { + component.NetworkLoad.Paused = args.Paused; + } + + private void BatteryInit(EntityUid uid, PowerNetworkBatteryComponent component, ComponentInit args) + { + AllocBattery(component.NetworkBattery); + } + + private void BatteryShutdown(EntityUid uid, PowerNetworkBatteryComponent component, ComponentShutdown args) + { + _powerState.Batteries.Remove(component.NetworkBattery.Id); + } + + private static void BatteryPaused(EntityUid uid, PowerNetworkBatteryComponent component, EntityPausedEvent args) + { + component.NetworkBattery.Paused = args.Paused; + } + + private void PowerConsumerInit(EntityUid uid, PowerConsumerComponent component, ComponentInit args) + { + AllocLoad(component.NetworkLoad); + } + + private void PowerConsumerShutdown(EntityUid uid, PowerConsumerComponent component, ComponentShutdown args) + { + _powerState.Loads.Remove(component.NetworkLoad.Id); + } + + private static void PowerConsumerPaused(EntityUid uid, PowerConsumerComponent component, EntityPausedEvent args) + { + component.NetworkLoad.Paused = args.Paused; + } + + private void PowerSupplierInit(EntityUid uid, PowerSupplierComponent component, ComponentInit args) + { + AllocSupply(component.NetworkSupply); + } + + private void PowerSupplierShutdown(EntityUid uid, PowerSupplierComponent component, ComponentShutdown args) + { + _powerState.Supplies.Remove(component.NetworkSupply.Id); + } + + private static void PowerSupplierPaused(EntityUid uid, PowerSupplierComponent component, EntityPausedEvent args) + { + component.NetworkSupply.Paused = args.Paused; + } + + public void InitPowerNet(PowerNet powerNet) + { + AllocNetwork(powerNet.NetworkNode); + } + + public void DestroyPowerNet(PowerNet powerNet) + { + _powerState.Networks.Remove(powerNet.NetworkNode.Id); + } + + public void QueueReconnectPowerNet(PowerNet powerNet) + { + _powerNetReconnectQueue.Add(powerNet); + } + + public void InitApcNet(ApcNet apcNet) + { + AllocNetwork(apcNet.NetworkNode); + } + + public void DestroyApcNet(ApcNet apcNet) + { + _powerState.Networks.Remove(apcNet.NetworkNode.Id); + } + + public void QueueReconnectApcNet(ApcNet apcNet) + { + _apcNetReconnectQueue.Add(apcNet); + } + + public PowerStatistics GetStatistics() + { + return new() + { + CountBatteries = _powerState.Batteries.Count, + CountLoads = _powerState.Loads.Count, + CountNetworks = _powerState.Networks.Count, + CountSupplies = _powerState.Supplies.Count + }; + } public override void Update(float frameTime) { base.Update(frameTime); - _powerNetManager.Update(frameTime); + + // Reconnect networks. + { + foreach (var apcNet in _apcNetReconnectQueue) + { + if (apcNet.Removed) + continue; + + DoReconnectApcNet(apcNet); + } + + _apcNetReconnectQueue.Clear(); + + foreach (var powerNet in _powerNetReconnectQueue) + { + if (powerNet.Removed) + continue; + + DoReconnectPowerNet(powerNet); + } + + _powerNetReconnectQueue.Clear(); + } + + // Synchronize batteries + foreach (var battery in ComponentManager.EntityQuery()) + { + RaiseLocalEvent(battery.Owner.Uid, new NetworkBatteryPreSync()); + } + + // Run power solver. + _solver.Tick(frameTime, _powerState); + + // Synchronize batteries, the other way around. + foreach (var battery in ComponentManager.EntityQuery()) + { + RaiseLocalEvent(battery.Owner.Uid, new NetworkBatteryPostSync()); + } + + // Send events where necessary. + { + foreach (var apcReceiver in ComponentManager.EntityQuery()) + { + var recv = apcReceiver.NetworkLoad.ReceivingPower; + ref var last = ref apcReceiver.LastPowerReceived; + + if (!MathHelper.CloseTo(recv, last)) + { + last = recv; + apcReceiver.ApcPowerChanged(); + } + } + + foreach (var consumer in ComponentManager.EntityQuery()) + { + var newRecv = consumer.NetworkLoad.ReceivingPower; + ref var lastRecv = ref consumer.LastReceived; + if (!MathHelper.CloseTo(lastRecv, newRecv)) + { + lastRecv = newRecv; + var msg = new PowerConsumerReceivedChanged(newRecv, consumer.DrawRate); + RaiseLocalEvent(consumer.Owner.Uid, msg); + } + } + } + } + + private void AllocLoad(PowerState.Load load) + { + load.Id = AllocId(); + _powerState.Loads.Add(load.Id, load); + } + + private void AllocSupply(PowerState.Supply supply) + { + supply.Id = AllocId(); + _powerState.Supplies.Add(supply.Id, supply); + } + + private void AllocBattery(PowerState.Battery battery) + { + battery.Id = AllocId(); + _powerState.Batteries.Add(battery.Id, battery); + } + + private void AllocNetwork(PowerState.Network network) + { + network.Id = AllocId(); + _powerState.Networks.Add(network.Id, network); + } + + private static void DoReconnectApcNet(ApcNet net) + { + var netNode = net.NetworkNode; + + netNode.Loads.Clear(); + netNode.BatteriesDischarging.Clear(); + netNode.BatteriesCharging.Clear(); + netNode.Supplies.Clear(); + + foreach (var provider in net.Providers) + { + foreach (var receiver in provider.LinkedReceivers) + { + netNode.Loads.Add(receiver.NetworkLoad.Id); + receiver.NetworkLoad.LinkedNetwork = netNode.Id; + } + } + + foreach (var apc in net.Apcs) + { + var netBattery = apc.Owner.GetComponent(); + netNode.BatteriesDischarging.Add(netBattery.NetworkBattery.Id); + netBattery.NetworkBattery.LinkedNetworkDischarging = netNode.Id; + } + } + + private static void DoReconnectPowerNet(PowerNet net) + { + var netNode = net.NetworkNode; + + netNode.Loads.Clear(); + netNode.Supplies.Clear(); + netNode.BatteriesCharging.Clear(); + netNode.BatteriesDischarging.Clear(); + + foreach (var consumer in net.Consumers) + { + netNode.Loads.Add(consumer.NetworkLoad.Id); + consumer.NetworkLoad.LinkedNetwork = netNode.Id; + } + + foreach (var supplier in net.Suppliers) + { + netNode.Supplies.Add(supplier.NetworkSupply.Id); + supplier.NetworkSupply.LinkedNetwork = netNode.Id; + } + + foreach (var charger in net.Chargers) + { + var battery = charger.Owner.GetComponent(); + netNode.BatteriesCharging.Add(battery.NetworkBattery.Id); + battery.NetworkBattery.LinkedNetworkCharging = netNode.Id; + } + + foreach (var discharger in net.Dischargers) + { + var battery = discharger.Owner.GetComponent(); + netNode.BatteriesDischarging.Add(battery.NetworkBattery.Id); + battery.NetworkBattery.LinkedNetworkDischarging = netNode.Id; + } + } + + private PowerState.NodeId AllocId() + { + return new(_nextId++); } } + + /// + /// Raised before power network simulation happens, to synchronize battery state from + /// components like into . + /// + public sealed class NetworkBatteryPreSync : EntityEventArgs + { + } + + /// + /// Raised after power network simulation happens, to synchronize battery charge changes from + /// to components like . + /// + public sealed class NetworkBatteryPostSync : EntityEventArgs + { + } + + /// + /// Raised when the amount of receiving power on a changes. + /// + public sealed class PowerConsumerReceivedChanged : EntityEventArgs + { + public float ReceivedPower { get; } + public float DrawRate { get; } + + public PowerConsumerReceivedChanged(float receivedPower, float drawRate) + { + ReceivedPower = receivedPower; + DrawRate = drawRate; + } + } + + public struct PowerStatistics + { + public int CountNetworks; + public int CountLoads; + public int CountSupplies; + public int CountBatteries; + } } diff --git a/Content.Server/Power/EntitySystems/PowerReceiverSystem.cs b/Content.Server/Power/EntitySystems/PowerReceiverSystem.cs index 54ed7847de..119e66195c 100644 --- a/Content.Server/Power/EntitySystems/PowerReceiverSystem.cs +++ b/Content.Server/Power/EntitySystems/PowerReceiverSystem.cs @@ -9,12 +9,12 @@ namespace Content.Server.Power.EntitySystems { base.Initialize(); - SubscribeLocalEvent(BodyTypeChanged); + SubscribeLocalEvent(BodyTypeChanged); } private static void BodyTypeChanged( EntityUid uid, - PowerReceiverComponent component, + ApcPowerReceiverComponent component, PhysicsBodyTypeChangedEvent args) { component.AnchorUpdate(); diff --git a/Content.Server/Power/NodeGroups/ApcNet.cs b/Content.Server/Power/NodeGroups/ApcNet.cs new file mode 100644 index 0000000000..a2f77eedb0 --- /dev/null +++ b/Content.Server/Power/NodeGroups/ApcNet.cs @@ -0,0 +1,112 @@ +#nullable enable +using System.Collections.Generic; +using System.Linq; +using Content.Server.NodeContainer.NodeGroups; +using Content.Server.NodeContainer.Nodes; +using Content.Server.Power.Components; +using Content.Server.Power.EntitySystems; +using Content.Server.Power.Pow3r; +using JetBrains.Annotations; +using Robust.Shared.GameObjects; +using Robust.Shared.Map; +using Robust.Shared.Maths; +using Robust.Shared.ViewVariables; + +namespace Content.Server.Power.NodeGroups +{ + public interface IApcNet + { + void AddApc(ApcComponent apc); + + void RemoveApc(ApcComponent apc); + + void AddPowerProvider(ApcPowerProviderComponent provider); + + void RemovePowerProvider(ApcPowerProviderComponent provider); + + void QueueNetworkReconnect(); + + PowerState.Network NetworkNode { get; } + + GridId? GridId { get; } + } + + [NodeGroup(NodeGroupID.Apc)] + [UsedImplicitly] + public class ApcNet : BaseNetConnectorNodeGroup, IApcNet + { + private readonly PowerNetSystem _powerNetSystem = EntitySystem.Get(); + + [ViewVariables] public readonly List Apcs = new(); + + [ViewVariables] public readonly List Providers = new(); + + //Debug property + [ViewVariables] private int TotalReceivers => Providers.Sum(provider => provider.LinkedReceivers.Count); + + [ViewVariables] + private IEnumerable AllReceivers => + Providers.SelectMany(provider => provider.LinkedReceivers); + + GridId? IApcNet.GridId => GridId; + + [ViewVariables] + public PowerState.Network NetworkNode { get; } = new(); + + public override void Initialize(Node sourceNode) + { + base.Initialize(sourceNode); + + _powerNetSystem.InitApcNet(this); + } + + public override void AfterRemake(IEnumerable> newGroups) + { + base.AfterRemake(newGroups); + + _powerNetSystem.DestroyApcNet(this); + } + + public void AddApc(ApcComponent apc) + { + if (apc.Owner.TryGetComponent(out PowerNetworkBatteryComponent? netBattery)) + netBattery.NetworkBattery.LinkedNetworkDischarging = default; + + _powerNetSystem.QueueReconnectApcNet(this); + Apcs.Add(apc); + } + + public void RemoveApc(ApcComponent apc) + { + if (apc.Owner.TryGetComponent(out PowerNetworkBatteryComponent? netBattery)) + netBattery.NetworkBattery.LinkedNetworkDischarging = default; + + _powerNetSystem.QueueReconnectApcNet(this); + Apcs.Remove(apc); + } + + public void AddPowerProvider(ApcPowerProviderComponent provider) + { + Providers.Add(provider); + + _powerNetSystem.QueueReconnectApcNet(this); + } + + public void RemovePowerProvider(ApcPowerProviderComponent provider) + { + Providers.Remove(provider); + + _powerNetSystem.QueueReconnectApcNet(this); + } + + public void QueueNetworkReconnect() + { + _powerNetSystem.QueueReconnectApcNet(this); + } + + protected override void SetNetConnectorNet(BaseApcNetComponent netConnectorComponent) + { + netConnectorComponent.Net = this; + } + } +} diff --git a/Content.Server/Power/NodeGroups/BaseNetConnectorNodeGroup.cs b/Content.Server/Power/NodeGroups/BaseNetConnectorNodeGroup.cs new file mode 100644 index 0000000000..17785078ef --- /dev/null +++ b/Content.Server/Power/NodeGroups/BaseNetConnectorNodeGroup.cs @@ -0,0 +1,34 @@ +#nullable enable +using System.Collections.Generic; +using System.Linq; +using Content.Server.NodeContainer.NodeGroups; +using Content.Server.NodeContainer.Nodes; +using Content.Server.Power.Components; + +namespace Content.Server.Power.NodeGroups +{ + public abstract class BaseNetConnectorNodeGroup : BaseNodeGroup + where TNetConnector : BaseNetConnectorComponent + { + public override void LoadNodes(List groupNodes) + { + base.LoadNodes(groupNodes); + + foreach (var node in groupNodes) + { + var newNetConnectorComponents = node.Owner + .GetAllComponents() + .Where(powerComp => (powerComp.NodeId == null || powerComp.NodeId == node.Name) && + (NodeGroupID) powerComp.Voltage == node.NodeGroupID) + .ToList(); + + foreach (var netConnector in newNetConnectorComponents) + { + SetNetConnectorNet(netConnector); + } + } + } + + protected abstract void SetNetConnectorNet(TNetConnector netConnectorComponent); + } +} diff --git a/Content.Server/Power/NodeGroups/PowerNet.cs b/Content.Server/Power/NodeGroups/PowerNet.cs new file mode 100644 index 0000000000..38df0af231 --- /dev/null +++ b/Content.Server/Power/NodeGroups/PowerNet.cs @@ -0,0 +1,132 @@ +#nullable enable +using System.Collections.Generic; +using System.Linq; +using Content.Server.NodeContainer.NodeGroups; +using Content.Server.NodeContainer.Nodes; +using Content.Server.Power.Components; +using Content.Server.Power.EntitySystems; +using Content.Server.Power.Pow3r; +using JetBrains.Annotations; +using Robust.Shared.GameObjects; +using Robust.Shared.Maths; +using Robust.Shared.ViewVariables; + +namespace Content.Server.Power.NodeGroups +{ + public interface IPowerNet + { + void AddSupplier(PowerSupplierComponent supplier); + + void RemoveSupplier(PowerSupplierComponent supplier); + + void AddConsumer(PowerConsumerComponent consumer); + + void RemoveConsumer(PowerConsumerComponent consumer); + + void AddDischarger(BatteryDischargerComponent discharger); + + void RemoveDischarger(BatteryDischargerComponent discharger); + + void AddCharger(BatteryChargerComponent charger); + + void RemoveCharger(BatteryChargerComponent charger); + } + + [NodeGroup(NodeGroupID.HVPower, NodeGroupID.MVPower)] + [UsedImplicitly] + public class PowerNet : BaseNetConnectorNodeGroup, IPowerNet + { + private readonly PowerNetSystem _powerNetSystem = EntitySystem.Get(); + + [ViewVariables] public readonly List Suppliers = new(); + [ViewVariables] public readonly List Consumers = new(); + [ViewVariables] public readonly List Chargers = new(); + [ViewVariables] public readonly List Dischargers = new(); + + [ViewVariables] + public PowerState.Network NetworkNode { get; } = new(); + + public override void Initialize(Node sourceNode) + { + base.Initialize(sourceNode); + + _powerNetSystem.InitPowerNet(this); + } + + public override void AfterRemake(IEnumerable> newGroups) + { + base.AfterRemake(newGroups); + + _powerNetSystem.DestroyPowerNet(this); + } + + protected override void SetNetConnectorNet(BasePowerNetComponent netConnectorComponent) + { + netConnectorComponent.Net = this; + } + + public void AddSupplier(PowerSupplierComponent supplier) + { + supplier.NetworkSupply.LinkedNetwork = default; + Suppliers.Add(supplier); + _powerNetSystem.QueueReconnectPowerNet(this); + } + + public void RemoveSupplier(PowerSupplierComponent supplier) + { + supplier.NetworkSupply.LinkedNetwork = default; + Suppliers.Remove(supplier); + _powerNetSystem.QueueReconnectPowerNet(this); + } + + public void AddConsumer(PowerConsumerComponent consumer) + { + consumer.NetworkLoad.LinkedNetwork = default; + Consumers.Add(consumer); + _powerNetSystem.QueueReconnectPowerNet(this); + } + + public void RemoveConsumer(PowerConsumerComponent consumer) + { + consumer.NetworkLoad.LinkedNetwork = default; + Consumers.Remove(consumer); + _powerNetSystem.QueueReconnectPowerNet(this); + } + + public void AddDischarger(BatteryDischargerComponent discharger) + { + var battery = discharger.Owner.GetComponent(); + battery.NetworkBattery.LinkedNetworkCharging = default; + Dischargers.Add(discharger); + _powerNetSystem.QueueReconnectPowerNet(this); + } + + public void RemoveDischarger(BatteryDischargerComponent discharger) + { + // Can be missing if the entity is being deleted, not a big deal. + if (discharger.Owner.TryGetComponent(out PowerNetworkBatteryComponent? battery)) + battery.NetworkBattery.LinkedNetworkCharging = default; + + Dischargers.Remove(discharger); + _powerNetSystem.QueueReconnectPowerNet(this); + } + + public void AddCharger(BatteryChargerComponent charger) + { + var battery = charger.Owner.GetComponent(); + battery.NetworkBattery.LinkedNetworkCharging = default; + Chargers.Add(charger); + _powerNetSystem.QueueReconnectPowerNet(this); + } + + public void RemoveCharger(BatteryChargerComponent charger) + { + // Can be missing if the entity is being deleted, not a big deal. + if (charger.Owner.TryGetComponent(out PowerNetworkBatteryComponent? battery)) + battery.NetworkBattery.LinkedNetworkCharging = default; + + Chargers.Remove(charger); + _powerNetSystem.QueueReconnectPowerNet(this); + } + } +} diff --git a/Content.Server/Power/Nodes/CableDeviceNode.cs b/Content.Server/Power/Nodes/CableDeviceNode.cs new file mode 100644 index 0000000000..48a7942728 --- /dev/null +++ b/Content.Server/Power/Nodes/CableDeviceNode.cs @@ -0,0 +1,29 @@ +using System.Collections.Generic; +using Content.Server.NodeContainer.Nodes; +using Robust.Shared.GameObjects; +using Robust.Shared.IoC; +using Robust.Shared.Map; +using Robust.Shared.Serialization.Manager.Attributes; + +namespace Content.Server.Power.Nodes +{ + /// + /// Type of node that connects to a below it. + /// + [DataDefinition] + public class CableDeviceNode : Node + { + public override IEnumerable GetReachableNodes() + { + var compMgr = IoCManager.Resolve(); + var grid = IoCManager.Resolve().GetGrid(Owner.Transform.GridID); + var gridIndex = grid.TileIndicesFor(Owner.Transform.Coordinates); + + foreach (var node in NodeHelpers.GetNodesInTile(compMgr, grid, gridIndex)) + { + if (node is CableNode) + yield return node; + } + } + } +} diff --git a/Content.Server/Power/Nodes/CableNode.cs b/Content.Server/Power/Nodes/CableNode.cs new file mode 100644 index 0000000000..07d519656d --- /dev/null +++ b/Content.Server/Power/Nodes/CableNode.cs @@ -0,0 +1,79 @@ +using System.Collections.Generic; +using Content.Server.NodeContainer.Nodes; +using Content.Server.Power.EntitySystems; +using Robust.Shared.GameObjects; +using Robust.Shared.IoC; +using Robust.Shared.Map; +using Robust.Shared.Maths; +using Robust.Shared.Serialization.Manager.Attributes; + +namespace Content.Server.Power.Nodes +{ + [DataDefinition] + public class CableNode : Node + { + public override IEnumerable GetReachableNodes() + { + if (!Anchored) + yield break; + + var compMgr = IoCManager.Resolve(); + var grid = IoCManager.Resolve().GetGrid(Owner.Transform.GridID); + var gridIndex = grid.TileIndicesFor(Owner.Transform.Coordinates); + + // While we go over adjacent nodes, we build a list of blocked directions due to + // incoming or outgoing wire terminals. + var terminalDirs = 0; + List<(Direction, Node)> nodeDirs = new(); + + foreach (var (dir, node) in NodeHelpers.GetCardinalNeighborNodes(compMgr, grid, gridIndex)) + { + if (node is CableNode && node != this) + { + nodeDirs.Add((dir, node)); + } + + if (node is CableDeviceNode && dir == Direction.Invalid) + { + // device on same tile + nodeDirs.Add((Direction.Invalid, node)); + } + + if (node is CableTerminalNode) + { + if (dir == Direction.Invalid) + { + // On own tile, block direction it faces + terminalDirs |= 1 << (int) node.Owner.Transform.LocalRotation.GetCardinalDir(); + } + else + { + var terminalDir = node.Owner.Transform.LocalRotation.GetCardinalDir(); + if (terminalDir.GetOpposite() == dir) + { + // Target tile has a terminal towards us, block the direction. + terminalDirs |= 1 << (int) dir; + break; + } + } + } + } + + foreach (var (dir, node) in nodeDirs) + { + // If there is a wire terminal connecting across this direction, skip the node. + if (dir != Direction.Invalid && (terminalDirs & (1 << (int) dir)) != 0) + continue; + + yield return node; + } + } + + public override void OnPostRebuild() + { + base.OnPostRebuild(); + + EntitySystem.Get().QueueUpdate(Owner.Uid); + } + } +} diff --git a/Content.Server/Power/Nodes/CableTerminalNode.cs b/Content.Server/Power/Nodes/CableTerminalNode.cs new file mode 100644 index 0000000000..7bcf0a323c --- /dev/null +++ b/Content.Server/Power/Nodes/CableTerminalNode.cs @@ -0,0 +1,34 @@ +using System.Collections.Generic; +using Content.Server.NodeContainer.Nodes; +using Robust.Shared.GameObjects; +using Robust.Shared.IoC; +using Robust.Shared.Map; +using Robust.Shared.Serialization.Manager.Attributes; + +namespace Content.Server.Power.Nodes +{ + [DataDefinition] + public class CableTerminalNode : CableDeviceNode + { + public override IEnumerable GetReachableNodes() + { + var compMgr = IoCManager.Resolve(); + var grid = IoCManager.Resolve().GetGrid(Owner.Transform.GridID); + var gridIndex = grid.TileIndicesFor(Owner.Transform.Coordinates); + + var dir = Owner.Transform.LocalRotation.GetDir(); + var targetIdx = gridIndex + NodeHelpers.TileOffsetForDir(dir); + + foreach (var node in NodeHelpers.GetNodesInTile(compMgr, grid, targetIdx)) + { + if (node is CableTerminalPortNode) + yield return node; + } + + foreach (var node in base.GetReachableNodes()) + { + yield return node; + } + } + } +} diff --git a/Content.Server/Power/Nodes/CableTerminalPortNode.cs b/Content.Server/Power/Nodes/CableTerminalPortNode.cs new file mode 100644 index 0000000000..aa703aefd8 --- /dev/null +++ b/Content.Server/Power/Nodes/CableTerminalPortNode.cs @@ -0,0 +1,27 @@ +using System.Collections.Generic; +using Content.Server.NodeContainer.Nodes; +using Robust.Shared.GameObjects; +using Robust.Shared.IoC; +using Robust.Shared.Map; +using Robust.Shared.Serialization.Manager.Attributes; + +namespace Content.Server.Power.Nodes +{ + [DataDefinition] + public class CableTerminalPortNode : Node + { + public override IEnumerable GetReachableNodes() + { + var compMgr = IoCManager.Resolve(); + var grid = IoCManager.Resolve().GetGrid(Owner.Transform.GridID); + var gridIndex = grid.TileIndicesFor(Owner.Transform.Coordinates); + + var nodes = NodeHelpers.GetCardinalNeighborNodes(compMgr, grid, gridIndex, includeSameTile: false); + foreach (var (_, node) in nodes) + { + if (node is CableTerminalNode) + yield return node; + } + } + } +} diff --git a/Content.Server/Power/Pow3r/BatteryRampPegSolver.cs b/Content.Server/Power/Pow3r/BatteryRampPegSolver.cs new file mode 100644 index 0000000000..591e4add55 --- /dev/null +++ b/Content.Server/Power/Pow3r/BatteryRampPegSolver.cs @@ -0,0 +1,305 @@ +using System; +using System.Collections.Generic; +using Robust.Shared.Utility; +using static Content.Server.Power.Pow3r.PowerState; + +namespace Content.Server.Power.Pow3r +{ + public sealed class BatteryRampPegSolver : IPowerSolver + { + private sealed class HeightComparer : IComparer + { + public static HeightComparer Instance { get; } = new(); + + public int Compare(Network? x, Network? y) + { + if (ReferenceEquals(x, y)) return 0; + if (ReferenceEquals(null, y)) return 1; + if (ReferenceEquals(null, x)) return -1; + return x.Height.CompareTo(y.Height); + } + } + + private Network[] _sortBuffer = Array.Empty(); + + public void Tick(float frameTime, PowerState state) + { + // Clear loads and supplies. + foreach (var load in state.Loads.Values) + { + if (load.Paused) + continue; + + load.ReceivingPower = 0; + } + + foreach (var supply in state.Supplies.Values) + { + if (supply.Paused) + continue; + + supply.CurrentSupply = 0; + supply.SupplyRampTarget = 0; + } + + // Run a pass to estimate network tree graph height. + // This is so that we can run networks before their children, + // to avoid draining batteries for a tick if their passing-supply gets cut off. + // It's not a big loss if this doesn't work (it won't, in some scenarios), but it's a nice-to-have. + foreach (var network in state.Networks.Values) + { + network.HeightTouched = false; + network.Height = -1; + } + + foreach (var network in state.Networks.Values) + { + if (network.BatteriesDischarging.Count != 0) + continue; + + EstimateNetworkDepth(state, network); + } + + if (_sortBuffer.Length != state.Networks.Count) + _sortBuffer = new Network[state.Networks.Count]; + + var i = 0; + foreach (var network in state.Networks.Values) + { + _sortBuffer[i++] = network; + } + + Array.Sort(_sortBuffer, HeightComparer.Instance); + + // Go over every network. + foreach (var network in _sortBuffer) + { + // Add up demand in network. + var demand = 0f; + foreach (var loadId in network.Loads) + { + var load = state.Loads[loadId]; + + if (!load.Enabled || load.Paused) + continue; + + DebugTools.Assert(load.DesiredPower >= 0); + demand += load.DesiredPower; + } + + // TODO: Consider having battery charge loads be processed "after" pass-through loads. + // This would mean that charge rate would have no impact on throughput rate like it does currently. + // Would require a second pass over the network, or something. Not sure. + + // Loading batteries. + foreach (var batteryId in network.BatteriesCharging) + { + var battery = state.Batteries[batteryId]; + if (!battery.Enabled || !battery.CanCharge || battery.Paused) + continue; + + var batterySpace = (battery.Capacity - battery.CurrentStorage) * (1 / battery.Efficiency); + batterySpace = Math.Max(0, batterySpace); + var scaledSpace = batterySpace / frameTime; + + var chargeRate = battery.MaxChargeRate + battery.LoadingNetworkDemand / battery.Efficiency; + + var batDemand = Math.Min(chargeRate, scaledSpace); + + DebugTools.Assert(batDemand >= 0); + + battery.DesiredPower = batDemand; + demand += batDemand; + } + + DebugTools.Assert(demand >= 0); + + // Add up supply in network. + var availableSupplySum = 0f; + var maxSupplySum = 0f; + foreach (var supplyId in network.Supplies) + { + var supply = state.Supplies[supplyId]; + if (!supply.Enabled || supply.Paused) + continue; + + var rampMax = supply.SupplyRampPosition + supply.SupplyRampTolerance; + var effectiveSupply = Math.Min(rampMax, supply.MaxSupply); + + DebugTools.Assert(effectiveSupply >= 0); + DebugTools.Assert(supply.MaxSupply >= 0); + + supply.EffectiveMaxSupply = effectiveSupply; + availableSupplySum += effectiveSupply; + maxSupplySum += supply.MaxSupply; + } + + var unmet = Math.Max(0, demand - availableSupplySum); + + DebugTools.Assert(availableSupplySum >= 0); + DebugTools.Assert(maxSupplySum >= 0); + + // Supplying batteries. + // Batteries need to go after local supplies so that local supplies are prioritized. + // Also, it makes demand-pulling of batteries + // Because all batteries will will desire the unmet demand of their loading network, + // there will be a "rush" of input current when a network powers on, + // before power stabilizes in the network. + // This is fine. + foreach (var batteryId in network.BatteriesDischarging) + { + var battery = state.Batteries[batteryId]; + if (!battery.Enabled || !battery.CanDischarge || battery.Paused) + continue; + + var scaledSpace = battery.CurrentStorage / frameTime; + var supplyCap = Math.Min(battery.MaxSupply, + battery.SupplyRampPosition + battery.SupplyRampTolerance); + var supplyAndPassthrough = supplyCap + battery.CurrentReceiving * battery.Efficiency; + var tempSupply = Math.Min(scaledSpace, supplyAndPassthrough); + // Clamp final supply to the unmet demand, so that batteries refrain from taking power away from supplies. + var clampedSupply = Math.Min(unmet, tempSupply); + + DebugTools.Assert(clampedSupply >= 0); + + battery.TempMaxSupply = clampedSupply; + availableSupplySum += clampedSupply; + // TODO: Calculate this properly. + maxSupplySum += clampedSupply; + + battery.LoadingNetworkDemand = unmet; + battery.LoadingDemandMarked = true; + } + + var met = Math.Min(demand, availableSupplySum); + + if (met != 0) + { + // Distribute supply to loads. + foreach (var loadId in network.Loads) + { + var load = state.Loads[loadId]; + if (!load.Enabled || load.DesiredPower == 0 || load.Paused) + continue; + + var ratio = load.DesiredPower / demand; + load.ReceivingPower = ratio * met; + } + + // Loading batteries + foreach (var batteryId in network.BatteriesCharging) + { + var battery = state.Batteries[batteryId]; + + if (!battery.Enabled || battery.DesiredPower == 0 || battery.Paused) + continue; + + var ratio = battery.DesiredPower / demand; + battery.CurrentReceiving = ratio * met; + var receivedPower = frameTime * battery.CurrentReceiving; + receivedPower *= battery.Efficiency; + battery.CurrentStorage = Math.Min( + battery.Capacity, + battery.CurrentStorage + receivedPower); + battery.LoadingMarked = true; + } + + // Load to supplies + foreach (var supplyId in network.Supplies) + { + var supply = state.Supplies[supplyId]; + if (!supply.Enabled || supply.EffectiveMaxSupply == 0 || supply.Paused) + continue; + + var ratio = supply.EffectiveMaxSupply / availableSupplySum; + supply.CurrentSupply = ratio * met; + + if (supply.MaxSupply != 0) + { + var maxSupplyRatio = supply.MaxSupply / maxSupplySum; + + supply.SupplyRampTarget = maxSupplyRatio * demand; + } + else + { + supply.SupplyRampTarget = 0; + } + } + + // Supplying batteries + foreach (var batteryId in network.BatteriesDischarging) + { + var battery = state.Batteries[batteryId]; + if (!battery.Enabled || battery.TempMaxSupply == 0 || battery.Paused) + continue; + + var ratio = battery.TempMaxSupply / availableSupplySum; + battery.CurrentSupply = ratio * met; + + battery.CurrentStorage = Math.Max( + 0, + battery.CurrentStorage - frameTime * battery.CurrentSupply); + + battery.SupplyRampTarget = battery.CurrentSupply - battery.CurrentReceiving * battery.Efficiency; + + /*var maxSupplyRatio = supply.MaxSupply / maxSupplySum; + + supply.SupplyRampTarget = maxSupplyRatio * demand;*/ + battery.SupplyingMarked = true; + } + } + } + + // Clear supplying/loading on any batteries that haven't been marked by usage. + // Because we need this data while processing ramp-pegging, we can't clear it at the start. + foreach (var battery in state.Batteries.Values) + { + if (battery.Paused) + continue; + + if (!battery.SupplyingMarked) + battery.CurrentSupply = 0; + + if (!battery.LoadingMarked) + battery.CurrentReceiving = 0; + + if (!battery.LoadingDemandMarked) + battery.LoadingNetworkDemand = 0; + + battery.SupplyingMarked = false; + battery.LoadingMarked = false; + battery.LoadingDemandMarked = false; + } + + PowerSolverShared.UpdateRampPositions(frameTime, state); + } + + private static void EstimateNetworkDepth(PowerState state, Network network) + { + network.HeightTouched = true; + + if (network.BatteriesCharging.Count == 0) + { + network.Height = 1; + return; + } + + var max = 0; + foreach (var batteryId in network.BatteriesCharging) + { + var battery = state.Batteries[batteryId]; + + if (battery.LinkedNetworkDischarging == default) + continue; + + var subNet = state.Networks[battery.LinkedNetworkDischarging]; + if (!subNet.HeightTouched) + EstimateNetworkDepth(state, subNet); + + max = Math.Max(subNet.Height, max); + } + + network.Height = 1 + max; + } + } +} diff --git a/Content.Server/Power/Pow3r/GraphWalkSolver.cs b/Content.Server/Power/Pow3r/GraphWalkSolver.cs new file mode 100644 index 0000000000..981aad8120 --- /dev/null +++ b/Content.Server/Power/Pow3r/GraphWalkSolver.cs @@ -0,0 +1,181 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using static Content.Server.Power.Pow3r.PowerState; + +namespace Content.Server.Power.Pow3r +{ + /// + /// Partial implementation of full-graph-walking power solving under pow3r. + /// Concept described at https://hackmd.io/@ss14/lowpower + /// + /// + /// Many features like batteries, cycle detection, join handling, etc... are not implemented at all. + /// Seriously, this implementation barely works. Ah well. + /// is better. + /// + public class GraphWalkSolver : IPowerSolver + { + public void Tick(float frameTime, PowerState state) + { + foreach (var load in state.Loads.Values) + { + load.ReceivingPower = 0; + } + + foreach (var supply in state.Supplies.Values) + { + supply.CurrentSupply = 0; + } + + foreach (var network in state.Networks.Values) + { + // Clear some stuff. + network.LocalDemandMet = 0; + + // Add up demands in network. + network.LocalDemandTotal = network.Loads + .Select(l => state.Loads[l]) + .Where(c => c.Enabled) + .Sum(c => c.DesiredPower); + + // Add up supplies in network. + var availableSupplySum = 0f; + var maxSupplySum = 0f; + foreach (var supplyId in network.Supplies) + { + var supply = state.Supplies[supplyId]; + if (!supply.Enabled) + continue; + + var rampMax = supply.SupplyRampPosition + supply.SupplyRampTolerance; + var effectiveSupply = Math.Min(rampMax, supply.MaxSupply); + supply.EffectiveMaxSupply = effectiveSupply; + availableSupplySum += effectiveSupply; + maxSupplySum += supply.MaxSupply; + } + + network.AvailableSupplyTotal = availableSupplySum; + network.TheoreticalSupplyTotal = maxSupplySum; + } + + // Sort networks by tree height so that suppliers that have less possible loads go FIRST. + // Idea being that a backup generator on a small subnet should do more work + // so that a larger generator that covers more networks can put its power elsewhere. + var sortedByHeight = state.Networks.Values.OrderBy(v => TotalSubLoadCount(state, v)).ToArray(); + + // Go over every network with supply to send power. + foreach (var network in sortedByHeight) + { + // Find all loads recursively, and sum them up. + var subNets = new List(); + var totalDemand = 0f; + GetLoadingNetworksRecursively(state, network, subNets, ref totalDemand); + + if (totalDemand == 0) + continue; + + // Calculate power delivered. + var power = Math.Min(totalDemand, network.AvailableSupplyTotal); + + // Distribute load across supplies in network. + foreach (var supplyId in network.Supplies) + { + var supply = state.Supplies[supplyId]; + if (!supply.Enabled) + continue; + + if (supply.EffectiveMaxSupply != 0) + { + var ratio = supply.EffectiveMaxSupply / network.AvailableSupplyTotal; + + supply.CurrentSupply = ratio * power; + } + else + { + supply.CurrentSupply = 0; + } + + if (supply.MaxSupply != 0) + { + var ratio = supply.MaxSupply / network.TheoreticalSupplyTotal; + + supply.SupplyRampTarget = ratio * totalDemand; + } + else + { + supply.SupplyRampTarget = 0; + } + } + + // Distribute supply across subnet loads. + foreach (var subNet in subNets) + { + var rem = subNet.RemainingDemand; + var ratio = rem / totalDemand; + + subNet.LocalDemandMet += ratio * power; + } + } + + // Distribute power across loads in networks. + foreach (var network in state.Networks.Values) + { + if (network.LocalDemandMet == 0) + continue; + + foreach (var loadId in network.Loads) + { + var load = state.Loads[loadId]; + if (!load.Enabled) + continue; + + var ratio = load.DesiredPower / network.LocalDemandTotal; + load.ReceivingPower = ratio * network.LocalDemandMet; + } + } + + PowerSolverShared.UpdateRampPositions(frameTime, state); + } + + private int TotalSubLoadCount(PowerState state, Network network) + { + // TODO: Cycle detection. + var height = network.Loads.Count; + + foreach (var batteryId in network.BatteriesCharging) + { + var battery = state.Batteries[batteryId]; + if (battery.LinkedNetworkDischarging != default) + { + height += TotalSubLoadCount(state, state.Networks[battery.LinkedNetworkDischarging]); + } + } + + return height; + } + + private void GetLoadingNetworksRecursively( + PowerState state, + Network network, + List networks, + ref float totalDemand) + { + networks.Add(network); + totalDemand += network.LocalDemandTotal - network.LocalDemandMet; + + foreach (var batteryId in network.BatteriesCharging) + { + var battery = state.Batteries[batteryId]; + if (battery.LinkedNetworkDischarging != default) + { + GetLoadingNetworksRecursively( + state, + state.Networks[battery.LinkedNetworkDischarging], + networks, + ref totalDemand); + } + } + } + } +} diff --git a/Content.Server/Power/Pow3r/IPowerSolver.cs b/Content.Server/Power/Pow3r/IPowerSolver.cs new file mode 100644 index 0000000000..af1fe2d035 --- /dev/null +++ b/Content.Server/Power/Pow3r/IPowerSolver.cs @@ -0,0 +1,7 @@ +namespace Content.Server.Power.Pow3r +{ + public interface IPowerSolver + { + void Tick(float frameTime, PowerState state); + } +} diff --git a/Content.Server/Power/Pow3r/NoOpSolver.cs b/Content.Server/Power/Pow3r/NoOpSolver.cs new file mode 100644 index 0000000000..fa54a8b80d --- /dev/null +++ b/Content.Server/Power/Pow3r/NoOpSolver.cs @@ -0,0 +1,10 @@ +namespace Content.Server.Power.Pow3r +{ + public sealed class NoOpSolver : IPowerSolver + { + public void Tick(float frameTime, PowerState state) + { + // Literally nothing. + } + } +} diff --git a/Content.Server/Power/Pow3r/PowerSolverShared.cs b/Content.Server/Power/Pow3r/PowerSolverShared.cs new file mode 100644 index 0000000000..f9ef3cead5 --- /dev/null +++ b/Content.Server/Power/Pow3r/PowerSolverShared.cs @@ -0,0 +1,90 @@ +using System; + +namespace Content.Server.Power.Pow3r +{ + public static class PowerSolverShared + { + public static void UpdateRampPositions(float frameTime, PowerState state) + { + // Update supplies to move their ramp position towards target, if necessary. + foreach (var supply in state.Supplies.Values) + { + if (supply.Paused) + continue; + + if (!supply.Enabled) + { + // If disabled, set ramp to 0. + supply.SupplyRampPosition = 0; + continue; + } + + var rampDev = supply.SupplyRampTarget - supply.SupplyRampPosition; + if (Math.Abs(rampDev) > 0.001f) + { + float newPos; + if (rampDev > 0) + { + // Position below target, go up. + newPos = Math.Min( + supply.SupplyRampTarget, + supply.SupplyRampPosition + supply.SupplyRampRate * frameTime); + } + else + { + // Other way around, go down + newPos = Math.Max( + supply.SupplyRampTarget, + supply.SupplyRampPosition - supply.SupplyRampRate * frameTime); + } + + supply.SupplyRampPosition = Math.Clamp(newPos, 0, supply.MaxSupply); + } + else + { + supply.SupplyRampPosition = supply.SupplyRampTarget; + } + } + + // Batteries too. + foreach (var battery in state.Batteries.Values) + { + if (battery.Paused) + continue; + + if (!battery.Enabled) + { + // If disabled, set ramp to 0. + battery.SupplyRampPosition = 0; + continue; + } + + var rampDev = battery.SupplyRampTarget - battery.SupplyRampPosition; + if (Math.Abs(rampDev) > 0.001f) + { + float newPos; + if (rampDev > 0) + { + // Position below target, go up. + newPos = Math.Min( + battery.SupplyRampTarget, + battery.SupplyRampPosition + battery.SupplyRampRate * frameTime); + } + else + { + // Other way around, go down + newPos = Math.Max( + battery.SupplyRampTarget, + battery.SupplyRampPosition - battery.SupplyRampRate * frameTime); + } + + battery.SupplyRampPosition = Math.Clamp(newPos, 0, battery.MaxSupply); + } + else + { + battery.SupplyRampPosition = battery.SupplyRampTarget; + } + } + } + } +} diff --git a/Content.Server/Power/Pow3r/PowerState.cs b/Content.Server/Power/Pow3r/PowerState.cs new file mode 100644 index 0000000000..276fc785a9 --- /dev/null +++ b/Content.Server/Power/Pow3r/PowerState.cs @@ -0,0 +1,207 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Numerics; +using System.Text.Json; +using System.Text.Json.Serialization; +using Robust.Shared.ViewVariables; + +namespace Content.Server.Power.Pow3r +{ + public sealed class PowerState + { + public const int MaxTickData = 180; + + public static readonly JsonSerializerOptions SerializerOptions = new() + { + IncludeFields = true, + Converters = {new NodeIdJsonConverter()} + }; + + public Dictionary Supplies = new(); + public Dictionary Networks = new(); + public Dictionary Loads = new(); + public Dictionary Batteries = new(); + + public readonly struct NodeId : IEquatable + { + public readonly int Id; + + public NodeId(int id) + { + Id = id; + } + + public bool Equals(NodeId other) + { + return Id == other.Id; + } + + public override bool Equals(object? obj) + { + return obj is NodeId other && Equals(other); + } + + public override int GetHashCode() + { + return Id; + } + + public static bool operator ==(NodeId left, NodeId right) + { + return left.Equals(right); + } + + public static bool operator !=(NodeId left, NodeId right) + { + return !left.Equals(right); + } + + public override string ToString() + { + return Id.ToString(); + } + } + + public sealed class NodeIdJsonConverter : JsonConverter + { + public override NodeId Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) + { + return new(reader.GetInt32()); + } + + public override void Write(Utf8JsonWriter writer, NodeId value, JsonSerializerOptions options) + { + writer.WriteNumberValue(value.Id); + } + } + + public sealed class Supply + { + [ViewVariables] public NodeId Id; + + // == Static parameters == + [ViewVariables(VVAccess.ReadWrite)] public bool Enabled = true; + [ViewVariables(VVAccess.ReadWrite)] public bool Paused; + [ViewVariables(VVAccess.ReadWrite)] public float MaxSupply; + + [ViewVariables(VVAccess.ReadWrite)] public float SupplyRampRate; + [ViewVariables(VVAccess.ReadWrite)] public float SupplyRampTolerance; + + // == Runtime parameters == + + // Actual power supplied last network update. + [ViewVariables(VVAccess.ReadWrite)] public float CurrentSupply; + + // The amount of power we WANT to be supplying to match grid load. + [ViewVariables(VVAccess.ReadWrite)] [JsonIgnore] + public float SupplyRampTarget; + + // Position of the supply ramp. + [ViewVariables(VVAccess.ReadWrite)] public float SupplyRampPosition; + + [ViewVariables] [JsonIgnore] public NodeId LinkedNetwork; + + // In-tick max supply thanks to ramp. Used during calculations. + [JsonIgnore] public float EffectiveMaxSupply; + } + + public sealed class Load + { + [ViewVariables] public NodeId Id; + + // == Static parameters == + [ViewVariables(VVAccess.ReadWrite)] public bool Enabled = true; + [ViewVariables(VVAccess.ReadWrite)] public bool Paused; + [ViewVariables(VVAccess.ReadWrite)] public float DesiredPower; + + // == Runtime parameters == + [ViewVariables(VVAccess.ReadWrite)] public float ReceivingPower; + + [ViewVariables] [JsonIgnore] public NodeId LinkedNetwork; + } + + public sealed class Battery + { + [ViewVariables] public NodeId Id; + + // == Static parameters == + [ViewVariables(VVAccess.ReadWrite)] public bool Enabled = true; + [ViewVariables(VVAccess.ReadWrite)] public bool Paused; + [ViewVariables(VVAccess.ReadWrite)] public bool CanDischarge = true; + [ViewVariables(VVAccess.ReadWrite)] public bool CanCharge = true; + [ViewVariables(VVAccess.ReadWrite)] public float Capacity; + [ViewVariables(VVAccess.ReadWrite)] public float MaxChargeRate; + [ViewVariables(VVAccess.ReadWrite)] public float MaxThroughput; // 0 = infinite cuz imgui + [ViewVariables(VVAccess.ReadWrite)] public float MaxSupply; + [ViewVariables(VVAccess.ReadWrite)] public float SupplyRampTolerance; + [ViewVariables(VVAccess.ReadWrite)] public float SupplyRampRate; + [ViewVariables(VVAccess.ReadWrite)] public float Efficiency = 1; + + // == Runtime parameters == + [ViewVariables(VVAccess.ReadWrite)] public float SupplyRampPosition; + [ViewVariables(VVAccess.ReadWrite)] public float CurrentSupply; + [ViewVariables(VVAccess.ReadWrite)] public float CurrentStorage; + [ViewVariables(VVAccess.ReadWrite)] public float CurrentReceiving; + [ViewVariables(VVAccess.ReadWrite)] public float LoadingNetworkDemand; + + [ViewVariables(VVAccess.ReadWrite)] [JsonIgnore] + public bool SupplyingMarked; + + [ViewVariables(VVAccess.ReadWrite)] [JsonIgnore] + public bool LoadingMarked; + + [ViewVariables(VVAccess.ReadWrite)] [JsonIgnore] + public bool LoadingDemandMarked; + + [ViewVariables(VVAccess.ReadWrite)] [JsonIgnore] + public float TempMaxSupply; + + [ViewVariables(VVAccess.ReadWrite)] [JsonIgnore] + public float DesiredPower; + + [ViewVariables(VVAccess.ReadWrite)] [JsonIgnore] + public float SupplyRampTarget; + + [ViewVariables(VVAccess.ReadWrite)] [JsonIgnore] + public NodeId LinkedNetworkCharging; + + [ViewVariables(VVAccess.ReadWrite)] [JsonIgnore] + public NodeId LinkedNetworkDischarging; + } + + // Readonly breaks json serialization. + [SuppressMessage("ReSharper", "FieldCanBeMadeReadOnly.Local")] + public sealed class Network + { + [ViewVariables] public NodeId Id; + + [ViewVariables] public List Supplies = new(); + + [ViewVariables] public List Loads = new(); + + // "Loading" means the network is connected to the INPUT port of the battery. + [ViewVariables] public List BatteriesCharging = new(); + + // "Supplying" means the network is connected to the OUTPUT port of the battery. + [ViewVariables] public List BatteriesDischarging = new(); + + // Calculation parameters used by GraphWalkSolver. + // Unused by BatteryRampPegSolver. + [JsonIgnore] public float LocalDemandTotal; + [JsonIgnore] public float LocalDemandMet; + [JsonIgnore] public float GroupDemandTotal; + [JsonIgnore] public float GroupDemandMet; + + [ViewVariables] [JsonIgnore] public int Height; + [JsonIgnore] public bool HeightTouched; + + // Supply available this tick. + [JsonIgnore] public float AvailableSupplyTotal; + + // Max theoretical supply assuming max ramp. + [JsonIgnore] public float TheoreticalSupplyTotal; + public float RemainingDemand => LocalDemandTotal - LocalDemandMet; + } + } +} diff --git a/Content.Server/SMES/PowerSmesSystem.cs b/Content.Server/Power/SMES/PowerSmesSystem.cs similarity index 91% rename from Content.Server/SMES/PowerSmesSystem.cs rename to Content.Server/Power/SMES/PowerSmesSystem.cs index 1bccbecbcf..bf66d9daa0 100644 --- a/Content.Server/SMES/PowerSmesSystem.cs +++ b/Content.Server/Power/SMES/PowerSmesSystem.cs @@ -2,7 +2,7 @@ using JetBrains.Annotations; using Robust.Shared.GameObjects; -namespace Content.Server.SMES +namespace Content.Server.Power.SMES { [UsedImplicitly] internal class PowerSmesSystem : EntitySystem diff --git a/Content.Server/SMES/SmesComponent.cs b/Content.Server/Power/SMES/SmesComponent.cs similarity index 81% rename from Content.Server/SMES/SmesComponent.cs rename to Content.Server/Power/SMES/SmesComponent.cs index c511f5bf11..903d616011 100644 --- a/Content.Server/SMES/SmesComponent.cs +++ b/Content.Server/Power/SMES/SmesComponent.cs @@ -1,6 +1,5 @@ #nullable enable using System; -using Content.Server.Battery.Components; using Content.Server.Power.Components; using Content.Shared.Power; using Content.Shared.Rounding; @@ -10,7 +9,7 @@ using Robust.Shared.GameObjects; using Robust.Shared.IoC; using Robust.Shared.Timing; -namespace Content.Server.SMES +namespace Content.Server.Power.SMES { /// /// Handles the "user-facing" side of the actual SMES object. @@ -80,20 +79,13 @@ namespace Content.Server.SMES private ChargeState GetNewChargeState() { - var supplier = Owner.GetComponent(); - var consumer = Owner.GetComponent(); - if (supplier.SupplyRate > 0 && consumer.DrawRate != consumer.ReceivedPower) + var battery = Owner.GetComponent(); + return (battery.CurrentSupply - battery.CurrentReceiving) switch { - return ChargeState.Discharging; - } - else if (supplier.SupplyRate == 0 && consumer.DrawRate > 0) - { - return ChargeState.Charging; - } - else - { - return ChargeState.Still; - } + > 0 => ChargeState.Discharging, + < 0 => ChargeState.Charging, + _ => ChargeState.Still + }; } } } diff --git a/Content.Server/PowerCell/Components/PowerCellChargerComponent.cs b/Content.Server/PowerCell/Components/PowerCellChargerComponent.cs index 8548ff020b..80cfa844ac 100644 --- a/Content.Server/PowerCell/Components/PowerCellChargerComponent.cs +++ b/Content.Server/PowerCell/Components/PowerCellChargerComponent.cs @@ -1,5 +1,4 @@ #nullable enable -using Content.Server.Battery.Components; using Content.Server.Power.Components; using Content.Shared.Interaction; using Robust.Shared.GameObjects; diff --git a/Content.Server/PowerCell/Components/PowerCellComponent.cs b/Content.Server/PowerCell/Components/PowerCellComponent.cs index 05b951913a..2ba23bf120 100644 --- a/Content.Server/PowerCell/Components/PowerCellComponent.cs +++ b/Content.Server/PowerCell/Components/PowerCellComponent.cs @@ -1,8 +1,8 @@ #nullable enable using System; -using Content.Server.Battery.Components; using Content.Server.Chemistry.Components; using Content.Server.Explosion; +using Content.Server.Power.Components; using Content.Shared.Chemistry; using Content.Shared.Examine; using Content.Shared.PowerCell; diff --git a/Content.Server/Recycling/Components/RecyclerComponent.cs b/Content.Server/Recycling/Components/RecyclerComponent.cs index 1c1073b0a1..bf0b04b219 100644 --- a/Content.Server/Recycling/Components/RecyclerComponent.cs +++ b/Content.Server/Recycling/Components/RecyclerComponent.cs @@ -47,7 +47,7 @@ namespace Content.Server.Recycling.Components private float _efficiency = 0.25f; private bool Powered => - !Owner.TryGetComponent(out PowerReceiverComponent? receiver) || + !Owner.TryGetComponent(out ApcPowerReceiverComponent? receiver) || receiver.Powered; private void Bloodstain() @@ -97,7 +97,7 @@ namespace Content.Server.Recycling.Components public bool CanRun() { - if (Owner.TryGetComponent(out PowerReceiverComponent? receiver) && + if (Owner.TryGetComponent(out ApcPowerReceiverComponent? receiver) && !receiver.Powered) { return false; diff --git a/Content.Server/Research/Components/ResearchConsoleComponent.cs b/Content.Server/Research/Components/ResearchConsoleComponent.cs index b6cdea4c1a..da1dea4ff9 100644 --- a/Content.Server/Research/Components/ResearchConsoleComponent.cs +++ b/Content.Server/Research/Components/ResearchConsoleComponent.cs @@ -26,7 +26,7 @@ namespace Content.Server.Research.Components private const string SoundCollectionName = "keyboard"; - [ViewVariables] private bool Powered => !Owner.TryGetComponent(out PowerReceiverComponent? receiver) || receiver.Powered; + [ViewVariables] private bool Powered => !Owner.TryGetComponent(out ApcPowerReceiverComponent? receiver) || receiver.Powered; [ViewVariables] private BoundUserInterface? UserInterface => Owner.GetUIOrNull(ResearchConsoleUiKey.Key); diff --git a/Content.Server/Research/Components/ResearchPointSourceComponent.cs b/Content.Server/Research/Components/ResearchPointSourceComponent.cs index 4eaeeff0b8..39d95fe36d 100644 --- a/Content.Server/Research/Components/ResearchPointSourceComponent.cs +++ b/Content.Server/Research/Components/ResearchPointSourceComponent.cs @@ -16,7 +16,7 @@ namespace Content.Server.Research.Components private int _pointsPerSecond; [DataField("active")] private bool _active; - private PowerReceiverComponent? _powerReceiver; + private ApcPowerReceiverComponent? _powerReceiver; [ViewVariables(VVAccess.ReadWrite)] public int PointsPerSecond @@ -35,7 +35,7 @@ namespace Content.Server.Research.Components /// /// Whether this can be used to produce research points. /// - /// If no is found, it's assumed power is not required. + /// If no is found, it's assumed power is not required. [ViewVariables] public bool CanProduce => Active && (_powerReceiver is null || _powerReceiver.Powered); diff --git a/Content.Server/Research/Components/ResearchServerComponent.cs b/Content.Server/Research/Components/ResearchServerComponent.cs index f8e8368afb..fada87fc84 100644 --- a/Content.Server/Research/Components/ResearchServerComponent.cs +++ b/Content.Server/Research/Components/ResearchServerComponent.cs @@ -61,11 +61,11 @@ namespace Content.Server.Research.Components } } - /// If no is found, it's assumed power is not required. + /// If no is found, it's assumed power is not required. [ViewVariables] public bool CanRun => _powerReceiver is null || _powerReceiver.Powered; - private PowerReceiverComponent? _powerReceiver; + private ApcPowerReceiverComponent? _powerReceiver; protected override void Initialize() { diff --git a/Content.Server/Singularity/Components/EmitterComponent.cs b/Content.Server/Singularity/Components/EmitterComponent.cs index 6571234b1d..cf87e7955c 100644 --- a/Content.Server/Singularity/Components/EmitterComponent.cs +++ b/Content.Server/Singularity/Components/EmitterComponent.cs @@ -44,7 +44,7 @@ namespace Content.Server.Singularity.Components private PowerConsumerComponent _powerConsumer = default!; // whether the power switch is in "on" - [ViewVariables] private bool _isOn; + [ViewVariables] public bool IsOn { get; private set; } // Whether the power switch is on AND the machine has enough power (so is actively firing) [ViewVariables] private bool _isPowered; [ViewVariables] private bool _isLocked; @@ -64,32 +64,6 @@ namespace Content.Server.Singularity.Components [ViewVariables(VVAccess.ReadWrite)] [DataField("fireBurstDelayMin")] private TimeSpan _fireBurstDelayMin = TimeSpan.FromSeconds(2); [ViewVariables(VVAccess.ReadWrite)] [DataField("fireBurstDelayMax")] private TimeSpan _fireBurstDelayMax = TimeSpan.FromSeconds(10); - protected override void Initialize() - { - base.Initialize(); - - Owner.EnsureComponent(out _powerConsumer); - - _powerConsumer.OnReceivedPowerChanged += OnReceivedPowerChanged; - } - - private void OnReceivedPowerChanged(object? sender, ReceivedPowerChangedEventArgs e) - { - if (!_isOn) - { - return; - } - - if (e.ReceivedPower < e.DrawRate) - { - PowerOff(); - } - else - { - PowerOn(); - } - } - void IActivate.Activate(ActivateEventArgs eventArgs) { if (_isLocked) @@ -100,7 +74,7 @@ namespace Content.Server.Singularity.Components if (Owner.TryGetComponent(out PhysicsComponent? phys) && phys.BodyType == BodyType.Static) { - if (!_isOn) + if (!IsOn) { SwitchOn(); Owner.PopupMessage(eventArgs.User, Loc.GetString("comp-emitter-turned-on", ("target", Owner))); @@ -149,7 +123,7 @@ namespace Content.Server.Singularity.Components public void SwitchOff() { - _isOn = false; + IsOn = false; _powerConsumer.DrawRate = 0; PowerOff(); UpdateAppearance(); @@ -157,14 +131,14 @@ namespace Content.Server.Singularity.Components public void SwitchOn() { - _isOn = true; + IsOn = true; _powerConsumer.DrawRate = _powerUseActive; // Do not directly PowerOn(). // OnReceivedPowerChanged will get fired due to DrawRate change which will turn it on. UpdateAppearance(); } - private void PowerOff() + public void PowerOff() { if (!_isPowered) { @@ -180,7 +154,7 @@ namespace Content.Server.Singularity.Components UpdateAppearance(); } - private void PowerOn() + public void PowerOn() { if (_isPowered) { @@ -202,7 +176,7 @@ namespace Content.Server.Singularity.Components // Any power-off condition should result in the timer for this method being cancelled // and thus not firing DebugTools.Assert(_isPowered); - DebugTools.Assert(_isOn); + DebugTools.Assert(IsOn); DebugTools.Assert(_powerConsumer.DrawRate <= _powerConsumer.ReceivedPower); Fire(); @@ -269,7 +243,7 @@ namespace Content.Server.Singularity.Components { state = EmitterVisualState.On; } - else if (_isOn) + else if (IsOn) { state = EmitterVisualState.Underpowered; } diff --git a/Content.Server/Singularity/Components/RadiationCollectorComponent.cs b/Content.Server/Singularity/Components/RadiationCollectorComponent.cs index 31c4413f58..84a05b155b 100644 --- a/Content.Server/Singularity/Components/RadiationCollectorComponent.cs +++ b/Content.Server/Singularity/Components/RadiationCollectorComponent.cs @@ -1,9 +1,7 @@ #nullable enable using System; -using Content.Server.Battery.Components; using Content.Server.Power.Components; using Content.Shared.Interaction; -using Content.Shared.Notification; using Content.Shared.Notification.Managers; using Content.Shared.Radiation; using Content.Shared.Singularity.Components; @@ -37,7 +35,6 @@ namespace Content.Server.Singularity.Components } [ComponentDependency] private readonly BatteryComponent? _batteryComponent = default!; - [ComponentDependency] private readonly BatteryDischargerComponent? _batteryDischargerComponent = default!; bool IInteractHand.InteractHand(InteractHandEventArgs eventArgs) { @@ -74,12 +71,6 @@ namespace Content.Server.Singularity.Components if (_batteryComponent != null) { _batteryComponent!.CurrentCharge += frameTime * radiation.RadsPerSecond * 3000f; - if (_batteryDischargerComponent != null) - { - // The battery discharger is controlled like this to ensure it won't drain the entire battery in a single tick. - // If that occurs then the battery discharger ends up shutting down. - _batteryDischargerComponent!.ActiveSupplyRate = (int) Math.Max(1, _batteryComponent!.CurrentCharge); - } } } diff --git a/Content.Server/Singularity/EntitySystems/EmitterSystem.cs b/Content.Server/Singularity/EntitySystems/EmitterSystem.cs new file mode 100644 index 0000000000..5f3fc0c83d --- /dev/null +++ b/Content.Server/Singularity/EntitySystems/EmitterSystem.cs @@ -0,0 +1,38 @@ +using Content.Server.Power.EntitySystems; +using Content.Server.Singularity.Components; +using JetBrains.Annotations; +using Robust.Shared.GameObjects; + +namespace Content.Server.Singularity.EntitySystems +{ + [UsedImplicitly] + public class EmitterSystem : EntitySystem + { + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(ReceivedChanged); + } + + private static void ReceivedChanged( + EntityUid uid, + EmitterComponent component, + PowerConsumerReceivedChanged args) + { + if (!component.IsOn) + { + return; + } + + if (args.ReceivedPower < args.DrawRate) + { + component.PowerOff(); + } + else + { + component.PowerOn(); + } + } + } +} diff --git a/Content.Server/Solar/Components/SolarPanelComponent.cs b/Content.Server/Solar/Components/SolarPanelComponent.cs index 1c82915ed0..d4f918beb6 100644 --- a/Content.Server/Solar/Components/SolarPanelComponent.cs +++ b/Content.Server/Solar/Components/SolarPanelComponent.cs @@ -67,7 +67,7 @@ namespace Content.Server.Solar.Components { if (Owner.TryGetComponent(out var supplier)) { - supplier.SupplyRate = (int) (_maxSupply * _coverage); + supplier.MaxSupply = (int) (_maxSupply * _coverage); } } diff --git a/Content.Server/StationEvents/Events/PowerGridCheck.cs b/Content.Server/StationEvents/Events/PowerGridCheck.cs index 0d44829a18..6ff0b78e1a 100644 --- a/Content.Server/StationEvents/Events/PowerGridCheck.cs +++ b/Content.Server/StationEvents/Events/PowerGridCheck.cs @@ -41,7 +41,7 @@ namespace Content.Server.StationEvents.Events { var componentManager = IoCManager.Resolve(); - foreach (var component in componentManager.EntityQuery(true)) + foreach (var component in componentManager.EntityQuery(true)) { component.PowerDisabled = true; _powered.Add(component.Owner); @@ -56,7 +56,7 @@ namespace Content.Server.StationEvents.Events { if (entity.Deleted) continue; - if (entity.TryGetComponent(out PowerReceiverComponent? powerReceiverComponent)) + if (entity.TryGetComponent(out ApcPowerReceiverComponent? powerReceiverComponent)) { powerReceiverComponent.PowerDisabled = false; } diff --git a/Content.Server/VendingMachines/VendingMachineComponent.cs b/Content.Server/VendingMachines/VendingMachineComponent.cs index f0a6ce7000..4b4bd3bca6 100644 --- a/Content.Server/VendingMachines/VendingMachineComponent.cs +++ b/Content.Server/VendingMachines/VendingMachineComponent.cs @@ -7,7 +7,7 @@ using Content.Server.Advertise; using Content.Server.Notification; using Content.Server.Power.Components; using Content.Server.UserInterface; -using Content.Server.Wires.Components; +using Content.Server.WireHacking; using Content.Shared.Acts; using Content.Shared.Examine; using Content.Shared.Interaction; @@ -41,7 +41,7 @@ namespace Content.Server.VendingMachines private string? _description; private string _spriteName = ""; - private bool Powered => !Owner.TryGetComponent(out PowerReceiverComponent? receiver) || receiver.Powered; + private bool Powered => !Owner.TryGetComponent(out ApcPowerReceiverComponent? receiver) || receiver.Powered; private bool _broken; [DataField("soundVend")] @@ -108,7 +108,7 @@ namespace Content.Server.VendingMachines UserInterface.OnReceiveMessage += UserInterfaceOnOnReceiveMessage; } - if (Owner.TryGetComponent(out PowerReceiverComponent? receiver)) + if (Owner.TryGetComponent(out ApcPowerReceiverComponent? receiver)) { TrySetVisualState(receiver.Powered ? VendingMachineVisualState.Normal : VendingMachineVisualState.Off); } diff --git a/Content.Server/Weapon/Ranged/Barrels/Components/ServerBatteryBarrelComponent.cs b/Content.Server/Weapon/Ranged/Barrels/Components/ServerBatteryBarrelComponent.cs index 95b4aff527..9909470dac 100644 --- a/Content.Server/Weapon/Ranged/Barrels/Components/ServerBatteryBarrelComponent.cs +++ b/Content.Server/Weapon/Ranged/Barrels/Components/ServerBatteryBarrelComponent.cs @@ -1,9 +1,9 @@ using System; using System.Collections.Generic; using System.Threading.Tasks; -using Content.Server.Battery.Components; using Content.Server.Hands.Components; using Content.Server.Items; +using Content.Server.Power.Components; using Content.Server.Projectiles.Components; using Content.Shared.ActionBlocker; using Content.Shared.Damage; diff --git a/Content.Server/Weapon/WeaponCapacitorChargerComponent.cs b/Content.Server/Weapon/WeaponCapacitorChargerComponent.cs index adcfdf029a..956bfcb5c4 100644 --- a/Content.Server/Weapon/WeaponCapacitorChargerComponent.cs +++ b/Content.Server/Weapon/WeaponCapacitorChargerComponent.cs @@ -1,5 +1,4 @@ #nullable enable -using Content.Server.Battery.Components; using Content.Server.Power.Components; using Content.Server.PowerCell.Components; using Content.Server.Weapon.Ranged.Barrels.Components; diff --git a/Content.Server/Wires/WireHackingSystem.cs b/Content.Server/WireHacking/WireHackingSystem.cs similarity index 97% rename from Content.Server/Wires/WireHackingSystem.cs rename to Content.Server/WireHacking/WireHackingSystem.cs index 526db3ced7..99ed63bfb6 100644 --- a/Content.Server/Wires/WireHackingSystem.cs +++ b/Content.Server/WireHacking/WireHackingSystem.cs @@ -5,7 +5,7 @@ using Robust.Shared.GameObjects; using Robust.Shared.ViewVariables; using static Content.Shared.Wires.SharedWiresComponent; -namespace Content.Server.Wires +namespace Content.Server.WireHacking { public class WireHackingSystem : EntitySystem { diff --git a/Content.Server/Wires/Components/WiresComponent.cs b/Content.Server/WireHacking/WiresComponent.cs similarity index 99% rename from Content.Server/Wires/Components/WiresComponent.cs rename to Content.Server/WireHacking/WiresComponent.cs index 60d19b0e1f..e48b1959dc 100644 --- a/Content.Server/Wires/Components/WiresComponent.cs +++ b/Content.Server/WireHacking/WiresComponent.cs @@ -10,7 +10,6 @@ using Content.Server.VendingMachines; using Content.Shared.Examine; using Content.Shared.Interaction; using Content.Shared.Interaction.Helpers; -using Content.Shared.Notification; using Content.Shared.Notification.Managers; using Content.Shared.Tool; using Content.Shared.Wires; @@ -27,7 +26,7 @@ using Robust.Shared.Serialization.Manager.Attributes; using Robust.Shared.Utility; using Robust.Shared.ViewVariables; -namespace Content.Server.Wires.Components +namespace Content.Server.WireHacking { [RegisterComponent] public class WiresComponent : SharedWiresComponent, IInteractUsing, IExamine, IMapInit diff --git a/Content.Shared/Light/Component/SharedEmergencyLightComponent.cs b/Content.Shared/Light/Component/SharedEmergencyLightComponent.cs new file mode 100644 index 0000000000..b7f1e9a95a --- /dev/null +++ b/Content.Shared/Light/Component/SharedEmergencyLightComponent.cs @@ -0,0 +1,11 @@ +using System; +using Robust.Shared.Serialization; + +namespace Content.Shared.Light.Component +{ + [Serializable, NetSerializable] + public enum EmergencyLightVisuals + { + On, + } +} diff --git a/Content.Shared/NodeContainer/NodeVis.cs b/Content.Shared/NodeContainer/NodeVis.cs new file mode 100644 index 0000000000..d3f9ceb93a --- /dev/null +++ b/Content.Shared/NodeContainer/NodeVis.cs @@ -0,0 +1,48 @@ +using System; +using System.Collections.Generic; +using Robust.Shared.GameObjects; +using Robust.Shared.Maths; +using Robust.Shared.Serialization; + +namespace Content.Shared.NodeContainer +{ + public static class NodeVis + { + [Serializable, NetSerializable] + public sealed class MsgEnable : EntityEventArgs + { + public MsgEnable(bool enabled) + { + Enabled = enabled; + } + + public bool Enabled { get; } + } + + [Serializable, NetSerializable] + public sealed class MsgData : EntityEventArgs + { + public List Groups = new(); + public List GroupDeletions = new(); + } + + [Serializable, NetSerializable] + public sealed class GroupData + { + public int NetId; + public string GroupId = ""; + public Color Color; + public NodeDatum[] Nodes = Array.Empty(); + } + + [Serializable, NetSerializable] + public sealed class NodeDatum + { + public EntityUid Entity; + public int NetId; + public int[] Reachable = Array.Empty(); + public string Name = ""; + public string Type = ""; + } + } +} diff --git a/Content.Shared/Wires/SharedWireVisComponent.cs b/Content.Shared/Wires/SharedWireVisComponent.cs new file mode 100644 index 0000000000..df9f0837c2 --- /dev/null +++ b/Content.Shared/Wires/SharedWireVisComponent.cs @@ -0,0 +1,22 @@ +using System; +using Robust.Shared.Serialization; + +namespace Content.Shared.Wires +{ + [Serializable, NetSerializable] + public enum WireVisVisuals + { + ConnectedMask + } + + [Flags] + [Serializable, NetSerializable] + public enum WireVisDirFlags : byte + { + None = 0, + North = 1, + South = 2, + East = 4, + West = 8 + } +} diff --git a/Pow3r/LinqHelper.cs b/Pow3r/LinqHelper.cs new file mode 100644 index 0000000000..25ae91b090 --- /dev/null +++ b/Pow3r/LinqHelper.cs @@ -0,0 +1,16 @@ +using System; +using System.Collections.Generic; + +namespace Pow3r +{ + public static class LinqHelper + { + public static void ForEach(this IEnumerable enumerable, Action action) + { + foreach (var item in enumerable) + { + action(item); + } + } + } +} diff --git a/Pow3r/Pow3r.csproj b/Pow3r/Pow3r.csproj new file mode 100644 index 0000000000..d86f41e139 --- /dev/null +++ b/Pow3r/Pow3r.csproj @@ -0,0 +1,21 @@ + + + + Exe + net5.0 + true + + + + + + + + + + + + + + + diff --git a/Pow3r/Program.OpenGL.cs b/Pow3r/Program.OpenGL.cs new file mode 100644 index 0000000000..5ad123feed --- /dev/null +++ b/Pow3r/Program.OpenGL.cs @@ -0,0 +1,127 @@ +using System; +using System.Numerics; +using System.Text; +using System.Linq; +using ImGuiNET; +using OpenTK.Graphics.OpenGL; +using OpenTK.Windowing.GraphicsLibraryFramework; + +namespace Pow3r +{ + internal sealed unsafe partial class Program + { + private int _glFontTexture; + + private void InitOpenGL() + { + if (GL.GetString(StringName.Extensions).Split(' ').Contains("GL_ARB_debug_output")) + GL.Arb.DebugMessageCallback(GLDebugCallbackDelegate, (nint) 0x0105); + + GL.Enable(EnableCap.ScissorTest); + GL.Enable(EnableCap.Blend); + GL.BlendEquation(BlendEquationMode.FuncAdd); + GL.BlendFuncSeparate( + BlendingFactorSrc.SrcAlpha, + BlendingFactorDest.OneMinusSrcAlpha, + BlendingFactorSrc.One, + BlendingFactorDest.OneMinusSrcAlpha); + + var io = ImGui.GetIO(); + + io.Fonts.GetTexDataAsRGBA32(out byte* pixels, out var width, out var height, out _); + + _glFontTexture = GL.GenTexture(); + GL.BindTexture(TextureTarget.Texture2D, _glFontTexture); + GL.TexImage2D(TextureTarget.Texture2D, 0, PixelInternalFormat.Rgba, width, height, 0, PixelFormat.Bgra, PixelType.UnsignedByte, (nint) pixels); + GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMagFilter, (int) TextureMagFilter.Nearest); + GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMinFilter, (int) TextureMinFilter.Nearest); + GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapS, (int) TextureWrapMode.ClampToEdge); + GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapT, (int) TextureWrapMode.ClampToEdge); + + /* + GL.TextureParameter(_fontTexture, TextureParameterName.TextureSwizzleR, 1); + GL.TextureParameter(_fontTexture, TextureParameterName.TextureSwizzleG, 1); + GL.TextureParameter(_fontTexture, TextureParameterName.TextureSwizzleB, 1); + GL.TextureParameter(_fontTexture, TextureParameterName.TextureSwizzleA, (int) All.Red);*/ + + io.Fonts.SetTexID((nint) _glFontTexture); + io.Fonts.ClearTexData(); + } + + private void RenderOpenGL() + { + GLFW.GetFramebufferSize(_window.WindowPtr, out var fbW, out var fbH); + GL.Viewport(0, 0, fbW, fbH); + GL.Disable(EnableCap.ScissorTest); + GL.ClearColor(0, 0, 0, 1); + GL.Clear(ClearBufferMask.ColorBufferBit); + GL.Enable(EnableCap.ScissorTest); + GL.Enable(EnableCap.Texture2D); + + var drawData = ImGui.GetDrawData(); + + var l = drawData.DisplayPos.X; + var r = drawData.DisplayPos.X + drawData.DisplaySize.X; + var t = drawData.DisplayPos.Y; + var b = drawData.DisplayPos.Y + drawData.DisplaySize.Y; + + var matrix = Matrix4x4.CreateOrthographicOffCenter(l, r, b, t, -1, 1); + + GL.MatrixMode(MatrixMode.Projection); + GL.LoadMatrix((float*) &matrix); + + var clipOff = drawData.DisplayPos; + var clipScale = drawData.FramebufferScale; + + GL.EnableClientState(ArrayCap.VertexArray); + GL.EnableClientState(ArrayCap.TextureCoordArray); + GL.EnableClientState(ArrayCap.ColorArray); + + for (var n = 0; n < drawData.CmdListsCount; n++) + { + var drawList = drawData.CmdListsRange[n]; + + for (var cmdI = 0; cmdI < drawList.CmdBuffer.Size; cmdI++) + { + var cmd = drawList.CmdBuffer[cmdI]; + + GL.BindTexture(TextureTarget.Texture2D, (uint) cmd.TextureId); + + Vector4 clipRect = default; + clipRect.X = (cmd.ClipRect.X - clipOff.X) * clipScale.X; + clipRect.Y = (cmd.ClipRect.Y - clipOff.Y) * clipScale.Y; + clipRect.Z = (cmd.ClipRect.Z - clipOff.X) * clipScale.X; + clipRect.W = (cmd.ClipRect.W - clipOff.Y) * clipScale.Y; + + GL.Scissor((int) clipRect.X, (int) (fbH - clipRect.W), (int) (clipRect.Z - clipRect.X), + (int) (clipRect.W - clipRect.Y)); + + IntPtr adjustedVB = drawList.VtxBuffer.Data + (nint) (sizeof(ImDrawVert) * cmd.VtxOffset); + + GL.VertexPointer(2, VertexPointerType.Float, sizeof(ImDrawVert), adjustedVB); + GL.TexCoordPointer(2, TexCoordPointerType.Float, sizeof(ImDrawVert), adjustedVB + 8); + GL.ColorPointer(4, ColorPointerType.UnsignedByte, sizeof(ImDrawVert), adjustedVB + 16); + + GL.DrawElements(PrimitiveType.Triangles, (int) cmd.ElemCount, + DrawElementsType.UnsignedShort, + drawList.IdxBuffer.Data + (nint) (cmd.IdxOffset * 2)); + } + } + + _window.SwapBuffers(); + } + + private static readonly DebugProcArb GLDebugCallbackDelegate = GLDebugCallback; + + private static void GLDebugCallback(DebugSource source, DebugType type, int id, DebugSeverity severity, + int length, IntPtr message, IntPtr userParam) + { + var msg = Encoding.UTF8.GetString((byte*) message, length); + + if (severity == DebugSeverity.DebugSeverityNotification) + return; + + Console.WriteLine($"[{type}][{severity}] {source}: {msg}"); + } + } +} diff --git a/Pow3r/Program.SaveLoad.cs b/Pow3r/Program.SaveLoad.cs new file mode 100644 index 0000000000..2ffdc8eb4e --- /dev/null +++ b/Pow3r/Program.SaveLoad.cs @@ -0,0 +1,71 @@ +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text.Json; +using Content.Server.Power.Pow3r; +using static Content.Server.Power.Pow3r.PowerState; + +namespace Pow3r +{ + internal sealed partial class Program + { + private void LoadFromDisk() + { + if (!File.Exists("data.json")) + return; + + var dat = JsonSerializer.Deserialize(File.ReadAllBytes("data.json"), SerializerOptions); + + if (dat == null) + return; + + _paused = dat.Paused; + _nextId = dat.NextId; + _currentSolver = dat.Solver; + + _state = new PowerState + { + Networks = dat.Networks.ToDictionary(n => n.Id, n => n), + Supplies = dat.Supplies.ToDictionary(s => s.Id, s => s), + Loads = dat.Loads.ToDictionary(l => l.Id, l => l), + Batteries = dat.Batteries.ToDictionary(b => b.Id, b => b) + }; + + _displayLoads = dat.Loads.ToDictionary(n => n.Id, _ => new DisplayLoad()); + _displaySupplies = dat.Supplies.ToDictionary(n => n.Id, _ => new DisplaySupply()); + _displayBatteries = dat.Batteries.ToDictionary(n => n.Id, _ => new DisplayBattery()); + _displayNetworks = dat.Networks.ToDictionary(n => n.Id, _ => new DisplayNetwork()); + + RefreshLinks(); + } + + private void SaveToDisk() + { + var data = new DiskDat + { + Paused = _paused, + NextId = _nextId, + Solver = _currentSolver, + + Loads = _state.Loads.Values.ToList(), + Batteries = _state.Batteries.Values.ToList(), + Networks = _state.Networks.Values.ToList(), + Supplies = _state.Supplies.Values.ToList() + }; + + File.WriteAllBytes("data.json", JsonSerializer.SerializeToUtf8Bytes(data, SerializerOptions)); + } + + private sealed class DiskDat + { + public bool Paused; + public int NextId; + public int Solver; + + public List Loads; + public List Networks; + public List Supplies; + public List Batteries; + } + } +} diff --git a/Pow3r/Program.Simulation.cs b/Pow3r/Program.Simulation.cs new file mode 100644 index 0000000000..440e262f83 --- /dev/null +++ b/Pow3r/Program.Simulation.cs @@ -0,0 +1,137 @@ +using System.Collections.Generic; +using System.Diagnostics; +using Content.Server.Power.Pow3r; +using static Content.Server.Power.Pow3r.PowerState; + + +namespace Pow3r +{ + internal sealed partial class Program + { + private const int MaxTickData = 180; + + private int _nextId = 1; + private PowerState _state = new(); + private Network _linking; + private int _tickDataIdx; + private bool _paused; + + private readonly string[] _solverNames = + { + nameof(GraphWalkSolver), + nameof(BatteryRampPegSolver), + nameof(NoOpSolver) + }; + + private readonly IPowerSolver[] _solvers = { + new GraphWalkSolver(), + new BatteryRampPegSolver(), + new NoOpSolver() + }; + + private int _currentSolver; + + private readonly float[] _simTickTimes = new float[MaxTickData]; + private readonly Queue _remQueue = new(); + private readonly Stopwatch _simStopwatch = new Stopwatch(); + + private NodeId AllocId() + { + return new(_nextId++); + } + + private void Tick(float frameTime) + { + if (_paused) + return; + + RunSingleStep(frameTime); + } + + private void RunSingleStep(float frameTime) + { + _simStopwatch.Restart(); + _tickDataIdx = (_tickDataIdx + 1) % MaxTickData; + + _solvers[_currentSolver].Tick(frameTime, _state); + + // Update tick history. + foreach (var load in _state.Loads.Values) + { + var displayLoad = _displayLoads[load.Id]; + displayLoad.ReceivedPowerData[_tickDataIdx] = load.ReceivingPower; + } + + foreach (var supply in _state.Supplies.Values) + { + var displaySupply = _displaySupplies[supply.Id]; + displaySupply.SuppliedPowerData[_tickDataIdx] = supply.CurrentSupply; + } + + foreach (var battery in _state.Batteries.Values) + { + var displayBattery = _displayBatteries[battery.Id]; + displayBattery.StoredPowerData[_tickDataIdx] = battery.CurrentStorage; + displayBattery.ReceivingPowerData[_tickDataIdx] = battery.CurrentReceiving; + displayBattery.SuppliedPowerData[_tickDataIdx] = battery.CurrentSupply; + } + + _simTickTimes[_tickDataIdx] = (float) _simStopwatch.Elapsed.TotalMilliseconds; + } + + private void RunSingleStep() + { + RunSingleStep(1f/_tps); + } + + // Link data is stored authoritatively on networks, + // but for easy access it is replicated into the linked components. + // This is updated here. + private void RefreshLinks() + { + foreach (var battery in _state.Batteries.Values) + { + battery.LinkedNetworkCharging = default; + battery.LinkedNetworkDischarging = default; + } + + foreach (var load in _state.Loads.Values) + { + load.LinkedNetwork = default; + } + + foreach (var supply in _state.Supplies.Values) + { + supply.LinkedNetwork = default; + } + + foreach (var network in _state.Networks.Values) + { + foreach (var loadId in network.Loads) + { + var load = _state.Loads[loadId]; + load.LinkedNetwork = network.Id; + } + + foreach (var supplyId in network.Supplies) + { + var supply = _state.Supplies[supplyId]; + supply.LinkedNetwork = network.Id; + } + + foreach (var batteryId in network.BatteriesCharging) + { + var battery = _state.Batteries[batteryId]; + battery.LinkedNetworkCharging = network.Id; + } + + foreach (var batteryId in network.BatteriesDischarging) + { + var battery = _state.Batteries[batteryId]; + battery.LinkedNetworkDischarging = network.Id; + } + } + } + + } +} diff --git a/Pow3r/Program.UI.cs b/Pow3r/Program.UI.cs new file mode 100644 index 0000000000..96f7b90cf8 --- /dev/null +++ b/Pow3r/Program.UI.cs @@ -0,0 +1,459 @@ +using System; +using System.Collections.Generic; +using ImGuiNET; +using Robust.Shared.Maths; +using static ImGuiNET.ImGui; +using Color = System.Drawing.Color; +using Vector2 = System.Numerics.Vector2; +using RobustVec2 = Robust.Shared.Maths.Vector2; +using static Content.Server.Power.Pow3r.PowerState; + +namespace Pow3r +{ + internal sealed partial class Program + { + private bool _showDemo; + + private Dictionary _displayLoads = new(); + private Dictionary _displayBatteries = new(); + private Dictionary _displayNetworks = new(); + private Dictionary _displaySupplies = new(); + + private void DoUI(float frameTime) + { + if (BeginMainMenuBar()) + { + _showDemo ^= MenuItem("Demo"); + EndMainMenuBar(); + } + + SetNextWindowSize(new Vector2(150, 200)); + + Begin("CreateButtons", + ImGuiWindowFlags.NoTitleBar | + ImGuiWindowFlags.NoCollapse | + ImGuiWindowFlags.NoResize); + + if (Button("Generator")) + { + var id = AllocId(); + _state.Supplies.Add(id, new Supply { Id = id }); + _displaySupplies.Add(id, new DisplaySupply()); + } + + if (Button("Load")) + { + var id = AllocId(); + _state.Loads.Add(id, new Load { Id = id }); + _displayLoads.Add(id, new DisplayLoad()); + } + + if (Button("Network")) + { + var id = AllocId(); + _state.Networks.Add(id, new Network { Id = id }); + _displayNetworks.Add(id, new DisplayNetwork()); + } + + if (Button("Battery")) + { + var id = AllocId(); + _state.Batteries.Add(id, new Battery { Id = id }); + _displayBatteries.Add(id, new DisplayBattery()); + } + + Checkbox("Paused", ref _paused); + SliderInt("TPS", ref _tps, 1, 120); + SetNextItemWidth(-1); + Combo("", ref _currentSolver, _solverNames, _solverNames.Length); + + if (Button("Single step")) + RunSingleStep(); + + End(); + + Begin("Simulating timing"); + + PlotLines("Tick time (ms)", ref _simTickTimes[0], MaxTickData, _tickDataIdx + 1, + $"{_simTickTimes[_tickDataIdx]:N2}", + 0, + 0.1f, new Vector2(250, 150)); + + End(); + + Begin("Frame timings"); + + PlotLines("Frame (ms)", ref _frameTimings[0], _frameTimings.Length, _frameTimeIdx + 1, + $"{_frameTimings[_frameTimeIdx]:N2}", + 0, + 33.333f, new Vector2(250, 150)); + + End(); + + { + Begin("Memory"); + + var heap = GC.GetTotalMemory(false); + Text($"Managed heap: {heap>>20} MiB"); + + End(); + } + + foreach (var network in _state.Networks.Values) + { + var displayNetwork = _displayNetworks[network.Id]; + Begin($"Network {network.Id}##Gen{network.Id}"); + + Text($"Height: {network.Height}"); + + displayNetwork.CurrentWindowPos = CalcWindowCenter(); + + if (Button("Delete")) + { + _remQueue.Enqueue(network); + + if (_linking == network) + { + _linking = null; + } + } + + SameLine(); + + if (_linking != null) + { + if (_linking == network && Button("Cancel")) + { + _linking = null; + } + } + else + { + if (Button("Link...")) + { + _linking = network; + } + } + + End(); + } + + foreach (var load in _state.Loads.Values) + { + var displayLoad = _displayLoads[load.Id]; + + Begin($"Load {load.Id}##Load{load.Id}"); + + Checkbox("Enabled", ref load.Enabled); + SliderFloat("Desired", ref load.DesiredPower, 0, 1000, "%.0f W"); + + displayLoad.CurrentWindowPos = CalcWindowCenter(); + + PlotLines("", ref displayLoad.ReceivedPowerData[0], MaxTickData, _tickDataIdx + 1, + $"Receiving: {load.ReceivingPower:N1} W", + 0, + load.DesiredPower, new Vector2(250, 150)); + + if (Button("Delete")) + { + _remQueue.Enqueue(load); + } + + SameLine(); + if (_linking != null) + { + if (Button("Link")) + { + _linking.Loads.Add(load.Id); + _linking = null; + RefreshLinks(); + } + } + else + { + if (load.LinkedNetwork != default && Button("Unlink")) + { + var net = _state.Networks[load.LinkedNetwork]; + net.Loads.Remove(load.Id); + load.LinkedNetwork = default; + } + } + + End(); + } + + foreach (var supply in _state.Supplies.Values) + { + var displaySupply = _displaySupplies[supply.Id]; + Begin($"Generator {supply.Id}##Gen{supply.Id}"); + + Checkbox("Enabled", ref supply.Enabled); + SliderFloat("Available", ref supply.MaxSupply, 0, 1000, "%.0f W"); + SliderFloat("Ramp", ref supply.SupplyRampRate, 0, 100, "%.0f W/s"); + SliderFloat("Tolerance", ref supply.SupplyRampTolerance, 0, 100, "%.0f W"); + + displaySupply.CurrentWindowPos = CalcWindowCenter(); + + Text($"Ramp Position: {supply.SupplyRampPosition:N1}"); + + PlotLines("", ref displaySupply.SuppliedPowerData[0], MaxTickData, _tickDataIdx + 1, + $"Supply: {supply.CurrentSupply:N1} W", + 0, supply.MaxSupply, new Vector2(250, 150)); + + if (Button("Delete")) + { + _remQueue.Enqueue(supply); + } + + SameLine(); + if (_linking != null) + { + if (Button("Link")) + { + _linking.Supplies.Add(supply.Id); + _linking = null; + RefreshLinks(); + } + } + else + { + if (supply.LinkedNetwork != default && Button("Unlink")) + { + var net = _state.Networks[supply.LinkedNetwork]; + net.Supplies.Remove(supply.Id); + supply.LinkedNetwork = default; + } + } + + End(); + } + + foreach (var battery in _state.Batteries.Values) + { + var displayBattery = _displayBatteries[battery.Id]; + + Begin($"Battery {battery.Id}##Bat{battery.Id}"); + + Checkbox("Enabled", ref battery.Enabled); + SliderFloat("Capacity", ref battery.Capacity, 0, 100000, "%.0f J"); + SliderFloat("Max charge rate", ref battery.MaxChargeRate, 0, 1000, "%.0f W"); + SliderFloat("Max supply", ref battery.MaxSupply, 0, 1000, "%.0f W"); + SliderFloat("Ramp", ref battery.SupplyRampRate, 0, 100, "%.0f W/s"); + SliderFloat("Tolerance", ref battery.SupplyRampTolerance, 0, 100, "%.0f W"); + var percent = 100 * battery.Efficiency; + SliderFloat("Efficiency", ref percent, 0, 100, "%.0f %%"); + battery.Efficiency = percent / 100; + + displayBattery.CurrentWindowPos = CalcWindowCenter(); + + SliderFloat("Ramp position", ref battery.SupplyRampPosition, 0, battery.MaxSupply, "%.0f W"); + + PlotLines("", ref displayBattery.SuppliedPowerData[0], MaxTickData, _tickDataIdx + 1, + $"OUT: {battery.CurrentSupply:N1} W", + 0, battery.MaxSupply + 1000, new Vector2(250, 75)); + + PlotLines("", ref displayBattery.ReceivingPowerData[0], MaxTickData, _tickDataIdx + 1, + $"IN: {battery.CurrentReceiving:N1} W", + 0, battery.MaxChargeRate + 1000, new Vector2(250, 75)); + + PlotLines("", ref displayBattery.StoredPowerData[0], MaxTickData, _tickDataIdx + 1, + $"Charge: {battery.CurrentStorage:N1} J", + 0, battery.Capacity, new Vector2(250, 75)); + + if (Button("Delete")) + { + _remQueue.Enqueue(battery); + } + + SameLine(); + if (_linking != null) + { + if (battery.LinkedNetworkCharging == default && Button("Link as load")) + { + _linking.BatteriesCharging.Add(battery.Id); + _linking = null; + RefreshLinks(); + } + else + { + SameLine(); + if (battery.LinkedNetworkDischarging == default && Button("Link as supply")) + { + _linking.BatteriesDischarging.Add(battery.Id); + _linking = null; + RefreshLinks(); + } + } + } + else + { + if (battery.LinkedNetworkCharging != default && Button("Unlink loading")) + { + var net = _state.Networks[battery.LinkedNetworkCharging]; + net.BatteriesCharging.Remove(battery.Id); + battery.LinkedNetworkCharging = default; + } + else + { + SameLine(); + if (battery.LinkedNetworkDischarging != default && Button("Unlink supplying")) + { + var net = _state.Networks[battery.LinkedNetworkDischarging]; + net.BatteriesDischarging.Remove(battery.Id); + battery.LinkedNetworkDischarging = default; + } + } + } + + if (Button("Empty")) + battery.CurrentStorage = 0; + SameLine(); + if (Button("Fill")) + battery.CurrentStorage = battery.Capacity; + + End(); + } + + var bgDrawList = GetBackgroundDrawList(); + + foreach (var network in _state.Networks.Values) + { + var displayNet = _displayNetworks[network.Id]; + foreach (var supplyId in network.Supplies) + { + var supply = _displaySupplies[supplyId]; + DrawArrowLine(bgDrawList, displayNet.CurrentWindowPos, supply.CurrentWindowPos, Color.LawnGreen); + } + + foreach (var loadId in network.Loads) + { + var load = _displayLoads[loadId]; + DrawArrowLine(bgDrawList, load.CurrentWindowPos, displayNet.CurrentWindowPos, Color.Red); + } + + foreach (var batteryId in network.BatteriesCharging) + { + var battery = _displayBatteries[batteryId]; + DrawArrowLine(bgDrawList, battery.CurrentWindowPos, displayNet.CurrentWindowPos, Color.Purple); + } + + foreach (var batteryId in network.BatteriesDischarging) + { + var battery = _displayBatteries[batteryId]; + DrawArrowLine(bgDrawList, displayNet.CurrentWindowPos, battery.CurrentWindowPos, Color.Cyan); + } + } + + if (_showDemo) + { + ShowDemoWindow(); + } + + var reLink = false; + while (_remQueue.TryDequeue(out var item)) + { + switch (item) + { + case Network n: + _state.Networks.Remove(n.Id); + _displayNetworks.Remove(n.Id); + reLink = true; + break; + + case Supply s: + _state.Supplies.Remove(s.Id); + _state.Networks.Values.ForEach(n => n.Supplies.Remove(s.Id)); + _displaySupplies.Remove(s.Id); + break; + + case Load l: + _state.Loads.Remove(l.Id); + _state.Networks.Values.ForEach(n => n.Loads.Remove(l.Id)); + _displayLoads.Remove(l.Id); + break; + + case Battery b: + _state.Batteries.Remove(b.Id); + _state.Networks.Values.ForEach(n => n.BatteriesCharging.Remove(b.Id)); + _state.Networks.Values.ForEach(n => n.BatteriesDischarging.Remove(b.Id)); + _displayBatteries.Remove(b.Id); + break; + } + } + + if (reLink) + RefreshLinks(); + } + + + private void DrawArrowLine(ImDrawListPtr ptr, Vector2 a, Vector2 b, Color color) + { + // A: to + // B: from + + const float wingLength = 15; + const float thickness = 3; + + var cvtColor = CvtColor(color); + + ptr.AddLine(a, b, cvtColor, thickness); + + var angleA = Angle.FromDegrees(45); + var angleB = Angle.FromDegrees(-45); + + var mid = (a + b) / 2; + var dir = -Vector2.Normalize(a - b); + + var rVec = new RobustVec2(dir.X, dir.Y); + + var wingADir = CvtVec(angleA.RotateVec(rVec)); + var wingBDir = CvtVec(angleB.RotateVec(rVec)); + + var wingA = wingADir * wingLength + mid; + var wingB = wingBDir * wingLength + mid; + + ptr.AddLine(mid, wingA, cvtColor, thickness); + ptr.AddLine(mid, wingB, cvtColor, thickness); + } + + private static uint CvtColor(Color color) + { + return color.R | ((uint) color.G << 8) | ((uint) color.B << 16) | ((uint) color.A << 24); + } + + private static Vector2 CalcWindowCenter() + { + return GetWindowPos() + GetWindowSize() / 2; + } + + private static Vector2 CvtVec(RobustVec2 vec) + { + return new Vector2(vec.X, vec.Y); + } + + private sealed class DisplayNetwork + { + public Vector2 CurrentWindowPos; + } + + private sealed class DisplayBattery + { + public Vector2 CurrentWindowPos; + public readonly float[] ReceivingPowerData = new float[MaxTickData]; + public readonly float[] SuppliedPowerData = new float[MaxTickData]; + public readonly float[] StoredPowerData = new float[MaxTickData]; + } + + private sealed class DisplayLoad + { + public Vector2 CurrentWindowPos; + public readonly float[] ReceivedPowerData = new float[MaxTickData]; + } + + private sealed class DisplaySupply + { + public Vector2 CurrentWindowPos; + public readonly float[] SuppliedPowerData = new float[MaxTickData]; + } + } +} diff --git a/Pow3r/Program.Veldrid.cs b/Pow3r/Program.Veldrid.cs new file mode 100644 index 0000000000..0ebc62b8de --- /dev/null +++ b/Pow3r/Program.Veldrid.cs @@ -0,0 +1,409 @@ +using System; +using System.Numerics; +using System.Runtime.InteropServices; +using System.Text; +using ImGuiNET; +using OpenTK.Windowing.GraphicsLibraryFramework; +using Veldrid; +using Veldrid.OpenGL; +using Veldrid.SPIRV; +using Veldrid.Vk; + +namespace Pow3r +{ + internal sealed unsafe partial class Program + { + private const string VDVertexShader = @" +#version 460 + +layout (location = 0) in vec2 Position; +layout (location = 1) in vec2 UV; +layout (location = 2) in vec4 Color; + +layout (set = 0, binding = 0) uniform ProjMtx { + mat4 _ProjMtx; +}; + +layout (location = 0) out vec2 Frag_UV; +layout (location = 1) out vec4 Frag_Color; + +// Converts a color from sRGB gamma to linear light gamma +vec4 toLinear(vec4 sRGB) +{ + bvec3 cutoff = lessThan(sRGB.rgb, vec3(0.04045)); + vec3 higher = pow((sRGB.rgb + vec3(0.055))/vec3(1.055), vec3(2.4)); + vec3 lower = sRGB.rgb/vec3(12.92); + + return vec4(mix(higher, lower, cutoff), sRGB.a); +} + +void main() +{ + Frag_UV = UV; + Frag_Color = toLinear(Color); + gl_Position = _ProjMtx * vec4(Position.xy,0,1); +}"; + + private const string VDFragmentShader = @" +#version 460 + +layout (location = 0) in vec2 Frag_UV; +layout (location = 1) in vec4 Frag_Color; + +layout (set = 1, binding = 0) uniform texture2D Texture; +layout (set = 1, binding = 1) uniform sampler TextureSampler; + +layout (location = 0) out vec4 Out_Color; + +void main() +{ + Out_Color = Frag_Color * texture(sampler2D(Texture, TextureSampler), Frag_UV.st); +}"; + + private VeldridRenderer _vdRenderer = VeldridRenderer.Vulkan; + + private GraphicsDevice _vdGfxDevice; + private CommandList _vdCommandList; + private Pipeline _vdPipeline; + private Shader[] _vdShaders; + private ResourceSet _vdSetTexture; + private ResourceSet _vdSetProjMatrix; + private Texture _vdTexture; + private Sampler _vdSampler; + private DeviceBuffer _vdProjMatrixUniformBuffer; + private int _vdLastWidth; + private int _vdLastHeight; + private VdFencedDatum[] _fencedData = Array.Empty(); + + private void InitVeldrid() + { + var options = new GraphicsDeviceOptions + { +#if DEBUG + Debug = true, +#endif + HasMainSwapchain = true, + SyncToVerticalBlank = _vsync, + PreferStandardClipSpaceYDirection = true, + SwapchainSrgbFormat = true + }; + + GLFW.GetFramebufferSize(_window.WindowPtr, out var w, out var h); + + var hwnd = GLFW.GetWin32Window(_window.WindowPtr); + var hinstance = GetModuleHandleA(null); + + switch (_vdRenderer) + { + case VeldridRenderer.Vulkan: + _vdGfxDevice = GraphicsDevice.CreateVulkan( + options, + VkSurfaceSource.CreateWin32((nint) hinstance, hwnd), + (uint) w, (uint) h); + break; + case VeldridRenderer.D3D11: + _vdGfxDevice = GraphicsDevice.CreateD3D11(options, hwnd, (uint) w, (uint) h); + break; + case VeldridRenderer.OpenGL: + { + var platInfo = new OpenGLPlatformInfo( + (nint) _window.WindowPtr, + GLFW.GetProcAddress, + ptr => GLFW.MakeContextCurrent((Window*) ptr), + () => (nint) GLFW.GetCurrentContext(), + () => GLFW.MakeContextCurrent(null), + ptr => GLFW.DestroyWindow((Window*) ptr), + () => GLFW.SwapBuffers(_window.WindowPtr), + vsync => GLFW.SwapInterval(vsync ? 1 : 0)); + + _vdGfxDevice = GraphicsDevice.CreateOpenGL(options, platInfo, (uint) w, (uint) h); + break; + } + } + + + var factory = _vdGfxDevice.ResourceFactory; + + _vdCommandList = factory.CreateCommandList(); + _vdCommandList.Name = "Honk"; + + var vtxLayout = new VertexLayoutDescription( + new VertexElementDescription("Position", VertexElementFormat.Float2, + VertexElementSemantic.TextureCoordinate), + new VertexElementDescription("UV", VertexElementFormat.Float2, VertexElementSemantic.TextureCoordinate), + new VertexElementDescription("Color", VertexElementFormat.Byte4_Norm, + VertexElementSemantic.TextureCoordinate)); + + var vtxShaderDesc = new ShaderDescription( + ShaderStages.Vertex, + Encoding.UTF8.GetBytes(VDVertexShader), + "main"); + + var fragShaderDesc = new ShaderDescription( + ShaderStages.Fragment, + Encoding.UTF8.GetBytes(VDFragmentShader), + "main"); + + _vdShaders = factory.CreateFromSpirv(vtxShaderDesc, fragShaderDesc); + + _vdShaders[0].Name = "VertexShader"; + _vdShaders[1].Name = "FragmentShader"; + + var layoutTexture = factory.CreateResourceLayout(new ResourceLayoutDescription( + new ResourceLayoutElementDescription( + "Texture", + ResourceKind.TextureReadOnly, + ShaderStages.Fragment), + new ResourceLayoutElementDescription( + "TextureSampler", + ResourceKind.Sampler, + ShaderStages.Fragment))); + + layoutTexture.Name = "LayoutTexture"; + + var layoutProjMatrix = factory.CreateResourceLayout(new ResourceLayoutDescription( + new ResourceLayoutElementDescription( + "ProjMtx", + ResourceKind.UniformBuffer, + ShaderStages.Vertex))); + + layoutProjMatrix.Name = "LayoutProjMatrix"; + + var pipelineDesc = new GraphicsPipelineDescription( + new BlendStateDescription( + RgbaFloat.White, + new BlendAttachmentDescription( + true, + BlendFactor.SourceAlpha, + BlendFactor.InverseSourceAlpha, + BlendFunction.Add, + BlendFactor.One, + BlendFactor.InverseSourceAlpha, + BlendFunction.Add) + ), + DepthStencilStateDescription.Disabled, + new RasterizerStateDescription( + FaceCullMode.None, + PolygonFillMode.Solid, + FrontFace.Clockwise, + depthClipEnabled: false, + scissorTestEnabled: true), + PrimitiveTopology.TriangleList, + new ShaderSetDescription(new[] {vtxLayout}, _vdShaders), + new[] {layoutProjMatrix, layoutTexture}, + new OutputDescription( + null, + new OutputAttachmentDescription(PixelFormat.B8_G8_R8_A8_UNorm_SRgb)) + ); + + _vdPipeline = factory.CreateGraphicsPipeline(pipelineDesc); + _vdPipeline.Name = "MainPipeline"; + + _vdProjMatrixUniformBuffer = factory.CreateBuffer(new BufferDescription( + (uint) sizeof(Matrix4x4), + BufferUsage.Dynamic | BufferUsage.UniformBuffer)); + _vdProjMatrixUniformBuffer.Name = "_vdProjMatrixUniformBuffer"; + + _vdSetProjMatrix = factory.CreateResourceSet(new ResourceSetDescription( + layoutProjMatrix, + _vdProjMatrixUniformBuffer)); + _vdSetProjMatrix.Name = "_vdSetProjMatrix"; + var io = ImGui.GetIO(); + + io.Fonts.GetTexDataAsRGBA32(out byte* pixels, out var width, out var height, out _); + + _vdTexture = factory.CreateTexture(TextureDescription.Texture2D( + (uint) width, (uint) height, + mipLevels: 1, + arrayLayers: 1, + PixelFormat.R8_G8_B8_A8_UNorm_SRgb, + TextureUsage.Sampled)); + + _vdTexture.Name = "MainTexture"; + + _vdSampler = factory.CreateSampler(SamplerDescription.Linear); + + _vdSampler.Name = "MainSampler"; + + _vdGfxDevice.UpdateTexture( + _vdTexture, + (IntPtr) pixels, + (uint) (width * height * 4), + x: 0, y: 0, z: 0, + (uint) width, (uint) height, depth: 1, + mipLevel: 0, + arrayLayer: 0); + + _vdSetTexture = factory.CreateResourceSet(new ResourceSetDescription( + layoutTexture, + _vdTexture, + _vdSampler)); + + _vdSetTexture.Name = "SetTexture"; + + io.Fonts.SetTexID((nint) 0); + io.Fonts.ClearTexData(); + + _vdGfxDevice.ResizeMainWindow((uint) w, (uint) h); + _vdGfxDevice.SwapBuffers(); + } + + private void RenderVeldrid() + { + GLFW.GetFramebufferSize(_window.WindowPtr, out var fbW, out var fbH); + + if (_vdLastWidth != fbW && _vdLastHeight != fbH) + { + _vdGfxDevice.ResizeMainWindow((uint) fbW, (uint) fbH); + _vdLastWidth = fbW; + _vdLastHeight = fbH; + } + + _vdCommandList.Begin(); + _vdCommandList.SetFramebuffer(_vdGfxDevice.SwapchainFramebuffer); + + _vdCommandList.SetViewport(0, new Viewport(0, 0, fbW, fbH, 0, 1)); + _vdCommandList.ClearColorTarget(0, RgbaFloat.Black); + + var factory = _vdGfxDevice.ResourceFactory; + + var drawData = ImGui.GetDrawData(); + + ref var fencedData = ref GetFreeFencedData(); + ref var vtxBuf = ref fencedData.VertexBuffer; + ref var idxBuf = ref fencedData.IndexBuffer; + + var byteLenVtx = (uint) (sizeof(ImDrawVert) * drawData.TotalVtxCount); + if (fencedData.VertexBuffer == null || vtxBuf.SizeInBytes < byteLenVtx) + { + vtxBuf?.Dispose(); + vtxBuf = factory.CreateBuffer(new BufferDescription( + byteLenVtx, + BufferUsage.VertexBuffer | BufferUsage.Dynamic)); + vtxBuf.Name = "_vdVtxBuffer"; + } + + var byteLenIdx = (uint) (sizeof(ushort) * drawData.TotalIdxCount); + if (idxBuf == null || idxBuf.SizeInBytes < byteLenIdx) + { + idxBuf?.Dispose(); + idxBuf = factory.CreateBuffer(new BufferDescription( + byteLenIdx, + BufferUsage.IndexBuffer | BufferUsage.Dynamic)); + idxBuf.Name = "_vdIdxBuffer"; + } + + var vtxOffset = 0; + var idxOffset = 0; + var mappedVtxBuf = MappedToSpan(_vdGfxDevice.Map(vtxBuf, MapMode.Write)); + var mappedIdxBuf = MappedToSpan(_vdGfxDevice.Map(idxBuf, MapMode.Write)); + + var l = drawData.DisplayPos.X; + var r = drawData.DisplayPos.X + drawData.DisplaySize.X; + var t = drawData.DisplayPos.Y; + var b = drawData.DisplayPos.Y + drawData.DisplaySize.Y; + + var matrix = Matrix4x4.CreateOrthographicOffCenter(l, r, b, t, -1, 1); + + var clipOff = drawData.DisplayPos; + var clipScale = drawData.FramebufferScale; + + _vdCommandList.UpdateBuffer(_vdProjMatrixUniformBuffer, 0, ref matrix); + + _vdCommandList.SetPipeline(_vdPipeline); + _vdCommandList.SetGraphicsResourceSet(0, _vdSetProjMatrix); + _vdCommandList.SetGraphicsResourceSet(1, _vdSetTexture); + _vdCommandList.SetVertexBuffer(0, vtxBuf); + _vdCommandList.SetIndexBuffer(idxBuf, IndexFormat.UInt16); + + for (var n = 0; n < drawData.CmdListsCount; n++) + { + var drawList = drawData.CmdListsRange[n]; + + var drawVtx = new Span((void*) drawList.VtxBuffer.Data, drawList.VtxBuffer.Size); + var drawIdx = new Span((void*) drawList.IdxBuffer.Data, drawList.IdxBuffer.Size); + + drawVtx.CopyTo(mappedVtxBuf[vtxOffset..]); + drawIdx.CopyTo(mappedIdxBuf[idxOffset..]); + + for (var cmdI = 0; cmdI < drawList.CmdBuffer.Size; cmdI++) + { + var cmd = drawList.CmdBuffer[cmdI]; + + Vector4 clipRect = default; + clipRect.X = (cmd.ClipRect.X - clipOff.X) * clipScale.X; + clipRect.Y = (cmd.ClipRect.Y - clipOff.Y) * clipScale.Y; + clipRect.Z = (cmd.ClipRect.Z - clipOff.X) * clipScale.X; + clipRect.W = (cmd.ClipRect.W - clipOff.Y) * clipScale.Y; + + _vdCommandList.SetScissorRect( + 0, + (uint) clipRect.X, + (uint) clipRect.Y, + (uint) (clipRect.Z - clipRect.X), + (uint) (clipRect.W - clipRect.Y)); + + _vdCommandList.DrawIndexed( + cmd.ElemCount, + 1, + (uint) (cmd.IdxOffset + idxOffset), + (int) (cmd.VtxOffset + vtxOffset), + 0); + } + + vtxOffset += drawVtx.Length; + idxOffset += drawIdx.Length; + } + + _vdGfxDevice.Unmap(vtxBuf); + _vdGfxDevice.Unmap(idxBuf); + + _vdCommandList.End(); + + _vdGfxDevice.SubmitCommands(_vdCommandList, fencedData.Fence); + _vdGfxDevice.SwapBuffers(); + } + + private ref VdFencedDatum GetFreeFencedData() + { + for (var i = 0; i < _fencedData.Length; i++) + { + ref var fenced = ref _fencedData[i]; + + if (fenced.Fence.Signaled) + { + fenced.Fence.Reset(); + return ref fenced; + } + } + + Array.Resize(ref _fencedData, _fencedData.Length + 1); + ref var slot = ref _fencedData[^1]; + slot = new VdFencedDatum {Fence = _vdGfxDevice.ResourceFactory.CreateFence(false)}; + return ref slot; + } + + private static Span MappedToSpan(MappedResourceView mapped) where T : struct + { + return MemoryMarshal.CreateSpan(ref mapped[0], mapped.Count); + } + + [DllImport("kernel32.dll")] + private static extern void* GetModuleHandleA(byte* lpModuleName); + + private struct VdFencedDatum + { + public Fence Fence; + + public DeviceBuffer IndexBuffer; + public DeviceBuffer VertexBuffer; + } + + private enum VeldridRenderer + { + Vulkan, + D3D11, + OpenGL + } + } +} diff --git a/Pow3r/Program.cs b/Pow3r/Program.cs new file mode 100644 index 0000000000..349fb6bcd7 --- /dev/null +++ b/Pow3r/Program.cs @@ -0,0 +1,389 @@ +using System; +using System.Diagnostics; +using System.Runtime.InteropServices; +using ImGuiNET; +using OpenTK.Windowing.Common; +using OpenTK.Windowing.Desktop; +using OpenTK.Windowing.GraphicsLibraryFramework; +using ErrorCode = OpenTK.Windowing.GraphicsLibraryFramework.ErrorCode; +using Vector2 = System.Numerics.Vector2; + +// ReSharper disable PossibleNullReferenceException + +namespace Pow3r +{ + internal sealed unsafe partial class Program + { + private Renderer _renderer = Renderer.Veldrid; + + [UnmanagedCallersOnly] + private static byte* GetClipboardTextCallback(void* userData) + { + return GLFW.GetClipboardStringRaw((Window*) userData); + } + + [UnmanagedCallersOnly] + private static void SetClipboardTextCallback(void* userData, byte* text) + { + GLFW.SetClipboardStringRaw((Window*) userData, text); + } + + private static readonly GLFWCallbacks.ErrorCallback ErrorCallback = GlfwErrorCallback; + + private static void GlfwErrorCallback(ErrorCode error, string description) + { + Console.WriteLine($"{error}: {description}"); + } + + private bool[] _mouseJustPressed = new bool[5]; + + private bool _fullscreen; + private int _monitorIdx; + private bool _vsync = true; + private GameWindow _window; + private readonly Stopwatch _stopwatch = new(); + private readonly Cursor*[] _cursors = new Cursor*[9]; + private readonly float[] _frameTimings = new float[180]; + private int _frameTimeIdx = 0; + private int _tps = 60; + + private void Run(string[] args) + { + for (var i = 0; i < args.Length; i++) + { + if (args[i] == "--renderer") + { + _renderer = Enum.Parse(args[++i]); + } + else if (args[i] == "--veldrid") + { + _vdRenderer = Enum.Parse(args[++i]); + } + else if (args[i] == "--fullscreen") + { + _fullscreen = true; + } + else if (args[i] == "--monitor-idx") + { + _monitorIdx = int.Parse(args[++i]); + } + else if (args[i] == "--no-vsync") + { + _vsync = false; + } + else if (args[i] == "--help") + { + Console.WriteLine("--renderer "); + Console.WriteLine("--veldrid "); + Console.WriteLine("--no-vsync"); + Console.WriteLine("--fullscreen"); + Console.WriteLine("--monitor-idx"); + Console.WriteLine("--help"); + return; + } + else + { + Console.WriteLine($"unknown arg \"{args[i]}\""); + return; + } + } + + Console.WriteLine($"Renderer: {_renderer}"); + if (_renderer == Renderer.Veldrid) + Console.WriteLine($"Veldrid API: {_vdRenderer}"); + + Console.WriteLine($"Fullscreen: {_fullscreen}"); + Console.WriteLine($"VSync: {_vsync}"); + + //NativeLibrary.Load("nvapi64.dll"); + GLFW.Init(); + GLFW.SetErrorCallback(ErrorCallback); + + // var sw = Stopwatch.StartNew(); + GLFW.WindowHint(WindowHintBool.SrgbCapable, true); + var windowSettings = new NativeWindowSettings + { + Size = (1280, 720), + WindowState = WindowState.Maximized, + StartVisible = false, + + Title = "Pow3r" + }; + + + var openGLBased = _renderer == Renderer.OpenGL || + (_renderer == Renderer.Veldrid && _vdRenderer == VeldridRenderer.OpenGL); + + if (openGLBased) + { + windowSettings.API = ContextAPI.OpenGL; + if (_renderer == Renderer.Veldrid) + { + windowSettings.Profile = ContextProfile.Core; + windowSettings.APIVersion = new Version(4, 6); + windowSettings.Flags = ContextFlags.ForwardCompatible; + } + else + { + windowSettings.Profile = ContextProfile.Any; + windowSettings.APIVersion = new Version(1, 5); + } +#if DEBUG + windowSettings.Flags |= ContextFlags.Debug; +#endif + } + else + { + windowSettings.API = ContextAPI.NoAPI; + } + + _window = new GameWindow(GameWindowSettings.Default, windowSettings); + + // Console.WriteLine(sw.ElapsedMilliseconds); + + if (_fullscreen) + { + var monitors = GLFW.GetMonitors(); + var monitor = monitors[_monitorIdx]; + var monitorMode = GLFW.GetVideoMode(monitor); + + GLFW.SetWindowMonitor( + _window.WindowPtr, + monitor, + 0, 0, + monitorMode->Width, + monitorMode->Height, + monitorMode->RefreshRate); + } + + if (openGLBased) + { + _window.VSync = _vsync ? VSyncMode.On : VSyncMode.Off; + } + + var context = ImGui.CreateContext(); + ImGui.SetCurrentContext(context); + ImGui.StyleColorsDark(); + + var io = ImGui.GetIO(); + io.Fonts.AddFontDefault(); + + delegate* unmanaged getClipboardCallback = &GetClipboardTextCallback; + io.GetClipboardTextFn = (IntPtr) getClipboardCallback; + delegate* unmanaged setClipboardCallback = &SetClipboardTextCallback; + io.GetClipboardTextFn = (IntPtr) setClipboardCallback; + io.ClipboardUserData = (IntPtr) _window.WindowPtr; + io.BackendFlags |= ImGuiBackendFlags.RendererHasVtxOffset; + io.BackendFlags |= ImGuiBackendFlags.HasSetMousePos; + io.BackendFlags |= ImGuiBackendFlags.HasMouseCursors; + + io.KeyMap[(int) ImGuiKey.Tab] = (int) Keys.Tab; + io.KeyMap[(int) ImGuiKey.LeftArrow] = (int) Keys.Left; + io.KeyMap[(int) ImGuiKey.RightArrow] = (int) Keys.Right; + io.KeyMap[(int) ImGuiKey.UpArrow] = (int) Keys.Up; + io.KeyMap[(int) ImGuiKey.DownArrow] = (int) Keys.Down; + io.KeyMap[(int) ImGuiKey.PageUp] = (int) Keys.PageUp; + io.KeyMap[(int) ImGuiKey.PageDown] = (int) Keys.PageDown; + io.KeyMap[(int) ImGuiKey.Home] = (int) Keys.Home; + io.KeyMap[(int) ImGuiKey.End] = (int) Keys.End; + io.KeyMap[(int) ImGuiKey.Delete] = (int) Keys.Delete; + io.KeyMap[(int) ImGuiKey.Backspace] = (int) Keys.Backspace; + io.KeyMap[(int) ImGuiKey.Enter] = (int) Keys.Enter; + io.KeyMap[(int) ImGuiKey.Escape] = (int) Keys.Escape; + io.KeyMap[(int) ImGuiKey.A] = (int) Keys.A; + io.KeyMap[(int) ImGuiKey.C] = (int) Keys.C; + io.KeyMap[(int) ImGuiKey.V] = (int) Keys.V; + io.KeyMap[(int) ImGuiKey.X] = (int) Keys.X; + io.KeyMap[(int) ImGuiKey.Y] = (int) Keys.Y; + io.KeyMap[(int) ImGuiKey.Z] = (int) Keys.Z; + + _cursors[(int) ImGuiMouseCursor.Arrow] = GLFW.CreateStandardCursor(CursorShape.Arrow); + _cursors[(int) ImGuiMouseCursor.TextInput] = GLFW.CreateStandardCursor(CursorShape.IBeam); + _cursors[(int) ImGuiMouseCursor.ResizeNS] = GLFW.CreateStandardCursor(CursorShape.VResize); + _cursors[(int) ImGuiMouseCursor.ResizeEW] = GLFW.CreateStandardCursor(CursorShape.HResize); + _cursors[(int) ImGuiMouseCursor.Hand] = GLFW.CreateStandardCursor(CursorShape.Hand); + _cursors[(int) ImGuiMouseCursor.ResizeAll] = GLFW.CreateStandardCursor(CursorShape.Arrow); + _cursors[(int) ImGuiMouseCursor.ResizeNESW] = GLFW.CreateStandardCursor(CursorShape.Arrow); + _cursors[(int) ImGuiMouseCursor.ResizeNWSE] = GLFW.CreateStandardCursor(CursorShape.Arrow); + _cursors[(int) ImGuiMouseCursor.NotAllowed] = GLFW.CreateStandardCursor(CursorShape.Arrow); + + InitRenderer(); + + _window.MouseDown += OnMouseDown; + _window.TextInput += WindowOnTextInput; + _window.MouseWheel += WindowOnMouseWheel; + _window.KeyDown += args => KeyCallback(args, true); + _window.KeyUp += args => KeyCallback(args, false); + + _stopwatch.Start(); + + LoadFromDisk(); + + _window.IsVisible = true; + + var lastTick = TimeSpan.Zero; + var lastFrame = TimeSpan.Zero; + var curTime = TimeSpan.Zero; + + while (!GLFW.WindowShouldClose(_window.WindowPtr)) + { + _window.ProcessEvents(); + + var tickSpan = TimeSpan.FromSeconds(1f / _tps); + while (curTime - lastTick > tickSpan) + { + lastTick += tickSpan; + + Tick((float) tickSpan.TotalSeconds); + } + + _frameTimeIdx = (_frameTimeIdx + 1) % _frameTimings.Length; + + var dt = curTime - lastFrame; + lastFrame = curTime; + _frameTimings[_frameTimeIdx] = (float) dt.TotalMilliseconds; + + FrameUpdate((float) dt.TotalSeconds); + Render(); + curTime = _stopwatch.Elapsed; + } + + SaveToDisk(); + } + + private static void KeyCallback(KeyboardKeyEventArgs obj, bool down) + { + var io = ImGui.GetIO(); + if (obj.Key ==Keys.Unknown) + return; + + var keyInt = (int) obj.Key; + io.KeysDown[keyInt] = down; + io.KeyCtrl = io.KeysDown[(int) Keys.LeftControl] || io.KeysDown[(int) Keys.RightControl]; + io.KeyShift = io.KeysDown[(int) Keys.LeftShift] || io.KeysDown[(int) Keys.RightShift]; + io.KeyAlt = io.KeysDown[(int) Keys.LeftAlt] || io.KeysDown[(int) Keys.RightAlt]; + } + + private static void WindowOnMouseWheel(MouseWheelEventArgs obj) + { + var io = ImGui.GetIO(); + io.MouseWheelH += obj.OffsetX; + io.MouseWheel += obj.OffsetY; + } + + private static void WindowOnTextInput(TextInputEventArgs obj) + { + var io = ImGui.GetIO(); + io.AddInputCharacter((uint) obj.Unicode); + } + + private void OnMouseDown(MouseButtonEventArgs obj) + { + var button = (int) obj.Button; + if (obj.IsPressed && button < _mouseJustPressed.Length) + _mouseJustPressed[button] = true; + } + + private void FrameUpdate(float dt) + { + //var sw = Stopwatch.StartNew(); + var io = ImGui.GetIO(); + GLFW.GetFramebufferSize(_window.WindowPtr, out var fbW, out var fbH); + GLFW.GetWindowSize(_window.WindowPtr, out var wW, out var wH); + io.DisplaySize = new Vector2(wW, wH); + io.DisplayFramebufferScale = new Vector2(fbW / (float) wW, fbH / (float) wH); + io.DeltaTime = dt; + + UpdateMouseState(io); + UpdateCursorState(io); + + //Console.WriteLine($"INPUT: {sw.Elapsed.TotalMilliseconds}"); + + ImGui.NewFrame(); + + DoUI(dt); + } + + private void UpdateCursorState(ImGuiIOPtr io) + { + var cursor = ImGui.GetMouseCursor(); + if (cursor == ImGuiMouseCursor.None) + { + GLFW.SetInputMode(_window.WindowPtr, CursorStateAttribute.Cursor, CursorModeValue.CursorHidden); + } + else + { + GLFW.SetCursor(_window.WindowPtr, _cursors[(int) cursor]); + GLFW.SetInputMode(_window.WindowPtr, CursorStateAttribute.Cursor, CursorModeValue.CursorNormal); + } + } + + private void UpdateMouseState(ImGuiIOPtr io) + { + for (var i = 0; i < io.MouseDown.Count; i++) + { + io.MouseDown[i] = _mouseJustPressed[i] || + GLFW.GetMouseButton(_window.WindowPtr, (MouseButton) i) == InputAction.Press; + _mouseJustPressed[i] = false; + } + + var oldMousePos = io.MousePos; + io.MousePos = new Vector2(float.PositiveInfinity, float.PositiveInfinity); + + var focused = _window.IsFocused; + if (focused) + { + if (io.WantSetMousePos) + { + GLFW.SetCursorPos(_window.WindowPtr, oldMousePos.X, oldMousePos.Y); + } + else + { + GLFW.GetCursorPos(_window.WindowPtr, out var x, out var y); + io.MousePos = new Vector2((float) x, (float) y); + } + } + } + + private void InitRenderer() + { + switch (_renderer) + { + case Renderer.OpenGL: + InitOpenGL(); + break; + + case Renderer.Veldrid: + InitVeldrid(); + break; + } + } + + private void Render() + { + ImGui.Render(); + + switch (_renderer) + { + case Renderer.OpenGL: + RenderOpenGL(); + break; + + case Renderer.Veldrid: + RenderVeldrid(); + break; + } + } + + private static void Main(string[] args) + { + new Program().Run(args); + } + + public enum Renderer + { + OpenGL, + Veldrid + } + } +} diff --git a/Resources/Maps/Test/singularity.yml b/Resources/Maps/Test/singularity.yml index 337431e707..ceb80b4927 100644 --- a/Resources/Maps/Test/singularity.yml +++ b/Resources/Maps/Test/singularity.yml @@ -576,361 +576,361 @@ entities: pos: -4.5,-0.5 type: Transform - uid: 21 - type: MVWire + type: CableMV components: - parent: 0 pos: -4.5,-0.5 type: Transform - uid: 22 - type: MVWire + type: CableMV components: - parent: 0 pos: -5.5,-0.5 type: Transform - uid: 23 - type: MVWire + type: CableMV components: - parent: 0 pos: -6.5,-0.5 type: Transform - uid: 24 - type: MVWire + type: CableMV components: - parent: 0 pos: -6.5,-1.5 type: Transform - uid: 25 - type: MVWire + type: CableMV components: - parent: 0 pos: -6.5,-2.5 type: Transform - uid: 26 - type: MVWire + type: CableMV components: - parent: 0 pos: -6.5,-3.5 type: Transform - uid: 27 - type: MVWire + type: CableMV components: - parent: 0 pos: -6.5,-4.5 type: Transform - uid: 28 - type: MVWire + type: CableMV components: - parent: 0 pos: -5.5,-4.5 type: Transform - uid: 29 - type: MVWire + type: CableMV components: - parent: 0 pos: -4.5,-4.5 type: Transform - uid: 30 - type: MVWire + type: CableMV components: - parent: 0 pos: -6.5,-5.5 type: Transform - uid: 31 - type: MVWire + type: CableMV components: - parent: 0 pos: -6.5,-6.5 type: Transform - uid: 32 - type: MVWire + type: CableMV components: - parent: 0 pos: -6.5,-7.5 type: Transform - uid: 33 - type: MVWire + type: CableMV components: - parent: 0 pos: -6.5,-8.5 type: Transform - uid: 34 - type: MVWire + type: CableMV components: - parent: 0 pos: -5.5,-8.5 type: Transform - uid: 35 - type: MVWire + type: CableMV components: - parent: 0 pos: -4.5,-8.5 type: Transform - uid: 36 - type: MVWire + type: CableMV components: - parent: 0 pos: -0.5,3.5 type: Transform - uid: 37 - type: MVWire + type: CableMV components: - parent: 0 pos: -0.5,4.5 type: Transform - uid: 38 - type: MVWire + type: CableMV components: - parent: 0 pos: -0.5,5.5 type: Transform - uid: 39 - type: MVWire + type: CableMV components: - parent: 0 pos: 0.5,5.5 type: Transform - uid: 40 - type: MVWire + type: CableMV components: - parent: 0 pos: 1.5,5.5 type: Transform - uid: 41 - type: MVWire + type: CableMV components: - parent: 0 pos: 2.5,5.5 type: Transform - uid: 42 - type: MVWire + type: CableMV components: - parent: 0 pos: 3.5,5.5 type: Transform - uid: 43 - type: MVWire + type: CableMV components: - parent: 0 pos: 3.5,4.5 type: Transform - uid: 44 - type: MVWire + type: CableMV components: - parent: 0 pos: 3.5,3.5 type: Transform - uid: 45 - type: MVWire + type: CableMV components: - parent: 0 pos: 4.5,5.5 type: Transform - uid: 46 - type: MVWire + type: CableMV components: - parent: 0 pos: 5.5,5.5 type: Transform - uid: 47 - type: MVWire + type: CableMV components: - parent: 0 pos: 6.5,5.5 type: Transform - uid: 48 - type: MVWire + type: CableMV components: - parent: 0 pos: 7.5,5.5 type: Transform - uid: 49 - type: MVWire + type: CableMV components: - parent: 0 pos: 7.5,4.5 type: Transform - uid: 50 - type: MVWire + type: CableMV components: - parent: 0 pos: 7.5,3.5 type: Transform - uid: 51 - type: MVWire + type: CableMV components: - parent: 0 pos: 11.5,-0.5 type: Transform - uid: 52 - type: MVWire + type: CableMV components: - parent: 0 pos: 12.5,-0.5 type: Transform - uid: 53 - type: MVWire + type: CableMV components: - parent: 0 pos: 13.5,-0.5 type: Transform - uid: 54 - type: MVWire + type: CableMV components: - parent: 0 pos: 13.5,-1.5 type: Transform - uid: 55 - type: MVWire + type: CableMV components: - parent: 0 pos: 13.5,-2.5 type: Transform - uid: 56 - type: MVWire + type: CableMV components: - parent: 0 pos: 13.5,-3.5 type: Transform - uid: 57 - type: MVWire + type: CableMV components: - parent: 0 pos: 13.5,-4.5 type: Transform - uid: 58 - type: MVWire + type: CableMV components: - parent: 0 pos: 12.5,-4.5 type: Transform - uid: 59 - type: MVWire + type: CableMV components: - parent: 0 pos: 11.5,-4.5 type: Transform - uid: 60 - type: MVWire + type: CableMV components: - parent: 0 pos: 13.5,-5.5 type: Transform - uid: 61 - type: MVWire + type: CableMV components: - parent: 0 pos: 13.5,-6.5 type: Transform - uid: 62 - type: MVWire + type: CableMV components: - parent: 0 pos: 13.5,-7.5 type: Transform - uid: 63 - type: MVWire + type: CableMV components: - parent: 0 pos: 13.5,-8.5 type: Transform - uid: 64 - type: MVWire + type: CableMV components: - parent: 0 pos: 12.5,-8.5 type: Transform - uid: 65 - type: MVWire + type: CableMV components: - parent: 0 pos: 11.5,-8.5 type: Transform - uid: 66 - type: MVWire + type: CableMV components: - parent: 0 pos: 7.5,-12.5 type: Transform - uid: 67 - type: MVWire + type: CableMV components: - parent: 0 pos: 7.5,-13.5 type: Transform - uid: 68 - type: MVWire + type: CableMV components: - parent: 0 pos: 7.5,-14.5 type: Transform - uid: 69 - type: MVWire + type: CableMV components: - parent: 0 pos: 3.5,-12.5 type: Transform - uid: 70 - type: MVWire + type: CableMV components: - parent: 0 pos: 3.5,-13.5 type: Transform - uid: 71 - type: MVWire + type: CableMV components: - parent: 0 pos: 3.5,-14.5 type: Transform - uid: 72 - type: MVWire + type: CableMV components: - parent: 0 pos: -0.5,-12.5 type: Transform - uid: 73 - type: MVWire + type: CableMV components: - parent: 0 pos: -0.5,-13.5 type: Transform - uid: 74 - type: MVWire + type: CableMV components: - parent: 0 pos: -0.5,-14.5 type: Transform - uid: 75 - type: MVWire + type: CableMV components: - parent: 0 pos: 0.5,-14.5 type: Transform - uid: 76 - type: MVWire + type: CableMV components: - parent: 0 pos: 1.5,-14.5 type: Transform - uid: 77 - type: MVWire + type: CableMV components: - parent: 0 pos: 2.5,-14.5 type: Transform - uid: 78 - type: MVWire + type: CableMV components: - parent: 0 pos: 4.5,-14.5 type: Transform - uid: 79 - type: MVWire + type: CableMV components: - parent: 0 pos: 5.5,-14.5 type: Transform - uid: 80 - type: MVWire + type: CableMV components: - parent: 0 pos: 6.5,-14.5 @@ -942,265 +942,265 @@ entities: pos: 3.5,-4.5 type: Transform - uid: 82 - type: MVWire + type: CableMV components: - parent: 0 pos: -6.5,0.5 type: Transform - uid: 83 - type: MVWire + type: CableMV components: - parent: 0 pos: -6.5,1.5 type: Transform - uid: 84 - type: MVWire + type: CableMV components: - parent: 0 pos: -6.5,2.5 type: Transform - uid: 85 - type: MVWire + type: CableMV components: - parent: 0 pos: -6.5,3.5 type: Transform - uid: 86 - type: MVWire + type: CableMV components: - parent: 0 pos: -6.5,4.5 type: Transform - uid: 87 - type: MVWire + type: CableMV components: - parent: 0 pos: -6.5,5.5 type: Transform - uid: 88 - type: MVWire + type: CableMV components: - parent: 0 pos: -5.5,5.5 type: Transform - uid: 89 - type: MVWire + type: CableMV components: - parent: 0 pos: -4.5,5.5 type: Transform - uid: 90 - type: MVWire + type: CableMV components: - parent: 0 pos: -3.5,5.5 type: Transform - uid: 91 - type: MVWire + type: CableMV components: - parent: 0 pos: -2.5,5.5 type: Transform - uid: 92 - type: MVWire + type: CableMV components: - parent: 0 pos: -1.5,5.5 type: Transform - uid: 93 - type: MVWire + type: CableMV components: - parent: 0 pos: -6.5,-9.5 type: Transform - uid: 94 - type: MVWire + type: CableMV components: - parent: 0 pos: -6.5,-10.5 type: Transform - uid: 95 - type: MVWire + type: CableMV components: - parent: 0 pos: -6.5,-11.5 type: Transform - uid: 96 - type: MVWire + type: CableMV components: - parent: 0 pos: -6.5,-12.5 type: Transform - uid: 97 - type: MVWire + type: CableMV components: - parent: 0 pos: -6.5,-13.5 type: Transform - uid: 98 - type: MVWire + type: CableMV components: - parent: 0 pos: -6.5,-14.5 type: Transform - uid: 99 - type: MVWire + type: CableMV components: - parent: 0 pos: -5.5,-14.5 type: Transform - uid: 100 - type: MVWire + type: CableMV components: - parent: 0 pos: -4.5,-14.5 type: Transform - uid: 101 - type: MVWire + type: CableMV components: - parent: 0 pos: -3.5,-14.5 type: Transform - uid: 102 - type: MVWire + type: CableMV components: - parent: 0 pos: -2.5,-14.5 type: Transform - uid: 103 - type: MVWire + type: CableMV components: - parent: 0 pos: -1.5,-14.5 type: Transform - uid: 104 - type: MVWire + type: CableMV components: - parent: 0 pos: 8.5,-14.5 type: Transform - uid: 105 - type: MVWire + type: CableMV components: - parent: 0 pos: 9.5,-14.5 type: Transform - uid: 106 - type: MVWire + type: CableMV components: - parent: 0 pos: 10.5,-14.5 type: Transform - uid: 107 - type: MVWire + type: CableMV components: - parent: 0 pos: 11.5,-14.5 type: Transform - uid: 108 - type: MVWire + type: CableMV components: - parent: 0 pos: 12.5,-14.5 type: Transform - uid: 109 - type: MVWire + type: CableMV components: - parent: 0 pos: 13.5,-14.5 type: Transform - uid: 110 - type: MVWire + type: CableMV components: - parent: 0 pos: 13.5,-13.5 type: Transform - uid: 111 - type: MVWire + type: CableMV components: - parent: 0 pos: 13.5,-12.5 type: Transform - uid: 112 - type: MVWire + type: CableMV components: - parent: 0 pos: 13.5,-11.5 type: Transform - uid: 113 - type: MVWire + type: CableMV components: - parent: 0 pos: 13.5,-10.5 type: Transform - uid: 114 - type: MVWire + type: CableMV components: - parent: 0 pos: 13.5,-9.5 type: Transform - uid: 115 - type: MVWire + type: CableMV components: - parent: 0 pos: 13.5,0.5 type: Transform - uid: 116 - type: MVWire + type: CableMV components: - parent: 0 pos: 13.5,1.5 type: Transform - uid: 117 - type: MVWire + type: CableMV components: - parent: 0 pos: 13.5,2.5 type: Transform - uid: 118 - type: MVWire + type: CableMV components: - parent: 0 pos: 13.5,3.5 type: Transform - uid: 119 - type: MVWire + type: CableMV components: - parent: 0 pos: 13.5,4.5 type: Transform - uid: 120 - type: MVWire + type: CableMV components: - parent: 0 pos: 13.5,5.5 type: Transform - uid: 121 - type: MVWire + type: CableMV components: - parent: 0 pos: 12.5,5.5 type: Transform - uid: 122 - type: MVWire + type: CableMV components: - parent: 0 pos: 11.5,5.5 type: Transform - uid: 123 - type: MVWire + type: CableMV components: - parent: 0 pos: 10.5,5.5 type: Transform - uid: 124 - type: MVWire + type: CableMV components: - parent: 0 pos: 9.5,5.5 type: Transform - uid: 125 - type: MVWire + type: CableMV components: - parent: 0 pos: 8.5,5.5 @@ -1248,7 +1248,7 @@ entities: rot: -1.5707963267948966 rad type: Transform - powerLoad: 250 - type: PowerReceiver + type: ApcPowerReceiver - uid: 132 type: ParticleAcceleratorEndCap components: @@ -1257,105 +1257,105 @@ entities: rot: -1.5707963267948966 rad type: Transform - uid: 133 - type: HVWire + type: CableHV components: - parent: 0 pos: 2.5,12.5 rot: -1.5707963267948966 rad type: Transform - uid: 134 - type: HVWire + type: CableHV components: - parent: 0 pos: 3.5,12.5 rot: -1.5707963267948966 rad type: Transform - uid: 135 - type: HVWire + type: CableHV components: - parent: 0 pos: 4.5,12.5 rot: -1.5707963267948966 rad type: Transform - uid: 136 - type: HVWire + type: CableHV components: - parent: 0 pos: 3.5,13.5 rot: -1.5707963267948966 rad type: Transform - uid: 137 - type: HVWire + type: CableHV components: - parent: 0 pos: 3.5,14.5 rot: -1.5707963267948966 rad type: Transform - uid: 138 - type: HVWire + type: CableHV components: - parent: 0 pos: 2.5,14.5 rot: -1.5707963267948966 rad type: Transform - uid: 139 - type: HVWire + type: CableHV components: - parent: 0 pos: 3.5,15.5 rot: -1.5707963267948966 rad type: Transform - uid: 140 - type: HVWire + type: CableHV components: - parent: 0 pos: 4.5,14.5 rot: -1.5707963267948966 rad type: Transform - uid: 141 - type: HVWire + type: CableHV components: - parent: 0 pos: 3.5,16.5 rot: -1.5707963267948966 rad type: Transform - uid: 142 - type: HVWire + type: CableHV components: - parent: 0 pos: 0.5,16.5 rot: -1.5707963267948966 rad type: Transform - uid: 143 - type: HVWire + type: CableHV components: - parent: 0 pos: 1.5,16.5 rot: -1.5707963267948966 rad type: Transform - uid: 144 - type: HVWire + type: CableHV components: - parent: 0 pos: 2.5,16.5 rot: -1.5707963267948966 rad type: Transform - uid: 145 - type: HVWire + type: CableHV components: - parent: 0 pos: 4.5,16.5 rot: -1.5707963267948966 rad type: Transform - uid: 146 - type: HVWire + type: CableHV components: - parent: 0 pos: 5.5,16.5 rot: -1.5707963267948966 rad type: Transform - uid: 147 - type: HVWire + type: CableHV components: - parent: 0 pos: 6.5,16.5 @@ -1376,35 +1376,35 @@ entities: rot: -1.5707963267948966 rad type: Transform - uid: 150 - type: ApcExtensionCable + type: CableApcExtension components: - parent: 0 pos: 3.5,16.5 rot: -1.5707963267948966 rad type: Transform - uid: 151 - type: ApcExtensionCable + type: CableApcExtension components: - parent: 0 pos: 3.5,17.5 rot: -1.5707963267948966 rad type: Transform - uid: 152 - type: ApcExtensionCable + type: CableApcExtension components: - parent: 0 pos: 2.5,16.5 rot: -1.5707963267948966 rad type: Transform - uid: 153 - type: ApcExtensionCable + type: CableApcExtension components: - parent: 0 pos: 2.5,15.5 rot: -1.5707963267948966 rad type: Transform - uid: 154 - type: ApcExtensionCable + type: CableApcExtension components: - parent: 0 pos: 2.5,14.5 @@ -1439,70 +1439,70 @@ entities: rot: -1.5707963267948966 rad type: Transform - uid: 159 - type: HVWire + type: CableHV components: - parent: 0 pos: 0.5,13.5 rot: -1.5707963267948966 rad type: Transform - uid: 160 - type: HVWire + type: CableHV components: - parent: 0 pos: 0.5,12.5 rot: -1.5707963267948966 rad type: Transform - uid: 161 - type: HVWire + type: CableHV components: - parent: 0 pos: 6.5,13.5 rot: -1.5707963267948966 rad type: Transform - uid: 162 - type: HVWire + type: CableHV components: - parent: 0 pos: 6.5,12.5 rot: -1.5707963267948966 rad type: Transform - uid: 163 - type: HVWire + type: CableHV components: - parent: 0 pos: 6.5,11.5 rot: -1.5707963267948966 rad type: Transform - uid: 164 - type: HVWire + type: CableHV components: - parent: 0 pos: 0.5,11.5 rot: -1.5707963267948966 rad type: Transform - uid: 165 - type: HVWire + type: CableHV components: - parent: 0 pos: 0.5,10.5 rot: -1.5707963267948966 rad type: Transform - uid: 166 - type: HVWire + type: CableHV components: - parent: 0 pos: 1.5,10.5 rot: -1.5707963267948966 rad type: Transform - uid: 167 - type: HVWire + type: CableHV components: - parent: 0 pos: 6.5,10.5 rot: -1.5707963267948966 rad type: Transform - uid: 168 - type: HVWire + type: CableHV components: - parent: 0 pos: 5.5,10.5 @@ -1579,77 +1579,77 @@ entities: rot: -1.5707963267948966 rad type: Transform - uid: 179 - type: MVWire + type: CableMV components: - parent: 0 pos: 3.5,6.5 rot: -1.5707963267948966 rad type: Transform - uid: 180 - type: MVWire + type: CableMV components: - parent: 0 pos: 3.5,7.5 rot: -1.5707963267948966 rad type: Transform - uid: 181 - type: MVWire + type: CableMV components: - parent: 0 pos: 3.5,8.5 rot: -1.5707963267948966 rad type: Transform - uid: 182 - type: MVWire + type: CableMV components: - parent: 0 pos: 3.5,9.5 rot: -1.5707963267948966 rad type: Transform - uid: 183 - type: MVWire + type: CableMV components: - parent: 0 pos: 3.5,10.5 rot: -1.5707963267948966 rad type: Transform - uid: 184 - type: MVWire + type: CableMV components: - parent: 0 pos: 2.5,10.5 rot: -1.5707963267948966 rad type: Transform - uid: 185 - type: MVWire + type: CableMV components: - parent: 0 pos: 4.5,10.5 rot: -1.5707963267948966 rad type: Transform - uid: 186 - type: MVWire + type: CableMV components: - parent: 0 pos: 5.5,10.5 rot: -1.5707963267948966 rad type: Transform - uid: 187 - type: MVWire + type: CableMV components: - parent: 0 pos: 6.5,10.5 rot: -1.5707963267948966 rad type: Transform - uid: 188 - type: MVWire + type: CableMV components: - parent: 0 pos: 1.5,10.5 rot: -1.5707963267948966 rad type: Transform - uid: 189 - type: MVWire + type: CableMV components: - parent: 0 pos: 0.5,10.5 @@ -1992,7 +1992,7 @@ entities: rot: -1.5707963267948966 rad type: Transform - powerLoad: 0 - type: PowerReceiver + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -2004,26 +2004,26 @@ entities: rot: -1.5707963267948966 rad type: Transform - powerLoad: 0 - type: PowerReceiver + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer - uid: 239 - type: ApcExtensionCable + type: CableApcExtension components: - parent: 0 pos: 4.5,16.5 rot: -1.5707963267948966 rad type: Transform - uid: 240 - type: ApcExtensionCable + type: CableApcExtension components: - parent: 0 pos: 5.5,16.5 rot: -1.5707963267948966 rad type: Transform - uid: 241 - type: ApcExtensionCable + type: CableApcExtension components: - parent: 0 pos: 1.5,16.5 diff --git a/Resources/Maps/saltern.yml b/Resources/Maps/saltern.yml index 58f9423ef6..cea7e3fb9d 100644 --- a/Resources/Maps/saltern.yml +++ b/Resources/Maps/saltern.yml @@ -1155,7 +1155,7 @@ entities: parent: 853 type: Transform - powerLoad: 0 - type: PowerReceiver + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -1248,7 +1248,7 @@ entities: CloningPod-bodyContainer: !type:ContainerSlot {} type: ContainerContainer - uid: 152 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 58.5,-31.5 @@ -1257,7 +1257,7 @@ entities: - canCollide: False type: Physics - uid: 153 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 58.5,-29.5 @@ -1316,7 +1316,7 @@ entities: - canCollide: False type: Physics - uid: 161 - type: ApcExtensionCable + type: CableApcExtension components: - rot: -1.5707963267948966 rad pos: 16.5,-1.5 @@ -1355,7 +1355,7 @@ entities: ents: [] type: ContainerContainer - uid: 165 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 3.141592653589793 rad pos: 13.5,1.5 @@ -2676,7 +2676,7 @@ entities: ents: [] type: ContainerContainer - uid: 287 - type: HVWire + type: CableHV components: - rot: 3.141592653589793 rad pos: 3.5,-20.5 @@ -4650,7 +4650,7 @@ entities: parent: 853 type: Transform - powerLoad: 0 - type: PowerReceiver + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -4749,7 +4749,7 @@ entities: parent: 853 type: Transform - powerLoad: 0 - type: PowerReceiver + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -5095,7 +5095,7 @@ entities: - color: '#FFFFFFFF' type: PointLight - powerLoad: 0 - type: PowerReceiver + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -5619,7 +5619,7 @@ entities: ents: [] type: ContainerContainer - uid: 608 - type: ApcExtensionCable + type: CableApcExtension components: - pos: -4.5,4.5 parent: 853 @@ -5971,7 +5971,7 @@ entities: ents: [] type: ContainerContainer - uid: 638 - type: HVWire + type: CableHV components: - rot: 3.141592653589793 rad pos: 3.5,-23.5 @@ -6536,7 +6536,7 @@ entities: ents: [] type: ContainerContainer - uid: 701 - type: HVWire + type: CableHV components: - rot: 3.141592653589793 rad pos: 3.5,-22.5 @@ -6554,7 +6554,7 @@ entities: parent: 853 type: Transform - uid: 703 - type: HVWire + type: CableHV components: - rot: 3.141592653589793 rad pos: 3.5,-21.5 @@ -6950,7 +6950,7 @@ entities: parent: 853 type: Transform - uid: 757 - type: HVWire + type: CableHV components: - pos: 14.5,11.5 parent: 853 @@ -12249,7 +12249,7 @@ entities: parent: 853 type: Transform - uid: 879 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 43.5,1.5 @@ -12346,7 +12346,7 @@ entities: - color: '#FFFFFFFF' type: PointLight - powerLoad: 0 - type: PowerReceiver + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -12369,7 +12369,7 @@ entities: - color: '#FFFFFFFF' type: PointLight - powerLoad: 0 - type: PowerReceiver + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -13083,7 +13083,7 @@ entities: parent: 853 type: Transform - uid: 994 - type: ApcExtensionCable + type: CableApcExtension components: - pos: 1.5,1.5 parent: 853 @@ -13107,7 +13107,7 @@ entities: - bodyType: Dynamic type: Physics - uid: 997 - type: ApcExtensionCable + type: CableApcExtension components: - pos: 0.5,2.5 parent: 853 @@ -13115,7 +13115,7 @@ entities: - canCollide: False type: Physics - uid: 998 - type: ApcExtensionCable + type: CableApcExtension components: - pos: 1.5,2.5 parent: 853 @@ -13130,7 +13130,7 @@ entities: parent: 853 type: Transform - uid: 1000 - type: ApcExtensionCable + type: CableApcExtension components: - pos: 3.5,30.5 parent: 853 @@ -13140,7 +13140,7 @@ entities: - canCollide: False type: Physics - uid: 1001 - type: ApcExtensionCable + type: CableApcExtension components: - pos: 3.5,28.5 parent: 853 @@ -13150,7 +13150,7 @@ entities: - canCollide: False type: Physics - uid: 1002 - type: ApcExtensionCable + type: CableApcExtension components: - pos: 26.5,4.5 parent: 853 @@ -13160,7 +13160,7 @@ entities: - canCollide: False type: Physics - uid: 1003 - type: ApcExtensionCable + type: CableApcExtension components: - pos: 25.5,4.5 parent: 853 @@ -13184,7 +13184,7 @@ entities: parent: 853 type: Transform - uid: 1006 - type: ApcExtensionCable + type: CableApcExtension components: - pos: 27.5,4.5 parent: 853 @@ -13194,7 +13194,7 @@ entities: - canCollide: False type: Physics - uid: 1007 - type: ApcExtensionCable + type: CableApcExtension components: - pos: 27.5,6.5 parent: 853 @@ -13204,7 +13204,7 @@ entities: - canCollide: False type: Physics - uid: 1008 - type: ApcExtensionCable + type: CableApcExtension components: - pos: 27.5,5.5 parent: 853 @@ -13214,7 +13214,7 @@ entities: - canCollide: False type: Physics - uid: 1009 - type: ApcExtensionCable + type: CableApcExtension components: - pos: 3.5,29.5 parent: 853 @@ -13224,7 +13224,7 @@ entities: - canCollide: False type: Physics - uid: 1010 - type: ApcExtensionCable + type: CableApcExtension components: - pos: 16.5,-2.5 parent: 853 @@ -13241,7 +13241,7 @@ entities: parent: 853 type: Transform - uid: 1012 - type: ApcExtensionCable + type: CableApcExtension components: - pos: 22.5,-18.5 parent: 853 @@ -13299,7 +13299,7 @@ entities: parent: 853 type: Transform - uid: 1019 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -6.5,-26.5 @@ -13594,7 +13594,7 @@ entities: - color: '#FFFFFFFF' type: PointLight - powerLoad: 0 - type: PowerReceiver + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -13675,7 +13675,7 @@ entities: - color: '#FFFFFFFF' type: PointLight - powerLoad: 0 - type: PowerReceiver + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -13699,7 +13699,7 @@ entities: - color: '#FFFFFFFF' type: PointLight - powerLoad: 0 - type: PowerReceiver + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -13723,7 +13723,7 @@ entities: - color: '#FFFFFFFF' type: PointLight - powerLoad: 0 - type: PowerReceiver + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -13757,7 +13757,7 @@ entities: - color: '#FFFFFFFF' type: PointLight - powerLoad: 0 - type: PowerReceiver + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -14071,7 +14071,7 @@ entities: parent: 853 type: Transform - uid: 1117 - type: HVWire + type: CableHV components: - pos: -6.5,-26.5 parent: 853 @@ -14079,7 +14079,7 @@ entities: - canCollide: False type: Physics - uid: 1118 - type: HVWire + type: CableHV components: - pos: -4.5,-26.5 parent: 853 @@ -14124,7 +14124,7 @@ entities: - color: '#FFFFFFFF' type: PointLight - powerLoad: 0 - type: PowerReceiver + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -14660,7 +14660,7 @@ entities: parent: 853 type: Transform - powerLoad: 1 - type: PowerReceiver + type: ApcPowerReceiver - startingCharge: 30000 type: Battery - uid: 1191 @@ -14727,7 +14727,7 @@ entities: - color: '#FFFFFFFF' type: PointLight - powerLoad: 0 - type: PowerReceiver + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -14755,7 +14755,7 @@ entities: - color: '#FFFFFFFF' type: PointLight - powerLoad: 0 - type: PowerReceiver + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -14769,7 +14769,7 @@ entities: - color: '#FFFFFFFF' type: PointLight - powerLoad: 0 - type: PowerReceiver + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -14841,7 +14841,7 @@ entities: - color: '#FFFFFFFF' type: PointLight - powerLoad: 0 - type: PowerReceiver + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -14885,7 +14885,7 @@ entities: - color: '#FFFFFFFF' type: PointLight - powerLoad: 0 - type: PowerReceiver + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -14899,7 +14899,7 @@ entities: - color: '#FFFFFFFF' type: PointLight - powerLoad: 0 - type: PowerReceiver + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -15006,7 +15006,7 @@ entities: - color: '#FFFFFFFF' type: PointLight - powerLoad: 0 - type: PowerReceiver + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -15034,7 +15034,7 @@ entities: - color: '#FFFFFFFF' type: PointLight - powerLoad: 0 - type: PowerReceiver + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -15048,7 +15048,7 @@ entities: - color: '#FFFFFFFF' type: PointLight - powerLoad: 0 - type: PowerReceiver + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -15062,7 +15062,7 @@ entities: - color: '#FFFFFFFF' type: PointLight - powerLoad: 0 - type: PowerReceiver + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -15126,8 +15126,7 @@ entities: type: Transform - startingCharge: 11999.417 type: Battery - - drawRate: 2000 - type: PowerConsumer + - uid: 1240 type: Poweredlight components: @@ -15174,7 +15173,7 @@ entities: parent: 853 type: Transform - uid: 1246 - type: ApcExtensionCable + type: CableApcExtension components: - pos: -2.5,-15.5 parent: 853 @@ -15184,7 +15183,7 @@ entities: - canCollide: False type: Physics - uid: 1247 - type: ApcExtensionCable + type: CableApcExtension components: - pos: 6.5,-0.5 parent: 853 @@ -15201,7 +15200,7 @@ entities: parent: 853 type: Transform - uid: 1249 - type: ApcExtensionCable + type: CableApcExtension components: - pos: 6.5,0.5 parent: 853 @@ -15234,7 +15233,7 @@ entities: - color: '#FFFFFFFF' type: PointLight - powerLoad: 0 - type: PowerReceiver + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -15248,7 +15247,7 @@ entities: - color: '#FFFFFFFF' type: PointLight - powerLoad: 0 - type: PowerReceiver + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -15262,7 +15261,7 @@ entities: - color: '#FFFFFFFF' type: PointLight - powerLoad: 0 - type: PowerReceiver + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -15276,7 +15275,7 @@ entities: - color: '#FFFFFFFF' type: PointLight - powerLoad: 0 - type: PowerReceiver + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -15290,7 +15289,7 @@ entities: - color: '#FFFFFFFF' type: PointLight - powerLoad: 0 - type: PowerReceiver + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -15310,7 +15309,7 @@ entities: - color: '#FFFFFFFF' type: PointLight - powerLoad: 0 - type: PowerReceiver + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -15343,7 +15342,7 @@ entities: - color: '#FFFFFFFF' type: PointLight - powerLoad: 0 - type: PowerReceiver + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -15395,7 +15394,7 @@ entities: - color: '#FFFFFFFF' type: PointLight - powerLoad: 0 - type: PowerReceiver + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -15454,7 +15453,7 @@ entities: - color: '#FFFFFFFF' type: PointLight - powerLoad: 0 - type: PowerReceiver + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -15468,7 +15467,7 @@ entities: - color: '#FFFFFFFF' type: PointLight - powerLoad: 0 - type: PowerReceiver + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -15482,7 +15481,7 @@ entities: - color: '#FFFFFFFF' type: PointLight - powerLoad: 0 - type: PowerReceiver + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -15496,7 +15495,7 @@ entities: - color: '#FFFFFFFF' type: PointLight - powerLoad: 0 - type: PowerReceiver + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -15510,7 +15509,7 @@ entities: - color: '#FFFFFFFF' type: PointLight - powerLoad: 0 - type: PowerReceiver + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -15522,7 +15521,7 @@ entities: parent: 853 type: Transform - powerLoad: 0 - type: PowerReceiver + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -15536,7 +15535,7 @@ entities: - color: '#FFFFFFFF' type: PointLight - powerLoad: 0 - type: PowerReceiver + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -15598,7 +15597,7 @@ entities: - color: '#FFFFFFFF' type: PointLight - powerLoad: 0 - type: PowerReceiver + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -15623,7 +15622,7 @@ entities: - color: '#FFFFFFFF' type: PointLight - powerLoad: 0 - type: PowerReceiver + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -15666,7 +15665,7 @@ entities: - color: '#FFFFFFFF' type: PointLight - powerLoad: 0 - type: PowerReceiver + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -15680,7 +15679,7 @@ entities: - color: '#FFFFFFFF' type: PointLight - powerLoad: 0 - type: PowerReceiver + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -15694,7 +15693,7 @@ entities: - color: '#FFFFFFFF' type: PointLight - powerLoad: 0 - type: PowerReceiver + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -15727,7 +15726,7 @@ entities: - color: '#FFFFFFFF' type: PointLight - powerLoad: 0 - type: PowerReceiver + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -15741,7 +15740,7 @@ entities: - color: '#FFFFFFFF' type: PointLight - powerLoad: 0 - type: PowerReceiver + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -15755,7 +15754,7 @@ entities: - color: '#FFFFFFFF' type: PointLight - powerLoad: 0 - type: PowerReceiver + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -15820,7 +15819,7 @@ entities: - color: '#FFFFFFFF' type: PointLight - powerLoad: 0 - type: PowerReceiver + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -15834,7 +15833,7 @@ entities: - color: '#FFFFFFFF' type: PointLight - powerLoad: 0 - type: PowerReceiver + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -15848,7 +15847,7 @@ entities: - color: '#FFFFFFFF' type: PointLight - powerLoad: 0 - type: PowerReceiver + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -15881,7 +15880,7 @@ entities: - color: '#FFFFFFFF' type: PointLight - powerLoad: 0 - type: PowerReceiver + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -15895,7 +15894,7 @@ entities: - color: '#FFFFFFFF' type: PointLight - powerLoad: 0 - type: PowerReceiver + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -15909,7 +15908,7 @@ entities: - color: '#FFFFFFFF' type: PointLight - powerLoad: 0 - type: PowerReceiver + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -15933,7 +15932,7 @@ entities: - color: '#FFFFFFFF' type: PointLight - powerLoad: 0 - type: PowerReceiver + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -15989,7 +15988,7 @@ entities: - color: '#FFFFFFFF' type: PointLight - powerLoad: 0 - type: PowerReceiver + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -16003,7 +16002,7 @@ entities: - color: '#FFFFFFFF' type: PointLight - powerLoad: 0 - type: PowerReceiver + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -16093,7 +16092,7 @@ entities: - color: '#FFFFFFFF' type: PointLight - powerLoad: 0 - type: PowerReceiver + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -16107,7 +16106,7 @@ entities: - color: '#FFFFFFFF' type: PointLight - powerLoad: 0 - type: PowerReceiver + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -16181,7 +16180,7 @@ entities: parent: 853 type: Transform - powerLoad: 0 - type: PowerReceiver + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -16231,7 +16230,7 @@ entities: - color: '#FFFFFFFF' type: PointLight - powerLoad: 0 - type: PowerReceiver + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -16250,7 +16249,7 @@ entities: parent: 853 type: Transform - uid: 1351 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -32.5,1.5 @@ -16275,7 +16274,7 @@ entities: - color: '#FFFFFFFF' type: PointLight - powerLoad: 0 - type: PowerReceiver + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -16296,7 +16295,7 @@ entities: - color: '#FFFFFFFF' type: PointLight - powerLoad: 0 - type: PowerReceiver + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -16310,7 +16309,7 @@ entities: - color: '#FFFFFFFF' type: PointLight - powerLoad: 0 - type: PowerReceiver + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -16359,7 +16358,7 @@ entities: - color: '#FFFFFFFF' type: PointLight - powerLoad: 0 - type: PowerReceiver + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -16380,7 +16379,7 @@ entities: - color: '#FFFFFFFF' type: PointLight - powerLoad: 0 - type: PowerReceiver + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -16394,7 +16393,7 @@ entities: - color: '#FFFFFFFF' type: PointLight - powerLoad: 0 - type: PowerReceiver + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -16427,7 +16426,7 @@ entities: - color: '#FFFFFFFF' type: PointLight - powerLoad: 0 - type: PowerReceiver + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -16486,7 +16485,7 @@ entities: - color: '#FFFFFFFF' type: PointLight - powerLoad: 0 - type: PowerReceiver + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -16500,7 +16499,7 @@ entities: - color: '#FFFFFFFF' type: PointLight - powerLoad: 0 - type: PowerReceiver + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -16514,7 +16513,7 @@ entities: - color: '#FFFFFFFF' type: PointLight - powerLoad: 0 - type: PowerReceiver + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -16571,7 +16570,7 @@ entities: - color: '#FFFFFFFF' type: PointLight - powerLoad: 0 - type: PowerReceiver + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -16585,12 +16584,12 @@ entities: - color: '#FFFFFFFF' type: PointLight - powerLoad: 0 - type: PowerReceiver + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer - uid: 1384 - type: ApcExtensionCable + type: CableApcExtension components: - pos: -4.5,5.5 parent: 853 @@ -16616,7 +16615,7 @@ entities: - color: '#FFFFFFFF' type: PointLight - powerLoad: 0 - type: PowerReceiver + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -16630,7 +16629,7 @@ entities: - color: '#FFFFFFFF' type: PointLight - powerLoad: 0 - type: PowerReceiver + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -17290,7 +17289,7 @@ entities: parent: 853 type: Transform - uid: 1482 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -7.5,-25.5 @@ -17301,7 +17300,7 @@ entities: - canCollide: False type: Physics - uid: 1483 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -7.5,-26.5 @@ -17702,7 +17701,7 @@ entities: parent: 853 type: Transform - uid: 1539 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 58.5,-28.5 @@ -17760,7 +17759,7 @@ entities: ents: [] type: ContainerContainer - uid: 1546 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 58.5,-32.5 @@ -17769,7 +17768,7 @@ entities: - canCollide: False type: Physics - uid: 1547 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 57.5,-33.5 @@ -18310,7 +18309,7 @@ entities: - color: '#FFFFFFFF' type: PointLight - powerLoad: 0 - type: PowerReceiver + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -18324,7 +18323,7 @@ entities: - color: '#FFFFFFFF' type: PointLight - powerLoad: 0 - type: PowerReceiver + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -19173,7 +19172,7 @@ entities: parent: 853 type: Transform - uid: 1753 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 54.5,-33.5 @@ -19209,7 +19208,7 @@ entities: parent: 853 type: Transform - uid: 1758 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 58.5,-30.5 @@ -19365,7 +19364,7 @@ entities: parent: 853 type: Transform - uid: 1780 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 56.5,-33.5 @@ -19374,7 +19373,7 @@ entities: - canCollide: False type: Physics - uid: 1781 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 58.5,-33.5 @@ -19397,7 +19396,7 @@ entities: parent: 853 type: Transform - uid: 1784 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 52.5,-33.5 @@ -19678,7 +19677,7 @@ entities: parent: 853 type: Transform - uid: 1825 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 53.5,-33.5 @@ -19687,7 +19686,7 @@ entities: - canCollide: False type: Physics - uid: 1826 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 55.5,-33.5 @@ -19788,7 +19787,7 @@ entities: - color: '#FFFFFFFF' type: PointLight - powerLoad: 0 - type: PowerReceiver + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -21511,7 +21510,7 @@ entities: parent: 853 type: Transform - uid: 2085 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -7.5,-24.5 @@ -21534,7 +21533,7 @@ entities: parent: 853 type: Transform - uid: 2088 - type: ApcExtensionCable + type: CableApcExtension components: - pos: 1.5,6.5 parent: 853 @@ -23809,7 +23808,7 @@ entities: parent: 853 type: Transform - uid: 2410 - type: ApcExtensionCable + type: CableApcExtension components: - pos: -1.5,6.5 parent: 853 @@ -23855,7 +23854,7 @@ entities: ents: [] type: ContainerContainer - uid: 2415 - type: ApcExtensionCable + type: CableApcExtension components: - pos: -3.5,6.5 parent: 853 @@ -23863,7 +23862,7 @@ entities: - canCollide: False type: Physics - uid: 2416 - type: ApcExtensionCable + type: CableApcExtension components: - pos: -2.5,6.5 parent: 853 @@ -23885,7 +23884,7 @@ entities: parent: 853 type: Transform - uid: 2419 - type: ApcExtensionCable + type: CableApcExtension components: - pos: -4.5,6.5 parent: 853 @@ -23914,7 +23913,7 @@ entities: parent: 853 type: Transform - uid: 2423 - type: ApcExtensionCable + type: CableApcExtension components: - pos: -13.5,-9.5 parent: 853 @@ -24509,8 +24508,7 @@ entities: type: Transform - startingCharge: 11999.634 type: Battery - - drawRate: 2000 - type: PowerConsumer + - uid: 2505 type: SalternApc components: @@ -24520,8 +24518,7 @@ entities: type: Transform - startingCharge: 11999.3 type: Battery - - drawRate: 2000 - type: PowerConsumer + - uid: 2506 type: SalternApc components: @@ -24531,8 +24528,7 @@ entities: type: Transform - startingCharge: 11999.066 type: Battery - - drawRate: 2000 - type: PowerConsumer + - uid: 2507 type: SalternApc components: @@ -24542,8 +24538,7 @@ entities: type: Transform - startingCharge: 11999.733 type: Battery - - drawRate: 2000 - type: PowerConsumer + - uid: 2508 type: SalternApc components: @@ -24553,8 +24548,7 @@ entities: type: Transform - startingCharge: 11999.483 type: Battery - - drawRate: 2000 - type: PowerConsumer + - uid: 2509 type: SalternApc components: @@ -24564,8 +24558,7 @@ entities: type: Transform - startingCharge: 11991.15 type: Battery - - drawRate: 2000 - type: PowerConsumer + - uid: 2510 type: SalternApc components: @@ -24575,8 +24568,7 @@ entities: type: Transform - startingCharge: 11999.15 type: Battery - - drawRate: 2000 - type: PowerConsumer + - uid: 2511 type: SalternApc components: @@ -24586,8 +24578,7 @@ entities: type: Transform - startingCharge: 11999.384 type: Battery - - drawRate: 2000 - type: PowerConsumer + - uid: 2512 type: SalternApc components: @@ -24597,8 +24588,7 @@ entities: type: Transform - startingCharge: 11999.116 type: Battery - - drawRate: 2000 - type: PowerConsumer + - uid: 2513 type: SalternApc components: @@ -24608,8 +24598,7 @@ entities: type: Transform - startingCharge: 11999.2 type: Battery - - drawRate: 2000 - type: PowerConsumer + - uid: 2514 type: SalternApc components: @@ -24619,8 +24608,7 @@ entities: type: Transform - startingCharge: 11999.066 type: Battery - - drawRate: 2000 - type: PowerConsumer + - uid: 2515 type: SalternApc components: @@ -24630,8 +24618,7 @@ entities: type: Transform - startingCharge: 11999.467 type: Battery - - drawRate: 2000 - type: PowerConsumer + - uid: 2516 type: CrateServiceReplacementLights components: @@ -24653,8 +24640,7 @@ entities: type: Transform - startingCharge: 11999.483 type: Battery - - drawRate: 2000 - type: PowerConsumer + - uid: 2518 type: SalternApc components: @@ -24664,8 +24650,7 @@ entities: type: Transform - startingCharge: 11999.4 type: Battery - - drawRate: 2000 - type: PowerConsumer + - uid: 2519 type: SalternApc components: @@ -24675,8 +24660,7 @@ entities: type: Transform - startingCharge: 11999.4 type: Battery - - drawRate: 2000 - type: PowerConsumer + - uid: 2520 type: SalternApc components: @@ -24686,8 +24670,7 @@ entities: type: Transform - startingCharge: 11998.483 type: Battery - - drawRate: 2000 - type: PowerConsumer + - uid: 2521 type: ShellShotgunSlug components: @@ -24705,10 +24688,9 @@ entities: type: Transform - startingCharge: 11999.75 type: Battery - - drawRate: 2000 - type: PowerConsumer + - uid: 2523 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -14.5,0.5 @@ -24734,8 +24716,7 @@ entities: type: Transform - startingCharge: 11999.083 type: Battery - - drawRate: 2000 - type: PowerConsumer + - uid: 2526 type: SalternApc components: @@ -24745,8 +24726,7 @@ entities: type: Transform - startingCharge: 11996.233 type: Battery - - drawRate: 2000 - type: PowerConsumer + - uid: 2527 type: SalternApc components: @@ -24756,10 +24736,9 @@ entities: type: Transform - startingCharge: 11999.65 type: Battery - - drawRate: 2000 - type: PowerConsumer + - uid: 2528 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -28.5,12.5 @@ -24768,7 +24747,7 @@ entities: - canCollide: False type: Physics - uid: 2529 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -28.5,11.5 @@ -24779,7 +24758,7 @@ entities: - canCollide: False type: Physics - uid: 2530 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -28.5,10.5 @@ -24790,7 +24769,7 @@ entities: - canCollide: False type: Physics - uid: 2531 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -28.5,9.5 @@ -24801,7 +24780,7 @@ entities: - canCollide: False type: Physics - uid: 2532 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -28.5,8.5 @@ -24812,7 +24791,7 @@ entities: - canCollide: False type: Physics - uid: 2533 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -27.5,9.5 @@ -24823,7 +24802,7 @@ entities: - canCollide: False type: Physics - uid: 2534 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -26.5,9.5 @@ -24834,7 +24813,7 @@ entities: - canCollide: False type: Physics - uid: 2535 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -25.5,9.5 @@ -24843,7 +24822,7 @@ entities: - canCollide: False type: Physics - uid: 2536 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -26.5,8.5 @@ -24854,7 +24833,7 @@ entities: - canCollide: False type: Physics - uid: 2537 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -26.5,7.5 @@ -24863,7 +24842,7 @@ entities: - canCollide: False type: Physics - uid: 2538 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -24.5,9.5 @@ -24874,7 +24853,7 @@ entities: - canCollide: False type: Physics - uid: 2539 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -23.5,9.5 @@ -24885,7 +24864,7 @@ entities: - canCollide: False type: Physics - uid: 2540 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -22.5,9.5 @@ -24896,7 +24875,7 @@ entities: - canCollide: False type: Physics - uid: 2541 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -21.5,9.5 @@ -24907,7 +24886,7 @@ entities: - canCollide: False type: Physics - uid: 2542 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -20.5,9.5 @@ -24918,7 +24897,7 @@ entities: - canCollide: False type: Physics - uid: 2543 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -19.5,9.5 @@ -24929,7 +24908,7 @@ entities: - canCollide: False type: Physics - uid: 2544 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -23.5,8.5 @@ -24940,7 +24919,7 @@ entities: - canCollide: False type: Physics - uid: 2545 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -23.5,7.5 @@ -24951,7 +24930,7 @@ entities: - canCollide: False type: Physics - uid: 2546 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -23.5,7.5 @@ -24962,7 +24941,7 @@ entities: - canCollide: False type: Physics - uid: 2547 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -23.5,6.5 @@ -24973,7 +24952,7 @@ entities: - canCollide: False type: Physics - uid: 2548 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -28.5,13.5 @@ -24984,7 +24963,7 @@ entities: - canCollide: False type: Physics - uid: 2549 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -28.5,14.5 @@ -24993,7 +24972,7 @@ entities: - canCollide: False type: Physics - uid: 2550 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -17.5,9.5 @@ -25002,7 +24981,7 @@ entities: - canCollide: False type: Physics - uid: 2551 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -16.5,9.5 @@ -25013,7 +24992,7 @@ entities: - canCollide: False type: Physics - uid: 2552 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -16.5,8.5 @@ -25024,7 +25003,7 @@ entities: - canCollide: False type: Physics - uid: 2553 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -16.5,7.5 @@ -25041,10 +25020,9 @@ entities: type: Transform - startingCharge: 11999.833 type: Battery - - drawRate: 2000 - type: PowerConsumer + - uid: 2555 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -16.5,15.5 @@ -25055,7 +25033,7 @@ entities: - canCollide: False type: Physics - uid: 2556 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -17.5,15.5 @@ -25064,7 +25042,7 @@ entities: - canCollide: False type: Physics - uid: 2557 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -17.5,16.5 @@ -25075,7 +25053,7 @@ entities: - canCollide: False type: Physics - uid: 2558 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -17.5,17.5 @@ -25086,7 +25064,7 @@ entities: - canCollide: False type: Physics - uid: 2559 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -17.5,18.5 @@ -25097,7 +25075,7 @@ entities: - canCollide: False type: Physics - uid: 2560 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -17.5,19.5 @@ -25108,7 +25086,7 @@ entities: - canCollide: False type: Physics - uid: 2561 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -17.5,20.5 @@ -25119,7 +25097,7 @@ entities: - canCollide: False type: Physics - uid: 2562 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -17.5,21.5 @@ -25130,7 +25108,7 @@ entities: - canCollide: False type: Physics - uid: 2563 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -17.5,22.5 @@ -25141,7 +25119,7 @@ entities: - canCollide: False type: Physics - uid: 2564 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -17.5,23.5 @@ -25152,7 +25130,7 @@ entities: - canCollide: False type: Physics - uid: 2565 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -17.5,24.5 @@ -25163,7 +25141,7 @@ entities: - canCollide: False type: Physics - uid: 2566 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -16.5,24.5 @@ -25174,7 +25152,7 @@ entities: - canCollide: False type: Physics - uid: 2567 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -15.5,24.5 @@ -25185,7 +25163,7 @@ entities: - canCollide: False type: Physics - uid: 2568 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -14.5,24.5 @@ -25196,7 +25174,7 @@ entities: - canCollide: False type: Physics - uid: 2569 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -13.5,24.5 @@ -25207,7 +25185,7 @@ entities: - canCollide: False type: Physics - uid: 2570 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -12.5,24.5 @@ -25218,7 +25196,7 @@ entities: - canCollide: False type: Physics - uid: 2571 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -11.5,24.5 @@ -25229,7 +25207,7 @@ entities: - canCollide: False type: Physics - uid: 2572 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -10.5,24.5 @@ -25240,7 +25218,7 @@ entities: - canCollide: False type: Physics - uid: 2573 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -9.5,24.5 @@ -25251,7 +25229,7 @@ entities: - canCollide: False type: Physics - uid: 2574 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -8.5,24.5 @@ -25262,7 +25240,7 @@ entities: - canCollide: False type: Physics - uid: 2575 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -7.5,24.5 @@ -25271,7 +25249,7 @@ entities: - canCollide: False type: Physics - uid: 2576 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -12.5,12.5 @@ -25280,7 +25258,7 @@ entities: - canCollide: False type: Physics - uid: 2577 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -12.5,11.5 @@ -25291,7 +25269,7 @@ entities: - canCollide: False type: Physics - uid: 2578 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -13.5,11.5 @@ -25302,7 +25280,7 @@ entities: - canCollide: False type: Physics - uid: 2579 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -12.5,10.5 @@ -25313,7 +25291,7 @@ entities: - canCollide: False type: Physics - uid: 2580 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -12.5,9.5 @@ -25324,7 +25302,7 @@ entities: - canCollide: False type: Physics - uid: 2581 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -12.5,7.5 @@ -25335,7 +25313,7 @@ entities: - canCollide: False type: Physics - uid: 2582 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -12.5,8.5 @@ -25346,7 +25324,7 @@ entities: - canCollide: False type: Physics - uid: 2583 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -11.5,7.5 @@ -25357,7 +25335,7 @@ entities: - canCollide: False type: Physics - uid: 2584 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -11.5,10.5 @@ -25368,7 +25346,7 @@ entities: - canCollide: False type: Physics - uid: 2585 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -9.5,10.5 @@ -25379,7 +25357,7 @@ entities: - canCollide: False type: Physics - uid: 2586 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -10.5,10.5 @@ -25390,7 +25368,7 @@ entities: - canCollide: False type: Physics - uid: 2587 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -8.5,10.5 @@ -25401,7 +25379,7 @@ entities: - canCollide: False type: Physics - uid: 2588 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -7.5,10.5 @@ -25412,7 +25390,7 @@ entities: - canCollide: False type: Physics - uid: 2589 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -6.5,10.5 @@ -25423,7 +25401,7 @@ entities: - canCollide: False type: Physics - uid: 2590 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -5.5,10.5 @@ -25434,7 +25412,7 @@ entities: - canCollide: False type: Physics - uid: 2591 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -4.5,10.5 @@ -25445,7 +25423,7 @@ entities: - canCollide: False type: Physics - uid: 2592 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -3.5,10.5 @@ -25456,7 +25434,7 @@ entities: - canCollide: False type: Physics - uid: 2593 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -2.5,10.5 @@ -25467,7 +25445,7 @@ entities: - canCollide: False type: Physics - uid: 2594 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -1.5,10.5 @@ -25478,7 +25456,7 @@ entities: - canCollide: False type: Physics - uid: 2595 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -0.5,10.5 @@ -25489,7 +25467,7 @@ entities: - canCollide: False type: Physics - uid: 2596 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 0.5,10.5 @@ -25500,7 +25478,7 @@ entities: - canCollide: False type: Physics - uid: 2597 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -5.5,9.5 @@ -25511,7 +25489,7 @@ entities: - canCollide: False type: Physics - uid: 2598 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -5.5,8.5 @@ -25522,7 +25500,7 @@ entities: - canCollide: False type: Physics - uid: 2599 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -5.5,7.5 @@ -25533,7 +25511,7 @@ entities: - canCollide: False type: Physics - uid: 2600 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 0.5,9.5 @@ -25544,7 +25522,7 @@ entities: - canCollide: False type: Physics - uid: 2601 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 0.5,8.5 @@ -25555,7 +25533,7 @@ entities: - canCollide: False type: Physics - uid: 2602 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 0.5,7.5 @@ -25566,7 +25544,7 @@ entities: - canCollide: False type: Physics - uid: 2603 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 0.5,6.5 @@ -25575,7 +25553,7 @@ entities: - canCollide: False type: Physics - uid: 2604 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 0.5,6.5 @@ -25584,7 +25562,7 @@ entities: - canCollide: False type: Physics - uid: 2605 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -0.5,6.5 @@ -25593,7 +25571,7 @@ entities: - canCollide: False type: Physics - uid: 2606 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -3.5,15.5 @@ -25602,7 +25580,7 @@ entities: - canCollide: False type: Physics - uid: 2607 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -3.5,16.5 @@ -25613,7 +25591,7 @@ entities: - canCollide: False type: Physics - uid: 2608 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -3.5,17.5 @@ -25624,7 +25602,7 @@ entities: - canCollide: False type: Physics - uid: 2609 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -3.5,18.5 @@ -25635,7 +25613,7 @@ entities: - canCollide: False type: Physics - uid: 2610 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -2.5,18.5 @@ -25646,7 +25624,7 @@ entities: - canCollide: False type: Physics - uid: 2611 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -1.5,18.5 @@ -25657,7 +25635,7 @@ entities: - canCollide: False type: Physics - uid: 2612 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -0.5,18.5 @@ -25668,7 +25646,7 @@ entities: - canCollide: False type: Physics - uid: 2613 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -3.5,15.5 @@ -25677,7 +25655,7 @@ entities: - canCollide: False type: Physics - uid: 2614 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -3.5,14.5 @@ -25688,7 +25666,7 @@ entities: - canCollide: False type: Physics - uid: 2615 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -4.5,14.5 @@ -25699,7 +25677,7 @@ entities: - canCollide: False type: Physics - uid: 2616 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -5.5,14.5 @@ -25710,7 +25688,7 @@ entities: - canCollide: False type: Physics - uid: 2617 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -6.5,14.5 @@ -25721,7 +25699,7 @@ entities: - canCollide: False type: Physics - uid: 2618 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -7.5,14.5 @@ -25732,7 +25710,7 @@ entities: - canCollide: False type: Physics - uid: 2619 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -8.5,14.5 @@ -25743,7 +25721,7 @@ entities: - canCollide: False type: Physics - uid: 2620 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -9.5,14.5 @@ -25754,7 +25732,7 @@ entities: - canCollide: False type: Physics - uid: 2621 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -10.5,14.5 @@ -25763,7 +25741,7 @@ entities: - canCollide: False type: Physics - uid: 2622 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -11.5,14.5 @@ -25774,7 +25752,7 @@ entities: - canCollide: False type: Physics - uid: 2623 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -12.5,14.5 @@ -25785,7 +25763,7 @@ entities: - canCollide: False type: Physics - uid: 2624 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -12.5,15.5 @@ -25796,7 +25774,7 @@ entities: - canCollide: False type: Physics - uid: 2625 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -12.5,16.5 @@ -25807,7 +25785,7 @@ entities: - canCollide: False type: Physics - uid: 2626 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -7.5,15.5 @@ -25818,7 +25796,7 @@ entities: - canCollide: False type: Physics - uid: 2627 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -7.5,16.5 @@ -25829,7 +25807,7 @@ entities: - canCollide: False type: Physics - uid: 2628 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -7.5,17.5 @@ -25840,7 +25818,7 @@ entities: - canCollide: False type: Physics - uid: 2629 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -6.5,17.5 @@ -25851,7 +25829,7 @@ entities: - canCollide: False type: Physics - uid: 2630 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -8.5,17.5 @@ -25862,7 +25840,7 @@ entities: - canCollide: False type: Physics - uid: 2631 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -8.5,18.5 @@ -25873,7 +25851,7 @@ entities: - canCollide: False type: Physics - uid: 2632 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -8.5,19.5 @@ -25884,7 +25862,7 @@ entities: - canCollide: False type: Physics - uid: 2633 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -8.5,20.5 @@ -25895,7 +25873,7 @@ entities: - canCollide: False type: Physics - uid: 2634 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -9.5,20.5 @@ -25906,7 +25884,7 @@ entities: - canCollide: False type: Physics - uid: 2635 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -8.5,21.5 @@ -25917,7 +25895,7 @@ entities: - canCollide: False type: Physics - uid: 2636 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -7.5,21.5 @@ -25928,7 +25906,7 @@ entities: - canCollide: False type: Physics - uid: 2637 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -12.5,17.5 @@ -25939,7 +25917,7 @@ entities: - canCollide: False type: Physics - uid: 2638 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -12.5,18.5 @@ -25950,7 +25928,7 @@ entities: - canCollide: False type: Physics - uid: 2639 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -12.5,19.5 @@ -25961,7 +25939,7 @@ entities: - canCollide: False type: Physics - uid: 2640 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -12.5,20.5 @@ -25972,7 +25950,7 @@ entities: - canCollide: False type: Physics - uid: 2641 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -13.5,20.5 @@ -25983,7 +25961,7 @@ entities: - canCollide: False type: Physics - uid: 2642 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -14.5,20.5 @@ -25994,7 +25972,7 @@ entities: - canCollide: False type: Physics - uid: 2643 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -3.5,14.5 @@ -26005,7 +25983,7 @@ entities: - canCollide: False type: Physics - uid: 2644 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -2.5,14.5 @@ -26016,7 +25994,7 @@ entities: - canCollide: False type: Physics - uid: 2645 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -1.5,14.5 @@ -26027,7 +26005,7 @@ entities: - canCollide: False type: Physics - uid: 2646 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -0.5,14.5 @@ -26038,7 +26016,7 @@ entities: - canCollide: False type: Physics - uid: 2647 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 0.5,14.5 @@ -26049,7 +26027,7 @@ entities: - canCollide: False type: Physics - uid: 2648 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 1.5,14.5 @@ -26058,7 +26036,7 @@ entities: - canCollide: False type: Physics - uid: 2649 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 0.5,13.5 @@ -26069,7 +26047,7 @@ entities: - canCollide: False type: Physics - uid: 2650 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 0.5,12.5 @@ -26080,7 +26058,7 @@ entities: - canCollide: False type: Physics - uid: 2651 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -39.5,11.5 @@ -26089,7 +26067,7 @@ entities: - canCollide: False type: Physics - uid: 2652 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -39.5,10.5 @@ -26100,7 +26078,7 @@ entities: - canCollide: False type: Physics - uid: 2653 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -38.5,10.5 @@ -26111,7 +26089,7 @@ entities: - canCollide: False type: Physics - uid: 2654 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -37.5,10.5 @@ -26122,7 +26100,7 @@ entities: - canCollide: False type: Physics - uid: 2655 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -36.5,10.5 @@ -26133,7 +26111,7 @@ entities: - canCollide: False type: Physics - uid: 2656 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -36.5,9.5 @@ -26144,7 +26122,7 @@ entities: - canCollide: False type: Physics - uid: 2657 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -36.5,8.5 @@ -26155,7 +26133,7 @@ entities: - canCollide: False type: Physics - uid: 2658 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -36.5,7.5 @@ -26166,7 +26144,7 @@ entities: - canCollide: False type: Physics - uid: 2659 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -36.5,6.5 @@ -26177,7 +26155,7 @@ entities: - canCollide: False type: Physics - uid: 2660 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -36.5,5.5 @@ -26188,7 +26166,7 @@ entities: - canCollide: False type: Physics - uid: 2661 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -36.5,4.5 @@ -26199,7 +26177,7 @@ entities: - canCollide: False type: Physics - uid: 2662 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -36.5,3.5 @@ -26210,7 +26188,7 @@ entities: - canCollide: False type: Physics - uid: 2663 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -36.5,2.5 @@ -26221,7 +26199,7 @@ entities: - canCollide: False type: Physics - uid: 2664 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -36.5,1.5 @@ -26232,7 +26210,7 @@ entities: - canCollide: False type: Physics - uid: 2665 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -36.5,0.5 @@ -26243,7 +26221,7 @@ entities: - canCollide: False type: Physics - uid: 2666 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -36.5,-0.5 @@ -26254,7 +26232,7 @@ entities: - canCollide: False type: Physics - uid: 2667 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -36.5,-1.5 @@ -26265,7 +26243,7 @@ entities: - canCollide: False type: Physics - uid: 2668 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -36.5,-2.5 @@ -26276,7 +26254,7 @@ entities: - canCollide: False type: Physics - uid: 2669 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -36.5,-3.5 @@ -26287,7 +26265,7 @@ entities: - canCollide: False type: Physics - uid: 2670 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -36.5,-4.5 @@ -26298,7 +26276,7 @@ entities: - canCollide: False type: Physics - uid: 2671 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -36.5,-5.5 @@ -26309,7 +26287,7 @@ entities: - canCollide: False type: Physics - uid: 2672 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -36.5,-6.5 @@ -26320,7 +26298,7 @@ entities: - canCollide: False type: Physics - uid: 2673 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -35.5,-6.5 @@ -26331,7 +26309,7 @@ entities: - canCollide: False type: Physics - uid: 2674 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -35.5,2.5 @@ -26342,7 +26320,7 @@ entities: - canCollide: False type: Physics - uid: 2675 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -35.5,5.5 @@ -26353,7 +26331,7 @@ entities: - canCollide: False type: Physics - uid: 2676 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -34.5,5.5 @@ -26364,7 +26342,7 @@ entities: - canCollide: False type: Physics - uid: 2677 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -33.5,5.5 @@ -26375,7 +26353,7 @@ entities: - canCollide: False type: Physics - uid: 2678 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -32.5,5.5 @@ -26386,7 +26364,7 @@ entities: - canCollide: False type: Physics - uid: 2679 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -35.5,8.5 @@ -26397,7 +26375,7 @@ entities: - canCollide: False type: Physics - uid: 2680 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -34.5,8.5 @@ -26408,7 +26386,7 @@ entities: - canCollide: False type: Physics - uid: 2681 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -37.5,8.5 @@ -26419,7 +26397,7 @@ entities: - canCollide: False type: Physics - uid: 2682 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -38.5,8.5 @@ -26430,7 +26408,7 @@ entities: - canCollide: False type: Physics - uid: 2683 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -39.5,8.5 @@ -26441,7 +26419,7 @@ entities: - canCollide: False type: Physics - uid: 2684 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -40.5,8.5 @@ -26452,7 +26430,7 @@ entities: - canCollide: False type: Physics - uid: 2685 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -37.5,4.5 @@ -26463,7 +26441,7 @@ entities: - canCollide: False type: Physics - uid: 2686 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -38.5,4.5 @@ -26474,7 +26452,7 @@ entities: - canCollide: False type: Physics - uid: 2687 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -39.5,4.5 @@ -26485,7 +26463,7 @@ entities: - canCollide: False type: Physics - uid: 2688 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -40.5,4.5 @@ -26496,7 +26474,7 @@ entities: - canCollide: False type: Physics - uid: 2689 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -37.5,-3.5 @@ -26507,7 +26485,7 @@ entities: - canCollide: False type: Physics - uid: 2690 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -38.5,-3.5 @@ -26518,7 +26496,7 @@ entities: - canCollide: False type: Physics - uid: 2691 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -18.5,9.5 @@ -26527,7 +26505,7 @@ entities: - canCollide: False type: Physics - uid: 2692 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -17.5,7.5 @@ -26536,7 +26514,7 @@ entities: - canCollide: False type: Physics - uid: 2693 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -18.5,7.5 @@ -26545,7 +26523,7 @@ entities: - canCollide: False type: Physics - uid: 2694 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -30.5,-3.5 @@ -26554,7 +26532,7 @@ entities: - canCollide: False type: Physics - uid: 2695 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -30.5,-4.5 @@ -26565,7 +26543,7 @@ entities: - canCollide: False type: Physics - uid: 2696 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -30.5,-5.5 @@ -26576,7 +26554,7 @@ entities: - canCollide: False type: Physics - uid: 2697 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -30.5,-6.5 @@ -26585,7 +26563,7 @@ entities: - canCollide: False type: Physics - uid: 2698 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -30.5,-7.5 @@ -26596,7 +26574,7 @@ entities: - canCollide: False type: Physics - uid: 2699 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -29.5,-7.5 @@ -26607,7 +26585,7 @@ entities: - canCollide: False type: Physics - uid: 2700 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -28.5,-7.5 @@ -26618,7 +26596,7 @@ entities: - canCollide: False type: Physics - uid: 2701 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -27.5,-7.5 @@ -26629,7 +26607,7 @@ entities: - canCollide: False type: Physics - uid: 2702 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -26.5,-7.5 @@ -26640,7 +26618,7 @@ entities: - canCollide: False type: Physics - uid: 2703 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -25.5,-7.5 @@ -26651,7 +26629,7 @@ entities: - canCollide: False type: Physics - uid: 2704 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -25.5,-8.5 @@ -26662,7 +26640,7 @@ entities: - canCollide: False type: Physics - uid: 2705 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -24.5,-7.5 @@ -26673,7 +26651,7 @@ entities: - canCollide: False type: Physics - uid: 2706 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -23.5,-7.5 @@ -26684,7 +26662,7 @@ entities: - canCollide: False type: Physics - uid: 2707 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -23.5,-8.5 @@ -26695,7 +26673,7 @@ entities: - canCollide: False type: Physics - uid: 2708 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -20.5,-7.5 @@ -26706,7 +26684,7 @@ entities: - canCollide: False type: Physics - uid: 2709 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -30.5,-2.5 @@ -26717,7 +26695,7 @@ entities: - canCollide: False type: Physics - uid: 2710 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -30.5,-1.5 @@ -26728,7 +26706,7 @@ entities: - canCollide: False type: Physics - uid: 2711 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -30.5,-0.5 @@ -26737,7 +26715,7 @@ entities: - canCollide: False type: Physics - uid: 2712 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -30.5,0.5 @@ -26748,7 +26726,7 @@ entities: - canCollide: False type: Physics - uid: 2713 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -30.5,1.5 @@ -26759,7 +26737,7 @@ entities: - canCollide: False type: Physics - uid: 2714 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -29.5,0.5 @@ -26770,7 +26748,7 @@ entities: - canCollide: False type: Physics - uid: 2715 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -28.5,0.5 @@ -26781,7 +26759,7 @@ entities: - canCollide: False type: Physics - uid: 2716 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -27.5,0.5 @@ -26792,7 +26770,7 @@ entities: - canCollide: False type: Physics - uid: 2717 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -27.5,-0.5 @@ -26801,7 +26779,7 @@ entities: - canCollide: False type: Physics - uid: 2718 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -27.5,-1.5 @@ -26819,7 +26797,7 @@ entities: parent: 853 type: Transform - uid: 2720 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -31.5,-6.5 @@ -26830,7 +26808,7 @@ entities: - canCollide: False type: Physics - uid: 2721 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -32.5,-6.5 @@ -26839,7 +26817,7 @@ entities: - canCollide: False type: Physics - uid: 2722 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -32.5,-5.5 @@ -26850,7 +26828,7 @@ entities: - canCollide: False type: Physics - uid: 2723 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -32.5,-4.5 @@ -26861,7 +26839,7 @@ entities: - canCollide: False type: Physics - uid: 2724 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -32.5,-3.5 @@ -26872,7 +26850,7 @@ entities: - canCollide: False type: Physics - uid: 2725 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -32.5,-2.5 @@ -26883,7 +26861,7 @@ entities: - canCollide: False type: Physics - uid: 2726 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -32.5,-1.5 @@ -26894,7 +26872,7 @@ entities: - canCollide: False type: Physics - uid: 2727 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -32.5,-0.5 @@ -26905,7 +26883,7 @@ entities: - canCollide: False type: Physics - uid: 2728 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -32.5,0.5 @@ -26914,7 +26892,7 @@ entities: - canCollide: False type: Physics - uid: 2729 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -32.5,1.5 @@ -26923,7 +26901,7 @@ entities: - canCollide: False type: Physics - uid: 2730 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -20.5,-12.5 @@ -26932,7 +26910,7 @@ entities: - canCollide: False type: Physics - uid: 2731 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -20.5,-13.5 @@ -26943,7 +26921,7 @@ entities: - canCollide: False type: Physics - uid: 2732 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -20.5,-14.5 @@ -26954,7 +26932,7 @@ entities: - canCollide: False type: Physics - uid: 2733 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -21.5,-14.5 @@ -26965,7 +26943,7 @@ entities: - canCollide: False type: Physics - uid: 2734 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -22.5,-14.5 @@ -26976,7 +26954,7 @@ entities: - canCollide: False type: Physics - uid: 2735 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -22.5,-14.5 @@ -26987,7 +26965,7 @@ entities: - canCollide: False type: Physics - uid: 2736 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -23.5,-14.5 @@ -26998,7 +26976,7 @@ entities: - canCollide: False type: Physics - uid: 2737 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -24.5,-14.5 @@ -27009,7 +26987,7 @@ entities: - canCollide: False type: Physics - uid: 2738 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -24.5,-13.5 @@ -27020,7 +26998,7 @@ entities: - canCollide: False type: Physics - uid: 2739 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -14.5,-8.5 @@ -27031,7 +27009,7 @@ entities: - canCollide: False type: Physics - uid: 2740 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -14.5,-9.5 @@ -27042,7 +27020,7 @@ entities: - canCollide: False type: Physics - uid: 2741 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -14.5,-10.5 @@ -27053,7 +27031,7 @@ entities: - canCollide: False type: Physics - uid: 2742 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -14.5,-10.5 @@ -27064,7 +27042,7 @@ entities: - canCollide: False type: Physics - uid: 2743 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -14.5,-11.5 @@ -27075,7 +27053,7 @@ entities: - canCollide: False type: Physics - uid: 2744 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -13.5,-11.5 @@ -27086,7 +27064,7 @@ entities: - canCollide: False type: Physics - uid: 2745 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -12.5,-11.5 @@ -27097,7 +27075,7 @@ entities: - canCollide: False type: Physics - uid: 2746 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -11.5,-11.5 @@ -27108,7 +27086,7 @@ entities: - canCollide: False type: Physics - uid: 2747 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -12.5,-10.5 @@ -27119,7 +27097,7 @@ entities: - canCollide: False type: Physics - uid: 2748 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -12.5,-9.5 @@ -27130,7 +27108,7 @@ entities: - canCollide: False type: Physics - uid: 2749 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -13.5,-12.5 @@ -27141,7 +27119,7 @@ entities: - canCollide: False type: Physics - uid: 2750 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -12.5,-8.5 @@ -27152,7 +27130,7 @@ entities: - canCollide: False type: Physics - uid: 2751 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -16.5,-7.5 @@ -27163,7 +27141,7 @@ entities: - canCollide: False type: Physics - uid: 2752 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -15.5,-7.5 @@ -27174,7 +27152,7 @@ entities: - canCollide: False type: Physics - uid: 2753 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -14.5,-7.5 @@ -27185,7 +27163,7 @@ entities: - canCollide: False type: Physics - uid: 2754 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -17.5,-7.5 @@ -27196,7 +27174,7 @@ entities: - canCollide: False type: Physics - uid: 2755 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -18.5,-7.5 @@ -27207,7 +27185,7 @@ entities: - canCollide: False type: Physics - uid: 2756 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -19.5,-7.5 @@ -27218,7 +27196,7 @@ entities: - canCollide: False type: Physics - uid: 2757 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -20.5,-7.5 @@ -27229,7 +27207,7 @@ entities: - canCollide: False type: Physics - uid: 2758 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -18.5,-6.5 @@ -27238,7 +27216,7 @@ entities: - canCollide: False type: Physics - uid: 2759 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -18.5,-5.5 @@ -27249,7 +27227,7 @@ entities: - canCollide: False type: Physics - uid: 2760 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -18.5,-4.5 @@ -27260,7 +27238,7 @@ entities: - canCollide: False type: Physics - uid: 2761 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -19.5,-4.5 @@ -27271,7 +27249,7 @@ entities: - canCollide: False type: Physics - uid: 2762 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -20.5,-4.5 @@ -27282,7 +27260,7 @@ entities: - canCollide: False type: Physics - uid: 2763 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -21.5,-4.5 @@ -27293,7 +27271,7 @@ entities: - canCollide: False type: Physics - uid: 2764 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -22.5,-4.5 @@ -27304,7 +27282,7 @@ entities: - canCollide: False type: Physics - uid: 2765 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -22.5,-3.5 @@ -27315,7 +27293,7 @@ entities: - canCollide: False type: Physics - uid: 2766 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -22.5,-2.5 @@ -27326,7 +27304,7 @@ entities: - canCollide: False type: Physics - uid: 2767 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -22.5,-2.5 @@ -27337,7 +27315,7 @@ entities: - canCollide: False type: Physics - uid: 2768 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -22.5,-1.5 @@ -27348,7 +27326,7 @@ entities: - canCollide: False type: Physics - uid: 2769 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -22.5,-0.5 @@ -27359,7 +27337,7 @@ entities: - canCollide: False type: Physics - uid: 2770 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -22.5,0.5 @@ -27370,7 +27348,7 @@ entities: - canCollide: False type: Physics - uid: 2771 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -22.5,1.5 @@ -27379,7 +27357,7 @@ entities: - canCollide: False type: Physics - uid: 2772 - type: ApcExtensionCable + type: CableApcExtension components: - pos: -23.5,0.5 parent: 853 @@ -27389,7 +27367,7 @@ entities: - canCollide: False type: Physics - uid: 2773 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -15.5,-6.5 @@ -27398,7 +27376,7 @@ entities: - canCollide: False type: Physics - uid: 2774 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -15.5,-5.5 @@ -27407,7 +27385,7 @@ entities: - canCollide: False type: Physics - uid: 2775 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -15.5,-4.5 @@ -27416,7 +27394,7 @@ entities: - canCollide: False type: Physics - uid: 2776 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -11.5,2.5 @@ -27425,7 +27403,7 @@ entities: - canCollide: False type: Physics - uid: 2777 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -11.5,1.5 @@ -27436,7 +27414,7 @@ entities: - canCollide: False type: Physics - uid: 2778 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -11.5,0.5 @@ -27447,7 +27425,7 @@ entities: - canCollide: False type: Physics - uid: 2779 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -11.5,-0.5 @@ -27458,7 +27436,7 @@ entities: - canCollide: False type: Physics - uid: 2780 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -11.5,-1.5 @@ -27469,7 +27447,7 @@ entities: - canCollide: False type: Physics - uid: 2781 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -11.5,-2.5 @@ -27478,7 +27456,7 @@ entities: - canCollide: False type: Physics - uid: 2782 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -11.5,-3.5 @@ -27489,7 +27467,7 @@ entities: - canCollide: False type: Physics - uid: 2783 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -11.5,-4.5 @@ -27500,7 +27478,7 @@ entities: - canCollide: False type: Physics - uid: 2784 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -12.5,-4.5 @@ -27511,7 +27489,7 @@ entities: - canCollide: False type: Physics - uid: 2785 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -12.5,0.5 @@ -27522,7 +27500,7 @@ entities: - canCollide: False type: Physics - uid: 2786 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -13.5,0.5 @@ -27533,7 +27511,7 @@ entities: - canCollide: False type: Physics - uid: 2787 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -14.5,0.5 @@ -27544,7 +27522,7 @@ entities: - canCollide: False type: Physics - uid: 2788 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -14.5,0.5 @@ -27563,10 +27541,9 @@ entities: type: Transform - startingCharge: 11999.45 type: Battery - - drawRate: 2000 - type: PowerConsumer + - uid: 2790 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -15.5,0.5 @@ -27577,7 +27554,7 @@ entities: - canCollide: False type: Physics - uid: 2791 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -16.5,0.5 @@ -27588,7 +27565,7 @@ entities: - canCollide: False type: Physics - uid: 2792 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -17.5,0.5 @@ -27599,7 +27576,7 @@ entities: - canCollide: False type: Physics - uid: 2793 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -18.5,0.5 @@ -27610,7 +27587,7 @@ entities: - canCollide: False type: Physics - uid: 2794 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -19.5,0.5 @@ -27621,7 +27598,7 @@ entities: - canCollide: False type: Physics - uid: 2795 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -20.5,0.5 @@ -27632,7 +27609,7 @@ entities: - canCollide: False type: Physics - uid: 2796 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -20.5,1.5 @@ -27643,7 +27620,7 @@ entities: - canCollide: False type: Physics - uid: 2797 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -16.5,-0.5 @@ -27654,7 +27631,7 @@ entities: - canCollide: False type: Physics - uid: 2798 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -16.5,-1.5 @@ -27665,7 +27642,7 @@ entities: - canCollide: False type: Physics - uid: 2799 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -12.5,-1.5 @@ -27676,7 +27653,7 @@ entities: - canCollide: False type: Physics - uid: 2800 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -12.5,-1.5 @@ -27687,7 +27664,7 @@ entities: - canCollide: False type: Physics - uid: 2801 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -13.5,-1.5 @@ -27698,7 +27675,7 @@ entities: - canCollide: False type: Physics - uid: 2802 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -20.5,-0.5 @@ -27709,7 +27686,7 @@ entities: - canCollide: False type: Physics - uid: 2803 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -20.5,-0.5 @@ -27720,7 +27697,7 @@ entities: - canCollide: False type: Physics - uid: 2804 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -20.5,-1.5 @@ -27731,7 +27708,7 @@ entities: - canCollide: False type: Physics - uid: 2805 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -20.5,-2.5 @@ -27742,7 +27719,7 @@ entities: - canCollide: False type: Physics - uid: 2806 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -10.5,0.5 @@ -27753,7 +27730,7 @@ entities: - canCollide: False type: Physics - uid: 2807 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -9.5,0.5 @@ -27764,7 +27741,7 @@ entities: - canCollide: False type: Physics - uid: 2808 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -8.5,0.5 @@ -27775,7 +27752,7 @@ entities: - canCollide: False type: Physics - uid: 2809 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -7.5,0.5 @@ -27786,7 +27763,7 @@ entities: - canCollide: False type: Physics - uid: 2810 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -6.5,0.5 @@ -27797,7 +27774,7 @@ entities: - canCollide: False type: Physics - uid: 2811 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -5.5,0.5 @@ -27808,7 +27785,7 @@ entities: - canCollide: False type: Physics - uid: 2812 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -4.5,0.5 @@ -27819,7 +27796,7 @@ entities: - canCollide: False type: Physics - uid: 2813 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -3.5,0.5 @@ -27830,7 +27807,7 @@ entities: - canCollide: False type: Physics - uid: 2814 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -2.5,0.5 @@ -27841,7 +27818,7 @@ entities: - canCollide: False type: Physics - uid: 2815 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -1.5,0.5 @@ -27852,7 +27829,7 @@ entities: - canCollide: False type: Physics - uid: 2816 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -0.5,0.5 @@ -27863,7 +27840,7 @@ entities: - canCollide: False type: Physics - uid: 2817 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 0.5,0.5 @@ -27874,7 +27851,7 @@ entities: - canCollide: False type: Physics - uid: 2818 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -0.5,0.5 @@ -27885,7 +27862,7 @@ entities: - canCollide: False type: Physics - uid: 2819 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -0.5,-0.5 @@ -27896,7 +27873,7 @@ entities: - canCollide: False type: Physics - uid: 2820 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -0.5,-1.5 @@ -27907,7 +27884,7 @@ entities: - canCollide: False type: Physics - uid: 2821 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -0.5,-2.5 @@ -27918,7 +27895,7 @@ entities: - canCollide: False type: Physics - uid: 2822 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -0.5,-3.5 @@ -27929,7 +27906,7 @@ entities: - canCollide: False type: Physics - uid: 2823 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -0.5,-4.5 @@ -27940,7 +27917,7 @@ entities: - canCollide: False type: Physics - uid: 2824 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 0.5,-4.5 @@ -27951,7 +27928,7 @@ entities: - canCollide: False type: Physics - uid: 2825 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -5.5,-8.5 @@ -27960,7 +27937,7 @@ entities: - canCollide: False type: Physics - uid: 2826 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -5.5,-7.5 @@ -27971,7 +27948,7 @@ entities: - canCollide: False type: Physics - uid: 2827 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -4.5,-7.5 @@ -27982,7 +27959,7 @@ entities: - canCollide: False type: Physics - uid: 2828 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -3.5,-7.5 @@ -27993,7 +27970,7 @@ entities: - canCollide: False type: Physics - uid: 2829 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -6.5,-7.5 @@ -28004,7 +27981,7 @@ entities: - canCollide: False type: Physics - uid: 2830 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -6.5,-7.5 @@ -28015,7 +27992,7 @@ entities: - canCollide: False type: Physics - uid: 2831 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -7.5,-7.5 @@ -28026,7 +28003,7 @@ entities: - canCollide: False type: Physics - uid: 2832 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -6.5,-6.5 @@ -28037,7 +28014,7 @@ entities: - canCollide: False type: Physics - uid: 2833 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -6.5,-5.5 @@ -28048,7 +28025,7 @@ entities: - canCollide: False type: Physics - uid: 2834 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -6.5,-4.5 @@ -28059,7 +28036,7 @@ entities: - canCollide: False type: Physics - uid: 2835 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -5.5,-9.5 @@ -28070,7 +28047,7 @@ entities: - canCollide: False type: Physics - uid: 2836 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -5.5,-10.5 @@ -28079,7 +28056,7 @@ entities: - canCollide: False type: Physics - uid: 2837 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -4.5,-10.5 @@ -28088,7 +28065,7 @@ entities: - canCollide: False type: Physics - uid: 2838 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -4.5,-10.5 @@ -28097,7 +28074,7 @@ entities: - canCollide: False type: Physics - uid: 2839 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -3.5,-10.5 @@ -28106,7 +28083,7 @@ entities: - canCollide: False type: Physics - uid: 2840 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -2.5,-10.5 @@ -28115,7 +28092,7 @@ entities: - canCollide: False type: Physics - uid: 2841 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -1.5,-10.5 @@ -28124,7 +28101,7 @@ entities: - canCollide: False type: Physics - uid: 2842 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -0.5,-10.5 @@ -28133,7 +28110,7 @@ entities: - canCollide: False type: Physics - uid: 2843 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 0.5,-10.5 @@ -28142,7 +28119,7 @@ entities: - canCollide: False type: Physics - uid: 2844 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 0.5,-9.5 @@ -28151,7 +28128,7 @@ entities: - canCollide: False type: Physics - uid: 2845 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 0.5,-8.5 @@ -28160,7 +28137,7 @@ entities: - canCollide: False type: Physics - uid: 2846 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 0.5,-7.5 @@ -28169,7 +28146,7 @@ entities: - canCollide: False type: Physics - uid: 2847 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -0.5,-11.5 @@ -28178,7 +28155,7 @@ entities: - canCollide: False type: Physics - uid: 2848 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -1.5,-18.5 @@ -28187,7 +28164,7 @@ entities: - canCollide: False type: Physics - uid: 2849 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -1.5,-19.5 @@ -28198,7 +28175,7 @@ entities: - canCollide: False type: Physics - uid: 2850 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -1.5,-20.5 @@ -28209,7 +28186,7 @@ entities: - canCollide: False type: Physics - uid: 2851 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -0.5,-19.5 @@ -28220,7 +28197,7 @@ entities: - canCollide: False type: Physics - uid: 2852 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -2.5,-19.5 @@ -28231,7 +28208,7 @@ entities: - canCollide: False type: Physics - uid: 2853 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -3.5,-19.5 @@ -28242,7 +28219,7 @@ entities: - canCollide: False type: Physics - uid: 2854 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -4.5,-19.5 @@ -28253,7 +28230,7 @@ entities: - canCollide: False type: Physics - uid: 2855 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -3.5,-20.5 @@ -28264,7 +28241,7 @@ entities: - canCollide: False type: Physics - uid: 2856 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -3.5,-21.5 @@ -28275,7 +28252,7 @@ entities: - canCollide: False type: Physics - uid: 2857 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -3.5,-23.5 @@ -28286,7 +28263,7 @@ entities: - canCollide: False type: Physics - uid: 2858 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -3.5,-22.5 @@ -28297,7 +28274,7 @@ entities: - canCollide: False type: Physics - uid: 2859 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -2.5,-23.5 @@ -28308,7 +28285,7 @@ entities: - canCollide: False type: Physics - uid: 2860 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -9.5,-21.5 @@ -28317,7 +28294,7 @@ entities: - canCollide: False type: Physics - uid: 2861 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -9.5,-22.5 @@ -28328,7 +28305,7 @@ entities: - canCollide: False type: Physics - uid: 2862 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -9.5,-23.5 @@ -28339,7 +28316,7 @@ entities: - canCollide: False type: Physics - uid: 2863 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -8.5,-23.5 @@ -28350,7 +28327,7 @@ entities: - canCollide: False type: Physics - uid: 2864 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -7.5,-23.5 @@ -28361,7 +28338,7 @@ entities: - canCollide: False type: Physics - uid: 2865 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -7.5,-24.5 @@ -28370,7 +28347,7 @@ entities: - canCollide: False type: Physics - uid: 2866 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -7.5,-25.5 @@ -28381,7 +28358,7 @@ entities: - canCollide: False type: Physics - uid: 2867 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -9.5,-20.5 @@ -28392,7 +28369,7 @@ entities: - canCollide: False type: Physics - uid: 2868 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -10.5,-20.5 @@ -28403,7 +28380,7 @@ entities: - canCollide: False type: Physics - uid: 2869 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -11.5,-20.5 @@ -28414,7 +28391,7 @@ entities: - canCollide: False type: Physics - uid: 2870 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -11.5,-19.5 @@ -28425,7 +28402,7 @@ entities: - canCollide: False type: Physics - uid: 2871 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -9.5,-19.5 @@ -28436,7 +28413,7 @@ entities: - canCollide: False type: Physics - uid: 2872 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -9.5,-18.5 @@ -28447,7 +28424,7 @@ entities: - canCollide: False type: Physics - uid: 2873 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -9.5,-17.5 @@ -28458,7 +28435,7 @@ entities: - canCollide: False type: Physics - uid: 2874 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -8.5,-17.5 @@ -28469,7 +28446,7 @@ entities: - canCollide: False type: Physics - uid: 2875 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -3.5,-18.5 @@ -28480,7 +28457,7 @@ entities: - canCollide: False type: Physics - uid: 2876 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -3.5,-17.5 @@ -28491,7 +28468,7 @@ entities: - canCollide: False type: Physics - uid: 2877 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -3.5,-17.5 @@ -28502,7 +28479,7 @@ entities: - canCollide: False type: Physics - uid: 2878 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -3.5,-16.5 @@ -28513,7 +28490,7 @@ entities: - canCollide: False type: Physics - uid: 2879 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -3.5,-15.5 @@ -28524,7 +28501,7 @@ entities: - canCollide: False type: Physics - uid: 2880 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -3.5,-14.5 @@ -28535,7 +28512,7 @@ entities: - canCollide: False type: Physics - uid: 2881 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -3.5,-13.5 @@ -28546,7 +28523,7 @@ entities: - canCollide: False type: Physics - uid: 2882 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -3.5,-12.5 @@ -28557,7 +28534,7 @@ entities: - canCollide: False type: Physics - uid: 2883 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -2.5,-13.5 @@ -28568,7 +28545,7 @@ entities: - canCollide: False type: Physics - uid: 2884 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -1.5,-13.5 @@ -28579,7 +28556,7 @@ entities: - canCollide: False type: Physics - uid: 2885 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -1.5,-17.5 @@ -28590,7 +28567,7 @@ entities: - canCollide: False type: Physics - uid: 2886 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -0.5,-17.5 @@ -28601,7 +28578,7 @@ entities: - canCollide: False type: Physics - uid: 2887 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 0.5,-17.5 @@ -28610,7 +28587,7 @@ entities: - canCollide: False type: Physics - uid: 2888 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -4.5,-14.5 @@ -28621,7 +28598,7 @@ entities: - canCollide: False type: Physics - uid: 2889 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -4.5,-12.5 @@ -28632,7 +28609,7 @@ entities: - canCollide: False type: Physics - uid: 2890 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -4.5,-17.5 @@ -28643,7 +28620,7 @@ entities: - canCollide: False type: Physics - uid: 2891 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -5.5,-12.5 @@ -28654,7 +28631,7 @@ entities: - canCollide: False type: Physics - uid: 2892 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -6.5,-12.5 @@ -28663,7 +28640,7 @@ entities: - canCollide: False type: Physics - uid: 2893 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -5.5,-14.5 @@ -28674,7 +28651,7 @@ entities: - canCollide: False type: Physics - uid: 2894 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -14.5,-16.5 @@ -28683,7 +28660,7 @@ entities: - canCollide: False type: Physics - uid: 2895 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -14.5,-17.5 @@ -28694,7 +28671,7 @@ entities: - canCollide: False type: Physics - uid: 2896 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -14.5,-18.5 @@ -28705,7 +28682,7 @@ entities: - canCollide: False type: Physics - uid: 2897 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -14.5,-19.5 @@ -28716,7 +28693,7 @@ entities: - canCollide: False type: Physics - uid: 2898 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -14.5,-20.5 @@ -28727,7 +28704,7 @@ entities: - canCollide: False type: Physics - uid: 2899 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -14.5,-21.5 @@ -28738,7 +28715,7 @@ entities: - canCollide: False type: Physics - uid: 2900 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -14.5,-22.5 @@ -28749,7 +28726,7 @@ entities: - canCollide: False type: Physics - uid: 2901 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -14.5,-23.5 @@ -28760,7 +28737,7 @@ entities: - canCollide: False type: Physics - uid: 2902 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -14.5,-24.5 @@ -28771,7 +28748,7 @@ entities: - canCollide: False type: Physics - uid: 2903 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -14.5,-25.5 @@ -28782,7 +28759,7 @@ entities: - canCollide: False type: Physics - uid: 2904 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -15.5,-25.5 @@ -28793,7 +28770,7 @@ entities: - canCollide: False type: Physics - uid: 2905 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -16.5,-25.5 @@ -28804,7 +28781,7 @@ entities: - canCollide: False type: Physics - uid: 2906 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -15.5,-22.5 @@ -28815,7 +28792,7 @@ entities: - canCollide: False type: Physics - uid: 2907 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -16.5,-22.5 @@ -28826,7 +28803,7 @@ entities: - canCollide: False type: Physics - uid: 2908 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -17.5,-22.5 @@ -28837,7 +28814,7 @@ entities: - canCollide: False type: Physics - uid: 2909 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -1.5,-23.5 @@ -28846,7 +28823,7 @@ entities: - canCollide: False type: Physics - uid: 2910 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -0.5,-23.5 @@ -28855,7 +28832,7 @@ entities: - canCollide: False type: Physics - uid: 2911 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 0.5,-23.5 @@ -28864,7 +28841,7 @@ entities: - canCollide: False type: Physics - uid: 2912 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 7.5,-17.5 @@ -28873,7 +28850,7 @@ entities: - canCollide: False type: Physics - uid: 2913 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 7.5,-18.5 @@ -28884,7 +28861,7 @@ entities: - canCollide: False type: Physics - uid: 2914 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 7.5,-19.5 @@ -28893,7 +28870,7 @@ entities: - canCollide: False type: Physics - uid: 2915 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 8.5,-18.5 @@ -28904,7 +28881,7 @@ entities: - canCollide: False type: Physics - uid: 2916 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 9.5,-18.5 @@ -28915,7 +28892,7 @@ entities: - canCollide: False type: Physics - uid: 2917 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 10.5,-18.5 @@ -28926,7 +28903,7 @@ entities: - canCollide: False type: Physics - uid: 2918 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 10.5,-19.5 @@ -28937,7 +28914,7 @@ entities: - canCollide: False type: Physics - uid: 2919 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 11.5,-19.5 @@ -28948,7 +28925,7 @@ entities: - canCollide: False type: Physics - uid: 2920 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 12.5,-19.5 @@ -28959,7 +28936,7 @@ entities: - canCollide: False type: Physics - uid: 2921 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 13.5,-19.5 @@ -28970,7 +28947,7 @@ entities: - canCollide: False type: Physics - uid: 2922 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 14.5,-19.5 @@ -28979,7 +28956,7 @@ entities: - canCollide: False type: Physics - uid: 2923 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 15.5,-19.5 @@ -28990,7 +28967,7 @@ entities: - canCollide: False type: Physics - uid: 2924 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 7.5,-16.5 @@ -29001,7 +28978,7 @@ entities: - canCollide: False type: Physics - uid: 2925 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 7.5,-15.5 @@ -29012,7 +28989,7 @@ entities: - canCollide: False type: Physics - uid: 2926 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 7.5,-14.5 @@ -29023,7 +29000,7 @@ entities: - canCollide: False type: Physics - uid: 2927 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 7.5,-13.5 @@ -29034,7 +29011,7 @@ entities: - canCollide: False type: Physics - uid: 2928 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 6.5,-13.5 @@ -29043,7 +29020,7 @@ entities: - canCollide: False type: Physics - uid: 2929 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 5.5,-13.5 @@ -29054,7 +29031,7 @@ entities: - canCollide: False type: Physics - uid: 2930 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 8.5,-13.5 @@ -29065,7 +29042,7 @@ entities: - canCollide: False type: Physics - uid: 2931 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 9.5,-13.5 @@ -29076,7 +29053,7 @@ entities: - canCollide: False type: Physics - uid: 2932 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 10.5,-13.5 @@ -29087,7 +29064,7 @@ entities: - canCollide: False type: Physics - uid: 2933 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 11.5,-13.5 @@ -29096,7 +29073,7 @@ entities: - canCollide: False type: Physics - uid: 2934 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 22.5,-4.5 @@ -29107,7 +29084,7 @@ entities: - canCollide: False type: Physics - uid: 2935 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 22.5,-5.5 @@ -29118,7 +29095,7 @@ entities: - canCollide: False type: Physics - uid: 2936 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 23.5,-4.5 @@ -29129,7 +29106,7 @@ entities: - canCollide: False type: Physics - uid: 2937 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 24.5,-4.5 @@ -29140,7 +29117,7 @@ entities: - canCollide: False type: Physics - uid: 2938 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 25.5,-4.5 @@ -29149,7 +29126,7 @@ entities: - canCollide: False type: Physics - uid: 2939 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 22.5,-2.5 @@ -29158,7 +29135,7 @@ entities: - canCollide: False type: Physics - uid: 2940 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 22.5,-1.5 @@ -29169,7 +29146,7 @@ entities: - canCollide: False type: Physics - uid: 2941 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 22.5,-0.5 @@ -29180,7 +29157,7 @@ entities: - canCollide: False type: Physics - uid: 2942 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 22.5,0.5 @@ -29191,7 +29168,7 @@ entities: - canCollide: False type: Physics - uid: 2943 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 22.5,1.5 @@ -29202,7 +29179,7 @@ entities: - canCollide: False type: Physics - uid: 2944 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 21.5,1.5 @@ -29211,7 +29188,7 @@ entities: - canCollide: False type: Physics - uid: 2945 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 23.5,0.5 @@ -29222,7 +29199,7 @@ entities: - canCollide: False type: Physics - uid: 2946 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 23.5,-1.5 @@ -29233,7 +29210,7 @@ entities: - canCollide: False type: Physics - uid: 2947 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 24.5,-1.5 @@ -29244,7 +29221,7 @@ entities: - canCollide: False type: Physics - uid: 2948 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 25.5,-1.5 @@ -29255,7 +29232,7 @@ entities: - canCollide: False type: Physics - uid: 2949 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 22.5,-6.5 @@ -29266,7 +29243,7 @@ entities: - canCollide: False type: Physics - uid: 2950 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 21.5,-6.5 @@ -29277,7 +29254,7 @@ entities: - canCollide: False type: Physics - uid: 2951 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 20.5,-6.5 @@ -29288,7 +29265,7 @@ entities: - canCollide: False type: Physics - uid: 2952 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 19.5,-6.5 @@ -29299,7 +29276,7 @@ entities: - canCollide: False type: Physics - uid: 2953 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 18.5,-6.5 @@ -29310,7 +29287,7 @@ entities: - canCollide: False type: Physics - uid: 2954 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 18.5,-5.5 @@ -29321,7 +29298,7 @@ entities: - canCollide: False type: Physics - uid: 2955 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 18.5,-4.5 @@ -29332,7 +29309,7 @@ entities: - canCollide: False type: Physics - uid: 2956 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 18.5,-7.5 @@ -29343,7 +29320,7 @@ entities: - canCollide: False type: Physics - uid: 2957 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 18.5,-8.5 @@ -29354,7 +29331,7 @@ entities: - canCollide: False type: Physics - uid: 2958 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 18.5,-9.5 @@ -29365,7 +29342,7 @@ entities: - canCollide: False type: Physics - uid: 2959 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 18.5,-10.5 @@ -29376,7 +29353,7 @@ entities: - canCollide: False type: Physics - uid: 2960 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 18.5,-11.5 @@ -29387,7 +29364,7 @@ entities: - canCollide: False type: Physics - uid: 2961 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 18.5,-12.5 @@ -29398,7 +29375,7 @@ entities: - canCollide: False type: Physics - uid: 2962 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 18.5,-13.5 @@ -29409,7 +29386,7 @@ entities: - canCollide: False type: Physics - uid: 2963 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 18.5,-14.5 @@ -29420,7 +29397,7 @@ entities: - canCollide: False type: Physics - uid: 2964 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 18.5,-15.5 @@ -29431,7 +29408,7 @@ entities: - canCollide: False type: Physics - uid: 2965 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 18.5,-16.5 @@ -29442,7 +29419,7 @@ entities: - canCollide: False type: Physics - uid: 2966 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 18.5,-17.5 @@ -29453,7 +29430,7 @@ entities: - canCollide: False type: Physics - uid: 2967 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 18.5,-18.5 @@ -29462,7 +29439,7 @@ entities: - canCollide: False type: Physics - uid: 2968 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 18.5,-19.5 @@ -29473,7 +29450,7 @@ entities: - canCollide: False type: Physics - uid: 2969 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 18.5,-20.5 @@ -29484,7 +29461,7 @@ entities: - canCollide: False type: Physics - uid: 2970 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 19.5,-13.5 @@ -29495,7 +29472,7 @@ entities: - canCollide: False type: Physics - uid: 2971 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 20.5,-13.5 @@ -29506,7 +29483,7 @@ entities: - canCollide: False type: Physics - uid: 2972 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 21.5,-13.5 @@ -29517,7 +29494,7 @@ entities: - canCollide: False type: Physics - uid: 2973 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 22.5,-13.5 @@ -29528,7 +29505,7 @@ entities: - canCollide: False type: Physics - uid: 2974 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 22.5,-13.5 @@ -29539,7 +29516,7 @@ entities: - canCollide: False type: Physics - uid: 2975 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 23.5,-13.5 @@ -29550,7 +29527,7 @@ entities: - canCollide: False type: Physics - uid: 2976 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 23.5,-14.5 @@ -29561,7 +29538,7 @@ entities: - canCollide: False type: Physics - uid: 2977 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 8.5,-12.5 @@ -29572,7 +29549,7 @@ entities: - canCollide: False type: Physics - uid: 2978 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 8.5,-11.5 @@ -29583,7 +29560,7 @@ entities: - canCollide: False type: Physics - uid: 2979 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 7.5,-11.5 @@ -29594,7 +29571,7 @@ entities: - canCollide: False type: Physics - uid: 2980 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 9.5,-11.5 @@ -29605,7 +29582,7 @@ entities: - canCollide: False type: Physics - uid: 2981 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 10.5,-11.5 @@ -29616,7 +29593,7 @@ entities: - canCollide: False type: Physics - uid: 2982 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 7.5,-7.5 @@ -29627,7 +29604,7 @@ entities: - canCollide: False type: Physics - uid: 2983 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 8.5,-7.5 @@ -29638,7 +29615,7 @@ entities: - canCollide: False type: Physics - uid: 2984 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 9.5,-7.5 @@ -29649,7 +29626,7 @@ entities: - canCollide: False type: Physics - uid: 2985 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 10.5,-7.5 @@ -29660,7 +29637,7 @@ entities: - canCollide: False type: Physics - uid: 2986 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 11.5,-7.5 @@ -29671,7 +29648,7 @@ entities: - canCollide: False type: Physics - uid: 2987 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 12.5,-7.5 @@ -29682,7 +29659,7 @@ entities: - canCollide: False type: Physics - uid: 2988 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 13.5,-7.5 @@ -29693,7 +29670,7 @@ entities: - canCollide: False type: Physics - uid: 2989 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 14.5,-7.5 @@ -29704,7 +29681,7 @@ entities: - canCollide: False type: Physics - uid: 2990 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 15.5,-7.5 @@ -29715,7 +29692,7 @@ entities: - canCollide: False type: Physics - uid: 2991 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 16.5,-7.5 @@ -29726,7 +29703,7 @@ entities: - canCollide: False type: Physics - uid: 2992 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 17.5,-7.5 @@ -29737,7 +29714,7 @@ entities: - canCollide: False type: Physics - uid: 2993 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 18.5,-7.5 @@ -29748,7 +29725,7 @@ entities: - canCollide: False type: Physics - uid: 2994 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 17.5,-17.5 @@ -29759,7 +29736,7 @@ entities: - canCollide: False type: Physics - uid: 2995 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 16.5,-17.5 @@ -29770,7 +29747,7 @@ entities: - canCollide: False type: Physics - uid: 2996 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 15.5,-17.5 @@ -29781,7 +29758,7 @@ entities: - canCollide: False type: Physics - uid: 2997 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 16.5,2.5 @@ -29790,7 +29767,7 @@ entities: - canCollide: False type: Physics - uid: 2998 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 16.5,1.5 @@ -29801,7 +29778,7 @@ entities: - canCollide: False type: Physics - uid: 2999 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 17.5,1.5 @@ -29812,7 +29789,7 @@ entities: - canCollide: False type: Physics - uid: 3000 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 18.5,1.5 @@ -29823,7 +29800,7 @@ entities: - canCollide: False type: Physics - uid: 3001 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 15.5,1.5 @@ -29834,7 +29811,7 @@ entities: - canCollide: False type: Physics - uid: 3002 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 14.5,1.5 @@ -29853,7 +29830,7 @@ entities: - canCollide: False type: Physics - uid: 3004 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 12.5,1.5 @@ -29864,7 +29841,7 @@ entities: - canCollide: False type: Physics - uid: 3005 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 11.5,1.5 @@ -29875,7 +29852,7 @@ entities: - canCollide: False type: Physics - uid: 3006 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 10.5,1.5 @@ -29886,7 +29863,7 @@ entities: - canCollide: False type: Physics - uid: 3007 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 9.5,1.5 @@ -29897,7 +29874,7 @@ entities: - canCollide: False type: Physics - uid: 3008 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 8.5,1.5 @@ -29908,7 +29885,7 @@ entities: - canCollide: False type: Physics - uid: 3009 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 7.5,1.5 @@ -29919,7 +29896,7 @@ entities: - canCollide: False type: Physics - uid: 3010 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 6.5,1.5 @@ -29930,7 +29907,7 @@ entities: - canCollide: False type: Physics - uid: 3011 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 16.5,0.5 @@ -29941,7 +29918,7 @@ entities: - canCollide: False type: Physics - uid: 3012 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 16.5,-0.5 @@ -29952,7 +29929,7 @@ entities: - canCollide: False type: Physics - uid: 3013 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 17.5,-0.5 @@ -29963,7 +29940,7 @@ entities: - canCollide: False type: Physics - uid: 3014 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 18.5,-0.5 @@ -29974,7 +29951,7 @@ entities: - canCollide: False type: Physics - uid: 3015 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 9.5,0.5 @@ -29985,7 +29962,7 @@ entities: - canCollide: False type: Physics - uid: 3016 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 9.5,-0.5 @@ -29996,7 +29973,7 @@ entities: - canCollide: False type: Physics - uid: 3017 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 9.5,-1.5 @@ -30007,7 +29984,7 @@ entities: - canCollide: False type: Physics - uid: 3018 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 9.5,-2.5 @@ -30018,7 +29995,7 @@ entities: - canCollide: False type: Physics - uid: 3019 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 9.5,-3.5 @@ -30029,7 +30006,7 @@ entities: - canCollide: False type: Physics - uid: 3020 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 9.5,-4.5 @@ -30040,7 +30017,7 @@ entities: - canCollide: False type: Physics - uid: 3021 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 8.5,-4.5 @@ -30051,7 +30028,7 @@ entities: - canCollide: False type: Physics - uid: 3022 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 7.5,-4.5 @@ -30062,7 +30039,7 @@ entities: - canCollide: False type: Physics - uid: 3023 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 6.5,-4.5 @@ -30073,7 +30050,7 @@ entities: - canCollide: False type: Physics - uid: 3024 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 10.5,-2.5 @@ -30084,7 +30061,7 @@ entities: - canCollide: False type: Physics - uid: 3025 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 11.5,-2.5 @@ -30095,7 +30072,7 @@ entities: - canCollide: False type: Physics - uid: 3026 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 6.5,-17.5 @@ -30104,7 +30081,7 @@ entities: - canCollide: False type: Physics - uid: 3027 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 1.5,-23.5 @@ -30115,7 +30092,7 @@ entities: - canCollide: False type: Physics - uid: 3028 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 2.5,-23.5 @@ -30126,7 +30103,7 @@ entities: - canCollide: False type: Physics - uid: 3029 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 3.5,-23.5 @@ -30137,7 +30114,7 @@ entities: - canCollide: False type: Physics - uid: 3030 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 3.5,-22.5 @@ -30148,7 +30125,7 @@ entities: - canCollide: False type: Physics - uid: 3031 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 3.5,-21.5 @@ -30159,7 +30136,7 @@ entities: - canCollide: False type: Physics - uid: 3032 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 2.5,-21.5 @@ -30170,7 +30147,7 @@ entities: - canCollide: False type: Physics - uid: 3033 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 4.5,-21.5 @@ -30181,7 +30158,7 @@ entities: - canCollide: False type: Physics - uid: 3034 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 22.5,-3.5 @@ -30190,7 +30167,7 @@ entities: - canCollide: False type: Physics - uid: 3035 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 31.5,1.5 @@ -30199,7 +30176,7 @@ entities: - canCollide: False type: Physics - uid: 3036 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 31.5,0.5 @@ -30210,7 +30187,7 @@ entities: - canCollide: False type: Physics - uid: 3037 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 31.5,-0.5 @@ -30221,7 +30198,7 @@ entities: - canCollide: False type: Physics - uid: 3038 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 31.5,-1.5 @@ -30232,7 +30209,7 @@ entities: - canCollide: False type: Physics - uid: 3039 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 31.5,-3.5 @@ -30243,7 +30220,7 @@ entities: - canCollide: False type: Physics - uid: 3040 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 31.5,-2.5 @@ -30254,7 +30231,7 @@ entities: - canCollide: False type: Physics - uid: 3041 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 30.5,-2.5 @@ -30265,7 +30242,7 @@ entities: - canCollide: False type: Physics - uid: 3042 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 29.5,-2.5 @@ -30276,7 +30253,7 @@ entities: - canCollide: False type: Physics - uid: 3043 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 32.5,-2.5 @@ -30287,7 +30264,7 @@ entities: - canCollide: False type: Physics - uid: 3044 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 33.5,-2.5 @@ -30298,7 +30275,7 @@ entities: - canCollide: False type: Physics - uid: 3045 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 34.5,-2.5 @@ -30309,7 +30286,7 @@ entities: - canCollide: False type: Physics - uid: 3046 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 35.5,-2.5 @@ -30320,7 +30297,7 @@ entities: - canCollide: False type: Physics - uid: 3047 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 31.5,1.5 @@ -30329,7 +30306,7 @@ entities: - canCollide: False type: Physics - uid: 3048 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 31.5,2.5 @@ -30340,7 +30317,7 @@ entities: - canCollide: False type: Physics - uid: 3049 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 31.5,3.5 @@ -30351,7 +30328,7 @@ entities: - canCollide: False type: Physics - uid: 3050 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 31.5,4.5 @@ -30362,7 +30339,7 @@ entities: - canCollide: False type: Physics - uid: 3051 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 32.5,4.5 @@ -30373,7 +30350,7 @@ entities: - canCollide: False type: Physics - uid: 3052 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 33.5,4.5 @@ -30384,7 +30361,7 @@ entities: - canCollide: False type: Physics - uid: 3053 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 34.5,4.5 @@ -30395,7 +30372,7 @@ entities: - canCollide: False type: Physics - uid: 3054 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 35.5,4.5 @@ -30406,7 +30383,7 @@ entities: - canCollide: False type: Physics - uid: 3055 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 36.5,4.5 @@ -30417,7 +30394,7 @@ entities: - canCollide: False type: Physics - uid: 3056 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 37.5,4.5 @@ -30428,7 +30405,7 @@ entities: - canCollide: False type: Physics - uid: 3057 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 38.5,4.5 @@ -30439,7 +30416,7 @@ entities: - canCollide: False type: Physics - uid: 3058 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 38.5,3.5 @@ -30450,7 +30427,7 @@ entities: - canCollide: False type: Physics - uid: 3059 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 38.5,2.5 @@ -30461,7 +30438,7 @@ entities: - canCollide: False type: Physics - uid: 3060 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 38.5,1.5 @@ -30472,7 +30449,7 @@ entities: - canCollide: False type: Physics - uid: 3061 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 38.5,0.5 @@ -30483,7 +30460,7 @@ entities: - canCollide: False type: Physics - uid: 3062 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 38.5,-0.5 @@ -30494,7 +30471,7 @@ entities: - canCollide: False type: Physics - uid: 3063 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 38.5,-1.5 @@ -30505,7 +30482,7 @@ entities: - canCollide: False type: Physics - uid: 3064 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 43.5,10.5 @@ -30514,7 +30491,7 @@ entities: - canCollide: False type: Physics - uid: 3065 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 43.5,9.5 @@ -30525,7 +30502,7 @@ entities: - canCollide: False type: Physics - uid: 3066 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 42.5,9.5 @@ -30536,7 +30513,7 @@ entities: - canCollide: False type: Physics - uid: 3067 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 41.5,9.5 @@ -30547,7 +30524,7 @@ entities: - canCollide: False type: Physics - uid: 3068 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 39.5,9.5 @@ -30558,7 +30535,7 @@ entities: - canCollide: False type: Physics - uid: 3069 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 38.5,9.5 @@ -30569,7 +30546,7 @@ entities: - canCollide: False type: Physics - uid: 3070 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 40.5,9.5 @@ -30580,7 +30557,7 @@ entities: - canCollide: False type: Physics - uid: 3071 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 38.5,8.5 @@ -30591,7 +30568,7 @@ entities: - canCollide: False type: Physics - uid: 3072 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 38.5,7.5 @@ -30602,7 +30579,7 @@ entities: - canCollide: False type: Physics - uid: 3073 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 38.5,6.5 @@ -30613,7 +30590,7 @@ entities: - canCollide: False type: Physics - uid: 3074 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 44.5,9.5 @@ -30624,7 +30601,7 @@ entities: - canCollide: False type: Physics - uid: 3075 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 44.5,8.5 @@ -30635,7 +30612,7 @@ entities: - canCollide: False type: Physics - uid: 3076 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 44.5,7.5 @@ -30646,7 +30623,7 @@ entities: - canCollide: False type: Physics - uid: 3077 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 44.5,6.5 @@ -30657,7 +30634,7 @@ entities: - canCollide: False type: Physics - uid: 3078 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 44.5,5.5 @@ -30668,7 +30645,7 @@ entities: - canCollide: False type: Physics - uid: 3079 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 44.5,4.5 @@ -30679,7 +30656,7 @@ entities: - canCollide: False type: Physics - uid: 3080 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 45.5,4.5 @@ -30690,7 +30667,7 @@ entities: - canCollide: False type: Physics - uid: 3081 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 46.5,4.5 @@ -30701,7 +30678,7 @@ entities: - canCollide: False type: Physics - uid: 3082 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 47.5,4.5 @@ -30712,7 +30689,7 @@ entities: - canCollide: False type: Physics - uid: 3083 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 48.5,4.5 @@ -30723,7 +30700,7 @@ entities: - canCollide: False type: Physics - uid: 3084 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 49.5,4.5 @@ -30734,7 +30711,7 @@ entities: - canCollide: False type: Physics - uid: 3085 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 33.5,-3.5 @@ -30745,7 +30722,7 @@ entities: - canCollide: False type: Physics - uid: 3086 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 33.5,-4.5 @@ -30756,7 +30733,7 @@ entities: - canCollide: False type: Physics - uid: 3087 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 43.5,4.5 @@ -30767,7 +30744,7 @@ entities: - canCollide: False type: Physics - uid: 3088 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 43.5,3.5 @@ -30778,7 +30755,7 @@ entities: - canCollide: False type: Physics - uid: 3089 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 43.5,2.5 @@ -30789,7 +30766,7 @@ entities: - canCollide: False type: Physics - uid: 3090 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 43.5,1.5 @@ -30800,7 +30777,7 @@ entities: - canCollide: False type: Physics - uid: 3091 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 43.5,0.5 @@ -30811,7 +30788,7 @@ entities: - canCollide: False type: Physics - uid: 3092 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 43.5,-0.5 @@ -30822,7 +30799,7 @@ entities: - canCollide: False type: Physics - uid: 3093 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 43.5,-1.5 @@ -30833,7 +30810,7 @@ entities: - canCollide: False type: Physics - uid: 3094 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 43.5,-2.5 @@ -30844,7 +30821,7 @@ entities: - canCollide: False type: Physics - uid: 3095 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 43.5,-3.5 @@ -30855,7 +30832,7 @@ entities: - canCollide: False type: Physics - uid: 3096 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 42.5,-3.5 @@ -30866,7 +30843,7 @@ entities: - canCollide: False type: Physics - uid: 3097 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 41.5,-3.5 @@ -30877,7 +30854,7 @@ entities: - canCollide: False type: Physics - uid: 3098 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 40.5,-3.5 @@ -30888,7 +30865,7 @@ entities: - canCollide: False type: Physics - uid: 3099 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 39.5,-3.5 @@ -30899,7 +30876,7 @@ entities: - canCollide: False type: Physics - uid: 3100 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 38.5,-3.5 @@ -30910,7 +30887,7 @@ entities: - canCollide: False type: Physics - uid: 3101 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 37.5,-3.5 @@ -30921,7 +30898,7 @@ entities: - canCollide: False type: Physics - uid: 3102 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 37.5,-4.5 @@ -30932,7 +30909,7 @@ entities: - canCollide: False type: Physics - uid: 3103 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 37.5,-5.5 @@ -30943,7 +30920,7 @@ entities: - canCollide: False type: Physics - uid: 3104 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 37.5,-6.5 @@ -30954,7 +30931,7 @@ entities: - canCollide: False type: Physics - uid: 3105 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 36.5,-6.5 @@ -30965,7 +30942,7 @@ entities: - canCollide: False type: Physics - uid: 3106 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 35.5,-6.5 @@ -30976,7 +30953,7 @@ entities: - canCollide: False type: Physics - uid: 3107 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 34.5,-6.5 @@ -30987,7 +30964,7 @@ entities: - canCollide: False type: Physics - uid: 3108 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 33.5,-6.5 @@ -30996,7 +30973,7 @@ entities: - canCollide: False type: Physics - uid: 3109 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 32.5,-6.5 @@ -31007,7 +30984,7 @@ entities: - canCollide: False type: Physics - uid: 3110 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 31.5,-6.5 @@ -31018,7 +30995,7 @@ entities: - canCollide: False type: Physics - uid: 3111 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 30.5,-6.5 @@ -31029,7 +31006,7 @@ entities: - canCollide: False type: Physics - uid: 3112 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 29.5,-6.5 @@ -31038,7 +31015,7 @@ entities: - canCollide: False type: Physics - uid: 3113 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 28.5,-6.5 @@ -31047,7 +31024,7 @@ entities: - canCollide: False type: Physics - uid: 3114 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 27.5,-6.5 @@ -31056,7 +31033,7 @@ entities: - canCollide: False type: Physics - uid: 3115 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 27.5,-7.5 @@ -31067,7 +31044,7 @@ entities: - canCollide: False type: Physics - uid: 3116 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 27.5,-8.5 @@ -31078,7 +31055,7 @@ entities: - canCollide: False type: Physics - uid: 3117 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 27.5,-9.5 @@ -31089,7 +31066,7 @@ entities: - canCollide: False type: Physics - uid: 3118 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 27.5,-10.5 @@ -31100,7 +31077,7 @@ entities: - canCollide: False type: Physics - uid: 3119 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 27.5,-11.5 @@ -31111,7 +31088,7 @@ entities: - canCollide: False type: Physics - uid: 3120 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 27.5,-12.5 @@ -31122,7 +31099,7 @@ entities: - canCollide: False type: Physics - uid: 3121 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 27.5,-13.5 @@ -31133,7 +31110,7 @@ entities: - canCollide: False type: Physics - uid: 3122 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 27.5,-14.5 @@ -31144,7 +31121,7 @@ entities: - canCollide: False type: Physics - uid: 3123 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 27.5,-15.5 @@ -31155,7 +31132,7 @@ entities: - canCollide: False type: Physics - uid: 3124 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 27.5,-16.5 @@ -31166,7 +31143,7 @@ entities: - canCollide: False type: Physics - uid: 3125 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 27.5,-17.5 @@ -31177,7 +31154,7 @@ entities: - canCollide: False type: Physics - uid: 3126 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 27.5,-18.5 @@ -31188,7 +31165,7 @@ entities: - canCollide: False type: Physics - uid: 3127 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 26.5,-18.5 @@ -31199,7 +31176,7 @@ entities: - canCollide: False type: Physics - uid: 3128 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 25.5,-18.5 @@ -31210,7 +31187,7 @@ entities: - canCollide: False type: Physics - uid: 3129 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 24.5,-18.5 @@ -31221,7 +31198,7 @@ entities: - canCollide: False type: Physics - uid: 3130 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 47.5,-1.5 @@ -31230,7 +31207,7 @@ entities: - canCollide: False type: Physics - uid: 3131 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 47.5,-2.5 @@ -31239,7 +31216,7 @@ entities: - canCollide: False type: Physics - uid: 3132 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 47.5,-3.5 @@ -31248,7 +31225,7 @@ entities: - canCollide: False type: Physics - uid: 3133 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 48.5,-2.5 @@ -31257,7 +31234,7 @@ entities: - canCollide: False type: Physics - uid: 3134 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 49.5,-2.5 @@ -31266,7 +31243,7 @@ entities: - canCollide: False type: Physics - uid: 3135 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 50.5,-2.5 @@ -31275,7 +31252,7 @@ entities: - canCollide: False type: Physics - uid: 3136 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 51.5,-2.5 @@ -31284,7 +31261,7 @@ entities: - canCollide: False type: Physics - uid: 3137 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 51.5,-3.5 @@ -31293,7 +31270,7 @@ entities: - canCollide: False type: Physics - uid: 3138 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 51.5,-4.5 @@ -31302,7 +31279,7 @@ entities: - canCollide: False type: Physics - uid: 3139 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 41.5,10.5 @@ -31313,7 +31290,7 @@ entities: - canCollide: False type: Physics - uid: 3140 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 41.5,11.5 @@ -31324,7 +31301,7 @@ entities: - canCollide: False type: Physics - uid: 3141 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 41.5,12.5 @@ -31335,7 +31312,7 @@ entities: - canCollide: False type: Physics - uid: 3142 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 41.5,13.5 @@ -31346,7 +31323,7 @@ entities: - canCollide: False type: Physics - uid: 3143 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 28.5,14.5 @@ -31355,7 +31332,7 @@ entities: - canCollide: False type: Physics - uid: 3144 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 28.5,13.5 @@ -31364,7 +31341,7 @@ entities: - canCollide: False type: Physics - uid: 3145 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 28.5,12.5 @@ -31375,7 +31352,7 @@ entities: - canCollide: False type: Physics - uid: 3146 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 28.5,11.5 @@ -31386,7 +31363,7 @@ entities: - canCollide: False type: Physics - uid: 3147 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 28.5,10.5 @@ -31397,7 +31374,7 @@ entities: - canCollide: False type: Physics - uid: 3148 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 29.5,10.5 @@ -31408,7 +31385,7 @@ entities: - canCollide: False type: Physics - uid: 3149 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 28.5,9.5 @@ -31417,7 +31394,7 @@ entities: - canCollide: False type: Physics - uid: 3150 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 27.5,9.5 @@ -31428,7 +31405,7 @@ entities: - canCollide: False type: Physics - uid: 3151 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 26.5,9.5 @@ -31437,7 +31414,7 @@ entities: - canCollide: False type: Physics - uid: 3152 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 25.5,9.5 @@ -31448,7 +31425,7 @@ entities: - canCollide: False type: Physics - uid: 3153 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 26.5,10.5 @@ -31459,7 +31436,7 @@ entities: - canCollide: False type: Physics - uid: 3154 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 26.5,11.5 @@ -31470,7 +31447,7 @@ entities: - canCollide: False type: Physics - uid: 3155 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 27.5,8.5 @@ -31479,7 +31456,7 @@ entities: - canCollide: False type: Physics - uid: 3156 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 27.5,7.5 @@ -31490,7 +31467,7 @@ entities: - canCollide: False type: Physics - uid: 3157 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 30.5,10.5 @@ -31501,7 +31478,7 @@ entities: - canCollide: False type: Physics - uid: 3158 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 31.5,10.5 @@ -31512,7 +31489,7 @@ entities: - canCollide: False type: Physics - uid: 3159 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 32.5,10.5 @@ -31523,7 +31500,7 @@ entities: - canCollide: False type: Physics - uid: 3160 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 33.5,10.5 @@ -31534,7 +31511,7 @@ entities: - canCollide: False type: Physics - uid: 3161 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 34.5,10.5 @@ -31545,7 +31522,7 @@ entities: - canCollide: False type: Physics - uid: 3162 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 35.5,10.5 @@ -31556,7 +31533,7 @@ entities: - canCollide: False type: Physics - uid: 3163 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 36.5,10.5 @@ -31567,7 +31544,7 @@ entities: - canCollide: False type: Physics - uid: 3164 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 30.5,9.5 @@ -31578,7 +31555,7 @@ entities: - canCollide: False type: Physics - uid: 3165 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 33.5,9.5 @@ -31589,7 +31566,7 @@ entities: - canCollide: False type: Physics - uid: 3166 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 35.5,9.5 @@ -31600,7 +31577,7 @@ entities: - canCollide: False type: Physics - uid: 3167 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 35.5,8.5 @@ -31611,7 +31588,7 @@ entities: - canCollide: False type: Physics - uid: 3168 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 35.5,7.5 @@ -31620,7 +31597,7 @@ entities: - canCollide: False type: Physics - uid: 3169 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 36.5,11.5 @@ -31631,7 +31608,7 @@ entities: - canCollide: False type: Physics - uid: 3170 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 36.5,12.5 @@ -31642,7 +31619,7 @@ entities: - canCollide: False type: Physics - uid: 3171 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 30.5,11.5 @@ -31653,7 +31630,7 @@ entities: - canCollide: False type: Physics - uid: 3172 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 30.5,12.5 @@ -31664,7 +31641,7 @@ entities: - canCollide: False type: Physics - uid: 3173 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 24.5,14.5 @@ -31673,7 +31650,7 @@ entities: - canCollide: False type: Physics - uid: 3174 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 24.5,13.5 @@ -31684,7 +31661,7 @@ entities: - canCollide: False type: Physics - uid: 3175 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 23.5,13.5 @@ -31695,7 +31672,7 @@ entities: - canCollide: False type: Physics - uid: 3176 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 22.5,13.5 @@ -31706,7 +31683,7 @@ entities: - canCollide: False type: Physics - uid: 3177 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 58.5,-27.5 @@ -31732,7 +31709,7 @@ entities: ents: [] type: ContainerContainer - uid: 3180 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 21.5,13.5 @@ -31743,7 +31720,7 @@ entities: - canCollide: False type: Physics - uid: 3181 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 20.5,13.5 @@ -31754,7 +31731,7 @@ entities: - canCollide: False type: Physics - uid: 3182 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 58.5,-26.5 @@ -31763,7 +31740,7 @@ entities: - canCollide: False type: Physics - uid: 3183 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 58.5,-25.5 @@ -31772,7 +31749,7 @@ entities: - canCollide: False type: Physics - uid: 3184 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 19.5,13.5 @@ -31783,7 +31760,7 @@ entities: - canCollide: False type: Physics - uid: 3185 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 18.5,13.5 @@ -31794,7 +31771,7 @@ entities: - canCollide: False type: Physics - uid: 3186 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 21.5,12.5 @@ -31805,7 +31782,7 @@ entities: - canCollide: False type: Physics - uid: 3187 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 21.5,11.5 @@ -31816,7 +31793,7 @@ entities: - canCollide: False type: Physics - uid: 3188 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 21.5,10.5 @@ -31827,7 +31804,7 @@ entities: - canCollide: False type: Physics - uid: 3189 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 21.5,9.5 @@ -31838,7 +31815,7 @@ entities: - canCollide: False type: Physics - uid: 3190 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 21.5,8.5 @@ -31849,7 +31826,7 @@ entities: - canCollide: False type: Physics - uid: 3191 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 22.5,8.5 @@ -31860,7 +31837,7 @@ entities: - canCollide: False type: Physics - uid: 3192 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 23.5,8.5 @@ -31871,7 +31848,7 @@ entities: - canCollide: False type: Physics - uid: 3193 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 20.5,8.5 @@ -31882,7 +31859,7 @@ entities: - canCollide: False type: Physics - uid: 3194 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 19.5,8.5 @@ -31893,7 +31870,7 @@ entities: - canCollide: False type: Physics - uid: 3195 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 18.5,8.5 @@ -31904,7 +31881,7 @@ entities: - canCollide: False type: Physics - uid: 3196 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 17.5,8.5 @@ -31913,7 +31890,7 @@ entities: - canCollide: False type: Physics - uid: 3197 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 18.5,12.5 @@ -31924,7 +31901,7 @@ entities: - canCollide: False type: Physics - uid: 3198 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 18.5,11.5 @@ -31935,7 +31912,7 @@ entities: - canCollide: False type: Physics - uid: 3199 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 12.5,13.5 @@ -31944,7 +31921,7 @@ entities: - canCollide: False type: Physics - uid: 3200 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 12.5,12.5 @@ -31955,7 +31932,7 @@ entities: - canCollide: False type: Physics - uid: 3201 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 12.5,11.5 @@ -31966,7 +31943,7 @@ entities: - canCollide: False type: Physics - uid: 3202 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 12.5,10.5 @@ -31977,7 +31954,7 @@ entities: - canCollide: False type: Physics - uid: 3203 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 13.5,10.5 @@ -31988,7 +31965,7 @@ entities: - canCollide: False type: Physics - uid: 3204 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 14.5,10.5 @@ -31999,7 +31976,7 @@ entities: - canCollide: False type: Physics - uid: 3205 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 15.5,10.5 @@ -32010,7 +31987,7 @@ entities: - canCollide: False type: Physics - uid: 3206 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 16.5,10.5 @@ -32021,7 +31998,7 @@ entities: - canCollide: False type: Physics - uid: 3207 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 15.5,11.5 @@ -32032,7 +32009,7 @@ entities: - canCollide: False type: Physics - uid: 3208 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 13.5,9.5 @@ -32043,7 +32020,7 @@ entities: - canCollide: False type: Physics - uid: 3209 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 11.5,10.5 @@ -32052,7 +32029,7 @@ entities: - canCollide: False type: Physics - uid: 3210 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 10.5,10.5 @@ -32063,7 +32040,7 @@ entities: - canCollide: False type: Physics - uid: 3211 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 9.5,10.5 @@ -32074,7 +32051,7 @@ entities: - canCollide: False type: Physics - uid: 3212 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 8.5,10.5 @@ -32085,7 +32062,7 @@ entities: - canCollide: False type: Physics - uid: 3213 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 7.5,10.5 @@ -32096,7 +32073,7 @@ entities: - canCollide: False type: Physics - uid: 3214 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 6.5,10.5 @@ -32107,7 +32084,7 @@ entities: - canCollide: False type: Physics - uid: 3215 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 8.5,11.5 @@ -32118,7 +32095,7 @@ entities: - canCollide: False type: Physics - uid: 3216 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 8.5,9.5 @@ -32129,7 +32106,7 @@ entities: - canCollide: False type: Physics - uid: 3217 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 8.5,8.5 @@ -32140,7 +32117,7 @@ entities: - canCollide: False type: Physics - uid: 3218 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 8.5,7.5 @@ -32151,7 +32128,7 @@ entities: - canCollide: False type: Physics - uid: 3219 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 8.5,6.5 @@ -32160,7 +32137,7 @@ entities: - canCollide: False type: Physics - uid: 3220 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 12.5,13.5 @@ -32169,7 +32146,7 @@ entities: - canCollide: False type: Physics - uid: 3221 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 12.5,14.5 @@ -32178,7 +32155,7 @@ entities: - canCollide: False type: Physics - uid: 3222 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 11.5,14.5 @@ -32187,7 +32164,7 @@ entities: - canCollide: False type: Physics - uid: 3223 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 10.5,14.5 @@ -32196,7 +32173,7 @@ entities: - canCollide: False type: Physics - uid: 3224 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 9.5,14.5 @@ -32207,7 +32184,7 @@ entities: - canCollide: False type: Physics - uid: 3225 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 8.5,14.5 @@ -32218,7 +32195,7 @@ entities: - canCollide: False type: Physics - uid: 3226 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 7.5,14.5 @@ -32229,7 +32206,7 @@ entities: - canCollide: False type: Physics - uid: 3227 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 6.5,14.5 @@ -32238,7 +32215,7 @@ entities: - canCollide: False type: Physics - uid: 3228 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 12.5,14.5 @@ -32247,7 +32224,7 @@ entities: - canCollide: False type: Physics - uid: 3229 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 13.5,14.5 @@ -32258,7 +32235,7 @@ entities: - canCollide: False type: Physics - uid: 3230 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 14.5,14.5 @@ -32269,7 +32246,7 @@ entities: - canCollide: False type: Physics - uid: 3231 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 15.5,14.5 @@ -32280,7 +32257,7 @@ entities: - canCollide: False type: Physics - uid: 3232 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 15.5,15.5 @@ -32291,7 +32268,7 @@ entities: - canCollide: False type: Physics - uid: 3233 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 13.5,16.5 @@ -32302,7 +32279,7 @@ entities: - canCollide: False type: Physics - uid: 3234 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 13.5,15.5 @@ -32313,7 +32290,7 @@ entities: - canCollide: False type: Physics - uid: 3235 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 9.5,22.5 @@ -32322,7 +32299,7 @@ entities: - canCollide: False type: Physics - uid: 3236 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 9.5,21.5 @@ -32333,7 +32310,7 @@ entities: - canCollide: False type: Physics - uid: 3237 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 9.5,20.5 @@ -32344,7 +32321,7 @@ entities: - canCollide: False type: Physics - uid: 3238 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 9.5,19.5 @@ -32355,7 +32332,7 @@ entities: - canCollide: False type: Physics - uid: 3239 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 9.5,18.5 @@ -32366,7 +32343,7 @@ entities: - canCollide: False type: Physics - uid: 3240 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 9.5,17.5 @@ -32377,7 +32354,7 @@ entities: - canCollide: False type: Physics - uid: 3241 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 9.5,16.5 @@ -32388,7 +32365,7 @@ entities: - canCollide: False type: Physics - uid: 3242 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 10.5,20.5 @@ -32399,7 +32376,7 @@ entities: - canCollide: False type: Physics - uid: 3243 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 8.5,17.5 @@ -32410,7 +32387,7 @@ entities: - canCollide: False type: Physics - uid: 3244 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 8.5,17.5 @@ -32421,7 +32398,7 @@ entities: - canCollide: False type: Physics - uid: 3245 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 7.5,17.5 @@ -32432,7 +32409,7 @@ entities: - canCollide: False type: Physics - uid: 3246 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 8.5,20.5 @@ -32443,7 +32420,7 @@ entities: - canCollide: False type: Physics - uid: 3247 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 6.5,17.5 @@ -32454,7 +32431,7 @@ entities: - canCollide: False type: Physics - uid: 3248 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 5.5,17.5 @@ -32465,7 +32442,7 @@ entities: - canCollide: False type: Physics - uid: 3249 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 5.5,16.5 @@ -32476,7 +32453,7 @@ entities: - canCollide: False type: Physics - uid: 3250 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 4.5,17.5 @@ -32487,7 +32464,7 @@ entities: - canCollide: False type: Physics - uid: 3251 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 3.5,17.5 @@ -32498,7 +32475,7 @@ entities: - canCollide: False type: Physics - uid: 3252 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 3.5,18.5 @@ -32509,7 +32486,7 @@ entities: - canCollide: False type: Physics - uid: 3253 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 3.5,19.5 @@ -32520,7 +32497,7 @@ entities: - canCollide: False type: Physics - uid: 3254 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 3.5,20.5 @@ -32531,7 +32508,7 @@ entities: - canCollide: False type: Physics - uid: 3255 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 3.5,20.5 @@ -32542,7 +32519,7 @@ entities: - canCollide: False type: Physics - uid: 3256 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 3.5,21.5 @@ -32553,7 +32530,7 @@ entities: - canCollide: False type: Physics - uid: 3257 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 3.5,22.5 @@ -32562,7 +32539,7 @@ entities: - canCollide: False type: Physics - uid: 3258 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 2.5,20.5 @@ -32573,7 +32550,7 @@ entities: - canCollide: False type: Physics - uid: 3259 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 1.5,20.5 @@ -32584,7 +32561,7 @@ entities: - canCollide: False type: Physics - uid: 3260 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 9.5,27.5 @@ -32593,7 +32570,7 @@ entities: - canCollide: False type: Physics - uid: 3261 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 9.5,26.5 @@ -32604,7 +32581,7 @@ entities: - canCollide: False type: Physics - uid: 3262 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 9.5,25.5 @@ -32615,7 +32592,7 @@ entities: - canCollide: False type: Physics - uid: 3263 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 9.5,24.5 @@ -32626,7 +32603,7 @@ entities: - canCollide: False type: Physics - uid: 3264 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 8.5,24.5 @@ -32637,7 +32614,7 @@ entities: - canCollide: False type: Physics - uid: 3265 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 7.5,24.5 @@ -32648,7 +32625,7 @@ entities: - canCollide: False type: Physics - uid: 3266 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 6.5,24.5 @@ -32659,7 +32636,7 @@ entities: - canCollide: False type: Physics - uid: 3267 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 9.5,28.5 @@ -32670,7 +32647,7 @@ entities: - canCollide: False type: Physics - uid: 3268 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 9.5,29.5 @@ -32681,7 +32658,7 @@ entities: - canCollide: False type: Physics - uid: 3269 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 9.5,30.5 @@ -32692,7 +32669,7 @@ entities: - canCollide: False type: Physics - uid: 3270 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 8.5,30.5 @@ -32703,7 +32680,7 @@ entities: - canCollide: False type: Physics - uid: 3271 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 7.5,30.5 @@ -32714,7 +32691,7 @@ entities: - canCollide: False type: Physics - uid: 3272 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 6.5,30.5 @@ -32725,7 +32702,7 @@ entities: - canCollide: False type: Physics - uid: 3273 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 6.5,31.5 @@ -32736,7 +32713,7 @@ entities: - canCollide: False type: Physics - uid: 3274 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -2.5,27.5 @@ -32745,7 +32722,7 @@ entities: - canCollide: False type: Physics - uid: 3275 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -2.5,28.5 @@ -32756,7 +32733,7 @@ entities: - canCollide: False type: Physics - uid: 3276 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -2.5,29.5 @@ -32767,7 +32744,7 @@ entities: - canCollide: False type: Physics - uid: 3277 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -2.5,30.5 @@ -32778,7 +32755,7 @@ entities: - canCollide: False type: Physics - uid: 3278 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -1.5,30.5 @@ -32789,7 +32766,7 @@ entities: - canCollide: False type: Physics - uid: 3279 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -0.5,30.5 @@ -32800,7 +32777,7 @@ entities: - canCollide: False type: Physics - uid: 3280 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 0.5,30.5 @@ -32811,7 +32788,7 @@ entities: - canCollide: False type: Physics - uid: 3281 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 1.5,30.5 @@ -32822,7 +32799,7 @@ entities: - canCollide: False type: Physics - uid: 3282 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 2.5,30.5 @@ -32833,7 +32810,7 @@ entities: - canCollide: False type: Physics - uid: 3283 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 3.5,30.5 @@ -32844,7 +32821,7 @@ entities: - canCollide: False type: Physics - uid: 3284 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 0.5,31.5 @@ -32855,7 +32832,7 @@ entities: - canCollide: False type: Physics - uid: 3285 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 3.5,31.5 @@ -32866,7 +32843,7 @@ entities: - canCollide: False type: Physics - uid: 3286 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -2.5,26.5 @@ -32877,7 +32854,7 @@ entities: - canCollide: False type: Physics - uid: 3287 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -2.5,25.5 @@ -32888,7 +32865,7 @@ entities: - canCollide: False type: Physics - uid: 3288 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -1.5,25.5 @@ -32899,7 +32876,7 @@ entities: - canCollide: False type: Physics - uid: 3289 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -0.5,25.5 @@ -32910,7 +32887,7 @@ entities: - canCollide: False type: Physics - uid: 3290 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 0.5,25.5 @@ -32921,7 +32898,7 @@ entities: - canCollide: False type: Physics - uid: 3291 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 0.5,24.5 @@ -32932,7 +32909,7 @@ entities: - canCollide: False type: Physics - uid: 3292 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -2.5,24.5 @@ -32943,7 +32920,7 @@ entities: - canCollide: False type: Physics - uid: 3293 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -2.5,23.5 @@ -32954,7 +32931,7 @@ entities: - canCollide: False type: Physics - uid: 3294 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -1.5,23.5 @@ -32979,7 +32956,7 @@ entities: parent: 853 type: Transform - uid: 3297 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 41.5,6.5 @@ -32990,7 +32967,7 @@ entities: - canCollide: False type: Physics - uid: 3298 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 41.5,5.5 @@ -33001,7 +32978,7 @@ entities: - canCollide: False type: Physics - uid: 3299 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 42.5,4.5 @@ -33012,7 +32989,7 @@ entities: - canCollide: False type: Physics - uid: 3300 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 42.5,3.5 @@ -33023,7 +33000,7 @@ entities: - canCollide: False type: Physics - uid: 3301 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 42.5,2.5 @@ -33034,7 +33011,7 @@ entities: - canCollide: False type: Physics - uid: 3302 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 42.5,1.5 @@ -33045,7 +33022,7 @@ entities: - canCollide: False type: Physics - uid: 3303 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 42.5,0.5 @@ -33054,7 +33031,7 @@ entities: - canCollide: False type: Physics - uid: 3304 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 42.5,-0.5 @@ -33063,7 +33040,7 @@ entities: - canCollide: False type: Physics - uid: 3305 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 42.5,-1.5 @@ -33072,7 +33049,7 @@ entities: - canCollide: False type: Physics - uid: 3306 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 42.5,-2.5 @@ -33081,7 +33058,7 @@ entities: - canCollide: False type: Physics - uid: 3307 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 42.5,-3.5 @@ -33092,7 +33069,7 @@ entities: - canCollide: False type: Physics - uid: 3308 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 42.5,-4.5 @@ -33101,7 +33078,7 @@ entities: - canCollide: False type: Physics - uid: 3309 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 42.5,-4.5 @@ -33110,7 +33087,7 @@ entities: - canCollide: False type: Physics - uid: 3310 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 41.5,-4.5 @@ -33119,7 +33096,7 @@ entities: - canCollide: False type: Physics - uid: 3311 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 40.5,-4.5 @@ -33128,7 +33105,7 @@ entities: - canCollide: False type: Physics - uid: 3312 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 39.5,-4.5 @@ -33137,7 +33114,7 @@ entities: - canCollide: False type: Physics - uid: 3313 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 38.5,-4.5 @@ -33146,7 +33123,7 @@ entities: - canCollide: False type: Physics - uid: 3314 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 38.5,-5.5 @@ -33155,7 +33132,7 @@ entities: - canCollide: False type: Physics - uid: 3315 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 38.5,-6.5 @@ -33164,7 +33141,7 @@ entities: - canCollide: False type: Physics - uid: 3316 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 38.5,-7.5 @@ -33173,7 +33150,7 @@ entities: - canCollide: False type: Physics - uid: 3317 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 37.5,-7.5 @@ -33182,7 +33159,7 @@ entities: - canCollide: False type: Physics - uid: 3318 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 36.5,-7.5 @@ -33191,7 +33168,7 @@ entities: - canCollide: False type: Physics - uid: 3319 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 35.5,-7.5 @@ -33200,7 +33177,7 @@ entities: - canCollide: False type: Physics - uid: 3320 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 34.5,-7.5 @@ -33209,7 +33186,7 @@ entities: - canCollide: False type: Physics - uid: 3321 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 33.5,-7.5 @@ -33218,7 +33195,7 @@ entities: - canCollide: False type: Physics - uid: 3322 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 32.5,-7.5 @@ -33227,7 +33204,7 @@ entities: - canCollide: False type: Physics - uid: 3323 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 31.5,-7.5 @@ -33236,7 +33213,7 @@ entities: - canCollide: False type: Physics - uid: 3324 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 30.5,-7.5 @@ -33245,7 +33222,7 @@ entities: - canCollide: False type: Physics - uid: 3325 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 29.5,-7.5 @@ -33254,7 +33231,7 @@ entities: - canCollide: False type: Physics - uid: 3326 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 28.5,-7.5 @@ -33263,7 +33240,7 @@ entities: - canCollide: False type: Physics - uid: 3327 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 27.5,-7.5 @@ -33274,7 +33251,7 @@ entities: - canCollide: False type: Physics - uid: 3328 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 26.5,-7.5 @@ -33283,7 +33260,7 @@ entities: - canCollide: False type: Physics - uid: 3329 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 26.5,-8.5 @@ -33292,7 +33269,7 @@ entities: - canCollide: False type: Physics - uid: 3330 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 26.5,-9.5 @@ -33301,7 +33278,7 @@ entities: - canCollide: False type: Physics - uid: 3331 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 26.5,-10.5 @@ -33310,7 +33287,7 @@ entities: - canCollide: False type: Physics - uid: 3332 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 26.5,-11.5 @@ -33319,7 +33296,7 @@ entities: - canCollide: False type: Physics - uid: 3333 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 26.5,-12.5 @@ -33328,7 +33305,7 @@ entities: - canCollide: False type: Physics - uid: 3334 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 26.5,-13.5 @@ -33337,7 +33314,7 @@ entities: - canCollide: False type: Physics - uid: 3335 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 26.5,-14.5 @@ -33346,7 +33323,7 @@ entities: - canCollide: False type: Physics - uid: 3336 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 26.5,-15.5 @@ -33355,7 +33332,7 @@ entities: - canCollide: False type: Physics - uid: 3337 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 26.5,-16.5 @@ -33364,7 +33341,7 @@ entities: - canCollide: False type: Physics - uid: 3338 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 26.5,-17.5 @@ -33373,7 +33350,7 @@ entities: - canCollide: False type: Physics - uid: 3339 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 25.5,-9.5 @@ -33382,7 +33359,7 @@ entities: - canCollide: False type: Physics - uid: 3340 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 24.5,-9.5 @@ -33391,7 +33368,7 @@ entities: - canCollide: False type: Physics - uid: 3341 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 23.5,-9.5 @@ -33400,7 +33377,7 @@ entities: - canCollide: False type: Physics - uid: 3342 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 22.5,-9.5 @@ -33409,7 +33386,7 @@ entities: - canCollide: False type: Physics - uid: 3343 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 21.5,-9.5 @@ -33418,7 +33395,7 @@ entities: - canCollide: False type: Physics - uid: 3344 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 25.5,-17.5 @@ -33427,7 +33404,7 @@ entities: - canCollide: False type: Physics - uid: 3345 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 24.5,-17.5 @@ -33436,7 +33413,7 @@ entities: - canCollide: False type: Physics - uid: 3346 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 23.5,-17.5 @@ -33445,7 +33422,7 @@ entities: - canCollide: False type: Physics - uid: 3347 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 22.5,-17.5 @@ -33454,7 +33431,7 @@ entities: - canCollide: False type: Physics - uid: 3348 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 22.5,-18.5 @@ -33463,7 +33440,7 @@ entities: - canCollide: False type: Physics - uid: 3349 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 22.5,-19.5 @@ -33472,7 +33449,7 @@ entities: - canCollide: False type: Physics - uid: 3350 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 22.5,-20.5 @@ -33481,7 +33458,7 @@ entities: - canCollide: False type: Physics - uid: 3351 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 22.5,-21.5 @@ -33490,7 +33467,7 @@ entities: - canCollide: False type: Physics - uid: 3352 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 22.5,-22.5 @@ -33499,7 +33476,7 @@ entities: - canCollide: False type: Physics - uid: 3353 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 22.5,-23.5 @@ -33508,7 +33485,7 @@ entities: - canCollide: False type: Physics - uid: 3354 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 22.5,-24.5 @@ -33517,7 +33494,7 @@ entities: - canCollide: False type: Physics - uid: 3355 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 22.5,-25.5 @@ -33526,7 +33503,7 @@ entities: - canCollide: False type: Physics - uid: 3356 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 21.5,-25.5 @@ -33535,7 +33512,7 @@ entities: - canCollide: False type: Physics - uid: 3357 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 20.5,-25.5 @@ -33544,7 +33521,7 @@ entities: - canCollide: False type: Physics - uid: 3358 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 19.5,-25.5 @@ -33553,7 +33530,7 @@ entities: - canCollide: False type: Physics - uid: 3359 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 18.5,-25.5 @@ -33562,7 +33539,7 @@ entities: - canCollide: False type: Physics - uid: 3360 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 17.5,-25.5 @@ -33571,7 +33548,7 @@ entities: - canCollide: False type: Physics - uid: 3361 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 16.5,-25.5 @@ -33580,7 +33557,7 @@ entities: - canCollide: False type: Physics - uid: 3362 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 15.5,-25.5 @@ -33589,7 +33566,7 @@ entities: - canCollide: False type: Physics - uid: 3363 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 14.5,-25.5 @@ -33598,7 +33575,7 @@ entities: - canCollide: False type: Physics - uid: 3364 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 14.5,-24.5 @@ -33607,7 +33584,7 @@ entities: - canCollide: False type: Physics - uid: 3365 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 14.5,-23.5 @@ -33616,7 +33593,7 @@ entities: - canCollide: False type: Physics - uid: 3366 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 14.5,-22.5 @@ -33625,7 +33602,7 @@ entities: - canCollide: False type: Physics - uid: 3367 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 14.5,-21.5 @@ -33634,7 +33611,7 @@ entities: - canCollide: False type: Physics - uid: 3368 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 14.5,-20.5 @@ -33643,7 +33620,7 @@ entities: - canCollide: False type: Physics - uid: 3369 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 13.5,-20.5 @@ -33652,7 +33629,7 @@ entities: - canCollide: False type: Physics - uid: 3370 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 12.5,-20.5 @@ -33661,7 +33638,7 @@ entities: - canCollide: False type: Physics - uid: 3371 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 11.5,-20.5 @@ -33670,7 +33647,7 @@ entities: - canCollide: False type: Physics - uid: 3372 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 10.5,-20.5 @@ -33679,7 +33656,7 @@ entities: - canCollide: False type: Physics - uid: 3373 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 9.5,-20.5 @@ -33688,7 +33665,7 @@ entities: - canCollide: False type: Physics - uid: 3374 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 8.5,-20.5 @@ -33697,7 +33674,7 @@ entities: - canCollide: False type: Physics - uid: 3375 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 7.5,-20.5 @@ -33706,7 +33683,7 @@ entities: - canCollide: False type: Physics - uid: 3376 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 6.5,-20.5 @@ -33715,7 +33692,7 @@ entities: - canCollide: False type: Physics - uid: 3377 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 5.5,-20.5 @@ -33726,7 +33703,7 @@ entities: - canCollide: False type: Physics - uid: 3378 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 4.5,-20.5 @@ -33744,10 +33721,6 @@ entities: type: Transform - startingCharge: 2366791.8 type: Battery - - drawRate: 8000 - type: PowerConsumer - - supplyRate: 6000 - type: PowerSupplier - uid: 3380 type: SalternApc components: @@ -33757,7 +33730,7 @@ entities: - startingCharge: 11999.918 type: Battery - uid: 3381 - type: MVWire + type: CableMV components: - pos: 14.5,-25.5 parent: 853 @@ -33765,7 +33738,7 @@ entities: - canCollide: False type: Physics - uid: 3382 - type: MVWire + type: CableMV components: - pos: 13.5,-25.5 parent: 853 @@ -33773,7 +33746,7 @@ entities: - canCollide: False type: Physics - uid: 3383 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 2.5,-23.5 @@ -33784,7 +33757,7 @@ entities: - canCollide: False type: Physics - uid: 3384 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 1.5,-23.5 @@ -33795,7 +33768,7 @@ entities: - canCollide: False type: Physics - uid: 3385 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -0.5,-23.5 @@ -33804,7 +33777,7 @@ entities: - canCollide: False type: Physics - uid: 3386 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 0.5,-23.5 @@ -33813,7 +33786,7 @@ entities: - canCollide: False type: Physics - uid: 3387 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -0.5,-24.5 @@ -33822,7 +33795,7 @@ entities: - canCollide: False type: Physics - uid: 3388 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -0.5,-25.5 @@ -33831,7 +33804,7 @@ entities: - canCollide: False type: Physics - uid: 3389 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -0.5,-26.5 @@ -33840,7 +33813,7 @@ entities: - canCollide: False type: Physics - uid: 3390 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -1.5,-26.5 @@ -33849,7 +33822,7 @@ entities: - canCollide: False type: Physics - uid: 3391 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -2.5,-26.5 @@ -33858,7 +33831,7 @@ entities: - canCollide: False type: Physics - uid: 3392 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -3.5,-26.5 @@ -33867,7 +33840,7 @@ entities: - canCollide: False type: Physics - uid: 3393 - type: ApcExtensionCable + type: CableApcExtension components: - pos: -0.5,-15.5 parent: 853 @@ -33877,7 +33850,7 @@ entities: - canCollide: False type: Physics - uid: 3394 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -4.5,-26.5 @@ -33886,7 +33859,7 @@ entities: - canCollide: False type: Physics - uid: 3395 - type: ApcExtensionCable + type: CableApcExtension components: - pos: -1.5,-15.5 parent: 853 @@ -33896,7 +33869,7 @@ entities: - canCollide: False type: Physics - uid: 3396 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -7.5,-26.5 @@ -33905,7 +33878,7 @@ entities: - canCollide: False type: Physics - uid: 3397 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -8.5,-26.5 @@ -33914,7 +33887,7 @@ entities: - canCollide: False type: Physics - uid: 3398 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -9.5,-26.5 @@ -33923,7 +33896,7 @@ entities: - canCollide: False type: Physics - uid: 3399 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -10.5,-26.5 @@ -33932,7 +33905,7 @@ entities: - canCollide: False type: Physics - uid: 3400 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -11.5,-26.5 @@ -33941,7 +33914,7 @@ entities: - canCollide: False type: Physics - uid: 3401 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -11.5,-26.5 @@ -33950,7 +33923,7 @@ entities: - canCollide: False type: Physics - uid: 3402 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -11.5,-25.5 @@ -33959,7 +33932,7 @@ entities: - canCollide: False type: Physics - uid: 3403 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -11.5,-24.5 @@ -33968,7 +33941,7 @@ entities: - canCollide: False type: Physics - uid: 3404 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -11.5,-23.5 @@ -33977,7 +33950,7 @@ entities: - canCollide: False type: Physics - uid: 3405 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -11.5,-22.5 @@ -33986,7 +33959,7 @@ entities: - canCollide: False type: Physics - uid: 3406 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -11.5,-21.5 @@ -33997,7 +33970,7 @@ entities: - canCollide: False type: Physics - uid: 3407 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -11.5,-20.5 @@ -34008,7 +33981,7 @@ entities: - canCollide: False type: Physics - uid: 3408 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -11.5,-19.5 @@ -34019,7 +33992,7 @@ entities: - canCollide: False type: Physics - uid: 3409 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -11.5,-18.5 @@ -34030,7 +34003,7 @@ entities: - canCollide: False type: Physics - uid: 3410 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -11.5,-17.5 @@ -34041,7 +34014,7 @@ entities: - canCollide: False type: Physics - uid: 3411 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -11.5,-16.5 @@ -34050,7 +34023,7 @@ entities: - canCollide: False type: Physics - uid: 3412 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -11.5,-15.5 @@ -34061,7 +34034,7 @@ entities: - canCollide: False type: Physics - uid: 3413 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -11.5,-14.5 @@ -34070,7 +34043,7 @@ entities: - canCollide: False type: Physics - uid: 3414 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -10.5,-14.5 @@ -34079,7 +34052,7 @@ entities: - canCollide: False type: Physics - uid: 3415 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -9.5,-14.5 @@ -34088,7 +34061,7 @@ entities: - canCollide: False type: Physics - uid: 3416 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -9.5,-13.5 @@ -34097,7 +34070,7 @@ entities: - canCollide: False type: Physics - uid: 3417 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -9.5,-12.5 @@ -34106,7 +34079,7 @@ entities: - canCollide: False type: Physics - uid: 3418 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -9.5,-11.5 @@ -34115,7 +34088,7 @@ entities: - canCollide: False type: Physics - uid: 3419 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -9.5,-10.5 @@ -34124,7 +34097,7 @@ entities: - canCollide: False type: Physics - uid: 3420 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -8.5,-10.5 @@ -34133,7 +34106,7 @@ entities: - canCollide: False type: Physics - uid: 3421 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -7.5,-10.5 @@ -34142,7 +34115,7 @@ entities: - canCollide: False type: Physics - uid: 3422 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -6.5,-10.5 @@ -34151,7 +34124,7 @@ entities: - canCollide: False type: Physics - uid: 3423 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -5.5,-10.5 @@ -34160,7 +34133,7 @@ entities: - canCollide: False type: Physics - uid: 3424 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -4.5,-10.5 @@ -34169,7 +34142,7 @@ entities: - canCollide: False type: Physics - uid: 3425 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -3.5,-10.5 @@ -34178,7 +34151,7 @@ entities: - canCollide: False type: Physics - uid: 3426 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -2.5,-10.5 @@ -34187,7 +34160,7 @@ entities: - canCollide: False type: Physics - uid: 3427 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -1.5,-10.5 @@ -34196,7 +34169,7 @@ entities: - canCollide: False type: Physics - uid: 3428 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -0.5,-10.5 @@ -34205,7 +34178,7 @@ entities: - canCollide: False type: Physics - uid: 3429 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 0.5,-10.5 @@ -34214,7 +34187,7 @@ entities: - canCollide: False type: Physics - uid: 3430 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 0.5,-9.5 @@ -34223,7 +34196,7 @@ entities: - canCollide: False type: Physics - uid: 3431 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 0.5,-8.5 @@ -34232,7 +34205,7 @@ entities: - canCollide: False type: Physics - uid: 3432 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 0.5,-7.5 @@ -34241,7 +34214,7 @@ entities: - canCollide: False type: Physics - uid: 3433 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 0.5,-6.5 @@ -34252,7 +34225,7 @@ entities: - canCollide: False type: Physics - uid: 3434 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -12.5,-14.5 @@ -34261,7 +34234,7 @@ entities: - canCollide: False type: Physics - uid: 3435 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -13.5,-14.5 @@ -34270,7 +34243,7 @@ entities: - canCollide: False type: Physics - uid: 3436 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -14.5,-14.5 @@ -34279,7 +34252,7 @@ entities: - canCollide: False type: Physics - uid: 3437 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -15.5,-14.5 @@ -34288,7 +34261,7 @@ entities: - canCollide: False type: Physics - uid: 3438 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -16.5,-14.5 @@ -34297,7 +34270,7 @@ entities: - canCollide: False type: Physics - uid: 3439 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -17.5,-14.5 @@ -34306,7 +34279,7 @@ entities: - canCollide: False type: Physics - uid: 3440 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -18.5,-14.5 @@ -34315,7 +34288,7 @@ entities: - canCollide: False type: Physics - uid: 3441 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -18.5,-13.5 @@ -34324,7 +34297,7 @@ entities: - canCollide: False type: Physics - uid: 3442 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -18.5,-12.5 @@ -34333,7 +34306,7 @@ entities: - canCollide: False type: Physics - uid: 3443 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -18.5,-11.5 @@ -34342,7 +34315,7 @@ entities: - canCollide: False type: Physics - uid: 3444 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -18.5,-11.5 @@ -34351,7 +34324,7 @@ entities: - canCollide: False type: Physics - uid: 3445 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -19.5,-11.5 @@ -34360,7 +34333,7 @@ entities: - canCollide: False type: Physics - uid: 3446 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -20.5,-11.5 @@ -34369,7 +34342,7 @@ entities: - canCollide: False type: Physics - uid: 3447 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -21.5,-11.5 @@ -34378,7 +34351,7 @@ entities: - canCollide: False type: Physics - uid: 3448 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -22.5,-11.5 @@ -34387,7 +34360,7 @@ entities: - canCollide: False type: Physics - uid: 3449 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -23.5,-11.5 @@ -34396,7 +34369,7 @@ entities: - canCollide: False type: Physics - uid: 3450 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -24.5,-11.5 @@ -34405,7 +34378,7 @@ entities: - canCollide: False type: Physics - uid: 3451 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -25.5,-11.5 @@ -34414,7 +34387,7 @@ entities: - canCollide: False type: Physics - uid: 3452 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -26.5,-11.5 @@ -34423,7 +34396,7 @@ entities: - canCollide: False type: Physics - uid: 3453 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -27.5,-11.5 @@ -34432,7 +34405,7 @@ entities: - canCollide: False type: Physics - uid: 3454 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -21.5,-10.5 @@ -34443,7 +34416,7 @@ entities: - canCollide: False type: Physics - uid: 3455 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -28.5,-11.5 @@ -34452,7 +34425,7 @@ entities: - canCollide: False type: Physics - uid: 3456 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -29.5,-11.5 @@ -34461,7 +34434,7 @@ entities: - canCollide: False type: Physics - uid: 3457 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -30.5,-11.5 @@ -34470,7 +34443,7 @@ entities: - canCollide: False type: Physics - uid: 3458 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -31.5,-11.5 @@ -34479,7 +34452,7 @@ entities: - canCollide: False type: Physics - uid: 3459 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -32.5,-11.5 @@ -34488,7 +34461,7 @@ entities: - canCollide: False type: Physics - uid: 3460 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -33.5,-11.5 @@ -34497,7 +34470,7 @@ entities: - canCollide: False type: Physics - uid: 3461 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -33.5,-10.5 @@ -34506,7 +34479,7 @@ entities: - canCollide: False type: Physics - uid: 3462 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -33.5,-9.5 @@ -34515,7 +34488,7 @@ entities: - canCollide: False type: Physics - uid: 3463 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -33.5,-8.5 @@ -34524,7 +34497,7 @@ entities: - canCollide: False type: Physics - uid: 3464 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -33.5,-7.5 @@ -34533,7 +34506,7 @@ entities: - canCollide: False type: Physics - uid: 3465 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -33.5,-6.5 @@ -34542,7 +34515,7 @@ entities: - canCollide: False type: Physics - uid: 3466 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -33.5,-5.5 @@ -34551,7 +34524,7 @@ entities: - canCollide: False type: Physics - uid: 3467 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -33.5,-4.5 @@ -34560,7 +34533,7 @@ entities: - canCollide: False type: Physics - uid: 3468 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -33.5,-3.5 @@ -34569,7 +34542,7 @@ entities: - canCollide: False type: Physics - uid: 3469 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -33.5,-2.5 @@ -34578,7 +34551,7 @@ entities: - canCollide: False type: Physics - uid: 3470 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -33.5,-1.5 @@ -34587,7 +34560,7 @@ entities: - canCollide: False type: Physics - uid: 3471 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -33.5,-0.5 @@ -34596,7 +34569,7 @@ entities: - canCollide: False type: Physics - uid: 3472 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -33.5,0.5 @@ -34605,7 +34578,7 @@ entities: - canCollide: False type: Physics - uid: 3473 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -32.5,0.5 @@ -34614,7 +34587,7 @@ entities: - canCollide: False type: Physics - uid: 3474 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -32.5,1.5 @@ -34623,7 +34596,7 @@ entities: - canCollide: False type: Physics - uid: 3475 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -32.5,2.5 @@ -34634,7 +34607,7 @@ entities: - canCollide: False type: Physics - uid: 3476 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -32.5,3.5 @@ -34645,7 +34618,7 @@ entities: - canCollide: False type: Physics - uid: 3477 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -32.5,4.5 @@ -34656,7 +34629,7 @@ entities: - canCollide: False type: Physics - uid: 3478 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -32.5,5.5 @@ -34667,7 +34640,7 @@ entities: - canCollide: False type: Physics - uid: 3479 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -32.5,6.5 @@ -34676,7 +34649,7 @@ entities: - canCollide: False type: Physics - uid: 3480 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -32.5,7.5 @@ -34685,7 +34658,7 @@ entities: - canCollide: False type: Physics - uid: 3481 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -32.5,8.5 @@ -34694,7 +34667,7 @@ entities: - canCollide: False type: Physics - uid: 3482 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -32.5,9.5 @@ -34703,7 +34676,7 @@ entities: - canCollide: False type: Physics - uid: 3483 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -32.5,10.5 @@ -34712,7 +34685,7 @@ entities: - canCollide: False type: Physics - uid: 3484 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -32.5,11.5 @@ -34721,7 +34694,7 @@ entities: - canCollide: False type: Physics - uid: 3485 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -32.5,12.5 @@ -34730,7 +34703,7 @@ entities: - canCollide: False type: Physics - uid: 3486 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -32.5,13.5 @@ -34739,7 +34712,7 @@ entities: - canCollide: False type: Physics - uid: 3487 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -32.5,14.5 @@ -34748,7 +34721,7 @@ entities: - canCollide: False type: Physics - uid: 3488 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -32.5,14.5 @@ -34757,7 +34730,7 @@ entities: - canCollide: False type: Physics - uid: 3489 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -31.5,14.5 @@ -34766,7 +34739,7 @@ entities: - canCollide: False type: Physics - uid: 3490 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -30.5,14.5 @@ -34775,7 +34748,7 @@ entities: - canCollide: False type: Physics - uid: 3491 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -29.5,14.5 @@ -34784,7 +34757,7 @@ entities: - canCollide: False type: Physics - uid: 3492 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -28.5,14.5 @@ -34793,7 +34766,7 @@ entities: - canCollide: False type: Physics - uid: 3493 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -27.5,14.5 @@ -34802,7 +34775,7 @@ entities: - canCollide: False type: Physics - uid: 3494 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -26.5,14.5 @@ -34811,7 +34784,7 @@ entities: - canCollide: False type: Physics - uid: 3495 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -25.5,14.5 @@ -34820,7 +34793,7 @@ entities: - canCollide: False type: Physics - uid: 3496 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -24.5,14.5 @@ -34829,7 +34802,7 @@ entities: - canCollide: False type: Physics - uid: 3497 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -23.5,14.5 @@ -34838,7 +34811,7 @@ entities: - canCollide: False type: Physics - uid: 3498 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -22.5,14.5 @@ -34847,7 +34820,7 @@ entities: - canCollide: False type: Physics - uid: 3499 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -21.5,14.5 @@ -34856,7 +34829,7 @@ entities: - canCollide: False type: Physics - uid: 3500 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -20.5,14.5 @@ -34865,7 +34838,7 @@ entities: - canCollide: False type: Physics - uid: 3501 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -20.5,13.5 @@ -34874,7 +34847,7 @@ entities: - canCollide: False type: Physics - uid: 3502 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -19.5,13.5 @@ -34883,7 +34856,7 @@ entities: - canCollide: False type: Physics - uid: 3503 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -18.5,13.5 @@ -34892,7 +34865,7 @@ entities: - canCollide: False type: Physics - uid: 3504 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -18.5,13.5 @@ -34901,7 +34874,7 @@ entities: - canCollide: False type: Physics - uid: 3505 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -17.5,13.5 @@ -34910,7 +34883,7 @@ entities: - canCollide: False type: Physics - uid: 3506 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -17.5,14.5 @@ -34919,7 +34892,7 @@ entities: - canCollide: False type: Physics - uid: 3507 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -17.5,15.5 @@ -34928,7 +34901,7 @@ entities: - canCollide: False type: Physics - uid: 3508 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -18.5,16.5 @@ -34937,7 +34910,7 @@ entities: - canCollide: False type: Physics - uid: 3509 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -17.5,16.5 @@ -34948,7 +34921,7 @@ entities: - canCollide: False type: Physics - uid: 3510 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -16.5,16.5 @@ -34959,7 +34932,7 @@ entities: - canCollide: False type: Physics - uid: 3511 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -15.5,16.5 @@ -34968,7 +34941,7 @@ entities: - canCollide: False type: Physics - uid: 3512 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -18.5,17.5 @@ -34977,7 +34950,7 @@ entities: - canCollide: False type: Physics - uid: 3513 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -18.5,18.5 @@ -34986,7 +34959,7 @@ entities: - canCollide: False type: Physics - uid: 3514 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -18.5,19.5 @@ -34995,7 +34968,7 @@ entities: - canCollide: False type: Physics - uid: 3515 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -18.5,20.5 @@ -35004,7 +34977,7 @@ entities: - canCollide: False type: Physics - uid: 3516 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -18.5,21.5 @@ -35013,7 +34986,7 @@ entities: - canCollide: False type: Physics - uid: 3517 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -18.5,22.5 @@ -35022,7 +34995,7 @@ entities: - canCollide: False type: Physics - uid: 3518 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -18.5,23.5 @@ -35031,7 +35004,7 @@ entities: - canCollide: False type: Physics - uid: 3519 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -18.5,24.5 @@ -35040,7 +35013,7 @@ entities: - canCollide: False type: Physics - uid: 3520 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -18.5,25.5 @@ -35049,7 +35022,7 @@ entities: - canCollide: False type: Physics - uid: 3521 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -17.5,25.5 @@ -35058,7 +35031,7 @@ entities: - canCollide: False type: Physics - uid: 3522 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -16.5,25.5 @@ -35067,7 +35040,7 @@ entities: - canCollide: False type: Physics - uid: 3523 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -15.5,25.5 @@ -35076,7 +35049,7 @@ entities: - canCollide: False type: Physics - uid: 3524 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -14.5,25.5 @@ -35085,7 +35058,7 @@ entities: - canCollide: False type: Physics - uid: 3525 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -13.5,25.5 @@ -35094,7 +35067,7 @@ entities: - canCollide: False type: Physics - uid: 3526 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -12.5,25.5 @@ -35103,7 +35076,7 @@ entities: - canCollide: False type: Physics - uid: 3527 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -11.5,25.5 @@ -35112,7 +35085,7 @@ entities: - canCollide: False type: Physics - uid: 3528 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -10.5,25.5 @@ -35121,7 +35094,7 @@ entities: - canCollide: False type: Physics - uid: 3529 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -9.5,25.5 @@ -35130,7 +35103,7 @@ entities: - canCollide: False type: Physics - uid: 3530 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -8.5,25.5 @@ -35139,7 +35112,7 @@ entities: - canCollide: False type: Physics - uid: 3531 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -7.5,25.5 @@ -35148,7 +35121,7 @@ entities: - canCollide: False type: Physics - uid: 3532 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -7.5,24.5 @@ -35157,7 +35130,7 @@ entities: - canCollide: False type: Physics - uid: 3533 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -6.5,24.5 @@ -35166,7 +35139,7 @@ entities: - canCollide: False type: Physics - uid: 3534 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -5.5,24.5 @@ -35175,7 +35148,7 @@ entities: - canCollide: False type: Physics - uid: 3535 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -4.5,24.5 @@ -35184,7 +35157,7 @@ entities: - canCollide: False type: Physics - uid: 3536 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -4.5,24.5 @@ -35193,7 +35166,7 @@ entities: - canCollide: False type: Physics - uid: 3537 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -4.5,23.5 @@ -35202,7 +35175,7 @@ entities: - canCollide: False type: Physics - uid: 3538 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -4.5,22.5 @@ -35211,7 +35184,7 @@ entities: - canCollide: False type: Physics - uid: 3539 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -4.5,21.5 @@ -35220,7 +35193,7 @@ entities: - canCollide: False type: Physics - uid: 3540 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -4.5,21.5 @@ -35229,7 +35202,7 @@ entities: - canCollide: False type: Physics - uid: 3541 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -3.5,21.5 @@ -35238,7 +35211,7 @@ entities: - canCollide: False type: Physics - uid: 3542 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -2.5,21.5 @@ -35247,7 +35220,7 @@ entities: - canCollide: False type: Physics - uid: 3543 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -1.5,21.5 @@ -35256,7 +35229,7 @@ entities: - canCollide: False type: Physics - uid: 3544 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -0.5,21.5 @@ -35265,7 +35238,7 @@ entities: - canCollide: False type: Physics - uid: 3545 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -0.5,20.5 @@ -35274,7 +35247,7 @@ entities: - canCollide: False type: Physics - uid: 3546 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 0.5,20.5 @@ -35285,7 +35258,7 @@ entities: - canCollide: False type: Physics - uid: 3547 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 1.5,20.5 @@ -35296,7 +35269,7 @@ entities: - canCollide: False type: Physics - uid: 3548 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 2.5,20.5 @@ -35307,7 +35280,7 @@ entities: - canCollide: False type: Physics - uid: 3549 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 3.5,20.5 @@ -35318,7 +35291,7 @@ entities: - canCollide: False type: Physics - uid: 3550 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 4.5,20.5 @@ -35329,7 +35302,7 @@ entities: - canCollide: False type: Physics - uid: 3551 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 5.5,20.5 @@ -35340,7 +35313,7 @@ entities: - canCollide: False type: Physics - uid: 3552 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 6.5,20.5 @@ -35351,7 +35324,7 @@ entities: - canCollide: False type: Physics - uid: 3553 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 7.5,20.5 @@ -35362,7 +35335,7 @@ entities: - canCollide: False type: Physics - uid: 3554 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 8.5,20.5 @@ -35373,7 +35346,7 @@ entities: - canCollide: False type: Physics - uid: 3555 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 9.5,20.5 @@ -35384,7 +35357,7 @@ entities: - canCollide: False type: Physics - uid: 3556 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 10.5,20.5 @@ -35395,7 +35368,7 @@ entities: - canCollide: False type: Physics - uid: 3557 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 11.5,20.5 @@ -35406,7 +35379,7 @@ entities: - canCollide: False type: Physics - uid: 3558 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 12.5,20.5 @@ -35415,7 +35388,7 @@ entities: - canCollide: False type: Physics - uid: 3559 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 12.5,21.5 @@ -35426,7 +35399,7 @@ entities: - canCollide: False type: Physics - uid: 3560 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 12.5,22.5 @@ -35437,7 +35410,7 @@ entities: - canCollide: False type: Physics - uid: 3561 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 12.5,23.5 @@ -35448,7 +35421,7 @@ entities: - canCollide: False type: Physics - uid: 3562 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 12.5,24.5 @@ -35457,7 +35430,7 @@ entities: - canCollide: False type: Physics - uid: 3563 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 11.5,24.5 @@ -35466,7 +35439,7 @@ entities: - canCollide: False type: Physics - uid: 3564 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 12.5,20.5 @@ -35475,7 +35448,7 @@ entities: - canCollide: False type: Physics - uid: 3565 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 12.5,19.5 @@ -35484,7 +35457,7 @@ entities: - canCollide: False type: Physics - uid: 3566 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 12.5,18.5 @@ -35493,7 +35466,7 @@ entities: - canCollide: False type: Physics - uid: 3567 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 12.5,17.5 @@ -35502,7 +35475,7 @@ entities: - canCollide: False type: Physics - uid: 3568 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 12.5,16.5 @@ -35511,7 +35484,7 @@ entities: - canCollide: False type: Physics - uid: 3569 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 12.5,15.5 @@ -35520,7 +35493,7 @@ entities: - canCollide: False type: Physics - uid: 3570 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 12.5,14.5 @@ -35529,7 +35502,7 @@ entities: - canCollide: False type: Physics - uid: 3571 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 11.5,14.5 @@ -35538,7 +35511,7 @@ entities: - canCollide: False type: Physics - uid: 3572 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 10.5,14.5 @@ -35547,7 +35520,7 @@ entities: - canCollide: False type: Physics - uid: 3573 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 10.5,13.5 @@ -35556,7 +35529,7 @@ entities: - canCollide: False type: Physics - uid: 3574 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 10.5,12.5 @@ -35565,7 +35538,7 @@ entities: - canCollide: False type: Physics - uid: 3575 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 10.5,11.5 @@ -35576,7 +35549,7 @@ entities: - canCollide: False type: Physics - uid: 3576 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 11.5,11.5 @@ -35585,7 +35558,7 @@ entities: - canCollide: False type: Physics - uid: 3577 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 12.5,11.5 @@ -35596,7 +35569,7 @@ entities: - canCollide: False type: Physics - uid: 3578 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 13.5,11.5 @@ -35615,7 +35588,7 @@ entities: - canCollide: False type: Physics - uid: 3580 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 15.5,11.5 @@ -35626,7 +35599,7 @@ entities: - canCollide: False type: Physics - uid: 3581 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 16.5,11.5 @@ -35637,7 +35610,7 @@ entities: - canCollide: False type: Physics - uid: 3582 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 17.5,11.5 @@ -35648,7 +35621,7 @@ entities: - canCollide: False type: Physics - uid: 3583 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 18.5,11.5 @@ -35659,7 +35632,7 @@ entities: - canCollide: False type: Physics - uid: 3584 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 19.5,11.5 @@ -35670,7 +35643,7 @@ entities: - canCollide: False type: Physics - uid: 3585 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 20.5,11.5 @@ -35681,7 +35654,7 @@ entities: - canCollide: False type: Physics - uid: 3586 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 21.5,11.5 @@ -35692,7 +35665,7 @@ entities: - canCollide: False type: Physics - uid: 3587 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 22.5,11.5 @@ -35703,7 +35676,7 @@ entities: - canCollide: False type: Physics - uid: 3588 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 23.5,11.5 @@ -35714,7 +35687,7 @@ entities: - canCollide: False type: Physics - uid: 3589 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 24.5,11.5 @@ -35725,7 +35698,7 @@ entities: - canCollide: False type: Physics - uid: 3590 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 25.5,11.5 @@ -35734,7 +35707,7 @@ entities: - canCollide: False type: Physics - uid: 3591 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 26.5,11.5 @@ -35745,7 +35718,7 @@ entities: - canCollide: False type: Physics - uid: 3592 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 27.5,11.5 @@ -35756,7 +35729,7 @@ entities: - canCollide: False type: Physics - uid: 3593 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 27.5,12.5 @@ -35767,7 +35740,7 @@ entities: - canCollide: False type: Physics - uid: 3594 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 27.5,13.5 @@ -35776,7 +35749,7 @@ entities: - canCollide: False type: Physics - uid: 3595 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 28.5,11.5 @@ -35787,7 +35760,7 @@ entities: - canCollide: False type: Physics - uid: 3596 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 29.5,11.5 @@ -35796,7 +35769,7 @@ entities: - canCollide: False type: Physics - uid: 3597 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 30.5,11.5 @@ -35807,7 +35780,7 @@ entities: - canCollide: False type: Physics - uid: 3598 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 31.5,11.5 @@ -35818,7 +35791,7 @@ entities: - canCollide: False type: Physics - uid: 3599 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 32.5,11.5 @@ -35829,7 +35802,7 @@ entities: - canCollide: False type: Physics - uid: 3600 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 33.5,11.5 @@ -35840,7 +35813,7 @@ entities: - canCollide: False type: Physics - uid: 3601 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 34.5,11.5 @@ -35851,7 +35824,7 @@ entities: - canCollide: False type: Physics - uid: 3602 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 34.5,10.5 @@ -35862,7 +35835,7 @@ entities: - canCollide: False type: Physics - uid: 3603 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 34.5,9.5 @@ -35873,7 +35846,7 @@ entities: - canCollide: False type: Physics - uid: 3604 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 34.5,8.5 @@ -35884,7 +35857,7 @@ entities: - canCollide: False type: Physics - uid: 3605 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 34.5,7.5 @@ -35893,7 +35866,7 @@ entities: - canCollide: False type: Physics - uid: 3606 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 34.5,6.5 @@ -35904,7 +35877,7 @@ entities: - canCollide: False type: Physics - uid: 3607 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 34.5,5.5 @@ -35915,7 +35888,7 @@ entities: - canCollide: False type: Physics - uid: 3608 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 35.5,5.5 @@ -35926,7 +35899,7 @@ entities: - canCollide: False type: Physics - uid: 3609 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 36.5,5.5 @@ -35937,7 +35910,7 @@ entities: - canCollide: False type: Physics - uid: 3610 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 37.5,5.5 @@ -35948,7 +35921,7 @@ entities: - canCollide: False type: Physics - uid: 3611 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 38.5,5.5 @@ -35959,7 +35932,7 @@ entities: - canCollide: False type: Physics - uid: 3612 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 39.5,5.5 @@ -35978,10 +35951,6 @@ entities: type: Transform - startingCharge: 3200172 type: Battery - - drawRate: 8000 - type: PowerConsumer - - supplyRate: 6000 - type: PowerSupplier - uid: 3614 type: SalternSubstation components: @@ -35991,10 +35960,6 @@ entities: type: Transform - startingCharge: 3200172 type: Battery - - drawRate: 8000 - type: PowerConsumer - - supplyRate: 6000 - type: PowerSupplier - uid: 3615 type: SalternSubstation components: @@ -36004,10 +35969,6 @@ entities: type: Transform - startingCharge: 3200172 type: Battery - - drawRate: 8000 - type: PowerConsumer - - supplyRate: 6000 - type: PowerSupplier - uid: 3616 type: SalternSubstation components: @@ -36017,10 +35978,6 @@ entities: type: Transform - startingCharge: 3200172 type: Battery - - drawRate: 8000 - type: PowerConsumer - - supplyRate: 6000 - type: PowerSupplier - uid: 3617 type: BedsheetSpawner components: @@ -36037,12 +35994,8 @@ entities: type: Transform - startingCharge: 3200172 type: Battery - - drawRate: 8000 - type: PowerConsumer - - supplyRate: 6000 - type: PowerSupplier - uid: 3619 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -0.5,-22.5 @@ -36059,10 +36012,6 @@ entities: type: Transform - startingCharge: 3200172 type: Battery - - drawRate: 8000 - type: PowerConsumer - - supplyRate: 6000 - type: PowerSupplier - uid: 3621 type: SalternSubstation components: @@ -36072,10 +36021,6 @@ entities: type: Transform - startingCharge: 3200172 type: Battery - - drawRate: 8000 - type: PowerConsumer - - supplyRate: 6000 - type: PowerSupplier - uid: 3622 type: SalternSubstation components: @@ -36085,12 +36030,8 @@ entities: type: Transform - startingCharge: 3200172 type: Battery - - drawRate: 8000 - type: PowerConsumer - - supplyRate: 6000 - type: PowerSupplier - uid: 3623 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 27.5,13.5 @@ -36099,7 +36040,7 @@ entities: - canCollide: False type: Physics - uid: 3624 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 28.5,13.5 @@ -36108,7 +36049,7 @@ entities: - canCollide: False type: Physics - uid: 3625 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 28.5,14.5 @@ -36117,7 +36058,7 @@ entities: - canCollide: False type: Physics - uid: 3626 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 26.5,13.5 @@ -36126,7 +36067,7 @@ entities: - canCollide: False type: Physics - uid: 3627 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 25.5,13.5 @@ -36135,7 +36076,7 @@ entities: - canCollide: False type: Physics - uid: 3628 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 24.5,13.5 @@ -36146,7 +36087,7 @@ entities: - canCollide: False type: Physics - uid: 3629 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 24.5,14.5 @@ -36155,7 +36096,7 @@ entities: - canCollide: False type: Physics - uid: 3630 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 24.5,12.5 @@ -36166,7 +36107,7 @@ entities: - canCollide: False type: Physics - uid: 3631 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 23.5,12.5 @@ -36177,7 +36118,7 @@ entities: - canCollide: False type: Physics - uid: 3632 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 22.5,12.5 @@ -36188,7 +36129,7 @@ entities: - canCollide: False type: Physics - uid: 3633 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 21.5,12.5 @@ -36199,7 +36140,7 @@ entities: - canCollide: False type: Physics - uid: 3634 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 20.5,12.5 @@ -36210,7 +36151,7 @@ entities: - canCollide: False type: Physics - uid: 3635 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 19.5,12.5 @@ -36221,7 +36162,7 @@ entities: - canCollide: False type: Physics - uid: 3636 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 18.5,12.5 @@ -36232,7 +36173,7 @@ entities: - canCollide: False type: Physics - uid: 3637 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 17.5,12.5 @@ -36241,7 +36182,7 @@ entities: - canCollide: False type: Physics - uid: 3638 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 16.5,12.5 @@ -36252,7 +36193,7 @@ entities: - canCollide: False type: Physics - uid: 3639 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 15.5,12.5 @@ -36263,7 +36204,7 @@ entities: - canCollide: False type: Physics - uid: 3640 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 14.5,12.5 @@ -36274,7 +36215,7 @@ entities: - canCollide: False type: Physics - uid: 3641 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 13.5,12.5 @@ -36285,7 +36226,7 @@ entities: - canCollide: False type: Physics - uid: 3642 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 12.5,12.5 @@ -36296,7 +36237,7 @@ entities: - canCollide: False type: Physics - uid: 3643 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 12.5,13.5 @@ -36305,7 +36246,7 @@ entities: - canCollide: False type: Physics - uid: 3644 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 11.5,24.5 @@ -36314,7 +36255,7 @@ entities: - canCollide: False type: Physics - uid: 3645 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 9.5,24.5 @@ -36325,7 +36266,7 @@ entities: - canCollide: False type: Physics - uid: 3646 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 10.5,24.5 @@ -36334,7 +36275,7 @@ entities: - canCollide: False type: Physics - uid: 3647 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 9.5,23.5 @@ -36345,7 +36286,7 @@ entities: - canCollide: False type: Physics - uid: 3648 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 9.5,22.5 @@ -36354,7 +36295,7 @@ entities: - canCollide: False type: Physics - uid: 3649 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 9.5,24.5 @@ -36365,7 +36306,7 @@ entities: - canCollide: False type: Physics - uid: 3650 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 9.5,25.5 @@ -36376,7 +36317,7 @@ entities: - canCollide: False type: Physics - uid: 3651 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 9.5,26.5 @@ -36387,7 +36328,7 @@ entities: - canCollide: False type: Physics - uid: 3652 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 9.5,26.5 @@ -36398,7 +36339,7 @@ entities: - canCollide: False type: Physics - uid: 3653 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 9.5,27.5 @@ -36407,7 +36348,7 @@ entities: - canCollide: False type: Physics - uid: 3654 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 8.5,25.5 @@ -36418,7 +36359,7 @@ entities: - canCollide: False type: Physics - uid: 3655 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 7.5,25.5 @@ -36429,7 +36370,7 @@ entities: - canCollide: False type: Physics - uid: 3656 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 6.5,25.5 @@ -36440,7 +36381,7 @@ entities: - canCollide: False type: Physics - uid: 3657 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 5.5,25.5 @@ -36451,7 +36392,7 @@ entities: - canCollide: False type: Physics - uid: 3658 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 4.5,25.5 @@ -36462,7 +36403,7 @@ entities: - canCollide: False type: Physics - uid: 3659 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 3.5,25.5 @@ -36473,7 +36414,7 @@ entities: - canCollide: False type: Physics - uid: 3660 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 2.5,25.5 @@ -36484,7 +36425,7 @@ entities: - canCollide: False type: Physics - uid: 3661 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 1.5,25.5 @@ -36495,7 +36436,7 @@ entities: - canCollide: False type: Physics - uid: 3662 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 0.5,25.5 @@ -36506,7 +36447,7 @@ entities: - canCollide: False type: Physics - uid: 3663 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 0.5,26.5 @@ -36517,7 +36458,7 @@ entities: - canCollide: False type: Physics - uid: 3664 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 0.5,26.5 @@ -36528,7 +36469,7 @@ entities: - canCollide: False type: Physics - uid: 3665 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: -0.5,26.5 @@ -36539,7 +36480,7 @@ entities: - canCollide: False type: Physics - uid: 3666 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: -1.5,26.5 @@ -36550,7 +36491,7 @@ entities: - canCollide: False type: Physics - uid: 3667 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: -2.5,26.5 @@ -36561,7 +36502,7 @@ entities: - canCollide: False type: Physics - uid: 3668 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: -2.5,27.5 @@ -36570,7 +36511,7 @@ entities: - canCollide: False type: Physics - uid: 3669 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 42.5,-0.5 @@ -36579,7 +36520,7 @@ entities: - canCollide: False type: Physics - uid: 3670 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 43.5,-0.5 @@ -36590,7 +36531,7 @@ entities: - canCollide: False type: Physics - uid: 3671 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 43.5,0.5 @@ -36601,7 +36542,7 @@ entities: - canCollide: False type: Physics - uid: 3672 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 43.5,1.5 @@ -36612,7 +36553,7 @@ entities: - canCollide: False type: Physics - uid: 3673 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 44.5,1.5 @@ -36623,7 +36564,7 @@ entities: - canCollide: False type: Physics - uid: 3674 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 45.5,1.5 @@ -36634,7 +36575,7 @@ entities: - canCollide: False type: Physics - uid: 3675 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 46.5,1.5 @@ -36645,7 +36586,7 @@ entities: - canCollide: False type: Physics - uid: 3676 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 47.5,1.5 @@ -36656,7 +36597,7 @@ entities: - canCollide: False type: Physics - uid: 3677 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 48.5,1.5 @@ -36667,7 +36608,7 @@ entities: - canCollide: False type: Physics - uid: 3678 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 48.5,0.5 @@ -36678,7 +36619,7 @@ entities: - canCollide: False type: Physics - uid: 3679 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 48.5,-0.5 @@ -36689,7 +36630,7 @@ entities: - canCollide: False type: Physics - uid: 3680 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 48.5,-1.5 @@ -36698,7 +36639,7 @@ entities: - canCollide: False type: Physics - uid: 3681 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 48.5,-2.5 @@ -36707,7 +36648,7 @@ entities: - canCollide: False type: Physics - uid: 3682 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 47.5,-2.5 @@ -36716,7 +36657,7 @@ entities: - canCollide: False type: Physics - uid: 3683 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 47.5,-1.5 @@ -36725,7 +36666,7 @@ entities: - canCollide: False type: Physics - uid: 3684 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 41.5,-0.5 @@ -36734,7 +36675,7 @@ entities: - canCollide: False type: Physics - uid: 3685 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 40.5,-0.5 @@ -36745,7 +36686,7 @@ entities: - canCollide: False type: Physics - uid: 3686 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 39.5,-0.5 @@ -36756,7 +36697,7 @@ entities: - canCollide: False type: Physics - uid: 3687 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 38.5,-0.5 @@ -36767,7 +36708,7 @@ entities: - canCollide: False type: Physics - uid: 3688 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 37.5,-0.5 @@ -36778,7 +36719,7 @@ entities: - canCollide: False type: Physics - uid: 3689 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 36.5,-0.5 @@ -36787,7 +36728,7 @@ entities: - canCollide: False type: Physics - uid: 3690 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 35.5,-0.5 @@ -36798,7 +36739,7 @@ entities: - canCollide: False type: Physics - uid: 3691 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 34.5,-0.5 @@ -36809,7 +36750,7 @@ entities: - canCollide: False type: Physics - uid: 3692 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 33.5,-0.5 @@ -36820,7 +36761,7 @@ entities: - canCollide: False type: Physics - uid: 3693 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 32.5,-0.5 @@ -36831,7 +36772,7 @@ entities: - canCollide: False type: Physics - uid: 3694 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 32.5,0.5 @@ -36842,7 +36783,7 @@ entities: - canCollide: False type: Physics - uid: 3695 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 31.5,0.5 @@ -36853,7 +36794,7 @@ entities: - canCollide: False type: Physics - uid: 3696 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 31.5,1.5 @@ -36862,7 +36803,7 @@ entities: - canCollide: False type: Physics - uid: 3697 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 43.5,2.5 @@ -36873,7 +36814,7 @@ entities: - canCollide: False type: Physics - uid: 3698 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 43.5,3.5 @@ -36884,7 +36825,7 @@ entities: - canCollide: False type: Physics - uid: 3699 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 43.5,4.5 @@ -36895,7 +36836,7 @@ entities: - canCollide: False type: Physics - uid: 3700 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 43.5,5.5 @@ -36906,7 +36847,7 @@ entities: - canCollide: False type: Physics - uid: 3701 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 43.5,6.5 @@ -36917,7 +36858,7 @@ entities: - canCollide: False type: Physics - uid: 3702 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 43.5,7.5 @@ -36928,7 +36869,7 @@ entities: - canCollide: False type: Physics - uid: 3703 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 43.5,8.5 @@ -36939,7 +36880,7 @@ entities: - canCollide: False type: Physics - uid: 3704 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 43.5,9.5 @@ -36950,7 +36891,7 @@ entities: - canCollide: False type: Physics - uid: 3705 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 43.5,10.5 @@ -36959,7 +36900,7 @@ entities: - canCollide: False type: Physics - uid: 3706 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 21.5,-9.5 @@ -36968,7 +36909,7 @@ entities: - canCollide: False type: Physics - uid: 3707 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 21.5,-8.5 @@ -36977,7 +36918,7 @@ entities: - canCollide: False type: Physics - uid: 3708 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 21.5,-7.5 @@ -36988,7 +36929,7 @@ entities: - canCollide: False type: Physics - uid: 3709 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 21.5,-6.5 @@ -36999,7 +36940,7 @@ entities: - canCollide: False type: Physics - uid: 3710 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 21.5,-5.5 @@ -37010,7 +36951,7 @@ entities: - canCollide: False type: Physics - uid: 3711 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 21.5,-4.5 @@ -37021,7 +36962,7 @@ entities: - canCollide: False type: Physics - uid: 3712 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 22.5,-4.5 @@ -37032,7 +36973,7 @@ entities: - canCollide: False type: Physics - uid: 3713 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 22.5,-3.5 @@ -37041,7 +36982,7 @@ entities: - canCollide: False type: Physics - uid: 3714 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 20.5,-9.5 @@ -37050,7 +36991,7 @@ entities: - canCollide: False type: Physics - uid: 3715 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 19.5,-9.5 @@ -37061,7 +37002,7 @@ entities: - canCollide: False type: Physics - uid: 3716 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 21.5,-9.5 @@ -37070,7 +37011,7 @@ entities: - canCollide: False type: Physics - uid: 3717 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 18.5,-9.5 @@ -37081,7 +37022,7 @@ entities: - canCollide: False type: Physics - uid: 3718 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 17.5,-9.5 @@ -37092,7 +37033,7 @@ entities: - canCollide: False type: Physics - uid: 3719 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 16.5,-9.5 @@ -37103,7 +37044,7 @@ entities: - canCollide: False type: Physics - uid: 3720 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 15.5,-9.5 @@ -37114,7 +37055,7 @@ entities: - canCollide: False type: Physics - uid: 3721 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 14.5,-9.5 @@ -37125,7 +37066,7 @@ entities: - canCollide: False type: Physics - uid: 3722 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 13.5,-9.5 @@ -37136,7 +37077,7 @@ entities: - canCollide: False type: Physics - uid: 3723 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 12.5,-9.5 @@ -37147,7 +37088,7 @@ entities: - canCollide: False type: Physics - uid: 3724 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 11.5,-9.5 @@ -37158,7 +37099,7 @@ entities: - canCollide: False type: Physics - uid: 3725 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 10.5,-9.5 @@ -37169,7 +37110,7 @@ entities: - canCollide: False type: Physics - uid: 3726 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 9.5,-9.5 @@ -37180,7 +37121,7 @@ entities: - canCollide: False type: Physics - uid: 3727 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 8.5,-9.5 @@ -37191,7 +37132,7 @@ entities: - canCollide: False type: Physics - uid: 3728 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 8.5,-10.5 @@ -37202,7 +37143,7 @@ entities: - canCollide: False type: Physics - uid: 3729 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 8.5,-11.5 @@ -37213,7 +37154,7 @@ entities: - canCollide: False type: Physics - uid: 3730 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 8.5,-12.5 @@ -37224,7 +37165,7 @@ entities: - canCollide: False type: Physics - uid: 3731 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 8.5,-13.5 @@ -37235,7 +37176,7 @@ entities: - canCollide: False type: Physics - uid: 3732 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 8.5,-14.5 @@ -37246,7 +37187,7 @@ entities: - canCollide: False type: Physics - uid: 3733 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 8.5,-15.5 @@ -37257,7 +37198,7 @@ entities: - canCollide: False type: Physics - uid: 3734 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 8.5,-16.5 @@ -37268,7 +37209,7 @@ entities: - canCollide: False type: Physics - uid: 3735 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 7.5,-16.5 @@ -37279,7 +37220,7 @@ entities: - canCollide: False type: Physics - uid: 3736 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 7.5,-17.5 @@ -37288,7 +37229,7 @@ entities: - canCollide: False type: Physics - uid: 3737 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 15.5,-8.5 @@ -37299,7 +37240,7 @@ entities: - canCollide: False type: Physics - uid: 3738 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 15.5,-7.5 @@ -37310,7 +37251,7 @@ entities: - canCollide: False type: Physics - uid: 3739 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 15.5,-6.5 @@ -37321,7 +37262,7 @@ entities: - canCollide: False type: Physics - uid: 3740 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 15.5,-5.5 @@ -37332,7 +37273,7 @@ entities: - canCollide: False type: Physics - uid: 3741 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 15.5,-4.5 @@ -37343,7 +37284,7 @@ entities: - canCollide: False type: Physics - uid: 3742 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 15.5,-3.5 @@ -37354,7 +37295,7 @@ entities: - canCollide: False type: Physics - uid: 3743 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 15.5,-2.5 @@ -37365,7 +37306,7 @@ entities: - canCollide: False type: Physics - uid: 3744 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 15.5,-1.5 @@ -37376,7 +37317,7 @@ entities: - canCollide: False type: Physics - uid: 3745 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 15.5,-0.5 @@ -37387,7 +37328,7 @@ entities: - canCollide: False type: Physics - uid: 3746 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 15.5,0.5 @@ -37398,7 +37339,7 @@ entities: - canCollide: False type: Physics - uid: 3747 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 15.5,1.5 @@ -37409,7 +37350,7 @@ entities: - canCollide: False type: Physics - uid: 3748 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 16.5,1.5 @@ -37420,7 +37361,7 @@ entities: - canCollide: False type: Physics - uid: 3749 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 16.5,2.5 @@ -37429,7 +37370,7 @@ entities: - canCollide: False type: Physics - uid: 3750 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: -0.5,-22.5 @@ -37438,7 +37379,7 @@ entities: - canCollide: False type: Physics - uid: 3751 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: -0.5,-21.5 @@ -37447,7 +37388,7 @@ entities: - canCollide: False type: Physics - uid: 3752 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: -0.5,-20.5 @@ -37458,7 +37399,7 @@ entities: - canCollide: False type: Physics - uid: 3753 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: -16.5,15.5 @@ -37469,7 +37410,7 @@ entities: - canCollide: False type: Physics - uid: 3754 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: -1.5,-19.5 @@ -37480,7 +37421,7 @@ entities: - canCollide: False type: Physics - uid: 3755 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: -1.5,-18.5 @@ -37489,7 +37430,7 @@ entities: - canCollide: False type: Physics - uid: 3756 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: -1.5,-20.5 @@ -37500,7 +37441,7 @@ entities: - canCollide: False type: Physics - uid: 3757 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: -2.5,-20.5 @@ -37511,7 +37452,7 @@ entities: - canCollide: False type: Physics - uid: 3758 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: -3.5,-20.5 @@ -37522,7 +37463,7 @@ entities: - canCollide: False type: Physics - uid: 3759 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: -4.5,-20.5 @@ -37533,7 +37474,7 @@ entities: - canCollide: False type: Physics - uid: 3760 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: -5.5,-20.5 @@ -37544,7 +37485,7 @@ entities: - canCollide: False type: Physics - uid: 3761 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: -6.5,-20.5 @@ -37555,7 +37496,7 @@ entities: - canCollide: False type: Physics - uid: 3762 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: -7.5,-20.5 @@ -37566,7 +37507,7 @@ entities: - canCollide: False type: Physics - uid: 3763 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: -8.5,-20.5 @@ -37577,7 +37518,7 @@ entities: - canCollide: False type: Physics - uid: 3764 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: -9.5,-20.5 @@ -37588,7 +37529,7 @@ entities: - canCollide: False type: Physics - uid: 3765 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: -9.5,-21.5 @@ -37597,7 +37538,7 @@ entities: - canCollide: False type: Physics - uid: 3766 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: -10.5,-20.5 @@ -37608,7 +37549,7 @@ entities: - canCollide: False type: Physics - uid: 3767 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: -11.5,-20.5 @@ -37619,7 +37560,7 @@ entities: - canCollide: False type: Physics - uid: 3768 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: -12.5,-20.5 @@ -37630,7 +37571,7 @@ entities: - canCollide: False type: Physics - uid: 3769 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: -13.5,-20.5 @@ -37641,7 +37582,7 @@ entities: - canCollide: False type: Physics - uid: 3770 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: -13.5,-19.5 @@ -37652,7 +37593,7 @@ entities: - canCollide: False type: Physics - uid: 3771 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: -13.5,-18.5 @@ -37663,7 +37604,7 @@ entities: - canCollide: False type: Physics - uid: 3772 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: -13.5,-17.5 @@ -37674,7 +37615,7 @@ entities: - canCollide: False type: Physics - uid: 3773 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: -14.5,-17.5 @@ -37685,7 +37626,7 @@ entities: - canCollide: False type: Physics - uid: 3774 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: -14.5,-16.5 @@ -37694,7 +37635,7 @@ entities: - canCollide: False type: Physics - uid: 3775 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 0.5,-6.5 @@ -37705,7 +37646,7 @@ entities: - canCollide: False type: Physics - uid: 3776 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 0.5,-7.5 @@ -37714,7 +37655,7 @@ entities: - canCollide: False type: Physics - uid: 3777 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 0.5,-8.5 @@ -37723,7 +37664,7 @@ entities: - canCollide: False type: Physics - uid: 3778 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: -0.5,-8.5 @@ -37734,7 +37675,7 @@ entities: - canCollide: False type: Physics - uid: 3779 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: -1.5,-8.5 @@ -37745,7 +37686,7 @@ entities: - canCollide: False type: Physics - uid: 3780 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: -1.5,-9.5 @@ -37756,7 +37697,7 @@ entities: - canCollide: False type: Physics - uid: 3781 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: -2.5,-9.5 @@ -37767,7 +37708,7 @@ entities: - canCollide: False type: Physics - uid: 3782 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: -3.5,-9.5 @@ -37778,7 +37719,7 @@ entities: - canCollide: False type: Physics - uid: 3783 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: -4.5,-9.5 @@ -37789,7 +37730,7 @@ entities: - canCollide: False type: Physics - uid: 3784 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: -5.5,-9.5 @@ -37800,7 +37741,7 @@ entities: - canCollide: False type: Physics - uid: 3785 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: -5.5,-8.5 @@ -37809,7 +37750,7 @@ entities: - canCollide: False type: Physics - uid: 3786 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: -6.5,-9.5 @@ -37820,7 +37761,7 @@ entities: - canCollide: False type: Physics - uid: 3787 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: -7.5,-9.5 @@ -37831,7 +37772,7 @@ entities: - canCollide: False type: Physics - uid: 3788 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: -8.5,-9.5 @@ -37842,7 +37783,7 @@ entities: - canCollide: False type: Physics - uid: 3789 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: -9.5,-9.5 @@ -37851,7 +37792,7 @@ entities: - canCollide: False type: Physics - uid: 3790 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: -9.5,-8.5 @@ -37860,7 +37801,7 @@ entities: - canCollide: False type: Physics - uid: 3791 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: -9.5,-7.5 @@ -37871,7 +37812,7 @@ entities: - canCollide: False type: Physics - uid: 3792 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: -9.5,-6.5 @@ -37882,7 +37823,7 @@ entities: - canCollide: False type: Physics - uid: 3793 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: -10.5,-6.5 @@ -37893,7 +37834,7 @@ entities: - canCollide: False type: Physics - uid: 3794 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: -11.5,-6.5 @@ -37904,7 +37845,7 @@ entities: - canCollide: False type: Physics - uid: 3795 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: -12.5,-6.5 @@ -37915,7 +37856,7 @@ entities: - canCollide: False type: Physics - uid: 3796 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: -12.5,-5.5 @@ -37924,7 +37865,7 @@ entities: - canCollide: False type: Physics - uid: 3797 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: -12.5,-4.5 @@ -37935,7 +37876,7 @@ entities: - canCollide: False type: Physics - uid: 3798 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: -12.5,-3.5 @@ -37946,7 +37887,7 @@ entities: - canCollide: False type: Physics - uid: 3799 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: -12.5,-2.5 @@ -37957,7 +37898,7 @@ entities: - canCollide: False type: Physics - uid: 3800 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: -12.5,-1.5 @@ -37968,7 +37909,7 @@ entities: - canCollide: False type: Physics - uid: 3801 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: -12.5,-0.5 @@ -37979,7 +37920,7 @@ entities: - canCollide: False type: Physics - uid: 3802 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: -12.5,0.5 @@ -37990,7 +37931,7 @@ entities: - canCollide: False type: Physics - uid: 3803 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: -12.5,1.5 @@ -38001,7 +37942,7 @@ entities: - canCollide: False type: Physics - uid: 3804 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: -11.5,1.5 @@ -38012,7 +37953,7 @@ entities: - canCollide: False type: Physics - uid: 3805 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: -11.5,2.5 @@ -38021,7 +37962,7 @@ entities: - canCollide: False type: Physics - uid: 3806 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: -21.5,-10.5 @@ -38032,7 +37973,7 @@ entities: - canCollide: False type: Physics - uid: 3807 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: -21.5,-9.5 @@ -38041,7 +37982,7 @@ entities: - canCollide: False type: Physics - uid: 3808 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: -21.5,-8.5 @@ -38052,7 +37993,7 @@ entities: - canCollide: False type: Physics - uid: 3809 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: -20.5,-8.5 @@ -38061,7 +38002,7 @@ entities: - canCollide: False type: Physics - uid: 3810 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: -19.5,-8.5 @@ -38072,7 +38013,7 @@ entities: - canCollide: False type: Physics - uid: 3811 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: -18.5,-8.5 @@ -38083,7 +38024,7 @@ entities: - canCollide: False type: Physics - uid: 3812 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: -17.5,-8.5 @@ -38094,7 +38035,7 @@ entities: - canCollide: False type: Physics - uid: 3813 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: -17.5,-9.5 @@ -38105,7 +38046,7 @@ entities: - canCollide: False type: Physics - uid: 3814 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: -16.5,-9.5 @@ -38114,7 +38055,7 @@ entities: - canCollide: False type: Physics - uid: 3815 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: -15.5,-9.5 @@ -38125,7 +38066,7 @@ entities: - canCollide: False type: Physics - uid: 3816 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: -14.5,-9.5 @@ -38136,7 +38077,7 @@ entities: - canCollide: False type: Physics - uid: 3817 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: -14.5,-8.5 @@ -38147,7 +38088,7 @@ entities: - canCollide: False type: Physics - uid: 3818 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: -22.5,-8.5 @@ -38158,7 +38099,7 @@ entities: - canCollide: False type: Physics - uid: 3819 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: -21.5,-11.5 @@ -38167,7 +38108,7 @@ entities: - canCollide: False type: Physics - uid: 3820 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: -21.5,-12.5 @@ -38176,7 +38117,7 @@ entities: - canCollide: False type: Physics - uid: 3821 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: -20.5,-12.5 @@ -38185,7 +38126,7 @@ entities: - canCollide: False type: Physics - uid: 3822 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: -23.5,-8.5 @@ -38196,7 +38137,7 @@ entities: - canCollide: False type: Physics - uid: 3823 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: -24.5,-8.5 @@ -38207,7 +38148,7 @@ entities: - canCollide: False type: Physics - uid: 3824 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: -25.5,-8.5 @@ -38218,7 +38159,7 @@ entities: - canCollide: False type: Physics - uid: 3825 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: -26.5,-8.5 @@ -38227,7 +38168,7 @@ entities: - canCollide: False type: Physics - uid: 3826 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: -27.5,-8.5 @@ -38238,7 +38179,7 @@ entities: - canCollide: False type: Physics - uid: 3827 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: -28.5,-8.5 @@ -38249,7 +38190,7 @@ entities: - canCollide: False type: Physics - uid: 3828 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: -29.5,-8.5 @@ -38260,7 +38201,7 @@ entities: - canCollide: False type: Physics - uid: 3829 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: -29.5,-7.5 @@ -38271,7 +38212,7 @@ entities: - canCollide: False type: Physics - uid: 3830 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: -29.5,-6.5 @@ -38280,7 +38221,7 @@ entities: - canCollide: False type: Physics - uid: 3831 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: -29.5,-5.5 @@ -38291,7 +38232,7 @@ entities: - canCollide: False type: Physics - uid: 3832 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: -29.5,-4.5 @@ -38302,7 +38243,7 @@ entities: - canCollide: False type: Physics - uid: 3833 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: -30.5,-4.5 @@ -38313,7 +38254,7 @@ entities: - canCollide: False type: Physics - uid: 3834 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: -30.5,-3.5 @@ -38322,7 +38263,7 @@ entities: - canCollide: False type: Physics - uid: 3835 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: -32.5,7.5 @@ -38331,7 +38272,7 @@ entities: - canCollide: False type: Physics - uid: 3836 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: -32.5,8.5 @@ -38340,7 +38281,7 @@ entities: - canCollide: False type: Physics - uid: 3837 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: -32.5,9.5 @@ -38349,7 +38290,7 @@ entities: - canCollide: False type: Physics - uid: 3838 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: -33.5,9.5 @@ -38358,7 +38299,7 @@ entities: - canCollide: False type: Physics - uid: 3839 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: -34.5,9.5 @@ -38369,7 +38310,7 @@ entities: - canCollide: False type: Physics - uid: 3840 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: -35.5,9.5 @@ -38380,7 +38321,7 @@ entities: - canCollide: False type: Physics - uid: 3841 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: -36.5,9.5 @@ -38391,7 +38332,7 @@ entities: - canCollide: False type: Physics - uid: 3842 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: -37.5,9.5 @@ -38402,7 +38343,7 @@ entities: - canCollide: False type: Physics - uid: 3843 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: -38.5,9.5 @@ -38413,7 +38354,7 @@ entities: - canCollide: False type: Physics - uid: 3844 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: -38.5,10.5 @@ -38424,7 +38365,7 @@ entities: - canCollide: False type: Physics - uid: 3845 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: -39.5,10.5 @@ -38435,7 +38376,7 @@ entities: - canCollide: False type: Physics - uid: 3846 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: -39.5,11.5 @@ -38444,7 +38385,7 @@ entities: - canCollide: False type: Physics - uid: 3847 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: -28.5,12.5 @@ -38453,7 +38394,7 @@ entities: - canCollide: False type: Physics - uid: 3848 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: -31.5,9.5 @@ -38464,7 +38405,7 @@ entities: - canCollide: False type: Physics - uid: 3849 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: -31.5,10.5 @@ -38475,7 +38416,7 @@ entities: - canCollide: False type: Physics - uid: 3850 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: -31.5,11.5 @@ -38486,7 +38427,7 @@ entities: - canCollide: False type: Physics - uid: 3851 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: -31.5,12.5 @@ -38497,7 +38438,7 @@ entities: - canCollide: False type: Physics - uid: 3852 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: -31.5,13.5 @@ -38508,7 +38449,7 @@ entities: - canCollide: False type: Physics - uid: 3853 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: -30.5,13.5 @@ -38519,7 +38460,7 @@ entities: - canCollide: False type: Physics - uid: 3854 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: -29.5,13.5 @@ -38530,7 +38471,7 @@ entities: - canCollide: False type: Physics - uid: 3855 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: -28.5,13.5 @@ -38541,7 +38482,7 @@ entities: - canCollide: False type: Physics - uid: 3856 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: -15.5,16.5 @@ -38550,7 +38491,7 @@ entities: - canCollide: False type: Physics - uid: 3857 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: -14.5,16.5 @@ -38561,7 +38502,7 @@ entities: - canCollide: False type: Physics - uid: 3858 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: -13.5,16.5 @@ -38572,7 +38513,7 @@ entities: - canCollide: False type: Physics - uid: 3859 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: -13.5,15.5 @@ -38583,7 +38524,7 @@ entities: - canCollide: False type: Physics - uid: 3860 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: -13.5,14.5 @@ -38594,7 +38535,7 @@ entities: - canCollide: False type: Physics - uid: 3861 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: -13.5,13.5 @@ -38605,7 +38546,7 @@ entities: - canCollide: False type: Physics - uid: 3862 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: -12.5,13.5 @@ -38616,7 +38557,7 @@ entities: - canCollide: False type: Physics - uid: 3863 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: -12.5,12.5 @@ -38625,7 +38566,7 @@ entities: - canCollide: False type: Physics - uid: 3864 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: -11.5,13.5 @@ -38636,7 +38577,7 @@ entities: - canCollide: False type: Physics - uid: 3865 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: -10.5,13.5 @@ -38645,7 +38586,7 @@ entities: - canCollide: False type: Physics - uid: 3866 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: -9.5,13.5 @@ -38656,7 +38597,7 @@ entities: - canCollide: False type: Physics - uid: 3867 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: -8.5,13.5 @@ -38667,7 +38608,7 @@ entities: - canCollide: False type: Physics - uid: 3868 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: -7.5,13.5 @@ -38678,7 +38619,7 @@ entities: - canCollide: False type: Physics - uid: 3869 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: -6.5,13.5 @@ -38689,7 +38630,7 @@ entities: - canCollide: False type: Physics - uid: 3870 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: -5.5,13.5 @@ -38700,7 +38641,7 @@ entities: - canCollide: False type: Physics - uid: 3871 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: -4.5,13.5 @@ -38711,7 +38652,7 @@ entities: - canCollide: False type: Physics - uid: 3872 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: -3.5,13.5 @@ -38722,7 +38663,7 @@ entities: - canCollide: False type: Physics - uid: 3873 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: -3.5,14.5 @@ -38733,7 +38674,7 @@ entities: - canCollide: False type: Physics - uid: 3874 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: -3.5,15.5 @@ -38742,7 +38683,7 @@ entities: - canCollide: False type: Physics - uid: 3875 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: -15.5,16.5 @@ -38751,7 +38692,7 @@ entities: - canCollide: False type: Physics - uid: 3876 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: -16.5,16.5 @@ -38779,7 +38720,7 @@ entities: light_bulb: !type:ContainerSlot {} type: ContainerContainer - uid: 3879 - type: ApcExtensionCable + type: CableApcExtension components: - pos: 22.5,-7.5 parent: 853 @@ -38826,7 +38767,7 @@ entities: parent: 853 type: Transform - powerLoad: 1 - type: PowerReceiver + type: ApcPowerReceiver - startingCharge: 30000 type: Battery - uid: 3884 @@ -38837,7 +38778,7 @@ entities: parent: 853 type: Transform - powerLoad: 1 - type: PowerReceiver + type: ApcPowerReceiver - startingCharge: 30000 type: Battery - uid: 3885 @@ -38848,7 +38789,7 @@ entities: parent: 853 type: Transform - powerLoad: 1 - type: PowerReceiver + type: ApcPowerReceiver - startingCharge: 30000 type: Battery - uid: 3886 @@ -38859,7 +38800,7 @@ entities: parent: 853 type: Transform - powerLoad: 1 - type: PowerReceiver + type: ApcPowerReceiver - startingCharge: 30000 type: Battery - uid: 3887 @@ -38870,7 +38811,7 @@ entities: parent: 853 type: Transform - powerLoad: 1 - type: PowerReceiver + type: ApcPowerReceiver - startingCharge: 30000 type: Battery - uid: 3888 @@ -38881,7 +38822,7 @@ entities: parent: 853 type: Transform - powerLoad: 1 - type: PowerReceiver + type: ApcPowerReceiver - startingCharge: 30000 type: Battery - uid: 3889 @@ -38892,7 +38833,7 @@ entities: parent: 853 type: Transform - powerLoad: 1 - type: PowerReceiver + type: ApcPowerReceiver - startingCharge: 30000 type: Battery - uid: 3890 @@ -38903,7 +38844,7 @@ entities: parent: 853 type: Transform - powerLoad: 1 - type: PowerReceiver + type: ApcPowerReceiver - startingCharge: 30000 type: Battery - uid: 3891 @@ -38914,7 +38855,7 @@ entities: parent: 853 type: Transform - powerLoad: 1 - type: PowerReceiver + type: ApcPowerReceiver - startingCharge: 30000 type: Battery - uid: 3892 @@ -38925,7 +38866,7 @@ entities: parent: 853 type: Transform - powerLoad: 1 - type: PowerReceiver + type: ApcPowerReceiver - startingCharge: 30000 type: Battery - uid: 3893 @@ -38936,7 +38877,7 @@ entities: parent: 853 type: Transform - powerLoad: 1 - type: PowerReceiver + type: ApcPowerReceiver - startingCharge: 30000 type: Battery - uid: 3894 @@ -38947,7 +38888,7 @@ entities: parent: 853 type: Transform - powerLoad: 1 - type: PowerReceiver + type: ApcPowerReceiver - startingCharge: 30000 type: Battery - uid: 3895 @@ -38958,7 +38899,7 @@ entities: parent: 853 type: Transform - powerLoad: 1 - type: PowerReceiver + type: ApcPowerReceiver - startingCharge: 30000 type: Battery - uid: 3896 @@ -38969,7 +38910,7 @@ entities: parent: 853 type: Transform - powerLoad: 1 - type: PowerReceiver + type: ApcPowerReceiver - startingCharge: 30000 type: Battery - uid: 3897 @@ -38980,7 +38921,7 @@ entities: parent: 853 type: Transform - powerLoad: 1 - type: PowerReceiver + type: ApcPowerReceiver - startingCharge: 30000 type: Battery - uid: 3898 @@ -38991,7 +38932,7 @@ entities: parent: 853 type: Transform - powerLoad: 1 - type: PowerReceiver + type: ApcPowerReceiver - startingCharge: 30000 type: Battery - uid: 3899 @@ -39002,7 +38943,7 @@ entities: parent: 853 type: Transform - powerLoad: 1 - type: PowerReceiver + type: ApcPowerReceiver - startingCharge: 30000 type: Battery - uid: 3900 @@ -39013,7 +38954,7 @@ entities: parent: 853 type: Transform - powerLoad: 1 - type: PowerReceiver + type: ApcPowerReceiver - startingCharge: 30000 type: Battery - uid: 3901 @@ -39024,7 +38965,7 @@ entities: parent: 853 type: Transform - powerLoad: 1 - type: PowerReceiver + type: ApcPowerReceiver - startingCharge: 30000 type: Battery - uid: 3902 @@ -39035,7 +38976,7 @@ entities: parent: 853 type: Transform - powerLoad: 1 - type: PowerReceiver + type: ApcPowerReceiver - startingCharge: 30000 type: Battery - uid: 3903 @@ -39046,7 +38987,7 @@ entities: parent: 853 type: Transform - powerLoad: 1 - type: PowerReceiver + type: ApcPowerReceiver - startingCharge: 30000 type: Battery - uid: 3904 @@ -39065,7 +39006,7 @@ entities: parent: 853 type: Transform - powerLoad: 1 - type: PowerReceiver + type: ApcPowerReceiver - startingCharge: 30000 type: Battery - uid: 3906 @@ -39076,7 +39017,7 @@ entities: parent: 853 type: Transform - powerLoad: 1 - type: PowerReceiver + type: ApcPowerReceiver - startingCharge: 30000 type: Battery - uid: 3907 @@ -39087,7 +39028,7 @@ entities: parent: 853 type: Transform - powerLoad: 1 - type: PowerReceiver + type: ApcPowerReceiver - startingCharge: 30000 type: Battery - uid: 3908 @@ -39098,7 +39039,7 @@ entities: parent: 853 type: Transform - powerLoad: 1 - type: PowerReceiver + type: ApcPowerReceiver - startingCharge: 30000 type: Battery - uid: 3909 @@ -39109,7 +39050,7 @@ entities: parent: 853 type: Transform - powerLoad: 1 - type: PowerReceiver + type: ApcPowerReceiver - startingCharge: 30000 type: Battery - uid: 3910 @@ -39120,11 +39061,11 @@ entities: parent: 853 type: Transform - powerLoad: 1 - type: PowerReceiver + type: ApcPowerReceiver - startingCharge: 30000 type: Battery - uid: 3911 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -24.5,10.5 @@ -39135,7 +39076,7 @@ entities: - canCollide: False type: Physics - uid: 3912 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -24.5,11.5 @@ -39146,7 +39087,7 @@ entities: - canCollide: False type: Physics - uid: 3913 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 41.5,7.5 @@ -39188,7 +39129,7 @@ entities: parent: 853 type: Transform - powerLoad: 0 - type: PowerReceiver + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -39214,7 +39155,7 @@ entities: parent: 853 type: Transform - powerLoad: 0 - type: PowerReceiver + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -39227,8 +39168,6 @@ entities: type: Transform - startingCharge: 11999.217 type: Battery - - drawRate: 2000 - type: PowerConsumer - uid: 3922 type: EmergencyLight components: @@ -39237,7 +39176,7 @@ entities: parent: 853 type: Transform - powerLoad: 1 - type: PowerReceiver + type: ApcPowerReceiver - startingCharge: 30000 type: Battery - uid: 3923 @@ -39248,7 +39187,7 @@ entities: parent: 853 type: Transform - powerLoad: 1 - type: PowerReceiver + type: ApcPowerReceiver - startingCharge: 30000 type: Battery - uid: 3924 @@ -39259,7 +39198,7 @@ entities: parent: 853 type: Transform - powerLoad: 1 - type: PowerReceiver + type: ApcPowerReceiver - startingCharge: 30000 type: Battery - uid: 3925 @@ -39270,7 +39209,7 @@ entities: parent: 853 type: Transform - powerLoad: 1 - type: PowerReceiver + type: ApcPowerReceiver - startingCharge: 30000 type: Battery - uid: 3926 @@ -39326,21 +39265,21 @@ entities: parent: 853 type: Transform - uid: 3933 - type: HVWireStack + type: CableHVStack components: - rot: 4.371139006309477E-08 rad pos: 50.5,4.5 parent: 853 type: Transform - uid: 3934 - type: MVWireStack + type: CableMVStack components: - rot: 4.371139006309477E-08 rad pos: 50.288177,4.693361 parent: 853 type: Transform - uid: 3935 - type: ApcExtensionCableStack + type: CableApcStack components: - rot: 4.371139006309477E-08 rad pos: 50.053802,4.474611 @@ -39408,7 +39347,7 @@ entities: - canCollide: False type: Physics - uid: 3944 - type: ApcExtensionCable + type: CableApcExtension components: - pos: 3.5,0.5 parent: 853 @@ -39418,7 +39357,7 @@ entities: - canCollide: False type: Physics - uid: 3945 - type: MVWire + type: CableMV components: - pos: 13.5,-24.5 parent: 853 @@ -39426,7 +39365,7 @@ entities: - canCollide: False type: Physics - uid: 3946 - type: MVWire + type: CableMV components: - pos: 13.5,-23.5 parent: 853 @@ -39434,7 +39373,7 @@ entities: - canCollide: False type: Physics - uid: 3947 - type: ApcExtensionCable + type: CableApcExtension components: - pos: 8.5,20.5 parent: 853 @@ -39462,7 +39401,7 @@ entities: - airBlocked: False type: Airtight - uid: 3950 - type: ApcExtensionCable + type: CableApcExtension components: - pos: 3.5,1.5 parent: 853 @@ -39526,7 +39465,7 @@ entities: - airBlocked: False type: Airtight - uid: 3957 - type: ApcExtensionCable + type: CableApcExtension components: - pos: 2.5,0.5 parent: 853 @@ -39536,7 +39475,7 @@ entities: - canCollide: False type: Physics - uid: 3958 - type: ApcExtensionCable + type: CableApcExtension components: - pos: 1.5,0.5 parent: 853 @@ -39582,7 +39521,7 @@ entities: - airBlocked: False type: Airtight - uid: 3963 - type: ApcExtensionCable + type: CableApcExtension components: - pos: -31.5,5.5 parent: 853 @@ -39592,7 +39531,7 @@ entities: - canCollide: False type: Physics - uid: 3964 - type: ApcExtensionCable + type: CableApcExtension components: - pos: 7.5,20.5 parent: 853 @@ -39620,7 +39559,7 @@ entities: - airBlocked: False type: Airtight - uid: 3967 - type: ApcExtensionCable + type: CableApcExtension components: - pos: -30.5,5.5 parent: 853 @@ -39630,7 +39569,7 @@ entities: - canCollide: False type: Physics - uid: 3968 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -23.5,5.5 @@ -39659,7 +39598,7 @@ entities: - airBlocked: False type: Airtight - uid: 3971 - type: ApcExtensionCable + type: CableApcExtension components: - pos: 12.5,-8.5 parent: 853 @@ -39688,7 +39627,7 @@ entities: - canCollide: False type: Physics - uid: 3974 - type: ApcExtensionCable + type: CableApcExtension components: - pos: 2.5,6.5 parent: 853 @@ -39698,7 +39637,7 @@ entities: - canCollide: False type: Physics - uid: 3975 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -26.5,7.5 @@ -39707,7 +39646,7 @@ entities: - canCollide: False type: Physics - uid: 3976 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -26.5,6.5 @@ -39716,7 +39655,7 @@ entities: - canCollide: False type: Physics - uid: 3977 - type: ApcExtensionCable + type: CableApcExtension components: - pos: -21.5,13.5 parent: 853 @@ -39735,7 +39674,7 @@ entities: - airBlocked: False type: Airtight - uid: 3979 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -26.5,6.5 @@ -39744,7 +39683,7 @@ entities: - canCollide: False type: Physics - uid: 3980 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -26.5,5.5 @@ -39762,7 +39701,7 @@ entities: parent: 853 type: Transform - uid: 3982 - type: ApcExtensionCable + type: CableApcExtension components: - pos: 3.5,6.5 parent: 853 @@ -39772,7 +39711,7 @@ entities: - canCollide: False type: Physics - uid: 3983 - type: ApcExtensionCable + type: CableApcExtension components: - pos: 4.5,6.5 parent: 853 @@ -39800,7 +39739,7 @@ entities: - airBlocked: False type: Airtight - uid: 3986 - type: ApcExtensionCable + type: CableApcExtension components: - pos: 12.5,-9.5 parent: 853 @@ -39846,7 +39785,7 @@ entities: - airBlocked: False type: Airtight - uid: 3991 - type: ApcExtensionCable + type: CableApcExtension components: - pos: -32.5,-8.5 parent: 853 @@ -39973,7 +39912,7 @@ entities: parent: 853 type: Transform - uid: 4005 - type: ApcExtensionCable + type: CableApcExtension components: - pos: -32.5,-7.5 parent: 853 @@ -40111,7 +40050,7 @@ entities: - canCollide: False type: Physics - uid: 4021 - type: ApcExtensionCable + type: CableApcExtension components: - pos: 23.5,-18.5 parent: 853 @@ -40331,7 +40270,7 @@ entities: parent: 853 type: Transform - uid: 4048 - type: ApcExtensionCable + type: CableApcExtension components: - pos: -18.5,13.5 parent: 853 @@ -40339,7 +40278,7 @@ entities: - canCollide: False type: Physics - uid: 4049 - type: ApcExtensionCable + type: CableApcExtension components: - pos: -17.5,13.5 parent: 853 @@ -40347,7 +40286,7 @@ entities: - canCollide: False type: Physics - uid: 4050 - type: ApcExtensionCable + type: CableApcExtension components: - pos: -17.5,14.5 parent: 853 @@ -40355,7 +40294,7 @@ entities: - canCollide: False type: Physics - uid: 4051 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: -5.5,-26.5 @@ -40372,7 +40311,7 @@ entities: - airBlocked: False type: Airtight - uid: 4053 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -5.5,-26.5 @@ -40389,7 +40328,7 @@ entities: - airBlocked: False type: Airtight - uid: 4055 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: -4.5,-26.5 @@ -40454,7 +40393,7 @@ entities: - airBlocked: False type: Airtight - uid: 4063 - type: ApcExtensionCable + type: CableApcExtension components: - pos: -20.5,13.5 parent: 853 @@ -40471,7 +40410,7 @@ entities: - airBlocked: False type: Airtight - uid: 4065 - type: ApcExtensionCable + type: CableApcExtension components: - pos: -8.5,-7.5 parent: 853 @@ -40481,7 +40420,7 @@ entities: - canCollide: False type: Physics - uid: 4066 - type: ApcExtensionCable + type: CableApcExtension components: - pos: -32.5,-6.5 parent: 853 @@ -40505,7 +40444,7 @@ entities: - airBlocked: False type: Airtight - uid: 4069 - type: ApcExtensionCable + type: CableApcExtension components: - pos: -26.5,4.5 parent: 853 @@ -40541,7 +40480,7 @@ entities: - airBlocked: False type: Airtight - uid: 4073 - type: ApcExtensionCable + type: CableApcExtension components: - pos: -19.5,13.5 parent: 853 @@ -40549,7 +40488,7 @@ entities: - canCollide: False type: Physics - uid: 4074 - type: ApcExtensionCable + type: CableApcExtension components: - pos: 0.5,6.5 parent: 853 @@ -40557,7 +40496,7 @@ entities: - canCollide: False type: Physics - uid: 4075 - type: ApcExtensionCable + type: CableApcExtension components: - pos: -0.5,6.5 parent: 853 @@ -40592,7 +40531,7 @@ entities: parent: 853 type: Transform - uid: 4080 - type: MVWire + type: CableMV components: - pos: -5.5,-7.5 parent: 853 @@ -40842,8 +40781,7 @@ entities: type: Transform - startingCharge: 11999.233 type: Battery - - drawRate: 2000 - type: PowerConsumer + - uid: 4112 type: Bed components: @@ -40870,7 +40808,7 @@ entities: parent: 853 type: Transform - powerLoad: 0 - type: PowerReceiver + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -41434,7 +41372,7 @@ entities: ents: [] type: ContainerContainer - uid: 4183 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 26.5,-10.5 @@ -41443,7 +41381,7 @@ entities: - canCollide: False type: Physics - uid: 4184 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 25.5,-10.5 @@ -41739,7 +41677,7 @@ entities: parent: 853 type: Transform - powerLoad: 0 - type: PowerReceiver + type: ApcPowerReceiver - containers: WeaponCapacitorCharger-powerCellContainer: !type:ContainerSlot {} type: ContainerContainer @@ -41860,7 +41798,7 @@ entities: parent: 853 type: Transform - powerLoad: 0 - type: PowerReceiver + type: ApcPowerReceiver - containers: WeaponCapacitorCharger-powerCellContainer: !type:ContainerSlot {} type: ContainerContainer @@ -42480,7 +42418,7 @@ entities: light_bulb: !type:ContainerSlot {} type: ContainerContainer - uid: 4322 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 45.5,8.5 @@ -42491,7 +42429,7 @@ entities: - canCollide: False type: Physics - uid: 4323 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 46.5,8.5 @@ -42502,7 +42440,7 @@ entities: - canCollide: False type: Physics - uid: 4324 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 46.5,12.5 @@ -42513,7 +42451,7 @@ entities: - canCollide: False type: Physics - uid: 4325 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 47.5,9.5 @@ -42524,7 +42462,7 @@ entities: - canCollide: False type: Physics - uid: 4326 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 47.5,10.5 @@ -42535,7 +42473,7 @@ entities: - canCollide: False type: Physics - uid: 4327 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 47.5,11.5 @@ -42546,7 +42484,7 @@ entities: - canCollide: False type: Physics - uid: 4328 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 47.5,12.5 @@ -42557,7 +42495,7 @@ entities: - canCollide: False type: Physics - uid: 4329 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 47.5,8.5 @@ -42568,7 +42506,7 @@ entities: - canCollide: False type: Physics - uid: 4330 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 47.5,7.5 @@ -42579,7 +42517,7 @@ entities: - canCollide: False type: Physics - uid: 4331 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 49.5,12.5 @@ -42590,7 +42528,7 @@ entities: - canCollide: False type: Physics - uid: 4332 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 49.5,11.5 @@ -42601,7 +42539,7 @@ entities: - canCollide: False type: Physics - uid: 4333 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 49.5,10.5 @@ -42612,7 +42550,7 @@ entities: - canCollide: False type: Physics - uid: 4334 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 49.5,9.5 @@ -42623,7 +42561,7 @@ entities: - canCollide: False type: Physics - uid: 4335 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 49.5,8.5 @@ -42634,7 +42572,7 @@ entities: - canCollide: False type: Physics - uid: 4336 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 49.5,7.5 @@ -42645,7 +42583,7 @@ entities: - canCollide: False type: Physics - uid: 4337 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 48.5,9.5 @@ -42666,7 +42604,7 @@ entities: light_bulb: !type:ContainerSlot {} type: ContainerContainer - uid: 4339 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 42.5,7.5 @@ -42677,7 +42615,7 @@ entities: - canCollide: False type: Physics - uid: 4340 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 43.5,7.5 @@ -42688,7 +42626,7 @@ entities: - canCollide: False type: Physics - uid: 4341 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 44.5,7.5 @@ -42699,7 +42637,7 @@ entities: - canCollide: False type: Physics - uid: 4342 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 45.5,7.5 @@ -42710,7 +42648,7 @@ entities: - canCollide: False type: Physics - uid: 4343 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 46.5,7.5 @@ -42721,7 +42659,7 @@ entities: - canCollide: False type: Physics - uid: 4344 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 47.5,7.5 @@ -42732,7 +42670,7 @@ entities: - canCollide: False type: Physics - uid: 4345 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 48.5,7.5 @@ -42743,7 +42681,7 @@ entities: - canCollide: False type: Physics - uid: 4346 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 48.5,8.5 @@ -42754,7 +42692,7 @@ entities: - canCollide: False type: Physics - uid: 4347 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 48.5,9.5 @@ -42765,7 +42703,7 @@ entities: - canCollide: False type: Physics - uid: 4348 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 48.5,10.5 @@ -42776,7 +42714,7 @@ entities: - canCollide: False type: Physics - uid: 4349 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 48.5,11.5 @@ -42787,7 +42725,7 @@ entities: - canCollide: False type: Physics - uid: 4350 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 48.5,12.5 @@ -43237,7 +43175,7 @@ entities: parent: 853 type: Transform - uid: 4413 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 44.5,-12.5 @@ -43246,7 +43184,7 @@ entities: - canCollide: False type: Physics - uid: 4414 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 44.5,-11.5 @@ -43255,7 +43193,7 @@ entities: - canCollide: False type: Physics - uid: 4415 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 44.5,-10.5 @@ -43264,7 +43202,7 @@ entities: - canCollide: False type: Physics - uid: 4416 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 44.5,-9.5 @@ -43273,7 +43211,7 @@ entities: - canCollide: False type: Physics - uid: 4417 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 45.5,-9.5 @@ -43282,7 +43220,7 @@ entities: - canCollide: False type: Physics - uid: 4418 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 46.5,-9.5 @@ -43293,7 +43231,7 @@ entities: - canCollide: False type: Physics - uid: 4419 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 54.5,-12.5 @@ -43302,7 +43240,7 @@ entities: - canCollide: False type: Physics - uid: 4420 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 54.5,-11.5 @@ -43311,7 +43249,7 @@ entities: - canCollide: False type: Physics - uid: 4421 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 54.5,-10.5 @@ -43320,7 +43258,7 @@ entities: - canCollide: False type: Physics - uid: 4422 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 54.5,-9.5 @@ -43329,7 +43267,7 @@ entities: - canCollide: False type: Physics - uid: 4423 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 53.5,-9.5 @@ -43338,7 +43276,7 @@ entities: - canCollide: False type: Physics - uid: 4424 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 52.5,-9.5 @@ -43349,7 +43287,7 @@ entities: - canCollide: False type: Physics - uid: 4425 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 51.5,-9.5 @@ -43358,7 +43296,7 @@ entities: - canCollide: False type: Physics - uid: 4426 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 47.5,-9.5 @@ -43367,7 +43305,7 @@ entities: - canCollide: False type: Physics - uid: 4427 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 48.5,-9.5 @@ -43378,7 +43316,7 @@ entities: - canCollide: False type: Physics - uid: 4428 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 49.5,-9.5 @@ -43389,7 +43327,7 @@ entities: - canCollide: False type: Physics - uid: 4429 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 50.5,-9.5 @@ -43400,7 +43338,7 @@ entities: - canCollide: False type: Physics - uid: 4430 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 49.5,-8.5 @@ -43409,7 +43347,7 @@ entities: - canCollide: False type: Physics - uid: 4431 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 49.5,-7.5 @@ -43420,7 +43358,7 @@ entities: - canCollide: False type: Physics - uid: 4432 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 49.5,-6.5 @@ -43429,7 +43367,7 @@ entities: - canCollide: False type: Physics - uid: 4433 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 48.5,-6.5 @@ -43438,7 +43376,7 @@ entities: - canCollide: False type: Physics - uid: 4434 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 47.5,-6.5 @@ -43447,7 +43385,7 @@ entities: - canCollide: False type: Physics - uid: 4435 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 47.5,-5.5 @@ -43456,7 +43394,7 @@ entities: - canCollide: False type: Physics - uid: 4436 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 47.5,-4.5 @@ -43465,7 +43403,7 @@ entities: - canCollide: False type: Physics - uid: 4437 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 49.5,-10.5 @@ -43476,7 +43414,7 @@ entities: - canCollide: False type: Physics - uid: 4438 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 49.5,-11.5 @@ -43487,7 +43425,7 @@ entities: - canCollide: False type: Physics - uid: 4439 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 49.5,-12.5 @@ -43498,7 +43436,7 @@ entities: - canCollide: False type: Physics - uid: 4440 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 48.5,-11.5 @@ -43509,7 +43447,7 @@ entities: - canCollide: False type: Physics - uid: 4441 - type: ApcExtensionCable + type: CableApcExtension components: - rot: 4.371139006309477E-08 rad pos: 50.5,-11.5 @@ -43520,7 +43458,7 @@ entities: - canCollide: False type: Physics - uid: 4442 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 45.5,-11.5 @@ -43529,7 +43467,7 @@ entities: - canCollide: False type: Physics - uid: 4443 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 45.5,-10.5 @@ -43540,7 +43478,7 @@ entities: - canCollide: False type: Physics - uid: 4444 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 45.5,-12.5 @@ -43551,7 +43489,7 @@ entities: - canCollide: False type: Physics - uid: 4445 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 46.5,-11.5 @@ -43560,7 +43498,7 @@ entities: - canCollide: False type: Physics - uid: 4446 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 47.5,-11.5 @@ -43569,7 +43507,7 @@ entities: - canCollide: False type: Physics - uid: 4447 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 48.5,-11.5 @@ -43580,7 +43518,7 @@ entities: - canCollide: False type: Physics - uid: 4448 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 48.5,-10.5 @@ -43591,7 +43529,7 @@ entities: - canCollide: False type: Physics - uid: 4449 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 49.5,-10.5 @@ -43602,7 +43540,7 @@ entities: - canCollide: False type: Physics - uid: 4450 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 50.5,-10.5 @@ -43613,7 +43551,7 @@ entities: - canCollide: False type: Physics - uid: 4451 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 49.5,-12.5 @@ -43624,7 +43562,7 @@ entities: - canCollide: False type: Physics - uid: 4452 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 51.5,-11.5 @@ -43633,7 +43571,7 @@ entities: - canCollide: False type: Physics - uid: 4453 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 52.5,-11.5 @@ -43642,7 +43580,7 @@ entities: - canCollide: False type: Physics - uid: 4454 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 53.5,-11.5 @@ -43651,7 +43589,7 @@ entities: - canCollide: False type: Physics - uid: 4455 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 53.5,-10.5 @@ -43662,7 +43600,7 @@ entities: - canCollide: False type: Physics - uid: 4456 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 53.5,-12.5 @@ -43673,7 +43611,7 @@ entities: - canCollide: False type: Physics - uid: 4457 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 49.5,-9.5 @@ -43684,7 +43622,7 @@ entities: - canCollide: False type: Physics - uid: 4458 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 49.5,-8.5 @@ -43693,7 +43631,7 @@ entities: - canCollide: False type: Physics - uid: 4459 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 49.5,-7.5 @@ -43704,7 +43642,7 @@ entities: - canCollide: False type: Physics - uid: 4460 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 49.5,-6.5 @@ -43713,7 +43651,7 @@ entities: - canCollide: False type: Physics - uid: 4461 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 48.5,-6.5 @@ -43722,7 +43660,7 @@ entities: - canCollide: False type: Physics - uid: 4462 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 47.5,-6.5 @@ -43731,7 +43669,7 @@ entities: - canCollide: False type: Physics - uid: 4463 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 47.5,-5.5 @@ -43740,7 +43678,7 @@ entities: - canCollide: False type: Physics - uid: 4464 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 47.5,-4.5 @@ -43749,7 +43687,7 @@ entities: - canCollide: False type: Physics - uid: 4465 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 47.5,-3.5 @@ -43758,7 +43696,7 @@ entities: - canCollide: False type: Physics - uid: 4466 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 47.5,-2.5 @@ -43767,7 +43705,7 @@ entities: - canCollide: False type: Physics - uid: 4467 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 48.5,-2.5 @@ -43776,7 +43714,7 @@ entities: - canCollide: False type: Physics - uid: 4468 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 48.5,-1.5 @@ -43785,7 +43723,7 @@ entities: - canCollide: False type: Physics - uid: 4469 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 48.5,-0.5 @@ -43796,7 +43734,7 @@ entities: - canCollide: False type: Physics - uid: 4470 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 48.5,0.5 @@ -43807,7 +43745,7 @@ entities: - canCollide: False type: Physics - uid: 4471 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 48.5,1.5 @@ -43818,7 +43756,7 @@ entities: - canCollide: False type: Physics - uid: 4472 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 47.5,1.5 @@ -43829,7 +43767,7 @@ entities: - canCollide: False type: Physics - uid: 4473 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 46.5,1.5 @@ -43840,7 +43778,7 @@ entities: - canCollide: False type: Physics - uid: 4474 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 45.5,1.5 @@ -43851,7 +43789,7 @@ entities: - canCollide: False type: Physics - uid: 4475 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 44.5,1.5 @@ -43919,10 +43857,6 @@ entities: type: Transform - startingCharge: 3200136 type: Battery - - drawRate: 8000 - type: PowerConsumer - - supplyRate: 6000 - type: PowerSupplier - uid: 4482 type: SalternSubstation components: @@ -43932,10 +43866,6 @@ entities: type: Transform - startingCharge: 3200136 type: Battery - - drawRate: 8000 - type: PowerConsumer - - supplyRate: 6000 - type: PowerSupplier - uid: 4483 type: Poweredlight components: @@ -43977,7 +43907,7 @@ entities: light_bulb: !type:ContainerSlot {} type: ContainerContainer - uid: 4487 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 45.5,-10.5 @@ -43988,7 +43918,7 @@ entities: - canCollide: False type: Physics - uid: 4488 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 45.5,-11.5 @@ -43997,7 +43927,7 @@ entities: - canCollide: False type: Physics - uid: 4489 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 53.5,-10.5 @@ -44008,7 +43938,7 @@ entities: - canCollide: False type: Physics - uid: 4490 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 53.5,-11.5 @@ -44017,7 +43947,7 @@ entities: - canCollide: False type: Physics - uid: 4491 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 52.5,-11.5 @@ -44026,7 +43956,7 @@ entities: - canCollide: False type: Physics - uid: 4492 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 51.5,-11.5 @@ -44035,7 +43965,7 @@ entities: - canCollide: False type: Physics - uid: 4493 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 51.5,-12.5 @@ -44044,7 +43974,7 @@ entities: - canCollide: False type: Physics - uid: 4494 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 46.5,-11.5 @@ -44053,7 +43983,7 @@ entities: - canCollide: False type: Physics - uid: 4495 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 47.5,-11.5 @@ -44062,7 +43992,7 @@ entities: - canCollide: False type: Physics - uid: 4496 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 47.5,-12.5 @@ -44071,7 +44001,7 @@ entities: - canCollide: False type: Physics - uid: 4497 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 47.5,-13.5 @@ -44080,7 +44010,7 @@ entities: - canCollide: False type: Physics - uid: 4498 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 49.5,-13.5 @@ -44089,7 +44019,7 @@ entities: - canCollide: False type: Physics - uid: 4499 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 48.5,-13.5 @@ -44098,7 +44028,7 @@ entities: - canCollide: False type: Physics - uid: 4500 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 50.5,-13.5 @@ -44107,7 +44037,7 @@ entities: - canCollide: False type: Physics - uid: 4501 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 51.5,-13.5 @@ -44116,7 +44046,7 @@ entities: - canCollide: False type: Physics - uid: 4502 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 49.5,-14.5 @@ -44125,7 +44055,7 @@ entities: - canCollide: False type: Physics - uid: 4503 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 49.5,-15.5 @@ -44134,7 +44064,7 @@ entities: - canCollide: False type: Physics - uid: 4504 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 49.5,-16.5 @@ -44143,7 +44073,7 @@ entities: - canCollide: False type: Physics - uid: 4505 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 49.5,-17.5 @@ -44152,7 +44082,7 @@ entities: - canCollide: False type: Physics - uid: 4506 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 48.5,-17.5 @@ -44161,7 +44091,7 @@ entities: - canCollide: False type: Physics - uid: 4507 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 47.5,-17.5 @@ -44170,7 +44100,7 @@ entities: - canCollide: False type: Physics - uid: 4508 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 46.5,-17.5 @@ -44179,7 +44109,7 @@ entities: - canCollide: False type: Physics - uid: 4509 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 45.5,-17.5 @@ -44188,7 +44118,7 @@ entities: - canCollide: False type: Physics - uid: 4510 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 50.5,-17.5 @@ -44197,7 +44127,7 @@ entities: - canCollide: False type: Physics - uid: 4511 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 51.5,-17.5 @@ -44206,7 +44136,7 @@ entities: - canCollide: False type: Physics - uid: 4512 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 52.5,-17.5 @@ -44215,7 +44145,7 @@ entities: - canCollide: False type: Physics - uid: 4513 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 53.5,-17.5 @@ -44224,7 +44154,7 @@ entities: - canCollide: False type: Physics - uid: 4514 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 54.5,-17.5 @@ -44233,7 +44163,7 @@ entities: - canCollide: False type: Physics - uid: 4515 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 55.5,-17.5 @@ -44242,7 +44172,7 @@ entities: - canCollide: False type: Physics - uid: 4516 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 56.5,-17.5 @@ -44251,7 +44181,7 @@ entities: - canCollide: False type: Physics - uid: 4517 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 56.5,-18.5 @@ -44260,7 +44190,7 @@ entities: - canCollide: False type: Physics - uid: 4518 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 56.5,-19.5 @@ -44269,7 +44199,7 @@ entities: - canCollide: False type: Physics - uid: 4519 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 56.5,-20.5 @@ -44278,7 +44208,7 @@ entities: - canCollide: False type: Physics - uid: 4520 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 56.5,-21.5 @@ -44287,7 +44217,7 @@ entities: - canCollide: False type: Physics - uid: 4521 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 56.5,-22.5 @@ -44296,7 +44226,7 @@ entities: - canCollide: False type: Physics - uid: 4522 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 56.5,-23.5 @@ -44305,7 +44235,7 @@ entities: - canCollide: False type: Physics - uid: 4523 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 56.5,-24.5 @@ -44314,7 +44244,7 @@ entities: - canCollide: False type: Physics - uid: 4524 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 56.5,-25.5 @@ -44323,7 +44253,7 @@ entities: - canCollide: False type: Physics - uid: 4525 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 56.5,-26.5 @@ -44332,7 +44262,7 @@ entities: - canCollide: False type: Physics - uid: 4526 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 56.5,-27.5 @@ -44341,7 +44271,7 @@ entities: - canCollide: False type: Physics - uid: 4527 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 56.5,-28.5 @@ -44350,7 +44280,7 @@ entities: - canCollide: False type: Physics - uid: 4528 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 56.5,-29.5 @@ -44359,7 +44289,7 @@ entities: - canCollide: False type: Physics - uid: 4529 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 56.5,-30.5 @@ -44368,7 +44298,7 @@ entities: - canCollide: False type: Physics - uid: 4530 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 56.5,-31.5 @@ -44377,7 +44307,7 @@ entities: - canCollide: False type: Physics - uid: 4531 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 55.5,-31.5 @@ -44386,7 +44316,7 @@ entities: - canCollide: False type: Physics - uid: 4532 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 54.5,-31.5 @@ -44395,7 +44325,7 @@ entities: - canCollide: False type: Physics - uid: 4533 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 53.5,-31.5 @@ -44404,7 +44334,7 @@ entities: - canCollide: False type: Physics - uid: 4534 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 52.5,-31.5 @@ -44413,7 +44343,7 @@ entities: - canCollide: False type: Physics - uid: 4535 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 51.5,-31.5 @@ -44422,7 +44352,7 @@ entities: - canCollide: False type: Physics - uid: 4536 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 50.5,-31.5 @@ -44431,7 +44361,7 @@ entities: - canCollide: False type: Physics - uid: 4537 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 49.5,-31.5 @@ -44440,7 +44370,7 @@ entities: - canCollide: False type: Physics - uid: 4538 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 48.5,-31.5 @@ -44449,7 +44379,7 @@ entities: - canCollide: False type: Physics - uid: 4539 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 47.5,-31.5 @@ -44458,7 +44388,7 @@ entities: - canCollide: False type: Physics - uid: 4540 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 46.5,-31.5 @@ -44467,7 +44397,7 @@ entities: - canCollide: False type: Physics - uid: 4541 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 45.5,-31.5 @@ -44476,7 +44406,7 @@ entities: - canCollide: False type: Physics - uid: 4542 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 44.5,-31.5 @@ -44485,7 +44415,7 @@ entities: - canCollide: False type: Physics - uid: 4543 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 43.5,-31.5 @@ -44494,7 +44424,7 @@ entities: - canCollide: False type: Physics - uid: 4544 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 42.5,-31.5 @@ -44503,7 +44433,7 @@ entities: - canCollide: False type: Physics - uid: 4545 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 42.5,-30.5 @@ -44512,7 +44442,7 @@ entities: - canCollide: False type: Physics - uid: 4546 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 42.5,-29.5 @@ -44521,7 +44451,7 @@ entities: - canCollide: False type: Physics - uid: 4547 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 42.5,-28.5 @@ -44530,7 +44460,7 @@ entities: - canCollide: False type: Physics - uid: 4548 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 42.5,-27.5 @@ -44539,7 +44469,7 @@ entities: - canCollide: False type: Physics - uid: 4549 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 42.5,-26.5 @@ -44548,7 +44478,7 @@ entities: - canCollide: False type: Physics - uid: 4550 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 42.5,-25.5 @@ -44557,7 +44487,7 @@ entities: - canCollide: False type: Physics - uid: 4551 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 42.5,-22.5 @@ -44566,7 +44496,7 @@ entities: - canCollide: False type: Physics - uid: 4552 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 42.5,-23.5 @@ -44575,7 +44505,7 @@ entities: - canCollide: False type: Physics - uid: 4553 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 42.5,-24.5 @@ -44584,7 +44514,7 @@ entities: - canCollide: False type: Physics - uid: 4554 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 42.5,-21.5 @@ -44593,7 +44523,7 @@ entities: - canCollide: False type: Physics - uid: 4555 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 42.5,-20.5 @@ -44602,7 +44532,7 @@ entities: - canCollide: False type: Physics - uid: 4556 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 42.5,-19.5 @@ -44611,7 +44541,7 @@ entities: - canCollide: False type: Physics - uid: 4557 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 42.5,-18.5 @@ -44620,7 +44550,7 @@ entities: - canCollide: False type: Physics - uid: 4558 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 42.5,-17.5 @@ -44629,7 +44559,7 @@ entities: - canCollide: False type: Physics - uid: 4559 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 43.5,-17.5 @@ -44638,7 +44568,7 @@ entities: - canCollide: False type: Physics - uid: 4560 - type: MVWire + type: CableMV components: - rot: 4.371139006309477E-08 rad pos: 44.5,-17.5 @@ -44850,7 +44780,7 @@ entities: parent: 853 type: Transform - uid: 4590 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 49.5,-11.5 @@ -44931,7 +44861,7 @@ entities: parent: 853 type: Transform - uid: 4601 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 50.5,-11.5 @@ -45117,7 +45047,7 @@ entities: parent: 853 type: Transform - uid: 4627 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 46.5,-17.5 @@ -45126,7 +45056,7 @@ entities: - canCollide: False type: Physics - uid: 4628 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 47.5,-17.5 @@ -45135,7 +45065,7 @@ entities: - canCollide: False type: Physics - uid: 4629 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 48.5,-17.5 @@ -45144,7 +45074,7 @@ entities: - canCollide: False type: Physics - uid: 4630 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 49.5,-17.5 @@ -45153,7 +45083,7 @@ entities: - canCollide: False type: Physics - uid: 4631 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 50.5,-17.5 @@ -45162,7 +45092,7 @@ entities: - canCollide: False type: Physics - uid: 4632 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 51.5,-17.5 @@ -45171,7 +45101,7 @@ entities: - canCollide: False type: Physics - uid: 4633 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 52.5,-17.5 @@ -45180,7 +45110,7 @@ entities: - canCollide: False type: Physics - uid: 4634 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 53.5,-17.5 @@ -45189,7 +45119,7 @@ entities: - canCollide: False type: Physics - uid: 4635 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 45.5,-17.5 @@ -45198,7 +45128,7 @@ entities: - canCollide: False type: Physics - uid: 4636 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 44.5,-17.5 @@ -45207,7 +45137,7 @@ entities: - canCollide: False type: Physics - uid: 4637 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 43.5,-17.5 @@ -45216,7 +45146,7 @@ entities: - canCollide: False type: Physics - uid: 4638 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 42.5,-17.5 @@ -45225,7 +45155,7 @@ entities: - canCollide: False type: Physics - uid: 4639 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 54.5,-17.5 @@ -45234,7 +45164,7 @@ entities: - canCollide: False type: Physics - uid: 4640 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 55.5,-17.5 @@ -45243,7 +45173,7 @@ entities: - canCollide: False type: Physics - uid: 4641 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 56.5,-17.5 @@ -45252,7 +45182,7 @@ entities: - canCollide: False type: Physics - uid: 4642 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 57.5,-17.5 @@ -45261,7 +45191,7 @@ entities: - canCollide: False type: Physics - uid: 4643 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 58.5,-17.5 @@ -45270,7 +45200,7 @@ entities: - canCollide: False type: Physics - uid: 4644 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 58.5,-18.5 @@ -45279,7 +45209,7 @@ entities: - canCollide: False type: Physics - uid: 4645 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 58.5,-19.5 @@ -45288,7 +45218,7 @@ entities: - canCollide: False type: Physics - uid: 4646 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 58.5,-20.5 @@ -45297,7 +45227,7 @@ entities: - canCollide: False type: Physics - uid: 4647 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 58.5,-21.5 @@ -45306,7 +45236,7 @@ entities: - canCollide: False type: Physics - uid: 4648 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 58.5,-22.5 @@ -45315,7 +45245,7 @@ entities: - canCollide: False type: Physics - uid: 4649 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 57.5,-24.5 @@ -45324,7 +45254,7 @@ entities: - canCollide: False type: Physics - uid: 4650 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 58.5,-24.5 @@ -45333,7 +45263,7 @@ entities: - canCollide: False type: Physics - uid: 4651 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 58.5,-23.5 @@ -45342,7 +45272,7 @@ entities: - canCollide: False type: Physics - uid: 4652 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 41.5,-24.5 @@ -45351,7 +45281,7 @@ entities: - canCollide: False type: Physics - uid: 4653 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 40.5,-24.5 @@ -45360,7 +45290,7 @@ entities: - canCollide: False type: Physics - uid: 4654 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 40.5,-23.5 @@ -45369,7 +45299,7 @@ entities: - canCollide: False type: Physics - uid: 4655 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 40.5,-22.5 @@ -45378,7 +45308,7 @@ entities: - canCollide: False type: Physics - uid: 4656 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 40.5,-21.5 @@ -45387,7 +45317,7 @@ entities: - canCollide: False type: Physics - uid: 4657 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 40.5,-20.5 @@ -45396,7 +45326,7 @@ entities: - canCollide: False type: Physics - uid: 4658 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 40.5,-19.5 @@ -45405,7 +45335,7 @@ entities: - canCollide: False type: Physics - uid: 4659 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 40.5,-18.5 @@ -45414,7 +45344,7 @@ entities: - canCollide: False type: Physics - uid: 4660 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 40.5,-17.5 @@ -45423,7 +45353,7 @@ entities: - canCollide: False type: Physics - uid: 4661 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 41.5,-17.5 @@ -45432,7 +45362,7 @@ entities: - canCollide: False type: Physics - uid: 4662 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 42.5,-24.5 @@ -45441,7 +45371,7 @@ entities: - canCollide: False type: Physics - uid: 4663 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 42.5,-23.5 @@ -45450,7 +45380,7 @@ entities: - canCollide: False type: Physics - uid: 4664 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 42.5,-22.5 @@ -45459,7 +45389,7 @@ entities: - canCollide: False type: Physics - uid: 4665 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 42.5,-21.5 @@ -45468,7 +45398,7 @@ entities: - canCollide: False type: Physics - uid: 4666 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 42.5,-25.5 @@ -45477,7 +45407,7 @@ entities: - canCollide: False type: Physics - uid: 4667 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 42.5,-26.5 @@ -45486,7 +45416,7 @@ entities: - canCollide: False type: Physics - uid: 4668 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 42.5,-27.5 @@ -45495,7 +45425,7 @@ entities: - canCollide: False type: Physics - uid: 4669 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 56.5,-24.5 @@ -45504,7 +45434,7 @@ entities: - canCollide: False type: Physics - uid: 4670 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 56.5,-23.5 @@ -45513,7 +45443,7 @@ entities: - canCollide: False type: Physics - uid: 4671 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 56.5,-22.5 @@ -45522,7 +45452,7 @@ entities: - canCollide: False type: Physics - uid: 4672 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 56.5,-21.5 @@ -45531,7 +45461,7 @@ entities: - canCollide: False type: Physics - uid: 4673 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 56.5,-25.5 @@ -45540,7 +45470,7 @@ entities: - canCollide: False type: Physics - uid: 4674 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 56.5,-26.5 @@ -45549,7 +45479,7 @@ entities: - canCollide: False type: Physics - uid: 4675 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 56.5,-27.5 @@ -45558,7 +45488,7 @@ entities: - canCollide: False type: Physics - uid: 4676 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 49.5,-16.5 @@ -45567,7 +45497,7 @@ entities: - canCollide: False type: Physics - uid: 4677 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 49.5,-15.5 @@ -45576,7 +45506,7 @@ entities: - canCollide: False type: Physics - uid: 4678 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 49.5,-14.5 @@ -45585,7 +45515,7 @@ entities: - canCollide: False type: Physics - uid: 4679 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 49.5,-13.5 @@ -45608,7 +45538,7 @@ entities: parent: 853 type: Transform - uid: 4682 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 49.5,-31.5 @@ -45617,7 +45547,7 @@ entities: - canCollide: False type: Physics - uid: 4683 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 48.5,-31.5 @@ -45626,7 +45556,7 @@ entities: - canCollide: False type: Physics - uid: 4684 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 47.5,-31.5 @@ -45635,7 +45565,7 @@ entities: - canCollide: False type: Physics - uid: 4685 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 46.5,-31.5 @@ -45644,7 +45574,7 @@ entities: - canCollide: False type: Physics - uid: 4686 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 50.5,-31.5 @@ -45653,7 +45583,7 @@ entities: - canCollide: False type: Physics - uid: 4687 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 51.5,-31.5 @@ -45662,7 +45592,7 @@ entities: - canCollide: False type: Physics - uid: 4688 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 52.5,-31.5 @@ -45671,7 +45601,7 @@ entities: - canCollide: False type: Physics - uid: 4689 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 49.5,-32.5 @@ -45680,7 +45610,7 @@ entities: - canCollide: False type: Physics - uid: 4690 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 49.5,-33.5 @@ -45689,7 +45619,7 @@ entities: - canCollide: False type: Physics - uid: 4691 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 48.5,-33.5 @@ -45698,7 +45628,7 @@ entities: - canCollide: False type: Physics - uid: 4692 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 47.5,-33.5 @@ -45707,7 +45637,7 @@ entities: - canCollide: False type: Physics - uid: 4693 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 46.5,-33.5 @@ -45716,7 +45646,7 @@ entities: - canCollide: False type: Physics - uid: 4694 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 45.5,-33.5 @@ -45725,7 +45655,7 @@ entities: - canCollide: False type: Physics - uid: 4695 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 44.5,-33.5 @@ -45734,7 +45664,7 @@ entities: - canCollide: False type: Physics - uid: 4696 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 43.5,-33.5 @@ -45743,7 +45673,7 @@ entities: - canCollide: False type: Physics - uid: 4697 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 42.5,-33.5 @@ -45752,7 +45682,7 @@ entities: - canCollide: False type: Physics - uid: 4698 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 41.5,-33.5 @@ -45761,7 +45691,7 @@ entities: - canCollide: False type: Physics - uid: 4699 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 40.5,-33.5 @@ -45770,7 +45700,7 @@ entities: - canCollide: False type: Physics - uid: 4700 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 40.5,-32.5 @@ -45779,7 +45709,7 @@ entities: - canCollide: False type: Physics - uid: 4701 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 40.5,-31.5 @@ -45788,7 +45718,7 @@ entities: - canCollide: False type: Physics - uid: 4702 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 40.5,-30.5 @@ -45797,7 +45727,7 @@ entities: - canCollide: False type: Physics - uid: 4703 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 40.5,-29.5 @@ -45806,7 +45736,7 @@ entities: - canCollide: False type: Physics - uid: 4704 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 40.5,-28.5 @@ -45815,7 +45745,7 @@ entities: - canCollide: False type: Physics - uid: 4705 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 40.5,-27.5 @@ -45824,7 +45754,7 @@ entities: - canCollide: False type: Physics - uid: 4706 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 40.5,-26.5 @@ -45833,7 +45763,7 @@ entities: - canCollide: False type: Physics - uid: 4707 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 40.5,-25.5 @@ -45842,7 +45772,7 @@ entities: - canCollide: False type: Physics - uid: 4708 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 50.5,-33.5 @@ -45851,7 +45781,7 @@ entities: - canCollide: False type: Physics - uid: 4709 - type: HVWire + type: CableHV components: - rot: 4.371139006309477E-08 rad pos: 51.5,-33.5 @@ -45912,10 +45842,6 @@ entities: type: Transform - startingCharge: 3969174 type: Battery - - drawRate: 8000 - type: PowerConsumer - - supplyRate: 6000 - type: PowerSupplier - uid: 4717 type: HydroponicsToolSpade components: @@ -46152,7 +46078,7 @@ entities: ents: [] type: ContainerContainer - uid: 4746 - type: ApcExtensionCable + type: CableApcExtension components: - pos: 7.5,-29.5 parent: 853 @@ -46332,7 +46258,7 @@ entities: parent: 853 type: Transform - uid: 4769 - type: ApcExtensionCable + type: CableApcExtension components: - pos: 8.5,-29.5 parent: 853 @@ -46351,7 +46277,7 @@ entities: - canCollide: False type: Physics - uid: 4771 - type: ApcExtensionCable + type: CableApcExtension components: - pos: 5.5,-25.5 parent: 853 @@ -46359,7 +46285,7 @@ entities: - canCollide: False type: Physics - uid: 4772 - type: ApcExtensionCable + type: CableApcExtension components: - pos: 6.5,-28.5 parent: 853 @@ -46411,7 +46337,7 @@ entities: parent: 853 type: Transform - uid: 4778 - type: ApcExtensionCable + type: CableApcExtension components: - pos: 6.5,-29.5 parent: 853 @@ -46421,7 +46347,7 @@ entities: - canCollide: False type: Physics - uid: 4779 - type: ApcExtensionCable + type: CableApcExtension components: - pos: 4.5,-29.5 parent: 853 @@ -46431,7 +46357,7 @@ entities: - canCollide: False type: Physics - uid: 4780 - type: ApcExtensionCable + type: CableApcExtension components: - pos: 5.5,-29.5 parent: 853 @@ -46439,7 +46365,7 @@ entities: - canCollide: False type: Physics - uid: 4781 - type: ApcExtensionCable + type: CableApcExtension components: - pos: 6.5,-27.5 parent: 853 @@ -46468,7 +46394,7 @@ entities: light_bulb: !type:ContainerSlot {} type: ContainerContainer - uid: 4784 - type: ApcExtensionCable + type: CableApcExtension components: - rot: -1.5707963267948966 rad pos: 13.5,-23.5 @@ -46477,7 +46403,7 @@ entities: - canCollide: False type: Physics - uid: 4785 - type: ApcExtensionCable + type: CableApcExtension components: - rot: -1.5707963267948966 rad pos: 12.5,-23.5 @@ -46488,7 +46414,7 @@ entities: - canCollide: False type: Physics - uid: 4786 - type: ApcExtensionCable + type: CableApcExtension components: - rot: -1.5707963267948966 rad pos: 12.5,-24.5 @@ -46499,7 +46425,7 @@ entities: - canCollide: False type: Physics - uid: 4787 - type: ApcExtensionCable + type: CableApcExtension components: - rot: -1.5707963267948966 rad pos: 12.5,-24.5 @@ -46510,7 +46436,7 @@ entities: - canCollide: False type: Physics - uid: 4788 - type: ApcExtensionCable + type: CableApcExtension components: - rot: -1.5707963267948966 rad pos: 12.5,-25.5 @@ -46521,7 +46447,7 @@ entities: - canCollide: False type: Physics - uid: 4789 - type: ApcExtensionCable + type: CableApcExtension components: - rot: -1.5707963267948966 rad pos: 12.5,-25.5 @@ -46532,7 +46458,7 @@ entities: - canCollide: False type: Physics - uid: 4790 - type: ApcExtensionCable + type: CableApcExtension components: - rot: -1.5707963267948966 rad pos: 12.5,-26.5 @@ -46543,7 +46469,7 @@ entities: - canCollide: False type: Physics - uid: 4791 - type: ApcExtensionCable + type: CableApcExtension components: - rot: -1.5707963267948966 rad pos: 12.5,-26.5 @@ -46554,7 +46480,7 @@ entities: - canCollide: False type: Physics - uid: 4792 - type: ApcExtensionCable + type: CableApcExtension components: - rot: -1.5707963267948966 rad pos: 12.5,-27.5 @@ -46565,7 +46491,7 @@ entities: - canCollide: False type: Physics - uid: 4793 - type: ApcExtensionCable + type: CableApcExtension components: - rot: -1.5707963267948966 rad pos: 12.5,-27.5 @@ -46576,7 +46502,7 @@ entities: - canCollide: False type: Physics - uid: 4794 - type: ApcExtensionCable + type: CableApcExtension components: - rot: -1.5707963267948966 rad pos: 12.5,-28.5 @@ -46585,7 +46511,7 @@ entities: - canCollide: False type: Physics - uid: 4795 - type: ApcExtensionCable + type: CableApcExtension components: - rot: -1.5707963267948966 rad pos: 12.5,-29.5 @@ -46596,7 +46522,7 @@ entities: - canCollide: False type: Physics - uid: 4796 - type: ApcExtensionCable + type: CableApcExtension components: - rot: -1.5707963267948966 rad pos: 11.5,-29.5 @@ -46607,7 +46533,7 @@ entities: - canCollide: False type: Physics - uid: 4797 - type: ApcExtensionCable + type: CableApcExtension components: - rot: -1.5707963267948966 rad pos: 10.5,-29.5 @@ -46616,7 +46542,7 @@ entities: - canCollide: False type: Physics - uid: 4798 - type: ApcExtensionCable + type: CableApcExtension components: - rot: -1.5707963267948966 rad pos: 9.5,-29.5 @@ -46627,7 +46553,7 @@ entities: - canCollide: False type: Physics - uid: 4799 - type: ApcExtensionCable + type: CableApcExtension components: - rot: -1.5707963267948966 rad pos: 12.5,-23.5 @@ -46638,7 +46564,7 @@ entities: - canCollide: False type: Physics - uid: 4800 - type: ApcExtensionCable + type: CableApcExtension components: - rot: -1.5707963267948966 rad pos: 11.5,-23.5 @@ -46649,7 +46575,7 @@ entities: - canCollide: False type: Physics - uid: 4801 - type: ApcExtensionCable + type: CableApcExtension components: - rot: -1.5707963267948966 rad pos: 10.5,-23.5 @@ -46660,7 +46586,7 @@ entities: - canCollide: False type: Physics - uid: 4802 - type: ApcExtensionCable + type: CableApcExtension components: - rot: -1.5707963267948966 rad pos: 9.5,-23.5 @@ -46951,7 +46877,7 @@ entities: ents: [] type: ContainerContainer - uid: 4832 - type: HVWire + type: CableHV components: - pos: 3.5,-24.5 parent: 853 @@ -46961,7 +46887,7 @@ entities: - canCollide: False type: Physics - uid: 4833 - type: HVWire + type: CableHV components: - pos: 3.5,-25.5 parent: 853 @@ -46971,7 +46897,7 @@ entities: - canCollide: False type: Physics - uid: 4834 - type: HVWire + type: CableHV components: - pos: 3.5,-26.5 parent: 853 @@ -46981,7 +46907,7 @@ entities: - canCollide: False type: Physics - uid: 4835 - type: HVWire + type: CableHV components: - pos: 3.5,-27.5 parent: 853 @@ -46991,7 +46917,7 @@ entities: - canCollide: False type: Physics - uid: 4836 - type: HVWire + type: CableHV components: - pos: 3.5,-28.5 parent: 853 @@ -47088,7 +47014,7 @@ entities: parent: 853 type: Transform - uid: 4850 - type: ApcExtensionCable + type: CableApcExtension components: - pos: 6.5,-26.5 parent: 853 @@ -47098,7 +47024,7 @@ entities: - canCollide: False type: Physics - uid: 4851 - type: ApcExtensionCable + type: CableApcExtension components: - pos: 6.5,-25.5 parent: 853 @@ -47138,7 +47064,7 @@ entities: light_bulb: !type:ContainerSlot {} type: ContainerContainer - uid: 4855 - type: ApcExtensionCable + type: CableApcExtension components: - pos: 8.5,-23.5 parent: 853 @@ -47148,7 +47074,7 @@ entities: - canCollide: False type: Physics - uid: 4856 - type: ApcExtensionCable + type: CableApcExtension components: - pos: 7.5,-23.5 parent: 853 @@ -47164,7 +47090,7 @@ entities: parent: 853 type: Transform - uid: 4858 - type: ApcExtensionCable + type: CableApcExtension components: - pos: 4.5,-25.5 parent: 853 @@ -47340,7 +47266,7 @@ entities: ents: [] type: ContainerContainer - uid: 4885 - type: ApcExtensionCable + type: CableApcExtension components: - pos: -15.5,-10.5 parent: 853 @@ -47356,7 +47282,7 @@ entities: parent: 853 type: Transform - uid: 4887 - type: ApcExtensionCable + type: CableApcExtension components: - pos: -13.5,-10.5 parent: 853 @@ -47376,7 +47302,7 @@ entities: light_bulb: !type:ContainerSlot {} type: ContainerContainer - uid: 4889 - type: ApcExtensionCable + type: CableApcExtension components: - pos: 11.5,20.5 parent: 853 @@ -47386,7 +47312,7 @@ entities: - canCollide: False type: Physics - uid: 4890 - type: ApcExtensionCable + type: CableApcExtension components: - pos: 12.5,20.5 parent: 853 @@ -47394,7 +47320,7 @@ entities: - canCollide: False type: Physics - uid: 4891 - type: ApcExtensionCable + type: CableApcExtension components: - pos: 12.5,21.5 parent: 853 @@ -47404,7 +47330,7 @@ entities: - canCollide: False type: Physics - uid: 4892 - type: ApcExtensionCable + type: CableApcExtension components: - pos: 12.5,22.5 parent: 853 @@ -47414,7 +47340,7 @@ entities: - canCollide: False type: Physics - uid: 4893 - type: ApcExtensionCable + type: CableApcExtension components: - pos: 12.5,23.5 parent: 853 diff --git a/Resources/Prototypes/Catalog/Fills/Crates/engineering.yml b/Resources/Prototypes/Catalog/Fills/Crates/engineering.yml index 88e7b10c28..de38aab797 100644 --- a/Resources/Prototypes/Catalog/Fills/Crates/engineering.yml +++ b/Resources/Prototypes/Catalog/Fills/Crates/engineering.yml @@ -51,7 +51,7 @@ components: - type: StorageFill contents: - - id: ApcExtensionCableStack + - id: CableApcStack amount: 3 - type: entity @@ -61,7 +61,7 @@ components: - type: StorageFill contents: - - id: MVWireStack + - id: CableMVStack amount: 3 - type: entity @@ -71,7 +71,7 @@ components: - type: StorageFill contents: - - id: HVWireStack + - id: CableHVStack amount: 3 - type: entity @@ -81,9 +81,9 @@ components: - type: StorageFill contents: - - id: HVWireStack + - id: CableHVStack amount: 2 - - id: MVWireStack + - id: CableMVStack amount: 2 - - id: ApcExtensionCableStack + - id: CableApcStack amount: 2 diff --git a/Resources/Prototypes/Catalog/Fills/Items/belt.yml b/Resources/Prototypes/Catalog/Fills/Items/belt.yml index 893dc3231b..f67ff53d7c 100644 --- a/Resources/Prototypes/Catalog/Fills/Items/belt.yml +++ b/Resources/Prototypes/Catalog/Fills/Items/belt.yml @@ -24,7 +24,7 @@ - id: Crowbar - id: WelderExperimental - id: Multitool - - id: ApcExtensionCableStack + - id: CableApcStack - type: entity id: ClothingBeltSecurityFilled diff --git a/Resources/Prototypes/Catalog/Fills/Items/toolboxes.yml b/Resources/Prototypes/Catalog/Fills/Items/toolboxes.yml index 018414e302..4d367f3c09 100644 --- a/Resources/Prototypes/Catalog/Fills/Items/toolboxes.yml +++ b/Resources/Prototypes/Catalog/Fills/Items/toolboxes.yml @@ -30,12 +30,12 @@ - id: Screwdriver - id: Crowbar - id: Wirecutter - - id: ApcExtensionCableStack - - id: MVWireStack + - id: CableApcStack + - id: CableMVStack - id: ClothingHandsGlovesColorYellow prob: 0.05 orGroup: GlovesOrWires - - id: HVWireStack + - id: CableHVStack orGroup: GlovesOrWires - type: entity diff --git a/Resources/Prototypes/Catalog/Fills/Lockers/engineer.yml b/Resources/Prototypes/Catalog/Fills/Lockers/engineer.yml index b92e47ec69..c44efffef7 100644 --- a/Resources/Prototypes/Catalog/Fills/Lockers/engineer.yml +++ b/Resources/Prototypes/Catalog/Fills/Lockers/engineer.yml @@ -27,11 +27,11 @@ prob: 0.05 - id: ClothingHeadHatHardhatRed prob: 0.4 - - id: ApcExtensionCableStack + - id: CableApcStack prob: 0.3 - - id: ApcExtensionCableStack + - id: CableApcStack prob: 0.3 - - id: ApcExtensionCableStack + - id: CableApcStack prob: 0.3 - type: entity @@ -47,9 +47,9 @@ prob: 0.05 - id: APCElectronics prob: 0.1 - - id: MVWireStack + - id: CableMVStack prob: 0.2 - - id: ApcExtensionCableStack + - id: CableApcStack prob: 0.3 - type: entity @@ -91,7 +91,7 @@ - id: OxygenTankFilled - id: ClothingShoesBootsMag prob: 0.15 - + - type: entity id: LockerRadiationSuitFilled parent: LockerRadiationSuit diff --git a/Resources/Prototypes/Catalog/Research/technologies.yml b/Resources/Prototypes/Catalog/Research/technologies.yml index 9645d50403..2978056ac6 100644 --- a/Resources/Prototypes/Catalog/Research/technologies.yml +++ b/Resources/Prototypes/Catalog/Research/technologies.yml @@ -16,7 +16,7 @@ - type: technology name: "cleaning technology" - id: MopBucket + id: MopBucket description: Start to a shiny clean station icon: sprite: Objects/Specific/Janitorial/janitorial.rsi @@ -44,7 +44,7 @@ unlockedRecipes: - Scythe - Hatchet - - KitchenKnife + - KitchenKnife - type: technology name: "advanced botany" @@ -234,8 +234,8 @@ - BasicResearch unlockedRecipes: - CableStack - - MVWireStack - - HVWireStack + - CableMVStack + - CableHVStack - LightBulb - LightTube - FirelockElectronics @@ -253,4 +253,4 @@ # state: icon # requiredPoints: 999999 # requiredTechnologies: -# - BasicResearch \ No newline at end of file +# - BasicResearch diff --git a/Resources/Prototypes/Catalog/VendingMachines/Inventories/youtool.yml b/Resources/Prototypes/Catalog/VendingMachines/Inventories/youtool.yml index 233b9ccde1..10938a6eaa 100644 --- a/Resources/Prototypes/Catalog/VendingMachines/Inventories/youtool.yml +++ b/Resources/Prototypes/Catalog/VendingMachines/Inventories/youtool.yml @@ -5,7 +5,7 @@ animationDuration: 1.1 spriteName: youtool startingInventory: - ApcExtensionCableStack1: 10 + CableApcStack1: 10 Crowbar: 5 Welder: 3 Wirecutter: 5 diff --git a/Resources/Prototypes/Entities/Constructible/Doors/airlock_base.yml b/Resources/Prototypes/Entities/Constructible/Doors/airlock_base.yml index 77436e43f9..523a1e4c62 100644 --- a/Resources/Prototypes/Entities/Constructible/Doors/airlock_base.yml +++ b/Resources/Prototypes/Entities/Constructible/Doors/airlock_base.yml @@ -46,7 +46,7 @@ close_sound: /Audio/Machines/airlock_close.ogg deny_sound: /Audio/Machines/airlock_deny.ogg - type: WiresVisualizer - - type: PowerReceiver + - type: ApcPowerReceiver - type: Wires BoardName: "Airlock Control" LayoutId: Airlock diff --git a/Resources/Prototypes/Entities/Constructible/Power/Engines/AME/controller.yml b/Resources/Prototypes/Entities/Constructible/Power/Engines/AME/controller.yml index ef85ffa558..c34c0821b9 100644 --- a/Resources/Prototypes/Entities/Constructible/Power/Engines/AME/controller.yml +++ b/Resources/Prototypes/Entities/Constructible/Power/Engines/AME/controller.yml @@ -54,12 +54,12 @@ examinable: true nodes: ame: - !type:AdjacentNode + !type:CableDeviceNode nodeGroupID: AMEngine input: - !type:AdjacentNode + !type:CableDeviceNode nodeGroupID: HVPower - - type: PowerReceiver + - type: ApcPowerReceiver - type: PowerSupplier supplyRate: 0 diff --git a/Resources/Prototypes/Entities/Constructible/Power/Engines/PA/control_box.yml b/Resources/Prototypes/Entities/Constructible/Power/Engines/PA/control_box.yml index 65e8d061cb..14494511f7 100644 --- a/Resources/Prototypes/Entities/Constructible/Power/Engines/PA/control_box.yml +++ b/Resources/Prototypes/Entities/Constructible/Power/Engines/PA/control_box.yml @@ -17,7 +17,7 @@ visuals: - type: ParticleAcceleratorPartVisualizer baseState: unlit - - type: PowerReceiver + - type: ApcPowerReceiver - type: ParticleAcceleratorControlBox - type: Construction graph: particleAcceleratorControlBox diff --git a/Resources/Prototypes/Entities/Constructible/Power/Engines/PA/power_box.yml b/Resources/Prototypes/Entities/Constructible/Power/Engines/PA/power_box.yml index 81fd4cd3ba..b9b24c7d43 100644 --- a/Resources/Prototypes/Entities/Constructible/Power/Engines/PA/power_box.yml +++ b/Resources/Prototypes/Entities/Constructible/Power/Engines/PA/power_box.yml @@ -24,7 +24,7 @@ examinable: true nodes: input: - !type:AdjacentNode + !type:CableDeviceNode nodeGroupID: HVPower - type: Construction graph: particleAcceleratorPowerBox diff --git a/Resources/Prototypes/Entities/Constructible/Power/Engines/Singularity/collector.yml b/Resources/Prototypes/Entities/Constructible/Power/Engines/Singularity/collector.yml index 2fae75c43c..b5e8c6ea33 100644 --- a/Resources/Prototypes/Entities/Constructible/Power/Engines/Singularity/collector.yml +++ b/Resources/Prototypes/Entities/Constructible/Power/Engines/Singularity/collector.yml @@ -36,7 +36,7 @@ examinable: true nodes: input: - !type:AdjacentNode + !type:CableDeviceNode nodeGroupID: HVPower - type: RadiationCollector # Note that this doesn't matter too much (see next comment) @@ -47,8 +47,10 @@ - type: BatteryDischarger # This is JUST a default. It has to be dynamically adjusted to ensure that the battery doesn't discharge "too fast" & run out immediately, while still scaling by input power. activeSupplyRate: 100000 - - type: PowerSupplier - supplyRate: 0 - type: Anchorable - type: Rotatable - type: Pullable + - type: PowerNetworkBattery + maxSupply: 1000000000 + supplyRampTolerance: 1000000000 + diff --git a/Resources/Prototypes/Entities/Constructible/Power/Engines/Singularity/emitter.yml b/Resources/Prototypes/Entities/Constructible/Power/Engines/Singularity/emitter.yml index 1067d20264..c8ba2e3832 100644 --- a/Resources/Prototypes/Entities/Constructible/Power/Engines/Singularity/emitter.yml +++ b/Resources/Prototypes/Entities/Constructible/Power/Engines/Singularity/emitter.yml @@ -41,7 +41,7 @@ examinable: true nodes: input: - !type:AdjacentNode + !type:CableDeviceNode nodeGroupID: MVPower - type: Damageable resistances: metallicResistances diff --git a/Resources/Prototypes/Entities/Constructible/Power/Generation/generator.yml b/Resources/Prototypes/Entities/Constructible/Power/Generation/generator.yml index 45091750d8..6772432f48 100644 --- a/Resources/Prototypes/Entities/Constructible/Power/Generation/generator.yml +++ b/Resources/Prototypes/Entities/Constructible/Power/Generation/generator.yml @@ -33,12 +33,11 @@ examinable: true nodes: output: - !type:AdjacentNode + !type:CableDeviceNode nodeGroupID: HVPower - type: PowerSupplier supplyRate: 3000 + supplyRampRate: 500 + supplyRampTolerance: 500 - type: Anchorable - type: Pullable - - type: ClientEntitySpawner - prototypes: - - HVDummyWire diff --git a/Resources/Prototypes/Entities/Constructible/Power/Generation/solar.yml b/Resources/Prototypes/Entities/Constructible/Power/Generation/solar.yml index 9f852d0c9a..0daea56341 100644 --- a/Resources/Prototypes/Entities/Constructible/Power/Generation/solar.yml +++ b/Resources/Prototypes/Entities/Constructible/Power/Generation/solar.yml @@ -29,9 +29,11 @@ examinable: true nodes: output: - !type:AdjacentNode + !type:CableDeviceNode nodeGroupID: HVPower - type: PowerSupplier + supplyRampTolerance: 500 + supplyRampRate: 500 - type: SolarPanel supply: 1500 - type: SnapGrid @@ -47,9 +49,6 @@ acts: ["Breakage"] - type: Anchorable - type: Pullable - - type: ClientEntitySpawner - prototypes: - - HVDummyWire - type: Construction graph: solarpanel node: solarpanel diff --git a/Resources/Prototypes/Entities/Constructible/Power/Specific/debug_power.yml b/Resources/Prototypes/Entities/Constructible/Power/Specific/debug_power.yml index 963521c356..24f55dfcfa 100644 --- a/Resources/Prototypes/Entities/Constructible/Power/Specific/debug_power.yml +++ b/Resources/Prototypes/Entities/Constructible/Power/Specific/debug_power.yml @@ -25,7 +25,7 @@ - type: NodeContainer nodes: input: - !type:AdjacentNode + !type:CableDeviceNode nodeGroupID: HVPower - type: PowerConsumer drawRate: 50 @@ -64,10 +64,8 @@ - type: NodeContainer nodes: input: - !type:AdjacentNode + !type:CableDeviceNode nodeGroupID: HVPower - - type: PowerConsumer - - type: BatteryStorage - type: Anchorable - type: entity @@ -93,9 +91,8 @@ - type: NodeContainer nodes: input: - !type:AdjacentNode + !type:CableDeviceNode nodeGroupID: HVPower - - type: PowerSupplier - type: BatteryDischarger - type: Anchorable @@ -133,5 +130,5 @@ - type: Sprite sprite: Constructible/Power/power.rsi state: wirelessmachine - - type: PowerReceiver + - type: ApcPowerReceiver - type: Anchorable diff --git a/Resources/Prototypes/Entities/Constructible/Power/Specific/saltern_power.yml b/Resources/Prototypes/Entities/Constructible/Power/Specific/saltern_power.yml index 91e1e4f651..d9cdf02d91 100644 --- a/Resources/Prototypes/Entities/Constructible/Power/Specific/saltern_power.yml +++ b/Resources/Prototypes/Entities/Constructible/Power/Specific/saltern_power.yml @@ -12,10 +12,6 @@ - type: Battery maxCharge: 10000000 startingCharge: 10000000 - - type: BatteryStorage - activeDrawRate: 0 - - type: BatteryDischarger - activeSupplyRate: 0 - type: entity parent: BaseSubstation @@ -24,10 +20,6 @@ - type: Battery maxCharge: 4000000 startingCharge: 4000000 - - type: BatteryStorage - activeDrawRate: 8000 - - type: BatteryDischarger - activeSupplyRate: 6000 - type: entity parent: BaseApc @@ -36,5 +28,3 @@ - type: Battery maxCharge: 12000 startingCharge: 2000 - - type: BatteryStorage - activeDrawRate: 2000 diff --git a/Resources/Prototypes/Entities/Constructible/Power/arcade.yml b/Resources/Prototypes/Entities/Constructible/Power/arcade.yml index 5f3b4009e5..f0db5e326a 100644 --- a/Resources/Prototypes/Entities/Constructible/Power/arcade.yml +++ b/Resources/Prototypes/Entities/Constructible/Power/arcade.yml @@ -5,7 +5,7 @@ name: arcade parent: ComputerBase components: - - type: PowerReceiver + - type: ApcPowerReceiver - type: Sprite sprite: Constructible/Power/computers.rsi layers: diff --git a/Resources/Prototypes/Entities/Constructible/Power/cable_terminal.yml b/Resources/Prototypes/Entities/Constructible/Power/cable_terminal.yml new file mode 100644 index 0000000000..ef3c90a1cb --- /dev/null +++ b/Resources/Prototypes/Entities/Constructible/Power/cable_terminal.yml @@ -0,0 +1,42 @@ +- type: entity + id: CableTerminal + name: cable terminal + placement: + mode: SnapgridCenter + components: + - type: Sprite + sprite: Constructible/Power/wire_terminal.rsi + state: term + netsync: false + drawdepth: BelowFloor + - type: Clickable + - type: Physics + fixtures: + - shape: + !type:PhysShapeAabb + bounds: "-0.5, -0.5, 0.5, 0.5" + layer: + - Underplating + - type: InteractionOutline + - type: SnapGrid + - type: Damageable + resistances: metallicResistances + - type: Destructible + thresholds: + - trigger: + !type:DamageTrigger + damage: 100 + behaviors: + - !type:DoActsBehavior + acts: ["Destruction"] + - type: SubFloorHide + - type: NodeContainer + nodes: + # Just define nodes for both MV and HV. One will end up unused in 99% of cases + # but it means one cable terminal type. + powerHV: + !type:CableTerminalNode + nodeGroupID: HVPower + powerMV: + !type:CableTerminalNode + nodeGroupID: MVPower diff --git a/Resources/Prototypes/Entities/Constructible/Power/wires.yml b/Resources/Prototypes/Entities/Constructible/Power/cables.yml similarity index 60% rename from Resources/Prototypes/Entities/Constructible/Power/wires.yml rename to Resources/Prototypes/Entities/Constructible/Power/cables.yml index 36ba146627..4970d246cb 100644 --- a/Resources/Prototypes/Entities/Constructible/Power/wires.yml +++ b/Resources/Prototypes/Entities/Constructible/Power/cables.yml @@ -1,6 +1,6 @@ - type: entity abstract: true - id: WireBase + id: CableBase placement: mode: SnapgridCenter components: @@ -17,8 +17,6 @@ - type: Sprite netsync: false drawdepth: BelowFloor - - type: IconSmooth - mode: CardinalFlags - type: Damageable resistances: metallicResistances - type: Destructible @@ -30,11 +28,13 @@ - !type:DoActsBehavior acts: ["Destruction"] - type: SubFloorHide + - type: CableVis + node: power - type: entity - parent: WireBase - id: HVWire - name: HV Wire + parent: CableBase + id: CableHV + name: HV power cable description: An orange high voltage power cable. components: - type: Sprite @@ -43,20 +43,17 @@ - type: Icon sprite: Constructible/Power/Wires/hv_cable.rsi state: hvcable_4 - - type: IconSmooth - base: hvcable_ - key: hv_cables - type: NodeContainer nodes: power: - !type:AdjacentNode + !type:CableNode nodeGroupID: HVPower wire: !type:AdjacentNode nodeGroupID: WireNet - - type: Wire - wireDroppedOnCutPrototype: HVWireStack1 - wireType: HighVoltage + - type: Cable + cableDroppedOnCutPrototype: CableHVStack1 + cableType: HighVoltage - type: Destructible thresholds: - trigger: @@ -65,16 +62,20 @@ behaviors: - !type:SpawnEntitiesBehavior spawn: - HVWireStack1: + CableHVStack1: min: 1 max: 1 - !type:DoActsBehavior acts: [ "Destruction" ] + - type: Appearance + visuals: + - type: CableVisualizer + base: hvcable_ - type: entity - parent: WireBase - id: MVWire - name: MV Wire + parent: CableBase + id: CableMV + name: MV power cable description: A medium voltage power cable. components: - type: Sprite @@ -85,20 +86,17 @@ color: Yellow sprite: Constructible/Power/Wires/mv_cable.rsi state: mvcable_4 - - type: IconSmooth - base: mvcable_ - key: mv_cables - type: NodeContainer nodes: power: - !type:AdjacentNode + !type:CableNode nodeGroupID: MVPower wire: !type:AdjacentNode nodeGroupID: WireNet - - type: Wire - wireDroppedOnCutPrototype: MVWireStack1 - wireType: MediumVoltage + - type: Cable + cableDroppedOnCutPrototype: CableMVStack1 + cableType: MediumVoltage - type: Destructible thresholds: - trigger: @@ -107,16 +105,20 @@ behaviors: - !type:SpawnEntitiesBehavior spawn: - MVWireStack1: + CableMVStack1: min: 1 max: 1 - !type:DoActsBehavior acts: [ "Destruction" ] + - type: Appearance + visuals: + - type: CableVisualizer + base: mvcable_ - type: entity - parent: WireBase - id: ApcExtensionCable - name: LV Wire + parent: CableBase + id: CableApcExtension + name: LV power cable description: A cable used to connect machines to an APC. #ACPs aren't area defined anymore so need this cable to connect things to the APC. This description should be dynamic in future. components: - type: Sprite @@ -127,22 +129,19 @@ color: Green sprite: Constructible/Power/Wires/lv_cable.rsi state: lvcable_4 - - type: IconSmooth - base: lvcable_ - key: lv_cables - type: NodeContainer nodes: power: - !type:AdjacentNode + !type:CableNode nodeGroupID: Apc wire: !type:AdjacentNode nodeGroupID: WireNet - type: PowerProvider voltage: Apc - - type: Wire - wireDroppedOnCutPrototype: ApcExtensionCableStack1 - wireType: Apc + - type: Cable + cableDroppedOnCutPrototype: CableApcStack1 + cableType: Apc - type: Destructible thresholds: - trigger: @@ -151,64 +150,12 @@ behaviors: - !type:SpawnEntitiesBehavior spawn: - ApcExtensionCableStack1: + CableApcStack1: min: 1 max: 1 - !type:DoActsBehavior acts: [ "Destruction" ] - -#Dummy wires - -- type: entity - abstract: true - id: BaseDummyWire - placement: - mode: SnapgridCenter - components: - - type: SnapGrid - - type: Sprite - drawdepth: BelowFloor - - type: IconSmooth - mode: CardinalFlags - - type: SubFloorHide - -- type: entity - abstract: true - parent: BaseDummyWire - id: HVDummyWire - name: HV Connector Wire - components: - - type: Sprite - sprite: Constructible/Power/Wires/hv_cable.rsi - state: hvcable_0 - - type: IconSmooth - base: hvcable_ - key: hv_cables - -- type: entity - abstract: true - parent: BaseDummyWire - id: MVDummyWire - name: MV Connector Wire - components: - - type: Sprite - sprite: Constructible/Power/Wires/mv_cable.rsi - state: mvcable_0 - color: Yellow - - type: IconSmooth - base: mvcable_ - key: mv_cables - -- type: entity - abstract: true - parent: BaseDummyWire - id: LVDummyWire - name: LV Connector Wire - components: - - type: Sprite - sprite: Constructible/Power/Wires/lv_cable.rsi - state: lvcable_0 - color: Green - - type: IconSmooth - base: lvcable_ - key: lv_cables + - type: Appearance + visuals: + - type: CableVisualizer + base: lvcable_ diff --git a/Resources/Prototypes/Entities/Constructible/Power/chargers.yml b/Resources/Prototypes/Entities/Constructible/Power/chargers.yml index 17cb057c14..017ebeeac9 100644 --- a/Resources/Prototypes/Entities/Constructible/Power/chargers.yml +++ b/Resources/Prototypes/Entities/Constructible/Power/chargers.yml @@ -11,7 +11,7 @@ state: empty - type: PowerCellCharger transfer_efficiency: 0.85 - - type: PowerReceiver + - type: ApcPowerReceiver - type: Appearance visuals: - type: PowerChargerVisualizer @@ -32,7 +32,7 @@ state: empty - type: WeaponCapacitorCharger transfer_efficiency: 0.85 - - type: PowerReceiver + - type: ApcPowerReceiver - type: Appearance visuals: - type: PowerChargerVisualizer @@ -53,7 +53,7 @@ state: empty - type: WeaponCapacitorCharger transfer_efficiency: 0.95 - - type: PowerReceiver + - type: ApcPowerReceiver - type: Appearance visuals: - type: PowerChargerVisualizer diff --git a/Resources/Prototypes/Entities/Constructible/Power/computers.yml b/Resources/Prototypes/Entities/Constructible/Power/computers.yml index 9a53554a1d..d19ec4cb9e 100644 --- a/Resources/Prototypes/Entities/Constructible/Power/computers.yml +++ b/Resources/Prototypes/Entities/Constructible/Power/computers.yml @@ -82,7 +82,7 @@ graph: computer node: computer - type: Computer - - type: PowerReceiver + - type: ApcPowerReceiver - type: Sprite sprite: Constructible/Power/computers.rsi layers: @@ -158,7 +158,7 @@ type: ResearchConsoleBoundUserInterface - key: enum.ResearchClientUiKey.Key type: ResearchClientBoundUserInterface - - type: PowerReceiver + - type: ApcPowerReceiver load: 200 priority: Low - type: Computer diff --git a/Resources/Prototypes/Entities/Constructible/Power/lathe.yml b/Resources/Prototypes/Entities/Constructible/Power/lathe.yml index 0cb0e591c6..7202bd93f7 100644 --- a/Resources/Prototypes/Entities/Constructible/Power/lathe.yml +++ b/Resources/Prototypes/Entities/Constructible/Power/lathe.yml @@ -30,7 +30,7 @@ interfaces: - key: enum.LatheUiKey.Key type: LatheBoundUserInterface - - type: PowerReceiver + - type: ApcPowerReceiver - type: entity parent: BaseLathe @@ -138,8 +138,8 @@ - SheetRGlass - SheetPlastic - CableStack - - MVWireStack - - HVWireStack + - CableMVStack + - CableHVStack - ConveyorAssembly - RCD - RCDAmmo diff --git a/Resources/Prototypes/Entities/Constructible/Power/parts.yml b/Resources/Prototypes/Entities/Constructible/Power/parts.yml index a5300917ae..f80f119e3d 100644 --- a/Resources/Prototypes/Entities/Constructible/Power/parts.yml +++ b/Resources/Prototypes/Entities/Constructible/Power/parts.yml @@ -1,43 +1,3 @@ -- type: entity - abstract: true - id: BaseSmes - parent: BaseMachine - name: SMES - description: A high-capacity superconducting magnetic energy storage (SMES) unit. - placement: - mode: SnapgridCenter - components: - - type: Sprite - netsync: false - sprite: Constructible/Power/smes.rsi - layers: - - state: smes - - state: smes-display - shader: unshaded - - type: Smes - - type: Appearance - visuals: - - type: SmesVisualizer - - type: Battery - maxCharge: 1000 - startingCharge: 1000 - - type: ExaminableBattery - - type: NodeContainer - examinable: true - nodes: - power: - !type:AdjacentNode - nodeGroupID: HVPower - - type: PowerConsumer - - type: BatteryStorage - activeDrawRate: 1500 - - type: PowerSupplier - - type: BatteryDischarger - activeSupplyRate: 1000 - - type: ClientEntitySpawner - prototypes: - - HVDummyWire - - type: entity abstract: true id: BaseSubstation @@ -63,23 +23,20 @@ examinable: true nodes: input: - !type:AdjacentNode + !type:CableDeviceNode nodeGroupID: HVPower output: - !type:AdjacentNode + !type:CableDeviceNode nodeGroupID: MVPower - - type: PowerConsumer - - type: BatteryStorage - activeDrawRate: 1500 - - type: PowerSupplier - voltage: Medium + - type: BatteryCharger + voltage: High - type: BatteryDischarger - activeSupplyRate: 1000 - - type: ClientEntitySpawner - prototypes: - - HVDummyWire - - MVDummyWire - + voltage: Medium + - type: PowerNetworkBattery + maxSupply: 150000 + maxChargeRate: 5000 + supplyRampTolerance: 5000 + supplyRampRate: 1000 - type: entity abstract: true id: BaseApc @@ -115,15 +72,13 @@ examinable: true nodes: input: - !type:AdjacentNode + !type:CableDeviceNode nodeGroupID: MVPower output: - !type:AdjacentNode + !type:CableDeviceNode nodeGroupID: Apc - - type: PowerConsumer + - type: BatteryCharger voltage: Medium - - type: BatteryStorage - activeDrawRate: 1000 - type: PowerProvider voltage: Apc - type: Apc @@ -135,7 +90,9 @@ - type: Construction graph: apc node: apc - - type: ClientEntitySpawner - prototypes: - - MVDummyWire - - LVDummyWire + - type: PowerNetworkBattery + maxSupply: 10000 + maxChargeRate: 5000 + supplyRampTolerance: 1000 + supplyRampRate: 500 + diff --git a/Resources/Prototypes/Entities/Constructible/Power/smes.yml b/Resources/Prototypes/Entities/Constructible/Power/smes.yml new file mode 100644 index 0000000000..cce3cbebf2 --- /dev/null +++ b/Resources/Prototypes/Entities/Constructible/Power/smes.yml @@ -0,0 +1,46 @@ +- type: entity + abstract: true + id: BaseSmes + parent: BaseMachine + name: SMES + description: A high-capacity superconducting magnetic energy storage (SMES) unit. + placement: + mode: SnapgridCenter + components: + - type: Sprite + netsync: false + sprite: Constructible/Power/smes.rsi + layers: + - state: smes + - state: smes-display + shader: unshaded + - type: Smes + - type: Appearance + visuals: + - type: SmesVisualizer + - type: Battery + maxCharge: 1000 + startingCharge: 1000 + - type: ExaminableBattery + - type: NodeContainer + examinable: true + nodes: + input: + !type:CableDeviceNode + nodeGroupID: HVPower + output: + !type:CableTerminalPortNode + nodeGroupID: HVPower + - type: BatteryCharger + voltage: High + node: output + + - type: BatteryDischarger + voltage: High + node: input + + - type: PowerNetworkBattery + maxSupply: 150000 + maxChargeRate: 5000 + supplyRampTolerance: 5000 + supplyRampRate: 1000 diff --git a/Resources/Prototypes/Entities/Constructible/Power/vending_machines.yml b/Resources/Prototypes/Entities/Constructible/Power/vending_machines.yml index 50f2e4c882..5b11907247 100644 --- a/Resources/Prototypes/Entities/Constructible/Power/vending_machines.yml +++ b/Resources/Prototypes/Entities/Constructible/Power/vending_machines.yml @@ -38,7 +38,7 @@ type: VendingMachineBoundUserInterface - key: enum.WiresUiKey.Key type: WiresBoundUserInterface - - type: PowerReceiver + - type: ApcPowerReceiver - type: Wires BoardName: "Vending Machine" LayoutId: Vending diff --git a/Resources/Prototypes/Entities/Constructible/Specific/Conveyor/conveyor.yml b/Resources/Prototypes/Entities/Constructible/Specific/Conveyor/conveyor.yml index 3fe0e117cf..0aa313a130 100644 --- a/Resources/Prototypes/Entities/Constructible/Specific/Conveyor/conveyor.yml +++ b/Resources/Prototypes/Entities/Constructible/Specific/Conveyor/conveyor.yml @@ -27,7 +27,7 @@ drawdepth: FloorObjects - type: SignalReceiver maxTransmitters: 1 - - type: PowerReceiver + - type: ApcPowerReceiver - type: Conveyor - type: Appearance visuals: diff --git a/Resources/Prototypes/Entities/Constructible/Specific/Dispensers/chem_dispenser.yml b/Resources/Prototypes/Entities/Constructible/Specific/Dispensers/chem_dispenser.yml index 47139c65f2..84ae79f823 100644 --- a/Resources/Prototypes/Entities/Constructible/Specific/Dispensers/chem_dispenser.yml +++ b/Resources/Prototypes/Entities/Constructible/Specific/Dispensers/chem_dispenser.yml @@ -12,4 +12,4 @@ state: industrial_dispenser - type: ReagentDispenser pack: ChemDispenserStandardInventory - - type: PowerReceiver + - type: ApcPowerReceiver diff --git a/Resources/Prototypes/Entities/Constructible/Specific/Dispensers/reagent_dispenser_base.yml b/Resources/Prototypes/Entities/Constructible/Specific/Dispensers/reagent_dispenser_base.yml index dd6a6ac8c1..412c455d39 100644 --- a/Resources/Prototypes/Entities/Constructible/Specific/Dispensers/reagent_dispenser_base.yml +++ b/Resources/Prototypes/Entities/Constructible/Specific/Dispensers/reagent_dispenser_base.yml @@ -21,7 +21,7 @@ - Opaque - MobImpassable - SmallImpassable - - type: PowerReceiver + - type: ApcPowerReceiver - type: UserInterface interfaces: - key: enum.ReagentDispenserUiKey.Key diff --git a/Resources/Prototypes/Entities/Constructible/Specific/Kitchen/microwave.yml b/Resources/Prototypes/Entities/Constructible/Specific/Kitchen/microwave.yml index 8a29b60620..38c3bae6c9 100644 --- a/Resources/Prototypes/Entities/Constructible/Specific/Kitchen/microwave.yml +++ b/Resources/Prototypes/Entities/Constructible/Specific/Kitchen/microwave.yml @@ -39,7 +39,7 @@ - state: mw_unlit shader: unshaded map: ["enum.MicrowaveVisualizerLayers.BaseUnlit"] - - type: PowerReceiver + - type: ApcPowerReceiver - type: Damageable resistances: metallicResistances - type: Destructible diff --git a/Resources/Prototypes/Entities/Constructible/Specific/Kitchen/reagent_grinder.yml b/Resources/Prototypes/Entities/Constructible/Specific/Kitchen/reagent_grinder.yml index 9ab61d3506..1261dcbebb 100644 --- a/Resources/Prototypes/Entities/Constructible/Specific/Kitchen/reagent_grinder.yml +++ b/Resources/Prototypes/Entities/Constructible/Specific/Kitchen/reagent_grinder.yml @@ -17,7 +17,7 @@ - type: ReagentGrinderVisualizer - type: Clickable - type: InteractionOutline - - type: PowerReceiver + - type: ApcPowerReceiver - type: LoopingSound - type: Physics fixtures: diff --git a/Resources/Prototypes/Entities/Constructible/Specific/Research/research.yml b/Resources/Prototypes/Entities/Constructible/Specific/Research/research.yml index 10efe5da0d..68ce5a5646 100644 --- a/Resources/Prototypes/Entities/Constructible/Specific/Research/research.yml +++ b/Resources/Prototypes/Entities/Constructible/Specific/Research/research.yml @@ -21,7 +21,7 @@ - MobImpassable - type: ResearchServer - type: TechnologyDatabase - - type: PowerReceiver + - type: ApcPowerReceiver powerLoad: 200 priority: Low - type: Damageable @@ -77,7 +77,7 @@ - type: Appearance visuals: - type: PowerDeviceVisualizer - - type: PowerReceiver + - type: ApcPowerReceiver - type: Destructible thresholds: - trigger: diff --git a/Resources/Prototypes/Entities/Constructible/Specific/cargo_telepad.yml b/Resources/Prototypes/Entities/Constructible/Specific/cargo_telepad.yml index f041f5a07b..aefaaff479 100644 --- a/Resources/Prototypes/Entities/Constructible/Specific/cargo_telepad.yml +++ b/Resources/Prototypes/Entities/Constructible/Specific/cargo_telepad.yml @@ -33,5 +33,5 @@ max: 1 - !type:DoActsBehavior acts: ["Destruction"] - - type: PowerReceiver + - type: ApcPowerReceiver - type: CargoTelepad diff --git a/Resources/Prototypes/Entities/Constructible/Specific/chem_master.yml b/Resources/Prototypes/Entities/Constructible/Specific/chem_master.yml index 7b1653ced2..08526a09de 100644 --- a/Resources/Prototypes/Entities/Constructible/Specific/chem_master.yml +++ b/Resources/Prototypes/Entities/Constructible/Specific/chem_master.yml @@ -16,7 +16,7 @@ sprite: Constructible/Power/mixer.rsi state: mixer_loaded - type: ChemMaster - - type: PowerReceiver + - type: ApcPowerReceiver - type: InteractionOutline - type: Anchorable - type: Physics diff --git a/Resources/Prototypes/Entities/Constructible/Specific/gravity_generator.yml b/Resources/Prototypes/Entities/Constructible/Specific/gravity_generator.yml index 4708e06aee..527bcade39 100644 --- a/Resources/Prototypes/Entities/Constructible/Specific/gravity_generator.yml +++ b/Resources/Prototypes/Entities/Constructible/Specific/gravity_generator.yml @@ -14,7 +14,7 @@ shader: unshaded map: ["enum.GravityGeneratorVisualLayers.Core"] - type: SnapGrid - - type: PowerReceiver + - type: ApcPowerReceiver powerLoad: 500 - type: Physics fixtures: diff --git a/Resources/Prototypes/Entities/Constructible/Specific/recycler.yml b/Resources/Prototypes/Entities/Constructible/Specific/recycler.yml index 419981a1d1..683b59074d 100644 --- a/Resources/Prototypes/Entities/Constructible/Specific/recycler.yml +++ b/Resources/Prototypes/Entities/Constructible/Specific/recycler.yml @@ -32,4 +32,4 @@ state_clean: grinder-o1 state_bloody: grinder-o1bld - type: Recycler - - type: PowerReceiver + - type: ApcPowerReceiver diff --git a/Resources/Prototypes/Entities/Constructible/Walls/bar_sign.yml b/Resources/Prototypes/Entities/Constructible/Walls/bar_sign.yml index be8f01c2dc..9cf0b64ab5 100644 --- a/Resources/Prototypes/Entities/Constructible/Walls/bar_sign.yml +++ b/Resources/Prototypes/Entities/Constructible/Walls/bar_sign.yml @@ -14,7 +14,7 @@ drawdepth: WallTops sprite: Constructible/Misc/barsign.rsi state: empty - - type: PowerReceiver + - type: ApcPowerReceiver - type: BarSign - type: Destructible thresholds: @@ -37,7 +37,7 @@ drawdepth: WallTops sprite: Constructible/Misc/sylphs.rsi state: sylph - - type: PowerReceiver + - type: ApcPowerReceiver - type: BarSign - type: entity diff --git a/Resources/Prototypes/Entities/Constructible/Walls/emergency_light.yml b/Resources/Prototypes/Entities/Constructible/Walls/emergency_light.yml index 69c2c5a1ac..f4e6bb0181 100644 --- a/Resources/Prototypes/Entities/Constructible/Walls/emergency_light.yml +++ b/Resources/Prototypes/Entities/Constructible/Walls/emergency_light.yml @@ -11,7 +11,7 @@ offset: "0, 0.8" color: "#FF4020" mask: /Textures/Effects/LightMasks/emergency_mask.png - - type: PowerReceiver + - type: ApcPowerReceiver - type: Battery maxCharge: 30000 startingCharge: 0 @@ -20,6 +20,10 @@ sprite: Constructible/Lighting/emergency_light.rsi layers: - state: emergency_light_off + - type: Appearance + visuals: + - type: EmergencyLightVisualizer + placement: snap: - Wallmount diff --git a/Resources/Prototypes/Entities/Constructible/Walls/lighting.yml b/Resources/Prototypes/Entities/Constructible/Walls/lighting.yml index 4a41b66ea6..3a1c355533 100644 --- a/Resources/Prototypes/Entities/Constructible/Walls/lighting.yml +++ b/Resources/Prototypes/Entities/Constructible/Walls/lighting.yml @@ -63,7 +63,7 @@ enabled: false - type: PoweredLight bulb: Tube - - type: PowerReceiver + - type: ApcPowerReceiver - type: Appearance visuals: - type: PoweredLightVisualizer @@ -135,7 +135,7 @@ layer: [ Passable ] - type: PoweredLight bulb: Bulb - - type: PowerReceiver + - type: ApcPowerReceiver - type: Appearance visuals: - type: PoweredLightVisualizer diff --git a/Resources/Prototypes/Entities/Constructible/base_machine.yml b/Resources/Prototypes/Entities/Constructible/base_machine.yml index 14928a150b..b19a2a4167 100644 --- a/Resources/Prototypes/Entities/Constructible/base_machine.yml +++ b/Resources/Prototypes/Entities/Constructible/base_machine.yml @@ -29,10 +29,10 @@ acts: ["Destruction"] - !type:PlaySoundBehavior sound: /Audio/Effects/metalbreak.ogg - + - type: entity abstract: true parent: BaseMachine id: BaseMachinePowered components: - - type: PowerReceiver + - type: ApcPowerReceiver diff --git a/Resources/Prototypes/Entities/Objects/Tools/cable_coils.yml b/Resources/Prototypes/Entities/Objects/Tools/cable_coils.yml index df9e7ac1d5..6e57604d46 100644 --- a/Resources/Prototypes/Entities/Objects/Tools/cable_coils.yml +++ b/Resources/Prototypes/Entities/Objects/Tools/cable_coils.yml @@ -16,26 +16,26 @@ netsync: false - type: Item sprite: Objects/Tools/cable-coils.rsi - - type: WirePlacer + - type: CablePlacer - type: Clickable - type: entity - id: HVWireStack + id: CableHVStack parent: CableStack name: HV cable coil suffix: Full components: - type: Stack - stackType: HVCable + stackType: CableHV - type: Sprite state: coilhv-30 - type: Item size: 10 HeldPrefix: coilhv - - type: WirePlacer - wirePrototypeID: HVWire - blockingWireType: HighVoltage + - type: CablePlacer + cablePrototypeID: CableHV + blockingCableType: HighVoltage - type: Appearance visuals: - type: StackVisualizer @@ -45,8 +45,8 @@ - coilhv-30 - type: entity - parent: HVWireStack - id: HVWireStack1 + parent: CableHVStack + id: CableHVStack1 suffix: 1 components: - type: Sprite @@ -54,12 +54,11 @@ - type: Item size: 3 - type: Stack - stackType: HVWireStack1 count: 1 - type: entity parent: CableStack - id: ApcExtensionCableStack + id: CableApcStack name: cable coil description: Low-Voltage stack of wires for connecting APCs to machines and other purposes. suffix: Full @@ -69,9 +68,9 @@ - type: Item size: 10 HeldPrefix: coillv - - type: WirePlacer - wirePrototypeID: ApcExtensionCable - blockingWireType: Apc + - type: CablePlacer + cablePrototypeID: CableApcExtension + blockingCableType: Apc - type: Appearance visuals: - type: StackVisualizer @@ -81,8 +80,8 @@ - coillv-30 - type: entity - parent: ApcExtensionCableStack - id: ApcExtensionCableStack1 + parent: CableApcStack + id: CableApcStack1 suffix: 1 components: - type: Sprite @@ -94,20 +93,20 @@ - type: entity parent: CableStack - id: MVWireStack + id: CableMVStack name: MV cable coil suffix: Full components: - type: Stack - stackType: MVCable + stackType: CableMV - type: Sprite state: coilmv-30 - type: Item size: 10 HeldPrefix: coilmv - - type: WirePlacer - wirePrototypeID: MVWire - blockingWireType: MediumVoltage + - type: CablePlacer + cablePrototypeID: CableMV + blockingCableType: MediumVoltage - type: Appearance visuals: - type: StackVisualizer @@ -117,8 +116,8 @@ - coilmv-30 - type: entity - parent: MVWireStack - id: MVWireStack1 + parent: CableMVStack + id: CableMVStack1 suffix: 1 components: - type: Sprite @@ -126,5 +125,4 @@ - type: Item size: 3 - type: Stack - stackType: MVWireStack1 count: 1 diff --git a/Resources/Prototypes/Recipes/Construction/Graphs/airlock.yml b/Resources/Prototypes/Recipes/Construction/Graphs/airlock.yml index cd744c5983..32c5c8c337 100644 --- a/Resources/Prototypes/Recipes/Construction/Graphs/airlock.yml +++ b/Resources/Prototypes/Recipes/Construction/Graphs/airlock.yml @@ -58,7 +58,7 @@ - to: assembly completed: - !type:SpawnPrototype - prototype: ApcExtensionCableStack1 + prototype: CableApcStack1 amount: 5 steps: - tool: Cutting diff --git a/Resources/Prototypes/Recipes/Construction/Graphs/computer.yml b/Resources/Prototypes/Recipes/Construction/Graphs/computer.yml index 7e185a449d..3de0a915fd 100644 --- a/Resources/Prototypes/Recipes/Construction/Graphs/computer.yml +++ b/Resources/Prototypes/Recipes/Construction/Graphs/computer.yml @@ -100,7 +100,7 @@ - !type:EntityAnchored { } completed: - !type:SpawnPrototype - prototype: ApcExtensionCableStack1 + prototype: CableApcStack1 amount: 5 steps: - tool: Cutting diff --git a/Resources/Prototypes/Recipes/Construction/Graphs/firelock.yml b/Resources/Prototypes/Recipes/Construction/Graphs/firelock.yml index cf2fa03416..000dfdda8c 100644 --- a/Resources/Prototypes/Recipes/Construction/Graphs/firelock.yml +++ b/Resources/Prototypes/Recipes/Construction/Graphs/firelock.yml @@ -59,7 +59,7 @@ - to: frame1 completed: - !type:SpawnPrototype - prototype: ApcExtensionCableStack1 + prototype: CableApcStack1 amount: 2 conditions: - !type:EntityAnchored diff --git a/Resources/Prototypes/Recipes/Construction/Graphs/machine.yml b/Resources/Prototypes/Recipes/Construction/Graphs/machine.yml index 916d48ad17..53c8cb6478 100644 --- a/Resources/Prototypes/Recipes/Construction/Graphs/machine.yml +++ b/Resources/Prototypes/Recipes/Construction/Graphs/machine.yml @@ -63,7 +63,7 @@ - !type:EntityAnchored {} completed: - !type:SpawnPrototype - prototype: ApcExtensionCableStack1 + prototype: CableApcStack1 steps: - tool: Prying doAfter: 2 diff --git a/Resources/Prototypes/Recipes/Construction/Graphs/particle_accelerator.yml b/Resources/Prototypes/Recipes/Construction/Graphs/particle_accelerator.yml index 0f1b5f504e..6c9f668220 100644 --- a/Resources/Prototypes/Recipes/Construction/Graphs/particle_accelerator.yml +++ b/Resources/Prototypes/Recipes/Construction/Graphs/particle_accelerator.yml @@ -34,7 +34,7 @@ - !type:EntityAnchored {} completed: - !type:SpawnPrototype - prototype: ApcExtensionCableStack1 + prototype: CableApcStack1 steps: - tool: Cutting doAfter: 0.5 @@ -86,7 +86,7 @@ - !type:EntityAnchored {} completed: - !type:SpawnPrototype - prototype: ApcExtensionCableStack1 + prototype: CableApcStack1 steps: - tool: Cutting doAfter: 0.5 @@ -138,7 +138,7 @@ - !type:EntityAnchored {} completed: - !type:SpawnPrototype - prototype: ApcExtensionCableStack1 + prototype: CableApcStack1 steps: - tool: Cutting doAfter: 0.5 @@ -189,7 +189,7 @@ - !type:EntityAnchored {} completed: - !type:SpawnPrototype - prototype: ApcExtensionCableStack1 + prototype: CableApcStack1 steps: - tool: Cutting doAfter: 0.5 @@ -240,7 +240,7 @@ - !type:EntityAnchored {} completed: - !type:SpawnPrototype - prototype: ApcExtensionCableStack1 + prototype: CableApcStack1 steps: - tool: Cutting doAfter: 0.5 @@ -291,7 +291,7 @@ - !type:EntityAnchored {} completed: - !type:SpawnPrototype - prototype: ApcExtensionCableStack1 + prototype: CableApcStack1 steps: - tool: Cutting doAfter: 0.5 @@ -342,7 +342,7 @@ - !type:EntityAnchored {} completed: - !type:SpawnPrototype - prototype: ApcExtensionCableStack1 + prototype: CableApcStack1 steps: - tool: Cutting doAfter: 0.5 diff --git a/Resources/Prototypes/Recipes/Lathes/tools.yml b/Resources/Prototypes/Recipes/Lathes/tools.yml index ddfce393ee..37160c400f 100644 --- a/Resources/Prototypes/Recipes/Lathes/tools.yml +++ b/Resources/Prototypes/Recipes/Lathes/tools.yml @@ -38,25 +38,25 @@ id: CableStack name: cable coil icon: /Textures/Objects/Tools/cable-coils.rsi/coillv-30.png - result: ApcExtensionCableStack1 + result: CableApcStack1 completetime: 500 materials: Steel: 100 - type: latheRecipe - id: MVWireStack + id: CableMVStack name: MV cable coil icon: /Textures/Objects/Tools/cable-coils.rsi/coilmv-30.png - result: MVWireStack1 + result: CableMVStack1 completetime: 500 materials: Steel: 150 - type: latheRecipe - id: HVWireStack + id: CableHVStack name: HV cable coil icon: /Textures/Objects/Tools/cable-coils.rsi/coilhv-30.png - result: HVWireStack1 + result: CableHVStack1 completetime: 500 materials: Steel: 200 diff --git a/Resources/Prototypes/Stacks/power_stacks.yml b/Resources/Prototypes/Stacks/power_stacks.yml index b72177af1a..bc49118433 100644 --- a/Resources/Prototypes/Stacks/power_stacks.yml +++ b/Resources/Prototypes/Stacks/power_stacks.yml @@ -2,24 +2,13 @@ id: Cable name: cable icon: "/Textures/Objects/Tools/cable-coils.rsi/coil-30.png" - spawn: ApcExtensionCableStack1 + spawn: CableApcStack1 - type: stack - id: MVCable + id: CableMV name: mv cable + spawn: CableHVStack1 - type: stack - id: HVCable + id: CableHV name: hv cable - -- type: stack - id: HVWireStack1 - name: hv wire - -- type: stack - id: MVWireStack1 - name: mv wire - -- type: stack - id: ApcExtensionCableStack1 - name: apc extension cable diff --git a/Resources/Textures/Constructible/Power/wire_terminal.rsi/meta.json b/Resources/Textures/Constructible/Power/wire_terminal.rsi/meta.json new file mode 100644 index 0000000000..5344175985 --- /dev/null +++ b/Resources/Textures/Constructible/Power/wire_terminal.rsi/meta.json @@ -0,0 +1,32 @@ +{ + "version": 1, + "size": + { + "x": 32, + "y": 32 + }, + "copyright": "Taken from https://github.com/tgstation/tgstation at 21e50aebdac3e30b3f85b5e44e552e3e37ed00ea", + "license": "CC-BY-SA-3.0", + "states": + [ + { + "name": "term", + "directions": 4, + "delays": + [ + [ + 1.0 + ], + [ + 1.0 + ], + [ + 1.0 + ], + [ + 1.0 + ] + ] + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Constructible/Power/wire_terminal.rsi/term.png b/Resources/Textures/Constructible/Power/wire_terminal.rsi/term.png new file mode 100644 index 0000000000000000000000000000000000000000..dbae38dbe9048c4a1a45963d6797549ca72ee572 GIT binary patch literal 392 zcmV;30eAk1P)ZrE5CzbmDEIIolAbCJHD@4)px!7~fGgNFJ-t_ZktkQ#6mD&_gBU)@|5eDgcE+O_ z8M6x<%oWHjkms%~Ue`|WXjA}p0&FS(I{`KofSmxF3cyZ4jB<~BZEtsckFG6VEFTUb z6b0zI&a^Hw{+l(4s;Xw+pQg#WBsIRd002OPG#{e zT=oV(2HR+r7zQAO+rGo@cZWSkpd`M9O9yz5!0tQ1djxjh0p269`||;wBS1eNP@=o| mj6l<*!|gtch=_=Y?9@LOeA2;L_H*$70000 Date: Tue, 6 Jul 2021 16:41:57 +0200 Subject: [PATCH 26/30] RestartRoundTest now loads saltern. --- .../Tests/Commands/RestartRoundTest.cs | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/Content.IntegrationTests/Tests/Commands/RestartRoundTest.cs b/Content.IntegrationTests/Tests/Commands/RestartRoundTest.cs index ebc11c9c2e..c6cf878851 100644 --- a/Content.IntegrationTests/Tests/Commands/RestartRoundTest.cs +++ b/Content.IntegrationTests/Tests/Commands/RestartRoundTest.cs @@ -20,7 +20,13 @@ namespace Content.IntegrationTests.Tests.Commands [TestCase(false)] public async Task RestartRoundAfterStart(bool lobbyEnabled) { - var (_, server) = await StartConnectedServerClientPair(); + var (_, server) = await StartConnectedServerClientPair(serverOptions: new ServerContentIntegrationOption + { + CVarOverrides = + { + [CCVars.GameMap.Name] = "Maps/saltern.yml" + } + }); await server.WaitIdleAsync(); From cfe4a26d1ff7137340d85f60d58ee18b1e44927c Mon Sep 17 00:00:00 2001 From: Pieter-Jan Briers Date: Tue, 6 Jul 2021 20:56:55 +0200 Subject: [PATCH 27/30] Fix AME node updating to fix exceptions. And also make it run less poorly, I guess. --- .../AME/UI/AMEControllerBoundUserInterface.cs | 1 - Content.Client/AME/UI/AMEWindow.cs | 4 -- Content.Server/AME/AMENodeGroup.cs | 64 ++++++------------- .../AME/Components/AMEControllerComponent.cs | 9 --- .../AME/SharedAMEControllerComponent.cs | 1 - 5 files changed, 19 insertions(+), 60 deletions(-) diff --git a/Content.Client/AME/UI/AMEControllerBoundUserInterface.cs b/Content.Client/AME/UI/AMEControllerBoundUserInterface.cs index 2f35cd924f..3765d45fa2 100644 --- a/Content.Client/AME/UI/AMEControllerBoundUserInterface.cs +++ b/Content.Client/AME/UI/AMEControllerBoundUserInterface.cs @@ -27,7 +27,6 @@ namespace Content.Client.AME.UI _window.ToggleInjection.OnPressed += _ => ButtonPressed(UiButton.ToggleInjection); _window.IncreaseFuelButton.OnPressed += _ => ButtonPressed(UiButton.IncreaseFuel); _window.DecreaseFuelButton.OnPressed += _ => ButtonPressed(UiButton.DecreaseFuel); - _window.RefreshPartsButton.OnPressed += _ => ButtonPressed(UiButton.RefreshParts); } /// diff --git a/Content.Client/AME/UI/AMEWindow.cs b/Content.Client/AME/UI/AMEWindow.cs index 94b0e006b5..108806eb55 100644 --- a/Content.Client/AME/UI/AMEWindow.cs +++ b/Content.Client/AME/UI/AMEWindow.cs @@ -16,7 +16,6 @@ namespace Content.Client.AME.UI public Button ToggleInjection { get; set; } public Button IncreaseFuelButton { get; set; } public Button DecreaseFuelButton { get; set; } - public Button RefreshPartsButton { get; set; } public ProgressBar? FuelMeter { get; set; } public Label FuelAmount { get; set; } public Label InjectionAmount { get; set; } @@ -85,7 +84,6 @@ namespace Content.Client.AME.UI { Children = { - (RefreshPartsButton = new Button {Text = Loc.GetString("ame-window-refresh-parts-button"), StyleClasses = {StyleBase.ButtonOpenBoth }, Disabled = true }), new Label { Text = Loc.GetString("ame-window-core-count-label")}, (CoreCount = new Label { Text = "0"}), } @@ -159,8 +157,6 @@ namespace Content.Client.AME.UI InjectionStatus.Text = Loc.GetString("ame-window-engine-injection-status-injecting-label"); } - RefreshPartsButton.Disabled = castState.Injecting; - CoreCount.Text = $"{castState.CoreCount}"; InjectionAmount.Text = $"{castState.InjectionAmount}"; } diff --git a/Content.Server/AME/AMENodeGroup.cs b/Content.Server/AME/AMENodeGroup.cs index c632f39d91..a015d20a72 100644 --- a/Content.Server/AME/AMENodeGroup.cs +++ b/Content.Server/AME/AMENodeGroup.cs @@ -41,64 +41,38 @@ namespace Content.Server.AME { base.LoadNodes(groupNodes); + var mapManager = IoCManager.Resolve(); + var grid = mapManager.GetGrid(GridId); + foreach (var node in groupNodes) { - if (node.Owner.TryGetComponent(out AMEControllerComponent? controller)) + var nodeOwner = node.Owner; + if (nodeOwner.TryGetComponent(out AMEControllerComponent? controller)) { _masterController = controller; } - } - } - public override void RemoveNode(Node node) - { - base.RemoveNode(node); - - RefreshAMENodes(_masterController); - if (_masterController != null && _masterController?.Owner == node.Owner) { _masterController = null; } - } - - public void RefreshAMENodes(AMEControllerComponent? controller) - { - if(_masterController == null && controller != null) - { - _masterController = controller; - } - - foreach (AMEShieldComponent core in _cores) - { - core.UnsetCore(); - } - _cores.Clear(); - - //Check each shield node to see if it meets core criteria - foreach (Node node in Nodes) - { - var nodeOwner = node.Owner; - if (!nodeOwner.TryGetComponent(out var shield)) { continue; } - - var grid = IoCManager.Resolve().GetGrid(nodeOwner.Transform.GridID); - var nodeNeighbors = grid.GetCellsInSquareArea(nodeOwner.Transform.Coordinates, 1) - .Select(sgc => nodeOwner.EntityManager.GetEntity(sgc)) - .Where(entity => entity != nodeOwner) - .Select(entity => entity.TryGetComponent(out var adjshield) ? adjshield : null) - .Where(adjshield => adjshield != null); - - if (nodeNeighbors.Count() >= 8) + if (nodeOwner.TryGetComponent(out AMEShieldComponent? shield)) { - _cores.Add(shield); - } - } + var nodeNeighbors = grid.GetCellsInSquareArea(nodeOwner.Transform.Coordinates, 1) + .Select(sgc => nodeOwner.EntityManager.GetEntity(sgc)) + .Where(entity => entity != nodeOwner && entity.HasComponent()); - foreach (AMEShieldComponent core in _cores) - { - core.SetCore(); + if (nodeNeighbors.Count() >= 8) + { + _cores.Add(shield); + shield.SetCore(); + } + else + { + shield.UnsetCore(); + } + } } } public void UpdateCoreVisuals(int injectionAmount, bool injecting) { - var injectionStrength = CoreCount > 0 ? injectionAmount / CoreCount : 0; foreach (AMEShieldComponent core in _cores) diff --git a/Content.Server/AME/Components/AMEControllerComponent.cs b/Content.Server/AME/Components/AMEControllerComponent.cs index ea65e81f94..54873aa4e8 100644 --- a/Content.Server/AME/Components/AMEControllerComponent.cs +++ b/Content.Server/AME/Components/AMEControllerComponent.cs @@ -212,9 +212,6 @@ namespace Content.Server.AME.Components case UiButton.DecreaseFuel: InjectionAmount = InjectionAmount > 0 ? InjectionAmount -= 2 : 0; break; - case UiButton.RefreshParts: - RefreshParts(); - break; } GetAMENodeGroup()?.UpdateCoreVisuals(InjectionAmount, _injecting); @@ -277,12 +274,6 @@ namespace Content.Server.AME.Components } - private void RefreshParts() - { - GetAMENodeGroup()?.RefreshAMENodes(this); - UpdateUserInterface(); - } - private AMENodeGroup? GetAMENodeGroup() { Owner.TryGetComponent(out NodeContainerComponent? nodeContainer); diff --git a/Content.Shared/AME/SharedAMEControllerComponent.cs b/Content.Shared/AME/SharedAMEControllerComponent.cs index aa65f151f6..162cb32a52 100644 --- a/Content.Shared/AME/SharedAMEControllerComponent.cs +++ b/Content.Shared/AME/SharedAMEControllerComponent.cs @@ -55,7 +55,6 @@ namespace Content.Shared.AME ToggleInjection, IncreaseFuel, DecreaseFuel, - RefreshParts } [Serializable, NetSerializable] From b79457dde9d8108a1883b8c3df827a866a1caca1 Mon Sep 17 00:00:00 2001 From: Pieter-Jan Briers Date: Tue, 6 Jul 2021 21:25:04 +0200 Subject: [PATCH 28/30] Docs/cleanup for node system. --- .../EntitySystems/NodeContainerSystem.cs | 4 ++ .../EntitySystems/NodeGroupSystem.cs | 6 ++- .../NodeContainer/NodeGroups/BaseNodeGroup.cs | 28 +++++++++++ Content.Server/NodeContainer/Nodes/Node.cs | 48 +++++++++++++++++++ 4 files changed, 84 insertions(+), 2 deletions(-) diff --git a/Content.Server/NodeContainer/EntitySystems/NodeContainerSystem.cs b/Content.Server/NodeContainer/EntitySystems/NodeContainerSystem.cs index 19b9de4415..ba11446302 100644 --- a/Content.Server/NodeContainer/EntitySystems/NodeContainerSystem.cs +++ b/Content.Server/NodeContainer/EntitySystems/NodeContainerSystem.cs @@ -4,6 +4,10 @@ using Robust.Shared.GameObjects; namespace Content.Server.NodeContainer.EntitySystems { + /// + /// Manages events. + /// + /// [UsedImplicitly] public class NodeContainerSystem : EntitySystem { diff --git a/Content.Server/NodeContainer/EntitySystems/NodeGroupSystem.cs b/Content.Server/NodeContainer/EntitySystems/NodeGroupSystem.cs index ca24e0f8fb..36f4d2c459 100644 --- a/Content.Server/NodeContainer/EntitySystems/NodeGroupSystem.cs +++ b/Content.Server/NodeContainer/EntitySystems/NodeGroupSystem.cs @@ -17,11 +17,13 @@ using Robust.Shared.Utility; namespace Content.Server.NodeContainer.EntitySystems { + /// + /// Entity system that manages and updating. + /// + /// [UsedImplicitly] public class NodeGroupSystem : EntitySystem { - [Dependency] private readonly IEntityManager _entityManager = default!; - [Dependency] private readonly IPlayerManager _playerManager = default!; [Dependency] private readonly IAdminManager _adminManager = default!; [Dependency] private readonly INodeGroupFactory _nodeGroupFactory = default!; diff --git a/Content.Server/NodeContainer/NodeGroups/BaseNodeGroup.cs b/Content.Server/NodeContainer/NodeGroups/BaseNodeGroup.cs index 133c8c3a33..81edd4e643 100644 --- a/Content.Server/NodeContainer/NodeGroups/BaseNodeGroup.cs +++ b/Content.Server/NodeContainer/NodeGroups/BaseNodeGroup.cs @@ -17,6 +17,9 @@ namespace Content.Server.NodeContainer.NodeGroups { bool Remaking { get; } + /// + /// The list of nodes currently in this group. + /// IReadOnlyList Nodes { get; } void Create(NodeGroupID groupId); @@ -41,6 +44,9 @@ namespace Content.Server.NodeContainer.NodeGroups IReadOnlyList INodeGroup.Nodes => Nodes; + /// + /// The list of nodes in this group. + /// [ViewVariables] public readonly List Nodes = new(); [ViewVariables] public int NodeCount => Nodes.Count; @@ -54,6 +60,9 @@ namespace Content.Server.NodeContainer.NodeGroups [ViewVariables] protected GridId GridId { get; private set; } + /// + /// Network ID of this group for client-side debug visualization of nodes. + /// [ViewVariables] public int NetId; @@ -71,16 +80,35 @@ namespace Content.Server.NodeContainer.NodeGroups GridId = sourceNode.Owner.Transform.GridID; } + /// + /// Called when a node has been removed from this group via deletion of the node. + /// + /// + /// Note that this always still results in a complete remake of the group later, + /// but hooking this method is good for book keeping. + /// + /// The node that was deleted. public virtual void RemoveNode(Node node) { } + /// + /// Called to load this newly created group up with new nodes. + /// + /// The new nodes for this group. public virtual void LoadNodes( List groupNodes) { Nodes.AddRange(groupNodes); } + /// + /// Called after the nodes in this group have been made into one or more new groups. + /// + /// + /// Use this to split in-group data such as pipe gas mixtures into newly split nodes. + /// + /// A list of new groups for this group's former nodes. public virtual void AfterRemake(IEnumerable> newGroups) { } public void QueueRemake() diff --git a/Content.Server/NodeContainer/Nodes/Node.cs b/Content.Server/NodeContainer/Nodes/Node.cs index e427d0d8ec..58519e5e23 100644 --- a/Content.Server/NodeContainer/Nodes/Node.cs +++ b/Content.Server/NodeContainer/Nodes/Node.cs @@ -23,8 +23,14 @@ namespace Content.Server.NodeContainer.Nodes [DataField("nodeGroupID")] public NodeGroupID NodeGroupID { get; private set; } = NodeGroupID.Default; + /// + /// The node group this node is a part of. + /// [ViewVariables] public INodeGroup? NodeGroup; + /// + /// The entity that owns this node via its . + /// [ViewVariables] public IEntity Owner { get; private set; } = default!; /// @@ -43,24 +49,49 @@ namespace Content.Server.NodeContainer.Nodes /// public bool Deleting; + /// + /// All compatible nodes that are reachable by this node. + /// Effectively, active connections out of this node. + /// public readonly HashSet ReachableNodes = new(); internal int FloodGen; internal int UndirectGen; internal bool FlaggedForFlood; internal int NetId; + + /// + /// Name of this node on the owning . + /// public string Name = default!; + /// + /// Invoked when the owning is initialized. + /// + /// The owning entity. public virtual void Initialize(IEntity owner) { Owner = owner; } + /// + /// Invoked when the owning is started. + /// public virtual void OnContainerStartup() { EntitySystem.Get().QueueReflood(this); } + /// + /// Immediately create a single-node node group for this node if it does not have one yet. + /// + /// + /// This can be useful for nodes like pipes + /// that need immediate access to their node group to set parameters like node volume. + /// The node group created by this function (if necessary) will still update and form new, + /// merged groups later if necessary. + /// Set parameters like pipe net volume should then be transferred/merged there. + /// public void CreateSingleNetImmediate() { EntitySystem.Get().CreateSingleNetImmediate(this); @@ -78,15 +109,24 @@ namespace Content.Server.NodeContainer.Nodes } } + /// + /// Called when the anchored state of the owning entity changes. + /// public virtual void AnchorStateChanged() { } + /// + /// Called after the parent node group has been rebuilt. + /// public virtual void OnPostRebuild() { } + /// + /// Called when the owning is shut down. + /// public virtual void OnContainerShutdown() { Deleting = true; @@ -97,6 +137,14 @@ namespace Content.Server.NodeContainer.Nodes /// How this node will attempt to find other reachable s to group with. /// Returns a set of s to consider grouping with. Should not return this current . /// + /// + /// + /// The set of nodes returned can be asymmetrical + /// (meaning that it can return other nodes whose does not return this node). + /// If this is used, creation of a new node may not correctly merge networks unless both sides + /// of this asymmetric relation are made to manually update with . + /// + /// public abstract IEnumerable GetReachableNodes(); } } From 29b734a35a2b6f32a9ec13a8d3d484bdb1be4962 Mon Sep 17 00:00:00 2001 From: SweptWasTaken Date: Thu, 8 Jul 2021 23:43:00 -0700 Subject: [PATCH 29/30] Fixed unpowered part of the station caused by pow3r --- Resources/Maps/saltern.yml | 6877 ++++++++++++++++++++++++------------ 1 file changed, 4640 insertions(+), 2237 deletions(-) diff --git a/Resources/Maps/saltern.yml b/Resources/Maps/saltern.yml index cea7e3fb9d..9383b08baf 100644 --- a/Resources/Maps/saltern.yml +++ b/Resources/Maps/saltern.yml @@ -465,6 +465,8 @@ entities: pos: -35.09421,0.5072632 parent: 853 type: Transform + - powerLoad: 0 + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -586,10 +588,13 @@ entities: - uid: 65 type: BedsheetMedical components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 18.5,-20.5 parent: 853 type: Transform + - canCollide: False + type: Physics - uid: 66 type: Bed components: @@ -802,7 +807,8 @@ entities: - uid: 94 type: DisposalBend components: - - rot: 3.141592653589793 rad + - anchored: True + rot: 3.141592653589793 rad pos: 3.5,-27.5 parent: 853 type: Transform @@ -1100,6 +1106,8 @@ entities: pos: 36.928772,12.48564 parent: 853 type: Transform + - powerLoad: 0 + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -1110,6 +1118,8 @@ entities: pos: 4.9229045,12.440822 parent: 853 type: Transform + - powerLoad: 0 + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -1120,6 +1130,8 @@ entities: pos: -13.082766,-25.616213 parent: 853 type: Transform + - powerLoad: 0 + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -1165,6 +1177,8 @@ entities: - pos: -18.508244,-7.132841 parent: 853 type: Transform + - powerLoad: 0 + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -1203,6 +1217,8 @@ entities: pos: 45.108562,12.421564 parent: 853 type: Transform + - powerLoad: 0 + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -1250,7 +1266,8 @@ entities: - uid: 152 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 58.5,-31.5 parent: 853 type: Transform @@ -1259,7 +1276,8 @@ entities: - uid: 153 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 58.5,-29.5 parent: 853 type: Transform @@ -1282,7 +1300,8 @@ entities: - uid: 156 type: ConveyorBelt components: - - rot: 1.5707963705062866 rad + - anchored: True + rot: 1.5707963705062866 rad pos: -23.5,-13.5 parent: 853 type: Transform @@ -1318,7 +1337,8 @@ entities: - uid: 161 type: CableApcExtension components: - - rot: -1.5707963267948966 rad + - anchored: True + rot: -1.5707963267948966 rad pos: 16.5,-1.5 parent: 853 type: Transform @@ -1335,7 +1355,8 @@ entities: - uid: 163 type: DisposalJunctionFlipped components: - - rot: 4.71238902409608 rad + - anchored: True + rot: 4.71238902409608 rad pos: 34.5,3.5 parent: 853 type: Transform @@ -1346,7 +1367,8 @@ entities: - uid: 164 type: DisposalJunction components: - - rot: 4.71238902409608 rad + - anchored: True + rot: 4.71238902409608 rad pos: 24.5,3.5 parent: 853 type: Transform @@ -1357,7 +1379,8 @@ entities: - uid: 165 type: CableApcExtension components: - - rot: 3.141592653589793 rad + - anchored: True + rot: 3.141592653589793 rad pos: 13.5,1.5 parent: 853 type: Transform @@ -1368,7 +1391,8 @@ entities: - uid: 166 type: DisposalJunctionFlipped components: - - rot: 4.71238902409608 rad + - anchored: True + rot: 4.71238902409608 rad pos: 12.5,3.5 parent: 853 type: Transform @@ -1379,7 +1403,8 @@ entities: - uid: 167 type: DisposalJunction components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 2.5,17.5 parent: 853 type: Transform @@ -1390,7 +1415,8 @@ entities: - uid: 168 type: DisposalJunctionFlipped components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 2.5,11.5 parent: 853 type: Transform @@ -1401,7 +1427,8 @@ entities: - uid: 169 type: DisposalJunctionFlipped components: - - rot: 4.71238902409608 rad + - anchored: True + rot: 4.71238902409608 rad pos: -10.5,-15.5 parent: 853 type: Transform @@ -1412,7 +1439,8 @@ entities: - uid: 170 type: DisposalJunction components: - - rot: 3.141592697301183 rad + - anchored: True + rot: 3.141592697301183 rad pos: -17.5,-15.5 parent: 853 type: Transform @@ -1423,7 +1451,8 @@ entities: - uid: 171 type: DisposalYJunction components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -23.5,-10.5 parent: 853 type: Transform @@ -1434,7 +1463,8 @@ entities: - uid: 172 type: DisposalJunctionFlipped components: - - rot: 1.5707963705062866 rad + - anchored: True + rot: 1.5707963705062866 rad pos: -27.5,-10.5 parent: 853 type: Transform @@ -1445,7 +1475,8 @@ entities: - uid: 173 type: DisposalJunction components: - - rot: 4.71238902409608 rad + - anchored: True + rot: 4.71238902409608 rad pos: -28.5,3.5 parent: 853 type: Transform @@ -1456,7 +1487,8 @@ entities: - uid: 174 type: DisposalJunction components: - - rot: 4.71238902409608 rad + - anchored: True + rot: 4.71238902409608 rad pos: -22.5,3.5 parent: 853 type: Transform @@ -1467,7 +1499,8 @@ entities: - uid: 175 type: DisposalJunctionFlipped components: - - rot: 4.71238902409608 rad + - anchored: True + rot: 4.71238902409608 rad pos: -12.5,3.5 parent: 853 type: Transform @@ -1478,7 +1511,8 @@ entities: - uid: 176 type: DisposalJunctionFlipped components: - - rot: 4.71238902409608 rad + - anchored: True + rot: 4.71238902409608 rad pos: 0.5,3.5 parent: 853 type: Transform @@ -1489,7 +1523,8 @@ entities: - uid: 177 type: DisposalJunction components: - - rot: 4.71238902409608 rad + - anchored: True + rot: 4.71238902409608 rad pos: 2.5,3.5 parent: 853 type: Transform @@ -1500,7 +1535,8 @@ entities: - uid: 178 type: DisposalJunctionFlipped components: - - rot: 4.71238902409608 rad + - anchored: True + rot: 4.71238902409608 rad pos: 3.5,3.5 parent: 853 type: Transform @@ -1511,7 +1547,8 @@ entities: - uid: 179 type: DisposalPipe components: - - rot: 3.141592697301183 rad + - anchored: True + rot: 3.141592697301183 rad pos: -17.5,-14.5 parent: 853 type: Transform @@ -1522,7 +1559,8 @@ entities: - uid: 180 type: DisposalPipe components: - - rot: 3.141592697301183 rad + - anchored: True + rot: 3.141592697301183 rad pos: -17.5,-13.5 parent: 853 type: Transform @@ -1533,7 +1571,8 @@ entities: - uid: 181 type: DisposalPipe components: - - rot: 3.141592697301183 rad + - anchored: True + rot: 3.141592697301183 rad pos: -17.5,-12.5 parent: 853 type: Transform @@ -1544,7 +1583,8 @@ entities: - uid: 182 type: DisposalPipe components: - - rot: 3.141592697301183 rad + - anchored: True + rot: 3.141592697301183 rad pos: -17.5,-11.5 parent: 853 type: Transform @@ -1555,7 +1595,8 @@ entities: - uid: 183 type: DisposalTrunk components: - - rot: 3.141592697301183 rad + - anchored: True + rot: 3.141592697301183 rad pos: -17.5,-22.5 parent: 853 type: Transform @@ -1577,7 +1618,8 @@ entities: - uid: 185 type: DisposalPipe components: - - rot: 1.5707963705062866 rad + - anchored: True + rot: 1.5707963705062866 rad pos: -16.5,-15.5 parent: 853 type: Transform @@ -1588,7 +1630,8 @@ entities: - uid: 186 type: DisposalPipe components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -28.5,5.5 parent: 853 type: Transform @@ -1599,7 +1642,8 @@ entities: - uid: 187 type: DisposalPipe components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -28.5,6.5 parent: 853 type: Transform @@ -1610,7 +1654,8 @@ entities: - uid: 188 type: DisposalPipe components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -28.5,7.5 parent: 853 type: Transform @@ -1621,7 +1666,8 @@ entities: - uid: 189 type: DisposalPipe components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -28.5,8.5 parent: 853 type: Transform @@ -1632,7 +1678,8 @@ entities: - uid: 190 type: DisposalPipe components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -28.5,9.5 parent: 853 type: Transform @@ -1661,7 +1708,8 @@ entities: - uid: 193 type: DisposalBend components: - - rot: 4.71238902409608 rad + - anchored: True + rot: 4.71238902409608 rad pos: -8.5,-15.5 parent: 853 type: Transform @@ -1672,7 +1720,8 @@ entities: - uid: 194 type: DisposalPipe components: - - rot: 3.141592697301183 rad + - anchored: True + rot: 3.141592697301183 rad pos: -17.5,-16.5 parent: 853 type: Transform @@ -1683,7 +1732,8 @@ entities: - uid: 195 type: DisposalPipe components: - - rot: 1.5707963705062866 rad + - anchored: True + rot: 1.5707963705062866 rad pos: 0.5,17.5 parent: 853 type: Transform @@ -1694,7 +1744,8 @@ entities: - uid: 196 type: DisposalPipe components: - - rot: 1.5707963705062866 rad + - anchored: True + rot: 1.5707963705062866 rad pos: -0.5,17.5 parent: 853 type: Transform @@ -1705,7 +1756,8 @@ entities: - uid: 197 type: DisposalPipe components: - - rot: 1.5707963705062866 rad + - anchored: True + rot: 1.5707963705062866 rad pos: -1.5,17.5 parent: 853 type: Transform @@ -1716,7 +1768,8 @@ entities: - uid: 198 type: DisposalPipe components: - - rot: 1.5707963705062866 rad + - anchored: True + rot: 1.5707963705062866 rad pos: -2.5,17.5 parent: 853 type: Transform @@ -1727,7 +1780,8 @@ entities: - uid: 199 type: DisposalPipe components: - - rot: 1.5707963705062866 rad + - anchored: True + rot: 1.5707963705062866 rad pos: -3.5,17.5 parent: 853 type: Transform @@ -1738,7 +1792,8 @@ entities: - uid: 200 type: DisposalPipe components: - - rot: 1.5707963705062866 rad + - anchored: True + rot: 1.5707963705062866 rad pos: -4.5,17.5 parent: 853 type: Transform @@ -1749,7 +1804,8 @@ entities: - uid: 201 type: DisposalTrunk components: - - rot: 1.5707963705062866 rad + - anchored: True + rot: 1.5707963705062866 rad pos: -5.5,17.5 parent: 853 type: Transform @@ -1771,7 +1827,8 @@ entities: - uid: 203 type: DisposalPipe components: - - rot: 3.141592697301183 rad + - anchored: True + rot: 3.141592697301183 rad pos: -17.5,-17.5 parent: 853 type: Transform @@ -1782,7 +1839,8 @@ entities: - uid: 204 type: DisposalPipe components: - - rot: 4.71238902409608 rad + - anchored: True + rot: 4.71238902409608 rad pos: 4.5,11.5 parent: 853 type: Transform @@ -1793,7 +1851,8 @@ entities: - uid: 205 type: DisposalPipe components: - - rot: 4.71238902409608 rad + - anchored: True + rot: 4.71238902409608 rad pos: 5.5,11.5 parent: 853 type: Transform @@ -1804,7 +1863,8 @@ entities: - uid: 206 type: DisposalTrunk components: - - rot: 4.71238902409608 rad + - anchored: True + rot: 4.71238902409608 rad pos: 6.5,11.5 parent: 853 type: Transform @@ -1825,7 +1885,8 @@ entities: - uid: 208 type: DisposalPipe components: - - rot: 3.141592697301183 rad + - anchored: True + rot: 3.141592697301183 rad pos: -17.5,-18.5 parent: 853 type: Transform @@ -1836,7 +1897,8 @@ entities: - uid: 209 type: DisposalPipe components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 24.5,5.5 parent: 853 type: Transform @@ -1847,7 +1909,8 @@ entities: - uid: 210 type: DisposalPipe components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 24.5,6.5 parent: 853 type: Transform @@ -1858,7 +1921,8 @@ entities: - uid: 211 type: DisposalPipe components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 24.5,7.5 parent: 853 type: Transform @@ -1869,7 +1933,8 @@ entities: - uid: 212 type: DisposalTrunk components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 24.5,8.5 parent: 853 type: Transform @@ -1899,7 +1964,8 @@ entities: - uid: 215 type: DisposalTrunk components: - - pos: 14.5,1.5 + - anchored: True + pos: 14.5,1.5 parent: 853 type: Transform - containers: @@ -1919,7 +1985,8 @@ entities: - uid: 217 type: DisposalPipe components: - - rot: 3.141592697301183 rad + - anchored: True + rot: 3.141592697301183 rad pos: -17.5,-19.5 parent: 853 type: Transform @@ -1930,13 +1997,15 @@ entities: - uid: 218 type: Recycler components: - - pos: -21.5,-13.5 + - anchored: True + pos: -21.5,-13.5 parent: 853 type: Transform - uid: 219 type: DisposalPipe components: - - rot: 3.141592697301183 rad + - anchored: True + rot: 3.141592697301183 rad pos: -17.5,-20.5 parent: 853 type: Transform @@ -1947,7 +2016,8 @@ entities: - uid: 220 type: DisposalPipe components: - - rot: 3.141592697301183 rad + - anchored: True + rot: 3.141592697301183 rad pos: 34.5,1.5 parent: 853 type: Transform @@ -1958,7 +2028,8 @@ entities: - uid: 221 type: DisposalPipe components: - - rot: 3.141592697301183 rad + - anchored: True + rot: 3.141592697301183 rad pos: 34.5,0.5 parent: 853 type: Transform @@ -1969,7 +2040,8 @@ entities: - uid: 222 type: DisposalPipe components: - - rot: 3.141592697301183 rad + - anchored: True + rot: 3.141592697301183 rad pos: 34.5,-0.5 parent: 853 type: Transform @@ -1980,7 +2052,8 @@ entities: - uid: 223 type: DisposalPipe components: - - rot: 3.141592697301183 rad + - anchored: True + rot: 3.141592697301183 rad pos: 34.5,-1.5 parent: 853 type: Transform @@ -1991,7 +2064,8 @@ entities: - uid: 224 type: DisposalPipe components: - - rot: 3.141592697301183 rad + - anchored: True + rot: 3.141592697301183 rad pos: 34.5,-2.5 parent: 853 type: Transform @@ -2002,7 +2076,8 @@ entities: - uid: 225 type: DisposalPipe components: - - rot: 3.141592697301183 rad + - anchored: True + rot: 3.141592697301183 rad pos: 34.5,-3.5 parent: 853 type: Transform @@ -2013,7 +2088,8 @@ entities: - uid: 226 type: DisposalTrunk components: - - rot: 3.141592697301183 rad + - anchored: True + rot: 3.141592697301183 rad pos: 34.5,-4.5 parent: 853 type: Transform @@ -2034,7 +2110,8 @@ entities: - uid: 228 type: DisposalPipe components: - - rot: 4.71238902409608 rad + - anchored: True + rot: 4.71238902409608 rad pos: 30.5,3.5 parent: 853 type: Transform @@ -2045,7 +2122,8 @@ entities: - uid: 229 type: DisposalPipe components: - - rot: 4.71238902409608 rad + - anchored: True + rot: 4.71238902409608 rad pos: 36.5,3.5 parent: 853 type: Transform @@ -2056,7 +2134,8 @@ entities: - uid: 230 type: DisposalPipe components: - - rot: 4.71238902409608 rad + - anchored: True + rot: 4.71238902409608 rad pos: 35.5,3.5 parent: 853 type: Transform @@ -2067,7 +2146,8 @@ entities: - uid: 231 type: DisposalPipe components: - - rot: 3.141592697301183 rad + - anchored: True + rot: 3.141592697301183 rad pos: 34.5,2.5 parent: 853 type: Transform @@ -2078,7 +2158,8 @@ entities: - uid: 232 type: DisposalPipe components: - - rot: 4.71238902409608 rad + - anchored: True + rot: 4.71238902409608 rad pos: 33.5,3.5 parent: 853 type: Transform @@ -2089,7 +2170,8 @@ entities: - uid: 233 type: DisposalPipe components: - - rot: 4.71238902409608 rad + - anchored: True + rot: 4.71238902409608 rad pos: 32.5,3.5 parent: 853 type: Transform @@ -2100,7 +2182,8 @@ entities: - uid: 234 type: DisposalPipe components: - - rot: 4.71238902409608 rad + - anchored: True + rot: 4.71238902409608 rad pos: 31.5,3.5 parent: 853 type: Transform @@ -2111,7 +2194,8 @@ entities: - uid: 235 type: DisposalBend components: - - rot: 4.71238902409608 rad + - anchored: True + rot: 4.71238902409608 rad pos: 37.5,3.5 parent: 853 type: Transform @@ -2122,7 +2206,8 @@ entities: - uid: 236 type: DisposalPipe components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 37.5,4.5 parent: 853 type: Transform @@ -2133,7 +2218,8 @@ entities: - uid: 237 type: DisposalPipe components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 37.5,5.5 parent: 853 type: Transform @@ -2144,7 +2230,8 @@ entities: - uid: 238 type: DisposalTrunk components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 37.5,6.5 parent: 853 type: Transform @@ -2166,7 +2253,8 @@ entities: - uid: 240 type: DisposalBend components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 2.5,29.5 parent: 853 type: Transform @@ -2177,7 +2265,8 @@ entities: - uid: 241 type: DisposalPipe components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 2.5,5.5 parent: 853 type: Transform @@ -2188,7 +2277,8 @@ entities: - uid: 242 type: DisposalPipe components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 2.5,6.5 parent: 853 type: Transform @@ -2199,7 +2289,8 @@ entities: - uid: 243 type: DisposalPipe components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 2.5,7.5 parent: 853 type: Transform @@ -2210,7 +2301,8 @@ entities: - uid: 244 type: DisposalPipe components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 2.5,8.5 parent: 853 type: Transform @@ -2221,7 +2313,8 @@ entities: - uid: 245 type: DisposalPipe components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 2.5,9.5 parent: 853 type: Transform @@ -2232,7 +2325,8 @@ entities: - uid: 246 type: DisposalPipe components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 2.5,10.5 parent: 853 type: Transform @@ -2243,7 +2337,8 @@ entities: - uid: 247 type: DisposalPipe components: - - rot: 4.71238902409608 rad + - anchored: True + rot: 4.71238902409608 rad pos: 3.5,11.5 parent: 853 type: Transform @@ -2254,7 +2349,8 @@ entities: - uid: 248 type: DisposalPipe components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 2.5,12.5 parent: 853 type: Transform @@ -2265,7 +2361,8 @@ entities: - uid: 249 type: DisposalPipe components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 2.5,13.5 parent: 853 type: Transform @@ -2276,7 +2373,8 @@ entities: - uid: 250 type: DisposalPipe components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 2.5,14.5 parent: 853 type: Transform @@ -2287,7 +2385,8 @@ entities: - uid: 251 type: DisposalPipe components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 2.5,15.5 parent: 853 type: Transform @@ -2298,7 +2397,8 @@ entities: - uid: 252 type: DisposalPipe components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 2.5,16.5 parent: 853 type: Transform @@ -2309,7 +2409,8 @@ entities: - uid: 253 type: DisposalPipe components: - - rot: 1.5707963705062866 rad + - anchored: True + rot: 1.5707963705062866 rad pos: 1.5,17.5 parent: 853 type: Transform @@ -2320,7 +2421,8 @@ entities: - uid: 254 type: DisposalPipe components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 2.5,18.5 parent: 853 type: Transform @@ -2331,7 +2433,8 @@ entities: - uid: 255 type: DisposalPipe components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 2.5,19.5 parent: 853 type: Transform @@ -2342,7 +2445,8 @@ entities: - uid: 256 type: DisposalPipe components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 2.5,20.5 parent: 853 type: Transform @@ -2353,7 +2457,8 @@ entities: - uid: 257 type: DisposalPipe components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 2.5,21.5 parent: 853 type: Transform @@ -2364,7 +2469,8 @@ entities: - uid: 258 type: DisposalPipe components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 2.5,22.5 parent: 853 type: Transform @@ -2375,7 +2481,8 @@ entities: - uid: 259 type: DisposalPipe components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 2.5,23.5 parent: 853 type: Transform @@ -2386,7 +2493,8 @@ entities: - uid: 260 type: DisposalPipe components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 2.5,24.5 parent: 853 type: Transform @@ -2397,7 +2505,8 @@ entities: - uid: 261 type: DisposalPipe components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 2.5,25.5 parent: 853 type: Transform @@ -2408,7 +2517,8 @@ entities: - uid: 262 type: DisposalPipe components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 2.5,26.5 parent: 853 type: Transform @@ -2419,7 +2529,8 @@ entities: - uid: 263 type: DisposalPipe components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 2.5,27.5 parent: 853 type: Transform @@ -2437,7 +2548,8 @@ entities: - uid: 265 type: DisposalPipe components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 2.5,28.5 parent: 853 type: Transform @@ -2448,7 +2560,8 @@ entities: - uid: 266 type: DisposalPipe components: - - rot: 3.141592697301183 rad + - anchored: True + rot: 3.141592697301183 rad pos: -17.5,-21.5 parent: 853 type: Transform @@ -2459,7 +2572,8 @@ entities: - uid: 267 type: DisposalPipe components: - - rot: 1.5707963705062866 rad + - anchored: True + rot: 1.5707963705062866 rad pos: 1.5,29.5 parent: 853 type: Transform @@ -2470,7 +2584,8 @@ entities: - uid: 268 type: DisposalPipe components: - - rot: 1.5707963705062866 rad + - anchored: True + rot: 1.5707963705062866 rad pos: 0.5,29.5 parent: 853 type: Transform @@ -2481,7 +2596,8 @@ entities: - uid: 269 type: DisposalPipe components: - - rot: 1.5707963705062866 rad + - anchored: True + rot: 1.5707963705062866 rad pos: -0.5,29.5 parent: 853 type: Transform @@ -2492,7 +2608,8 @@ entities: - uid: 270 type: DisposalPipe components: - - rot: 1.5707963705062866 rad + - anchored: True + rot: 1.5707963705062866 rad pos: -1.5,29.5 parent: 853 type: Transform @@ -2503,7 +2620,8 @@ entities: - uid: 271 type: DisposalTrunk components: - - rot: 1.5707963705062866 rad + - anchored: True + rot: 1.5707963705062866 rad pos: -2.5,29.5 parent: 853 type: Transform @@ -2524,7 +2642,8 @@ entities: - uid: 273 type: DisposalPipe components: - - rot: 1.5707963705062866 rad + - anchored: True + rot: 1.5707963705062866 rad pos: -18.5,-10.5 parent: 853 type: Transform @@ -2535,7 +2654,8 @@ entities: - uid: 274 type: DisposalPipe components: - - rot: 3.141592697301183 rad + - anchored: True + rot: 3.141592697301183 rad pos: 3.5,-8.5 parent: 853 type: Transform @@ -2546,7 +2666,8 @@ entities: - uid: 275 type: DisposalPipe components: - - rot: 3.141592697301183 rad + - anchored: True + rot: 3.141592697301183 rad pos: 3.5,-7.5 parent: 853 type: Transform @@ -2557,7 +2678,8 @@ entities: - uid: 276 type: DisposalPipe components: - - rot: 3.141592697301183 rad + - anchored: True + rot: 3.141592697301183 rad pos: 3.5,-6.5 parent: 853 type: Transform @@ -2568,7 +2690,8 @@ entities: - uid: 277 type: DisposalPipe components: - - rot: 3.141592697301183 rad + - anchored: True + rot: 3.141592697301183 rad pos: 3.5,-5.5 parent: 853 type: Transform @@ -2579,7 +2702,8 @@ entities: - uid: 278 type: DisposalPipe components: - - rot: 3.141592697301183 rad + - anchored: True + rot: 3.141592697301183 rad pos: 3.5,-4.5 parent: 853 type: Transform @@ -2590,7 +2714,8 @@ entities: - uid: 279 type: DisposalPipe components: - - rot: 3.141592697301183 rad + - anchored: True + rot: 3.141592697301183 rad pos: 3.5,-3.5 parent: 853 type: Transform @@ -2601,7 +2726,8 @@ entities: - uid: 280 type: DisposalPipe components: - - rot: 3.141592697301183 rad + - anchored: True + rot: 3.141592697301183 rad pos: 3.5,-2.5 parent: 853 type: Transform @@ -2612,7 +2738,8 @@ entities: - uid: 281 type: DisposalPipe components: - - rot: 3.141592697301183 rad + - anchored: True + rot: 3.141592697301183 rad pos: 3.5,-1.5 parent: 853 type: Transform @@ -2623,7 +2750,8 @@ entities: - uid: 282 type: DisposalPipe components: - - rot: 3.141592697301183 rad + - anchored: True + rot: 3.141592697301183 rad pos: 3.5,-0.5 parent: 853 type: Transform @@ -2634,7 +2762,8 @@ entities: - uid: 283 type: DisposalPipe components: - - rot: 3.141592697301183 rad + - anchored: True + rot: 3.141592697301183 rad pos: 3.5,0.5 parent: 853 type: Transform @@ -2645,7 +2774,8 @@ entities: - uid: 284 type: DisposalPipe components: - - rot: 3.141592697301183 rad + - anchored: True + rot: 3.141592697301183 rad pos: 3.5,1.5 parent: 853 type: Transform @@ -2656,7 +2786,8 @@ entities: - uid: 285 type: DisposalPipe components: - - rot: 3.141592697301183 rad + - anchored: True + rot: 3.141592697301183 rad pos: 3.5,2.5 parent: 853 type: Transform @@ -2667,7 +2798,8 @@ entities: - uid: 286 type: DisposalPipe components: - - rot: 3.141592697301183 rad + - anchored: True + rot: 3.141592697301183 rad pos: 3.5,-10.5 parent: 853 type: Transform @@ -2678,7 +2810,8 @@ entities: - uid: 287 type: CableHV components: - - rot: 3.141592653589793 rad + - anchored: True + rot: 3.141592653589793 rad pos: 3.5,-20.5 parent: 853 type: Transform @@ -2689,7 +2822,8 @@ entities: - uid: 288 type: DisposalPipe components: - - rot: 4.71238902409608 rad + - anchored: True + rot: 4.71238902409608 rad pos: 5.5,-11.5 parent: 853 type: Transform @@ -2700,7 +2834,8 @@ entities: - uid: 289 type: DisposalPipe components: - - rot: 4.71238902409608 rad + - anchored: True + rot: 4.71238902409608 rad pos: 6.5,-11.5 parent: 853 type: Transform @@ -2711,7 +2846,8 @@ entities: - uid: 290 type: DisposalPipe components: - - rot: 4.71238902409608 rad + - anchored: True + rot: 4.71238902409608 rad pos: 7.5,-11.5 parent: 853 type: Transform @@ -2722,7 +2858,8 @@ entities: - uid: 291 type: DisposalPipe components: - - rot: 4.71238902409608 rad + - anchored: True + rot: 4.71238902409608 rad pos: 8.5,-11.5 parent: 853 type: Transform @@ -2733,7 +2870,8 @@ entities: - uid: 292 type: DisposalPipe components: - - rot: 4.71238902409608 rad + - anchored: True + rot: 4.71238902409608 rad pos: 4.5,-11.5 parent: 853 type: Transform @@ -2744,7 +2882,8 @@ entities: - uid: 293 type: DisposalPipe components: - - rot: 4.71238902409608 rad + - anchored: True + rot: 4.71238902409608 rad pos: 9.5,-11.5 parent: 853 type: Transform @@ -2755,7 +2894,8 @@ entities: - uid: 294 type: DisposalPipe components: - - rot: 4.71238902409608 rad + - anchored: True + rot: 4.71238902409608 rad pos: 10.5,-11.5 parent: 853 type: Transform @@ -2766,7 +2906,8 @@ entities: - uid: 295 type: DisposalTrunk components: - - rot: 4.71238902409608 rad + - anchored: True + rot: 4.71238902409608 rad pos: 11.5,-11.5 parent: 853 type: Transform @@ -2787,7 +2928,8 @@ entities: - uid: 297 type: DisposalPipe components: - - rot: 1.5707963705062866 rad + - anchored: True + rot: 1.5707963705062866 rad pos: -19.5,-10.5 parent: 853 type: Transform @@ -2798,7 +2940,8 @@ entities: - uid: 298 type: DisposalPipe components: - - rot: 3.141592697301183 rad + - anchored: True + rot: 3.141592697301183 rad pos: 12.5,1.5 parent: 853 type: Transform @@ -2809,7 +2952,8 @@ entities: - uid: 299 type: DisposalPipe components: - - rot: 3.141592697301183 rad + - anchored: True + rot: 3.141592697301183 rad pos: 12.5,0.5 parent: 853 type: Transform @@ -2820,7 +2964,8 @@ entities: - uid: 300 type: DisposalPipe components: - - pos: 14.5,0.5 + - anchored: True + pos: 14.5,0.5 parent: 853 type: Transform - containers: @@ -2830,7 +2975,8 @@ entities: - uid: 301 type: DisposalJunctionFlipped components: - - pos: 12.5,-0.5 + - anchored: True + pos: 12.5,-0.5 parent: 853 type: Transform - containers: @@ -2840,7 +2986,8 @@ entities: - uid: 302 type: DisposalBend components: - - rot: -1.5707963267948966 rad + - anchored: True + rot: -1.5707963267948966 rad pos: 14.5,-0.5 parent: 853 type: Transform @@ -2865,7 +3012,8 @@ entities: - uid: 305 type: DisposalPipe components: - - rot: 4.71238902409608 rad + - anchored: True + rot: 4.71238902409608 rad pos: 5.5,3.5 parent: 853 type: Transform @@ -2876,7 +3024,8 @@ entities: - uid: 306 type: DisposalPipe components: - - rot: 4.71238902409608 rad + - anchored: True + rot: 4.71238902409608 rad pos: 6.5,3.5 parent: 853 type: Transform @@ -2887,7 +3036,8 @@ entities: - uid: 307 type: DisposalPipe components: - - rot: 4.71238902409608 rad + - anchored: True + rot: 4.71238902409608 rad pos: 7.5,3.5 parent: 853 type: Transform @@ -2898,7 +3048,8 @@ entities: - uid: 308 type: DisposalPipe components: - - rot: 4.71238902409608 rad + - anchored: True + rot: 4.71238902409608 rad pos: 8.5,3.5 parent: 853 type: Transform @@ -2909,7 +3060,8 @@ entities: - uid: 309 type: DisposalPipe components: - - rot: 4.71238902409608 rad + - anchored: True + rot: 4.71238902409608 rad pos: 9.5,3.5 parent: 853 type: Transform @@ -2920,7 +3072,8 @@ entities: - uid: 310 type: DisposalPipe components: - - rot: 4.71238902409608 rad + - anchored: True + rot: 4.71238902409608 rad pos: 10.5,3.5 parent: 853 type: Transform @@ -2931,7 +3084,8 @@ entities: - uid: 311 type: DisposalPipe components: - - rot: 4.71238902409608 rad + - anchored: True + rot: 4.71238902409608 rad pos: 11.5,3.5 parent: 853 type: Transform @@ -2942,7 +3096,8 @@ entities: - uid: 312 type: DisposalPipe components: - - rot: 3.141592697301183 rad + - anchored: True + rot: 3.141592697301183 rad pos: 12.5,2.5 parent: 853 type: Transform @@ -2953,7 +3108,8 @@ entities: - uid: 313 type: DisposalPipe components: - - rot: 4.71238902409608 rad + - anchored: True + rot: 4.71238902409608 rad pos: 13.5,3.5 parent: 853 type: Transform @@ -2964,7 +3120,8 @@ entities: - uid: 314 type: DisposalPipe components: - - rot: 4.71238902409608 rad + - anchored: True + rot: 4.71238902409608 rad pos: 14.5,3.5 parent: 853 type: Transform @@ -2975,7 +3132,8 @@ entities: - uid: 315 type: DisposalPipe components: - - rot: 4.71238902409608 rad + - anchored: True + rot: 4.71238902409608 rad pos: 15.5,3.5 parent: 853 type: Transform @@ -2986,7 +3144,8 @@ entities: - uid: 316 type: DisposalPipe components: - - rot: 4.71238902409608 rad + - anchored: True + rot: 4.71238902409608 rad pos: 16.5,3.5 parent: 853 type: Transform @@ -2997,7 +3156,8 @@ entities: - uid: 317 type: DisposalPipe components: - - rot: 4.71238902409608 rad + - anchored: True + rot: 4.71238902409608 rad pos: 17.5,3.5 parent: 853 type: Transform @@ -3008,7 +3168,8 @@ entities: - uid: 318 type: DisposalPipe components: - - rot: 4.71238902409608 rad + - anchored: True + rot: 4.71238902409608 rad pos: 18.5,3.5 parent: 853 type: Transform @@ -3019,7 +3180,8 @@ entities: - uid: 319 type: DisposalPipe components: - - rot: 4.71238902409608 rad + - anchored: True + rot: 4.71238902409608 rad pos: 19.5,3.5 parent: 853 type: Transform @@ -3030,7 +3192,8 @@ entities: - uid: 320 type: DisposalPipe components: - - rot: 4.71238902409608 rad + - anchored: True + rot: 4.71238902409608 rad pos: 20.5,3.5 parent: 853 type: Transform @@ -3041,7 +3204,8 @@ entities: - uid: 321 type: DisposalPipe components: - - rot: 4.71238902409608 rad + - anchored: True + rot: 4.71238902409608 rad pos: 21.5,3.5 parent: 853 type: Transform @@ -3052,7 +3216,8 @@ entities: - uid: 322 type: DisposalPipe components: - - rot: 4.71238902409608 rad + - anchored: True + rot: 4.71238902409608 rad pos: 22.5,3.5 parent: 853 type: Transform @@ -3063,7 +3228,8 @@ entities: - uid: 323 type: DisposalPipe components: - - rot: 4.71238902409608 rad + - anchored: True + rot: 4.71238902409608 rad pos: 23.5,3.5 parent: 853 type: Transform @@ -3074,7 +3240,8 @@ entities: - uid: 324 type: DisposalPipe components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 24.5,4.5 parent: 853 type: Transform @@ -3093,7 +3260,8 @@ entities: - uid: 326 type: DisposalPipe components: - - rot: 4.71238902409608 rad + - anchored: True + rot: 4.71238902409608 rad pos: 26.5,3.5 parent: 853 type: Transform @@ -3104,7 +3272,8 @@ entities: - uid: 327 type: DisposalPipe components: - - rot: 4.71238902409608 rad + - anchored: True + rot: 4.71238902409608 rad pos: 27.5,3.5 parent: 853 type: Transform @@ -3115,7 +3284,8 @@ entities: - uid: 328 type: DisposalPipe components: - - rot: 4.71238902409608 rad + - anchored: True + rot: 4.71238902409608 rad pos: 28.5,3.5 parent: 853 type: Transform @@ -3126,7 +3296,8 @@ entities: - uid: 329 type: DisposalPipe components: - - rot: 4.71238902409608 rad + - anchored: True + rot: 4.71238902409608 rad pos: 29.5,3.5 parent: 853 type: Transform @@ -3137,7 +3308,8 @@ entities: - uid: 330 type: DisposalPipe components: - - rot: 4.71238902409608 rad + - anchored: True + rot: 4.71238902409608 rad pos: 4.5,3.5 parent: 853 type: Transform @@ -3148,7 +3320,8 @@ entities: - uid: 331 type: DisposalPipe components: - - rot: 3.141592697301183 rad + - anchored: True + rot: 3.141592697301183 rad pos: 3.5,-9.5 parent: 853 type: Transform @@ -3159,7 +3332,8 @@ entities: - uid: 332 type: DisposalPipe components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 2.5,4.5 parent: 853 type: Transform @@ -3170,7 +3344,8 @@ entities: - uid: 333 type: DisposalPipe components: - - rot: 1.5707963705062866 rad + - anchored: True + rot: 1.5707963705062866 rad pos: -20.5,-10.5 parent: 853 type: Transform @@ -3181,7 +3356,8 @@ entities: - uid: 334 type: DisposalTrunk components: - - rot: 3.141592697301183 rad + - anchored: True + rot: 3.141592697301183 rad pos: 0.5,1.5 parent: 853 type: Transform @@ -3203,7 +3379,8 @@ entities: - uid: 336 type: DisposalPipe components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -27.5,-9.5 parent: 853 type: Transform @@ -3214,7 +3391,8 @@ entities: - uid: 337 type: DisposalTrunk components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -27.5,-8.5 parent: 853 type: Transform @@ -3225,7 +3403,8 @@ entities: - uid: 338 type: DisposalPipe components: - - rot: 1.5707963705062866 rad + - anchored: True + rot: 1.5707963705062866 rad pos: -21.5,-10.5 parent: 853 type: Transform @@ -3236,7 +3415,8 @@ entities: - uid: 339 type: DisposalPipe components: - - rot: 3.141592697301183 rad + - anchored: True + rot: 3.141592697301183 rad pos: -12.5,2.5 parent: 853 type: Transform @@ -3247,7 +3427,8 @@ entities: - uid: 340 type: DisposalTrunk components: - - rot: 3.141592697301183 rad + - anchored: True + rot: 3.141592697301183 rad pos: -12.5,1.5 parent: 853 type: Transform @@ -3258,7 +3439,8 @@ entities: - uid: 341 type: DisposalPipe components: - - rot: 1.5707963705062866 rad + - anchored: True + rot: 1.5707963705062866 rad pos: -22.5,-10.5 parent: 853 type: Transform @@ -3269,7 +3451,8 @@ entities: - uid: 342 type: DisposalPipe components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -23.5,-12.5 parent: 853 type: Transform @@ -3280,7 +3463,8 @@ entities: - uid: 343 type: DisposalPipe components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -23.5,-11.5 parent: 853 type: Transform @@ -3291,7 +3475,8 @@ entities: - uid: 344 type: DisposalBend components: - - rot: 1.5707963705062866 rad + - anchored: True + rot: 1.5707963705062866 rad pos: -32.5,3.5 parent: 853 type: Transform @@ -3302,7 +3487,8 @@ entities: - uid: 345 type: DisposalPipe components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -22.5,4.5 parent: 853 type: Transform @@ -3313,7 +3499,8 @@ entities: - uid: 346 type: DisposalPipe components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -22.5,5.5 parent: 853 type: Transform @@ -3324,7 +3511,8 @@ entities: - uid: 347 type: DisposalTrunk components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -22.5,6.5 parent: 853 type: Transform @@ -3335,7 +3523,8 @@ entities: - uid: 348 type: DisposalBend components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -17.5,-10.5 parent: 853 type: Transform @@ -3346,7 +3535,8 @@ entities: - uid: 349 type: DisposalPipe components: - - rot: 4.71238902409608 rad + - anchored: True + rot: 4.71238902409608 rad pos: -7.5,3.5 parent: 853 type: Transform @@ -3357,7 +3547,8 @@ entities: - uid: 350 type: DisposalPipe components: - - rot: 4.71238902409608 rad + - anchored: True + rot: 4.71238902409608 rad pos: -6.5,3.5 parent: 853 type: Transform @@ -3368,7 +3559,8 @@ entities: - uid: 351 type: DisposalPipe components: - - rot: 4.71238902409608 rad + - anchored: True + rot: 4.71238902409608 rad pos: -5.5,3.5 parent: 853 type: Transform @@ -3379,7 +3571,8 @@ entities: - uid: 352 type: DisposalPipe components: - - rot: 4.71238902409608 rad + - anchored: True + rot: 4.71238902409608 rad pos: -4.5,3.5 parent: 853 type: Transform @@ -3390,7 +3583,8 @@ entities: - uid: 353 type: DisposalPipe components: - - rot: 4.71238902409608 rad + - anchored: True + rot: 4.71238902409608 rad pos: -3.5,3.5 parent: 853 type: Transform @@ -3401,7 +3595,8 @@ entities: - uid: 354 type: DisposalPipe components: - - rot: 4.71238902409608 rad + - anchored: True + rot: 4.71238902409608 rad pos: -2.5,3.5 parent: 853 type: Transform @@ -3412,7 +3607,8 @@ entities: - uid: 355 type: DisposalPipe components: - - rot: 4.71238902409608 rad + - anchored: True + rot: 4.71238902409608 rad pos: -1.5,3.5 parent: 853 type: Transform @@ -3423,7 +3619,8 @@ entities: - uid: 356 type: DisposalPipe components: - - rot: 4.71238902409608 rad + - anchored: True + rot: 4.71238902409608 rad pos: -0.5,3.5 parent: 853 type: Transform @@ -3434,7 +3631,8 @@ entities: - uid: 357 type: DisposalPipe components: - - rot: 3.141592697301183 rad + - anchored: True + rot: 3.141592697301183 rad pos: 0.5,2.5 parent: 853 type: Transform @@ -3445,7 +3643,8 @@ entities: - uid: 358 type: DisposalPipe components: - - rot: 4.71238902409608 rad + - anchored: True + rot: 4.71238902409608 rad pos: 1.5,3.5 parent: 853 type: Transform @@ -3456,7 +3655,8 @@ entities: - uid: 359 type: DisposalPipe components: - - rot: 4.71238902409608 rad + - anchored: True + rot: 4.71238902409608 rad pos: -8.5,3.5 parent: 853 type: Transform @@ -3467,7 +3667,8 @@ entities: - uid: 360 type: DisposalPipe components: - - rot: 4.71238902409608 rad + - anchored: True + rot: 4.71238902409608 rad pos: -9.5,3.5 parent: 853 type: Transform @@ -3478,7 +3679,8 @@ entities: - uid: 361 type: DisposalPipe components: - - rot: 4.71238902409608 rad + - anchored: True + rot: 4.71238902409608 rad pos: -10.5,3.5 parent: 853 type: Transform @@ -3489,7 +3691,8 @@ entities: - uid: 362 type: DisposalPipe components: - - rot: 4.71238902409608 rad + - anchored: True + rot: 4.71238902409608 rad pos: -11.5,3.5 parent: 853 type: Transform @@ -3511,7 +3714,8 @@ entities: - uid: 364 type: DisposalPipe components: - - rot: 4.71238902409608 rad + - anchored: True + rot: 4.71238902409608 rad pos: -13.5,3.5 parent: 853 type: Transform @@ -3522,7 +3726,8 @@ entities: - uid: 365 type: DisposalPipe components: - - rot: 4.71238902409608 rad + - anchored: True + rot: 4.71238902409608 rad pos: -14.5,3.5 parent: 853 type: Transform @@ -3533,7 +3738,8 @@ entities: - uid: 366 type: DisposalPipe components: - - rot: 4.71238902409608 rad + - anchored: True + rot: 4.71238902409608 rad pos: -15.5,3.5 parent: 853 type: Transform @@ -3544,7 +3750,8 @@ entities: - uid: 367 type: DisposalPipe components: - - rot: 4.71238902409608 rad + - anchored: True + rot: 4.71238902409608 rad pos: -16.5,3.5 parent: 853 type: Transform @@ -3555,7 +3762,8 @@ entities: - uid: 368 type: DisposalPipe components: - - rot: 4.71238902409608 rad + - anchored: True + rot: 4.71238902409608 rad pos: -17.5,3.5 parent: 853 type: Transform @@ -3566,7 +3774,8 @@ entities: - uid: 369 type: DisposalPipe components: - - rot: 4.71238902409608 rad + - anchored: True + rot: 4.71238902409608 rad pos: -18.5,3.5 parent: 853 type: Transform @@ -3577,7 +3786,8 @@ entities: - uid: 370 type: DisposalPipe components: - - rot: 4.71238902409608 rad + - anchored: True + rot: 4.71238902409608 rad pos: -19.5,3.5 parent: 853 type: Transform @@ -3588,7 +3798,8 @@ entities: - uid: 371 type: DisposalPipe components: - - rot: 4.71238902409608 rad + - anchored: True + rot: 4.71238902409608 rad pos: -20.5,3.5 parent: 853 type: Transform @@ -3599,7 +3810,8 @@ entities: - uid: 372 type: DisposalPipe components: - - rot: 4.71238902409608 rad + - anchored: True + rot: 4.71238902409608 rad pos: -21.5,3.5 parent: 853 type: Transform @@ -3620,7 +3832,8 @@ entities: - uid: 374 type: DisposalPipe components: - - rot: 4.71238902409608 rad + - anchored: True + rot: 4.71238902409608 rad pos: -23.5,3.5 parent: 853 type: Transform @@ -3631,7 +3844,8 @@ entities: - uid: 375 type: DisposalPipe components: - - rot: 4.71238902409608 rad + - anchored: True + rot: 4.71238902409608 rad pos: -24.5,3.5 parent: 853 type: Transform @@ -3642,7 +3856,8 @@ entities: - uid: 376 type: DisposalPipe components: - - rot: 4.71238902409608 rad + - anchored: True + rot: 4.71238902409608 rad pos: -25.5,3.5 parent: 853 type: Transform @@ -3653,7 +3868,8 @@ entities: - uid: 377 type: DisposalPipe components: - - rot: 4.71238902409608 rad + - anchored: True + rot: 4.71238902409608 rad pos: -26.5,3.5 parent: 853 type: Transform @@ -3664,7 +3880,8 @@ entities: - uid: 378 type: DisposalPipe components: - - rot: 4.71238902409608 rad + - anchored: True + rot: 4.71238902409608 rad pos: -27.5,3.5 parent: 853 type: Transform @@ -3675,7 +3892,8 @@ entities: - uid: 379 type: DisposalPipe components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -28.5,4.5 parent: 853 type: Transform @@ -3686,7 +3904,8 @@ entities: - uid: 380 type: DisposalPipe components: - - rot: 4.71238902409608 rad + - anchored: True + rot: 4.71238902409608 rad pos: -29.5,3.5 parent: 853 type: Transform @@ -3697,7 +3916,8 @@ entities: - uid: 381 type: DisposalPipe components: - - rot: 4.71238902409608 rad + - anchored: True + rot: 4.71238902409608 rad pos: -30.5,3.5 parent: 853 type: Transform @@ -3708,7 +3928,8 @@ entities: - uid: 382 type: DisposalPipe components: - - rot: 4.71238902409608 rad + - anchored: True + rot: 4.71238902409608 rad pos: -31.5,3.5 parent: 853 type: Transform @@ -3719,7 +3940,8 @@ entities: - uid: 383 type: DisposalPipe components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -32.5,2.5 parent: 853 type: Transform @@ -3730,7 +3952,8 @@ entities: - uid: 384 type: DisposalPipe components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -32.5,1.5 parent: 853 type: Transform @@ -3741,7 +3964,8 @@ entities: - uid: 385 type: DisposalPipe components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -32.5,0.5 parent: 853 type: Transform @@ -3752,7 +3976,8 @@ entities: - uid: 386 type: DisposalPipe components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -32.5,-0.5 parent: 853 type: Transform @@ -3763,7 +3988,8 @@ entities: - uid: 387 type: DisposalPipe components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -32.5,-1.5 parent: 853 type: Transform @@ -3774,7 +4000,8 @@ entities: - uid: 388 type: DisposalPipe components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -32.5,-2.5 parent: 853 type: Transform @@ -3785,7 +4012,8 @@ entities: - uid: 389 type: DisposalPipe components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -32.5,-3.5 parent: 853 type: Transform @@ -3796,7 +4024,8 @@ entities: - uid: 390 type: DisposalPipe components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -32.5,-4.5 parent: 853 type: Transform @@ -3807,7 +4036,8 @@ entities: - uid: 391 type: DisposalPipe components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -32.5,-5.5 parent: 853 type: Transform @@ -3818,7 +4048,8 @@ entities: - uid: 392 type: DisposalPipe components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -32.5,-6.5 parent: 853 type: Transform @@ -3829,7 +4060,8 @@ entities: - uid: 393 type: DisposalPipe components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -32.5,-7.5 parent: 853 type: Transform @@ -3840,7 +4072,8 @@ entities: - uid: 394 type: DisposalPipe components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -32.5,-8.5 parent: 853 type: Transform @@ -3851,7 +4084,8 @@ entities: - uid: 395 type: DisposalPipe components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -32.5,-9.5 parent: 853 type: Transform @@ -3862,7 +4096,8 @@ entities: - uid: 396 type: DisposalBend components: - - rot: 3.141592697301183 rad + - anchored: True + rot: 3.141592697301183 rad pos: -32.5,-10.5 parent: 853 type: Transform @@ -3873,7 +4108,8 @@ entities: - uid: 397 type: DisposalPipe components: - - rot: 4.71238902409608 rad + - anchored: True + rot: 4.71238902409608 rad pos: -31.5,-10.5 parent: 853 type: Transform @@ -3884,7 +4120,8 @@ entities: - uid: 398 type: DisposalPipe components: - - rot: 4.71238902409608 rad + - anchored: True + rot: 4.71238902409608 rad pos: -30.5,-10.5 parent: 853 type: Transform @@ -3895,7 +4132,8 @@ entities: - uid: 399 type: DisposalPipe components: - - rot: 4.71238902409608 rad + - anchored: True + rot: 4.71238902409608 rad pos: -29.5,-10.5 parent: 853 type: Transform @@ -3906,7 +4144,8 @@ entities: - uid: 400 type: DisposalPipe components: - - rot: 4.71238902409608 rad + - anchored: True + rot: 4.71238902409608 rad pos: -28.5,-10.5 parent: 853 type: Transform @@ -3927,7 +4166,8 @@ entities: - uid: 402 type: DisposalPipe components: - - rot: 4.71238902409608 rad + - anchored: True + rot: 4.71238902409608 rad pos: -26.5,-10.5 parent: 853 type: Transform @@ -3938,7 +4178,8 @@ entities: - uid: 403 type: DisposalPipe components: - - rot: 4.71238902409608 rad + - anchored: True + rot: 4.71238902409608 rad pos: -25.5,-10.5 parent: 853 type: Transform @@ -3949,7 +4190,8 @@ entities: - uid: 404 type: DisposalPipe components: - - rot: 4.71238902409608 rad + - anchored: True + rot: 4.71238902409608 rad pos: -24.5,-10.5 parent: 853 type: Transform @@ -4386,7 +4628,8 @@ entities: - uid: 465 type: Catwalk components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -32.5,8.5 parent: 853 type: Transform @@ -4738,6 +4981,8 @@ entities: pos: 9.916167,-29.48114 parent: 853 type: Transform + - powerLoad: 0 + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -4760,41 +5005,48 @@ entities: pos: -21.136164,-6.519089 parent: 853 type: Transform + - powerLoad: 0 + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer - uid: 517 type: Catwalk components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -15.5,-6.5 parent: 853 type: Transform - uid: 518 type: Catwalk components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -16.5,-5.5 parent: 853 type: Transform - uid: 519 type: Catwalk components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -15.5,-5.5 parent: 853 type: Transform - uid: 520 type: Catwalk components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -15.5,-4.5 parent: 853 type: Transform - uid: 521 type: Catwalk components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -16.5,-4.5 parent: 853 type: Transform @@ -5065,7 +5317,8 @@ entities: - uid: 556 type: Catwalk components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -1.5,21.5 parent: 853 type: Transform @@ -5082,6 +5335,8 @@ entities: - pos: 13.52327,-13.17637 parent: 853 type: Transform + - powerLoad: 0 + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -5106,6 +5361,8 @@ entities: pos: 11.041167,-29.44989 parent: 853 type: Transform + - powerLoad: 0 + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -5621,7 +5878,8 @@ entities: - uid: 608 type: CableApcExtension components: - - pos: -4.5,4.5 + - anchored: True + pos: -4.5,4.5 parent: 853 type: Transform - visible: False @@ -5746,7 +6004,8 @@ entities: - uid: 619 type: Catwalk components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 26.5,9.5 parent: 853 type: Transform @@ -5973,7 +6232,8 @@ entities: - uid: 638 type: CableHV components: - - rot: 3.141592653589793 rad + - anchored: True + rot: 3.141592653589793 rad pos: 3.5,-23.5 parent: 853 type: Transform @@ -6285,6 +6545,8 @@ entities: - pos: -38.50688,10.857263 parent: 853 type: Transform + - powerLoad: 0 + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -6538,7 +6800,8 @@ entities: - uid: 701 type: CableHV components: - - rot: 3.141592653589793 rad + - anchored: True + rot: 3.141592653589793 rad pos: 3.5,-22.5 parent: 853 type: Transform @@ -6556,7 +6819,8 @@ entities: - uid: 703 type: CableHV components: - - rot: 3.141592653589793 rad + - anchored: True + rot: 3.141592653589793 rad pos: 3.5,-21.5 parent: 853 type: Transform @@ -6869,7 +7133,8 @@ entities: - uid: 746 type: DisposalPipe components: - - rot: -1.5707963267948966 rad + - anchored: True + rot: -1.5707963267948966 rad pos: 13.5,-0.5 parent: 853 type: Transform @@ -6952,7 +7217,8 @@ entities: - uid: 757 type: CableHV components: - - pos: 14.5,11.5 + - anchored: True + pos: 14.5,11.5 parent: 853 type: Transform - visible: False @@ -6970,7 +7236,8 @@ entities: - uid: 759 type: DisposalPipe components: - - rot: 3.141592653589793 rad + - anchored: True + rot: 3.141592653589793 rad pos: 12.5,-1.5 parent: 853 type: Transform @@ -7738,91 +8005,104 @@ entities: - uid: 826 type: Catwalk components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 47.5,-4.5 parent: 853 type: Transform - uid: 827 type: Catwalk components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 47.5,-5.5 parent: 853 type: Transform - uid: 828 type: Catwalk components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 47.5,-6.5 parent: 853 type: Transform - uid: 829 type: Catwalk components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 48.5,-6.5 parent: 853 type: Transform - uid: 830 type: Catwalk components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 49.5,-6.5 parent: 853 type: Transform - uid: 831 type: Catwalk components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 50.5,-6.5 parent: 853 type: Transform - uid: 832 type: Catwalk components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 51.5,-6.5 parent: 853 type: Transform - uid: 833 type: Catwalk components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 51.5,-5.5 parent: 853 type: Transform - uid: 834 type: Catwalk components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 51.5,-4.5 parent: 853 type: Transform - uid: 835 type: Catwalk components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 51.5,-3.5 parent: 853 type: Transform - uid: 836 type: Catwalk components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 51.5,-2.5 parent: 853 type: Transform - uid: 837 type: Catwalk components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 50.5,-2.5 parent: 853 type: Transform - uid: 838 type: DisposalTrunk components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -29.5,11.5 parent: 853 type: Transform @@ -7833,7 +8113,8 @@ entities: - uid: 839 type: DisposalBend components: - - rot: 3.141592697301183 rad + - anchored: True + rot: 3.141592697301183 rad pos: -29.5,10.5 parent: 853 type: Transform @@ -7844,7 +8125,8 @@ entities: - uid: 840 type: DisposalBend components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -28.5,10.5 parent: 853 type: Transform @@ -7855,7 +8137,8 @@ entities: - uid: 841 type: DisposalBend components: - - rot: 1.5707963705062866 rad + - anchored: True + rot: 1.5707963705062866 rad pos: -8.5,-14.5 parent: 853 type: Transform @@ -7866,7 +8149,8 @@ entities: - uid: 842 type: DisposalPipe components: - - rot: 4.71238902409608 rad + - anchored: True + rot: 4.71238902409608 rad pos: -7.5,-14.5 parent: 853 type: Transform @@ -7877,7 +8161,8 @@ entities: - uid: 843 type: DisposalPipe components: - - rot: 4.71238902409608 rad + - anchored: True + rot: 4.71238902409608 rad pos: -6.5,-14.5 parent: 853 type: Transform @@ -7888,7 +8173,8 @@ entities: - uid: 844 type: DisposalTrunk components: - - rot: 4.71238902409608 rad + - anchored: True + rot: 4.71238902409608 rad pos: -5.5,-14.5 parent: 853 type: Transform @@ -7910,7 +8196,8 @@ entities: - uid: 846 type: DisposalPipe components: - - rot: 4.71238902409608 rad + - anchored: True + rot: 4.71238902409608 rad pos: -9.5,-15.5 parent: 853 type: Transform @@ -7921,7 +8208,8 @@ entities: - uid: 847 type: DisposalPipe components: - - rot: 1.5707963705062866 rad + - anchored: True + rot: 1.5707963705062866 rad pos: -15.5,-15.5 parent: 853 type: Transform @@ -7932,7 +8220,8 @@ entities: - uid: 848 type: DisposalPipe components: - - rot: 1.5707963705062866 rad + - anchored: True + rot: 1.5707963705062866 rad pos: -13.5,-15.5 parent: 853 type: Transform @@ -7943,7 +8232,8 @@ entities: - uid: 849 type: DisposalPipe components: - - rot: 1.5707963705062866 rad + - anchored: True + rot: 1.5707963705062866 rad pos: -14.5,-15.5 parent: 853 type: Transform @@ -7954,7 +8244,8 @@ entities: - uid: 850 type: DisposalPipe components: - - rot: 1.5707963705062866 rad + - anchored: True + rot: 1.5707963705062866 rad pos: -12.5,-15.5 parent: 853 type: Transform @@ -7965,7 +8256,8 @@ entities: - uid: 851 type: DisposalPipe components: - - rot: 1.5707963705062866 rad + - anchored: True + rot: 1.5707963705062866 rad pos: -11.5,-15.5 parent: 853 type: Transform @@ -7976,7 +8268,8 @@ entities: - uid: 852 type: DisposalPipe components: - - rot: 3.141592697301183 rad + - anchored: True + rot: 3.141592697301183 rad pos: -10.5,-16.5 parent: 853 type: Transform @@ -12056,21 +12349,24 @@ entities: - uid: 854 type: Catwalk components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 49.5,-2.5 parent: 853 type: Transform - uid: 855 type: Catwalk components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 48.5,-2.5 parent: 853 type: Transform - uid: 856 type: Catwalk components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 47.5,-2.5 parent: 853 type: Transform @@ -12080,6 +12376,8 @@ entities: - pos: 54.543198,-9.213088 parent: 853 type: Transform + - powerLoad: 0 + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -12089,6 +12387,8 @@ entities: - pos: 44.465073,-9.134963 parent: 853 type: Transform + - powerLoad: 0 + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -12199,7 +12499,8 @@ entities: - uid: 873 type: Autolathe components: - - pos: 29.5,-2.5 + - anchored: True + pos: 29.5,-2.5 parent: 853 type: Transform - containers: @@ -12219,7 +12520,8 @@ entities: - uid: 875 type: Protolathe components: - - pos: 29.5,-1.5 + - anchored: True + pos: 29.5,-1.5 parent: 853 type: Transform - containers: @@ -12251,7 +12553,8 @@ entities: - uid: 879 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 43.5,1.5 parent: 853 type: Transform @@ -12325,7 +12628,8 @@ entities: - uid: 889 type: GravityGenerator components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 49.5,-4.5 parent: 853 type: Transform @@ -12356,6 +12660,8 @@ entities: - pos: -11.487365,5.8158755 parent: 853 type: Transform + - powerLoad: 0 + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -12376,7 +12682,8 @@ entities: - uid: 894 type: KitchenMicrowave components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -14.5,-1.5 parent: 853 type: Transform @@ -12458,14 +12765,16 @@ entities: - uid: 905 type: Catwalk components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -17.5,-14.5 parent: 853 type: Transform - uid: 906 type: Catwalk components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -23.5,-10.5 parent: 853 type: Transform @@ -13085,7 +13394,8 @@ entities: - uid: 994 type: CableApcExtension components: - - pos: 1.5,1.5 + - anchored: True + pos: 1.5,1.5 parent: 853 type: Transform - canCollide: False @@ -13093,7 +13403,8 @@ entities: - uid: 995 type: Catwalk components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 22.5,-18.5 parent: 853 type: Transform @@ -13109,7 +13420,8 @@ entities: - uid: 997 type: CableApcExtension components: - - pos: 0.5,2.5 + - anchored: True + pos: 0.5,2.5 parent: 853 type: Transform - canCollide: False @@ -13117,7 +13429,8 @@ entities: - uid: 998 type: CableApcExtension components: - - pos: 1.5,2.5 + - anchored: True + pos: 1.5,2.5 parent: 853 type: Transform - canCollide: False @@ -13132,7 +13445,8 @@ entities: - uid: 1000 type: CableApcExtension components: - - pos: 3.5,30.5 + - anchored: True + pos: 3.5,30.5 parent: 853 type: Transform - visible: False @@ -13142,7 +13456,8 @@ entities: - uid: 1001 type: CableApcExtension components: - - pos: 3.5,28.5 + - anchored: True + pos: 3.5,28.5 parent: 853 type: Transform - visible: False @@ -13152,7 +13467,8 @@ entities: - uid: 1002 type: CableApcExtension components: - - pos: 26.5,4.5 + - anchored: True + pos: 26.5,4.5 parent: 853 type: Transform - visible: False @@ -13162,7 +13478,8 @@ entities: - uid: 1003 type: CableApcExtension components: - - pos: 25.5,4.5 + - anchored: True + pos: 25.5,4.5 parent: 853 type: Transform - visible: False @@ -13186,7 +13503,8 @@ entities: - uid: 1006 type: CableApcExtension components: - - pos: 27.5,4.5 + - anchored: True + pos: 27.5,4.5 parent: 853 type: Transform - visible: False @@ -13196,7 +13514,8 @@ entities: - uid: 1007 type: CableApcExtension components: - - pos: 27.5,6.5 + - anchored: True + pos: 27.5,6.5 parent: 853 type: Transform - visible: False @@ -13206,7 +13525,8 @@ entities: - uid: 1008 type: CableApcExtension components: - - pos: 27.5,5.5 + - anchored: True + pos: 27.5,5.5 parent: 853 type: Transform - visible: False @@ -13216,7 +13536,8 @@ entities: - uid: 1009 type: CableApcExtension components: - - pos: 3.5,29.5 + - anchored: True + pos: 3.5,29.5 parent: 853 type: Transform - visible: False @@ -13226,7 +13547,8 @@ entities: - uid: 1010 type: CableApcExtension components: - - pos: 16.5,-2.5 + - anchored: True + pos: 16.5,-2.5 parent: 853 type: Transform - visible: False @@ -13243,7 +13565,8 @@ entities: - uid: 1012 type: CableApcExtension components: - - pos: 22.5,-18.5 + - anchored: True + pos: 22.5,-18.5 parent: 853 type: Transform - canCollide: False @@ -13251,7 +13574,8 @@ entities: - uid: 1013 type: DisposalPipe components: - - rot: 3.141592653589793 rad + - anchored: True + rot: 3.141592653589793 rad pos: 12.5,-2.5 parent: 853 type: Transform @@ -13301,7 +13625,8 @@ entities: - uid: 1019 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -6.5,-26.5 parent: 853 type: Transform @@ -13310,21 +13635,24 @@ entities: - uid: 1020 type: Catwalk components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 10.5,14.5 parent: 853 type: Transform - uid: 1021 type: Catwalk components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 12.5,14.5 parent: 853 type: Transform - uid: 1022 type: Catwalk components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 11.5,14.5 parent: 853 type: Transform @@ -13425,6 +13753,8 @@ entities: - pos: -32.48585,5.8534822 parent: 853 type: Transform + - powerLoad: 0 + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -13480,7 +13810,8 @@ entities: - uid: 1043 type: Autolathe components: - - pos: -5.5,-12.5 + - anchored: True + pos: -5.5,-12.5 parent: 853 type: Transform - containers: @@ -13492,7 +13823,8 @@ entities: - uid: 1044 type: Protolathe components: - - pos: -3.5,-12.5 + - anchored: True + pos: -3.5,-12.5 parent: 853 type: Transform - containers: @@ -13625,6 +13957,8 @@ entities: pos: 2.1104045,7.4564466 parent: 853 type: Transform + - powerLoad: 0 + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -13635,6 +13969,8 @@ entities: pos: -9.922553,13.456606 parent: 853 type: Transform + - powerLoad: 0 + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -13644,6 +13980,8 @@ entities: - pos: -15.539971,-17.154892 parent: 853 type: Transform + - powerLoad: 0 + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -13653,6 +13991,8 @@ entities: - pos: 40.98358,13.845015 parent: 853 type: Transform + - powerLoad: 0 + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -13686,6 +14026,8 @@ entities: pos: -17.87964,-21.491213 parent: 853 type: Transform + - powerLoad: 0 + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -13710,6 +14052,8 @@ entities: pos: -20.870539,0.49653578 parent: 853 type: Transform + - powerLoad: 0 + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -13734,6 +14078,8 @@ entities: pos: -5.89616,-14.473355 parent: 853 type: Transform + - powerLoad: 0 + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -13744,6 +14090,8 @@ entities: pos: 2.0898275,-9.5469675 parent: 853 type: Transform + - powerLoad: 0 + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -13918,6 +14266,8 @@ entities: pos: 19.913452,-17.520119 parent: 853 type: Transform + - powerLoad: 0 + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -13974,7 +14324,8 @@ entities: - uid: 1104 type: DisposalTrunk components: - - rot: 3.141592653589793 rad + - anchored: True + rot: 3.141592653589793 rad pos: 12.5,-3.5 parent: 853 type: Transform @@ -14017,63 +14368,72 @@ entities: - uid: 1109 type: Catwalk components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -11.5,-22.5 parent: 853 type: Transform - uid: 1110 type: Catwalk components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -11.5,-23.5 parent: 853 type: Transform - uid: 1111 type: Catwalk components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -11.5,-24.5 parent: 853 type: Transform - uid: 1112 type: Catwalk components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -11.5,-25.5 parent: 853 type: Transform - uid: 1113 type: Catwalk components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -11.5,-26.5 parent: 853 type: Transform - uid: 1114 type: Catwalk components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -0.5,-26.5 parent: 853 type: Transform - uid: 1115 type: Catwalk components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -0.5,-25.5 parent: 853 type: Transform - uid: 1116 type: Catwalk components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -0.5,-24.5 parent: 853 type: Transform - uid: 1117 type: CableHV components: - - pos: -6.5,-26.5 + - anchored: True + pos: -6.5,-26.5 parent: 853 type: Transform - canCollide: False @@ -14081,7 +14441,8 @@ entities: - uid: 1118 type: CableHV components: - - pos: -4.5,-26.5 + - anchored: True + pos: -4.5,-26.5 parent: 853 type: Transform - canCollide: False @@ -14089,21 +14450,24 @@ entities: - uid: 1119 type: Catwalk components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -9.5,-26.5 parent: 853 type: Transform - uid: 1120 type: Catwalk components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -8.5,-26.5 parent: 853 type: Transform - uid: 1121 type: Catwalk components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -7.5,-26.5 parent: 853 type: Transform @@ -14135,6 +14499,8 @@ entities: pos: 19.923454,-11.570569 parent: 853 type: Transform + - powerLoad: 0 + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -14145,6 +14511,8 @@ entities: pos: 5.9039526,-17.513905 parent: 853 type: Transform + - powerLoad: 0 + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -14155,6 +14523,8 @@ entities: pos: 24.894157,-14.48887 parent: 853 type: Transform + - powerLoad: 0 + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -14247,14 +14617,16 @@ entities: - uid: 1139 type: Catwalk components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 29.5,-6.5 parent: 853 type: Transform - uid: 1140 type: Catwalk components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 33.5,-6.5 parent: 853 type: Transform @@ -14281,7 +14653,8 @@ entities: - uid: 1143 type: Catwalk components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 28.5,-6.5 parent: 853 type: Transform @@ -14362,7 +14735,8 @@ entities: - uid: 1153 type: Catwalk components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 27.5,-6.5 parent: 853 type: Transform @@ -14458,7 +14832,8 @@ entities: - uid: 1163 type: Catwalk components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 47.5,-3.5 parent: 853 type: Transform @@ -14649,6 +15024,8 @@ entities: pos: -13.905625,16.18277 parent: 853 type: Transform + - powerLoad: 0 + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -14670,6 +15047,8 @@ entities: pos: -16.087059,-1.5190892 parent: 853 type: Transform + - powerLoad: 0 + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -14714,6 +15093,8 @@ entities: - pos: -18.497206,5.8113365 parent: 853 type: Transform + - powerLoad: 0 + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -14792,6 +15173,8 @@ entities: - pos: -5.502577,17.78978 parent: 853 type: Transform + - powerLoad: 0 + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -14859,6 +15242,8 @@ entities: pos: -22.116953,2.4939203 parent: 853 type: Transform + - powerLoad: 0 + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -14909,6 +15294,8 @@ entities: - pos: -27.497717,11.849479 parent: 853 type: Transform + - powerLoad: 0 + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -14919,6 +15306,8 @@ entities: pos: -34.08711,9.508544 parent: 853 type: Transform + - powerLoad: 0 + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -14993,6 +15382,8 @@ entities: pos: -29.906116,9.430419 parent: 853 type: Transform + - powerLoad: 0 + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -15086,6 +15477,8 @@ entities: pos: 17.115456,-20.488289 parent: 853 type: Transform + - powerLoad: 0 + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -15121,12 +15514,12 @@ entities: - uid: 1239 type: SalternApc components: - - pos: -5.5120974,-7.5 + - anchored: True + pos: -5.5,-7.5 parent: 853 type: Transform - startingCharge: 11999.417 type: Battery - - uid: 1240 type: Poweredlight components: @@ -15134,6 +15527,8 @@ entities: pos: -23.089119,8.505429 parent: 853 type: Transform + - powerLoad: 0 + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -15168,14 +15563,16 @@ entities: - uid: 1245 type: Catwalk components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -0.5,-23.5 parent: 853 type: Transform - uid: 1246 type: CableApcExtension components: - - pos: -2.5,-15.5 + - anchored: True + pos: -2.5,-15.5 parent: 853 type: Transform - visible: False @@ -15185,7 +15582,8 @@ entities: - uid: 1247 type: CableApcExtension components: - - pos: 6.5,-0.5 + - anchored: True + pos: 6.5,-0.5 parent: 853 type: Transform - visible: False @@ -15202,7 +15600,8 @@ entities: - uid: 1249 type: CableApcExtension components: - - pos: 6.5,0.5 + - anchored: True + pos: 6.5,0.5 parent: 853 type: Transform - visible: False @@ -15320,6 +15719,8 @@ entities: pos: -35.07844,-4.406664 parent: 853 type: Transform + - powerLoad: 0 + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -15329,6 +15730,8 @@ entities: - pos: 1.5033649,0.8428016 parent: 853 type: Transform + - powerLoad: 0 + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -15381,6 +15784,8 @@ entities: pos: 6.1210775,-4.523888 parent: 853 type: Transform + - powerLoad: 0 + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -15405,6 +15810,8 @@ entities: pos: 4.8710775,2.273314 parent: 853 type: Transform + - powerLoad: 0 + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -15415,6 +15822,8 @@ entities: pos: 4.8977103,23.496256 parent: 853 type: Transform + - powerLoad: 0 + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -15431,6 +15840,8 @@ entities: - pos: -1.4910796,14.8427725 parent: 853 type: Transform + - powerLoad: 0 + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -15440,6 +15851,8 @@ entities: - pos: -8.486245,22.842363 parent: 853 type: Transform + - powerLoad: 0 + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -15546,6 +15959,8 @@ entities: pos: -11.046864,19.455282 parent: 853 type: Transform + - powerLoad: 0 + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -15556,6 +15971,8 @@ entities: pos: 2.1164603,23.496256 parent: 853 type: Transform + - powerLoad: 0 + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -15632,6 +16049,8 @@ entities: - pos: 12.520373,24.758696 parent: 853 type: Transform + - powerLoad: 0 + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -15642,6 +16061,8 @@ entities: pos: 0.4871831,3.0057735 parent: 853 type: Transform + - powerLoad: 0 + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -15652,6 +16073,8 @@ entities: pos: 10.845088,9.476223 parent: 853 type: Transform + - powerLoad: 0 + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -15703,6 +16126,8 @@ entities: - pos: 8.501338,21.797794 parent: 853 type: Transform + - powerLoad: 0 + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -15713,6 +16138,8 @@ entities: pos: 6.157588,9.523098 parent: 853 type: Transform + - powerLoad: 0 + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -15778,6 +16205,8 @@ entities: - pos: 25.501043,-1.1861185 parent: 853 type: Transform + - powerLoad: 0 + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -15858,6 +16287,8 @@ entities: pos: 47.090073,-4.4708805 parent: 853 type: Transform + - powerLoad: 0 + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -15867,6 +16298,8 @@ entities: - pos: 12.508076,1.8582891 parent: 853 type: Transform + - powerLoad: 0 + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -15919,6 +16352,8 @@ entities: pos: 18.098747,8.494373 parent: 853 type: Transform + - powerLoad: 0 + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -15942,6 +16377,8 @@ entities: - pos: 15.493641,1.8426641 parent: 853 type: Transform + - powerLoad: 0 + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -15951,6 +16388,8 @@ entities: - pos: 15.520623,12.86064 parent: 853 type: Transform + - powerLoad: 0 + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -15961,6 +16400,8 @@ entities: pos: 1.1155372,-17.513905 parent: 853 type: Transform + - powerLoad: 0 + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -16012,6 +16453,8 @@ entities: - pos: -1.4899101,-13.17648 parent: 853 type: Transform + - powerLoad: 0 + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -16021,6 +16464,8 @@ entities: - pos: -9.521995,-17.191471 parent: 853 type: Transform + - powerLoad: 0 + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -16038,6 +16483,8 @@ entities: pos: 18.89989,-0.46983594 parent: 853 type: Transform + - powerLoad: 0 + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -16055,6 +16502,8 @@ entities: pos: 2.0898275,-4.523888 parent: 853 type: Transform + - powerLoad: 0 + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -16079,6 +16528,8 @@ entities: pos: 7.1310654,-14.473245 parent: 853 type: Transform + - powerLoad: 0 + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -16117,6 +16568,8 @@ entities: pos: 19.90783,-8.476819 parent: 853 type: Transform + - powerLoad: 0 + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -16159,6 +16612,8 @@ entities: pos: 6.1367025,1.6240516 parent: 853 type: Transform + - powerLoad: 0 + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -16169,6 +16624,8 @@ entities: pos: 18.088957,13.54814 parent: 853 type: Transform + - powerLoad: 0 + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -16190,6 +16647,8 @@ entities: - pos: 22.445484,-9.293987 parent: 853 type: Transform + - powerLoad: 0 + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -16207,6 +16666,8 @@ entities: pos: 51.933823,-4.5333805 parent: 853 type: Transform + - powerLoad: 0 + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -16217,6 +16678,8 @@ entities: pos: 12.937156,-3.5445666 parent: 853 type: Transform + - powerLoad: 0 + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -16251,7 +16714,8 @@ entities: - uid: 1351 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -32.5,1.5 parent: 853 type: Transform @@ -16316,28 +16780,32 @@ entities: - uid: 1357 type: Catwalk components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 7.5,-19.5 parent: 853 type: Transform - uid: 1358 type: Catwalk components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 14.5,-19.5 parent: 853 type: Transform - uid: 1359 type: Catwalk components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 21.5,-10.5 parent: 853 type: Transform - uid: 1360 type: Catwalk components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 26.5,-10.5 parent: 853 type: Transform @@ -16403,6 +16871,8 @@ entities: - pos: 35.514977,-6.262737 parent: 853 type: Transform + - powerLoad: 0 + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -16413,6 +16883,8 @@ entities: pos: -30.97177,-5.531664 parent: 853 type: Transform + - powerLoad: 0 + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -16436,6 +16908,8 @@ entities: - pos: 28.505056,6.8201885 parent: 853 type: Transform + - powerLoad: 0 + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -16445,6 +16919,8 @@ entities: - pos: 30.499353,-6.200237 parent: 853 type: Transform + - powerLoad: 0 + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -16455,6 +16931,8 @@ entities: pos: -25.917414,-0.5190892 parent: 853 type: Transform + - powerLoad: 0 + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -16472,6 +16950,8 @@ entities: pos: 37.0966,2.484137 parent: 853 type: Transform + - powerLoad: 0 + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -16524,6 +17004,8 @@ entities: pos: 24.923923,11.532515 parent: 853 type: Transform + - powerLoad: 0 + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -16548,6 +17030,8 @@ entities: pos: 30.104717,12.563765 parent: 853 type: Transform + - powerLoad: 0 + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -16557,6 +17041,8 @@ entities: - pos: 46.516445,4.843512 parent: 853 type: Transform + - powerLoad: 0 + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -16591,7 +17077,8 @@ entities: - uid: 1384 type: CableApcExtension components: - - pos: -4.5,5.5 + - anchored: True + pos: -4.5,5.5 parent: 853 type: Transform - visible: False @@ -16639,6 +17126,8 @@ entities: - pos: 13.536872,-7.156335 parent: 853 type: Transform + - powerLoad: 0 + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -17291,7 +17780,8 @@ entities: - uid: 1482 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -7.5,-25.5 parent: 853 type: Transform @@ -17302,7 +17792,8 @@ entities: - uid: 1483 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -7.5,-26.5 parent: 853 type: Transform @@ -17703,7 +18194,8 @@ entities: - uid: 1539 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 58.5,-28.5 parent: 853 type: Transform @@ -17761,7 +18253,8 @@ entities: - uid: 1546 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 58.5,-32.5 parent: 853 type: Transform @@ -17770,7 +18263,8 @@ entities: - uid: 1547 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 57.5,-33.5 parent: 853 type: Transform @@ -17890,14 +18384,16 @@ entities: - uid: 1564 type: Catwalk components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -16.5,-15.5 parent: 853 type: Transform - uid: 1565 type: Catwalk components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -13.5,-14.5 parent: 853 type: Transform @@ -17917,21 +18413,24 @@ entities: - uid: 1567 type: Catwalk components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -8.5,-10.5 parent: 853 type: Transform - uid: 1568 type: Catwalk components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -9.5,-9.5 parent: 853 type: Transform - uid: 1569 type: Catwalk components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -9.5,-8.5 parent: 853 type: Transform @@ -17952,7 +18451,8 @@ entities: - uid: 1572 type: Catwalk components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 0.5,-7.5 parent: 853 type: Transform @@ -17978,105 +18478,120 @@ entities: - uid: 1576 type: Catwalk components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -32.5,-6.5 parent: 853 type: Transform - uid: 1577 type: Catwalk components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -33.5,-6.5 parent: 853 type: Transform - uid: 1578 type: Catwalk components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -32.5,0.5 parent: 853 type: Transform - uid: 1579 type: Catwalk components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -32.5,1.5 parent: 853 type: Transform - uid: 1580 type: Catwalk components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -15.5,11.5 parent: 853 type: Transform - uid: 1581 type: Catwalk components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -16.5,7.5 parent: 853 type: Transform - uid: 1582 type: Catwalk components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -20.5,12.5 parent: 853 type: Transform - uid: 1583 type: Catwalk components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -16.5,11.5 parent: 853 type: Transform - uid: 1584 type: Catwalk components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -4.5,23.5 parent: 853 type: Transform - uid: 1585 type: Catwalk components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -4.5,22.5 parent: 853 type: Transform - uid: 1586 type: Catwalk components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -4.5,21.5 parent: 853 type: Transform - uid: 1587 type: Catwalk components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -0.5,20.5 parent: 853 type: Transform - uid: 1588 type: Catwalk components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 6.5,14.5 parent: 853 type: Transform - uid: 1589 type: Catwalk components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 8.5,13.5 parent: 853 type: Transform - uid: 1590 type: Catwalk components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 12.5,20.5 parent: 853 type: Transform @@ -18094,14 +18609,16 @@ entities: - uid: 1592 type: Catwalk components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 27.5,8.5 parent: 853 type: Transform - uid: 1593 type: Catwalk components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 21.5,1.5 parent: 853 type: Transform @@ -19174,7 +19691,8 @@ entities: - uid: 1753 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 54.5,-33.5 parent: 853 type: Transform @@ -19210,7 +19728,8 @@ entities: - uid: 1758 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 58.5,-30.5 parent: 853 type: Transform @@ -19366,7 +19885,8 @@ entities: - uid: 1780 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 56.5,-33.5 parent: 853 type: Transform @@ -19375,7 +19895,8 @@ entities: - uid: 1781 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 58.5,-33.5 parent: 853 type: Transform @@ -19398,7 +19919,8 @@ entities: - uid: 1784 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 52.5,-33.5 parent: 853 type: Transform @@ -19679,7 +20201,8 @@ entities: - uid: 1825 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 53.5,-33.5 parent: 853 type: Transform @@ -19688,7 +20211,8 @@ entities: - uid: 1826 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 55.5,-33.5 parent: 853 type: Transform @@ -21152,7 +21676,8 @@ entities: - uid: 2033 type: DisposalPipe components: - - rot: 3.141592653589793 rad + - anchored: True + rot: 3.141592653589793 rad pos: 3.5,-13.5 parent: 853 type: Transform @@ -21163,7 +21688,8 @@ entities: - uid: 2034 type: DisposalPipe components: - - rot: 3.141592653589793 rad + - anchored: True + rot: 3.141592653589793 rad pos: 3.5,-12.5 parent: 853 type: Transform @@ -21174,7 +21700,8 @@ entities: - uid: 2035 type: DisposalJunction components: - - rot: 3.141592653589793 rad + - anchored: True + rot: 3.141592653589793 rad pos: 3.5,-11.5 parent: 853 type: Transform @@ -21505,14 +22032,16 @@ entities: - uid: 2084 type: Catwalk components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 0.5,-23.5 parent: 853 type: Transform - uid: 2085 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -7.5,-24.5 parent: 853 type: Transform @@ -21535,7 +22064,8 @@ entities: - uid: 2088 type: CableApcExtension components: - - pos: 1.5,6.5 + - anchored: True + pos: 1.5,6.5 parent: 853 type: Transform - canCollide: False @@ -23810,7 +24340,8 @@ entities: - uid: 2410 type: CableApcExtension components: - - pos: -1.5,6.5 + - anchored: True + pos: -1.5,6.5 parent: 853 type: Transform - canCollide: False @@ -23856,7 +24387,8 @@ entities: - uid: 2415 type: CableApcExtension components: - - pos: -3.5,6.5 + - anchored: True + pos: -3.5,6.5 parent: 853 type: Transform - canCollide: False @@ -23864,7 +24396,8 @@ entities: - uid: 2416 type: CableApcExtension components: - - pos: -2.5,6.5 + - anchored: True + pos: -2.5,6.5 parent: 853 type: Transform - canCollide: False @@ -23886,7 +24419,8 @@ entities: - uid: 2419 type: CableApcExtension components: - - pos: -4.5,6.5 + - anchored: True + pos: -4.5,6.5 parent: 853 type: Transform - canCollide: False @@ -23915,7 +24449,8 @@ entities: - uid: 2423 type: CableApcExtension components: - - pos: -13.5,-9.5 + - anchored: True + pos: -15.5,-9.5 parent: 853 type: Transform - visible: False @@ -23932,7 +24467,8 @@ entities: - uid: 2425 type: DisposalTrunk components: - - rot: 3.141592697301183 rad + - anchored: True + rot: 3.141592697301183 rad pos: -10.5,-17.5 parent: 853 type: Transform @@ -24377,7 +24913,8 @@ entities: - uid: 2486 type: Emitter components: - - pos: 43.5,13.5 + - anchored: True + pos: 43.5,13.5 parent: 853 type: Transform - uid: 2487 @@ -24502,123 +25039,123 @@ entities: - uid: 2504 type: SalternApc components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 9.5,27.5 parent: 853 type: Transform - startingCharge: 11999.634 type: Battery - - uid: 2505 type: SalternApc components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -2.5,27.5 parent: 853 type: Transform - startingCharge: 11999.3 type: Battery - - uid: 2506 type: SalternApc components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 9.5,22.5 parent: 853 type: Transform - startingCharge: 11999.066 type: Battery - - uid: 2507 type: SalternApc components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 24.5,14.5 parent: 853 type: Transform - startingCharge: 11999.733 type: Battery - - uid: 2508 type: SalternApc components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 28.5,14.5 parent: 853 type: Transform - startingCharge: 11999.483 type: Battery - - uid: 2509 type: SalternApc components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 47.5,-1.5 parent: 853 type: Transform - startingCharge: 11991.15 type: Battery - - uid: 2510 type: SalternApc components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 31.5,1.5 parent: 853 type: Transform - startingCharge: 11999.15 type: Battery - - uid: 2511 type: SalternApc components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 43.5,10.5 parent: 853 type: Transform - startingCharge: 11999.384 type: Battery - - uid: 2512 type: SalternApc components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 12.5,13.5 parent: 853 type: Transform - startingCharge: 11999.116 type: Battery - - uid: 2513 type: SalternApc components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 7.5,-17.5 parent: 853 type: Transform - startingCharge: 11999.2 type: Battery - - uid: 2514 type: SalternApc components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 22.5,-3.5 parent: 853 type: Transform - startingCharge: 11999.066 type: Battery - - uid: 2515 type: SalternApc components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 16.5,2.5 parent: 853 type: Transform - startingCharge: 11999.467 type: Battery - - uid: 2516 type: CrateServiceReplacementLights components: @@ -24634,43 +25171,43 @@ entities: - uid: 2517 type: SalternApc components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -3.5,15.5 parent: 853 type: Transform - startingCharge: 11999.483 type: Battery - - uid: 2518 type: SalternApc components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -28.5,12.5 parent: 853 type: Transform - startingCharge: 11999.4 type: Battery - - uid: 2519 type: SalternApc components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -39.5,11.5 parent: 853 type: Transform - startingCharge: 11999.4 type: Battery - - uid: 2520 type: SalternApc components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -11.5,2.5 parent: 853 type: Transform - startingCharge: 11998.483 type: Battery - - uid: 2521 type: ShellShotgunSlug components: @@ -24682,17 +25219,18 @@ entities: - uid: 2522 type: SalternApc components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -20.5,-12.5 parent: 853 type: Transform - startingCharge: 11999.75 type: Battery - - uid: 2523 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -14.5,0.5 parent: 853 type: Transform @@ -24710,37 +25248,38 @@ entities: - uid: 2525 type: SalternApc components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -1.5,-18.5 parent: 853 type: Transform - startingCharge: 11999.083 type: Battery - - uid: 2526 type: SalternApc components: - - rot: 4.371139006309477E-08 rad - pos: -9.75476,-21.5 + - anchored: True + rot: 4.371139006309477E-08 rad + pos: -9.5,-21.5 parent: 853 type: Transform - startingCharge: 11996.233 type: Battery - - uid: 2527 type: SalternApc components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -14.5,-16.5 parent: 853 type: Transform - startingCharge: 11999.65 type: Battery - - uid: 2528 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -28.5,12.5 parent: 853 type: Transform @@ -24749,7 +25288,8 @@ entities: - uid: 2529 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -28.5,11.5 parent: 853 type: Transform @@ -24760,7 +25300,8 @@ entities: - uid: 2530 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -28.5,10.5 parent: 853 type: Transform @@ -24771,7 +25312,8 @@ entities: - uid: 2531 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -28.5,9.5 parent: 853 type: Transform @@ -24782,7 +25324,8 @@ entities: - uid: 2532 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -28.5,8.5 parent: 853 type: Transform @@ -24793,7 +25336,8 @@ entities: - uid: 2533 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -27.5,9.5 parent: 853 type: Transform @@ -24804,7 +25348,8 @@ entities: - uid: 2534 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -26.5,9.5 parent: 853 type: Transform @@ -24815,7 +25360,8 @@ entities: - uid: 2535 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -25.5,9.5 parent: 853 type: Transform @@ -24824,7 +25370,8 @@ entities: - uid: 2536 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -26.5,8.5 parent: 853 type: Transform @@ -24835,7 +25382,8 @@ entities: - uid: 2537 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -26.5,7.5 parent: 853 type: Transform @@ -24844,7 +25392,8 @@ entities: - uid: 2538 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -24.5,9.5 parent: 853 type: Transform @@ -24855,7 +25404,8 @@ entities: - uid: 2539 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -23.5,9.5 parent: 853 type: Transform @@ -24866,7 +25416,8 @@ entities: - uid: 2540 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -22.5,9.5 parent: 853 type: Transform @@ -24877,7 +25428,8 @@ entities: - uid: 2541 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -21.5,9.5 parent: 853 type: Transform @@ -24888,7 +25440,8 @@ entities: - uid: 2542 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -20.5,9.5 parent: 853 type: Transform @@ -24899,7 +25452,8 @@ entities: - uid: 2543 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -19.5,9.5 parent: 853 type: Transform @@ -24910,7 +25464,8 @@ entities: - uid: 2544 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -23.5,8.5 parent: 853 type: Transform @@ -24921,7 +25476,8 @@ entities: - uid: 2545 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -23.5,7.5 parent: 853 type: Transform @@ -24932,7 +25488,8 @@ entities: - uid: 2546 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -23.5,7.5 parent: 853 type: Transform @@ -24943,7 +25500,8 @@ entities: - uid: 2547 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -23.5,6.5 parent: 853 type: Transform @@ -24954,7 +25512,8 @@ entities: - uid: 2548 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -28.5,13.5 parent: 853 type: Transform @@ -24965,7 +25524,8 @@ entities: - uid: 2549 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -28.5,14.5 parent: 853 type: Transform @@ -24974,7 +25534,8 @@ entities: - uid: 2550 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -17.5,9.5 parent: 853 type: Transform @@ -24983,7 +25544,8 @@ entities: - uid: 2551 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -16.5,9.5 parent: 853 type: Transform @@ -24994,7 +25556,8 @@ entities: - uid: 2552 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -16.5,8.5 parent: 853 type: Transform @@ -25005,7 +25568,8 @@ entities: - uid: 2553 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -16.5,7.5 parent: 853 type: Transform @@ -25014,17 +25578,18 @@ entities: - uid: 2554 type: SalternApc components: - - rot: 4.371139006309477E-08 rad - pos: -16.302551,15.5 + - anchored: True + rot: 4.371139006309477E-08 rad + pos: -16.5,15.5 parent: 853 type: Transform - startingCharge: 11999.833 type: Battery - - uid: 2555 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -16.5,15.5 parent: 853 type: Transform @@ -25035,7 +25600,8 @@ entities: - uid: 2556 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -17.5,15.5 parent: 853 type: Transform @@ -25044,7 +25610,8 @@ entities: - uid: 2557 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -17.5,16.5 parent: 853 type: Transform @@ -25055,7 +25622,8 @@ entities: - uid: 2558 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -17.5,17.5 parent: 853 type: Transform @@ -25066,7 +25634,8 @@ entities: - uid: 2559 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -17.5,18.5 parent: 853 type: Transform @@ -25077,7 +25646,8 @@ entities: - uid: 2560 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -17.5,19.5 parent: 853 type: Transform @@ -25088,7 +25658,8 @@ entities: - uid: 2561 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -17.5,20.5 parent: 853 type: Transform @@ -25099,7 +25670,8 @@ entities: - uid: 2562 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -17.5,21.5 parent: 853 type: Transform @@ -25110,7 +25682,8 @@ entities: - uid: 2563 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -17.5,22.5 parent: 853 type: Transform @@ -25121,7 +25694,8 @@ entities: - uid: 2564 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -17.5,23.5 parent: 853 type: Transform @@ -25132,7 +25706,8 @@ entities: - uid: 2565 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -17.5,24.5 parent: 853 type: Transform @@ -25143,7 +25718,8 @@ entities: - uid: 2566 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -16.5,24.5 parent: 853 type: Transform @@ -25154,7 +25730,8 @@ entities: - uid: 2567 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -15.5,24.5 parent: 853 type: Transform @@ -25165,7 +25742,8 @@ entities: - uid: 2568 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -14.5,24.5 parent: 853 type: Transform @@ -25176,7 +25754,8 @@ entities: - uid: 2569 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -13.5,24.5 parent: 853 type: Transform @@ -25187,7 +25766,8 @@ entities: - uid: 2570 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -12.5,24.5 parent: 853 type: Transform @@ -25198,7 +25778,8 @@ entities: - uid: 2571 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -11.5,24.5 parent: 853 type: Transform @@ -25209,7 +25790,8 @@ entities: - uid: 2572 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -10.5,24.5 parent: 853 type: Transform @@ -25220,7 +25802,8 @@ entities: - uid: 2573 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -9.5,24.5 parent: 853 type: Transform @@ -25231,7 +25814,8 @@ entities: - uid: 2574 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -8.5,24.5 parent: 853 type: Transform @@ -25242,7 +25826,8 @@ entities: - uid: 2575 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -7.5,24.5 parent: 853 type: Transform @@ -25251,7 +25836,8 @@ entities: - uid: 2576 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -12.5,12.5 parent: 853 type: Transform @@ -25260,7 +25846,8 @@ entities: - uid: 2577 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -12.5,11.5 parent: 853 type: Transform @@ -25271,7 +25858,8 @@ entities: - uid: 2578 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -13.5,11.5 parent: 853 type: Transform @@ -25282,7 +25870,8 @@ entities: - uid: 2579 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -12.5,10.5 parent: 853 type: Transform @@ -25293,7 +25882,8 @@ entities: - uid: 2580 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -12.5,9.5 parent: 853 type: Transform @@ -25304,7 +25894,8 @@ entities: - uid: 2581 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -12.5,7.5 parent: 853 type: Transform @@ -25315,7 +25906,8 @@ entities: - uid: 2582 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -12.5,8.5 parent: 853 type: Transform @@ -25326,7 +25918,8 @@ entities: - uid: 2583 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -11.5,7.5 parent: 853 type: Transform @@ -25337,7 +25930,8 @@ entities: - uid: 2584 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -11.5,10.5 parent: 853 type: Transform @@ -25348,7 +25942,8 @@ entities: - uid: 2585 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -9.5,10.5 parent: 853 type: Transform @@ -25359,7 +25954,8 @@ entities: - uid: 2586 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -10.5,10.5 parent: 853 type: Transform @@ -25370,7 +25966,8 @@ entities: - uid: 2587 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -8.5,10.5 parent: 853 type: Transform @@ -25381,7 +25978,8 @@ entities: - uid: 2588 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -7.5,10.5 parent: 853 type: Transform @@ -25392,7 +25990,8 @@ entities: - uid: 2589 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -6.5,10.5 parent: 853 type: Transform @@ -25403,7 +26002,8 @@ entities: - uid: 2590 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -5.5,10.5 parent: 853 type: Transform @@ -25414,7 +26014,8 @@ entities: - uid: 2591 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -4.5,10.5 parent: 853 type: Transform @@ -25425,7 +26026,8 @@ entities: - uid: 2592 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -3.5,10.5 parent: 853 type: Transform @@ -25436,7 +26038,8 @@ entities: - uid: 2593 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -2.5,10.5 parent: 853 type: Transform @@ -25447,7 +26050,8 @@ entities: - uid: 2594 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -1.5,10.5 parent: 853 type: Transform @@ -25458,7 +26062,8 @@ entities: - uid: 2595 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -0.5,10.5 parent: 853 type: Transform @@ -25469,7 +26074,8 @@ entities: - uid: 2596 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 0.5,10.5 parent: 853 type: Transform @@ -25480,7 +26086,8 @@ entities: - uid: 2597 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -5.5,9.5 parent: 853 type: Transform @@ -25491,7 +26098,8 @@ entities: - uid: 2598 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -5.5,8.5 parent: 853 type: Transform @@ -25502,7 +26110,8 @@ entities: - uid: 2599 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -5.5,7.5 parent: 853 type: Transform @@ -25513,7 +26122,8 @@ entities: - uid: 2600 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 0.5,9.5 parent: 853 type: Transform @@ -25524,7 +26134,8 @@ entities: - uid: 2601 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 0.5,8.5 parent: 853 type: Transform @@ -25535,7 +26146,8 @@ entities: - uid: 2602 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 0.5,7.5 parent: 853 type: Transform @@ -25546,7 +26158,8 @@ entities: - uid: 2603 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 0.5,6.5 parent: 853 type: Transform @@ -25555,7 +26168,8 @@ entities: - uid: 2604 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 0.5,6.5 parent: 853 type: Transform @@ -25564,7 +26178,8 @@ entities: - uid: 2605 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -0.5,6.5 parent: 853 type: Transform @@ -25573,7 +26188,8 @@ entities: - uid: 2606 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -3.5,15.5 parent: 853 type: Transform @@ -25582,7 +26198,8 @@ entities: - uid: 2607 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -3.5,16.5 parent: 853 type: Transform @@ -25593,7 +26210,8 @@ entities: - uid: 2608 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -3.5,17.5 parent: 853 type: Transform @@ -25604,7 +26222,8 @@ entities: - uid: 2609 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -3.5,18.5 parent: 853 type: Transform @@ -25615,7 +26234,8 @@ entities: - uid: 2610 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -2.5,18.5 parent: 853 type: Transform @@ -25626,7 +26246,8 @@ entities: - uid: 2611 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -1.5,18.5 parent: 853 type: Transform @@ -25637,7 +26258,8 @@ entities: - uid: 2612 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -0.5,18.5 parent: 853 type: Transform @@ -25648,7 +26270,8 @@ entities: - uid: 2613 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -3.5,15.5 parent: 853 type: Transform @@ -25657,7 +26280,8 @@ entities: - uid: 2614 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -3.5,14.5 parent: 853 type: Transform @@ -25668,7 +26292,8 @@ entities: - uid: 2615 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -4.5,14.5 parent: 853 type: Transform @@ -25679,7 +26304,8 @@ entities: - uid: 2616 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -5.5,14.5 parent: 853 type: Transform @@ -25690,7 +26316,8 @@ entities: - uid: 2617 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -6.5,14.5 parent: 853 type: Transform @@ -25701,7 +26328,8 @@ entities: - uid: 2618 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -7.5,14.5 parent: 853 type: Transform @@ -25712,7 +26340,8 @@ entities: - uid: 2619 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -8.5,14.5 parent: 853 type: Transform @@ -25723,7 +26352,8 @@ entities: - uid: 2620 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -9.5,14.5 parent: 853 type: Transform @@ -25734,7 +26364,8 @@ entities: - uid: 2621 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -10.5,14.5 parent: 853 type: Transform @@ -25743,7 +26374,8 @@ entities: - uid: 2622 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -11.5,14.5 parent: 853 type: Transform @@ -25754,7 +26386,8 @@ entities: - uid: 2623 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -12.5,14.5 parent: 853 type: Transform @@ -25765,7 +26398,8 @@ entities: - uid: 2624 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -12.5,15.5 parent: 853 type: Transform @@ -25776,7 +26410,8 @@ entities: - uid: 2625 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -12.5,16.5 parent: 853 type: Transform @@ -25787,7 +26422,8 @@ entities: - uid: 2626 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -7.5,15.5 parent: 853 type: Transform @@ -25798,7 +26434,8 @@ entities: - uid: 2627 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -7.5,16.5 parent: 853 type: Transform @@ -25809,7 +26446,8 @@ entities: - uid: 2628 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -7.5,17.5 parent: 853 type: Transform @@ -25820,7 +26458,8 @@ entities: - uid: 2629 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -6.5,17.5 parent: 853 type: Transform @@ -25831,7 +26470,8 @@ entities: - uid: 2630 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -8.5,17.5 parent: 853 type: Transform @@ -25842,7 +26482,8 @@ entities: - uid: 2631 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -8.5,18.5 parent: 853 type: Transform @@ -25853,7 +26494,8 @@ entities: - uid: 2632 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -8.5,19.5 parent: 853 type: Transform @@ -25864,7 +26506,8 @@ entities: - uid: 2633 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -8.5,20.5 parent: 853 type: Transform @@ -25875,7 +26518,8 @@ entities: - uid: 2634 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -9.5,20.5 parent: 853 type: Transform @@ -25886,7 +26530,8 @@ entities: - uid: 2635 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -8.5,21.5 parent: 853 type: Transform @@ -25897,7 +26542,8 @@ entities: - uid: 2636 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -7.5,21.5 parent: 853 type: Transform @@ -25908,7 +26554,8 @@ entities: - uid: 2637 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -12.5,17.5 parent: 853 type: Transform @@ -25919,7 +26566,8 @@ entities: - uid: 2638 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -12.5,18.5 parent: 853 type: Transform @@ -25930,7 +26578,8 @@ entities: - uid: 2639 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -12.5,19.5 parent: 853 type: Transform @@ -25941,7 +26590,8 @@ entities: - uid: 2640 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -12.5,20.5 parent: 853 type: Transform @@ -25952,7 +26602,8 @@ entities: - uid: 2641 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -13.5,20.5 parent: 853 type: Transform @@ -25963,7 +26614,8 @@ entities: - uid: 2642 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -14.5,20.5 parent: 853 type: Transform @@ -25974,7 +26626,8 @@ entities: - uid: 2643 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -3.5,14.5 parent: 853 type: Transform @@ -25985,7 +26638,8 @@ entities: - uid: 2644 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -2.5,14.5 parent: 853 type: Transform @@ -25996,7 +26650,8 @@ entities: - uid: 2645 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -1.5,14.5 parent: 853 type: Transform @@ -26007,7 +26662,8 @@ entities: - uid: 2646 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -0.5,14.5 parent: 853 type: Transform @@ -26018,7 +26674,8 @@ entities: - uid: 2647 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 0.5,14.5 parent: 853 type: Transform @@ -26029,7 +26686,8 @@ entities: - uid: 2648 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 1.5,14.5 parent: 853 type: Transform @@ -26038,7 +26696,8 @@ entities: - uid: 2649 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 0.5,13.5 parent: 853 type: Transform @@ -26049,7 +26708,8 @@ entities: - uid: 2650 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 0.5,12.5 parent: 853 type: Transform @@ -26060,7 +26720,8 @@ entities: - uid: 2651 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -39.5,11.5 parent: 853 type: Transform @@ -26069,7 +26730,8 @@ entities: - uid: 2652 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -39.5,10.5 parent: 853 type: Transform @@ -26080,7 +26742,8 @@ entities: - uid: 2653 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -38.5,10.5 parent: 853 type: Transform @@ -26091,7 +26754,8 @@ entities: - uid: 2654 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -37.5,10.5 parent: 853 type: Transform @@ -26102,7 +26766,8 @@ entities: - uid: 2655 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -36.5,10.5 parent: 853 type: Transform @@ -26113,7 +26778,8 @@ entities: - uid: 2656 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -36.5,9.5 parent: 853 type: Transform @@ -26124,7 +26790,8 @@ entities: - uid: 2657 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -36.5,8.5 parent: 853 type: Transform @@ -26135,7 +26802,8 @@ entities: - uid: 2658 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -36.5,7.5 parent: 853 type: Transform @@ -26146,7 +26814,8 @@ entities: - uid: 2659 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -36.5,6.5 parent: 853 type: Transform @@ -26157,7 +26826,8 @@ entities: - uid: 2660 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -36.5,5.5 parent: 853 type: Transform @@ -26168,7 +26838,8 @@ entities: - uid: 2661 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -36.5,4.5 parent: 853 type: Transform @@ -26179,7 +26850,8 @@ entities: - uid: 2662 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -36.5,3.5 parent: 853 type: Transform @@ -26190,7 +26862,8 @@ entities: - uid: 2663 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -36.5,2.5 parent: 853 type: Transform @@ -26201,7 +26874,8 @@ entities: - uid: 2664 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -36.5,1.5 parent: 853 type: Transform @@ -26212,7 +26886,8 @@ entities: - uid: 2665 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -36.5,0.5 parent: 853 type: Transform @@ -26223,7 +26898,8 @@ entities: - uid: 2666 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -36.5,-0.5 parent: 853 type: Transform @@ -26234,7 +26910,8 @@ entities: - uid: 2667 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -36.5,-1.5 parent: 853 type: Transform @@ -26245,7 +26922,8 @@ entities: - uid: 2668 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -36.5,-2.5 parent: 853 type: Transform @@ -26256,7 +26934,8 @@ entities: - uid: 2669 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -36.5,-3.5 parent: 853 type: Transform @@ -26267,7 +26946,8 @@ entities: - uid: 2670 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -36.5,-4.5 parent: 853 type: Transform @@ -26278,7 +26958,8 @@ entities: - uid: 2671 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -36.5,-5.5 parent: 853 type: Transform @@ -26289,7 +26970,8 @@ entities: - uid: 2672 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -36.5,-6.5 parent: 853 type: Transform @@ -26300,7 +26982,8 @@ entities: - uid: 2673 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -35.5,-6.5 parent: 853 type: Transform @@ -26311,7 +26994,8 @@ entities: - uid: 2674 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -35.5,2.5 parent: 853 type: Transform @@ -26322,7 +27006,8 @@ entities: - uid: 2675 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -35.5,5.5 parent: 853 type: Transform @@ -26333,7 +27018,8 @@ entities: - uid: 2676 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -34.5,5.5 parent: 853 type: Transform @@ -26344,7 +27030,8 @@ entities: - uid: 2677 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -33.5,5.5 parent: 853 type: Transform @@ -26355,7 +27042,8 @@ entities: - uid: 2678 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -32.5,5.5 parent: 853 type: Transform @@ -26366,7 +27054,8 @@ entities: - uid: 2679 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -35.5,8.5 parent: 853 type: Transform @@ -26377,7 +27066,8 @@ entities: - uid: 2680 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -34.5,8.5 parent: 853 type: Transform @@ -26388,7 +27078,8 @@ entities: - uid: 2681 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -37.5,8.5 parent: 853 type: Transform @@ -26399,7 +27090,8 @@ entities: - uid: 2682 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -38.5,8.5 parent: 853 type: Transform @@ -26410,7 +27102,8 @@ entities: - uid: 2683 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -39.5,8.5 parent: 853 type: Transform @@ -26421,7 +27114,8 @@ entities: - uid: 2684 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -40.5,8.5 parent: 853 type: Transform @@ -26432,7 +27126,8 @@ entities: - uid: 2685 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -37.5,4.5 parent: 853 type: Transform @@ -26443,7 +27138,8 @@ entities: - uid: 2686 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -38.5,4.5 parent: 853 type: Transform @@ -26454,7 +27150,8 @@ entities: - uid: 2687 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -39.5,4.5 parent: 853 type: Transform @@ -26465,7 +27162,8 @@ entities: - uid: 2688 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -40.5,4.5 parent: 853 type: Transform @@ -26476,7 +27174,8 @@ entities: - uid: 2689 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -37.5,-3.5 parent: 853 type: Transform @@ -26487,7 +27186,8 @@ entities: - uid: 2690 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -38.5,-3.5 parent: 853 type: Transform @@ -26498,7 +27198,8 @@ entities: - uid: 2691 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -18.5,9.5 parent: 853 type: Transform @@ -26507,7 +27208,8 @@ entities: - uid: 2692 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -17.5,7.5 parent: 853 type: Transform @@ -26516,7 +27218,8 @@ entities: - uid: 2693 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -18.5,7.5 parent: 853 type: Transform @@ -26525,7 +27228,8 @@ entities: - uid: 2694 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -30.5,-3.5 parent: 853 type: Transform @@ -26534,7 +27238,8 @@ entities: - uid: 2695 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -30.5,-4.5 parent: 853 type: Transform @@ -26545,7 +27250,8 @@ entities: - uid: 2696 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -30.5,-5.5 parent: 853 type: Transform @@ -26556,7 +27262,8 @@ entities: - uid: 2697 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -30.5,-6.5 parent: 853 type: Transform @@ -26565,7 +27272,8 @@ entities: - uid: 2698 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -30.5,-7.5 parent: 853 type: Transform @@ -26576,7 +27284,8 @@ entities: - uid: 2699 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -29.5,-7.5 parent: 853 type: Transform @@ -26587,7 +27296,8 @@ entities: - uid: 2700 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -28.5,-7.5 parent: 853 type: Transform @@ -26598,7 +27308,8 @@ entities: - uid: 2701 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -27.5,-7.5 parent: 853 type: Transform @@ -26609,7 +27320,8 @@ entities: - uid: 2702 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -26.5,-7.5 parent: 853 type: Transform @@ -26620,7 +27332,8 @@ entities: - uid: 2703 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -25.5,-7.5 parent: 853 type: Transform @@ -26631,7 +27344,8 @@ entities: - uid: 2704 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -25.5,-8.5 parent: 853 type: Transform @@ -26642,7 +27356,8 @@ entities: - uid: 2705 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -24.5,-7.5 parent: 853 type: Transform @@ -26653,7 +27368,8 @@ entities: - uid: 2706 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -23.5,-7.5 parent: 853 type: Transform @@ -26664,7 +27380,8 @@ entities: - uid: 2707 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -23.5,-8.5 parent: 853 type: Transform @@ -26675,7 +27392,8 @@ entities: - uid: 2708 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -20.5,-7.5 parent: 853 type: Transform @@ -26686,7 +27404,8 @@ entities: - uid: 2709 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -30.5,-2.5 parent: 853 type: Transform @@ -26697,7 +27416,8 @@ entities: - uid: 2710 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -30.5,-1.5 parent: 853 type: Transform @@ -26708,7 +27428,8 @@ entities: - uid: 2711 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -30.5,-0.5 parent: 853 type: Transform @@ -26717,7 +27438,8 @@ entities: - uid: 2712 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -30.5,0.5 parent: 853 type: Transform @@ -26728,7 +27450,8 @@ entities: - uid: 2713 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -30.5,1.5 parent: 853 type: Transform @@ -26739,7 +27462,8 @@ entities: - uid: 2714 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -29.5,0.5 parent: 853 type: Transform @@ -26750,7 +27474,8 @@ entities: - uid: 2715 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -28.5,0.5 parent: 853 type: Transform @@ -26761,7 +27486,8 @@ entities: - uid: 2716 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -27.5,0.5 parent: 853 type: Transform @@ -26772,7 +27498,8 @@ entities: - uid: 2717 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -27.5,-0.5 parent: 853 type: Transform @@ -26781,7 +27508,8 @@ entities: - uid: 2718 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -27.5,-1.5 parent: 853 type: Transform @@ -26799,7 +27527,8 @@ entities: - uid: 2720 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -31.5,-6.5 parent: 853 type: Transform @@ -26810,7 +27539,8 @@ entities: - uid: 2721 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -32.5,-6.5 parent: 853 type: Transform @@ -26819,7 +27549,8 @@ entities: - uid: 2722 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -32.5,-5.5 parent: 853 type: Transform @@ -26830,7 +27561,8 @@ entities: - uid: 2723 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -32.5,-4.5 parent: 853 type: Transform @@ -26841,7 +27573,8 @@ entities: - uid: 2724 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -32.5,-3.5 parent: 853 type: Transform @@ -26852,7 +27585,8 @@ entities: - uid: 2725 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -32.5,-2.5 parent: 853 type: Transform @@ -26863,7 +27597,8 @@ entities: - uid: 2726 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -32.5,-1.5 parent: 853 type: Transform @@ -26874,7 +27609,8 @@ entities: - uid: 2727 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -32.5,-0.5 parent: 853 type: Transform @@ -26885,7 +27621,8 @@ entities: - uid: 2728 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -32.5,0.5 parent: 853 type: Transform @@ -26894,7 +27631,8 @@ entities: - uid: 2729 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -32.5,1.5 parent: 853 type: Transform @@ -26903,7 +27641,8 @@ entities: - uid: 2730 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -20.5,-12.5 parent: 853 type: Transform @@ -26912,7 +27651,8 @@ entities: - uid: 2731 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -20.5,-13.5 parent: 853 type: Transform @@ -26923,7 +27663,8 @@ entities: - uid: 2732 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -20.5,-14.5 parent: 853 type: Transform @@ -26934,7 +27675,8 @@ entities: - uid: 2733 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -21.5,-14.5 parent: 853 type: Transform @@ -26945,7 +27687,8 @@ entities: - uid: 2734 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -22.5,-14.5 parent: 853 type: Transform @@ -26956,7 +27699,8 @@ entities: - uid: 2735 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -22.5,-14.5 parent: 853 type: Transform @@ -26967,7 +27711,8 @@ entities: - uid: 2736 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -23.5,-14.5 parent: 853 type: Transform @@ -26978,7 +27723,8 @@ entities: - uid: 2737 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -24.5,-14.5 parent: 853 type: Transform @@ -26989,7 +27735,8 @@ entities: - uid: 2738 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -24.5,-13.5 parent: 853 type: Transform @@ -27000,7 +27747,8 @@ entities: - uid: 2739 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -14.5,-8.5 parent: 853 type: Transform @@ -27011,7 +27759,8 @@ entities: - uid: 2740 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -14.5,-9.5 parent: 853 type: Transform @@ -27022,7 +27771,8 @@ entities: - uid: 2741 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -14.5,-10.5 parent: 853 type: Transform @@ -27033,7 +27783,8 @@ entities: - uid: 2742 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -14.5,-10.5 parent: 853 type: Transform @@ -27041,21 +27792,11 @@ entities: type: Sprite - canCollide: False type: Physics -- uid: 2743 - type: CableApcExtension - components: - - rot: 4.371139006309477E-08 rad - pos: -14.5,-11.5 - parent: 853 - type: Transform - - visible: False - type: Sprite - - canCollide: False - type: Physics - uid: 2744 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -13.5,-11.5 parent: 853 type: Transform @@ -27066,7 +27807,8 @@ entities: - uid: 2745 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -12.5,-11.5 parent: 853 type: Transform @@ -27077,7 +27819,8 @@ entities: - uid: 2746 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -11.5,-11.5 parent: 853 type: Transform @@ -27088,7 +27831,8 @@ entities: - uid: 2747 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -12.5,-10.5 parent: 853 type: Transform @@ -27099,7 +27843,8 @@ entities: - uid: 2748 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -12.5,-9.5 parent: 853 type: Transform @@ -27110,7 +27855,8 @@ entities: - uid: 2749 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -13.5,-12.5 parent: 853 type: Transform @@ -27121,7 +27867,8 @@ entities: - uid: 2750 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -12.5,-8.5 parent: 853 type: Transform @@ -27132,7 +27879,8 @@ entities: - uid: 2751 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -16.5,-7.5 parent: 853 type: Transform @@ -27143,7 +27891,8 @@ entities: - uid: 2752 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -15.5,-7.5 parent: 853 type: Transform @@ -27154,7 +27903,8 @@ entities: - uid: 2753 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -14.5,-7.5 parent: 853 type: Transform @@ -27165,7 +27915,8 @@ entities: - uid: 2754 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -17.5,-7.5 parent: 853 type: Transform @@ -27176,7 +27927,8 @@ entities: - uid: 2755 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -18.5,-7.5 parent: 853 type: Transform @@ -27187,7 +27939,8 @@ entities: - uid: 2756 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -19.5,-7.5 parent: 853 type: Transform @@ -27198,7 +27951,8 @@ entities: - uid: 2757 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -20.5,-7.5 parent: 853 type: Transform @@ -27209,7 +27963,8 @@ entities: - uid: 2758 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -18.5,-6.5 parent: 853 type: Transform @@ -27218,7 +27973,8 @@ entities: - uid: 2759 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -18.5,-5.5 parent: 853 type: Transform @@ -27229,7 +27985,8 @@ entities: - uid: 2760 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -18.5,-4.5 parent: 853 type: Transform @@ -27240,7 +27997,8 @@ entities: - uid: 2761 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -19.5,-4.5 parent: 853 type: Transform @@ -27251,7 +28009,8 @@ entities: - uid: 2762 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -20.5,-4.5 parent: 853 type: Transform @@ -27262,7 +28021,8 @@ entities: - uid: 2763 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -21.5,-4.5 parent: 853 type: Transform @@ -27273,7 +28033,8 @@ entities: - uid: 2764 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -22.5,-4.5 parent: 853 type: Transform @@ -27284,7 +28045,8 @@ entities: - uid: 2765 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -22.5,-3.5 parent: 853 type: Transform @@ -27295,7 +28057,8 @@ entities: - uid: 2766 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -22.5,-2.5 parent: 853 type: Transform @@ -27306,7 +28069,8 @@ entities: - uid: 2767 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -22.5,-2.5 parent: 853 type: Transform @@ -27317,7 +28081,8 @@ entities: - uid: 2768 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -22.5,-1.5 parent: 853 type: Transform @@ -27328,7 +28093,8 @@ entities: - uid: 2769 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -22.5,-0.5 parent: 853 type: Transform @@ -27339,7 +28105,8 @@ entities: - uid: 2770 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -22.5,0.5 parent: 853 type: Transform @@ -27350,7 +28117,8 @@ entities: - uid: 2771 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -22.5,1.5 parent: 853 type: Transform @@ -27359,7 +28127,8 @@ entities: - uid: 2772 type: CableApcExtension components: - - pos: -23.5,0.5 + - anchored: True + pos: -23.5,0.5 parent: 853 type: Transform - visible: False @@ -27369,7 +28138,8 @@ entities: - uid: 2773 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -15.5,-6.5 parent: 853 type: Transform @@ -27378,7 +28148,8 @@ entities: - uid: 2774 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -15.5,-5.5 parent: 853 type: Transform @@ -27387,7 +28158,8 @@ entities: - uid: 2775 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -15.5,-4.5 parent: 853 type: Transform @@ -27396,7 +28168,8 @@ entities: - uid: 2776 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -11.5,2.5 parent: 853 type: Transform @@ -27405,7 +28178,8 @@ entities: - uid: 2777 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -11.5,1.5 parent: 853 type: Transform @@ -27416,7 +28190,8 @@ entities: - uid: 2778 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -11.5,0.5 parent: 853 type: Transform @@ -27427,7 +28202,8 @@ entities: - uid: 2779 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -11.5,-0.5 parent: 853 type: Transform @@ -27438,7 +28214,8 @@ entities: - uid: 2780 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -11.5,-1.5 parent: 853 type: Transform @@ -27449,7 +28226,8 @@ entities: - uid: 2781 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -11.5,-2.5 parent: 853 type: Transform @@ -27458,7 +28236,8 @@ entities: - uid: 2782 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -11.5,-3.5 parent: 853 type: Transform @@ -27469,7 +28248,8 @@ entities: - uid: 2783 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -11.5,-4.5 parent: 853 type: Transform @@ -27480,7 +28260,8 @@ entities: - uid: 2784 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -12.5,-4.5 parent: 853 type: Transform @@ -27491,7 +28272,8 @@ entities: - uid: 2785 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -12.5,0.5 parent: 853 type: Transform @@ -27502,7 +28284,8 @@ entities: - uid: 2786 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -13.5,0.5 parent: 853 type: Transform @@ -27513,7 +28296,8 @@ entities: - uid: 2787 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -14.5,0.5 parent: 853 type: Transform @@ -27524,7 +28308,8 @@ entities: - uid: 2788 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -14.5,0.5 parent: 853 type: Transform @@ -27535,17 +28320,18 @@ entities: - uid: 2789 type: SalternApc components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -15.5,-9.5 parent: 853 type: Transform - startingCharge: 11999.45 type: Battery - - uid: 2790 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -15.5,0.5 parent: 853 type: Transform @@ -27556,7 +28342,8 @@ entities: - uid: 2791 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -16.5,0.5 parent: 853 type: Transform @@ -27567,7 +28354,8 @@ entities: - uid: 2792 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -17.5,0.5 parent: 853 type: Transform @@ -27578,7 +28366,8 @@ entities: - uid: 2793 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -18.5,0.5 parent: 853 type: Transform @@ -27589,7 +28378,8 @@ entities: - uid: 2794 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -19.5,0.5 parent: 853 type: Transform @@ -27600,7 +28390,8 @@ entities: - uid: 2795 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -20.5,0.5 parent: 853 type: Transform @@ -27611,7 +28402,8 @@ entities: - uid: 2796 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -20.5,1.5 parent: 853 type: Transform @@ -27622,7 +28414,8 @@ entities: - uid: 2797 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -16.5,-0.5 parent: 853 type: Transform @@ -27633,7 +28426,8 @@ entities: - uid: 2798 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -16.5,-1.5 parent: 853 type: Transform @@ -27644,7 +28438,8 @@ entities: - uid: 2799 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -12.5,-1.5 parent: 853 type: Transform @@ -27655,7 +28450,8 @@ entities: - uid: 2800 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -12.5,-1.5 parent: 853 type: Transform @@ -27666,7 +28462,8 @@ entities: - uid: 2801 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -13.5,-1.5 parent: 853 type: Transform @@ -27677,7 +28474,8 @@ entities: - uid: 2802 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -20.5,-0.5 parent: 853 type: Transform @@ -27688,7 +28486,8 @@ entities: - uid: 2803 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -20.5,-0.5 parent: 853 type: Transform @@ -27699,7 +28498,8 @@ entities: - uid: 2804 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -20.5,-1.5 parent: 853 type: Transform @@ -27710,7 +28510,8 @@ entities: - uid: 2805 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -20.5,-2.5 parent: 853 type: Transform @@ -27721,7 +28522,8 @@ entities: - uid: 2806 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -10.5,0.5 parent: 853 type: Transform @@ -27732,7 +28534,8 @@ entities: - uid: 2807 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -9.5,0.5 parent: 853 type: Transform @@ -27743,7 +28546,8 @@ entities: - uid: 2808 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -8.5,0.5 parent: 853 type: Transform @@ -27754,7 +28558,8 @@ entities: - uid: 2809 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -7.5,0.5 parent: 853 type: Transform @@ -27765,7 +28570,8 @@ entities: - uid: 2810 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -6.5,0.5 parent: 853 type: Transform @@ -27776,7 +28582,8 @@ entities: - uid: 2811 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -5.5,0.5 parent: 853 type: Transform @@ -27787,7 +28594,8 @@ entities: - uid: 2812 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -4.5,0.5 parent: 853 type: Transform @@ -27798,7 +28606,8 @@ entities: - uid: 2813 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -3.5,0.5 parent: 853 type: Transform @@ -27809,7 +28618,8 @@ entities: - uid: 2814 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -2.5,0.5 parent: 853 type: Transform @@ -27820,7 +28630,8 @@ entities: - uid: 2815 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -1.5,0.5 parent: 853 type: Transform @@ -27831,7 +28642,8 @@ entities: - uid: 2816 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -0.5,0.5 parent: 853 type: Transform @@ -27842,7 +28654,8 @@ entities: - uid: 2817 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 0.5,0.5 parent: 853 type: Transform @@ -27853,7 +28666,8 @@ entities: - uid: 2818 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -0.5,0.5 parent: 853 type: Transform @@ -27864,7 +28678,8 @@ entities: - uid: 2819 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -0.5,-0.5 parent: 853 type: Transform @@ -27875,7 +28690,8 @@ entities: - uid: 2820 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -0.5,-1.5 parent: 853 type: Transform @@ -27886,7 +28702,8 @@ entities: - uid: 2821 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -0.5,-2.5 parent: 853 type: Transform @@ -27897,7 +28714,8 @@ entities: - uid: 2822 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -0.5,-3.5 parent: 853 type: Transform @@ -27908,7 +28726,8 @@ entities: - uid: 2823 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -0.5,-4.5 parent: 853 type: Transform @@ -27919,7 +28738,8 @@ entities: - uid: 2824 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 0.5,-4.5 parent: 853 type: Transform @@ -27930,7 +28750,8 @@ entities: - uid: 2825 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -5.5,-8.5 parent: 853 type: Transform @@ -27939,7 +28760,8 @@ entities: - uid: 2826 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -5.5,-7.5 parent: 853 type: Transform @@ -27950,7 +28772,8 @@ entities: - uid: 2827 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -4.5,-7.5 parent: 853 type: Transform @@ -27961,7 +28784,8 @@ entities: - uid: 2828 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -3.5,-7.5 parent: 853 type: Transform @@ -27972,7 +28796,8 @@ entities: - uid: 2829 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -6.5,-7.5 parent: 853 type: Transform @@ -27983,7 +28808,8 @@ entities: - uid: 2830 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -6.5,-7.5 parent: 853 type: Transform @@ -27994,7 +28820,8 @@ entities: - uid: 2831 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -7.5,-7.5 parent: 853 type: Transform @@ -28005,7 +28832,8 @@ entities: - uid: 2832 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -6.5,-6.5 parent: 853 type: Transform @@ -28016,7 +28844,8 @@ entities: - uid: 2833 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -6.5,-5.5 parent: 853 type: Transform @@ -28027,7 +28856,8 @@ entities: - uid: 2834 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -6.5,-4.5 parent: 853 type: Transform @@ -28038,7 +28868,8 @@ entities: - uid: 2835 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -5.5,-9.5 parent: 853 type: Transform @@ -28049,7 +28880,8 @@ entities: - uid: 2836 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -5.5,-10.5 parent: 853 type: Transform @@ -28058,7 +28890,8 @@ entities: - uid: 2837 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -4.5,-10.5 parent: 853 type: Transform @@ -28067,7 +28900,8 @@ entities: - uid: 2838 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -4.5,-10.5 parent: 853 type: Transform @@ -28076,7 +28910,8 @@ entities: - uid: 2839 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -3.5,-10.5 parent: 853 type: Transform @@ -28085,7 +28920,8 @@ entities: - uid: 2840 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -2.5,-10.5 parent: 853 type: Transform @@ -28094,7 +28930,8 @@ entities: - uid: 2841 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -1.5,-10.5 parent: 853 type: Transform @@ -28103,7 +28940,8 @@ entities: - uid: 2842 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -0.5,-10.5 parent: 853 type: Transform @@ -28112,7 +28950,8 @@ entities: - uid: 2843 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 0.5,-10.5 parent: 853 type: Transform @@ -28121,7 +28960,8 @@ entities: - uid: 2844 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 0.5,-9.5 parent: 853 type: Transform @@ -28130,7 +28970,8 @@ entities: - uid: 2845 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 0.5,-8.5 parent: 853 type: Transform @@ -28139,7 +28980,8 @@ entities: - uid: 2846 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 0.5,-7.5 parent: 853 type: Transform @@ -28148,7 +28990,8 @@ entities: - uid: 2847 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -0.5,-11.5 parent: 853 type: Transform @@ -28157,7 +29000,8 @@ entities: - uid: 2848 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -1.5,-18.5 parent: 853 type: Transform @@ -28166,7 +29010,8 @@ entities: - uid: 2849 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -1.5,-19.5 parent: 853 type: Transform @@ -28177,7 +29022,8 @@ entities: - uid: 2850 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -1.5,-20.5 parent: 853 type: Transform @@ -28188,7 +29034,8 @@ entities: - uid: 2851 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -0.5,-19.5 parent: 853 type: Transform @@ -28199,7 +29046,8 @@ entities: - uid: 2852 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -2.5,-19.5 parent: 853 type: Transform @@ -28210,7 +29058,8 @@ entities: - uid: 2853 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -3.5,-19.5 parent: 853 type: Transform @@ -28221,7 +29070,8 @@ entities: - uid: 2854 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -4.5,-19.5 parent: 853 type: Transform @@ -28232,7 +29082,8 @@ entities: - uid: 2855 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -3.5,-20.5 parent: 853 type: Transform @@ -28243,7 +29094,8 @@ entities: - uid: 2856 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -3.5,-21.5 parent: 853 type: Transform @@ -28254,7 +29106,8 @@ entities: - uid: 2857 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -3.5,-23.5 parent: 853 type: Transform @@ -28265,7 +29118,8 @@ entities: - uid: 2858 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -3.5,-22.5 parent: 853 type: Transform @@ -28276,7 +29130,8 @@ entities: - uid: 2859 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -2.5,-23.5 parent: 853 type: Transform @@ -28287,7 +29142,8 @@ entities: - uid: 2860 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -9.5,-21.5 parent: 853 type: Transform @@ -28296,7 +29152,8 @@ entities: - uid: 2861 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -9.5,-22.5 parent: 853 type: Transform @@ -28307,7 +29164,8 @@ entities: - uid: 2862 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -9.5,-23.5 parent: 853 type: Transform @@ -28318,7 +29176,8 @@ entities: - uid: 2863 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -8.5,-23.5 parent: 853 type: Transform @@ -28329,7 +29188,8 @@ entities: - uid: 2864 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -7.5,-23.5 parent: 853 type: Transform @@ -28340,7 +29200,8 @@ entities: - uid: 2865 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -7.5,-24.5 parent: 853 type: Transform @@ -28349,7 +29210,8 @@ entities: - uid: 2866 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -7.5,-25.5 parent: 853 type: Transform @@ -28360,7 +29222,8 @@ entities: - uid: 2867 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -9.5,-20.5 parent: 853 type: Transform @@ -28371,7 +29234,8 @@ entities: - uid: 2868 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -10.5,-20.5 parent: 853 type: Transform @@ -28382,7 +29246,8 @@ entities: - uid: 2869 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -11.5,-20.5 parent: 853 type: Transform @@ -28393,7 +29258,8 @@ entities: - uid: 2870 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -11.5,-19.5 parent: 853 type: Transform @@ -28404,7 +29270,8 @@ entities: - uid: 2871 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -9.5,-19.5 parent: 853 type: Transform @@ -28415,7 +29282,8 @@ entities: - uid: 2872 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -9.5,-18.5 parent: 853 type: Transform @@ -28426,7 +29294,8 @@ entities: - uid: 2873 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -9.5,-17.5 parent: 853 type: Transform @@ -28437,7 +29306,8 @@ entities: - uid: 2874 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -8.5,-17.5 parent: 853 type: Transform @@ -28448,7 +29318,8 @@ entities: - uid: 2875 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -3.5,-18.5 parent: 853 type: Transform @@ -28459,7 +29330,8 @@ entities: - uid: 2876 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -3.5,-17.5 parent: 853 type: Transform @@ -28470,7 +29342,8 @@ entities: - uid: 2877 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -3.5,-17.5 parent: 853 type: Transform @@ -28481,7 +29354,8 @@ entities: - uid: 2878 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -3.5,-16.5 parent: 853 type: Transform @@ -28492,7 +29366,8 @@ entities: - uid: 2879 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -3.5,-15.5 parent: 853 type: Transform @@ -28503,7 +29378,8 @@ entities: - uid: 2880 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -3.5,-14.5 parent: 853 type: Transform @@ -28514,7 +29390,8 @@ entities: - uid: 2881 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -3.5,-13.5 parent: 853 type: Transform @@ -28525,7 +29402,8 @@ entities: - uid: 2882 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -3.5,-12.5 parent: 853 type: Transform @@ -28536,7 +29414,8 @@ entities: - uid: 2883 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -2.5,-13.5 parent: 853 type: Transform @@ -28547,7 +29426,8 @@ entities: - uid: 2884 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -1.5,-13.5 parent: 853 type: Transform @@ -28558,7 +29438,8 @@ entities: - uid: 2885 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -1.5,-17.5 parent: 853 type: Transform @@ -28569,7 +29450,8 @@ entities: - uid: 2886 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -0.5,-17.5 parent: 853 type: Transform @@ -28580,7 +29462,8 @@ entities: - uid: 2887 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 0.5,-17.5 parent: 853 type: Transform @@ -28589,7 +29472,8 @@ entities: - uid: 2888 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -4.5,-14.5 parent: 853 type: Transform @@ -28600,7 +29484,8 @@ entities: - uid: 2889 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -4.5,-12.5 parent: 853 type: Transform @@ -28611,7 +29496,8 @@ entities: - uid: 2890 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -4.5,-17.5 parent: 853 type: Transform @@ -28622,7 +29508,8 @@ entities: - uid: 2891 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -5.5,-12.5 parent: 853 type: Transform @@ -28633,7 +29520,8 @@ entities: - uid: 2892 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -6.5,-12.5 parent: 853 type: Transform @@ -28642,7 +29530,8 @@ entities: - uid: 2893 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -5.5,-14.5 parent: 853 type: Transform @@ -28653,7 +29542,8 @@ entities: - uid: 2894 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -14.5,-16.5 parent: 853 type: Transform @@ -28662,7 +29552,8 @@ entities: - uid: 2895 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -14.5,-17.5 parent: 853 type: Transform @@ -28673,7 +29564,8 @@ entities: - uid: 2896 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -14.5,-18.5 parent: 853 type: Transform @@ -28684,7 +29576,8 @@ entities: - uid: 2897 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -14.5,-19.5 parent: 853 type: Transform @@ -28695,7 +29588,8 @@ entities: - uid: 2898 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -14.5,-20.5 parent: 853 type: Transform @@ -28706,7 +29600,8 @@ entities: - uid: 2899 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -14.5,-21.5 parent: 853 type: Transform @@ -28717,7 +29612,8 @@ entities: - uid: 2900 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -14.5,-22.5 parent: 853 type: Transform @@ -28728,7 +29624,8 @@ entities: - uid: 2901 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -14.5,-23.5 parent: 853 type: Transform @@ -28739,7 +29636,8 @@ entities: - uid: 2902 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -14.5,-24.5 parent: 853 type: Transform @@ -28750,7 +29648,8 @@ entities: - uid: 2903 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -14.5,-25.5 parent: 853 type: Transform @@ -28761,7 +29660,8 @@ entities: - uid: 2904 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -15.5,-25.5 parent: 853 type: Transform @@ -28772,7 +29672,8 @@ entities: - uid: 2905 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -16.5,-25.5 parent: 853 type: Transform @@ -28783,7 +29684,8 @@ entities: - uid: 2906 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -15.5,-22.5 parent: 853 type: Transform @@ -28794,7 +29696,8 @@ entities: - uid: 2907 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -16.5,-22.5 parent: 853 type: Transform @@ -28805,7 +29708,8 @@ entities: - uid: 2908 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -17.5,-22.5 parent: 853 type: Transform @@ -28816,7 +29720,8 @@ entities: - uid: 2909 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -1.5,-23.5 parent: 853 type: Transform @@ -28825,7 +29730,8 @@ entities: - uid: 2910 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -0.5,-23.5 parent: 853 type: Transform @@ -28834,7 +29740,8 @@ entities: - uid: 2911 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 0.5,-23.5 parent: 853 type: Transform @@ -28843,7 +29750,8 @@ entities: - uid: 2912 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 7.5,-17.5 parent: 853 type: Transform @@ -28852,7 +29760,8 @@ entities: - uid: 2913 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 7.5,-18.5 parent: 853 type: Transform @@ -28863,7 +29772,8 @@ entities: - uid: 2914 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 7.5,-19.5 parent: 853 type: Transform @@ -28872,7 +29782,8 @@ entities: - uid: 2915 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 8.5,-18.5 parent: 853 type: Transform @@ -28883,7 +29794,8 @@ entities: - uid: 2916 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 9.5,-18.5 parent: 853 type: Transform @@ -28894,7 +29806,8 @@ entities: - uid: 2917 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 10.5,-18.5 parent: 853 type: Transform @@ -28905,7 +29818,8 @@ entities: - uid: 2918 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 10.5,-19.5 parent: 853 type: Transform @@ -28916,7 +29830,8 @@ entities: - uid: 2919 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 11.5,-19.5 parent: 853 type: Transform @@ -28927,7 +29842,8 @@ entities: - uid: 2920 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 12.5,-19.5 parent: 853 type: Transform @@ -28938,7 +29854,8 @@ entities: - uid: 2921 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 13.5,-19.5 parent: 853 type: Transform @@ -28949,7 +29866,8 @@ entities: - uid: 2922 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 14.5,-19.5 parent: 853 type: Transform @@ -28958,7 +29876,8 @@ entities: - uid: 2923 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 15.5,-19.5 parent: 853 type: Transform @@ -28969,7 +29888,8 @@ entities: - uid: 2924 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 7.5,-16.5 parent: 853 type: Transform @@ -28980,7 +29900,8 @@ entities: - uid: 2925 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 7.5,-15.5 parent: 853 type: Transform @@ -28991,7 +29912,8 @@ entities: - uid: 2926 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 7.5,-14.5 parent: 853 type: Transform @@ -29002,7 +29924,8 @@ entities: - uid: 2927 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 7.5,-13.5 parent: 853 type: Transform @@ -29013,7 +29936,8 @@ entities: - uid: 2928 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 6.5,-13.5 parent: 853 type: Transform @@ -29022,7 +29946,8 @@ entities: - uid: 2929 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 5.5,-13.5 parent: 853 type: Transform @@ -29033,7 +29958,8 @@ entities: - uid: 2930 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 8.5,-13.5 parent: 853 type: Transform @@ -29044,7 +29970,8 @@ entities: - uid: 2931 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 9.5,-13.5 parent: 853 type: Transform @@ -29055,7 +29982,8 @@ entities: - uid: 2932 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 10.5,-13.5 parent: 853 type: Transform @@ -29066,7 +29994,8 @@ entities: - uid: 2933 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 11.5,-13.5 parent: 853 type: Transform @@ -29075,7 +30004,8 @@ entities: - uid: 2934 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 22.5,-4.5 parent: 853 type: Transform @@ -29086,7 +30016,8 @@ entities: - uid: 2935 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 22.5,-5.5 parent: 853 type: Transform @@ -29097,7 +30028,8 @@ entities: - uid: 2936 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 23.5,-4.5 parent: 853 type: Transform @@ -29108,7 +30040,8 @@ entities: - uid: 2937 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 24.5,-4.5 parent: 853 type: Transform @@ -29119,7 +30052,8 @@ entities: - uid: 2938 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 25.5,-4.5 parent: 853 type: Transform @@ -29128,7 +30062,8 @@ entities: - uid: 2939 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 22.5,-2.5 parent: 853 type: Transform @@ -29137,7 +30072,8 @@ entities: - uid: 2940 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 22.5,-1.5 parent: 853 type: Transform @@ -29148,7 +30084,8 @@ entities: - uid: 2941 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 22.5,-0.5 parent: 853 type: Transform @@ -29159,7 +30096,8 @@ entities: - uid: 2942 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 22.5,0.5 parent: 853 type: Transform @@ -29170,7 +30108,8 @@ entities: - uid: 2943 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 22.5,1.5 parent: 853 type: Transform @@ -29181,7 +30120,8 @@ entities: - uid: 2944 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 21.5,1.5 parent: 853 type: Transform @@ -29190,7 +30130,8 @@ entities: - uid: 2945 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 23.5,0.5 parent: 853 type: Transform @@ -29201,7 +30142,8 @@ entities: - uid: 2946 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 23.5,-1.5 parent: 853 type: Transform @@ -29212,7 +30154,8 @@ entities: - uid: 2947 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 24.5,-1.5 parent: 853 type: Transform @@ -29223,7 +30166,8 @@ entities: - uid: 2948 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 25.5,-1.5 parent: 853 type: Transform @@ -29234,7 +30178,8 @@ entities: - uid: 2949 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 22.5,-6.5 parent: 853 type: Transform @@ -29245,7 +30190,8 @@ entities: - uid: 2950 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 21.5,-6.5 parent: 853 type: Transform @@ -29256,7 +30202,8 @@ entities: - uid: 2951 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 20.5,-6.5 parent: 853 type: Transform @@ -29267,7 +30214,8 @@ entities: - uid: 2952 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 19.5,-6.5 parent: 853 type: Transform @@ -29278,7 +30226,8 @@ entities: - uid: 2953 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 18.5,-6.5 parent: 853 type: Transform @@ -29289,7 +30238,8 @@ entities: - uid: 2954 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 18.5,-5.5 parent: 853 type: Transform @@ -29300,7 +30250,8 @@ entities: - uid: 2955 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 18.5,-4.5 parent: 853 type: Transform @@ -29311,7 +30262,8 @@ entities: - uid: 2956 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 18.5,-7.5 parent: 853 type: Transform @@ -29322,7 +30274,8 @@ entities: - uid: 2957 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 18.5,-8.5 parent: 853 type: Transform @@ -29333,7 +30286,8 @@ entities: - uid: 2958 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 18.5,-9.5 parent: 853 type: Transform @@ -29344,7 +30298,8 @@ entities: - uid: 2959 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 18.5,-10.5 parent: 853 type: Transform @@ -29355,7 +30310,8 @@ entities: - uid: 2960 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 18.5,-11.5 parent: 853 type: Transform @@ -29366,7 +30322,8 @@ entities: - uid: 2961 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 18.5,-12.5 parent: 853 type: Transform @@ -29377,7 +30334,8 @@ entities: - uid: 2962 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 18.5,-13.5 parent: 853 type: Transform @@ -29388,7 +30346,8 @@ entities: - uid: 2963 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 18.5,-14.5 parent: 853 type: Transform @@ -29399,7 +30358,8 @@ entities: - uid: 2964 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 18.5,-15.5 parent: 853 type: Transform @@ -29410,7 +30370,8 @@ entities: - uid: 2965 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 18.5,-16.5 parent: 853 type: Transform @@ -29421,7 +30382,8 @@ entities: - uid: 2966 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 18.5,-17.5 parent: 853 type: Transform @@ -29432,7 +30394,8 @@ entities: - uid: 2967 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 18.5,-18.5 parent: 853 type: Transform @@ -29441,7 +30404,8 @@ entities: - uid: 2968 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 18.5,-19.5 parent: 853 type: Transform @@ -29452,7 +30416,8 @@ entities: - uid: 2969 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 18.5,-20.5 parent: 853 type: Transform @@ -29463,7 +30428,8 @@ entities: - uid: 2970 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 19.5,-13.5 parent: 853 type: Transform @@ -29474,7 +30440,8 @@ entities: - uid: 2971 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 20.5,-13.5 parent: 853 type: Transform @@ -29485,7 +30452,8 @@ entities: - uid: 2972 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 21.5,-13.5 parent: 853 type: Transform @@ -29496,7 +30464,8 @@ entities: - uid: 2973 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 22.5,-13.5 parent: 853 type: Transform @@ -29507,7 +30476,8 @@ entities: - uid: 2974 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 22.5,-13.5 parent: 853 type: Transform @@ -29518,7 +30488,8 @@ entities: - uid: 2975 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 23.5,-13.5 parent: 853 type: Transform @@ -29529,7 +30500,8 @@ entities: - uid: 2976 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 23.5,-14.5 parent: 853 type: Transform @@ -29540,7 +30512,8 @@ entities: - uid: 2977 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 8.5,-12.5 parent: 853 type: Transform @@ -29551,7 +30524,8 @@ entities: - uid: 2978 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 8.5,-11.5 parent: 853 type: Transform @@ -29562,7 +30536,8 @@ entities: - uid: 2979 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 7.5,-11.5 parent: 853 type: Transform @@ -29573,7 +30548,8 @@ entities: - uid: 2980 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 9.5,-11.5 parent: 853 type: Transform @@ -29584,7 +30560,8 @@ entities: - uid: 2981 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 10.5,-11.5 parent: 853 type: Transform @@ -29595,7 +30572,8 @@ entities: - uid: 2982 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 7.5,-7.5 parent: 853 type: Transform @@ -29606,7 +30584,8 @@ entities: - uid: 2983 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 8.5,-7.5 parent: 853 type: Transform @@ -29617,7 +30596,8 @@ entities: - uid: 2984 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 9.5,-7.5 parent: 853 type: Transform @@ -29628,7 +30608,8 @@ entities: - uid: 2985 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 10.5,-7.5 parent: 853 type: Transform @@ -29639,7 +30620,8 @@ entities: - uid: 2986 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 11.5,-7.5 parent: 853 type: Transform @@ -29650,7 +30632,8 @@ entities: - uid: 2987 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 12.5,-7.5 parent: 853 type: Transform @@ -29661,7 +30644,8 @@ entities: - uid: 2988 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 13.5,-7.5 parent: 853 type: Transform @@ -29672,7 +30656,8 @@ entities: - uid: 2989 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 14.5,-7.5 parent: 853 type: Transform @@ -29683,7 +30668,8 @@ entities: - uid: 2990 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 15.5,-7.5 parent: 853 type: Transform @@ -29694,7 +30680,8 @@ entities: - uid: 2991 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 16.5,-7.5 parent: 853 type: Transform @@ -29705,7 +30692,8 @@ entities: - uid: 2992 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 17.5,-7.5 parent: 853 type: Transform @@ -29716,7 +30704,8 @@ entities: - uid: 2993 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 18.5,-7.5 parent: 853 type: Transform @@ -29727,7 +30716,8 @@ entities: - uid: 2994 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 17.5,-17.5 parent: 853 type: Transform @@ -29738,7 +30728,8 @@ entities: - uid: 2995 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 16.5,-17.5 parent: 853 type: Transform @@ -29749,7 +30740,8 @@ entities: - uid: 2996 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 15.5,-17.5 parent: 853 type: Transform @@ -29760,7 +30752,8 @@ entities: - uid: 2997 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 16.5,2.5 parent: 853 type: Transform @@ -29769,7 +30762,8 @@ entities: - uid: 2998 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 16.5,1.5 parent: 853 type: Transform @@ -29780,7 +30774,8 @@ entities: - uid: 2999 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 17.5,1.5 parent: 853 type: Transform @@ -29791,7 +30786,8 @@ entities: - uid: 3000 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 18.5,1.5 parent: 853 type: Transform @@ -29802,7 +30798,8 @@ entities: - uid: 3001 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 15.5,1.5 parent: 853 type: Transform @@ -29813,7 +30810,8 @@ entities: - uid: 3002 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 14.5,1.5 parent: 853 type: Transform @@ -29832,7 +30830,8 @@ entities: - uid: 3004 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 12.5,1.5 parent: 853 type: Transform @@ -29843,7 +30842,8 @@ entities: - uid: 3005 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 11.5,1.5 parent: 853 type: Transform @@ -29854,7 +30854,8 @@ entities: - uid: 3006 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 10.5,1.5 parent: 853 type: Transform @@ -29865,7 +30866,8 @@ entities: - uid: 3007 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 9.5,1.5 parent: 853 type: Transform @@ -29876,7 +30878,8 @@ entities: - uid: 3008 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 8.5,1.5 parent: 853 type: Transform @@ -29887,7 +30890,8 @@ entities: - uid: 3009 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 7.5,1.5 parent: 853 type: Transform @@ -29898,7 +30902,8 @@ entities: - uid: 3010 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 6.5,1.5 parent: 853 type: Transform @@ -29909,7 +30914,8 @@ entities: - uid: 3011 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 16.5,0.5 parent: 853 type: Transform @@ -29920,7 +30926,8 @@ entities: - uid: 3012 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 16.5,-0.5 parent: 853 type: Transform @@ -29931,7 +30938,8 @@ entities: - uid: 3013 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 17.5,-0.5 parent: 853 type: Transform @@ -29942,7 +30950,8 @@ entities: - uid: 3014 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 18.5,-0.5 parent: 853 type: Transform @@ -29953,7 +30962,8 @@ entities: - uid: 3015 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 9.5,0.5 parent: 853 type: Transform @@ -29964,7 +30974,8 @@ entities: - uid: 3016 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 9.5,-0.5 parent: 853 type: Transform @@ -29975,7 +30986,8 @@ entities: - uid: 3017 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 9.5,-1.5 parent: 853 type: Transform @@ -29986,7 +30998,8 @@ entities: - uid: 3018 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 9.5,-2.5 parent: 853 type: Transform @@ -29997,7 +31010,8 @@ entities: - uid: 3019 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 9.5,-3.5 parent: 853 type: Transform @@ -30008,7 +31022,8 @@ entities: - uid: 3020 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 9.5,-4.5 parent: 853 type: Transform @@ -30019,7 +31034,8 @@ entities: - uid: 3021 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 8.5,-4.5 parent: 853 type: Transform @@ -30030,7 +31046,8 @@ entities: - uid: 3022 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 7.5,-4.5 parent: 853 type: Transform @@ -30041,7 +31058,8 @@ entities: - uid: 3023 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 6.5,-4.5 parent: 853 type: Transform @@ -30052,7 +31070,8 @@ entities: - uid: 3024 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 10.5,-2.5 parent: 853 type: Transform @@ -30063,7 +31082,8 @@ entities: - uid: 3025 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 11.5,-2.5 parent: 853 type: Transform @@ -30074,7 +31094,8 @@ entities: - uid: 3026 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 6.5,-17.5 parent: 853 type: Transform @@ -30083,7 +31104,8 @@ entities: - uid: 3027 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 1.5,-23.5 parent: 853 type: Transform @@ -30094,7 +31116,8 @@ entities: - uid: 3028 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 2.5,-23.5 parent: 853 type: Transform @@ -30105,7 +31128,8 @@ entities: - uid: 3029 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 3.5,-23.5 parent: 853 type: Transform @@ -30116,7 +31140,8 @@ entities: - uid: 3030 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 3.5,-22.5 parent: 853 type: Transform @@ -30127,7 +31152,8 @@ entities: - uid: 3031 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 3.5,-21.5 parent: 853 type: Transform @@ -30138,7 +31164,8 @@ entities: - uid: 3032 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 2.5,-21.5 parent: 853 type: Transform @@ -30149,7 +31176,8 @@ entities: - uid: 3033 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 4.5,-21.5 parent: 853 type: Transform @@ -30160,7 +31188,8 @@ entities: - uid: 3034 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 22.5,-3.5 parent: 853 type: Transform @@ -30169,7 +31198,8 @@ entities: - uid: 3035 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 31.5,1.5 parent: 853 type: Transform @@ -30178,7 +31208,8 @@ entities: - uid: 3036 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 31.5,0.5 parent: 853 type: Transform @@ -30189,7 +31220,8 @@ entities: - uid: 3037 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 31.5,-0.5 parent: 853 type: Transform @@ -30200,7 +31232,8 @@ entities: - uid: 3038 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 31.5,-1.5 parent: 853 type: Transform @@ -30211,7 +31244,8 @@ entities: - uid: 3039 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 31.5,-3.5 parent: 853 type: Transform @@ -30222,7 +31256,8 @@ entities: - uid: 3040 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 31.5,-2.5 parent: 853 type: Transform @@ -30233,7 +31268,8 @@ entities: - uid: 3041 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 30.5,-2.5 parent: 853 type: Transform @@ -30244,7 +31280,8 @@ entities: - uid: 3042 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 29.5,-2.5 parent: 853 type: Transform @@ -30255,7 +31292,8 @@ entities: - uid: 3043 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 32.5,-2.5 parent: 853 type: Transform @@ -30266,7 +31304,8 @@ entities: - uid: 3044 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 33.5,-2.5 parent: 853 type: Transform @@ -30277,7 +31316,8 @@ entities: - uid: 3045 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 34.5,-2.5 parent: 853 type: Transform @@ -30288,7 +31328,8 @@ entities: - uid: 3046 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 35.5,-2.5 parent: 853 type: Transform @@ -30299,7 +31340,8 @@ entities: - uid: 3047 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 31.5,1.5 parent: 853 type: Transform @@ -30308,7 +31350,8 @@ entities: - uid: 3048 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 31.5,2.5 parent: 853 type: Transform @@ -30319,7 +31362,8 @@ entities: - uid: 3049 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 31.5,3.5 parent: 853 type: Transform @@ -30330,7 +31374,8 @@ entities: - uid: 3050 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 31.5,4.5 parent: 853 type: Transform @@ -30341,7 +31386,8 @@ entities: - uid: 3051 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 32.5,4.5 parent: 853 type: Transform @@ -30352,7 +31398,8 @@ entities: - uid: 3052 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 33.5,4.5 parent: 853 type: Transform @@ -30363,7 +31410,8 @@ entities: - uid: 3053 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 34.5,4.5 parent: 853 type: Transform @@ -30374,7 +31422,8 @@ entities: - uid: 3054 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 35.5,4.5 parent: 853 type: Transform @@ -30385,7 +31434,8 @@ entities: - uid: 3055 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 36.5,4.5 parent: 853 type: Transform @@ -30396,7 +31446,8 @@ entities: - uid: 3056 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 37.5,4.5 parent: 853 type: Transform @@ -30407,7 +31458,8 @@ entities: - uid: 3057 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 38.5,4.5 parent: 853 type: Transform @@ -30418,7 +31470,8 @@ entities: - uid: 3058 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 38.5,3.5 parent: 853 type: Transform @@ -30429,7 +31482,8 @@ entities: - uid: 3059 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 38.5,2.5 parent: 853 type: Transform @@ -30440,7 +31494,8 @@ entities: - uid: 3060 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 38.5,1.5 parent: 853 type: Transform @@ -30451,7 +31506,8 @@ entities: - uid: 3061 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 38.5,0.5 parent: 853 type: Transform @@ -30462,7 +31518,8 @@ entities: - uid: 3062 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 38.5,-0.5 parent: 853 type: Transform @@ -30473,7 +31530,8 @@ entities: - uid: 3063 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 38.5,-1.5 parent: 853 type: Transform @@ -30484,7 +31542,8 @@ entities: - uid: 3064 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 43.5,10.5 parent: 853 type: Transform @@ -30493,7 +31552,8 @@ entities: - uid: 3065 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 43.5,9.5 parent: 853 type: Transform @@ -30504,7 +31564,8 @@ entities: - uid: 3066 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 42.5,9.5 parent: 853 type: Transform @@ -30515,7 +31576,8 @@ entities: - uid: 3067 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 41.5,9.5 parent: 853 type: Transform @@ -30526,7 +31588,8 @@ entities: - uid: 3068 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 39.5,9.5 parent: 853 type: Transform @@ -30537,7 +31600,8 @@ entities: - uid: 3069 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 38.5,9.5 parent: 853 type: Transform @@ -30548,7 +31612,8 @@ entities: - uid: 3070 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 40.5,9.5 parent: 853 type: Transform @@ -30559,7 +31624,8 @@ entities: - uid: 3071 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 38.5,8.5 parent: 853 type: Transform @@ -30570,7 +31636,8 @@ entities: - uid: 3072 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 38.5,7.5 parent: 853 type: Transform @@ -30581,7 +31648,8 @@ entities: - uid: 3073 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 38.5,6.5 parent: 853 type: Transform @@ -30592,7 +31660,8 @@ entities: - uid: 3074 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 44.5,9.5 parent: 853 type: Transform @@ -30603,7 +31672,8 @@ entities: - uid: 3075 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 44.5,8.5 parent: 853 type: Transform @@ -30614,7 +31684,8 @@ entities: - uid: 3076 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 44.5,7.5 parent: 853 type: Transform @@ -30625,7 +31696,8 @@ entities: - uid: 3077 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 44.5,6.5 parent: 853 type: Transform @@ -30636,7 +31708,8 @@ entities: - uid: 3078 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 44.5,5.5 parent: 853 type: Transform @@ -30647,7 +31720,8 @@ entities: - uid: 3079 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 44.5,4.5 parent: 853 type: Transform @@ -30658,7 +31732,8 @@ entities: - uid: 3080 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 45.5,4.5 parent: 853 type: Transform @@ -30669,7 +31744,8 @@ entities: - uid: 3081 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 46.5,4.5 parent: 853 type: Transform @@ -30680,7 +31756,8 @@ entities: - uid: 3082 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 47.5,4.5 parent: 853 type: Transform @@ -30691,7 +31768,8 @@ entities: - uid: 3083 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 48.5,4.5 parent: 853 type: Transform @@ -30702,7 +31780,8 @@ entities: - uid: 3084 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 49.5,4.5 parent: 853 type: Transform @@ -30713,7 +31792,8 @@ entities: - uid: 3085 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 33.5,-3.5 parent: 853 type: Transform @@ -30724,7 +31804,8 @@ entities: - uid: 3086 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 33.5,-4.5 parent: 853 type: Transform @@ -30735,7 +31816,8 @@ entities: - uid: 3087 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 43.5,4.5 parent: 853 type: Transform @@ -30746,7 +31828,8 @@ entities: - uid: 3088 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 43.5,3.5 parent: 853 type: Transform @@ -30757,7 +31840,8 @@ entities: - uid: 3089 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 43.5,2.5 parent: 853 type: Transform @@ -30768,7 +31852,8 @@ entities: - uid: 3090 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 43.5,1.5 parent: 853 type: Transform @@ -30779,7 +31864,8 @@ entities: - uid: 3091 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 43.5,0.5 parent: 853 type: Transform @@ -30790,7 +31876,8 @@ entities: - uid: 3092 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 43.5,-0.5 parent: 853 type: Transform @@ -30801,7 +31888,8 @@ entities: - uid: 3093 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 43.5,-1.5 parent: 853 type: Transform @@ -30812,7 +31900,8 @@ entities: - uid: 3094 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 43.5,-2.5 parent: 853 type: Transform @@ -30823,7 +31912,8 @@ entities: - uid: 3095 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 43.5,-3.5 parent: 853 type: Transform @@ -30834,7 +31924,8 @@ entities: - uid: 3096 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 42.5,-3.5 parent: 853 type: Transform @@ -30845,7 +31936,8 @@ entities: - uid: 3097 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 41.5,-3.5 parent: 853 type: Transform @@ -30856,7 +31948,8 @@ entities: - uid: 3098 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 40.5,-3.5 parent: 853 type: Transform @@ -30867,7 +31960,8 @@ entities: - uid: 3099 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 39.5,-3.5 parent: 853 type: Transform @@ -30878,7 +31972,8 @@ entities: - uid: 3100 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 38.5,-3.5 parent: 853 type: Transform @@ -30889,7 +31984,8 @@ entities: - uid: 3101 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 37.5,-3.5 parent: 853 type: Transform @@ -30900,7 +31996,8 @@ entities: - uid: 3102 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 37.5,-4.5 parent: 853 type: Transform @@ -30911,7 +32008,8 @@ entities: - uid: 3103 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 37.5,-5.5 parent: 853 type: Transform @@ -30922,7 +32020,8 @@ entities: - uid: 3104 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 37.5,-6.5 parent: 853 type: Transform @@ -30933,7 +32032,8 @@ entities: - uid: 3105 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 36.5,-6.5 parent: 853 type: Transform @@ -30944,7 +32044,8 @@ entities: - uid: 3106 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 35.5,-6.5 parent: 853 type: Transform @@ -30955,7 +32056,8 @@ entities: - uid: 3107 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 34.5,-6.5 parent: 853 type: Transform @@ -30966,7 +32068,8 @@ entities: - uid: 3108 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 33.5,-6.5 parent: 853 type: Transform @@ -30975,7 +32078,8 @@ entities: - uid: 3109 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 32.5,-6.5 parent: 853 type: Transform @@ -30986,7 +32090,8 @@ entities: - uid: 3110 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 31.5,-6.5 parent: 853 type: Transform @@ -30997,7 +32102,8 @@ entities: - uid: 3111 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 30.5,-6.5 parent: 853 type: Transform @@ -31008,7 +32114,8 @@ entities: - uid: 3112 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 29.5,-6.5 parent: 853 type: Transform @@ -31017,7 +32124,8 @@ entities: - uid: 3113 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 28.5,-6.5 parent: 853 type: Transform @@ -31026,7 +32134,8 @@ entities: - uid: 3114 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 27.5,-6.5 parent: 853 type: Transform @@ -31035,7 +32144,8 @@ entities: - uid: 3115 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 27.5,-7.5 parent: 853 type: Transform @@ -31046,7 +32156,8 @@ entities: - uid: 3116 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 27.5,-8.5 parent: 853 type: Transform @@ -31057,7 +32168,8 @@ entities: - uid: 3117 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 27.5,-9.5 parent: 853 type: Transform @@ -31068,7 +32180,8 @@ entities: - uid: 3118 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 27.5,-10.5 parent: 853 type: Transform @@ -31079,7 +32192,8 @@ entities: - uid: 3119 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 27.5,-11.5 parent: 853 type: Transform @@ -31090,7 +32204,8 @@ entities: - uid: 3120 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 27.5,-12.5 parent: 853 type: Transform @@ -31101,7 +32216,8 @@ entities: - uid: 3121 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 27.5,-13.5 parent: 853 type: Transform @@ -31112,7 +32228,8 @@ entities: - uid: 3122 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 27.5,-14.5 parent: 853 type: Transform @@ -31123,7 +32240,8 @@ entities: - uid: 3123 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 27.5,-15.5 parent: 853 type: Transform @@ -31134,7 +32252,8 @@ entities: - uid: 3124 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 27.5,-16.5 parent: 853 type: Transform @@ -31145,7 +32264,8 @@ entities: - uid: 3125 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 27.5,-17.5 parent: 853 type: Transform @@ -31156,7 +32276,8 @@ entities: - uid: 3126 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 27.5,-18.5 parent: 853 type: Transform @@ -31167,7 +32288,8 @@ entities: - uid: 3127 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 26.5,-18.5 parent: 853 type: Transform @@ -31178,7 +32300,8 @@ entities: - uid: 3128 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 25.5,-18.5 parent: 853 type: Transform @@ -31189,7 +32312,8 @@ entities: - uid: 3129 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 24.5,-18.5 parent: 853 type: Transform @@ -31200,7 +32324,8 @@ entities: - uid: 3130 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 47.5,-1.5 parent: 853 type: Transform @@ -31209,7 +32334,8 @@ entities: - uid: 3131 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 47.5,-2.5 parent: 853 type: Transform @@ -31218,7 +32344,8 @@ entities: - uid: 3132 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 47.5,-3.5 parent: 853 type: Transform @@ -31227,7 +32354,8 @@ entities: - uid: 3133 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 48.5,-2.5 parent: 853 type: Transform @@ -31236,7 +32364,8 @@ entities: - uid: 3134 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 49.5,-2.5 parent: 853 type: Transform @@ -31245,7 +32374,8 @@ entities: - uid: 3135 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 50.5,-2.5 parent: 853 type: Transform @@ -31254,7 +32384,8 @@ entities: - uid: 3136 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 51.5,-2.5 parent: 853 type: Transform @@ -31263,7 +32394,8 @@ entities: - uid: 3137 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 51.5,-3.5 parent: 853 type: Transform @@ -31272,7 +32404,8 @@ entities: - uid: 3138 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 51.5,-4.5 parent: 853 type: Transform @@ -31281,7 +32414,8 @@ entities: - uid: 3139 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 41.5,10.5 parent: 853 type: Transform @@ -31292,7 +32426,8 @@ entities: - uid: 3140 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 41.5,11.5 parent: 853 type: Transform @@ -31303,7 +32438,8 @@ entities: - uid: 3141 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 41.5,12.5 parent: 853 type: Transform @@ -31314,7 +32450,8 @@ entities: - uid: 3142 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 41.5,13.5 parent: 853 type: Transform @@ -31325,7 +32462,8 @@ entities: - uid: 3143 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 28.5,14.5 parent: 853 type: Transform @@ -31334,7 +32472,8 @@ entities: - uid: 3144 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 28.5,13.5 parent: 853 type: Transform @@ -31343,7 +32482,8 @@ entities: - uid: 3145 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 28.5,12.5 parent: 853 type: Transform @@ -31354,7 +32494,8 @@ entities: - uid: 3146 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 28.5,11.5 parent: 853 type: Transform @@ -31365,7 +32506,8 @@ entities: - uid: 3147 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 28.5,10.5 parent: 853 type: Transform @@ -31376,7 +32518,8 @@ entities: - uid: 3148 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 29.5,10.5 parent: 853 type: Transform @@ -31387,7 +32530,8 @@ entities: - uid: 3149 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 28.5,9.5 parent: 853 type: Transform @@ -31396,7 +32540,8 @@ entities: - uid: 3150 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 27.5,9.5 parent: 853 type: Transform @@ -31407,7 +32552,8 @@ entities: - uid: 3151 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 26.5,9.5 parent: 853 type: Transform @@ -31416,7 +32562,8 @@ entities: - uid: 3152 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 25.5,9.5 parent: 853 type: Transform @@ -31427,7 +32574,8 @@ entities: - uid: 3153 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 26.5,10.5 parent: 853 type: Transform @@ -31438,7 +32586,8 @@ entities: - uid: 3154 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 26.5,11.5 parent: 853 type: Transform @@ -31449,7 +32598,8 @@ entities: - uid: 3155 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 27.5,8.5 parent: 853 type: Transform @@ -31458,7 +32608,8 @@ entities: - uid: 3156 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 27.5,7.5 parent: 853 type: Transform @@ -31469,7 +32620,8 @@ entities: - uid: 3157 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 30.5,10.5 parent: 853 type: Transform @@ -31480,7 +32632,8 @@ entities: - uid: 3158 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 31.5,10.5 parent: 853 type: Transform @@ -31491,7 +32644,8 @@ entities: - uid: 3159 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 32.5,10.5 parent: 853 type: Transform @@ -31502,7 +32656,8 @@ entities: - uid: 3160 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 33.5,10.5 parent: 853 type: Transform @@ -31513,7 +32668,8 @@ entities: - uid: 3161 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 34.5,10.5 parent: 853 type: Transform @@ -31524,7 +32680,8 @@ entities: - uid: 3162 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 35.5,10.5 parent: 853 type: Transform @@ -31535,7 +32692,8 @@ entities: - uid: 3163 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 36.5,10.5 parent: 853 type: Transform @@ -31546,7 +32704,8 @@ entities: - uid: 3164 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 30.5,9.5 parent: 853 type: Transform @@ -31557,7 +32716,8 @@ entities: - uid: 3165 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 33.5,9.5 parent: 853 type: Transform @@ -31568,7 +32728,8 @@ entities: - uid: 3166 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 35.5,9.5 parent: 853 type: Transform @@ -31579,7 +32740,8 @@ entities: - uid: 3167 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 35.5,8.5 parent: 853 type: Transform @@ -31590,7 +32752,8 @@ entities: - uid: 3168 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 35.5,7.5 parent: 853 type: Transform @@ -31599,7 +32762,8 @@ entities: - uid: 3169 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 36.5,11.5 parent: 853 type: Transform @@ -31610,7 +32774,8 @@ entities: - uid: 3170 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 36.5,12.5 parent: 853 type: Transform @@ -31621,7 +32786,8 @@ entities: - uid: 3171 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 30.5,11.5 parent: 853 type: Transform @@ -31632,7 +32798,8 @@ entities: - uid: 3172 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 30.5,12.5 parent: 853 type: Transform @@ -31643,7 +32810,8 @@ entities: - uid: 3173 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 24.5,14.5 parent: 853 type: Transform @@ -31652,7 +32820,8 @@ entities: - uid: 3174 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 24.5,13.5 parent: 853 type: Transform @@ -31663,7 +32832,8 @@ entities: - uid: 3175 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 23.5,13.5 parent: 853 type: Transform @@ -31674,7 +32844,8 @@ entities: - uid: 3176 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 22.5,13.5 parent: 853 type: Transform @@ -31685,7 +32856,8 @@ entities: - uid: 3177 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 58.5,-27.5 parent: 853 type: Transform @@ -31711,7 +32883,8 @@ entities: - uid: 3180 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 21.5,13.5 parent: 853 type: Transform @@ -31722,7 +32895,8 @@ entities: - uid: 3181 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 20.5,13.5 parent: 853 type: Transform @@ -31733,7 +32907,8 @@ entities: - uid: 3182 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 58.5,-26.5 parent: 853 type: Transform @@ -31742,7 +32917,8 @@ entities: - uid: 3183 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 58.5,-25.5 parent: 853 type: Transform @@ -31751,7 +32927,8 @@ entities: - uid: 3184 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 19.5,13.5 parent: 853 type: Transform @@ -31762,7 +32939,8 @@ entities: - uid: 3185 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 18.5,13.5 parent: 853 type: Transform @@ -31773,7 +32951,8 @@ entities: - uid: 3186 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 21.5,12.5 parent: 853 type: Transform @@ -31784,7 +32963,8 @@ entities: - uid: 3187 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 21.5,11.5 parent: 853 type: Transform @@ -31795,7 +32975,8 @@ entities: - uid: 3188 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 21.5,10.5 parent: 853 type: Transform @@ -31806,7 +32987,8 @@ entities: - uid: 3189 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 21.5,9.5 parent: 853 type: Transform @@ -31817,7 +32999,8 @@ entities: - uid: 3190 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 21.5,8.5 parent: 853 type: Transform @@ -31828,7 +33011,8 @@ entities: - uid: 3191 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 22.5,8.5 parent: 853 type: Transform @@ -31839,7 +33023,8 @@ entities: - uid: 3192 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 23.5,8.5 parent: 853 type: Transform @@ -31850,7 +33035,8 @@ entities: - uid: 3193 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 20.5,8.5 parent: 853 type: Transform @@ -31861,7 +33047,8 @@ entities: - uid: 3194 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 19.5,8.5 parent: 853 type: Transform @@ -31872,7 +33059,8 @@ entities: - uid: 3195 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 18.5,8.5 parent: 853 type: Transform @@ -31883,7 +33071,8 @@ entities: - uid: 3196 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 17.5,8.5 parent: 853 type: Transform @@ -31892,7 +33081,8 @@ entities: - uid: 3197 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 18.5,12.5 parent: 853 type: Transform @@ -31903,7 +33093,8 @@ entities: - uid: 3198 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 18.5,11.5 parent: 853 type: Transform @@ -31914,7 +33105,8 @@ entities: - uid: 3199 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 12.5,13.5 parent: 853 type: Transform @@ -31923,7 +33115,8 @@ entities: - uid: 3200 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 12.5,12.5 parent: 853 type: Transform @@ -31934,7 +33127,8 @@ entities: - uid: 3201 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 12.5,11.5 parent: 853 type: Transform @@ -31945,7 +33139,8 @@ entities: - uid: 3202 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 12.5,10.5 parent: 853 type: Transform @@ -31956,7 +33151,8 @@ entities: - uid: 3203 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 13.5,10.5 parent: 853 type: Transform @@ -31967,7 +33163,8 @@ entities: - uid: 3204 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 14.5,10.5 parent: 853 type: Transform @@ -31978,7 +33175,8 @@ entities: - uid: 3205 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 15.5,10.5 parent: 853 type: Transform @@ -31989,7 +33187,8 @@ entities: - uid: 3206 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 16.5,10.5 parent: 853 type: Transform @@ -32000,7 +33199,8 @@ entities: - uid: 3207 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 15.5,11.5 parent: 853 type: Transform @@ -32011,7 +33211,8 @@ entities: - uid: 3208 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 13.5,9.5 parent: 853 type: Transform @@ -32022,7 +33223,8 @@ entities: - uid: 3209 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 11.5,10.5 parent: 853 type: Transform @@ -32031,7 +33233,8 @@ entities: - uid: 3210 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 10.5,10.5 parent: 853 type: Transform @@ -32042,7 +33245,8 @@ entities: - uid: 3211 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 9.5,10.5 parent: 853 type: Transform @@ -32053,7 +33257,8 @@ entities: - uid: 3212 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 8.5,10.5 parent: 853 type: Transform @@ -32064,7 +33269,8 @@ entities: - uid: 3213 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 7.5,10.5 parent: 853 type: Transform @@ -32075,7 +33281,8 @@ entities: - uid: 3214 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 6.5,10.5 parent: 853 type: Transform @@ -32086,7 +33293,8 @@ entities: - uid: 3215 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 8.5,11.5 parent: 853 type: Transform @@ -32097,7 +33305,8 @@ entities: - uid: 3216 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 8.5,9.5 parent: 853 type: Transform @@ -32108,7 +33317,8 @@ entities: - uid: 3217 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 8.5,8.5 parent: 853 type: Transform @@ -32119,7 +33329,8 @@ entities: - uid: 3218 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 8.5,7.5 parent: 853 type: Transform @@ -32130,7 +33341,8 @@ entities: - uid: 3219 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 8.5,6.5 parent: 853 type: Transform @@ -32139,7 +33351,8 @@ entities: - uid: 3220 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 12.5,13.5 parent: 853 type: Transform @@ -32148,7 +33361,8 @@ entities: - uid: 3221 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 12.5,14.5 parent: 853 type: Transform @@ -32157,7 +33371,8 @@ entities: - uid: 3222 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 11.5,14.5 parent: 853 type: Transform @@ -32166,7 +33381,8 @@ entities: - uid: 3223 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 10.5,14.5 parent: 853 type: Transform @@ -32175,7 +33391,8 @@ entities: - uid: 3224 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 9.5,14.5 parent: 853 type: Transform @@ -32186,7 +33403,8 @@ entities: - uid: 3225 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 8.5,14.5 parent: 853 type: Transform @@ -32197,7 +33415,8 @@ entities: - uid: 3226 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 7.5,14.5 parent: 853 type: Transform @@ -32208,7 +33427,8 @@ entities: - uid: 3227 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 6.5,14.5 parent: 853 type: Transform @@ -32217,7 +33437,8 @@ entities: - uid: 3228 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 12.5,14.5 parent: 853 type: Transform @@ -32226,7 +33447,8 @@ entities: - uid: 3229 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 13.5,14.5 parent: 853 type: Transform @@ -32237,7 +33459,8 @@ entities: - uid: 3230 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 14.5,14.5 parent: 853 type: Transform @@ -32248,7 +33471,8 @@ entities: - uid: 3231 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 15.5,14.5 parent: 853 type: Transform @@ -32259,7 +33483,8 @@ entities: - uid: 3232 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 15.5,15.5 parent: 853 type: Transform @@ -32270,7 +33495,8 @@ entities: - uid: 3233 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 13.5,16.5 parent: 853 type: Transform @@ -32281,7 +33507,8 @@ entities: - uid: 3234 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 13.5,15.5 parent: 853 type: Transform @@ -32292,7 +33519,8 @@ entities: - uid: 3235 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 9.5,22.5 parent: 853 type: Transform @@ -32301,7 +33529,8 @@ entities: - uid: 3236 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 9.5,21.5 parent: 853 type: Transform @@ -32312,7 +33541,8 @@ entities: - uid: 3237 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 9.5,20.5 parent: 853 type: Transform @@ -32323,7 +33553,8 @@ entities: - uid: 3238 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 9.5,19.5 parent: 853 type: Transform @@ -32334,7 +33565,8 @@ entities: - uid: 3239 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 9.5,18.5 parent: 853 type: Transform @@ -32345,7 +33577,8 @@ entities: - uid: 3240 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 9.5,17.5 parent: 853 type: Transform @@ -32356,7 +33589,8 @@ entities: - uid: 3241 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 9.5,16.5 parent: 853 type: Transform @@ -32367,7 +33601,8 @@ entities: - uid: 3242 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 10.5,20.5 parent: 853 type: Transform @@ -32378,7 +33613,8 @@ entities: - uid: 3243 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 8.5,17.5 parent: 853 type: Transform @@ -32389,7 +33625,8 @@ entities: - uid: 3244 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 8.5,17.5 parent: 853 type: Transform @@ -32400,7 +33637,8 @@ entities: - uid: 3245 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 7.5,17.5 parent: 853 type: Transform @@ -32411,7 +33649,8 @@ entities: - uid: 3246 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 8.5,20.5 parent: 853 type: Transform @@ -32422,7 +33661,8 @@ entities: - uid: 3247 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 6.5,17.5 parent: 853 type: Transform @@ -32433,7 +33673,8 @@ entities: - uid: 3248 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 5.5,17.5 parent: 853 type: Transform @@ -32444,7 +33685,8 @@ entities: - uid: 3249 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 5.5,16.5 parent: 853 type: Transform @@ -32455,7 +33697,8 @@ entities: - uid: 3250 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 4.5,17.5 parent: 853 type: Transform @@ -32466,7 +33709,8 @@ entities: - uid: 3251 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 3.5,17.5 parent: 853 type: Transform @@ -32477,7 +33721,8 @@ entities: - uid: 3252 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 3.5,18.5 parent: 853 type: Transform @@ -32488,7 +33733,8 @@ entities: - uid: 3253 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 3.5,19.5 parent: 853 type: Transform @@ -32499,7 +33745,8 @@ entities: - uid: 3254 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 3.5,20.5 parent: 853 type: Transform @@ -32510,7 +33757,8 @@ entities: - uid: 3255 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 3.5,20.5 parent: 853 type: Transform @@ -32521,7 +33769,8 @@ entities: - uid: 3256 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 3.5,21.5 parent: 853 type: Transform @@ -32532,7 +33781,8 @@ entities: - uid: 3257 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 3.5,22.5 parent: 853 type: Transform @@ -32541,7 +33791,8 @@ entities: - uid: 3258 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 2.5,20.5 parent: 853 type: Transform @@ -32552,7 +33803,8 @@ entities: - uid: 3259 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 1.5,20.5 parent: 853 type: Transform @@ -32563,7 +33815,8 @@ entities: - uid: 3260 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 9.5,27.5 parent: 853 type: Transform @@ -32572,7 +33825,8 @@ entities: - uid: 3261 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 9.5,26.5 parent: 853 type: Transform @@ -32583,7 +33837,8 @@ entities: - uid: 3262 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 9.5,25.5 parent: 853 type: Transform @@ -32594,7 +33849,8 @@ entities: - uid: 3263 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 9.5,24.5 parent: 853 type: Transform @@ -32605,7 +33861,8 @@ entities: - uid: 3264 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 8.5,24.5 parent: 853 type: Transform @@ -32616,7 +33873,8 @@ entities: - uid: 3265 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 7.5,24.5 parent: 853 type: Transform @@ -32627,7 +33885,8 @@ entities: - uid: 3266 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 6.5,24.5 parent: 853 type: Transform @@ -32638,7 +33897,8 @@ entities: - uid: 3267 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 9.5,28.5 parent: 853 type: Transform @@ -32649,7 +33909,8 @@ entities: - uid: 3268 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 9.5,29.5 parent: 853 type: Transform @@ -32660,7 +33921,8 @@ entities: - uid: 3269 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 9.5,30.5 parent: 853 type: Transform @@ -32671,7 +33933,8 @@ entities: - uid: 3270 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 8.5,30.5 parent: 853 type: Transform @@ -32682,7 +33945,8 @@ entities: - uid: 3271 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 7.5,30.5 parent: 853 type: Transform @@ -32693,7 +33957,8 @@ entities: - uid: 3272 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 6.5,30.5 parent: 853 type: Transform @@ -32704,7 +33969,8 @@ entities: - uid: 3273 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 6.5,31.5 parent: 853 type: Transform @@ -32715,7 +33981,8 @@ entities: - uid: 3274 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -2.5,27.5 parent: 853 type: Transform @@ -32724,7 +33991,8 @@ entities: - uid: 3275 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -2.5,28.5 parent: 853 type: Transform @@ -32735,7 +34003,8 @@ entities: - uid: 3276 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -2.5,29.5 parent: 853 type: Transform @@ -32746,7 +34015,8 @@ entities: - uid: 3277 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -2.5,30.5 parent: 853 type: Transform @@ -32757,7 +34027,8 @@ entities: - uid: 3278 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -1.5,30.5 parent: 853 type: Transform @@ -32768,7 +34039,8 @@ entities: - uid: 3279 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -0.5,30.5 parent: 853 type: Transform @@ -32779,7 +34051,8 @@ entities: - uid: 3280 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 0.5,30.5 parent: 853 type: Transform @@ -32790,7 +34063,8 @@ entities: - uid: 3281 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 1.5,30.5 parent: 853 type: Transform @@ -32801,7 +34075,8 @@ entities: - uid: 3282 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 2.5,30.5 parent: 853 type: Transform @@ -32812,7 +34087,8 @@ entities: - uid: 3283 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 3.5,30.5 parent: 853 type: Transform @@ -32823,7 +34099,8 @@ entities: - uid: 3284 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 0.5,31.5 parent: 853 type: Transform @@ -32834,7 +34111,8 @@ entities: - uid: 3285 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 3.5,31.5 parent: 853 type: Transform @@ -32845,7 +34123,8 @@ entities: - uid: 3286 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -2.5,26.5 parent: 853 type: Transform @@ -32856,7 +34135,8 @@ entities: - uid: 3287 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -2.5,25.5 parent: 853 type: Transform @@ -32867,7 +34147,8 @@ entities: - uid: 3288 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -1.5,25.5 parent: 853 type: Transform @@ -32878,7 +34159,8 @@ entities: - uid: 3289 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -0.5,25.5 parent: 853 type: Transform @@ -32889,7 +34171,8 @@ entities: - uid: 3290 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 0.5,25.5 parent: 853 type: Transform @@ -32900,7 +34183,8 @@ entities: - uid: 3291 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 0.5,24.5 parent: 853 type: Transform @@ -32911,7 +34195,8 @@ entities: - uid: 3292 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -2.5,24.5 parent: 853 type: Transform @@ -32922,7 +34207,8 @@ entities: - uid: 3293 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -2.5,23.5 parent: 853 type: Transform @@ -32933,7 +34219,8 @@ entities: - uid: 3294 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -1.5,23.5 parent: 853 type: Transform @@ -32958,7 +34245,8 @@ entities: - uid: 3297 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 41.5,6.5 parent: 853 type: Transform @@ -32969,7 +34257,8 @@ entities: - uid: 3298 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 41.5,5.5 parent: 853 type: Transform @@ -32980,7 +34269,8 @@ entities: - uid: 3299 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 42.5,4.5 parent: 853 type: Transform @@ -32991,7 +34281,8 @@ entities: - uid: 3300 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 42.5,3.5 parent: 853 type: Transform @@ -33002,7 +34293,8 @@ entities: - uid: 3301 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 42.5,2.5 parent: 853 type: Transform @@ -33013,7 +34305,8 @@ entities: - uid: 3302 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 42.5,1.5 parent: 853 type: Transform @@ -33024,7 +34317,8 @@ entities: - uid: 3303 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 42.5,0.5 parent: 853 type: Transform @@ -33033,7 +34327,8 @@ entities: - uid: 3304 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 42.5,-0.5 parent: 853 type: Transform @@ -33042,7 +34337,8 @@ entities: - uid: 3305 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 42.5,-1.5 parent: 853 type: Transform @@ -33051,7 +34347,8 @@ entities: - uid: 3306 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 42.5,-2.5 parent: 853 type: Transform @@ -33060,7 +34357,8 @@ entities: - uid: 3307 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 42.5,-3.5 parent: 853 type: Transform @@ -33071,7 +34369,8 @@ entities: - uid: 3308 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 42.5,-4.5 parent: 853 type: Transform @@ -33080,7 +34379,8 @@ entities: - uid: 3309 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 42.5,-4.5 parent: 853 type: Transform @@ -33089,7 +34389,8 @@ entities: - uid: 3310 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 41.5,-4.5 parent: 853 type: Transform @@ -33098,7 +34399,8 @@ entities: - uid: 3311 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 40.5,-4.5 parent: 853 type: Transform @@ -33107,7 +34409,8 @@ entities: - uid: 3312 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 39.5,-4.5 parent: 853 type: Transform @@ -33116,7 +34419,8 @@ entities: - uid: 3313 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 38.5,-4.5 parent: 853 type: Transform @@ -33125,7 +34429,8 @@ entities: - uid: 3314 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 38.5,-5.5 parent: 853 type: Transform @@ -33134,7 +34439,8 @@ entities: - uid: 3315 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 38.5,-6.5 parent: 853 type: Transform @@ -33143,7 +34449,8 @@ entities: - uid: 3316 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 38.5,-7.5 parent: 853 type: Transform @@ -33152,7 +34459,8 @@ entities: - uid: 3317 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 37.5,-7.5 parent: 853 type: Transform @@ -33161,7 +34469,8 @@ entities: - uid: 3318 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 36.5,-7.5 parent: 853 type: Transform @@ -33170,7 +34479,8 @@ entities: - uid: 3319 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 35.5,-7.5 parent: 853 type: Transform @@ -33179,7 +34489,8 @@ entities: - uid: 3320 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 34.5,-7.5 parent: 853 type: Transform @@ -33188,7 +34499,8 @@ entities: - uid: 3321 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 33.5,-7.5 parent: 853 type: Transform @@ -33197,7 +34509,8 @@ entities: - uid: 3322 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 32.5,-7.5 parent: 853 type: Transform @@ -33206,7 +34519,8 @@ entities: - uid: 3323 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 31.5,-7.5 parent: 853 type: Transform @@ -33215,7 +34529,8 @@ entities: - uid: 3324 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 30.5,-7.5 parent: 853 type: Transform @@ -33224,7 +34539,8 @@ entities: - uid: 3325 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 29.5,-7.5 parent: 853 type: Transform @@ -33233,7 +34549,8 @@ entities: - uid: 3326 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 28.5,-7.5 parent: 853 type: Transform @@ -33242,7 +34559,8 @@ entities: - uid: 3327 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 27.5,-7.5 parent: 853 type: Transform @@ -33253,7 +34571,8 @@ entities: - uid: 3328 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 26.5,-7.5 parent: 853 type: Transform @@ -33262,7 +34581,8 @@ entities: - uid: 3329 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 26.5,-8.5 parent: 853 type: Transform @@ -33271,7 +34591,8 @@ entities: - uid: 3330 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 26.5,-9.5 parent: 853 type: Transform @@ -33280,7 +34601,8 @@ entities: - uid: 3331 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 26.5,-10.5 parent: 853 type: Transform @@ -33289,7 +34611,8 @@ entities: - uid: 3332 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 26.5,-11.5 parent: 853 type: Transform @@ -33298,7 +34621,8 @@ entities: - uid: 3333 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 26.5,-12.5 parent: 853 type: Transform @@ -33307,7 +34631,8 @@ entities: - uid: 3334 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 26.5,-13.5 parent: 853 type: Transform @@ -33316,7 +34641,8 @@ entities: - uid: 3335 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 26.5,-14.5 parent: 853 type: Transform @@ -33325,7 +34651,8 @@ entities: - uid: 3336 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 26.5,-15.5 parent: 853 type: Transform @@ -33334,7 +34661,8 @@ entities: - uid: 3337 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 26.5,-16.5 parent: 853 type: Transform @@ -33343,7 +34671,8 @@ entities: - uid: 3338 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 26.5,-17.5 parent: 853 type: Transform @@ -33352,7 +34681,8 @@ entities: - uid: 3339 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 25.5,-9.5 parent: 853 type: Transform @@ -33361,7 +34691,8 @@ entities: - uid: 3340 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 24.5,-9.5 parent: 853 type: Transform @@ -33370,7 +34701,8 @@ entities: - uid: 3341 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 23.5,-9.5 parent: 853 type: Transform @@ -33379,7 +34711,8 @@ entities: - uid: 3342 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 22.5,-9.5 parent: 853 type: Transform @@ -33388,7 +34721,8 @@ entities: - uid: 3343 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 21.5,-9.5 parent: 853 type: Transform @@ -33397,7 +34731,8 @@ entities: - uid: 3344 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 25.5,-17.5 parent: 853 type: Transform @@ -33406,7 +34741,8 @@ entities: - uid: 3345 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 24.5,-17.5 parent: 853 type: Transform @@ -33415,7 +34751,8 @@ entities: - uid: 3346 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 23.5,-17.5 parent: 853 type: Transform @@ -33424,7 +34761,8 @@ entities: - uid: 3347 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 22.5,-17.5 parent: 853 type: Transform @@ -33433,7 +34771,8 @@ entities: - uid: 3348 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 22.5,-18.5 parent: 853 type: Transform @@ -33442,7 +34781,8 @@ entities: - uid: 3349 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 22.5,-19.5 parent: 853 type: Transform @@ -33451,7 +34791,8 @@ entities: - uid: 3350 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 22.5,-20.5 parent: 853 type: Transform @@ -33460,7 +34801,8 @@ entities: - uid: 3351 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 22.5,-21.5 parent: 853 type: Transform @@ -33469,7 +34811,8 @@ entities: - uid: 3352 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 22.5,-22.5 parent: 853 type: Transform @@ -33478,7 +34821,8 @@ entities: - uid: 3353 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 22.5,-23.5 parent: 853 type: Transform @@ -33487,7 +34831,8 @@ entities: - uid: 3354 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 22.5,-24.5 parent: 853 type: Transform @@ -33496,7 +34841,8 @@ entities: - uid: 3355 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 22.5,-25.5 parent: 853 type: Transform @@ -33505,7 +34851,8 @@ entities: - uid: 3356 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 21.5,-25.5 parent: 853 type: Transform @@ -33514,7 +34861,8 @@ entities: - uid: 3357 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 20.5,-25.5 parent: 853 type: Transform @@ -33523,7 +34871,8 @@ entities: - uid: 3358 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 19.5,-25.5 parent: 853 type: Transform @@ -33532,7 +34881,8 @@ entities: - uid: 3359 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 18.5,-25.5 parent: 853 type: Transform @@ -33541,7 +34891,8 @@ entities: - uid: 3360 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 17.5,-25.5 parent: 853 type: Transform @@ -33550,7 +34901,8 @@ entities: - uid: 3361 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 16.5,-25.5 parent: 853 type: Transform @@ -33559,7 +34911,8 @@ entities: - uid: 3362 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 15.5,-25.5 parent: 853 type: Transform @@ -33568,7 +34921,8 @@ entities: - uid: 3363 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 14.5,-25.5 parent: 853 type: Transform @@ -33577,7 +34931,8 @@ entities: - uid: 3364 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 14.5,-24.5 parent: 853 type: Transform @@ -33586,7 +34941,8 @@ entities: - uid: 3365 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 14.5,-23.5 parent: 853 type: Transform @@ -33595,7 +34951,8 @@ entities: - uid: 3366 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 14.5,-22.5 parent: 853 type: Transform @@ -33604,7 +34961,8 @@ entities: - uid: 3367 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 14.5,-21.5 parent: 853 type: Transform @@ -33613,7 +34971,8 @@ entities: - uid: 3368 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 14.5,-20.5 parent: 853 type: Transform @@ -33622,7 +34981,8 @@ entities: - uid: 3369 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 13.5,-20.5 parent: 853 type: Transform @@ -33631,7 +34991,8 @@ entities: - uid: 3370 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 12.5,-20.5 parent: 853 type: Transform @@ -33640,7 +35001,8 @@ entities: - uid: 3371 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 11.5,-20.5 parent: 853 type: Transform @@ -33649,7 +35011,8 @@ entities: - uid: 3372 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 10.5,-20.5 parent: 853 type: Transform @@ -33658,7 +35021,8 @@ entities: - uid: 3373 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 9.5,-20.5 parent: 853 type: Transform @@ -33667,7 +35031,8 @@ entities: - uid: 3374 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 8.5,-20.5 parent: 853 type: Transform @@ -33676,7 +35041,8 @@ entities: - uid: 3375 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 7.5,-20.5 parent: 853 type: Transform @@ -33685,7 +35051,8 @@ entities: - uid: 3376 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 6.5,-20.5 parent: 853 type: Transform @@ -33694,7 +35061,8 @@ entities: - uid: 3377 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 5.5,-20.5 parent: 853 type: Transform @@ -33705,7 +35073,8 @@ entities: - uid: 3378 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 4.5,-20.5 parent: 853 type: Transform @@ -33724,7 +35093,8 @@ entities: - uid: 3380 type: SalternApc components: - - pos: 13.5,-23.5 + - anchored: True + pos: 13.5,-23.5 parent: 853 type: Transform - startingCharge: 11999.918 @@ -33732,7 +35102,8 @@ entities: - uid: 3381 type: CableMV components: - - pos: 14.5,-25.5 + - anchored: True + pos: 14.5,-25.5 parent: 853 type: Transform - canCollide: False @@ -33740,7 +35111,8 @@ entities: - uid: 3382 type: CableMV components: - - pos: 13.5,-25.5 + - anchored: True + pos: 13.5,-25.5 parent: 853 type: Transform - canCollide: False @@ -33748,7 +35120,8 @@ entities: - uid: 3383 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 2.5,-23.5 parent: 853 type: Transform @@ -33759,7 +35132,8 @@ entities: - uid: 3384 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 1.5,-23.5 parent: 853 type: Transform @@ -33770,7 +35144,8 @@ entities: - uid: 3385 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -0.5,-23.5 parent: 853 type: Transform @@ -33779,7 +35154,8 @@ entities: - uid: 3386 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 0.5,-23.5 parent: 853 type: Transform @@ -33788,7 +35164,8 @@ entities: - uid: 3387 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -0.5,-24.5 parent: 853 type: Transform @@ -33797,7 +35174,8 @@ entities: - uid: 3388 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -0.5,-25.5 parent: 853 type: Transform @@ -33806,7 +35184,8 @@ entities: - uid: 3389 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -0.5,-26.5 parent: 853 type: Transform @@ -33815,7 +35194,8 @@ entities: - uid: 3390 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -1.5,-26.5 parent: 853 type: Transform @@ -33824,7 +35204,8 @@ entities: - uid: 3391 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -2.5,-26.5 parent: 853 type: Transform @@ -33833,7 +35214,8 @@ entities: - uid: 3392 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -3.5,-26.5 parent: 853 type: Transform @@ -33842,7 +35224,8 @@ entities: - uid: 3393 type: CableApcExtension components: - - pos: -0.5,-15.5 + - anchored: True + pos: -0.5,-15.5 parent: 853 type: Transform - visible: False @@ -33852,7 +35235,8 @@ entities: - uid: 3394 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -4.5,-26.5 parent: 853 type: Transform @@ -33861,7 +35245,8 @@ entities: - uid: 3395 type: CableApcExtension components: - - pos: -1.5,-15.5 + - anchored: True + pos: -1.5,-15.5 parent: 853 type: Transform - visible: False @@ -33871,7 +35256,8 @@ entities: - uid: 3396 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -7.5,-26.5 parent: 853 type: Transform @@ -33880,7 +35266,8 @@ entities: - uid: 3397 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -8.5,-26.5 parent: 853 type: Transform @@ -33889,7 +35276,8 @@ entities: - uid: 3398 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -9.5,-26.5 parent: 853 type: Transform @@ -33898,7 +35286,8 @@ entities: - uid: 3399 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -10.5,-26.5 parent: 853 type: Transform @@ -33907,7 +35296,8 @@ entities: - uid: 3400 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -11.5,-26.5 parent: 853 type: Transform @@ -33916,7 +35306,8 @@ entities: - uid: 3401 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -11.5,-26.5 parent: 853 type: Transform @@ -33925,7 +35316,8 @@ entities: - uid: 3402 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -11.5,-25.5 parent: 853 type: Transform @@ -33934,7 +35326,8 @@ entities: - uid: 3403 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -11.5,-24.5 parent: 853 type: Transform @@ -33943,7 +35336,8 @@ entities: - uid: 3404 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -11.5,-23.5 parent: 853 type: Transform @@ -33952,7 +35346,8 @@ entities: - uid: 3405 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -11.5,-22.5 parent: 853 type: Transform @@ -33961,7 +35356,8 @@ entities: - uid: 3406 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -11.5,-21.5 parent: 853 type: Transform @@ -33972,7 +35368,8 @@ entities: - uid: 3407 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -11.5,-20.5 parent: 853 type: Transform @@ -33983,7 +35380,8 @@ entities: - uid: 3408 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -11.5,-19.5 parent: 853 type: Transform @@ -33994,7 +35392,8 @@ entities: - uid: 3409 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -11.5,-18.5 parent: 853 type: Transform @@ -34005,7 +35404,8 @@ entities: - uid: 3410 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -11.5,-17.5 parent: 853 type: Transform @@ -34016,7 +35416,8 @@ entities: - uid: 3411 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -11.5,-16.5 parent: 853 type: Transform @@ -34025,7 +35426,8 @@ entities: - uid: 3412 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -11.5,-15.5 parent: 853 type: Transform @@ -34036,7 +35438,8 @@ entities: - uid: 3413 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -11.5,-14.5 parent: 853 type: Transform @@ -34045,7 +35448,8 @@ entities: - uid: 3414 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -10.5,-14.5 parent: 853 type: Transform @@ -34054,7 +35458,8 @@ entities: - uid: 3415 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -9.5,-14.5 parent: 853 type: Transform @@ -34063,7 +35468,8 @@ entities: - uid: 3416 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -9.5,-13.5 parent: 853 type: Transform @@ -34072,7 +35478,8 @@ entities: - uid: 3417 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -9.5,-12.5 parent: 853 type: Transform @@ -34081,7 +35488,8 @@ entities: - uid: 3418 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -9.5,-11.5 parent: 853 type: Transform @@ -34090,7 +35498,8 @@ entities: - uid: 3419 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -9.5,-10.5 parent: 853 type: Transform @@ -34099,7 +35508,8 @@ entities: - uid: 3420 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -8.5,-10.5 parent: 853 type: Transform @@ -34108,7 +35518,8 @@ entities: - uid: 3421 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -7.5,-10.5 parent: 853 type: Transform @@ -34117,7 +35528,8 @@ entities: - uid: 3422 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -6.5,-10.5 parent: 853 type: Transform @@ -34126,7 +35538,8 @@ entities: - uid: 3423 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -5.5,-10.5 parent: 853 type: Transform @@ -34135,7 +35548,8 @@ entities: - uid: 3424 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -4.5,-10.5 parent: 853 type: Transform @@ -34144,7 +35558,8 @@ entities: - uid: 3425 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -3.5,-10.5 parent: 853 type: Transform @@ -34153,7 +35568,8 @@ entities: - uid: 3426 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -2.5,-10.5 parent: 853 type: Transform @@ -34162,7 +35578,8 @@ entities: - uid: 3427 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -1.5,-10.5 parent: 853 type: Transform @@ -34171,7 +35588,8 @@ entities: - uid: 3428 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -0.5,-10.5 parent: 853 type: Transform @@ -34180,7 +35598,8 @@ entities: - uid: 3429 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 0.5,-10.5 parent: 853 type: Transform @@ -34189,7 +35608,8 @@ entities: - uid: 3430 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 0.5,-9.5 parent: 853 type: Transform @@ -34198,7 +35618,8 @@ entities: - uid: 3431 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 0.5,-8.5 parent: 853 type: Transform @@ -34207,7 +35628,8 @@ entities: - uid: 3432 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 0.5,-7.5 parent: 853 type: Transform @@ -34216,7 +35638,8 @@ entities: - uid: 3433 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 0.5,-6.5 parent: 853 type: Transform @@ -34227,7 +35650,8 @@ entities: - uid: 3434 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -12.5,-14.5 parent: 853 type: Transform @@ -34236,7 +35660,8 @@ entities: - uid: 3435 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -13.5,-14.5 parent: 853 type: Transform @@ -34245,7 +35670,8 @@ entities: - uid: 3436 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -14.5,-14.5 parent: 853 type: Transform @@ -34254,7 +35680,8 @@ entities: - uid: 3437 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -15.5,-14.5 parent: 853 type: Transform @@ -34263,7 +35690,8 @@ entities: - uid: 3438 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -16.5,-14.5 parent: 853 type: Transform @@ -34272,7 +35700,8 @@ entities: - uid: 3439 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -17.5,-14.5 parent: 853 type: Transform @@ -34281,7 +35710,8 @@ entities: - uid: 3440 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -18.5,-14.5 parent: 853 type: Transform @@ -34290,7 +35720,8 @@ entities: - uid: 3441 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -18.5,-13.5 parent: 853 type: Transform @@ -34299,7 +35730,8 @@ entities: - uid: 3442 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -18.5,-12.5 parent: 853 type: Transform @@ -34308,7 +35740,8 @@ entities: - uid: 3443 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -18.5,-11.5 parent: 853 type: Transform @@ -34317,7 +35750,8 @@ entities: - uid: 3444 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -18.5,-11.5 parent: 853 type: Transform @@ -34326,7 +35760,8 @@ entities: - uid: 3445 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -19.5,-11.5 parent: 853 type: Transform @@ -34335,7 +35770,8 @@ entities: - uid: 3446 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -20.5,-11.5 parent: 853 type: Transform @@ -34344,7 +35780,8 @@ entities: - uid: 3447 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -21.5,-11.5 parent: 853 type: Transform @@ -34353,7 +35790,8 @@ entities: - uid: 3448 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -22.5,-11.5 parent: 853 type: Transform @@ -34362,7 +35800,8 @@ entities: - uid: 3449 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -23.5,-11.5 parent: 853 type: Transform @@ -34371,7 +35810,8 @@ entities: - uid: 3450 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -24.5,-11.5 parent: 853 type: Transform @@ -34380,7 +35820,8 @@ entities: - uid: 3451 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -25.5,-11.5 parent: 853 type: Transform @@ -34389,7 +35830,8 @@ entities: - uid: 3452 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -26.5,-11.5 parent: 853 type: Transform @@ -34398,7 +35840,8 @@ entities: - uid: 3453 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -27.5,-11.5 parent: 853 type: Transform @@ -34407,7 +35850,8 @@ entities: - uid: 3454 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -21.5,-10.5 parent: 853 type: Transform @@ -34418,7 +35862,8 @@ entities: - uid: 3455 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -28.5,-11.5 parent: 853 type: Transform @@ -34427,7 +35872,8 @@ entities: - uid: 3456 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -29.5,-11.5 parent: 853 type: Transform @@ -34436,7 +35882,8 @@ entities: - uid: 3457 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -30.5,-11.5 parent: 853 type: Transform @@ -34445,7 +35892,8 @@ entities: - uid: 3458 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -31.5,-11.5 parent: 853 type: Transform @@ -34454,7 +35902,8 @@ entities: - uid: 3459 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -32.5,-11.5 parent: 853 type: Transform @@ -34463,7 +35912,8 @@ entities: - uid: 3460 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -33.5,-11.5 parent: 853 type: Transform @@ -34472,7 +35922,8 @@ entities: - uid: 3461 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -33.5,-10.5 parent: 853 type: Transform @@ -34481,7 +35932,8 @@ entities: - uid: 3462 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -33.5,-9.5 parent: 853 type: Transform @@ -34490,7 +35942,8 @@ entities: - uid: 3463 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -33.5,-8.5 parent: 853 type: Transform @@ -34499,7 +35952,8 @@ entities: - uid: 3464 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -33.5,-7.5 parent: 853 type: Transform @@ -34508,7 +35962,8 @@ entities: - uid: 3465 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -33.5,-6.5 parent: 853 type: Transform @@ -34517,7 +35972,8 @@ entities: - uid: 3466 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -33.5,-5.5 parent: 853 type: Transform @@ -34526,7 +35982,8 @@ entities: - uid: 3467 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -33.5,-4.5 parent: 853 type: Transform @@ -34535,7 +35992,8 @@ entities: - uid: 3468 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -33.5,-3.5 parent: 853 type: Transform @@ -34544,7 +36002,8 @@ entities: - uid: 3469 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -33.5,-2.5 parent: 853 type: Transform @@ -34553,7 +36012,8 @@ entities: - uid: 3470 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -33.5,-1.5 parent: 853 type: Transform @@ -34562,7 +36022,8 @@ entities: - uid: 3471 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -33.5,-0.5 parent: 853 type: Transform @@ -34571,7 +36032,8 @@ entities: - uid: 3472 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -33.5,0.5 parent: 853 type: Transform @@ -34580,7 +36042,8 @@ entities: - uid: 3473 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -32.5,0.5 parent: 853 type: Transform @@ -34589,7 +36052,8 @@ entities: - uid: 3474 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -32.5,1.5 parent: 853 type: Transform @@ -34598,7 +36062,8 @@ entities: - uid: 3475 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -32.5,2.5 parent: 853 type: Transform @@ -34609,7 +36074,8 @@ entities: - uid: 3476 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -32.5,3.5 parent: 853 type: Transform @@ -34620,7 +36086,8 @@ entities: - uid: 3477 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -32.5,4.5 parent: 853 type: Transform @@ -34631,7 +36098,8 @@ entities: - uid: 3478 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -32.5,5.5 parent: 853 type: Transform @@ -34642,7 +36110,8 @@ entities: - uid: 3479 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -32.5,6.5 parent: 853 type: Transform @@ -34651,7 +36120,8 @@ entities: - uid: 3480 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -32.5,7.5 parent: 853 type: Transform @@ -34660,7 +36130,8 @@ entities: - uid: 3481 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -32.5,8.5 parent: 853 type: Transform @@ -34669,7 +36140,8 @@ entities: - uid: 3482 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -32.5,9.5 parent: 853 type: Transform @@ -34678,7 +36150,8 @@ entities: - uid: 3483 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -32.5,10.5 parent: 853 type: Transform @@ -34687,7 +36160,8 @@ entities: - uid: 3484 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -32.5,11.5 parent: 853 type: Transform @@ -34696,7 +36170,8 @@ entities: - uid: 3485 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -32.5,12.5 parent: 853 type: Transform @@ -34705,7 +36180,8 @@ entities: - uid: 3486 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -32.5,13.5 parent: 853 type: Transform @@ -34714,7 +36190,8 @@ entities: - uid: 3487 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -32.5,14.5 parent: 853 type: Transform @@ -34723,7 +36200,8 @@ entities: - uid: 3488 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -32.5,14.5 parent: 853 type: Transform @@ -34732,7 +36210,8 @@ entities: - uid: 3489 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -31.5,14.5 parent: 853 type: Transform @@ -34741,7 +36220,8 @@ entities: - uid: 3490 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -30.5,14.5 parent: 853 type: Transform @@ -34750,7 +36230,8 @@ entities: - uid: 3491 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -29.5,14.5 parent: 853 type: Transform @@ -34759,7 +36240,8 @@ entities: - uid: 3492 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -28.5,14.5 parent: 853 type: Transform @@ -34768,7 +36250,8 @@ entities: - uid: 3493 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -27.5,14.5 parent: 853 type: Transform @@ -34777,7 +36260,8 @@ entities: - uid: 3494 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -26.5,14.5 parent: 853 type: Transform @@ -34786,7 +36270,8 @@ entities: - uid: 3495 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -25.5,14.5 parent: 853 type: Transform @@ -34795,7 +36280,8 @@ entities: - uid: 3496 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -24.5,14.5 parent: 853 type: Transform @@ -34804,7 +36290,8 @@ entities: - uid: 3497 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -23.5,14.5 parent: 853 type: Transform @@ -34813,7 +36300,8 @@ entities: - uid: 3498 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -22.5,14.5 parent: 853 type: Transform @@ -34822,7 +36310,8 @@ entities: - uid: 3499 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -21.5,14.5 parent: 853 type: Transform @@ -34831,7 +36320,8 @@ entities: - uid: 3500 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -20.5,14.5 parent: 853 type: Transform @@ -34840,7 +36330,8 @@ entities: - uid: 3501 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -20.5,13.5 parent: 853 type: Transform @@ -34849,7 +36340,8 @@ entities: - uid: 3502 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -19.5,13.5 parent: 853 type: Transform @@ -34858,7 +36350,8 @@ entities: - uid: 3503 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -18.5,13.5 parent: 853 type: Transform @@ -34867,7 +36360,8 @@ entities: - uid: 3504 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -18.5,13.5 parent: 853 type: Transform @@ -34876,7 +36370,8 @@ entities: - uid: 3505 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -17.5,13.5 parent: 853 type: Transform @@ -34885,7 +36380,8 @@ entities: - uid: 3506 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -17.5,14.5 parent: 853 type: Transform @@ -34894,7 +36390,8 @@ entities: - uid: 3507 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -17.5,15.5 parent: 853 type: Transform @@ -34903,7 +36400,8 @@ entities: - uid: 3508 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -18.5,16.5 parent: 853 type: Transform @@ -34912,7 +36410,8 @@ entities: - uid: 3509 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -17.5,16.5 parent: 853 type: Transform @@ -34923,7 +36422,8 @@ entities: - uid: 3510 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -16.5,16.5 parent: 853 type: Transform @@ -34934,7 +36434,8 @@ entities: - uid: 3511 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -15.5,16.5 parent: 853 type: Transform @@ -34943,7 +36444,8 @@ entities: - uid: 3512 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -18.5,17.5 parent: 853 type: Transform @@ -34952,7 +36454,8 @@ entities: - uid: 3513 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -18.5,18.5 parent: 853 type: Transform @@ -34961,7 +36464,8 @@ entities: - uid: 3514 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -18.5,19.5 parent: 853 type: Transform @@ -34970,7 +36474,8 @@ entities: - uid: 3515 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -18.5,20.5 parent: 853 type: Transform @@ -34979,7 +36484,8 @@ entities: - uid: 3516 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -18.5,21.5 parent: 853 type: Transform @@ -34988,7 +36494,8 @@ entities: - uid: 3517 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -18.5,22.5 parent: 853 type: Transform @@ -34997,7 +36504,8 @@ entities: - uid: 3518 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -18.5,23.5 parent: 853 type: Transform @@ -35006,7 +36514,8 @@ entities: - uid: 3519 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -18.5,24.5 parent: 853 type: Transform @@ -35015,7 +36524,8 @@ entities: - uid: 3520 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -18.5,25.5 parent: 853 type: Transform @@ -35024,7 +36534,8 @@ entities: - uid: 3521 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -17.5,25.5 parent: 853 type: Transform @@ -35033,7 +36544,8 @@ entities: - uid: 3522 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -16.5,25.5 parent: 853 type: Transform @@ -35042,7 +36554,8 @@ entities: - uid: 3523 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -15.5,25.5 parent: 853 type: Transform @@ -35051,7 +36564,8 @@ entities: - uid: 3524 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -14.5,25.5 parent: 853 type: Transform @@ -35060,7 +36574,8 @@ entities: - uid: 3525 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -13.5,25.5 parent: 853 type: Transform @@ -35069,7 +36584,8 @@ entities: - uid: 3526 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -12.5,25.5 parent: 853 type: Transform @@ -35078,7 +36594,8 @@ entities: - uid: 3527 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -11.5,25.5 parent: 853 type: Transform @@ -35087,7 +36604,8 @@ entities: - uid: 3528 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -10.5,25.5 parent: 853 type: Transform @@ -35096,7 +36614,8 @@ entities: - uid: 3529 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -9.5,25.5 parent: 853 type: Transform @@ -35105,7 +36624,8 @@ entities: - uid: 3530 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -8.5,25.5 parent: 853 type: Transform @@ -35114,7 +36634,8 @@ entities: - uid: 3531 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -7.5,25.5 parent: 853 type: Transform @@ -35123,7 +36644,8 @@ entities: - uid: 3532 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -7.5,24.5 parent: 853 type: Transform @@ -35132,7 +36654,8 @@ entities: - uid: 3533 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -6.5,24.5 parent: 853 type: Transform @@ -35141,7 +36664,8 @@ entities: - uid: 3534 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -5.5,24.5 parent: 853 type: Transform @@ -35150,7 +36674,8 @@ entities: - uid: 3535 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -4.5,24.5 parent: 853 type: Transform @@ -35159,7 +36684,8 @@ entities: - uid: 3536 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -4.5,24.5 parent: 853 type: Transform @@ -35168,7 +36694,8 @@ entities: - uid: 3537 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -4.5,23.5 parent: 853 type: Transform @@ -35177,7 +36704,8 @@ entities: - uid: 3538 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -4.5,22.5 parent: 853 type: Transform @@ -35186,7 +36714,8 @@ entities: - uid: 3539 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -4.5,21.5 parent: 853 type: Transform @@ -35195,7 +36724,8 @@ entities: - uid: 3540 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -4.5,21.5 parent: 853 type: Transform @@ -35204,7 +36734,8 @@ entities: - uid: 3541 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -3.5,21.5 parent: 853 type: Transform @@ -35213,7 +36744,8 @@ entities: - uid: 3542 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -2.5,21.5 parent: 853 type: Transform @@ -35222,7 +36754,8 @@ entities: - uid: 3543 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -1.5,21.5 parent: 853 type: Transform @@ -35231,7 +36764,8 @@ entities: - uid: 3544 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -0.5,21.5 parent: 853 type: Transform @@ -35240,7 +36774,8 @@ entities: - uid: 3545 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -0.5,20.5 parent: 853 type: Transform @@ -35249,7 +36784,8 @@ entities: - uid: 3546 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 0.5,20.5 parent: 853 type: Transform @@ -35260,7 +36796,8 @@ entities: - uid: 3547 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 1.5,20.5 parent: 853 type: Transform @@ -35271,7 +36808,8 @@ entities: - uid: 3548 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 2.5,20.5 parent: 853 type: Transform @@ -35282,7 +36820,8 @@ entities: - uid: 3549 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 3.5,20.5 parent: 853 type: Transform @@ -35293,7 +36832,8 @@ entities: - uid: 3550 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 4.5,20.5 parent: 853 type: Transform @@ -35304,7 +36844,8 @@ entities: - uid: 3551 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 5.5,20.5 parent: 853 type: Transform @@ -35315,7 +36856,8 @@ entities: - uid: 3552 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 6.5,20.5 parent: 853 type: Transform @@ -35326,7 +36868,8 @@ entities: - uid: 3553 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 7.5,20.5 parent: 853 type: Transform @@ -35337,7 +36880,8 @@ entities: - uid: 3554 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 8.5,20.5 parent: 853 type: Transform @@ -35348,7 +36892,8 @@ entities: - uid: 3555 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 9.5,20.5 parent: 853 type: Transform @@ -35359,7 +36904,8 @@ entities: - uid: 3556 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 10.5,20.5 parent: 853 type: Transform @@ -35370,7 +36916,8 @@ entities: - uid: 3557 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 11.5,20.5 parent: 853 type: Transform @@ -35381,7 +36928,8 @@ entities: - uid: 3558 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 12.5,20.5 parent: 853 type: Transform @@ -35390,7 +36938,8 @@ entities: - uid: 3559 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 12.5,21.5 parent: 853 type: Transform @@ -35401,7 +36950,8 @@ entities: - uid: 3560 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 12.5,22.5 parent: 853 type: Transform @@ -35412,7 +36962,8 @@ entities: - uid: 3561 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 12.5,23.5 parent: 853 type: Transform @@ -35423,7 +36974,8 @@ entities: - uid: 3562 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 12.5,24.5 parent: 853 type: Transform @@ -35432,7 +36984,8 @@ entities: - uid: 3563 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 11.5,24.5 parent: 853 type: Transform @@ -35441,7 +36994,8 @@ entities: - uid: 3564 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 12.5,20.5 parent: 853 type: Transform @@ -35450,7 +37004,8 @@ entities: - uid: 3565 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 12.5,19.5 parent: 853 type: Transform @@ -35459,7 +37014,8 @@ entities: - uid: 3566 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 12.5,18.5 parent: 853 type: Transform @@ -35468,7 +37024,8 @@ entities: - uid: 3567 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 12.5,17.5 parent: 853 type: Transform @@ -35477,7 +37034,8 @@ entities: - uid: 3568 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 12.5,16.5 parent: 853 type: Transform @@ -35486,7 +37044,8 @@ entities: - uid: 3569 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 12.5,15.5 parent: 853 type: Transform @@ -35495,7 +37054,8 @@ entities: - uid: 3570 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 12.5,14.5 parent: 853 type: Transform @@ -35504,7 +37064,8 @@ entities: - uid: 3571 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 11.5,14.5 parent: 853 type: Transform @@ -35513,7 +37074,8 @@ entities: - uid: 3572 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 10.5,14.5 parent: 853 type: Transform @@ -35522,7 +37084,8 @@ entities: - uid: 3573 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 10.5,13.5 parent: 853 type: Transform @@ -35531,7 +37094,8 @@ entities: - uid: 3574 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 10.5,12.5 parent: 853 type: Transform @@ -35540,7 +37104,8 @@ entities: - uid: 3575 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 10.5,11.5 parent: 853 type: Transform @@ -35551,7 +37116,8 @@ entities: - uid: 3576 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 11.5,11.5 parent: 853 type: Transform @@ -35560,7 +37126,8 @@ entities: - uid: 3577 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 12.5,11.5 parent: 853 type: Transform @@ -35571,7 +37138,8 @@ entities: - uid: 3578 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 13.5,11.5 parent: 853 type: Transform @@ -35590,7 +37158,8 @@ entities: - uid: 3580 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 15.5,11.5 parent: 853 type: Transform @@ -35601,7 +37170,8 @@ entities: - uid: 3581 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 16.5,11.5 parent: 853 type: Transform @@ -35612,7 +37182,8 @@ entities: - uid: 3582 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 17.5,11.5 parent: 853 type: Transform @@ -35623,7 +37194,8 @@ entities: - uid: 3583 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 18.5,11.5 parent: 853 type: Transform @@ -35634,7 +37206,8 @@ entities: - uid: 3584 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 19.5,11.5 parent: 853 type: Transform @@ -35645,7 +37218,8 @@ entities: - uid: 3585 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 20.5,11.5 parent: 853 type: Transform @@ -35656,7 +37230,8 @@ entities: - uid: 3586 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 21.5,11.5 parent: 853 type: Transform @@ -35667,7 +37242,8 @@ entities: - uid: 3587 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 22.5,11.5 parent: 853 type: Transform @@ -35678,7 +37254,8 @@ entities: - uid: 3588 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 23.5,11.5 parent: 853 type: Transform @@ -35689,7 +37266,8 @@ entities: - uid: 3589 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 24.5,11.5 parent: 853 type: Transform @@ -35700,7 +37278,8 @@ entities: - uid: 3590 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 25.5,11.5 parent: 853 type: Transform @@ -35709,7 +37288,8 @@ entities: - uid: 3591 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 26.5,11.5 parent: 853 type: Transform @@ -35720,7 +37300,8 @@ entities: - uid: 3592 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 27.5,11.5 parent: 853 type: Transform @@ -35731,7 +37312,8 @@ entities: - uid: 3593 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 27.5,12.5 parent: 853 type: Transform @@ -35742,7 +37324,8 @@ entities: - uid: 3594 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 27.5,13.5 parent: 853 type: Transform @@ -35751,7 +37334,8 @@ entities: - uid: 3595 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 28.5,11.5 parent: 853 type: Transform @@ -35762,7 +37346,8 @@ entities: - uid: 3596 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 29.5,11.5 parent: 853 type: Transform @@ -35771,7 +37356,8 @@ entities: - uid: 3597 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 30.5,11.5 parent: 853 type: Transform @@ -35782,7 +37368,8 @@ entities: - uid: 3598 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 31.5,11.5 parent: 853 type: Transform @@ -35793,7 +37380,8 @@ entities: - uid: 3599 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 32.5,11.5 parent: 853 type: Transform @@ -35804,7 +37392,8 @@ entities: - uid: 3600 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 33.5,11.5 parent: 853 type: Transform @@ -35815,7 +37404,8 @@ entities: - uid: 3601 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 34.5,11.5 parent: 853 type: Transform @@ -35826,7 +37416,8 @@ entities: - uid: 3602 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 34.5,10.5 parent: 853 type: Transform @@ -35837,7 +37428,8 @@ entities: - uid: 3603 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 34.5,9.5 parent: 853 type: Transform @@ -35848,7 +37440,8 @@ entities: - uid: 3604 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 34.5,8.5 parent: 853 type: Transform @@ -35859,7 +37452,8 @@ entities: - uid: 3605 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 34.5,7.5 parent: 853 type: Transform @@ -35868,7 +37462,8 @@ entities: - uid: 3606 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 34.5,6.5 parent: 853 type: Transform @@ -35879,7 +37474,8 @@ entities: - uid: 3607 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 34.5,5.5 parent: 853 type: Transform @@ -35890,7 +37486,8 @@ entities: - uid: 3608 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 35.5,5.5 parent: 853 type: Transform @@ -35901,7 +37498,8 @@ entities: - uid: 3609 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 36.5,5.5 parent: 853 type: Transform @@ -35912,7 +37510,8 @@ entities: - uid: 3610 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 37.5,5.5 parent: 853 type: Transform @@ -35923,7 +37522,8 @@ entities: - uid: 3611 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 38.5,5.5 parent: 853 type: Transform @@ -35934,7 +37534,8 @@ entities: - uid: 3612 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 39.5,5.5 parent: 853 type: Transform @@ -35997,7 +37598,8 @@ entities: - uid: 3619 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -0.5,-22.5 parent: 853 type: Transform @@ -36033,7 +37635,8 @@ entities: - uid: 3623 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 27.5,13.5 parent: 853 type: Transform @@ -36042,7 +37645,8 @@ entities: - uid: 3624 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 28.5,13.5 parent: 853 type: Transform @@ -36051,7 +37655,8 @@ entities: - uid: 3625 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 28.5,14.5 parent: 853 type: Transform @@ -36060,7 +37665,8 @@ entities: - uid: 3626 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 26.5,13.5 parent: 853 type: Transform @@ -36069,7 +37675,8 @@ entities: - uid: 3627 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 25.5,13.5 parent: 853 type: Transform @@ -36078,7 +37685,8 @@ entities: - uid: 3628 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 24.5,13.5 parent: 853 type: Transform @@ -36089,7 +37697,8 @@ entities: - uid: 3629 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 24.5,14.5 parent: 853 type: Transform @@ -36098,7 +37707,8 @@ entities: - uid: 3630 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 24.5,12.5 parent: 853 type: Transform @@ -36109,7 +37719,8 @@ entities: - uid: 3631 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 23.5,12.5 parent: 853 type: Transform @@ -36120,7 +37731,8 @@ entities: - uid: 3632 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 22.5,12.5 parent: 853 type: Transform @@ -36131,7 +37743,8 @@ entities: - uid: 3633 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 21.5,12.5 parent: 853 type: Transform @@ -36142,7 +37755,8 @@ entities: - uid: 3634 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 20.5,12.5 parent: 853 type: Transform @@ -36153,7 +37767,8 @@ entities: - uid: 3635 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 19.5,12.5 parent: 853 type: Transform @@ -36164,7 +37779,8 @@ entities: - uid: 3636 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 18.5,12.5 parent: 853 type: Transform @@ -36175,7 +37791,8 @@ entities: - uid: 3637 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 17.5,12.5 parent: 853 type: Transform @@ -36184,7 +37801,8 @@ entities: - uid: 3638 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 16.5,12.5 parent: 853 type: Transform @@ -36195,7 +37813,8 @@ entities: - uid: 3639 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 15.5,12.5 parent: 853 type: Transform @@ -36206,7 +37825,8 @@ entities: - uid: 3640 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 14.5,12.5 parent: 853 type: Transform @@ -36217,7 +37837,8 @@ entities: - uid: 3641 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 13.5,12.5 parent: 853 type: Transform @@ -36228,7 +37849,8 @@ entities: - uid: 3642 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 12.5,12.5 parent: 853 type: Transform @@ -36239,7 +37861,8 @@ entities: - uid: 3643 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 12.5,13.5 parent: 853 type: Transform @@ -36248,7 +37871,8 @@ entities: - uid: 3644 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 11.5,24.5 parent: 853 type: Transform @@ -36257,7 +37881,8 @@ entities: - uid: 3645 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 9.5,24.5 parent: 853 type: Transform @@ -36268,7 +37893,8 @@ entities: - uid: 3646 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 10.5,24.5 parent: 853 type: Transform @@ -36277,7 +37903,8 @@ entities: - uid: 3647 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 9.5,23.5 parent: 853 type: Transform @@ -36288,7 +37915,8 @@ entities: - uid: 3648 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 9.5,22.5 parent: 853 type: Transform @@ -36297,7 +37925,8 @@ entities: - uid: 3649 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 9.5,24.5 parent: 853 type: Transform @@ -36308,7 +37937,8 @@ entities: - uid: 3650 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 9.5,25.5 parent: 853 type: Transform @@ -36319,7 +37949,8 @@ entities: - uid: 3651 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 9.5,26.5 parent: 853 type: Transform @@ -36330,7 +37961,8 @@ entities: - uid: 3652 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 9.5,26.5 parent: 853 type: Transform @@ -36341,7 +37973,8 @@ entities: - uid: 3653 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 9.5,27.5 parent: 853 type: Transform @@ -36350,7 +37983,8 @@ entities: - uid: 3654 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 8.5,25.5 parent: 853 type: Transform @@ -36361,7 +37995,8 @@ entities: - uid: 3655 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 7.5,25.5 parent: 853 type: Transform @@ -36372,7 +38007,8 @@ entities: - uid: 3656 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 6.5,25.5 parent: 853 type: Transform @@ -36383,7 +38019,8 @@ entities: - uid: 3657 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 5.5,25.5 parent: 853 type: Transform @@ -36394,7 +38031,8 @@ entities: - uid: 3658 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 4.5,25.5 parent: 853 type: Transform @@ -36405,7 +38043,8 @@ entities: - uid: 3659 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 3.5,25.5 parent: 853 type: Transform @@ -36416,7 +38055,8 @@ entities: - uid: 3660 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 2.5,25.5 parent: 853 type: Transform @@ -36427,7 +38067,8 @@ entities: - uid: 3661 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 1.5,25.5 parent: 853 type: Transform @@ -36438,7 +38079,8 @@ entities: - uid: 3662 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 0.5,25.5 parent: 853 type: Transform @@ -36449,7 +38091,8 @@ entities: - uid: 3663 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 0.5,26.5 parent: 853 type: Transform @@ -36460,7 +38103,8 @@ entities: - uid: 3664 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 0.5,26.5 parent: 853 type: Transform @@ -36471,7 +38115,8 @@ entities: - uid: 3665 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -0.5,26.5 parent: 853 type: Transform @@ -36482,7 +38127,8 @@ entities: - uid: 3666 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -1.5,26.5 parent: 853 type: Transform @@ -36493,7 +38139,8 @@ entities: - uid: 3667 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -2.5,26.5 parent: 853 type: Transform @@ -36504,7 +38151,8 @@ entities: - uid: 3668 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -2.5,27.5 parent: 853 type: Transform @@ -36513,7 +38161,8 @@ entities: - uid: 3669 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 42.5,-0.5 parent: 853 type: Transform @@ -36522,7 +38171,8 @@ entities: - uid: 3670 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 43.5,-0.5 parent: 853 type: Transform @@ -36533,7 +38183,8 @@ entities: - uid: 3671 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 43.5,0.5 parent: 853 type: Transform @@ -36544,7 +38195,8 @@ entities: - uid: 3672 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 43.5,1.5 parent: 853 type: Transform @@ -36555,7 +38207,8 @@ entities: - uid: 3673 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 44.5,1.5 parent: 853 type: Transform @@ -36566,7 +38219,8 @@ entities: - uid: 3674 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 45.5,1.5 parent: 853 type: Transform @@ -36577,7 +38231,8 @@ entities: - uid: 3675 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 46.5,1.5 parent: 853 type: Transform @@ -36588,7 +38243,8 @@ entities: - uid: 3676 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 47.5,1.5 parent: 853 type: Transform @@ -36599,7 +38255,8 @@ entities: - uid: 3677 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 48.5,1.5 parent: 853 type: Transform @@ -36610,7 +38267,8 @@ entities: - uid: 3678 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 48.5,0.5 parent: 853 type: Transform @@ -36621,7 +38279,8 @@ entities: - uid: 3679 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 48.5,-0.5 parent: 853 type: Transform @@ -36632,7 +38291,8 @@ entities: - uid: 3680 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 48.5,-1.5 parent: 853 type: Transform @@ -36641,7 +38301,8 @@ entities: - uid: 3681 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 48.5,-2.5 parent: 853 type: Transform @@ -36650,7 +38311,8 @@ entities: - uid: 3682 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 47.5,-2.5 parent: 853 type: Transform @@ -36659,7 +38321,8 @@ entities: - uid: 3683 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 47.5,-1.5 parent: 853 type: Transform @@ -36668,7 +38331,8 @@ entities: - uid: 3684 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 41.5,-0.5 parent: 853 type: Transform @@ -36677,7 +38341,8 @@ entities: - uid: 3685 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 40.5,-0.5 parent: 853 type: Transform @@ -36688,7 +38353,8 @@ entities: - uid: 3686 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 39.5,-0.5 parent: 853 type: Transform @@ -36699,7 +38365,8 @@ entities: - uid: 3687 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 38.5,-0.5 parent: 853 type: Transform @@ -36710,7 +38377,8 @@ entities: - uid: 3688 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 37.5,-0.5 parent: 853 type: Transform @@ -36721,7 +38389,8 @@ entities: - uid: 3689 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 36.5,-0.5 parent: 853 type: Transform @@ -36730,7 +38399,8 @@ entities: - uid: 3690 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 35.5,-0.5 parent: 853 type: Transform @@ -36741,7 +38411,8 @@ entities: - uid: 3691 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 34.5,-0.5 parent: 853 type: Transform @@ -36752,7 +38423,8 @@ entities: - uid: 3692 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 33.5,-0.5 parent: 853 type: Transform @@ -36763,7 +38435,8 @@ entities: - uid: 3693 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 32.5,-0.5 parent: 853 type: Transform @@ -36774,7 +38447,8 @@ entities: - uid: 3694 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 32.5,0.5 parent: 853 type: Transform @@ -36785,7 +38459,8 @@ entities: - uid: 3695 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 31.5,0.5 parent: 853 type: Transform @@ -36796,7 +38471,8 @@ entities: - uid: 3696 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 31.5,1.5 parent: 853 type: Transform @@ -36805,7 +38481,8 @@ entities: - uid: 3697 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 43.5,2.5 parent: 853 type: Transform @@ -36816,7 +38493,8 @@ entities: - uid: 3698 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 43.5,3.5 parent: 853 type: Transform @@ -36827,7 +38505,8 @@ entities: - uid: 3699 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 43.5,4.5 parent: 853 type: Transform @@ -36838,7 +38517,8 @@ entities: - uid: 3700 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 43.5,5.5 parent: 853 type: Transform @@ -36849,7 +38529,8 @@ entities: - uid: 3701 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 43.5,6.5 parent: 853 type: Transform @@ -36860,7 +38541,8 @@ entities: - uid: 3702 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 43.5,7.5 parent: 853 type: Transform @@ -36871,7 +38553,8 @@ entities: - uid: 3703 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 43.5,8.5 parent: 853 type: Transform @@ -36882,7 +38565,8 @@ entities: - uid: 3704 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 43.5,9.5 parent: 853 type: Transform @@ -36893,7 +38577,8 @@ entities: - uid: 3705 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 43.5,10.5 parent: 853 type: Transform @@ -36902,7 +38587,8 @@ entities: - uid: 3706 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 21.5,-9.5 parent: 853 type: Transform @@ -36911,7 +38597,8 @@ entities: - uid: 3707 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 21.5,-8.5 parent: 853 type: Transform @@ -36920,7 +38607,8 @@ entities: - uid: 3708 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 21.5,-7.5 parent: 853 type: Transform @@ -36931,7 +38619,8 @@ entities: - uid: 3709 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 21.5,-6.5 parent: 853 type: Transform @@ -36942,7 +38631,8 @@ entities: - uid: 3710 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 21.5,-5.5 parent: 853 type: Transform @@ -36953,7 +38643,8 @@ entities: - uid: 3711 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 21.5,-4.5 parent: 853 type: Transform @@ -36964,7 +38655,8 @@ entities: - uid: 3712 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 22.5,-4.5 parent: 853 type: Transform @@ -36975,7 +38667,8 @@ entities: - uid: 3713 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 22.5,-3.5 parent: 853 type: Transform @@ -36984,7 +38677,8 @@ entities: - uid: 3714 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 20.5,-9.5 parent: 853 type: Transform @@ -36993,7 +38687,8 @@ entities: - uid: 3715 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 19.5,-9.5 parent: 853 type: Transform @@ -37004,7 +38699,8 @@ entities: - uid: 3716 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 21.5,-9.5 parent: 853 type: Transform @@ -37013,7 +38709,8 @@ entities: - uid: 3717 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 18.5,-9.5 parent: 853 type: Transform @@ -37024,7 +38721,8 @@ entities: - uid: 3718 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 17.5,-9.5 parent: 853 type: Transform @@ -37035,7 +38733,8 @@ entities: - uid: 3719 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 16.5,-9.5 parent: 853 type: Transform @@ -37046,7 +38745,8 @@ entities: - uid: 3720 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 15.5,-9.5 parent: 853 type: Transform @@ -37057,7 +38757,8 @@ entities: - uid: 3721 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 14.5,-9.5 parent: 853 type: Transform @@ -37068,7 +38769,8 @@ entities: - uid: 3722 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 13.5,-9.5 parent: 853 type: Transform @@ -37079,7 +38781,8 @@ entities: - uid: 3723 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 12.5,-9.5 parent: 853 type: Transform @@ -37090,7 +38793,8 @@ entities: - uid: 3724 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 11.5,-9.5 parent: 853 type: Transform @@ -37101,7 +38805,8 @@ entities: - uid: 3725 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 10.5,-9.5 parent: 853 type: Transform @@ -37112,7 +38817,8 @@ entities: - uid: 3726 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 9.5,-9.5 parent: 853 type: Transform @@ -37123,7 +38829,8 @@ entities: - uid: 3727 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 8.5,-9.5 parent: 853 type: Transform @@ -37134,7 +38841,8 @@ entities: - uid: 3728 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 8.5,-10.5 parent: 853 type: Transform @@ -37145,7 +38853,8 @@ entities: - uid: 3729 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 8.5,-11.5 parent: 853 type: Transform @@ -37156,7 +38865,8 @@ entities: - uid: 3730 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 8.5,-12.5 parent: 853 type: Transform @@ -37167,7 +38877,8 @@ entities: - uid: 3731 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 8.5,-13.5 parent: 853 type: Transform @@ -37178,7 +38889,8 @@ entities: - uid: 3732 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 8.5,-14.5 parent: 853 type: Transform @@ -37189,7 +38901,8 @@ entities: - uid: 3733 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 8.5,-15.5 parent: 853 type: Transform @@ -37200,7 +38913,8 @@ entities: - uid: 3734 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 8.5,-16.5 parent: 853 type: Transform @@ -37211,7 +38925,8 @@ entities: - uid: 3735 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 7.5,-16.5 parent: 853 type: Transform @@ -37222,7 +38937,8 @@ entities: - uid: 3736 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 7.5,-17.5 parent: 853 type: Transform @@ -37231,7 +38947,8 @@ entities: - uid: 3737 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 15.5,-8.5 parent: 853 type: Transform @@ -37242,7 +38959,8 @@ entities: - uid: 3738 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 15.5,-7.5 parent: 853 type: Transform @@ -37253,7 +38971,8 @@ entities: - uid: 3739 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 15.5,-6.5 parent: 853 type: Transform @@ -37264,7 +38983,8 @@ entities: - uid: 3740 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 15.5,-5.5 parent: 853 type: Transform @@ -37275,7 +38995,8 @@ entities: - uid: 3741 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 15.5,-4.5 parent: 853 type: Transform @@ -37286,7 +39007,8 @@ entities: - uid: 3742 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 15.5,-3.5 parent: 853 type: Transform @@ -37297,7 +39019,8 @@ entities: - uid: 3743 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 15.5,-2.5 parent: 853 type: Transform @@ -37308,7 +39031,8 @@ entities: - uid: 3744 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 15.5,-1.5 parent: 853 type: Transform @@ -37319,7 +39043,8 @@ entities: - uid: 3745 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 15.5,-0.5 parent: 853 type: Transform @@ -37330,7 +39055,8 @@ entities: - uid: 3746 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 15.5,0.5 parent: 853 type: Transform @@ -37341,7 +39067,8 @@ entities: - uid: 3747 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 15.5,1.5 parent: 853 type: Transform @@ -37352,7 +39079,8 @@ entities: - uid: 3748 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 16.5,1.5 parent: 853 type: Transform @@ -37363,7 +39091,8 @@ entities: - uid: 3749 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 16.5,2.5 parent: 853 type: Transform @@ -37372,7 +39101,8 @@ entities: - uid: 3750 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -0.5,-22.5 parent: 853 type: Transform @@ -37381,7 +39111,8 @@ entities: - uid: 3751 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -0.5,-21.5 parent: 853 type: Transform @@ -37390,7 +39121,8 @@ entities: - uid: 3752 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -0.5,-20.5 parent: 853 type: Transform @@ -37401,7 +39133,8 @@ entities: - uid: 3753 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -16.5,15.5 parent: 853 type: Transform @@ -37412,7 +39145,8 @@ entities: - uid: 3754 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -1.5,-19.5 parent: 853 type: Transform @@ -37423,7 +39157,8 @@ entities: - uid: 3755 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -1.5,-18.5 parent: 853 type: Transform @@ -37432,7 +39167,8 @@ entities: - uid: 3756 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -1.5,-20.5 parent: 853 type: Transform @@ -37443,7 +39179,8 @@ entities: - uid: 3757 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -2.5,-20.5 parent: 853 type: Transform @@ -37454,7 +39191,8 @@ entities: - uid: 3758 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -3.5,-20.5 parent: 853 type: Transform @@ -37465,7 +39203,8 @@ entities: - uid: 3759 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -4.5,-20.5 parent: 853 type: Transform @@ -37476,7 +39215,8 @@ entities: - uid: 3760 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -5.5,-20.5 parent: 853 type: Transform @@ -37487,7 +39227,8 @@ entities: - uid: 3761 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -6.5,-20.5 parent: 853 type: Transform @@ -37498,7 +39239,8 @@ entities: - uid: 3762 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -7.5,-20.5 parent: 853 type: Transform @@ -37509,7 +39251,8 @@ entities: - uid: 3763 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -8.5,-20.5 parent: 853 type: Transform @@ -37520,7 +39263,8 @@ entities: - uid: 3764 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -9.5,-20.5 parent: 853 type: Transform @@ -37531,7 +39275,8 @@ entities: - uid: 3765 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -9.5,-21.5 parent: 853 type: Transform @@ -37540,7 +39285,8 @@ entities: - uid: 3766 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -10.5,-20.5 parent: 853 type: Transform @@ -37551,7 +39297,8 @@ entities: - uid: 3767 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -11.5,-20.5 parent: 853 type: Transform @@ -37562,7 +39309,8 @@ entities: - uid: 3768 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -12.5,-20.5 parent: 853 type: Transform @@ -37573,7 +39321,8 @@ entities: - uid: 3769 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -13.5,-20.5 parent: 853 type: Transform @@ -37584,7 +39333,8 @@ entities: - uid: 3770 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -13.5,-19.5 parent: 853 type: Transform @@ -37595,7 +39345,8 @@ entities: - uid: 3771 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -13.5,-18.5 parent: 853 type: Transform @@ -37606,7 +39357,8 @@ entities: - uid: 3772 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -13.5,-17.5 parent: 853 type: Transform @@ -37617,7 +39369,8 @@ entities: - uid: 3773 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -14.5,-17.5 parent: 853 type: Transform @@ -37628,7 +39381,8 @@ entities: - uid: 3774 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -14.5,-16.5 parent: 853 type: Transform @@ -37637,7 +39391,8 @@ entities: - uid: 3775 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 0.5,-6.5 parent: 853 type: Transform @@ -37648,7 +39403,8 @@ entities: - uid: 3776 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 0.5,-7.5 parent: 853 type: Transform @@ -37657,7 +39413,8 @@ entities: - uid: 3777 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 0.5,-8.5 parent: 853 type: Transform @@ -37666,7 +39423,8 @@ entities: - uid: 3778 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -0.5,-8.5 parent: 853 type: Transform @@ -37677,7 +39435,8 @@ entities: - uid: 3779 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -1.5,-8.5 parent: 853 type: Transform @@ -37688,7 +39447,8 @@ entities: - uid: 3780 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -1.5,-9.5 parent: 853 type: Transform @@ -37699,7 +39459,8 @@ entities: - uid: 3781 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -2.5,-9.5 parent: 853 type: Transform @@ -37710,7 +39471,8 @@ entities: - uid: 3782 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -3.5,-9.5 parent: 853 type: Transform @@ -37721,7 +39483,8 @@ entities: - uid: 3783 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -4.5,-9.5 parent: 853 type: Transform @@ -37732,7 +39495,8 @@ entities: - uid: 3784 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -5.5,-9.5 parent: 853 type: Transform @@ -37743,7 +39507,8 @@ entities: - uid: 3785 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -5.5,-8.5 parent: 853 type: Transform @@ -37752,7 +39517,8 @@ entities: - uid: 3786 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -6.5,-9.5 parent: 853 type: Transform @@ -37763,7 +39529,8 @@ entities: - uid: 3787 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -7.5,-9.5 parent: 853 type: Transform @@ -37774,7 +39541,8 @@ entities: - uid: 3788 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -8.5,-9.5 parent: 853 type: Transform @@ -37785,7 +39553,8 @@ entities: - uid: 3789 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -9.5,-9.5 parent: 853 type: Transform @@ -37794,7 +39563,8 @@ entities: - uid: 3790 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -9.5,-8.5 parent: 853 type: Transform @@ -37803,7 +39573,8 @@ entities: - uid: 3791 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -9.5,-7.5 parent: 853 type: Transform @@ -37814,7 +39585,8 @@ entities: - uid: 3792 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -9.5,-6.5 parent: 853 type: Transform @@ -37825,7 +39597,8 @@ entities: - uid: 3793 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -10.5,-6.5 parent: 853 type: Transform @@ -37836,7 +39609,8 @@ entities: - uid: 3794 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -11.5,-6.5 parent: 853 type: Transform @@ -37847,7 +39621,8 @@ entities: - uid: 3795 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -12.5,-6.5 parent: 853 type: Transform @@ -37858,7 +39633,8 @@ entities: - uid: 3796 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -12.5,-5.5 parent: 853 type: Transform @@ -37867,7 +39643,8 @@ entities: - uid: 3797 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -12.5,-4.5 parent: 853 type: Transform @@ -37878,7 +39655,8 @@ entities: - uid: 3798 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -12.5,-3.5 parent: 853 type: Transform @@ -37889,7 +39667,8 @@ entities: - uid: 3799 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -12.5,-2.5 parent: 853 type: Transform @@ -37900,7 +39679,8 @@ entities: - uid: 3800 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -12.5,-1.5 parent: 853 type: Transform @@ -37911,7 +39691,8 @@ entities: - uid: 3801 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -12.5,-0.5 parent: 853 type: Transform @@ -37922,7 +39703,8 @@ entities: - uid: 3802 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -12.5,0.5 parent: 853 type: Transform @@ -37933,7 +39715,8 @@ entities: - uid: 3803 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -12.5,1.5 parent: 853 type: Transform @@ -37944,7 +39727,8 @@ entities: - uid: 3804 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -11.5,1.5 parent: 853 type: Transform @@ -37955,7 +39739,8 @@ entities: - uid: 3805 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -11.5,2.5 parent: 853 type: Transform @@ -37964,7 +39749,8 @@ entities: - uid: 3806 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -21.5,-10.5 parent: 853 type: Transform @@ -37975,7 +39761,8 @@ entities: - uid: 3807 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -21.5,-9.5 parent: 853 type: Transform @@ -37984,7 +39771,8 @@ entities: - uid: 3808 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -21.5,-8.5 parent: 853 type: Transform @@ -37995,7 +39783,8 @@ entities: - uid: 3809 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -20.5,-8.5 parent: 853 type: Transform @@ -38004,7 +39793,8 @@ entities: - uid: 3810 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -19.5,-8.5 parent: 853 type: Transform @@ -38015,7 +39805,8 @@ entities: - uid: 3811 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -18.5,-8.5 parent: 853 type: Transform @@ -38026,7 +39817,8 @@ entities: - uid: 3812 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -17.5,-8.5 parent: 853 type: Transform @@ -38037,7 +39829,8 @@ entities: - uid: 3813 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -17.5,-9.5 parent: 853 type: Transform @@ -38048,7 +39841,8 @@ entities: - uid: 3814 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -16.5,-9.5 parent: 853 type: Transform @@ -38057,7 +39851,8 @@ entities: - uid: 3815 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -15.5,-9.5 parent: 853 type: Transform @@ -38068,7 +39863,8 @@ entities: - uid: 3816 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -14.5,-9.5 parent: 853 type: Transform @@ -38079,7 +39875,8 @@ entities: - uid: 3817 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -14.5,-8.5 parent: 853 type: Transform @@ -38090,7 +39887,8 @@ entities: - uid: 3818 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -22.5,-8.5 parent: 853 type: Transform @@ -38101,7 +39899,8 @@ entities: - uid: 3819 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -21.5,-11.5 parent: 853 type: Transform @@ -38110,7 +39909,8 @@ entities: - uid: 3820 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -21.5,-12.5 parent: 853 type: Transform @@ -38119,7 +39919,8 @@ entities: - uid: 3821 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -20.5,-12.5 parent: 853 type: Transform @@ -38128,7 +39929,8 @@ entities: - uid: 3822 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -23.5,-8.5 parent: 853 type: Transform @@ -38139,7 +39941,8 @@ entities: - uid: 3823 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -24.5,-8.5 parent: 853 type: Transform @@ -38150,7 +39953,8 @@ entities: - uid: 3824 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -25.5,-8.5 parent: 853 type: Transform @@ -38161,7 +39965,8 @@ entities: - uid: 3825 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -26.5,-8.5 parent: 853 type: Transform @@ -38170,7 +39975,8 @@ entities: - uid: 3826 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -27.5,-8.5 parent: 853 type: Transform @@ -38181,7 +39987,8 @@ entities: - uid: 3827 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -28.5,-8.5 parent: 853 type: Transform @@ -38192,7 +39999,8 @@ entities: - uid: 3828 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -29.5,-8.5 parent: 853 type: Transform @@ -38203,7 +40011,8 @@ entities: - uid: 3829 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -29.5,-7.5 parent: 853 type: Transform @@ -38214,7 +40023,8 @@ entities: - uid: 3830 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -29.5,-6.5 parent: 853 type: Transform @@ -38223,7 +40033,8 @@ entities: - uid: 3831 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -29.5,-5.5 parent: 853 type: Transform @@ -38234,7 +40045,8 @@ entities: - uid: 3832 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -29.5,-4.5 parent: 853 type: Transform @@ -38245,7 +40057,8 @@ entities: - uid: 3833 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -30.5,-4.5 parent: 853 type: Transform @@ -38256,7 +40069,8 @@ entities: - uid: 3834 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -30.5,-3.5 parent: 853 type: Transform @@ -38265,7 +40079,8 @@ entities: - uid: 3835 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -32.5,7.5 parent: 853 type: Transform @@ -38274,7 +40089,8 @@ entities: - uid: 3836 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -32.5,8.5 parent: 853 type: Transform @@ -38283,7 +40099,8 @@ entities: - uid: 3837 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -32.5,9.5 parent: 853 type: Transform @@ -38292,7 +40109,8 @@ entities: - uid: 3838 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -33.5,9.5 parent: 853 type: Transform @@ -38301,7 +40119,8 @@ entities: - uid: 3839 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -34.5,9.5 parent: 853 type: Transform @@ -38312,7 +40131,8 @@ entities: - uid: 3840 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -35.5,9.5 parent: 853 type: Transform @@ -38323,7 +40143,8 @@ entities: - uid: 3841 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -36.5,9.5 parent: 853 type: Transform @@ -38334,7 +40155,8 @@ entities: - uid: 3842 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -37.5,9.5 parent: 853 type: Transform @@ -38345,7 +40167,8 @@ entities: - uid: 3843 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -38.5,9.5 parent: 853 type: Transform @@ -38356,7 +40179,8 @@ entities: - uid: 3844 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -38.5,10.5 parent: 853 type: Transform @@ -38367,7 +40191,8 @@ entities: - uid: 3845 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -39.5,10.5 parent: 853 type: Transform @@ -38378,7 +40203,8 @@ entities: - uid: 3846 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -39.5,11.5 parent: 853 type: Transform @@ -38387,7 +40213,8 @@ entities: - uid: 3847 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -28.5,12.5 parent: 853 type: Transform @@ -38396,7 +40223,8 @@ entities: - uid: 3848 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -31.5,9.5 parent: 853 type: Transform @@ -38407,7 +40235,8 @@ entities: - uid: 3849 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -31.5,10.5 parent: 853 type: Transform @@ -38418,7 +40247,8 @@ entities: - uid: 3850 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -31.5,11.5 parent: 853 type: Transform @@ -38429,7 +40259,8 @@ entities: - uid: 3851 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -31.5,12.5 parent: 853 type: Transform @@ -38440,7 +40271,8 @@ entities: - uid: 3852 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -31.5,13.5 parent: 853 type: Transform @@ -38451,7 +40283,8 @@ entities: - uid: 3853 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -30.5,13.5 parent: 853 type: Transform @@ -38462,7 +40295,8 @@ entities: - uid: 3854 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -29.5,13.5 parent: 853 type: Transform @@ -38473,7 +40307,8 @@ entities: - uid: 3855 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -28.5,13.5 parent: 853 type: Transform @@ -38484,7 +40319,8 @@ entities: - uid: 3856 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -15.5,16.5 parent: 853 type: Transform @@ -38493,7 +40329,8 @@ entities: - uid: 3857 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -14.5,16.5 parent: 853 type: Transform @@ -38504,7 +40341,8 @@ entities: - uid: 3858 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -13.5,16.5 parent: 853 type: Transform @@ -38515,7 +40353,8 @@ entities: - uid: 3859 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -13.5,15.5 parent: 853 type: Transform @@ -38526,7 +40365,8 @@ entities: - uid: 3860 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -13.5,14.5 parent: 853 type: Transform @@ -38537,7 +40377,8 @@ entities: - uid: 3861 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -13.5,13.5 parent: 853 type: Transform @@ -38548,7 +40389,8 @@ entities: - uid: 3862 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -12.5,13.5 parent: 853 type: Transform @@ -38559,7 +40401,8 @@ entities: - uid: 3863 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -12.5,12.5 parent: 853 type: Transform @@ -38568,7 +40411,8 @@ entities: - uid: 3864 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -11.5,13.5 parent: 853 type: Transform @@ -38579,7 +40423,8 @@ entities: - uid: 3865 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -10.5,13.5 parent: 853 type: Transform @@ -38588,7 +40433,8 @@ entities: - uid: 3866 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -9.5,13.5 parent: 853 type: Transform @@ -38599,7 +40445,8 @@ entities: - uid: 3867 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -8.5,13.5 parent: 853 type: Transform @@ -38610,7 +40457,8 @@ entities: - uid: 3868 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -7.5,13.5 parent: 853 type: Transform @@ -38621,7 +40469,8 @@ entities: - uid: 3869 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -6.5,13.5 parent: 853 type: Transform @@ -38632,7 +40481,8 @@ entities: - uid: 3870 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -5.5,13.5 parent: 853 type: Transform @@ -38643,7 +40493,8 @@ entities: - uid: 3871 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -4.5,13.5 parent: 853 type: Transform @@ -38654,7 +40505,8 @@ entities: - uid: 3872 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -3.5,13.5 parent: 853 type: Transform @@ -38665,7 +40517,8 @@ entities: - uid: 3873 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -3.5,14.5 parent: 853 type: Transform @@ -38676,7 +40529,8 @@ entities: - uid: 3874 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -3.5,15.5 parent: 853 type: Transform @@ -38685,7 +40539,8 @@ entities: - uid: 3875 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -15.5,16.5 parent: 853 type: Transform @@ -38694,7 +40549,8 @@ entities: - uid: 3876 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -16.5,16.5 parent: 853 type: Transform @@ -38716,13 +40572,16 @@ entities: pos: -15.015614,20.502157 parent: 853 type: Transform + - powerLoad: 0 + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer - uid: 3879 type: CableApcExtension components: - - pos: 22.5,-7.5 + - anchored: True + pos: 22.5,-7.5 parent: 853 type: Transform - visible: False @@ -39067,7 +40926,8 @@ entities: - uid: 3911 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -24.5,10.5 parent: 853 type: Transform @@ -39078,7 +40938,8 @@ entities: - uid: 3912 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -24.5,11.5 parent: 853 type: Transform @@ -39089,7 +40950,8 @@ entities: - uid: 3913 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 41.5,7.5 parent: 853 type: Transform @@ -39100,14 +40962,16 @@ entities: - uid: 3914 type: SalternGenerator components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 40.5,7.5 parent: 853 type: Transform - uid: 3915 type: SalternGenerator components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 42.5,7.5 parent: 853 type: Transform @@ -39118,6 +40982,8 @@ entities: pos: 6.105843,-25.592358 parent: 853 type: Transform + - powerLoad: 0 + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -39162,7 +41028,8 @@ entities: - uid: 3921 type: SalternApc components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -12.5,12.5 parent: 853 type: Transform @@ -39349,7 +41216,8 @@ entities: - uid: 3944 type: CableApcExtension components: - - pos: 3.5,0.5 + - anchored: True + pos: 3.5,0.5 parent: 853 type: Transform - visible: False @@ -39359,7 +41227,8 @@ entities: - uid: 3945 type: CableMV components: - - pos: 13.5,-24.5 + - anchored: True + pos: 13.5,-24.5 parent: 853 type: Transform - canCollide: False @@ -39367,7 +41236,8 @@ entities: - uid: 3946 type: CableMV components: - - pos: 13.5,-23.5 + - anchored: True + pos: 13.5,-23.5 parent: 853 type: Transform - canCollide: False @@ -39375,7 +41245,8 @@ entities: - uid: 3947 type: CableApcExtension components: - - pos: 8.5,20.5 + - anchored: True + pos: 8.5,20.5 parent: 853 type: Transform - visible: False @@ -39403,7 +41274,8 @@ entities: - uid: 3950 type: CableApcExtension components: - - pos: 3.5,1.5 + - anchored: True + pos: 3.5,1.5 parent: 853 type: Transform - visible: False @@ -39467,7 +41339,8 @@ entities: - uid: 3957 type: CableApcExtension components: - - pos: 2.5,0.5 + - anchored: True + pos: 2.5,0.5 parent: 853 type: Transform - visible: False @@ -39477,7 +41350,8 @@ entities: - uid: 3958 type: CableApcExtension components: - - pos: 1.5,0.5 + - anchored: True + pos: 1.5,0.5 parent: 853 type: Transform - visible: False @@ -39523,7 +41397,8 @@ entities: - uid: 3963 type: CableApcExtension components: - - pos: -31.5,5.5 + - anchored: True + pos: -31.5,5.5 parent: 853 type: Transform - visible: False @@ -39533,7 +41408,8 @@ entities: - uid: 3964 type: CableApcExtension components: - - pos: 7.5,20.5 + - anchored: True + pos: 7.5,20.5 parent: 853 type: Transform - visible: False @@ -39561,7 +41437,8 @@ entities: - uid: 3967 type: CableApcExtension components: - - pos: -30.5,5.5 + - anchored: True + pos: -30.5,5.5 parent: 853 type: Transform - visible: False @@ -39571,7 +41448,8 @@ entities: - uid: 3968 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -23.5,5.5 parent: 853 type: Transform @@ -39600,7 +41478,8 @@ entities: - uid: 3971 type: CableApcExtension components: - - pos: 12.5,-8.5 + - anchored: True + pos: 12.5,-8.5 parent: 853 type: Transform - visible: False @@ -39610,7 +41489,8 @@ entities: - uid: 3972 type: DisposalPipe components: - - rot: 4.71238902409608 rad + - anchored: True + rot: 4.71238902409608 rad pos: 25.5,3.5 parent: 853 type: Transform @@ -39629,7 +41509,8 @@ entities: - uid: 3974 type: CableApcExtension components: - - pos: 2.5,6.5 + - anchored: True + pos: 2.5,6.5 parent: 853 type: Transform - visible: False @@ -39639,7 +41520,8 @@ entities: - uid: 3975 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -26.5,7.5 parent: 853 type: Transform @@ -39648,7 +41530,8 @@ entities: - uid: 3976 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -26.5,6.5 parent: 853 type: Transform @@ -39657,7 +41540,8 @@ entities: - uid: 3977 type: CableApcExtension components: - - pos: -21.5,13.5 + - anchored: True + pos: -21.5,13.5 parent: 853 type: Transform - visible: False @@ -39676,7 +41560,8 @@ entities: - uid: 3979 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -26.5,6.5 parent: 853 type: Transform @@ -39685,7 +41570,8 @@ entities: - uid: 3980 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -26.5,5.5 parent: 853 type: Transform @@ -39703,7 +41589,8 @@ entities: - uid: 3982 type: CableApcExtension components: - - pos: 3.5,6.5 + - anchored: True + pos: 3.5,6.5 parent: 853 type: Transform - visible: False @@ -39713,7 +41600,8 @@ entities: - uid: 3983 type: CableApcExtension components: - - pos: 4.5,6.5 + - anchored: True + pos: 4.5,6.5 parent: 853 type: Transform - visible: False @@ -39741,7 +41629,8 @@ entities: - uid: 3986 type: CableApcExtension components: - - pos: 12.5,-9.5 + - anchored: True + pos: 12.5,-9.5 parent: 853 type: Transform - visible: False @@ -39787,7 +41676,8 @@ entities: - uid: 3991 type: CableApcExtension components: - - pos: -32.5,-8.5 + - anchored: True + pos: -32.5,-8.5 parent: 853 type: Transform - visible: False @@ -39914,7 +41804,8 @@ entities: - uid: 4005 type: CableApcExtension components: - - pos: -32.5,-7.5 + - anchored: True + pos: -32.5,-7.5 parent: 853 type: Transform - visible: False @@ -39953,6 +41844,8 @@ entities: pos: 2.100807,-25.514233 parent: 853 type: Transform + - powerLoad: 0 + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -40052,7 +41945,8 @@ entities: - uid: 4021 type: CableApcExtension components: - - pos: 23.5,-18.5 + - anchored: True + pos: 23.5,-18.5 parent: 853 type: Transform - visible: False @@ -40083,6 +41977,8 @@ entities: - pos: 7.512093,-22.139233 parent: 853 type: Transform + - powerLoad: 0 + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -40148,6 +42044,8 @@ entities: pos: -22.097801,-0.5190892 parent: 853 type: Transform + - powerLoad: 0 + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -40272,7 +42170,8 @@ entities: - uid: 4048 type: CableApcExtension components: - - pos: -18.5,13.5 + - anchored: True + pos: -18.5,13.5 parent: 853 type: Transform - canCollide: False @@ -40280,7 +42179,8 @@ entities: - uid: 4049 type: CableApcExtension components: - - pos: -17.5,13.5 + - anchored: True + pos: -17.5,13.5 parent: 853 type: Transform - canCollide: False @@ -40288,7 +42188,8 @@ entities: - uid: 4050 type: CableApcExtension components: - - pos: -17.5,14.5 + - anchored: True + pos: -17.5,14.5 parent: 853 type: Transform - canCollide: False @@ -40296,7 +42197,8 @@ entities: - uid: 4051 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -5.5,-26.5 parent: 853 type: Transform @@ -40313,7 +42215,8 @@ entities: - uid: 4053 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -5.5,-26.5 parent: 853 type: Transform @@ -40330,7 +42233,8 @@ entities: - uid: 4055 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -4.5,-26.5 parent: 853 type: Transform @@ -40395,7 +42299,8 @@ entities: - uid: 4063 type: CableApcExtension components: - - pos: -20.5,13.5 + - anchored: True + pos: -20.5,13.5 parent: 853 type: Transform - canCollide: False @@ -40412,7 +42317,8 @@ entities: - uid: 4065 type: CableApcExtension components: - - pos: -8.5,-7.5 + - anchored: True + pos: -8.5,-7.5 parent: 853 type: Transform - visible: False @@ -40422,7 +42328,8 @@ entities: - uid: 4066 type: CableApcExtension components: - - pos: -32.5,-6.5 + - anchored: True + pos: -32.5,-6.5 parent: 853 type: Transform - canCollide: False @@ -40446,7 +42353,8 @@ entities: - uid: 4069 type: CableApcExtension components: - - pos: -26.5,4.5 + - anchored: True + pos: -26.5,4.5 parent: 853 type: Transform - visible: False @@ -40482,7 +42390,8 @@ entities: - uid: 4073 type: CableApcExtension components: - - pos: -19.5,13.5 + - anchored: True + pos: -19.5,13.5 parent: 853 type: Transform - canCollide: False @@ -40490,7 +42399,8 @@ entities: - uid: 4074 type: CableApcExtension components: - - pos: 0.5,6.5 + - anchored: True + pos: 0.5,6.5 parent: 853 type: Transform - canCollide: False @@ -40498,7 +42408,8 @@ entities: - uid: 4075 type: CableApcExtension components: - - pos: -0.5,6.5 + - anchored: True + pos: -0.5,6.5 parent: 853 type: Transform - canCollide: False @@ -40533,7 +42444,8 @@ entities: - uid: 4080 type: CableMV components: - - pos: -5.5,-7.5 + - anchored: True + pos: -5.5,-7.5 parent: 853 type: Transform - visible: False @@ -40716,7 +42628,8 @@ entities: - uid: 4105 type: Catwalk components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -32.5,-7.5 parent: 853 type: Transform @@ -40776,12 +42689,12 @@ entities: - uid: 4111 type: SalternApc components: - - pos: -30.517641,-3.5 + - anchored: True + pos: -30.5,-3.5 parent: 853 type: Transform - startingCharge: 11999.233 type: Battery - - uid: 4112 type: Bed components: @@ -40867,6 +42780,8 @@ entities: pos: 44.01483,12.438765 parent: 853 type: Transform + - powerLoad: 0 + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -40877,6 +42792,8 @@ entities: pos: 46.108562,6.5075245 parent: 853 type: Transform + - powerLoad: 0 + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -40887,6 +42804,8 @@ entities: pos: -6.2755547,3.0213985 parent: 853 type: Transform + - powerLoad: 0 + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -41004,17 +42923,23 @@ entities: - uid: 4141 type: BedsheetOrange components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -2.5,7.5 parent: 853 type: Transform + - canCollide: False + type: Physics - uid: 4142 type: BedsheetOrange components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 0.5,7.5 parent: 853 type: Transform + - canCollide: False + type: Physics - uid: 4143 type: LockerGeneric components: @@ -41048,6 +42973,8 @@ entities: pos: -3.099586,-5.569584 parent: 853 type: Transform + - powerLoad: 0 + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -41057,6 +42984,8 @@ entities: - pos: -13.50299,1.8497577 parent: 853 type: Transform + - powerLoad: 0 + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -41066,6 +42995,8 @@ entities: - pos: -9.505926,1.8653827 parent: 853 type: Transform + - powerLoad: 0 + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -41076,6 +43007,8 @@ entities: pos: -7.889039,-4.569584 parent: 853 type: Transform + - powerLoad: 0 + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -41093,55 +43026,64 @@ entities: pos: -2.9115314,24.482988 parent: 853 type: Transform + - powerLoad: 0 + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer - uid: 4151 type: hydroponicsTray components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -18.5,1.5 parent: 853 type: Transform - uid: 4152 type: hydroponicsTray components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -19.5,1.5 parent: 853 type: Transform - uid: 4153 type: hydroponicsTray components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -20.5,1.5 parent: 853 type: Transform - uid: 4154 type: hydroponicsTray components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -20.5,0.5 parent: 853 type: Transform - uid: 4155 type: hydroponicsTray components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -20.5,-0.5 parent: 853 type: Transform - uid: 4156 type: hydroponicsTray components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -19.5,-0.5 parent: 853 type: Transform - uid: 4157 type: hydroponicsTray components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -18.5,-0.5 parent: 853 type: Transform @@ -41169,7 +43111,8 @@ entities: - uid: 4161 type: Morgue components: - - rot: 1.5707963705062866 rad + - anchored: True + rot: 1.5707963705062866 rad pos: 12.5,-13.5 parent: 853 type: Transform @@ -41181,7 +43124,8 @@ entities: - uid: 4162 type: Morgue components: - - rot: 1.5707963705062866 rad + - anchored: True + rot: 1.5707963705062866 rad pos: 12.5,-14.5 parent: 853 type: Transform @@ -41193,7 +43137,8 @@ entities: - uid: 4163 type: Morgue components: - - rot: 1.5707963705062866 rad + - anchored: True + rot: 1.5707963705062866 rad pos: 12.5,-15.5 parent: 853 type: Transform @@ -41205,7 +43150,8 @@ entities: - uid: 4164 type: Morgue components: - - rot: 1.5707963705062866 rad + - anchored: True + rot: 1.5707963705062866 rad pos: 12.5,-16.5 parent: 853 type: Transform @@ -41217,7 +43163,8 @@ entities: - uid: 4165 type: Morgue components: - - rot: 1.5707963705062866 rad + - anchored: True + rot: 1.5707963705062866 rad pos: 12.5,-17.5 parent: 853 type: Transform @@ -41333,6 +43280,8 @@ entities: - pos: 38.499187,9.874689 parent: 853 type: Transform + - powerLoad: 0 + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -41342,6 +43291,8 @@ entities: - pos: 38.503914,-3.2242432 parent: 853 type: Transform + - powerLoad: 0 + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -41362,7 +43313,8 @@ entities: - uid: 4182 type: KitchenReagentGrinder components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: -14.5,-0.5 parent: 853 type: Transform @@ -41374,7 +43326,8 @@ entities: - uid: 4183 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 26.5,-10.5 parent: 853 type: Transform @@ -41383,7 +43336,8 @@ entities: - uid: 4184 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 25.5,-10.5 parent: 853 type: Transform @@ -41536,6 +43490,8 @@ entities: pos: 47.090073,-10.509963 parent: 853 type: Transform + - powerLoad: 0 + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -41856,7 +43812,8 @@ entities: - uid: 4247 type: KitchenMicrowave components: - - pos: -7.5,-28.5 + - anchored: True + pos: -7.5,-28.5 parent: 853 type: Transform - containers: @@ -41951,6 +43908,8 @@ entities: pos: 51.918198,-10.509963 parent: 853 type: Transform + - powerLoad: 0 + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -42181,7 +44140,8 @@ entities: - uid: 4290 type: SingularityGenerator components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 49.5,-24.5 parent: 853 type: Transform @@ -42414,13 +44374,16 @@ entities: pos: 38.030457,12.470015 parent: 853 type: Transform + - powerLoad: 0 + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer - uid: 4322 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 45.5,8.5 parent: 853 type: Transform @@ -42431,7 +44394,8 @@ entities: - uid: 4323 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 46.5,8.5 parent: 853 type: Transform @@ -42442,7 +44406,8 @@ entities: - uid: 4324 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 46.5,12.5 parent: 853 type: Transform @@ -42453,7 +44418,8 @@ entities: - uid: 4325 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 47.5,9.5 parent: 853 type: Transform @@ -42464,7 +44430,8 @@ entities: - uid: 4326 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 47.5,10.5 parent: 853 type: Transform @@ -42475,7 +44442,8 @@ entities: - uid: 4327 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 47.5,11.5 parent: 853 type: Transform @@ -42486,7 +44454,8 @@ entities: - uid: 4328 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 47.5,12.5 parent: 853 type: Transform @@ -42497,7 +44466,8 @@ entities: - uid: 4329 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 47.5,8.5 parent: 853 type: Transform @@ -42508,7 +44478,8 @@ entities: - uid: 4330 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 47.5,7.5 parent: 853 type: Transform @@ -42519,7 +44490,8 @@ entities: - uid: 4331 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 49.5,12.5 parent: 853 type: Transform @@ -42530,7 +44502,8 @@ entities: - uid: 4332 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 49.5,11.5 parent: 853 type: Transform @@ -42541,7 +44514,8 @@ entities: - uid: 4333 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 49.5,10.5 parent: 853 type: Transform @@ -42552,7 +44526,8 @@ entities: - uid: 4334 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 49.5,9.5 parent: 853 type: Transform @@ -42563,7 +44538,8 @@ entities: - uid: 4335 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 49.5,8.5 parent: 853 type: Transform @@ -42574,7 +44550,8 @@ entities: - uid: 4336 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 49.5,7.5 parent: 853 type: Transform @@ -42585,7 +44562,8 @@ entities: - uid: 4337 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 48.5,9.5 parent: 853 type: Transform @@ -42600,13 +44578,16 @@ entities: pos: 35.905144,-2.4519515 parent: 853 type: Transform + - powerLoad: 0 + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer - uid: 4339 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 42.5,7.5 parent: 853 type: Transform @@ -42617,7 +44598,8 @@ entities: - uid: 4340 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 43.5,7.5 parent: 853 type: Transform @@ -42628,7 +44610,8 @@ entities: - uid: 4341 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 44.5,7.5 parent: 853 type: Transform @@ -42639,7 +44622,8 @@ entities: - uid: 4342 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 45.5,7.5 parent: 853 type: Transform @@ -42650,7 +44634,8 @@ entities: - uid: 4343 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 46.5,7.5 parent: 853 type: Transform @@ -42661,7 +44646,8 @@ entities: - uid: 4344 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 47.5,7.5 parent: 853 type: Transform @@ -42672,7 +44658,8 @@ entities: - uid: 4345 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 48.5,7.5 parent: 853 type: Transform @@ -42683,7 +44670,8 @@ entities: - uid: 4346 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 48.5,8.5 parent: 853 type: Transform @@ -42694,7 +44682,8 @@ entities: - uid: 4347 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 48.5,9.5 parent: 853 type: Transform @@ -42705,7 +44694,8 @@ entities: - uid: 4348 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 48.5,10.5 parent: 853 type: Transform @@ -42716,7 +44706,8 @@ entities: - uid: 4349 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 48.5,11.5 parent: 853 type: Transform @@ -42727,7 +44718,8 @@ entities: - uid: 4350 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 48.5,12.5 parent: 853 type: Transform @@ -43096,88 +45088,101 @@ entities: - uid: 4401 type: Emitter components: - - pos: 45.5,-17.5 + - anchored: True + pos: 45.5,-17.5 parent: 853 type: Transform - uid: 4402 type: Emitter components: - - pos: 49.5,-17.5 + - anchored: True + pos: 49.5,-17.5 parent: 853 type: Transform - uid: 4403 type: Emitter components: - - pos: 53.5,-17.5 + - anchored: True + pos: 53.5,-17.5 parent: 853 type: Transform - uid: 4404 type: Emitter components: - - rot: -1.5707963267948966 rad + - anchored: True + rot: -1.5707963267948966 rad pos: 56.5,-20.5 parent: 853 type: Transform - uid: 4405 type: Emitter components: - - rot: -1.5707963267948966 rad + - anchored: True + rot: -1.5707963267948966 rad pos: 56.5,-24.5 parent: 853 type: Transform - uid: 4406 type: Emitter components: - - rot: -1.5707963267948966 rad + - anchored: True + rot: -1.5707963267948966 rad pos: 56.5,-28.5 parent: 853 type: Transform - uid: 4407 type: Emitter components: - - rot: 3.141592653589793 rad + - anchored: True + rot: 3.141592653589793 rad pos: 53.5,-31.5 parent: 853 type: Transform - uid: 4408 type: Emitter components: - - rot: 3.141592653589793 rad + - anchored: True + rot: 3.141592653589793 rad pos: 49.5,-31.5 parent: 853 type: Transform - uid: 4409 type: Emitter components: - - rot: 3.141592653589793 rad + - anchored: True + rot: 3.141592653589793 rad pos: 45.5,-31.5 parent: 853 type: Transform - uid: 4410 type: Emitter components: - - rot: 1.5707963267948966 rad + - anchored: True + rot: 1.5707963267948966 rad pos: 42.5,-28.5 parent: 853 type: Transform - uid: 4411 type: Emitter components: - - rot: 1.5707963267948966 rad + - anchored: True + rot: 1.5707963267948966 rad pos: 42.5,-24.5 parent: 853 type: Transform - uid: 4412 type: Emitter components: - - rot: 1.5707963267948966 rad + - anchored: True + rot: 1.5707963267948966 rad pos: 42.5,-20.5 parent: 853 type: Transform - uid: 4413 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 44.5,-12.5 parent: 853 type: Transform @@ -43186,7 +45191,8 @@ entities: - uid: 4414 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 44.5,-11.5 parent: 853 type: Transform @@ -43195,7 +45201,8 @@ entities: - uid: 4415 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 44.5,-10.5 parent: 853 type: Transform @@ -43204,7 +45211,8 @@ entities: - uid: 4416 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 44.5,-9.5 parent: 853 type: Transform @@ -43213,7 +45221,8 @@ entities: - uid: 4417 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 45.5,-9.5 parent: 853 type: Transform @@ -43222,7 +45231,8 @@ entities: - uid: 4418 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 46.5,-9.5 parent: 853 type: Transform @@ -43233,7 +45243,8 @@ entities: - uid: 4419 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 54.5,-12.5 parent: 853 type: Transform @@ -43242,7 +45253,8 @@ entities: - uid: 4420 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 54.5,-11.5 parent: 853 type: Transform @@ -43251,7 +45263,8 @@ entities: - uid: 4421 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 54.5,-10.5 parent: 853 type: Transform @@ -43260,7 +45273,8 @@ entities: - uid: 4422 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 54.5,-9.5 parent: 853 type: Transform @@ -43269,7 +45283,8 @@ entities: - uid: 4423 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 53.5,-9.5 parent: 853 type: Transform @@ -43278,7 +45293,8 @@ entities: - uid: 4424 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 52.5,-9.5 parent: 853 type: Transform @@ -43289,7 +45305,8 @@ entities: - uid: 4425 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 51.5,-9.5 parent: 853 type: Transform @@ -43298,7 +45315,8 @@ entities: - uid: 4426 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 47.5,-9.5 parent: 853 type: Transform @@ -43307,7 +45325,8 @@ entities: - uid: 4427 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 48.5,-9.5 parent: 853 type: Transform @@ -43318,7 +45337,8 @@ entities: - uid: 4428 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 49.5,-9.5 parent: 853 type: Transform @@ -43329,7 +45349,8 @@ entities: - uid: 4429 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 50.5,-9.5 parent: 853 type: Transform @@ -43340,7 +45361,8 @@ entities: - uid: 4430 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 49.5,-8.5 parent: 853 type: Transform @@ -43349,7 +45371,8 @@ entities: - uid: 4431 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 49.5,-7.5 parent: 853 type: Transform @@ -43360,7 +45383,8 @@ entities: - uid: 4432 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 49.5,-6.5 parent: 853 type: Transform @@ -43369,7 +45393,8 @@ entities: - uid: 4433 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 48.5,-6.5 parent: 853 type: Transform @@ -43378,7 +45403,8 @@ entities: - uid: 4434 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 47.5,-6.5 parent: 853 type: Transform @@ -43387,7 +45413,8 @@ entities: - uid: 4435 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 47.5,-5.5 parent: 853 type: Transform @@ -43396,7 +45423,8 @@ entities: - uid: 4436 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 47.5,-4.5 parent: 853 type: Transform @@ -43405,7 +45433,8 @@ entities: - uid: 4437 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 49.5,-10.5 parent: 853 type: Transform @@ -43416,7 +45445,8 @@ entities: - uid: 4438 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 49.5,-11.5 parent: 853 type: Transform @@ -43427,7 +45457,8 @@ entities: - uid: 4439 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 49.5,-12.5 parent: 853 type: Transform @@ -43438,7 +45469,8 @@ entities: - uid: 4440 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 48.5,-11.5 parent: 853 type: Transform @@ -43449,7 +45481,8 @@ entities: - uid: 4441 type: CableApcExtension components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 50.5,-11.5 parent: 853 type: Transform @@ -43460,7 +45493,8 @@ entities: - uid: 4442 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 45.5,-11.5 parent: 853 type: Transform @@ -43469,7 +45503,8 @@ entities: - uid: 4443 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 45.5,-10.5 parent: 853 type: Transform @@ -43480,7 +45515,8 @@ entities: - uid: 4444 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 45.5,-12.5 parent: 853 type: Transform @@ -43491,7 +45527,8 @@ entities: - uid: 4445 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 46.5,-11.5 parent: 853 type: Transform @@ -43500,7 +45537,8 @@ entities: - uid: 4446 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 47.5,-11.5 parent: 853 type: Transform @@ -43509,7 +45547,8 @@ entities: - uid: 4447 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 48.5,-11.5 parent: 853 type: Transform @@ -43520,7 +45559,8 @@ entities: - uid: 4448 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 48.5,-10.5 parent: 853 type: Transform @@ -43531,7 +45571,8 @@ entities: - uid: 4449 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 49.5,-10.5 parent: 853 type: Transform @@ -43542,7 +45583,8 @@ entities: - uid: 4450 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 50.5,-10.5 parent: 853 type: Transform @@ -43553,7 +45595,8 @@ entities: - uid: 4451 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 49.5,-12.5 parent: 853 type: Transform @@ -43564,7 +45607,8 @@ entities: - uid: 4452 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 51.5,-11.5 parent: 853 type: Transform @@ -43573,7 +45617,8 @@ entities: - uid: 4453 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 52.5,-11.5 parent: 853 type: Transform @@ -43582,7 +45627,8 @@ entities: - uid: 4454 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 53.5,-11.5 parent: 853 type: Transform @@ -43591,7 +45637,8 @@ entities: - uid: 4455 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 53.5,-10.5 parent: 853 type: Transform @@ -43602,7 +45649,8 @@ entities: - uid: 4456 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 53.5,-12.5 parent: 853 type: Transform @@ -43613,7 +45661,8 @@ entities: - uid: 4457 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 49.5,-9.5 parent: 853 type: Transform @@ -43624,7 +45673,8 @@ entities: - uid: 4458 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 49.5,-8.5 parent: 853 type: Transform @@ -43633,7 +45683,8 @@ entities: - uid: 4459 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 49.5,-7.5 parent: 853 type: Transform @@ -43644,7 +45695,8 @@ entities: - uid: 4460 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 49.5,-6.5 parent: 853 type: Transform @@ -43653,7 +45705,8 @@ entities: - uid: 4461 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 48.5,-6.5 parent: 853 type: Transform @@ -43662,7 +45715,8 @@ entities: - uid: 4462 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 47.5,-6.5 parent: 853 type: Transform @@ -43671,7 +45725,8 @@ entities: - uid: 4463 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 47.5,-5.5 parent: 853 type: Transform @@ -43680,7 +45735,8 @@ entities: - uid: 4464 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 47.5,-4.5 parent: 853 type: Transform @@ -43689,7 +45745,8 @@ entities: - uid: 4465 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 47.5,-3.5 parent: 853 type: Transform @@ -43698,7 +45755,8 @@ entities: - uid: 4466 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 47.5,-2.5 parent: 853 type: Transform @@ -43707,7 +45765,8 @@ entities: - uid: 4467 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 48.5,-2.5 parent: 853 type: Transform @@ -43716,7 +45775,8 @@ entities: - uid: 4468 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 48.5,-1.5 parent: 853 type: Transform @@ -43725,7 +45785,8 @@ entities: - uid: 4469 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 48.5,-0.5 parent: 853 type: Transform @@ -43736,7 +45797,8 @@ entities: - uid: 4470 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 48.5,0.5 parent: 853 type: Transform @@ -43747,7 +45809,8 @@ entities: - uid: 4471 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 48.5,1.5 parent: 853 type: Transform @@ -43758,7 +45821,8 @@ entities: - uid: 4472 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 47.5,1.5 parent: 853 type: Transform @@ -43769,7 +45833,8 @@ entities: - uid: 4473 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 46.5,1.5 parent: 853 type: Transform @@ -43780,7 +45845,8 @@ entities: - uid: 4474 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 45.5,1.5 parent: 853 type: Transform @@ -43791,7 +45857,8 @@ entities: - uid: 4475 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 44.5,1.5 parent: 853 type: Transform @@ -43873,6 +45940,8 @@ entities: pos: 12.942612,-25.529858 parent: 853 type: Transform + - powerLoad: 0 + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -43883,6 +45952,8 @@ entities: pos: 4.928932,-28.529858 parent: 853 type: Transform + - powerLoad: 0 + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -43893,6 +45964,8 @@ entities: pos: -2.0884767,-23.529858 parent: 853 type: Transform + - powerLoad: 0 + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -43903,13 +45976,16 @@ entities: pos: -13.129641,-21.475588 parent: 853 type: Transform + - powerLoad: 0 + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer - uid: 4487 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 45.5,-10.5 parent: 853 type: Transform @@ -43920,7 +45996,8 @@ entities: - uid: 4488 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 45.5,-11.5 parent: 853 type: Transform @@ -43929,7 +46006,8 @@ entities: - uid: 4489 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 53.5,-10.5 parent: 853 type: Transform @@ -43940,7 +46018,8 @@ entities: - uid: 4490 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 53.5,-11.5 parent: 853 type: Transform @@ -43949,7 +46028,8 @@ entities: - uid: 4491 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 52.5,-11.5 parent: 853 type: Transform @@ -43958,7 +46038,8 @@ entities: - uid: 4492 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 51.5,-11.5 parent: 853 type: Transform @@ -43967,7 +46048,8 @@ entities: - uid: 4493 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 51.5,-12.5 parent: 853 type: Transform @@ -43976,7 +46058,8 @@ entities: - uid: 4494 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 46.5,-11.5 parent: 853 type: Transform @@ -43985,7 +46068,8 @@ entities: - uid: 4495 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 47.5,-11.5 parent: 853 type: Transform @@ -43994,7 +46078,8 @@ entities: - uid: 4496 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 47.5,-12.5 parent: 853 type: Transform @@ -44003,7 +46088,8 @@ entities: - uid: 4497 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 47.5,-13.5 parent: 853 type: Transform @@ -44012,7 +46098,8 @@ entities: - uid: 4498 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 49.5,-13.5 parent: 853 type: Transform @@ -44021,7 +46108,8 @@ entities: - uid: 4499 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 48.5,-13.5 parent: 853 type: Transform @@ -44030,7 +46118,8 @@ entities: - uid: 4500 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 50.5,-13.5 parent: 853 type: Transform @@ -44039,7 +46128,8 @@ entities: - uid: 4501 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 51.5,-13.5 parent: 853 type: Transform @@ -44048,7 +46138,8 @@ entities: - uid: 4502 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 49.5,-14.5 parent: 853 type: Transform @@ -44057,7 +46148,8 @@ entities: - uid: 4503 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 49.5,-15.5 parent: 853 type: Transform @@ -44066,7 +46158,8 @@ entities: - uid: 4504 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 49.5,-16.5 parent: 853 type: Transform @@ -44075,7 +46168,8 @@ entities: - uid: 4505 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 49.5,-17.5 parent: 853 type: Transform @@ -44084,7 +46178,8 @@ entities: - uid: 4506 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 48.5,-17.5 parent: 853 type: Transform @@ -44093,7 +46188,8 @@ entities: - uid: 4507 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 47.5,-17.5 parent: 853 type: Transform @@ -44102,7 +46198,8 @@ entities: - uid: 4508 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 46.5,-17.5 parent: 853 type: Transform @@ -44111,7 +46208,8 @@ entities: - uid: 4509 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 45.5,-17.5 parent: 853 type: Transform @@ -44120,7 +46218,8 @@ entities: - uid: 4510 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 50.5,-17.5 parent: 853 type: Transform @@ -44129,7 +46228,8 @@ entities: - uid: 4511 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 51.5,-17.5 parent: 853 type: Transform @@ -44138,7 +46238,8 @@ entities: - uid: 4512 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 52.5,-17.5 parent: 853 type: Transform @@ -44147,7 +46248,8 @@ entities: - uid: 4513 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 53.5,-17.5 parent: 853 type: Transform @@ -44156,7 +46258,8 @@ entities: - uid: 4514 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 54.5,-17.5 parent: 853 type: Transform @@ -44165,7 +46268,8 @@ entities: - uid: 4515 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 55.5,-17.5 parent: 853 type: Transform @@ -44174,7 +46278,8 @@ entities: - uid: 4516 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 56.5,-17.5 parent: 853 type: Transform @@ -44183,7 +46288,8 @@ entities: - uid: 4517 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 56.5,-18.5 parent: 853 type: Transform @@ -44192,7 +46298,8 @@ entities: - uid: 4518 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 56.5,-19.5 parent: 853 type: Transform @@ -44201,7 +46308,8 @@ entities: - uid: 4519 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 56.5,-20.5 parent: 853 type: Transform @@ -44210,7 +46318,8 @@ entities: - uid: 4520 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 56.5,-21.5 parent: 853 type: Transform @@ -44219,7 +46328,8 @@ entities: - uid: 4521 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 56.5,-22.5 parent: 853 type: Transform @@ -44228,7 +46338,8 @@ entities: - uid: 4522 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 56.5,-23.5 parent: 853 type: Transform @@ -44237,7 +46348,8 @@ entities: - uid: 4523 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 56.5,-24.5 parent: 853 type: Transform @@ -44246,7 +46358,8 @@ entities: - uid: 4524 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 56.5,-25.5 parent: 853 type: Transform @@ -44255,7 +46368,8 @@ entities: - uid: 4525 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 56.5,-26.5 parent: 853 type: Transform @@ -44264,7 +46378,8 @@ entities: - uid: 4526 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 56.5,-27.5 parent: 853 type: Transform @@ -44273,7 +46388,8 @@ entities: - uid: 4527 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 56.5,-28.5 parent: 853 type: Transform @@ -44282,7 +46398,8 @@ entities: - uid: 4528 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 56.5,-29.5 parent: 853 type: Transform @@ -44291,7 +46408,8 @@ entities: - uid: 4529 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 56.5,-30.5 parent: 853 type: Transform @@ -44300,7 +46418,8 @@ entities: - uid: 4530 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 56.5,-31.5 parent: 853 type: Transform @@ -44309,7 +46428,8 @@ entities: - uid: 4531 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 55.5,-31.5 parent: 853 type: Transform @@ -44318,7 +46438,8 @@ entities: - uid: 4532 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 54.5,-31.5 parent: 853 type: Transform @@ -44327,7 +46448,8 @@ entities: - uid: 4533 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 53.5,-31.5 parent: 853 type: Transform @@ -44336,7 +46458,8 @@ entities: - uid: 4534 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 52.5,-31.5 parent: 853 type: Transform @@ -44345,7 +46468,8 @@ entities: - uid: 4535 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 51.5,-31.5 parent: 853 type: Transform @@ -44354,7 +46478,8 @@ entities: - uid: 4536 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 50.5,-31.5 parent: 853 type: Transform @@ -44363,7 +46488,8 @@ entities: - uid: 4537 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 49.5,-31.5 parent: 853 type: Transform @@ -44372,7 +46498,8 @@ entities: - uid: 4538 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 48.5,-31.5 parent: 853 type: Transform @@ -44381,7 +46508,8 @@ entities: - uid: 4539 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 47.5,-31.5 parent: 853 type: Transform @@ -44390,7 +46518,8 @@ entities: - uid: 4540 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 46.5,-31.5 parent: 853 type: Transform @@ -44399,7 +46528,8 @@ entities: - uid: 4541 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 45.5,-31.5 parent: 853 type: Transform @@ -44408,7 +46538,8 @@ entities: - uid: 4542 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 44.5,-31.5 parent: 853 type: Transform @@ -44417,7 +46548,8 @@ entities: - uid: 4543 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 43.5,-31.5 parent: 853 type: Transform @@ -44426,7 +46558,8 @@ entities: - uid: 4544 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 42.5,-31.5 parent: 853 type: Transform @@ -44435,7 +46568,8 @@ entities: - uid: 4545 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 42.5,-30.5 parent: 853 type: Transform @@ -44444,7 +46578,8 @@ entities: - uid: 4546 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 42.5,-29.5 parent: 853 type: Transform @@ -44453,7 +46588,8 @@ entities: - uid: 4547 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 42.5,-28.5 parent: 853 type: Transform @@ -44462,7 +46598,8 @@ entities: - uid: 4548 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 42.5,-27.5 parent: 853 type: Transform @@ -44471,7 +46608,8 @@ entities: - uid: 4549 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 42.5,-26.5 parent: 853 type: Transform @@ -44480,7 +46618,8 @@ entities: - uid: 4550 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 42.5,-25.5 parent: 853 type: Transform @@ -44489,7 +46628,8 @@ entities: - uid: 4551 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 42.5,-22.5 parent: 853 type: Transform @@ -44498,7 +46638,8 @@ entities: - uid: 4552 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 42.5,-23.5 parent: 853 type: Transform @@ -44507,7 +46648,8 @@ entities: - uid: 4553 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 42.5,-24.5 parent: 853 type: Transform @@ -44516,7 +46658,8 @@ entities: - uid: 4554 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 42.5,-21.5 parent: 853 type: Transform @@ -44525,7 +46668,8 @@ entities: - uid: 4555 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 42.5,-20.5 parent: 853 type: Transform @@ -44534,7 +46678,8 @@ entities: - uid: 4556 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 42.5,-19.5 parent: 853 type: Transform @@ -44543,7 +46688,8 @@ entities: - uid: 4557 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 42.5,-18.5 parent: 853 type: Transform @@ -44552,7 +46698,8 @@ entities: - uid: 4558 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 42.5,-17.5 parent: 853 type: Transform @@ -44561,7 +46708,8 @@ entities: - uid: 4559 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 43.5,-17.5 parent: 853 type: Transform @@ -44570,7 +46718,8 @@ entities: - uid: 4560 type: CableMV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 44.5,-17.5 parent: 853 type: Transform @@ -44579,210 +46728,240 @@ entities: - uid: 4561 type: ContainmentFieldGenerator components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 45.5,-20.5 parent: 853 type: Transform - uid: 4562 type: ContainmentFieldGenerator components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 49.5,-20.5 parent: 853 type: Transform - uid: 4563 type: ContainmentFieldGenerator components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 53.5,-20.5 parent: 853 type: Transform - uid: 4564 type: ContainmentFieldGenerator components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 53.5,-24.5 parent: 853 type: Transform - uid: 4565 type: ContainmentFieldGenerator components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 53.5,-28.5 parent: 853 type: Transform - uid: 4566 type: ContainmentFieldGenerator components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 49.5,-28.5 parent: 853 type: Transform - uid: 4567 type: ContainmentFieldGenerator components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 45.5,-28.5 parent: 853 type: Transform - uid: 4568 type: ContainmentFieldGenerator components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 45.5,-24.5 parent: 853 type: Transform - uid: 4569 type: Catwalk components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 53.5,-9.5 parent: 853 type: Transform - uid: 4570 type: Catwalk components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 54.5,-9.5 parent: 853 type: Transform - uid: 4571 type: Catwalk components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 54.5,-10.5 parent: 853 type: Transform - uid: 4572 type: Catwalk components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 54.5,-11.5 parent: 853 type: Transform - uid: 4573 type: Catwalk components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 54.5,-12.5 parent: 853 type: Transform - uid: 4574 type: Catwalk components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 54.5,-13.5 parent: 853 type: Transform - uid: 4575 type: Catwalk components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 53.5,-13.5 parent: 853 type: Transform - uid: 4576 type: Catwalk components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 53.5,-11.5 parent: 853 type: Transform - uid: 4577 type: Catwalk components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 45.5,-9.5 parent: 853 type: Transform - uid: 4578 type: Catwalk components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 44.5,-9.5 parent: 853 type: Transform - uid: 4579 type: Catwalk components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 44.5,-10.5 parent: 853 type: Transform - uid: 4580 type: Catwalk components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 44.5,-11.5 parent: 853 type: Transform - uid: 4581 type: Catwalk components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 45.5,-11.5 parent: 853 type: Transform - uid: 4582 type: Catwalk components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 44.5,-12.5 parent: 853 type: Transform - uid: 4583 type: Catwalk components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 44.5,-13.5 parent: 853 type: Transform - uid: 4584 type: Catwalk components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 45.5,-13.5 parent: 853 type: Transform - uid: 4585 type: Catwalk components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 47.5,-8.5 parent: 853 type: Transform - uid: 4586 type: Catwalk components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 49.5,-8.5 parent: 853 type: Transform - uid: 4587 type: Catwalk components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 48.5,-8.5 parent: 853 type: Transform - uid: 4588 type: Catwalk components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 50.5,-8.5 parent: 853 type: Transform - uid: 4589 type: Catwalk components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 51.5,-9.5 parent: 853 type: Transform - uid: 4590 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 49.5,-11.5 parent: 853 type: Transform @@ -44793,77 +46972,88 @@ entities: - uid: 4591 type: Catwalk components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 51.5,-8.5 parent: 853 type: Transform - uid: 4592 type: Catwalk components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 51.5,-11.5 parent: 853 type: Transform - uid: 4593 type: Catwalk components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 51.5,-12.5 parent: 853 type: Transform - uid: 4594 type: Catwalk components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 51.5,-13.5 parent: 853 type: Transform - uid: 4595 type: Catwalk components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 50.5,-13.5 parent: 853 type: Transform - uid: 4596 type: Catwalk components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 49.5,-13.5 parent: 853 type: Transform - uid: 4597 type: Catwalk components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 48.5,-13.5 parent: 853 type: Transform - uid: 4598 type: Catwalk components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 47.5,-13.5 parent: 853 type: Transform - uid: 4599 type: Catwalk components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 47.5,-12.5 parent: 853 type: Transform - uid: 4600 type: Catwalk components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 47.5,-11.5 parent: 853 type: Transform - uid: 4601 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 50.5,-11.5 parent: 853 type: Transform @@ -44874,182 +47064,208 @@ entities: - uid: 4602 type: Catwalk components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 47.5,-9.5 parent: 853 type: Transform - uid: 4603 type: RadiationCollector components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 42.5,-23.5 parent: 853 type: Transform - uid: 4604 type: RadiationCollector components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 42.5,-22.5 parent: 853 type: Transform - uid: 4605 type: RadiationCollector components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 42.5,-21.5 parent: 853 type: Transform - uid: 4606 type: RadiationCollector components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 42.5,-27.5 parent: 853 type: Transform - uid: 4607 type: RadiationCollector components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 42.5,-26.5 parent: 853 type: Transform - uid: 4608 type: RadiationCollector components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 42.5,-25.5 parent: 853 type: Transform - uid: 4609 type: RadiationCollector components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 46.5,-31.5 parent: 853 type: Transform - uid: 4610 type: RadiationCollector components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 47.5,-31.5 parent: 853 type: Transform - uid: 4611 type: RadiationCollector components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 48.5,-31.5 parent: 853 type: Transform - uid: 4612 type: RadiationCollector components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 50.5,-31.5 parent: 853 type: Transform - uid: 4613 type: RadiationCollector components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 51.5,-31.5 parent: 853 type: Transform - uid: 4614 type: RadiationCollector components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 52.5,-31.5 parent: 853 type: Transform - uid: 4615 type: RadiationCollector components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 56.5,-27.5 parent: 853 type: Transform - uid: 4616 type: RadiationCollector components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 56.5,-26.5 parent: 853 type: Transform - uid: 4617 type: RadiationCollector components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 56.5,-25.5 parent: 853 type: Transform - uid: 4618 type: RadiationCollector components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 56.5,-23.5 parent: 853 type: Transform - uid: 4619 type: RadiationCollector components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 56.5,-22.5 parent: 853 type: Transform - uid: 4620 type: RadiationCollector components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 56.5,-21.5 parent: 853 type: Transform - uid: 4621 type: RadiationCollector components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 46.5,-17.5 parent: 853 type: Transform - uid: 4622 type: RadiationCollector components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 47.5,-17.5 parent: 853 type: Transform - uid: 4623 type: RadiationCollector components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 48.5,-17.5 parent: 853 type: Transform - uid: 4624 type: RadiationCollector components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 50.5,-17.5 parent: 853 type: Transform - uid: 4625 type: RadiationCollector components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 51.5,-17.5 parent: 853 type: Transform - uid: 4626 type: RadiationCollector components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 52.5,-17.5 parent: 853 type: Transform - uid: 4627 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 46.5,-17.5 parent: 853 type: Transform @@ -45058,7 +47274,8 @@ entities: - uid: 4628 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 47.5,-17.5 parent: 853 type: Transform @@ -45067,7 +47284,8 @@ entities: - uid: 4629 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 48.5,-17.5 parent: 853 type: Transform @@ -45076,7 +47294,8 @@ entities: - uid: 4630 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 49.5,-17.5 parent: 853 type: Transform @@ -45085,7 +47304,8 @@ entities: - uid: 4631 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 50.5,-17.5 parent: 853 type: Transform @@ -45094,7 +47314,8 @@ entities: - uid: 4632 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 51.5,-17.5 parent: 853 type: Transform @@ -45103,7 +47324,8 @@ entities: - uid: 4633 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 52.5,-17.5 parent: 853 type: Transform @@ -45112,7 +47334,8 @@ entities: - uid: 4634 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 53.5,-17.5 parent: 853 type: Transform @@ -45121,7 +47344,8 @@ entities: - uid: 4635 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 45.5,-17.5 parent: 853 type: Transform @@ -45130,7 +47354,8 @@ entities: - uid: 4636 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 44.5,-17.5 parent: 853 type: Transform @@ -45139,7 +47364,8 @@ entities: - uid: 4637 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 43.5,-17.5 parent: 853 type: Transform @@ -45148,7 +47374,8 @@ entities: - uid: 4638 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 42.5,-17.5 parent: 853 type: Transform @@ -45157,7 +47384,8 @@ entities: - uid: 4639 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 54.5,-17.5 parent: 853 type: Transform @@ -45166,7 +47394,8 @@ entities: - uid: 4640 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 55.5,-17.5 parent: 853 type: Transform @@ -45175,7 +47404,8 @@ entities: - uid: 4641 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 56.5,-17.5 parent: 853 type: Transform @@ -45184,7 +47414,8 @@ entities: - uid: 4642 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 57.5,-17.5 parent: 853 type: Transform @@ -45193,7 +47424,8 @@ entities: - uid: 4643 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 58.5,-17.5 parent: 853 type: Transform @@ -45202,7 +47434,8 @@ entities: - uid: 4644 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 58.5,-18.5 parent: 853 type: Transform @@ -45211,7 +47444,8 @@ entities: - uid: 4645 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 58.5,-19.5 parent: 853 type: Transform @@ -45220,7 +47454,8 @@ entities: - uid: 4646 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 58.5,-20.5 parent: 853 type: Transform @@ -45229,7 +47464,8 @@ entities: - uid: 4647 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 58.5,-21.5 parent: 853 type: Transform @@ -45238,7 +47474,8 @@ entities: - uid: 4648 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 58.5,-22.5 parent: 853 type: Transform @@ -45247,7 +47484,8 @@ entities: - uid: 4649 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 57.5,-24.5 parent: 853 type: Transform @@ -45256,7 +47494,8 @@ entities: - uid: 4650 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 58.5,-24.5 parent: 853 type: Transform @@ -45265,7 +47504,8 @@ entities: - uid: 4651 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 58.5,-23.5 parent: 853 type: Transform @@ -45274,7 +47514,8 @@ entities: - uid: 4652 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 41.5,-24.5 parent: 853 type: Transform @@ -45283,7 +47524,8 @@ entities: - uid: 4653 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 40.5,-24.5 parent: 853 type: Transform @@ -45292,7 +47534,8 @@ entities: - uid: 4654 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 40.5,-23.5 parent: 853 type: Transform @@ -45301,7 +47544,8 @@ entities: - uid: 4655 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 40.5,-22.5 parent: 853 type: Transform @@ -45310,7 +47554,8 @@ entities: - uid: 4656 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 40.5,-21.5 parent: 853 type: Transform @@ -45319,7 +47564,8 @@ entities: - uid: 4657 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 40.5,-20.5 parent: 853 type: Transform @@ -45328,7 +47574,8 @@ entities: - uid: 4658 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 40.5,-19.5 parent: 853 type: Transform @@ -45337,7 +47584,8 @@ entities: - uid: 4659 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 40.5,-18.5 parent: 853 type: Transform @@ -45346,7 +47594,8 @@ entities: - uid: 4660 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 40.5,-17.5 parent: 853 type: Transform @@ -45355,7 +47604,8 @@ entities: - uid: 4661 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 41.5,-17.5 parent: 853 type: Transform @@ -45364,7 +47614,8 @@ entities: - uid: 4662 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 42.5,-24.5 parent: 853 type: Transform @@ -45373,7 +47624,8 @@ entities: - uid: 4663 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 42.5,-23.5 parent: 853 type: Transform @@ -45382,7 +47634,8 @@ entities: - uid: 4664 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 42.5,-22.5 parent: 853 type: Transform @@ -45391,7 +47644,8 @@ entities: - uid: 4665 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 42.5,-21.5 parent: 853 type: Transform @@ -45400,7 +47654,8 @@ entities: - uid: 4666 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 42.5,-25.5 parent: 853 type: Transform @@ -45409,7 +47664,8 @@ entities: - uid: 4667 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 42.5,-26.5 parent: 853 type: Transform @@ -45418,7 +47674,8 @@ entities: - uid: 4668 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 42.5,-27.5 parent: 853 type: Transform @@ -45427,7 +47684,8 @@ entities: - uid: 4669 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 56.5,-24.5 parent: 853 type: Transform @@ -45436,7 +47694,8 @@ entities: - uid: 4670 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 56.5,-23.5 parent: 853 type: Transform @@ -45445,7 +47704,8 @@ entities: - uid: 4671 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 56.5,-22.5 parent: 853 type: Transform @@ -45454,7 +47714,8 @@ entities: - uid: 4672 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 56.5,-21.5 parent: 853 type: Transform @@ -45463,7 +47724,8 @@ entities: - uid: 4673 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 56.5,-25.5 parent: 853 type: Transform @@ -45472,7 +47734,8 @@ entities: - uid: 4674 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 56.5,-26.5 parent: 853 type: Transform @@ -45481,7 +47744,8 @@ entities: - uid: 4675 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 56.5,-27.5 parent: 853 type: Transform @@ -45490,7 +47754,8 @@ entities: - uid: 4676 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 49.5,-16.5 parent: 853 type: Transform @@ -45499,7 +47764,8 @@ entities: - uid: 4677 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 49.5,-15.5 parent: 853 type: Transform @@ -45508,7 +47774,8 @@ entities: - uid: 4678 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 49.5,-14.5 parent: 853 type: Transform @@ -45517,7 +47784,8 @@ entities: - uid: 4679 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 49.5,-13.5 parent: 853 type: Transform @@ -45526,21 +47794,24 @@ entities: - uid: 4680 type: Catwalk components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 47.5,-10.5 parent: 853 type: Transform - uid: 4681 type: Catwalk components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 51.5,-10.5 parent: 853 type: Transform - uid: 4682 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 49.5,-31.5 parent: 853 type: Transform @@ -45549,7 +47820,8 @@ entities: - uid: 4683 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 48.5,-31.5 parent: 853 type: Transform @@ -45558,7 +47830,8 @@ entities: - uid: 4684 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 47.5,-31.5 parent: 853 type: Transform @@ -45567,7 +47840,8 @@ entities: - uid: 4685 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 46.5,-31.5 parent: 853 type: Transform @@ -45576,7 +47850,8 @@ entities: - uid: 4686 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 50.5,-31.5 parent: 853 type: Transform @@ -45585,7 +47860,8 @@ entities: - uid: 4687 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 51.5,-31.5 parent: 853 type: Transform @@ -45594,7 +47870,8 @@ entities: - uid: 4688 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 52.5,-31.5 parent: 853 type: Transform @@ -45603,7 +47880,8 @@ entities: - uid: 4689 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 49.5,-32.5 parent: 853 type: Transform @@ -45612,7 +47890,8 @@ entities: - uid: 4690 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 49.5,-33.5 parent: 853 type: Transform @@ -45621,7 +47900,8 @@ entities: - uid: 4691 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 48.5,-33.5 parent: 853 type: Transform @@ -45630,7 +47910,8 @@ entities: - uid: 4692 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 47.5,-33.5 parent: 853 type: Transform @@ -45639,7 +47920,8 @@ entities: - uid: 4693 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 46.5,-33.5 parent: 853 type: Transform @@ -45648,7 +47930,8 @@ entities: - uid: 4694 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 45.5,-33.5 parent: 853 type: Transform @@ -45657,7 +47940,8 @@ entities: - uid: 4695 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 44.5,-33.5 parent: 853 type: Transform @@ -45666,7 +47950,8 @@ entities: - uid: 4696 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 43.5,-33.5 parent: 853 type: Transform @@ -45675,7 +47960,8 @@ entities: - uid: 4697 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 42.5,-33.5 parent: 853 type: Transform @@ -45684,7 +47970,8 @@ entities: - uid: 4698 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 41.5,-33.5 parent: 853 type: Transform @@ -45693,7 +47980,8 @@ entities: - uid: 4699 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 40.5,-33.5 parent: 853 type: Transform @@ -45702,7 +47990,8 @@ entities: - uid: 4700 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 40.5,-32.5 parent: 853 type: Transform @@ -45711,7 +48000,8 @@ entities: - uid: 4701 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 40.5,-31.5 parent: 853 type: Transform @@ -45720,7 +48010,8 @@ entities: - uid: 4702 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 40.5,-30.5 parent: 853 type: Transform @@ -45729,7 +48020,8 @@ entities: - uid: 4703 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 40.5,-29.5 parent: 853 type: Transform @@ -45738,7 +48030,8 @@ entities: - uid: 4704 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 40.5,-28.5 parent: 853 type: Transform @@ -45747,7 +48040,8 @@ entities: - uid: 4705 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 40.5,-27.5 parent: 853 type: Transform @@ -45756,7 +48050,8 @@ entities: - uid: 4706 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 40.5,-26.5 parent: 853 type: Transform @@ -45765,7 +48060,8 @@ entities: - uid: 4707 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 40.5,-25.5 parent: 853 type: Transform @@ -45774,7 +48070,8 @@ entities: - uid: 4708 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 50.5,-33.5 parent: 853 type: Transform @@ -45783,7 +48080,8 @@ entities: - uid: 4709 type: CableHV components: - - rot: 4.371139006309477E-08 rad + - anchored: True + rot: 4.371139006309477E-08 rad pos: 51.5,-33.5 parent: 853 type: Transform @@ -46080,7 +48378,8 @@ entities: - uid: 4746 type: CableApcExtension components: - - pos: 7.5,-29.5 + - anchored: True + pos: 7.5,-29.5 parent: 853 type: Transform - visible: False @@ -46139,7 +48438,8 @@ entities: - uid: 4754 type: DisposalPipe components: - - pos: 3.5,-21.5 + - anchored: True + pos: 3.5,-21.5 parent: 853 type: Transform - containers: @@ -46226,7 +48526,8 @@ entities: - uid: 4765 type: DisposalPipe components: - - pos: 3.5,-20.5 + - anchored: True + pos: 3.5,-20.5 parent: 853 type: Transform - containers: @@ -46260,7 +48561,8 @@ entities: - uid: 4769 type: CableApcExtension components: - - pos: 8.5,-29.5 + - anchored: True + pos: 8.5,-29.5 parent: 853 type: Transform - visible: False @@ -46279,7 +48581,8 @@ entities: - uid: 4771 type: CableApcExtension components: - - pos: 5.5,-25.5 + - anchored: True + pos: 5.5,-25.5 parent: 853 type: Transform - canCollide: False @@ -46287,7 +48590,8 @@ entities: - uid: 4772 type: CableApcExtension components: - - pos: 6.5,-28.5 + - anchored: True + pos: 6.5,-28.5 parent: 853 type: Transform - visible: False @@ -46297,7 +48601,8 @@ entities: - uid: 4773 type: DisposalPipe components: - - pos: 3.5,-24.5 + - anchored: True + pos: 3.5,-24.5 parent: 853 type: Transform - containers: @@ -46307,7 +48612,8 @@ entities: - uid: 4774 type: DisposalPipe components: - - pos: 3.5,-23.5 + - anchored: True + pos: 3.5,-23.5 parent: 853 type: Transform - containers: @@ -46317,7 +48623,8 @@ entities: - uid: 4775 type: DisposalPipe components: - - pos: 3.5,-22.5 + - anchored: True + pos: 3.5,-22.5 parent: 853 type: Transform - containers: @@ -46339,7 +48646,8 @@ entities: - uid: 4778 type: CableApcExtension components: - - pos: 6.5,-29.5 + - anchored: True + pos: 6.5,-29.5 parent: 853 type: Transform - visible: False @@ -46349,7 +48657,8 @@ entities: - uid: 4779 type: CableApcExtension components: - - pos: 4.5,-29.5 + - anchored: True + pos: 4.5,-29.5 parent: 853 type: Transform - visible: False @@ -46359,7 +48668,8 @@ entities: - uid: 4780 type: CableApcExtension components: - - pos: 5.5,-29.5 + - anchored: True + pos: 5.5,-29.5 parent: 853 type: Transform - canCollide: False @@ -46367,7 +48677,8 @@ entities: - uid: 4781 type: CableApcExtension components: - - pos: 6.5,-27.5 + - anchored: True + pos: 6.5,-27.5 parent: 853 type: Transform - visible: False @@ -46380,6 +48691,8 @@ entities: - pos: 23.519926,-4.184294 parent: 853 type: Transform + - powerLoad: 0 + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -46390,13 +48703,16 @@ entities: pos: -30.97177,0.51521087 parent: 853 type: Transform + - powerLoad: 0 + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer - uid: 4784 type: CableApcExtension components: - - rot: -1.5707963267948966 rad + - anchored: True + rot: -1.5707963267948966 rad pos: 13.5,-23.5 parent: 853 type: Transform @@ -46405,7 +48721,8 @@ entities: - uid: 4785 type: CableApcExtension components: - - rot: -1.5707963267948966 rad + - anchored: True + rot: -1.5707963267948966 rad pos: 12.5,-23.5 parent: 853 type: Transform @@ -46416,7 +48733,8 @@ entities: - uid: 4786 type: CableApcExtension components: - - rot: -1.5707963267948966 rad + - anchored: True + rot: -1.5707963267948966 rad pos: 12.5,-24.5 parent: 853 type: Transform @@ -46427,7 +48745,8 @@ entities: - uid: 4787 type: CableApcExtension components: - - rot: -1.5707963267948966 rad + - anchored: True + rot: -1.5707963267948966 rad pos: 12.5,-24.5 parent: 853 type: Transform @@ -46438,7 +48757,8 @@ entities: - uid: 4788 type: CableApcExtension components: - - rot: -1.5707963267948966 rad + - anchored: True + rot: -1.5707963267948966 rad pos: 12.5,-25.5 parent: 853 type: Transform @@ -46449,7 +48769,8 @@ entities: - uid: 4789 type: CableApcExtension components: - - rot: -1.5707963267948966 rad + - anchored: True + rot: -1.5707963267948966 rad pos: 12.5,-25.5 parent: 853 type: Transform @@ -46460,7 +48781,8 @@ entities: - uid: 4790 type: CableApcExtension components: - - rot: -1.5707963267948966 rad + - anchored: True + rot: -1.5707963267948966 rad pos: 12.5,-26.5 parent: 853 type: Transform @@ -46471,7 +48793,8 @@ entities: - uid: 4791 type: CableApcExtension components: - - rot: -1.5707963267948966 rad + - anchored: True + rot: -1.5707963267948966 rad pos: 12.5,-26.5 parent: 853 type: Transform @@ -46482,7 +48805,8 @@ entities: - uid: 4792 type: CableApcExtension components: - - rot: -1.5707963267948966 rad + - anchored: True + rot: -1.5707963267948966 rad pos: 12.5,-27.5 parent: 853 type: Transform @@ -46493,7 +48817,8 @@ entities: - uid: 4793 type: CableApcExtension components: - - rot: -1.5707963267948966 rad + - anchored: True + rot: -1.5707963267948966 rad pos: 12.5,-27.5 parent: 853 type: Transform @@ -46504,7 +48829,8 @@ entities: - uid: 4794 type: CableApcExtension components: - - rot: -1.5707963267948966 rad + - anchored: True + rot: -1.5707963267948966 rad pos: 12.5,-28.5 parent: 853 type: Transform @@ -46513,7 +48839,8 @@ entities: - uid: 4795 type: CableApcExtension components: - - rot: -1.5707963267948966 rad + - anchored: True + rot: -1.5707963267948966 rad pos: 12.5,-29.5 parent: 853 type: Transform @@ -46524,7 +48851,8 @@ entities: - uid: 4796 type: CableApcExtension components: - - rot: -1.5707963267948966 rad + - anchored: True + rot: -1.5707963267948966 rad pos: 11.5,-29.5 parent: 853 type: Transform @@ -46535,7 +48863,8 @@ entities: - uid: 4797 type: CableApcExtension components: - - rot: -1.5707963267948966 rad + - anchored: True + rot: -1.5707963267948966 rad pos: 10.5,-29.5 parent: 853 type: Transform @@ -46544,7 +48873,8 @@ entities: - uid: 4798 type: CableApcExtension components: - - rot: -1.5707963267948966 rad + - anchored: True + rot: -1.5707963267948966 rad pos: 9.5,-29.5 parent: 853 type: Transform @@ -46555,7 +48885,8 @@ entities: - uid: 4799 type: CableApcExtension components: - - rot: -1.5707963267948966 rad + - anchored: True + rot: -1.5707963267948966 rad pos: 12.5,-23.5 parent: 853 type: Transform @@ -46566,7 +48897,8 @@ entities: - uid: 4800 type: CableApcExtension components: - - rot: -1.5707963267948966 rad + - anchored: True + rot: -1.5707963267948966 rad pos: 11.5,-23.5 parent: 853 type: Transform @@ -46577,7 +48909,8 @@ entities: - uid: 4801 type: CableApcExtension components: - - rot: -1.5707963267948966 rad + - anchored: True + rot: -1.5707963267948966 rad pos: 10.5,-23.5 parent: 853 type: Transform @@ -46588,7 +48921,8 @@ entities: - uid: 4802 type: CableApcExtension components: - - rot: -1.5707963267948966 rad + - anchored: True + rot: -1.5707963267948966 rad pos: 9.5,-23.5 parent: 853 type: Transform @@ -46676,7 +49010,8 @@ entities: - uid: 4813 type: DisposalTrunk components: - - rot: -1.5707963267948966 rad + - anchored: True + rot: -1.5707963267948966 rad pos: 12.5,-27.5 parent: 853 type: Transform @@ -46687,7 +49022,8 @@ entities: - uid: 4814 type: DisposalPipe components: - - rot: -1.5707963267948966 rad + - anchored: True + rot: -1.5707963267948966 rad pos: 11.5,-27.5 parent: 853 type: Transform @@ -46698,7 +49034,8 @@ entities: - uid: 4815 type: DisposalPipe components: - - rot: -1.5707963267948966 rad + - anchored: True + rot: -1.5707963267948966 rad pos: 10.5,-27.5 parent: 853 type: Transform @@ -46709,7 +49046,8 @@ entities: - uid: 4816 type: DisposalPipe components: - - rot: -1.5707963267948966 rad + - anchored: True + rot: -1.5707963267948966 rad pos: 9.5,-27.5 parent: 853 type: Transform @@ -46720,7 +49058,8 @@ entities: - uid: 4817 type: DisposalJunctionFlipped components: - - rot: -1.5707963267948966 rad + - anchored: True + rot: -1.5707963267948966 rad pos: 6.5,-27.5 parent: 853 type: Transform @@ -46731,7 +49070,8 @@ entities: - uid: 4818 type: DisposalPipe components: - - rot: 3.141592653589793 rad + - anchored: True + rot: 3.141592653589793 rad pos: 6.5,-28.5 parent: 853 type: Transform @@ -46742,7 +49082,8 @@ entities: - uid: 4819 type: DisposalPipe components: - - rot: 3.141592653589793 rad + - anchored: True + rot: 3.141592653589793 rad pos: 6.5,-29.5 parent: 853 type: Transform @@ -46764,7 +49105,8 @@ entities: - uid: 4821 type: DisposalTrunk components: - - rot: 3.141592653589793 rad + - anchored: True + rot: 3.141592653589793 rad pos: 6.5,-30.5 parent: 853 type: Transform @@ -46775,7 +49117,8 @@ entities: - uid: 4822 type: DisposalPipe components: - - rot: 1.5707963267948966 rad + - anchored: True + rot: 1.5707963267948966 rad pos: 8.5,-27.5 parent: 853 type: Transform @@ -46786,7 +49129,8 @@ entities: - uid: 4823 type: DisposalPipe components: - - rot: 1.5707963267948966 rad + - anchored: True + rot: 1.5707963267948966 rad pos: 7.5,-27.5 parent: 853 type: Transform @@ -46797,7 +49141,8 @@ entities: - uid: 4824 type: DisposalPipe components: - - rot: 1.5707963267948966 rad + - anchored: True + rot: 1.5707963267948966 rad pos: 5.5,-27.5 parent: 853 type: Transform @@ -46808,7 +49153,8 @@ entities: - uid: 4825 type: DisposalPipe components: - - rot: 1.5707963267948966 rad + - anchored: True + rot: 1.5707963267948966 rad pos: 4.5,-27.5 parent: 853 type: Transform @@ -46819,7 +49165,8 @@ entities: - uid: 4826 type: DisposalPipe components: - - pos: 3.5,-16.5 + - anchored: True + pos: 3.5,-16.5 parent: 853 type: Transform - containers: @@ -46829,7 +49176,8 @@ entities: - uid: 4827 type: DisposalPipe components: - - pos: 3.5,-14.5 + - anchored: True + pos: 3.5,-14.5 parent: 853 type: Transform - containers: @@ -46839,7 +49187,8 @@ entities: - uid: 4828 type: DisposalPipe components: - - pos: 3.5,-15.5 + - anchored: True + pos: 3.5,-15.5 parent: 853 type: Transform - containers: @@ -46849,7 +49198,8 @@ entities: - uid: 4829 type: DisposalPipe components: - - pos: 3.5,-18.5 + - anchored: True + pos: 3.5,-18.5 parent: 853 type: Transform - containers: @@ -46859,7 +49209,8 @@ entities: - uid: 4830 type: DisposalPipe components: - - pos: 3.5,-17.5 + - anchored: True + pos: 3.5,-17.5 parent: 853 type: Transform - containers: @@ -46869,7 +49220,8 @@ entities: - uid: 4831 type: DisposalPipe components: - - pos: 3.5,-19.5 + - anchored: True + pos: 3.5,-19.5 parent: 853 type: Transform - containers: @@ -46879,7 +49231,8 @@ entities: - uid: 4832 type: CableHV components: - - pos: 3.5,-24.5 + - anchored: True + pos: 3.5,-24.5 parent: 853 type: Transform - visible: False @@ -46889,7 +49242,8 @@ entities: - uid: 4833 type: CableHV components: - - pos: 3.5,-25.5 + - anchored: True + pos: 3.5,-25.5 parent: 853 type: Transform - visible: False @@ -46899,7 +49253,8 @@ entities: - uid: 4834 type: CableHV components: - - pos: 3.5,-26.5 + - anchored: True + pos: 3.5,-26.5 parent: 853 type: Transform - visible: False @@ -46909,7 +49264,8 @@ entities: - uid: 4835 type: CableHV components: - - pos: 3.5,-27.5 + - anchored: True + pos: 3.5,-27.5 parent: 853 type: Transform - visible: False @@ -46919,7 +49275,8 @@ entities: - uid: 4836 type: CableHV components: - - pos: 3.5,-28.5 + - anchored: True + pos: 3.5,-28.5 parent: 853 type: Transform - visible: False @@ -46929,7 +49286,8 @@ entities: - uid: 4837 type: DisposalPipe components: - - pos: 3.5,-26.5 + - anchored: True + pos: 3.5,-26.5 parent: 853 type: Transform - containers: @@ -46939,7 +49297,8 @@ entities: - uid: 4838 type: DisposalPipe components: - - pos: 3.5,-25.5 + - anchored: True + pos: 3.5,-25.5 parent: 853 type: Transform - containers: @@ -47016,7 +49375,8 @@ entities: - uid: 4850 type: CableApcExtension components: - - pos: 6.5,-26.5 + - anchored: True + pos: 6.5,-26.5 parent: 853 type: Transform - visible: False @@ -47026,7 +49386,8 @@ entities: - uid: 4851 type: CableApcExtension components: - - pos: 6.5,-25.5 + - anchored: True + pos: 6.5,-25.5 parent: 853 type: Transform - visible: False @@ -47040,6 +49401,8 @@ entities: pos: -30.956144,-2.5004141 parent: 853 type: Transform + - powerLoad: 0 + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -47050,6 +49413,8 @@ entities: pos: 16.911247,7.525623 parent: 853 type: Transform + - powerLoad: 0 + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -47060,13 +49425,16 @@ entities: pos: 1,-24.5 parent: 853 type: Transform + - powerLoad: 0 + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer - uid: 4855 type: CableApcExtension components: - - pos: 8.5,-23.5 + - anchored: True + pos: 8.5,-23.5 parent: 853 type: Transform - visible: False @@ -47076,7 +49444,8 @@ entities: - uid: 4856 type: CableApcExtension components: - - pos: 7.5,-23.5 + - anchored: True + pos: 7.5,-23.5 parent: 853 type: Transform - visible: False @@ -47092,7 +49461,8 @@ entities: - uid: 4858 type: CableApcExtension components: - - pos: 4.5,-25.5 + - anchored: True + pos: 4.5,-25.5 parent: 853 type: Transform - visible: False @@ -47268,7 +49638,8 @@ entities: - uid: 4885 type: CableApcExtension components: - - pos: -15.5,-10.5 + - anchored: True + pos: -15.5,-10.5 parent: 853 type: Transform - visible: False @@ -47284,7 +49655,8 @@ entities: - uid: 4887 type: CableApcExtension components: - - pos: -13.5,-10.5 + - anchored: True + pos: -13.5,-10.5 parent: 853 type: Transform - visible: False @@ -47298,13 +49670,16 @@ entities: pos: -15,-5.3 parent: 853 type: Transform + - powerLoad: 0 + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer - uid: 4889 type: CableApcExtension components: - - pos: 11.5,20.5 + - anchored: True + pos: 11.5,20.5 parent: 853 type: Transform - visible: False @@ -47314,7 +49689,8 @@ entities: - uid: 4890 type: CableApcExtension components: - - pos: 12.5,20.5 + - anchored: True + pos: 12.5,20.5 parent: 853 type: Transform - canCollide: False @@ -47322,7 +49698,8 @@ entities: - uid: 4891 type: CableApcExtension components: - - pos: 12.5,21.5 + - anchored: True + pos: 12.5,21.5 parent: 853 type: Transform - visible: False @@ -47332,7 +49709,8 @@ entities: - uid: 4892 type: CableApcExtension components: - - pos: 12.5,22.5 + - anchored: True + pos: 12.5,22.5 parent: 853 type: Transform - visible: False @@ -47342,7 +49720,8 @@ entities: - uid: 4893 type: CableApcExtension components: - - pos: 12.5,23.5 + - anchored: True + pos: 12.5,23.5 parent: 853 type: Transform - visible: False @@ -47388,43 +49767,50 @@ entities: - uid: 4897 type: ParticleAcceleratorEndCapUnfinished components: - - pos: 49.5,-9.5 + - anchored: True + pos: 49.5,-9.5 parent: 853 type: Transform - uid: 4898 type: ParticleAcceleratorFuelChamberUnfinished components: - - pos: 49.5,-10.5 + - anchored: True + pos: 49.5,-10.5 parent: 853 type: Transform - uid: 4899 type: ParticleAcceleratorPowerBoxUnfinished components: - - pos: 49.5,-11.5 + - anchored: True + pos: 49.5,-11.5 parent: 853 type: Transform - uid: 4900 type: ParticleAcceleratorControlBoxUnfinished components: - - pos: 48.5,-10.5 + - anchored: True + pos: 48.5,-10.5 parent: 853 type: Transform - uid: 4901 type: ParticleAcceleratorEmitterCenterUnfinished components: - - pos: 49.5,-12.5 + - anchored: True + pos: 49.5,-12.5 parent: 853 type: Transform - uid: 4902 type: ParticleAcceleratorEmitterLeftUnfinished components: - - pos: 48.5,-12.5 + - anchored: True + pos: 48.5,-12.5 parent: 853 type: Transform - uid: 4903 type: ParticleAcceleratorEmitterRightUnfinished components: - - pos: 50.5,-12.5 + - anchored: True + pos: 50.5,-12.5 parent: 853 type: Transform - uid: 4904 @@ -47480,7 +49866,8 @@ entities: - uid: 4909 type: KitchenReagentGrinder components: - - pos: 18.5,1.5 + - anchored: True + pos: 18.5,1.5 parent: 853 type: Transform - containers: @@ -47501,6 +49888,8 @@ entities: pos: -17.91089,-25.522463 parent: 853 type: Transform + - powerLoad: 0 + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -47766,6 +50155,8 @@ entities: pos: -25.886164,-4.550339 parent: 853 type: Transform + - powerLoad: 0 + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -47776,6 +50167,8 @@ entities: pos: 31.116735,0.101480484 parent: 853 type: Transform + - powerLoad: 0 + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -47786,6 +50179,8 @@ entities: pos: 25.960485,0.023355484 parent: 853 type: Transform + - powerLoad: 0 + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -47796,6 +50191,8 @@ entities: pos: 29.00736,0.038980484 parent: 853 type: Transform + - powerLoad: 0 + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -47806,6 +50203,8 @@ entities: pos: 6.4960318,3.0213985 parent: 853 type: Transform + - powerLoad: 0 + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -47816,6 +50215,8 @@ entities: pos: -2.8850474,30.48638 parent: 853 type: Transform + - powerLoad: 0 + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer @@ -47826,6 +50227,8 @@ entities: pos: 9.911827,30.439505 parent: 853 type: Transform + - powerLoad: 0 + type: ApcPowerReceiver - containers: light_bulb: !type:ContainerSlot {} type: ContainerContainer From 0a42b0b59fbeb09904bcfd43d62ee5fc81d0238b Mon Sep 17 00:00:00 2001 From: Swept Date: Fri, 9 Jul 2021 07:10:57 +0000 Subject: [PATCH 30/30] Changes the chatbox to be more consistent with SS14's UI (#4137) --- Content.Client/Chat/UI/ChatBox.cs | 6 +++--- Content.Client/Stylesheets/StyleNano.cs | 2 +- Resources/Locale/en-US/chat/ui/chat-box.ftl | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/Content.Client/Chat/UI/ChatBox.cs b/Content.Client/Chat/UI/ChatBox.cs index 08a6ffaf2f..1052f499c2 100644 --- a/Content.Client/Chat/UI/ChatBox.cs +++ b/Content.Client/Chat/UI/ChatBox.cs @@ -185,10 +185,10 @@ namespace Content.Client.Chat.UI { Children = { - new Control{MinSize = (10,0)}, + new Control{MinSize = (4,0)}, (_filterVBox = new VBoxContainer { - SeparationOverride = 10 + SeparationOverride = 4 }) } } @@ -203,7 +203,7 @@ namespace Content.Client.Chat.UI { (_channelSelectorHBox = new HBoxContainer { - SeparationOverride = 4 + SeparationOverride = 1 }) } }; diff --git a/Content.Client/Stylesheets/StyleNano.cs b/Content.Client/Stylesheets/StyleNano.cs index a40dd6bef3..3bdd6478cf 100644 --- a/Content.Client/Stylesheets/StyleNano.cs +++ b/Content.Client/Stylesheets/StyleNano.cs @@ -1,4 +1,4 @@ -#nullable enable +#nullable enable using System.Linq; using Content.Client.Actions.UI; using Content.Client.Examine; diff --git a/Resources/Locale/en-US/chat/ui/chat-box.ftl b/Resources/Locale/en-US/chat/ui/chat-box.ftl index 19d8555583..aa9d912893 100644 --- a/Resources/Locale/en-US/chat/ui/chat-box.ftl +++ b/Resources/Locale/en-US/chat/ui/chat-box.ftl @@ -1,4 +1,4 @@ -hud-chatbox-info = Say something! T to talk, Tab to cycle channels. +hud-chatbox-info = T to talk, Tab to cycle channels. hud-chatbox-admin = Admin hud-chatbox-ooc = OOC -hud-chatbox-console = Console \ No newline at end of file +hud-chatbox-console = Console