From 4cd832c0ccf7949a6fffbc2d3a108d7232158931 Mon Sep 17 00:00:00 2001 From: metalgearsloth Date: Sun, 13 Aug 2023 13:19:05 +1000 Subject: [PATCH] Revert "Adds the thermo-electric generator (#18840)" This reverts commit a242af506ec752e575bc14ac116ecb8af5855cfe. --- .../Computer/ComputerBoundUserInterface.cs | 9 - Content.Client/Examine/ExamineSystem.cs | 25 - .../Controls/GuideEntityEmbed.xaml.cs | 29 +- .../Generation/Teg/TegCirculatorComponent.cs | 8 - .../Power/Generation/Teg/TegSystem.cs | 26 - .../SensorMonitoringWindow.xaml | 10 - .../SensorMonitoringWindow.xaml.cs | 264 -- .../Tests/PostMapInitTest.cs | 1 - .../Atmos/Monitor/Systems/AirAlarmSystem.cs | 4 +- .../Components/GasVolumePumpComponent.cs | 3 - .../EntitySystems/GasPressurePumpSystem.cs | 4 +- .../EntitySystems/GasVolumePumpSystem.cs | 34 +- .../Components/GasThermoMachineComponent.cs | 10 +- .../EntitySystems/GasThermoMachineSystem.cs | 49 +- .../EntitySystems/NodeGroupSystem.cs | 1 - .../NodeGroups/NodeGroupFactory.cs | 8 - .../Generation/Teg/TegCirculatorComponent.cs | 43 - .../Generation/Teg/TegGeneratorComponent.cs | 69 - .../Power/Generation/Teg/TegNodeGroup.cs | 206 -- .../Power/Generation/Teg/TegSensorData.cs | 52 - .../Power/Generation/Teg/TegSystem.cs | 383 --- .../BatterySensorComponent.cs | 32 - .../SensorMonitoring/BatterySensorSystem.cs | 45 - .../SensorMonitoringConsoleComponent.cs | 64 - .../SensorMonitoringConsoleSystem.UI.cs | 138 - .../SensorMonitoringConsoleSystem.cs | 329 -- .../SharedGasVolumePumpComponent.cs | 2 - .../SharedGasThermomachineComponent.cs | 3 - .../Power/Generation/Teg/SharedTeg.cs | 36 - .../SharedSensorMonitoringConsoleComponent.cs | 112 - .../Locale/en-US/devices/device-network.ftl | 9 - Resources/Locale/en-US/guidebook/guides.ftl | 1 - Resources/Locale/en-US/power/teg.ftl | 2 - .../sensor-monitoring/sensor-monitoring.ftl | 13 - Resources/Maps/Test/test_teg.yml | 2896 ----------------- .../Devices/Circuitboards/computer.yml | 11 - .../Prototypes/Entities/Stations/test.yml | 11 - .../Machines/Computers/computers.yml | 43 - .../Structures/Piping/Atmospherics/binary.yml | 8 - .../Structures/Piping/Atmospherics/unary.yml | 12 - .../Structures/Power/Generation/teg.yml | 189 -- .../Entities/Structures/Power/smes.yml | 9 - .../Prototypes/Guidebook/engineering.yml | 10 +- Resources/Prototypes/Maps/debug.yml | 17 - .../ServerInfo/Guidebook/Engineering/TEG.xml | 39 - .../Textures/Markers/teg_arrow.rsi/arrow.png | Bin 1058 -> 0 bytes .../Textures/Markers/teg_arrow.rsi/meta.json | 15 - .../Machines/computers.rsi/meta.json | 4 - .../Machines/computers.rsi/sensors.png | Bin 685 -> 0 bytes .../Power/Generation/teg.rsi/circ-0-light.png | Bin 346 -> 0 bytes .../Power/Generation/teg.rsi/circ-0.png | Bin 2186 -> 0 bytes .../Power/Generation/teg.rsi/circ-1-light.png | Bin 614 -> 0 bytes .../Power/Generation/teg.rsi/circ-1.png | Bin 4199 -> 0 bytes .../Power/Generation/teg.rsi/circ-2-light.png | Bin 1528 -> 0 bytes .../Power/Generation/teg.rsi/circ-2.png | Bin 5366 -> 0 bytes .../Power/Generation/teg.rsi/meta.json | 279 -- .../Power/Generation/teg.rsi/teg-oc00.png | Bin 235 -> 0 bytes .../Power/Generation/teg.rsi/teg-oc01.png | Bin 297 -> 0 bytes .../Power/Generation/teg.rsi/teg-oc10.png | Bin 292 -> 0 bytes .../Power/Generation/teg.rsi/teg-oc11.png | Bin 303 -> 0 bytes .../Power/Generation/teg.rsi/teg-op1.png | Bin 371 -> 0 bytes .../Power/Generation/teg.rsi/teg-op10.png | Bin 449 -> 0 bytes .../Power/Generation/teg.rsi/teg-op11.png | Bin 445 -> 0 bytes .../Power/Generation/teg.rsi/teg-op2.png | Bin 352 -> 0 bytes .../Power/Generation/teg.rsi/teg-op3.png | Bin 366 -> 0 bytes .../Power/Generation/teg.rsi/teg-op4.png | Bin 374 -> 0 bytes .../Power/Generation/teg.rsi/teg-op5.png | Bin 375 -> 0 bytes .../Power/Generation/teg.rsi/teg-op6.png | Bin 376 -> 0 bytes .../Power/Generation/teg.rsi/teg-op7.png | Bin 422 -> 0 bytes .../Power/Generation/teg.rsi/teg-op8.png | Bin 427 -> 0 bytes .../Power/Generation/teg.rsi/teg-op9.png | Bin 425 -> 0 bytes .../Power/Generation/teg.rsi/teg.png | Bin 1502 -> 0 bytes .../Power/Generation/teg.rsi/teg_mid.png | Bin 2055 -> 0 bytes SpaceStation14.sln.DotSettings | 1 - 74 files changed, 22 insertions(+), 5546 deletions(-) delete mode 100644 Content.Client/Power/Generation/Teg/TegCirculatorComponent.cs delete mode 100644 Content.Client/Power/Generation/Teg/TegSystem.cs delete mode 100644 Content.Client/SensorMonitoring/SensorMonitoringWindow.xaml delete mode 100644 Content.Client/SensorMonitoring/SensorMonitoringWindow.xaml.cs delete mode 100644 Content.Server/Power/Generation/Teg/TegCirculatorComponent.cs delete mode 100644 Content.Server/Power/Generation/Teg/TegGeneratorComponent.cs delete mode 100644 Content.Server/Power/Generation/Teg/TegNodeGroup.cs delete mode 100644 Content.Server/Power/Generation/Teg/TegSensorData.cs delete mode 100644 Content.Server/Power/Generation/Teg/TegSystem.cs delete mode 100644 Content.Server/SensorMonitoring/BatterySensorComponent.cs delete mode 100644 Content.Server/SensorMonitoring/BatterySensorSystem.cs delete mode 100644 Content.Server/SensorMonitoring/SensorMonitoringConsoleComponent.cs delete mode 100644 Content.Server/SensorMonitoring/SensorMonitoringConsoleSystem.UI.cs delete mode 100644 Content.Server/SensorMonitoring/SensorMonitoringConsoleSystem.cs delete mode 100644 Content.Shared/Power/Generation/Teg/SharedTeg.cs delete mode 100644 Content.Shared/SensorMonitoring/SharedSensorMonitoringConsoleComponent.cs delete mode 100644 Resources/Locale/en-US/power/teg.ftl delete mode 100644 Resources/Locale/en-US/sensor-monitoring/sensor-monitoring.ftl delete mode 100644 Resources/Maps/Test/test_teg.yml delete mode 100644 Resources/Prototypes/Entities/Stations/test.yml delete mode 100644 Resources/Prototypes/Entities/Structures/Power/Generation/teg.yml delete mode 100644 Resources/ServerInfo/Guidebook/Engineering/TEG.xml delete mode 100644 Resources/Textures/Markers/teg_arrow.rsi/arrow.png delete mode 100644 Resources/Textures/Markers/teg_arrow.rsi/meta.json delete mode 100644 Resources/Textures/Structures/Machines/computers.rsi/sensors.png delete mode 100644 Resources/Textures/Structures/Power/Generation/teg.rsi/circ-0-light.png delete mode 100644 Resources/Textures/Structures/Power/Generation/teg.rsi/circ-0.png delete mode 100644 Resources/Textures/Structures/Power/Generation/teg.rsi/circ-1-light.png delete mode 100644 Resources/Textures/Structures/Power/Generation/teg.rsi/circ-1.png delete mode 100644 Resources/Textures/Structures/Power/Generation/teg.rsi/circ-2-light.png delete mode 100644 Resources/Textures/Structures/Power/Generation/teg.rsi/circ-2.png delete mode 100644 Resources/Textures/Structures/Power/Generation/teg.rsi/meta.json delete mode 100644 Resources/Textures/Structures/Power/Generation/teg.rsi/teg-oc00.png delete mode 100644 Resources/Textures/Structures/Power/Generation/teg.rsi/teg-oc01.png delete mode 100644 Resources/Textures/Structures/Power/Generation/teg.rsi/teg-oc10.png delete mode 100644 Resources/Textures/Structures/Power/Generation/teg.rsi/teg-oc11.png delete mode 100644 Resources/Textures/Structures/Power/Generation/teg.rsi/teg-op1.png delete mode 100644 Resources/Textures/Structures/Power/Generation/teg.rsi/teg-op10.png delete mode 100644 Resources/Textures/Structures/Power/Generation/teg.rsi/teg-op11.png delete mode 100644 Resources/Textures/Structures/Power/Generation/teg.rsi/teg-op2.png delete mode 100644 Resources/Textures/Structures/Power/Generation/teg.rsi/teg-op3.png delete mode 100644 Resources/Textures/Structures/Power/Generation/teg.rsi/teg-op4.png delete mode 100644 Resources/Textures/Structures/Power/Generation/teg.rsi/teg-op5.png delete mode 100644 Resources/Textures/Structures/Power/Generation/teg.rsi/teg-op6.png delete mode 100644 Resources/Textures/Structures/Power/Generation/teg.rsi/teg-op7.png delete mode 100644 Resources/Textures/Structures/Power/Generation/teg.rsi/teg-op8.png delete mode 100644 Resources/Textures/Structures/Power/Generation/teg.rsi/teg-op9.png delete mode 100644 Resources/Textures/Structures/Power/Generation/teg.rsi/teg.png delete mode 100644 Resources/Textures/Structures/Power/Generation/teg.rsi/teg_mid.png diff --git a/Content.Client/Computer/ComputerBoundUserInterface.cs b/Content.Client/Computer/ComputerBoundUserInterface.cs index bdbfe03fa109..58820245ae61 100644 --- a/Content.Client/Computer/ComputerBoundUserInterface.cs +++ b/Content.Client/Computer/ComputerBoundUserInterface.cs @@ -51,11 +51,6 @@ protected override void Dispose(bool disposing) _window?.Dispose(); } } - - protected override void ReceiveMessage(BoundUserInterfaceMessage message) - { - _window?.ReceiveMessage(message); - } } /// @@ -84,10 +79,6 @@ void SetupComputerWindow(ComputerBoundUserInterfaceBase cb) void UpdateState(TState state) { } - - void ReceiveMessage(BoundUserInterfaceMessage message) - { - } } } diff --git a/Content.Client/Examine/ExamineSystem.cs b/Content.Client/Examine/ExamineSystem.cs index 180777f374df..f1ca7d37076e 100644 --- a/Content.Client/Examine/ExamineSystem.cs +++ b/Content.Client/Examine/ExamineSystem.cs @@ -359,9 +359,6 @@ public void DoExamine(EntityUid entity, bool centeredOnCursor = true, EntityUid? _idCounter = 0; RaiseNetworkEvent(new ExamineSystemMessages.RequestExamineInfoMessage(entity, _idCounter, true)); } - - RaiseLocalEvent(entity, new ClientExaminedEvent(entity, playerEnt.Value)); - _lastExaminedEntity = entity; } @@ -387,26 +384,4 @@ private void CloseTooltip() } } } - - /// - /// An entity was examined on the client. - /// - public sealed class ClientExaminedEvent : EntityEventArgs - { - /// - /// The entity performing the examining. - /// - public readonly EntityUid Examiner; - - /// - /// Entity being examined, for broadcast event purposes. - /// - public readonly EntityUid Examined; - - public ClientExaminedEvent(EntityUid examined, EntityUid examiner) - { - Examined = examined; - Examiner = examiner; - } - } } diff --git a/Content.Client/Guidebook/Controls/GuideEntityEmbed.xaml.cs b/Content.Client/Guidebook/Controls/GuideEntityEmbed.xaml.cs index ee8b46efb075..e6321d8ba943 100644 --- a/Content.Client/Guidebook/Controls/GuideEntityEmbed.xaml.cs +++ b/Content.Client/Guidebook/Controls/GuideEntityEmbed.xaml.cs @@ -1,6 +1,5 @@ using System.Diagnostics.CodeAnalysis; using System.Globalization; -using System.Linq; using System.Numerics; using Content.Client.ContextMenu.UI; using Content.Client.Examine; @@ -16,7 +15,6 @@ using Robust.Client.UserInterface.XAML; using Robust.Shared.Input; using Robust.Shared.Map; -using Robust.Shared.Utility; namespace Content.Client.Guidebook.Controls; @@ -171,17 +169,10 @@ public bool TryParseTag(Dictionary args, [NotNullWhen(true)] out if (args.TryGetValue("Rotation", out var rotation)) { - View.OverrideDirection = Angle.FromDegrees(double.Parse(rotation)).GetDir(); + Sprite.Rotation = Angle.FromDegrees(double.Parse(rotation)); } - if (args.TryGetValue("Margin", out var margin)) - { - Margin = ParseThickness(margin); - } - else - { - Margin = new Thickness(4, 8); - } + Margin = new Thickness(4, 8); // By default, we will map-initialize guidebook entities. if (!args.TryGetValue("Init", out var mapInit) || !bool.Parse(mapInit)) @@ -190,20 +181,4 @@ public bool TryParseTag(Dictionary args, [NotNullWhen(true)] out control = this; return true; } - - private static Thickness ParseThickness(string value) - { - if (string.IsNullOrWhiteSpace(value)) - return default; - - var split = value.Split(" ", StringSplitOptions.RemoveEmptyEntries).Select(x => Parse.Float(x)).ToArray(); - if (split.Length == 1) - return new Thickness(split[0]); - if (split.Length == 2) - return new Thickness(split[0], split[1]); - if (split.Length == 4) - return new Thickness(split[0], split[1], split[2], split[3]); - - throw new Exception("Invalid Thickness format!"); - } } diff --git a/Content.Client/Power/Generation/Teg/TegCirculatorComponent.cs b/Content.Client/Power/Generation/Teg/TegCirculatorComponent.cs deleted file mode 100644 index 486f5505f9d8..000000000000 --- a/Content.Client/Power/Generation/Teg/TegCirculatorComponent.cs +++ /dev/null @@ -1,8 +0,0 @@ -namespace Content.Client.Power.Generation.Teg; - -/// -[RegisterComponent] -public sealed class TegCirculatorComponent : Component -{ - -} diff --git a/Content.Client/Power/Generation/Teg/TegSystem.cs b/Content.Client/Power/Generation/Teg/TegSystem.cs deleted file mode 100644 index e1f0874e8a10..000000000000 --- a/Content.Client/Power/Generation/Teg/TegSystem.cs +++ /dev/null @@ -1,26 +0,0 @@ -using Content.Client.Examine; -using Robust.Shared.Map; - -namespace Content.Client.Power.Generation.Teg; - -/// -/// Handles client-side logic for the thermo-electric generator (TEG). -/// -/// -/// -/// TEG circulators show which direction the in- and outlet port is by popping up two floating arrows when examined. -/// -/// -/// -public sealed class TegSystem : EntitySystem -{ - public override void Initialize() - { - SubscribeLocalEvent(CirculatorExamined); - } - - private void CirculatorExamined(EntityUid uid, TegCirculatorComponent component, ClientExaminedEvent args) - { - Spawn("TegCirculatorArrow", new EntityCoordinates(uid, 0, 0)); - } -} diff --git a/Content.Client/SensorMonitoring/SensorMonitoringWindow.xaml b/Content.Client/SensorMonitoring/SensorMonitoringWindow.xaml deleted file mode 100644 index a2dd57f364ea..000000000000 --- a/Content.Client/SensorMonitoring/SensorMonitoringWindow.xaml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - diff --git a/Content.Client/SensorMonitoring/SensorMonitoringWindow.xaml.cs b/Content.Client/SensorMonitoring/SensorMonitoringWindow.xaml.cs deleted file mode 100644 index 9fc132c74792..000000000000 --- a/Content.Client/SensorMonitoring/SensorMonitoringWindow.xaml.cs +++ /dev/null @@ -1,264 +0,0 @@ -using System.Linq; -using System.Numerics; -using Content.Client.Computer; -using Content.Client.Stylesheets; -using Content.Client.UserInterface.Controls; -using Content.Shared.SensorMonitoring; -using JetBrains.Annotations; -using Robust.Client.AutoGenerated; -using Robust.Client.Graphics; -using Robust.Client.UserInterface; -using Robust.Client.UserInterface.Controls; -using Robust.Client.UserInterface.XAML; -using Robust.Shared.Timing; -using ConsoleUIState = Content.Shared.SensorMonitoring.SensorMonitoringConsoleBoundInterfaceState; -using IncrementalUIState = Content.Shared.SensorMonitoring.SensorMonitoringIncrementalUpdate; - -namespace Content.Client.SensorMonitoring; - -[GenerateTypedNameReferences] -public sealed partial class SensorMonitoringWindow : FancyWindow, IComputerWindow -{ - [Dependency] private readonly IGameTiming _gameTiming = default!; - [Dependency] private readonly ILocalizationManager _loc = default!; - - private TimeSpan _retentionTime; - private readonly Dictionary _sensorData = new(); - - public SensorMonitoringWindow() - { - RobustXamlLoader.Load(this); - } - - public void UpdateState(ConsoleUIState state) - { - _retentionTime = state.RetentionTime; - - _sensorData.Clear(); - - foreach (var netSensor in state.Sensors) - { - var sensor = new SensorData - { - Name = netSensor.Name, - Address = netSensor.Address, - DeviceType = netSensor.DeviceType - }; - - _sensorData.Add(netSensor.NetId, sensor); - - foreach (var netStream in netSensor.Streams) - { - var stream = new SensorStream - { - Name = netStream.Name, - Unit = netStream.Unit - }; - - sensor.Streams.Add(netStream.NetId, stream); - - foreach (var sample in netStream.Samples) - { - stream.Samples.Enqueue(sample); - } - } - } - - Update(); - } - - public void ReceiveMessage(BoundUserInterfaceMessage message) - { - if (message is not IncrementalUIState incremental) - return; - - foreach (var removed in incremental.RemovedSensors) - { - _sensorData.Remove(removed); - } - - foreach (var netSensor in incremental.Sensors) - { - // TODO: Fuck this doesn't work if a sensor is added while the UI is open. - if (!_sensorData.TryGetValue(netSensor.NetId, out var sensor)) - continue; - - foreach (var netStream in netSensor.Streams) - { - // TODO: Fuck this doesn't work if a stream is added while the UI is open. - if (!sensor.Streams.TryGetValue(netStream.NetId, out var stream)) - continue; - - foreach (var (time, value) in netStream.Samples) - { - stream.Samples.Enqueue(new SensorSample(time + incremental.RelTime, value)); - } - } - } - - CullOldSamples(); - Update(); - } - - private void Update() - { - Asdf.RemoveAllChildren(); - - var curTime = _gameTiming.CurTime; - var startTime = curTime - _retentionTime; - - foreach (var sensor in _sensorData.Values) - { - var labelName = new Label { Text = sensor.Name, StyleClasses = { StyleBase.StyleClassLabelHeading } }; - var labelAddress = new Label - { - Text = sensor.Address, - Margin = new Thickness(4, 0), - VerticalAlignment = VAlignment.Bottom, - StyleClasses = { StyleNano.StyleClassLabelSecondaryColor } - }; - - Asdf.AddChild(new BoxContainer - { - Orientation = BoxContainer.LayoutOrientation.Horizontal, Children = - { - labelName, - labelAddress - } - }); - - foreach (var stream in sensor.Streams.Values) - { - var maxValue = stream.Unit switch - { - SensorUnit.PressureKpa => 5000, // 5 MPa - SensorUnit.Ratio => 1, - SensorUnit.PowerW => 1_000_000, // 1 MW - SensorUnit.EnergyJ => 2_000_000, // 2 MJ - _ => 1000 - }; - - // TODO: Better way to do this? - var lastSample = stream.Samples.Last(); - - Asdf.AddChild(new BoxContainer - { - Orientation = BoxContainer.LayoutOrientation.Horizontal, - Children = - { - new Label { Text = stream.Name, StyleClasses = { "monospace" }, HorizontalExpand = true }, - new Label { Text = FormatValue(stream.Unit, lastSample.Value) } - } - }); - - Asdf.AddChild(new GraphView(stream.Samples, startTime, curTime, maxValue) { MinHeight = 150 }); - Asdf.AddChild(new PanelContainer { StyleClasses = { StyleBase.ClassLowDivider } }); - } - } - } - - private string FormatValue(SensorUnit unit, float value) - { - return _loc.GetString( - "sensor-monitoring-value-display", - ("unit", unit.ToString()), - ("value", value)); - } - - private void CullOldSamples() - { - var startTime = _gameTiming.CurTime - _retentionTime; - - foreach (var sensor in _sensorData.Values) - { - foreach (var stream in sensor.Streams.Values) - { - while (stream.Samples.TryPeek(out var sample) && sample.Time < startTime) - { - stream.Samples.Dequeue(); - } - } - } - } - - private sealed class SensorData - { - public string Name = ""; - public string Address = ""; - public SensorDeviceType DeviceType; - - public readonly Dictionary Streams = new(); - } - - private sealed class SensorStream - { - public string Name = ""; - public SensorUnit Unit; - public readonly Queue Samples = new(); - } - - private sealed class GraphView : Control - { - private readonly Queue _samples; - private readonly TimeSpan _startTime; - private readonly TimeSpan _curTime; - private readonly float _maxY; - - public GraphView(Queue samples, TimeSpan startTime, TimeSpan curTime, float maxY) - { - _samples = samples; - _startTime = startTime; - _curTime = curTime; - _maxY = maxY; - RectClipContent = true; - } - - protected override void Draw(DrawingHandleScreen handle) - { - base.Draw(handle); - - var window = (float) (_curTime - _startTime).TotalSeconds; - - // TODO: omg this is terrible don't fucking hardcode this size to something uncached huge omfg. - var vertices = new Vector2[25000]; - var countVtx = 0; - - var lastPoint = new Vector2(float.NaN, float.NaN); - - foreach (var (time, sample) in _samples) - { - var relTime = (float) (time - _startTime).TotalSeconds; - - var posY = PixelHeight - (sample / _maxY) * PixelHeight; - var posX = (relTime / window) * PixelWidth; - - var newPoint = new Vector2(posX, posY); - - if (float.IsFinite(lastPoint.X)) - { - handle.DrawLine(lastPoint, newPoint, Color.White); - - vertices[countVtx++] = lastPoint; - vertices[countVtx++] = lastPoint with { Y = PixelHeight }; - vertices[countVtx++] = newPoint; - vertices[countVtx++] = newPoint; - vertices[countVtx++] = lastPoint with { Y = PixelHeight }; - vertices[countVtx++] = newPoint with { Y = PixelHeight }; - } - - lastPoint = newPoint; - } - - handle.DrawPrimitives(DrawPrimitiveTopology.TriangleList, vertices.AsSpan(0, countVtx), Color.White.WithAlpha(0.1f)); - } - } -} - -[UsedImplicitly] -public sealed class - SensorMonitoringConsoleBoundUserInterface : ComputerBoundUserInterface -{ - public SensorMonitoringConsoleBoundUserInterface(EntityUid owner, Enum uiKey) : base(owner, uiKey) - { - } -} diff --git a/Content.IntegrationTests/Tests/PostMapInitTest.cs b/Content.IntegrationTests/Tests/PostMapInitTest.cs index fd525c073d5f..fb06d9f310fa 100644 --- a/Content.IntegrationTests/Tests/PostMapInitTest.cs +++ b/Content.IntegrationTests/Tests/PostMapInitTest.cs @@ -45,7 +45,6 @@ public sealed class PostMapInitTest private static readonly string[] GameMaps = { "Dev", - "TestTeg", "Fland", "Meta", "Packed", diff --git a/Content.Server/Atmos/Monitor/Systems/AirAlarmSystem.cs b/Content.Server/Atmos/Monitor/Systems/AirAlarmSystem.cs index 4ee9a9ac8e9c..9f57510d1ffe 100644 --- a/Content.Server/Atmos/Monitor/Systems/AirAlarmSystem.cs +++ b/Content.Server/Atmos/Monitor/Systems/AirAlarmSystem.cs @@ -166,7 +166,7 @@ public override void Initialize() SubscribeLocalEvent(OnDeviceListUpdate); SubscribeLocalEvent(OnClose); SubscribeLocalEvent(OnShutdown); - SubscribeLocalEvent(OnActivate); + SubscribeLocalEvent(OnInteract); } private void OnDeviceListUpdate(EntityUid uid, AirAlarmComponent component, DeviceListUpdateEvent args) @@ -225,7 +225,7 @@ private void OnShutdown(EntityUid uid, AirAlarmComponent component, ComponentShu _activeUserInterfaces.Remove(uid); } - private void OnActivate(EntityUid uid, AirAlarmComponent component, ActivateInWorldEvent args) + private void OnInteract(EntityUid uid, AirAlarmComponent component, InteractHandEvent args) { if (!_interactionSystem.InRangeUnobstructed(args.User, args.Target)) return; diff --git a/Content.Server/Atmos/Piping/Binary/Components/GasVolumePumpComponent.cs b/Content.Server/Atmos/Piping/Binary/Components/GasVolumePumpComponent.cs index b79fb3b25421..382688709744 100644 --- a/Content.Server/Atmos/Piping/Binary/Components/GasVolumePumpComponent.cs +++ b/Content.Server/Atmos/Piping/Binary/Components/GasVolumePumpComponent.cs @@ -40,8 +40,5 @@ public sealed class GasVolumePumpComponent : Component [DataField("overclockThreshold")] public float OverclockThreshold { get; set; } = 1000; - - [DataField("lastMolesTransferred")] - public float LastMolesTransferred; } } diff --git a/Content.Server/Atmos/Piping/Binary/EntitySystems/GasPressurePumpSystem.cs b/Content.Server/Atmos/Piping/Binary/EntitySystems/GasPressurePumpSystem.cs index e193de4b3db6..3052fb313bd6 100644 --- a/Content.Server/Atmos/Piping/Binary/EntitySystems/GasPressurePumpSystem.cs +++ b/Content.Server/Atmos/Piping/Binary/EntitySystems/GasPressurePumpSystem.cs @@ -36,7 +36,7 @@ public override void Initialize() SubscribeLocalEvent(OnPumpUpdated); SubscribeLocalEvent(OnPumpLeaveAtmosphere); SubscribeLocalEvent(OnExamined); - SubscribeLocalEvent(OnPumpActivate); + SubscribeLocalEvent(OnPumpInteractHand); // Bound UI subscriptions SubscribeLocalEvent(OnOutputPressureChangeMessage); SubscribeLocalEvent(OnToggleStatusMessage); @@ -99,7 +99,7 @@ private void OnPumpLeaveAtmosphere(EntityUid uid, GasPressurePumpComponent pump, _userInterfaceSystem.TryCloseAll(uid, GasPressurePumpUiKey.Key); } - private void OnPumpActivate(EntityUid uid, GasPressurePumpComponent pump, ActivateInWorldEvent args) + private void OnPumpInteractHand(EntityUid uid, GasPressurePumpComponent pump, InteractHandEvent args) { if (!EntityManager.TryGetComponent(args.User, out ActorComponent? actor)) return; diff --git a/Content.Server/Atmos/Piping/Binary/EntitySystems/GasVolumePumpSystem.cs b/Content.Server/Atmos/Piping/Binary/EntitySystems/GasVolumePumpSystem.cs index 6b3815fdfa65..54bc0d6fde2b 100644 --- a/Content.Server/Atmos/Piping/Binary/EntitySystems/GasVolumePumpSystem.cs +++ b/Content.Server/Atmos/Piping/Binary/EntitySystems/GasVolumePumpSystem.cs @@ -1,17 +1,12 @@ using Content.Server.Administration.Logs; using Content.Server.Atmos.EntitySystems; -using Content.Server.Atmos.Monitor.Systems; using Content.Server.Atmos.Piping.Binary.Components; using Content.Server.Atmos.Piping.Components; -using Content.Server.DeviceNetwork; -using Content.Server.DeviceNetwork.Components; -using Content.Server.DeviceNetwork.Systems; using Content.Server.NodeContainer; using Content.Server.NodeContainer.EntitySystems; using Content.Server.NodeContainer.Nodes; using Content.Shared.Atmos.Piping; using Content.Shared.Atmos.Piping.Binary.Components; -using Content.Shared.Atmos.Piping.Unary.Components; using Content.Shared.Audio; using Content.Shared.Database; using Content.Shared.Examine; @@ -34,8 +29,6 @@ public sealed class GasVolumePumpSystem : EntitySystem [Dependency] private readonly SharedAmbientSoundSystem _ambientSoundSystem = default!; [Dependency] private readonly SharedAppearanceSystem _appearance = default!; [Dependency] private readonly NodeContainerSystem _nodeContainer = default!; - [Dependency] private readonly DeviceNetworkSystem _deviceNetwork = default!; - public override void Initialize() { @@ -45,12 +38,10 @@ public override void Initialize() SubscribeLocalEvent(OnVolumePumpUpdated); SubscribeLocalEvent(OnVolumePumpLeaveAtmosphere); SubscribeLocalEvent(OnExamined); - SubscribeLocalEvent(OnPumpActivate); + SubscribeLocalEvent(OnPumpInteractHand); // Bound UI subscriptions SubscribeLocalEvent(OnTransferRateChangeMessage); SubscribeLocalEvent(OnToggleStatusMessage); - - SubscribeLocalEvent(OnPacketRecv); } private void OnInit(EntityUid uid, GasVolumePumpComponent pump, ComponentInit args) @@ -110,8 +101,6 @@ private void OnVolumePumpUpdated(EntityUid uid, GasVolumePumpComponent pump, Atm } } - pump.LastMolesTransferred = removed.TotalMoles; - _atmosphereSystem.Merge(outlet.Air, removed); _ambientSoundSystem.SetAmbience(uid, removed.TotalMoles > 0f); } @@ -125,7 +114,7 @@ private void OnVolumePumpLeaveAtmosphere(EntityUid uid, GasVolumePumpComponent p _userInterfaceSystem.TryCloseAll(uid, GasVolumePumpUiKey.Key); } - private void OnPumpActivate(EntityUid uid, GasVolumePumpComponent pump, ActivateInWorldEvent args) + private void OnPumpInteractHand(EntityUid uid, GasVolumePumpComponent pump, InteractHandEvent args) { if (!EntityManager.TryGetComponent(args.User, out ActorComponent? actor)) return; @@ -176,24 +165,5 @@ private void UpdateAppearance(EntityUid uid, GasVolumePumpComponent? pump = null _appearance.SetData(uid, PumpVisuals.Enabled, pump.Enabled, appearance); } - - private void OnPacketRecv(EntityUid uid, GasVolumePumpComponent component, DeviceNetworkPacketEvent args) - { - if (!TryComp(uid, out DeviceNetworkComponent? netConn) - || !args.Data.TryGetValue(DeviceNetworkConstants.Command, out var cmd)) - return; - - var payload = new NetworkPayload(); - - switch (cmd) - { - case AtmosDeviceNetworkSystem.SyncData: - payload.Add(DeviceNetworkConstants.Command, AtmosDeviceNetworkSystem.SyncData); - payload.Add(AtmosDeviceNetworkSystem.SyncData, new GasVolumePumpData(component.LastMolesTransferred)); - - _deviceNetwork.QueuePacket(uid, args.SenderAddress, payload, device: netConn); - return; - } - } } } diff --git a/Content.Server/Atmos/Piping/Unary/Components/GasThermoMachineComponent.cs b/Content.Server/Atmos/Piping/Unary/Components/GasThermoMachineComponent.cs index 903ad64c9531..f9122caf3c4d 100644 --- a/Content.Server/Atmos/Piping/Unary/Components/GasThermoMachineComponent.cs +++ b/Content.Server/Atmos/Piping/Unary/Components/GasThermoMachineComponent.cs @@ -11,6 +11,10 @@ public sealed class GasThermoMachineComponent : Component [DataField("inlet")] public string InletName = "pipe"; + [ViewVariables(VVAccess.ReadWrite)] + [DataField("enabled")] + public bool Enabled = false; + /// /// Current maximum temperature, calculated from and the quality of matter /// bins. The heat capacity effectively determines the rate at which the thermo machine can add or remove @@ -89,11 +93,5 @@ public sealed class GasThermoMachineComponent : Component [DataField("machinePartTemperature", customTypeSerializer: typeof(PrototypeIdSerializer))] public string MachinePartTemperature = "Capacitor"; - /// - /// Last amount of energy added/removed from the attached pipe network - /// - [DataField("lastEnergyDelta")] - [ViewVariables(VVAccess.ReadWrite)] - public float LastEnergyDelta; } } diff --git a/Content.Server/Atmos/Piping/Unary/EntitySystems/GasThermoMachineSystem.cs b/Content.Server/Atmos/Piping/Unary/EntitySystems/GasThermoMachineSystem.cs index 756942eccad1..872ea12c1b3d 100644 --- a/Content.Server/Atmos/Piping/Unary/EntitySystems/GasThermoMachineSystem.cs +++ b/Content.Server/Atmos/Piping/Unary/EntitySystems/GasThermoMachineSystem.cs @@ -1,15 +1,10 @@ using Content.Server.Atmos.EntitySystems; -using Content.Server.Atmos.Monitor.Systems; using Content.Server.Atmos.Piping.Components; using Content.Server.Atmos.Piping.Unary.Components; using Content.Server.Construction; -using Content.Server.DeviceNetwork; -using Content.Server.DeviceNetwork.Components; -using Content.Server.DeviceNetwork.Systems; using Content.Server.NodeContainer; using Content.Server.NodeContainer.EntitySystems; using Content.Server.NodeContainer.Nodes; -using Content.Server.Power.Components; using Content.Shared.Atmos; using Content.Shared.Atmos.Piping.Unary.Components; using JetBrains.Annotations; @@ -27,8 +22,6 @@ public sealed class GasThermoMachineSystem : EntitySystem [Dependency] private readonly SharedAppearanceSystem _appearance = default!; [Dependency] private readonly PowerReceiverSystem _power = default!; [Dependency] private readonly NodeContainerSystem _nodeContainer = default!; - [Dependency] private readonly DeviceNetworkSystem _deviceNetwork = default!; - public override void Initialize() { @@ -42,15 +35,12 @@ public override void Initialize() // UI events SubscribeLocalEvent(OnToggleMessage); SubscribeLocalEvent(OnChangeTemperature); - - // Device network - SubscribeLocalEvent(OnPacketRecv); } private void OnThermoMachineUpdated(EntityUid uid, GasThermoMachineComponent thermoMachine, AtmosDeviceUpdateEvent args) { - if (!(_power.IsPowered(uid)) + if (!(thermoMachine.Enabled && _power.IsPowered(uid)) || !TryComp(uid, out NodeContainerComponent? nodeContainer) || !_nodeContainer.TryGetNode(nodeContainer, thermoMachine.InletName, out PipeNode? inlet)) { @@ -60,14 +50,10 @@ private void OnThermoMachineUpdated(EntityUid uid, GasThermoMachineComponent the var airHeatCapacity = _atmosphereSystem.GetHeatCapacity(inlet.Air); var combinedHeatCapacity = airHeatCapacity + thermoMachine.HeatCapacity; - var startEnergy = inlet.Air.Temperature * airHeatCapacity; - if (!MathHelper.CloseTo(combinedHeatCapacity, 0, 0.001f)) { var combinedEnergy = thermoMachine.HeatCapacity * thermoMachine.TargetTemperature + airHeatCapacity * inlet.Air.Temperature; inlet.Air.Temperature = combinedEnergy / combinedHeatCapacity; - - thermoMachine.LastEnergyDelta = inlet.Air.Temperature * airHeatCapacity - startEnergy; } } @@ -112,7 +98,7 @@ private void OnGasThermoUpgradeExamine(EntityUid uid, GasThermoMachineComponent private void OnToggleMessage(EntityUid uid, GasThermoMachineComponent thermoMachine, GasThermomachineToggleMessage args) { - _power.TogglePower(uid); + SetEnabled(uid, thermoMachine, _power.TogglePower(uid)); DirtyUI(uid, thermoMachine); } @@ -129,12 +115,13 @@ private void DirtyUI(EntityUid uid, GasThermoMachineComponent? thermoMachine, Se if (!Resolve(uid, ref thermoMachine, ref ui, false)) return; - ApcPowerReceiverComponent? powerReceiver = null; - if (!Resolve(uid, ref powerReceiver)) - return; - _userInterfaceSystem.TrySetUiState(uid, ThermomachineUiKey.Key, - new GasThermomachineBoundUserInterfaceState(thermoMachine.MinTemperature, thermoMachine.MaxTemperature, thermoMachine.TargetTemperature, !powerReceiver.PowerDisabled, thermoMachine.Mode), null, ui); + new GasThermomachineBoundUserInterfaceState(thermoMachine.MinTemperature, thermoMachine.MaxTemperature, thermoMachine.TargetTemperature, thermoMachine.Enabled, thermoMachine.Mode), null, ui); + } + + private void SetEnabled(EntityUid uid, GasThermoMachineComponent thermoMachine, bool enabled) + { + thermoMachine.Enabled = enabled; } private void OnExamined(EntityUid uid, GasThermoMachineComponent thermoMachine, ExaminedEvent args) @@ -150,25 +137,5 @@ private void OnExamined(EntityUid uid, GasThermoMachineComponent thermoMachine, args.PushMarkup(str); } - - private void OnPacketRecv(EntityUid uid, GasThermoMachineComponent component, DeviceNetworkPacketEvent args) - { - if (!TryComp(uid, out DeviceNetworkComponent? netConn) - || !args.Data.TryGetValue(DeviceNetworkConstants.Command, out var cmd)) - return; - - var payload = new NetworkPayload(); - - switch (cmd) - { - case AtmosDeviceNetworkSystem.SyncData: - payload.Add(DeviceNetworkConstants.Command, AtmosDeviceNetworkSystem.SyncData); - payload.Add(AtmosDeviceNetworkSystem.SyncData, new GasThermoMachineData(component.LastEnergyDelta)); - - _deviceNetwork.QueuePacket(uid, args.SenderAddress, payload, device: netConn); - - return; - } - } } } diff --git a/Content.Server/NodeContainer/EntitySystems/NodeGroupSystem.cs b/Content.Server/NodeContainer/EntitySystems/NodeGroupSystem.cs index 2f53bff7ad45..56b1cee3d1eb 100644 --- a/Content.Server/NodeContainer/EntitySystems/NodeGroupSystem.cs +++ b/Content.Server/NodeContainer/EntitySystems/NodeGroupSystem.cs @@ -438,7 +438,6 @@ private static Color CalcNodeGroupColor(BaseNodeGroup group) NodeGroupID.AMEngine => Color.Purple, NodeGroupID.Pipe => Color.Blue, NodeGroupID.WireNet => Color.DarkMagenta, - NodeGroupID.Teg => Color.Red, _ => Color.White }; } diff --git a/Content.Server/NodeContainer/NodeGroups/NodeGroupFactory.cs b/Content.Server/NodeContainer/NodeGroups/NodeGroupFactory.cs index 1af938da8363..e4dac00683c1 100644 --- a/Content.Server/NodeContainer/NodeGroups/NodeGroupFactory.cs +++ b/Content.Server/NodeContainer/NodeGroups/NodeGroupFactory.cs @@ -1,5 +1,4 @@ using System.Reflection; -using Content.Server.Power.Generation.Teg; using Robust.Shared.Reflection; namespace Content.Server.NodeContainer.NodeGroups @@ -62,12 +61,5 @@ public enum NodeGroupID : byte Pipe, WireNet, Spreader, - - /// - /// Group used by the TEG. - /// - /// - /// - Teg, } } diff --git a/Content.Server/Power/Generation/Teg/TegCirculatorComponent.cs b/Content.Server/Power/Generation/Teg/TegCirculatorComponent.cs deleted file mode 100644 index e2f7e59e3579..000000000000 --- a/Content.Server/Power/Generation/Teg/TegCirculatorComponent.cs +++ /dev/null @@ -1,43 +0,0 @@ -using Content.Shared.Atmos; - -namespace Content.Server.Power.Generation.Teg; - -/// -/// A "circulator" for the thermo-electric generator (TEG). -/// Circulators are used by the TEG to take in a side of either hot or cold gas. -/// -/// -[RegisterComponent] -[Access(typeof(TegSystem))] -public sealed class TegCirculatorComponent : Component -{ - /// - /// The difference between the inlet and outlet pressure at the start of the previous tick. - /// - [DataField("last_pressure_delta")] [ViewVariables(VVAccess.ReadWrite)] - public float LastPressureDelta; - - /// - /// The amount of moles transferred by the circulator last tick. - /// - [DataField("last_moles_transferred")] [ViewVariables(VVAccess.ReadWrite)] - public float LastMolesTransferred; - - /// - /// Minimum pressure delta between inlet and outlet for which the circulator animation speed is "fast". - /// - [DataField("visual_speed_delta")] [ViewVariables(VVAccess.ReadWrite)] - public float VisualSpeedDelta = 5 * Atmospherics.OneAtmosphere; - - /// - /// Light color of this circulator when it's running at "slow" speed. - /// - [DataField("light_color_slow")] [ViewVariables(VVAccess.ReadWrite)] - public Color LightColorSlow; - - /// - /// Light color of this circulator when it's running at "fast" speed. - /// - [DataField("light_color_fast")] [ViewVariables(VVAccess.ReadWrite)] - public Color LightColorFast; -} diff --git a/Content.Server/Power/Generation/Teg/TegGeneratorComponent.cs b/Content.Server/Power/Generation/Teg/TegGeneratorComponent.cs deleted file mode 100644 index 3bd1616ce3e0..000000000000 --- a/Content.Server/Power/Generation/Teg/TegGeneratorComponent.cs +++ /dev/null @@ -1,69 +0,0 @@ -namespace Content.Server.Power.Generation.Teg; - -/// -/// The centerpiece for the thermo-electric generator (TEG). -/// -/// -[RegisterComponent] -[Access(typeof(TegSystem))] -public sealed class TegGeneratorComponent : Component -{ - /// - /// When transferring energy from the hot to cold side, - /// determines how much of that energy can be extracted as electricity. - /// - /// - /// A value of 0.9 means that 90% of energy transferred goes to electricity. - /// - [ViewVariables(VVAccess.ReadWrite)] [DataField("thermal_efficiency")] - public float ThermalEfficiency = 0.65f; - - /// - /// Simple factor that scales effective electricity generation. - /// - [ViewVariables(VVAccess.ReadWrite)] [DataField("power_factor")] - public float PowerFactor = 1; - - /// - /// Amount of energy (Joules) generated by the TEG last atmos tick. - /// - [ViewVariables(VVAccess.ReadWrite)] [DataField("last_generation")] - public float LastGeneration; - - /// - /// The current target for TEG power generation. - /// Drifts towards actual power draw of the network with . - /// - [ViewVariables(VVAccess.ReadWrite)] [DataField("ramp_position")] - public float RampPosition; - - /// - /// Factor by which TEG power generation scales, both up and down. - /// - [ViewVariables(VVAccess.ReadWrite)] [DataField("ramp_factor")] - public float RampFactor = 1.05f; - - /// - /// Minimum position for the ramp. Avoids TEG taking too long to start. - /// - [ViewVariables(VVAccess.ReadWrite)] [DataField("ramp_threshold")] - public float RampMinimum = 5000; - - /// - /// Power output value at which the sprite appearance and sound volume should cap out. - /// - [ViewVariables(VVAccess.ReadWrite)] [DataField("max_visual_power")] - public float MaxVisualPower = 200_000; - - /// - /// Minimum ambient sound volume, when we're producing just barely any power at all. - /// - [ViewVariables(VVAccess.ReadWrite)] [DataField("volume_min")] - public float VolumeMin = -9; - - /// - /// Maximum ambient sound volume, when we're producing >= power. - /// - [ViewVariables(VVAccess.ReadWrite)] [DataField("volume_max")] - public float VolumeMax = -4; -} diff --git a/Content.Server/Power/Generation/Teg/TegNodeGroup.cs b/Content.Server/Power/Generation/Teg/TegNodeGroup.cs deleted file mode 100644 index 7d844afcc434..000000000000 --- a/Content.Server/Power/Generation/Teg/TegNodeGroup.cs +++ /dev/null @@ -1,206 +0,0 @@ -using System.Linq; -using Content.Server.NodeContainer; -using Content.Server.NodeContainer.NodeGroups; -using Content.Server.NodeContainer.Nodes; -using Robust.Shared.Map.Components; -using Robust.Shared.Utility; - -namespace Content.Server.Power.Generation.Teg; - -/// -/// Node group that connects the central TEG with its two circulators. -/// -/// -/// -/// -[NodeGroup(NodeGroupID.Teg)] -public sealed class TegNodeGroup : BaseNodeGroup -{ - /// - /// If true, this TEG is fully built and has all its parts properly connected. - /// - [ViewVariables(VVAccess.ReadWrite)] - public bool IsFullyBuilt { get; private set; } - - /// - /// The central generator component. - /// - /// - [ViewVariables(VVAccess.ReadWrite)] - public TegNodeGenerator? Generator { get; private set; } - - // Illustration for how the TEG A/B circulators are laid out. - // Circulator B Generator Circulator A - // ^ -> | - // | V - // They have rotations like the arrows point out. - - /// - /// The A-side circulator. This is the circulator that is in the direction FACING the center component's rotation. - /// - /// - /// Not filled in if there is no center piece to deduce relative rotation from. - /// - /// - [ViewVariables(VVAccess.ReadWrite)] - public TegNodeCirculator? CirculatorA { get; private set; } - - /// - /// The B-side circulator. This circulator is opposite . - /// - /// - /// Not filled in if there is no center piece to deduce relative rotation from. - /// - /// - [ViewVariables(VVAccess.ReadWrite)] - public TegNodeCirculator? CirculatorB { get; private set; } - - private IEntityManager? _entityManager; - - public override void Initialize(Node sourceNode, IEntityManager entMan) - { - base.Initialize(sourceNode, entMan); - - _entityManager = entMan; - } - - public override void LoadNodes(List groupNodes) - { - DebugTools.Assert(groupNodes.Count <= 3, "The TEG has at most 3 parts"); - DebugTools.Assert(_entityManager != null); - - base.LoadNodes(groupNodes); - - Generator = groupNodes.OfType().SingleOrDefault(); - if (Generator != null) - { - // If we have a generator, we can assign CirculatorA and CirculatorB based on relative rotation. - var xformGenerator = _entityManager.GetComponent(Generator.Owner); - var genDir = xformGenerator.LocalRotation.GetDir(); - - foreach (var node in groupNodes) - { - if (node is not TegNodeCirculator circulator) - continue; - - var xform = _entityManager.GetComponent(node.Owner); - var dir = xform.LocalRotation.GetDir(); - if (genDir.GetClockwise90Degrees() == dir) - { - CirculatorA = circulator; - } - else - { - CirculatorB = circulator; - } - } - - } - - IsFullyBuilt = Generator != null && CirculatorA != null && CirculatorB != null; - - var tegSystem = _entityManager.EntitySysManager.GetEntitySystem(); - foreach (var node in groupNodes) - { - if (node is TegNodeGenerator generator) - tegSystem.UpdateGeneratorConnectivity(generator.Owner, this); - - if (node is TegNodeCirculator circulator) - tegSystem.UpdateCirculatorConnectivity(circulator.Owner, this); - } - } -} - -/// -/// Node used by the central TEG generator component. -/// -/// -/// -[DataDefinition] -public sealed class TegNodeGenerator : Node -{ - public override IEnumerable GetReachableNodes( - TransformComponent xform, - EntityQuery nodeQuery, - EntityQuery xformQuery, - MapGridComponent? grid, - IEntityManager entMan) - { - if (!xform.Anchored || grid == null) - yield break; - - var gridIndex = grid.TileIndicesFor(xform.Coordinates); - - var dir = xform.LocalRotation.GetDir(); - var a = FindCirculator(dir); - var b = FindCirculator(dir.GetOpposite()); - - if (a != null) - yield return a; - - if (b != null) - yield return b; - - TegNodeCirculator? FindCirculator(Direction searchDir) - { - var targetIdx = gridIndex.Offset(searchDir); - - foreach (var node in NodeHelpers.GetNodesInTile(nodeQuery, grid, targetIdx)) - { - if (node is not TegNodeCirculator circulator) - continue; - - var entity = node.Owner; - var entityXform = xformQuery.GetComponent(entity); - var entityDir = entityXform.LocalRotation.GetDir(); - - if (entityDir == searchDir.GetClockwise90Degrees()) - return circulator; - } - - return null; - } - } -} - -/// -/// Node used by the central TEG circulator entities. -/// -/// -/// -[DataDefinition] -public sealed class TegNodeCirculator : Node -{ - public override IEnumerable GetReachableNodes( - TransformComponent xform, - EntityQuery nodeQuery, - EntityQuery xformQuery, - MapGridComponent? grid, - IEntityManager entMan) - { - if (!xform.Anchored || grid == null) - yield break; - - var gridIndex = grid.TileIndicesFor(xform.Coordinates); - - var dir = xform.LocalRotation.GetDir(); - var searchDir = dir.GetClockwise90Degrees(); - var targetIdx = gridIndex.Offset(searchDir); - - foreach (var node in NodeHelpers.GetNodesInTile(nodeQuery, grid, targetIdx)) - { - if (node is not TegNodeGenerator generator) - continue; - - var entity = node.Owner; - var entityXform = xformQuery.GetComponent(entity); - var entityDir = entityXform.LocalRotation.GetDir(); - - if (entityDir == searchDir || entityDir == searchDir.GetOpposite()) - { - yield return generator; - break; - } - } - } -} diff --git a/Content.Server/Power/Generation/Teg/TegSensorData.cs b/Content.Server/Power/Generation/Teg/TegSensorData.cs deleted file mode 100644 index f994b5762c90..000000000000 --- a/Content.Server/Power/Generation/Teg/TegSensorData.cs +++ /dev/null @@ -1,52 +0,0 @@ -using Content.Server.Power.Components; - -namespace Content.Server.Power.Generation.Teg; - -/// -/// Sensor data reported by the when queried over the device network. -/// -/// -public sealed class TegSensorData -{ - /// - /// Information for the A-side circulator. - /// - public Circulator CirculatorA; - - /// - /// Information for the B-side circulator. - /// - public Circulator CirculatorB; - - /// - /// The amount of energy (Joules) generated by the TEG last atmos tick. - /// - /// - public float LastGeneration; - - /// - /// Ramping position for the TEG power generation. - /// - /// - public float RampPosition; - - /// - /// Power (Watts) actually being supplied by the TEG to connected power network. - /// - /// - public float PowerOutput; - - /// - /// Information for a single TEG circulator. - /// - /// Pressure measured at the circulator's input pipe - /// Pressure measured at the circulator's output pipe - /// Temperature measured at the circulator's input pipe - /// Temperature measured at the circulator's output pipe - public record struct Circulator( - float InletPressure, - float OutletPressure, - float InletTemperature, - float OutletTemperature); -} - diff --git a/Content.Server/Power/Generation/Teg/TegSystem.cs b/Content.Server/Power/Generation/Teg/TegSystem.cs deleted file mode 100644 index 4bd1c0a14c9a..000000000000 --- a/Content.Server/Power/Generation/Teg/TegSystem.cs +++ /dev/null @@ -1,383 +0,0 @@ -using Content.Server.Atmos; -using Content.Server.Atmos.EntitySystems; -using Content.Server.Atmos.Piping.Components; -using Content.Server.Audio; -using Content.Server.DeviceNetwork; -using Content.Server.DeviceNetwork.Systems; -using Content.Server.NodeContainer; -using Content.Server.NodeContainer.Nodes; -using Content.Server.Power.Components; -using Content.Shared.Examine; -using Content.Shared.Power.Generation.Teg; -using Content.Shared.Rounding; -using Robust.Server.GameObjects; - -namespace Content.Server.Power.Generation.Teg; - -/// -/// Handles processing logic for the thermo-electric generator (TEG). -/// -/// -/// -/// The TEG generates power by exchanging heat between gases flowing through its two sides. -/// The gas flows through a "circulator" entity on each side, which have both an inlet and an outlet port. -/// -/// -/// Connecting the TEG core to its circulators is implemented via a node group. See . -/// -/// -/// The TEG center does HV power output, and must also be connected to an LV wire for the TEG to function. -/// -/// -/// Unlike in SS13, the TEG actually adjusts gas heat exchange to match the energy demand of the power network. -/// To achieve this, the TEG implements its own ramping logic instead of using the built-in Pow3r ramping. -/// The TEG actually has a maximum output of +n% more than was really generated, -/// which allows Pow3r to draw more power to "signal" that there is more network load. -/// The ramping is also exponential instead of linear like in normal Pow3r. -/// This system does mean a fully-loaded TEG creates +n% power out of thin air, but this is considered acceptable. -/// -/// -/// -/// -/// -/// -public sealed class TegSystem : EntitySystem -{ - /// - /// Node name for the TEG part connection nodes (). - /// - private const string NodeNameTeg = "teg"; - - /// - /// Node name for the inlet pipe of a circulator. - /// - private const string NodeNameInlet = "inlet"; - - /// - /// Node name for the outlet pipe of a circulator. - /// - private const string NodeNameOutlet = "outlet"; - - /// - /// Device network command to have the TEG output a object for its last statistics. - /// - public const string DeviceNetworkCommandSyncData = "teg_sync_data"; - - [Dependency] private readonly AtmosphereSystem _atmosphere = default!; - [Dependency] private readonly DeviceNetworkSystem _deviceNetwork = default!; - [Dependency] private readonly AppearanceSystem _appearance = default!; - [Dependency] private readonly PointLightSystem _pointLight = default!; - [Dependency] private readonly AmbientSoundSystem _ambientSound = default!; - - private EntityQuery _nodeContainerQuery; - - public override void Initialize() - { - base.Initialize(); - - SubscribeLocalEvent(GeneratorUpdate); - SubscribeLocalEvent(GeneratorPowerChange); - SubscribeLocalEvent(DeviceNetworkPacketReceived); - - SubscribeLocalEvent(GeneratorExamined); - - _nodeContainerQuery = GetEntityQuery(); - } - - private void GeneratorExamined(EntityUid uid, TegGeneratorComponent component, ExaminedEvent args) - { - if (GetNodeGroup(uid) is not { IsFullyBuilt: true }) - { - args.PushMarkup(Loc.GetString("teg-generator-examine-connection")); - } - else - { - var supplier = Comp(uid); - args.PushMarkup(Loc.GetString("teg-generator-examine-power", ("power", supplier.CurrentSupply))); - } - } - - private void GeneratorUpdate(EntityUid uid, TegGeneratorComponent component, AtmosDeviceUpdateEvent args) - { - var tegGroup = GetNodeGroup(uid); - if (tegGroup is not { IsFullyBuilt: true }) - return; - - var supplier = Comp(uid); - var powerReceiver = Comp(uid); - if (!powerReceiver.Powered) - { - supplier.MaxSupply = 0; - return; - } - - var circA = tegGroup.CirculatorA!.Owner; - var circB = tegGroup.CirculatorB!.Owner; - - var (inletA, outletA) = GetPipes(circA); - var (inletB, outletB) = GetPipes(circB); - - var (airA, δpA) = GetCirculatorAirTransfer(inletA.Air, outletA.Air); - var (airB, δpB) = GetCirculatorAirTransfer(inletB.Air, outletB.Air); - - var cA = _atmosphere.GetHeatCapacity(airA); - var cB = _atmosphere.GetHeatCapacity(airB); - - // Shift ramp position based on demand and generation from previous tick. - var curRamp = component.RampPosition; - var lastDraw = supplier.CurrentSupply; - // Limit amount lost/gained based on power factor. - curRamp = MathHelper.Clamp(lastDraw, curRamp / component.RampFactor, curRamp * component.RampFactor); - curRamp = MathF.Max(curRamp, component.RampMinimum); - component.RampPosition = curRamp; - - var electricalEnergy = 0f; - - if (airA.Pressure > 0 && airB.Pressure > 0) - { - var hotA = airA.Temperature > airB.Temperature; - var cHot = hotA ? cA : cB; - - // Calculate maximum amount of energy to generate this tick based on ramping above. - // This clamps the thermal energy transfer as well. - var targetEnergy = curRamp / _atmosphere.AtmosTickRate; - var transferMax = targetEnergy / (component.ThermalEfficiency * component.PowerFactor); - - // Calculate thermal and electrical energy transfer between the two sides. - var δT = MathF.Abs(airA.Temperature - airB.Temperature); - var transfer = Math.Min(δT * cA * cB / (cA + cB - cHot * component.ThermalEfficiency), transferMax); - electricalEnergy = transfer * component.ThermalEfficiency * component.PowerFactor; - var outTransfer = transfer * (1 - component.ThermalEfficiency); - - // Adjust thermal energy in transferred gas mixtures. - if (hotA) - { - // A -> B - airA.Temperature -= transfer / cA; - airB.Temperature += outTransfer / cB; - } - else - { - // B -> A - airA.Temperature += outTransfer / cA; - airB.Temperature -= transfer / cB; - } - } - - component.LastGeneration = electricalEnergy; - - // Turn energy (at atmos tick rate) into wattage. - var power = electricalEnergy * _atmosphere.AtmosTickRate; - // Add ramp factor. This magics slight power into existence, but allows us to ramp up. - supplier.MaxSupply = power * component.RampFactor; - - var circAComp = Comp(circA); - var circBComp = Comp(circB); - - circAComp.LastPressureDelta = δpA; - circAComp.LastMolesTransferred = airA.TotalMoles; - circBComp.LastPressureDelta = δpB; - circBComp.LastMolesTransferred = airB.TotalMoles; - - _atmosphere.Merge(outletA.Air, airA); - _atmosphere.Merge(outletB.Air, airB); - - UpdateAppearance(uid, component, powerReceiver, tegGroup); - } - - private void UpdateAppearance( - EntityUid uid, - TegGeneratorComponent component, - ApcPowerReceiverComponent powerReceiver, - TegNodeGroup nodeGroup) - { - int powerLevel; - if (powerReceiver.Powered) - { - powerLevel = ContentHelpers.RoundToLevels( - component.RampPosition - component.RampMinimum, - component.MaxVisualPower - component.RampMinimum, - 12); - } - else - { - powerLevel = 0; - } - - _ambientSound.SetAmbience(uid, powerLevel >= 1); - // TODO: Ok so this introduces popping which is a major shame big rip. - // _ambientSound.SetVolume(uid, MathHelper.Lerp(component.VolumeMin, component.VolumeMax, MathHelper.Clamp01(component.RampPosition / component.MaxVisualPower))); - - _appearance.SetData(uid, TegVisuals.PowerOutput, powerLevel); - - if (nodeGroup.IsFullyBuilt) - { - UpdateCirculatorAppearance(nodeGroup.CirculatorA!.Owner, powerReceiver.Powered); - UpdateCirculatorAppearance(nodeGroup.CirculatorB!.Owner, powerReceiver.Powered); - } - } - - [Access(typeof(TegNodeGroup))] - public void UpdateGeneratorConnectivity( - EntityUid uid, - TegNodeGroup group, - TegGeneratorComponent? component = null) - { - if (!Resolve(uid, ref component)) - return; - - var powerReceiver = Comp(uid); - - powerReceiver.PowerDisabled = !group.IsFullyBuilt; - - UpdateAppearance(uid, component, powerReceiver, group); - } - - [Access(typeof(TegNodeGroup))] - public void UpdateCirculatorConnectivity( - EntityUid uid, - TegNodeGroup group, - TegCirculatorComponent? component = null) - { - if (!Resolve(uid, ref component)) - return; - - // If the group IS fully built, the generator will update its circulators. - // Otherwise, make sure circulator is set to nothing. - if (!group.IsFullyBuilt) - { - UpdateCirculatorAppearance(uid, false); - } - } - - private void UpdateCirculatorAppearance(EntityUid uid, bool powered) - { - var circ = Comp(uid); - - TegCirculatorSpeed speed; - if (powered && circ.LastPressureDelta > 0 && circ.LastMolesTransferred > 0) - { - if (circ.LastPressureDelta > circ.VisualSpeedDelta) - speed = TegCirculatorSpeed.SpeedFast; - else - speed = TegCirculatorSpeed.SpeedSlow; - } - else - { - speed = TegCirculatorSpeed.SpeedStill; - } - - _appearance.SetData(uid, TegVisuals.CirculatorSpeed, speed); - _appearance.SetData(uid, TegVisuals.CirculatorPower, powered); - - if (TryComp(uid, out PointLightComponent? pointLight)) - { - _pointLight.SetEnabled(uid, powered, pointLight); - pointLight.Color = speed == TegCirculatorSpeed.SpeedFast ? circ.LightColorFast : circ.LightColorSlow; - } - } - - private void GeneratorPowerChange(EntityUid uid, TegGeneratorComponent component, ref PowerChangedEvent args) - { - var nodeGroup = GetNodeGroup(uid); - if (nodeGroup == null) - return; - - UpdateAppearance(uid, component, Comp(uid), nodeGroup); - } - - /// Null if the node group is not yet available. This can happen during initialization. - private TegNodeGroup? GetNodeGroup(EntityUid uidGenerator) - { - NodeContainerComponent? nodeContainer = null; - if (!_nodeContainerQuery.Resolve(uidGenerator, ref nodeContainer)) - return null; - - if (!nodeContainer.Nodes.TryGetValue(NodeNameTeg, out var tegNode)) - return null; - - if (tegNode.NodeGroup is not TegNodeGroup tegGroup) - return null; - - return tegGroup; - } - - private static (GasMixture, float δp) GetCirculatorAirTransfer(GasMixture airInlet, GasMixture airOutlet) - { - var n1 = airInlet.TotalMoles; - var n2 = airOutlet.TotalMoles; - var p1 = airInlet.Pressure; - var p2 = airOutlet.Pressure; - var V1 = airInlet.Volume; - var V2 = airOutlet.Volume; - var T1 = airInlet.Temperature; - var T2 = airOutlet.Temperature; - - var δp = p1 - p2; - - var denom = T1 * V2 + T2 * V1; - - if (δp > 0 && p1 > 0 && denom > 0) - { - var transferMoles = n1 - (n1 + n2) * T2 * V1 / denom; - return (airInlet.Remove(transferMoles), δp); - } - - return (new GasMixture(), δp); - } - - private (PipeNode inlet, PipeNode outlet) GetPipes(EntityUid uidCirculator) - { - var nodeContainer = _nodeContainerQuery.GetComponent(uidCirculator); - var inlet = (PipeNode) nodeContainer.Nodes[NodeNameInlet]; - var outlet = (PipeNode) nodeContainer.Nodes[NodeNameOutlet]; - - return (inlet, outlet); - } - - private void DeviceNetworkPacketReceived( - EntityUid uid, - TegGeneratorComponent component, - DeviceNetworkPacketEvent args) - { - if (!args.Data.TryGetValue(DeviceNetworkConstants.Command, out string? cmd)) - return; - - switch (cmd) - { - case DeviceNetworkCommandSyncData: - var group = GetNodeGroup(uid); - if (group is not { IsFullyBuilt: true }) - return; - - var supplier = Comp(uid); - - var payload = new NetworkPayload - { - [DeviceNetworkConstants.Command] = DeviceNetworkCommandSyncData, - [DeviceNetworkCommandSyncData] = new TegSensorData - { - CirculatorA = GetCirculatorSensorData(group.CirculatorA!.Owner), - CirculatorB = GetCirculatorSensorData(group.CirculatorB!.Owner), - LastGeneration = component.LastGeneration, - PowerOutput = supplier.CurrentSupply, - RampPosition = component.RampPosition - } - }; - - _deviceNetwork.QueuePacket(uid, args.SenderAddress, payload); - break; - } - } - - private TegSensorData.Circulator GetCirculatorSensorData(EntityUid circulator) - { - var (inlet, outlet) = GetPipes(circulator); - - return new TegSensorData.Circulator( - inlet.Air.Pressure, - outlet.Air.Pressure, - inlet.Air.Temperature, - outlet.Air.Temperature); - } -} diff --git a/Content.Server/SensorMonitoring/BatterySensorComponent.cs b/Content.Server/SensorMonitoring/BatterySensorComponent.cs deleted file mode 100644 index c99573882c47..000000000000 --- a/Content.Server/SensorMonitoring/BatterySensorComponent.cs +++ /dev/null @@ -1,32 +0,0 @@ -using Content.Server.Power.Components; - -namespace Content.Server.SensorMonitoring; - -/// -/// Enables a battery entity (such as an SMES) to be monitored via the sensor monitoring console. -/// -/// -/// The entity should also have a and . -/// -[RegisterComponent] -public sealed class BatterySensorComponent : Component -{ -} - -/// -/// Device network data sent by a . -/// -/// The current energy charge of the battery, in joules (J). -/// The maximum energy capacity of the battery, in joules (J). -/// The current amount of power being received by the battery, in watts (W). -/// The maximum amount of power that can be received by the battery, in watts (W). -/// The current amount of power being supplied by the battery, in watts (W). -/// The maximum amount of power that can be received by the battery, in watts (W). -public sealed record BatterySensorData( - float Charge, - float MaxCharge, - float Receiving, - float MaxReceiving, - float Supplying, - float MaxSupplying -); diff --git a/Content.Server/SensorMonitoring/BatterySensorSystem.cs b/Content.Server/SensorMonitoring/BatterySensorSystem.cs deleted file mode 100644 index 20e990b14c30..000000000000 --- a/Content.Server/SensorMonitoring/BatterySensorSystem.cs +++ /dev/null @@ -1,45 +0,0 @@ -using Content.Server.DeviceNetwork; -using Content.Server.DeviceNetwork.Systems; -using Content.Server.Power.Components; - -namespace Content.Server.SensorMonitoring; - -public sealed class BatterySensorSystem : EntitySystem -{ - public const string DeviceNetworkCommandSyncData = "bat_sync_data"; - - [Dependency] private readonly DeviceNetworkSystem _deviceNetwork = default!; - - public override void Initialize() - { - SubscribeLocalEvent(PacketReceived); - } - - private void PacketReceived(EntityUid uid, BatterySensorComponent component, DeviceNetworkPacketEvent args) - { - if (!args.Data.TryGetValue(DeviceNetworkConstants.Command, out string? cmd)) - return; - - switch (cmd) - { - case DeviceNetworkCommandSyncData: - var battery = Comp(uid); - var netBattery = Comp(uid); - - var payload = new NetworkPayload - { - [DeviceNetworkConstants.Command] = DeviceNetworkCommandSyncData, - [DeviceNetworkCommandSyncData] = new BatterySensorData( - battery.Charge, - battery.MaxCharge, - netBattery.CurrentReceiving, - netBattery.MaxChargeRate, - netBattery.CurrentSupply, - netBattery.MaxSupply) - }; - - _deviceNetwork.QueuePacket(uid, args.SenderAddress, payload); - break; - } - } -} diff --git a/Content.Server/SensorMonitoring/SensorMonitoringConsoleComponent.cs b/Content.Server/SensorMonitoring/SensorMonitoringConsoleComponent.cs deleted file mode 100644 index a13eb34b91fa..000000000000 --- a/Content.Server/SensorMonitoring/SensorMonitoringConsoleComponent.cs +++ /dev/null @@ -1,64 +0,0 @@ -using Content.Shared.SensorMonitoring; -using Robust.Server.Player; -using Robust.Shared.Collections; - -namespace Content.Server.SensorMonitoring; - -[RegisterComponent] -public sealed class SensorMonitoringConsoleComponent : Component -{ - /// - /// Used to assign network IDs for sensors and sensor streams. - /// - public int IdCounter; - - /// - /// If enabled, additional data streams are shown intended to only be visible for debugging. - /// - [ViewVariables(VVAccess.ReadWrite)] - [DataField("debug_streams")] - public bool DebugStreams = false; - - [ViewVariables(VVAccess.ReadWrite)] - public Dictionary Sensors = new(); - - [DataField("retentionTime")] - public TimeSpan RetentionTime = TimeSpan.FromMinutes(1); - - // UI update tracking stuff. - public HashSet InitialUIStateSent = new(); - public TimeSpan LastUIUpdate; - public ValueList RemovedSensors; - - public sealed class SensorData - { - [ViewVariables(VVAccess.ReadWrite)] - public int NetId; - - [ViewVariables(VVAccess.ReadWrite)] - public SensorDeviceType DeviceType; - - [ViewVariables(VVAccess.ReadWrite)] - public Dictionary Streams = new(); - } - - public sealed class SensorStream - { - [ViewVariables(VVAccess.ReadWrite)] - public int NetId; - - [ViewVariables(VVAccess.ReadWrite)] - public SensorUnit Unit; - - // Queue is a ring buffer internally, and we can still iterate over it. - // I don't wanna write a ring buffer myself, so this is pretty convenient! - [ViewVariables] - public Queue Samples = new(); - } - - public sealed class ViewingPlayer - { - - } -} - diff --git a/Content.Server/SensorMonitoring/SensorMonitoringConsoleSystem.UI.cs b/Content.Server/SensorMonitoring/SensorMonitoringConsoleSystem.UI.cs deleted file mode 100644 index e08e9fed6cc9..000000000000 --- a/Content.Server/SensorMonitoring/SensorMonitoringConsoleSystem.UI.cs +++ /dev/null @@ -1,138 +0,0 @@ -using Content.Server.DeviceNetwork.Components; -using Content.Shared.SensorMonitoring; -using Robust.Server.GameObjects; -using Robust.Server.Player; -using Robust.Shared.Collections; -using ConsoleUIState = Content.Shared.SensorMonitoring.SensorMonitoringConsoleBoundInterfaceState; -using IncrementalUIState = Content.Shared.SensorMonitoring.SensorMonitoringIncrementalUpdate; - -namespace Content.Server.SensorMonitoring; - -public sealed partial class SensorMonitoringConsoleSystem -{ - private void InitUI() - { - SubscribeLocalEvent(ConsoleUIClosed); - } - - private void UpdateConsoleUI(EntityUid uid, SensorMonitoringConsoleComponent comp) - { - if (!_userInterface.TryGetUi(uid, SensorMonitoringConsoleUiKey.Key, out var ui)) - return; - - if (ui.SubscribedSessions.Count == 0) - return; - - ConsoleUIState? fullState = null; - SensorMonitoringIncrementalUpdate? incrementalUpdate = null; - - foreach (var session in ui.SubscribedSessions) - { - if (comp.InitialUIStateSent.Contains(session)) - { - incrementalUpdate ??= CalculateIncrementalUpdate(); - _userInterface.TrySendUiMessage(ui, incrementalUpdate, session); - } - else - { - fullState ??= CalculateFullState(); - UserInterfaceSystem.SetUiState(ui, fullState, session); - comp.InitialUIStateSent.Add(session); - } - } - - comp.LastUIUpdate = _gameTiming.CurTime; - comp.RemovedSensors.Clear(); - - ConsoleUIState CalculateFullState() - { - var sensors = new ValueList(); - var streams = new ValueList(); - - foreach (var (ent, data) in comp.Sensors) - { - streams.Clear(); - var name = MetaData(ent).EntityName; - var address = Comp(ent).Address; - - foreach (var (streamName, stream) in data.Streams) - { - streams.Add(new ConsoleUIState.SensorStream - { - NetId = stream.NetId, - Name = streamName, - Unit = stream.Unit, - Samples = stream.Samples.ToArray() - }); - } - - sensors.Add(new ConsoleUIState.SensorData - { - NetId = data.NetId, - Name = name, - Address = address, - DeviceType = data.DeviceType, - Streams = streams.ToArray() - }); - } - - return new ConsoleUIState - { - RetentionTime = comp.RetentionTime, - Sensors = sensors.ToArray() - }; - } - - SensorMonitoringIncrementalUpdate CalculateIncrementalUpdate() - { - var sensors = new ValueList(); - var streams = new ValueList(); - var samples = new ValueList(); - - foreach (var data in comp.Sensors.Values) - { - streams.Clear(); - - foreach (var stream in data.Streams.Values) - { - samples.Clear(); - foreach (var (sampleTime, value) in stream.Samples) - { - if (sampleTime >= comp.LastUIUpdate) - samples.Add(new SensorSample(sampleTime - comp.LastUIUpdate, value)); - } - - streams.Add(new IncrementalUIState.SensorStream - { - NetId = stream.NetId, - Unit = stream.Unit, - Samples = samples.ToArray() - }); - } - - sensors.Add(new IncrementalUIState.SensorData { NetId = data.NetId, Streams = streams.ToArray() }); - } - - return new IncrementalUIState - { - RelTime = comp.LastUIUpdate, - RemovedSensors = comp.RemovedSensors.ToArray(), - Sensors = sensors.ToArray(), - }; - } - } - - private static void ConsoleUIClosed( - EntityUid uid, - SensorMonitoringConsoleComponent component, - BoundUIClosedEvent args) - { - if (!args.UiKey.Equals(SensorMonitoringConsoleUiKey.Key)) - return; - - if (args.Session is not IPlayerSession player) - return; - - component.InitialUIStateSent.Remove(player); - } -} diff --git a/Content.Server/SensorMonitoring/SensorMonitoringConsoleSystem.cs b/Content.Server/SensorMonitoring/SensorMonitoringConsoleSystem.cs deleted file mode 100644 index fdd340ba0ae7..000000000000 --- a/Content.Server/SensorMonitoring/SensorMonitoringConsoleSystem.cs +++ /dev/null @@ -1,329 +0,0 @@ -using Content.Server.Atmos.Monitor.Components; -using Content.Server.Atmos.Monitor.Systems; -using Content.Server.Atmos.Piping.Binary.Components; -using Content.Server.Atmos.Piping.Components; -using Content.Server.Atmos.Piping.Unary.Components; -using Content.Server.DeviceNetwork; -using Content.Server.DeviceNetwork.Components; -using Content.Server.DeviceNetwork.Systems; -using Content.Server.Power.Generation.Teg; -using Content.Shared.Atmos.Monitor; -using Content.Shared.Atmos.Piping.Binary.Components; -using Content.Shared.Atmos.Piping.Unary.Components; -using Content.Shared.DeviceNetwork.Components; -using Content.Shared.DeviceNetwork.Systems; -using Content.Shared.SensorMonitoring; -using Robust.Server.GameObjects; -using Robust.Shared.Timing; -using Robust.Shared.Utility; -using ConsoleUIState = Content.Shared.SensorMonitoring.SensorMonitoringConsoleBoundInterfaceState; - -namespace Content.Server.SensorMonitoring; - -public sealed partial class SensorMonitoringConsoleSystem : EntitySystem -{ - // TODO: THIS THING IS HEAVILY WIP AND NOT READY FOR GENERAL USE BY PLAYERS. - // Some of the issues, off the top of my head: - // Way too huge network load when opened - // UI doesn't update properly in cases like adding new streams/devices - // Deleting connected devices causes exceptions - // UI sucks. need a way to make basic dashboards like Grafana, and save them. - - private EntityQuery _deviceNetworkQuery; - - [Dependency] private readonly IGameTiming _gameTiming = default!; - [Dependency] private readonly DeviceNetworkSystem _deviceNetwork = default!; - [Dependency] private readonly UserInterfaceSystem _userInterface = default!; - - public override void Initialize() - { - base.Initialize(); - - InitUI(); - - UpdatesBefore.Add(typeof(UserInterfaceSystem)); - - SubscribeLocalEvent(DeviceListUpdated); - SubscribeLocalEvent(ConsoleStartup); - SubscribeLocalEvent(DevicePacketReceived); - SubscribeLocalEvent(AtmosUpdate); - - _deviceNetworkQuery = GetEntityQuery(); - } - - public override void Update(float frameTime) - { - var consoles = EntityQueryEnumerator(); - while (consoles.MoveNext(out var entityUid, out var comp)) - { - UpdateConsole(entityUid, comp); - } - } - - private void UpdateConsole(EntityUid uid, SensorMonitoringConsoleComponent comp) - { - var minTime = _gameTiming.CurTime - comp.RetentionTime; - - SensorUpdate(uid, comp); - - foreach (var data in comp.Sensors.Values) - { - // Cull old data. - foreach (var stream in data.Streams.Values) - { - while (stream.Samples.TryPeek(out var sample) && sample.Time < minTime) - { - stream.Samples.Dequeue(); - } - } - } - - UpdateConsoleUI(uid, comp); - } - - private void ConsoleStartup(EntityUid uid, SensorMonitoringConsoleComponent component, ComponentStartup args) - { - if (TryComp(uid, out DeviceListComponent? network)) - UpdateDevices(uid, component, network.Devices, Array.Empty()); - } - - private void DeviceListUpdated( - EntityUid uid, - SensorMonitoringConsoleComponent component, - DeviceListUpdateEvent args) - { - UpdateDevices(uid, component, args.Devices, args.OldDevices); - } - - private void UpdateDevices( - EntityUid uid, - SensorMonitoringConsoleComponent component, - IEnumerable newDevices, - IEnumerable oldDevices) - { - var kept = new HashSet(); - - foreach (var newDevice in newDevices) - { - var deviceType = DetectDeviceType(newDevice); - if (deviceType == SensorDeviceType.Unknown) - continue; - - kept.Add(newDevice); - var sensor = component.Sensors.GetOrNew(newDevice); - sensor.DeviceType = deviceType; - if (sensor.NetId == 0) - sensor.NetId = MakeNetId(component); - } - - foreach (var oldDevice in oldDevices) - { - if (kept.Contains(oldDevice)) - continue; - - if (component.Sensors.TryGetValue(oldDevice, out var sensorData)) - { - component.RemovedSensors.Add(sensorData.NetId); - component.Sensors.Remove(oldDevice); - } - } - } - - private SensorDeviceType DetectDeviceType(EntityUid entity) - { - if (HasComp(entity)) - return SensorDeviceType.Teg; - - if (HasComp(entity)) - return SensorDeviceType.AtmosSensor; - - if (HasComp(entity)) - return SensorDeviceType.ThermoMachine; - - if (HasComp(entity)) - return SensorDeviceType.VolumePump; - - if (HasComp(entity)) - return SensorDeviceType.Battery; - - return SensorDeviceType.Unknown; - } - - private void DevicePacketReceived(EntityUid uid, SensorMonitoringConsoleComponent component, - DeviceNetworkPacketEvent args) - { - if (!component.Sensors.TryGetValue(args.Sender, out var sensorData)) - return; - - if (!args.Data.TryGetValue(DeviceNetworkConstants.Command, out string? command)) - return; - - switch (sensorData.DeviceType) - { - case SensorDeviceType.Teg: - if (command != TegSystem.DeviceNetworkCommandSyncData) - return; - - if (!args.Data.TryGetValue(TegSystem.DeviceNetworkCommandSyncData, out TegSensorData? tegData)) - return; - - // @formatter:off - WriteSample(component, sensorData, "teg_last_generated", SensorUnit.EnergyJ, tegData.LastGeneration); - WriteSample(component, sensorData, "teg_power", SensorUnit.PowerW, tegData.PowerOutput); - if (component.DebugStreams) - WriteSample(component, sensorData, "teg_ramp_pos", SensorUnit.PowerW, tegData.RampPosition); - - WriteSample(component, sensorData, "teg_circ_a_in_pressure", SensorUnit.PressureKpa, tegData.CirculatorA.InletPressure); - WriteSample(component, sensorData, "teg_circ_a_in_temperature", SensorUnit.TemperatureK, tegData.CirculatorA.InletTemperature); - WriteSample(component, sensorData, "teg_circ_a_out_pressure", SensorUnit.PressureKpa, tegData.CirculatorA.OutletPressure); - WriteSample(component, sensorData, "teg_circ_a_out_temperature", SensorUnit.TemperatureK, tegData.CirculatorA.OutletTemperature); - - WriteSample(component, sensorData, "teg_circ_b_in_pressure", SensorUnit.PressureKpa, tegData.CirculatorB.InletPressure); - WriteSample(component, sensorData, "teg_circ_b_in_temperature", SensorUnit.TemperatureK, tegData.CirculatorB.InletTemperature); - WriteSample(component, sensorData, "teg_circ_b_out_pressure", SensorUnit.PressureKpa, tegData.CirculatorB.OutletPressure); - WriteSample(component, sensorData, "teg_circ_b_out_temperature", SensorUnit.TemperatureK, tegData.CirculatorB.OutletTemperature); - // @formatter:on - break; - - case SensorDeviceType.AtmosSensor: - if (command != AtmosDeviceNetworkSystem.SyncData) - return; - - if (!args.Data.TryGetValue(AtmosDeviceNetworkSystem.SyncData, out AtmosSensorData? atmosData)) - return; - - // @formatter:off - WriteSample(component, sensorData, "atmo_pressure", SensorUnit.PressureKpa, atmosData.Pressure); - WriteSample(component, sensorData, "atmo_temperature", SensorUnit.TemperatureK, atmosData.Temperature); - // @formatter:on - break; - - case SensorDeviceType.ThermoMachine: - if (command != AtmosDeviceNetworkSystem.SyncData) - return; - - if (!args.Data.TryGetValue(AtmosDeviceNetworkSystem.SyncData, out GasThermoMachineData? thermoData)) - return; - - // @formatter:off - WriteSample(component, sensorData, "abs_energy_delta", SensorUnit.EnergyJ, MathF.Abs(thermoData.EnergyDelta)); - // @formatter:on - break; - - case SensorDeviceType.VolumePump: - if (command != AtmosDeviceNetworkSystem.SyncData) - return; - - if (!args.Data.TryGetValue(AtmosDeviceNetworkSystem.SyncData, out GasVolumePumpData? volumePumpData)) - return; - - // @formatter:off - WriteSample(component, sensorData, "moles_transferred", SensorUnit.Moles, volumePumpData.LastMolesTransferred); - // @formatter:on - break; - - case SensorDeviceType.Battery: - if (command != BatterySensorSystem.DeviceNetworkCommandSyncData) - return; - - if (!args.Data.TryGetValue(BatterySensorSystem.DeviceNetworkCommandSyncData, out BatterySensorData? batteryData)) - return; - - // @formatter:off - WriteSample(component, sensorData, "charge", SensorUnit.EnergyJ, batteryData.Charge); - WriteSample(component, sensorData, "charge_max", SensorUnit.EnergyJ, batteryData.MaxCharge); - - WriteSample(component, sensorData, "receiving", SensorUnit.PowerW, batteryData.Receiving); - WriteSample(component, sensorData, "receiving_max", SensorUnit.PowerW, batteryData.MaxReceiving); - - WriteSample(component, sensorData, "supplying", SensorUnit.PowerW, batteryData.Supplying); - WriteSample(component, sensorData, "supplying_max", SensorUnit.PowerW, batteryData.MaxSupplying); - // @formatter:on - - break; - } - } - - private void WriteSample( - SensorMonitoringConsoleComponent component, - SensorMonitoringConsoleComponent.SensorData sensorData, - string streamName, - SensorUnit unit, - float value) - { - var stream = sensorData.Streams.GetOrNew(streamName); - stream.Unit = unit; - if (stream.NetId == 0) - stream.NetId = MakeNetId(component); - - var time = _gameTiming.CurTime; - stream.Samples.Enqueue(new SensorSample(time, value)); - } - - private static int MakeNetId(SensorMonitoringConsoleComponent component) - { - return ++component.IdCounter; - } - - private void AtmosUpdate( - EntityUid uid, - SensorMonitoringConsoleComponent comp, - AtmosDeviceUpdateEvent args) - { - foreach (var (ent, data) in comp.Sensors) - { - // Send network requests for new data! - NetworkPayload payload; - switch (data.DeviceType) - { - case SensorDeviceType.Teg: - payload = new NetworkPayload - { - [DeviceNetworkConstants.Command] = TegSystem.DeviceNetworkCommandSyncData - }; - break; - - case SensorDeviceType.AtmosSensor: - case SensorDeviceType.ThermoMachine: - case SensorDeviceType.VolumePump: - payload = new NetworkPayload - { - [DeviceNetworkConstants.Command] = AtmosDeviceNetworkSystem.SyncData - }; - break; - - default: - // Unknown device type, don't do anything. - continue; - } - - var address = _deviceNetworkQuery.GetComponent(ent); - _deviceNetwork.QueuePacket(uid, address.Address, payload); - } - } - - private void SensorUpdate(EntityUid uid, SensorMonitoringConsoleComponent comp) - { - foreach (var (ent, data) in comp.Sensors) - { - // Send network requests for new data! - NetworkPayload payload; - switch (data.DeviceType) - { - case SensorDeviceType.Battery: - payload = new NetworkPayload - { - [DeviceNetworkConstants.Command] = BatterySensorSystem.DeviceNetworkCommandSyncData - }; - break; - - default: - // Unknown device type, don't do anything. - continue; - } - - var address = _deviceNetworkQuery.GetComponent(ent); - _deviceNetwork.QueuePacket(uid, address.Address, payload); - } - } -} diff --git a/Content.Shared/Atmos/Piping/Binary/Components/SharedGasVolumePumpComponent.cs b/Content.Shared/Atmos/Piping/Binary/Components/SharedGasVolumePumpComponent.cs index d4315f86f54d..a89a5a7ed831 100644 --- a/Content.Shared/Atmos/Piping/Binary/Components/SharedGasVolumePumpComponent.cs +++ b/Content.Shared/Atmos/Piping/Binary/Components/SharedGasVolumePumpComponent.cs @@ -2,8 +2,6 @@ namespace Content.Shared.Atmos.Piping.Binary.Components { - public sealed record GasVolumePumpData(float LastMolesTransferred); - [Serializable, NetSerializable] public enum GasVolumePumpUiKey { diff --git a/Content.Shared/Atmos/Piping/Unary/Components/SharedGasThermomachineComponent.cs b/Content.Shared/Atmos/Piping/Unary/Components/SharedGasThermomachineComponent.cs index 4bdd6a0e5fd6..d48a113f3964 100644 --- a/Content.Shared/Atmos/Piping/Unary/Components/SharedGasThermomachineComponent.cs +++ b/Content.Shared/Atmos/Piping/Unary/Components/SharedGasThermomachineComponent.cs @@ -2,9 +2,6 @@ namespace Content.Shared.Atmos.Piping.Unary.Components; -[Serializable, NetSerializable] -public sealed record GasThermoMachineData(float EnergyDelta); - [Serializable] [NetSerializable] public enum ThermomachineUiKey diff --git a/Content.Shared/Power/Generation/Teg/SharedTeg.cs b/Content.Shared/Power/Generation/Teg/SharedTeg.cs deleted file mode 100644 index b534ff1fc32a..000000000000 --- a/Content.Shared/Power/Generation/Teg/SharedTeg.cs +++ /dev/null @@ -1,36 +0,0 @@ -using Robust.Shared.Serialization; - -namespace Content.Shared.Power.Generation.Teg; - -/// -/// Appearance keys for the TEG & its circulators. -/// -[Serializable, NetSerializable] -public enum TegVisuals -{ - PowerOutput, - CirculatorSpeed, - CirculatorPower, -} - -/// -/// Visual sprite layers for the TEG & its circulators. -/// -[Serializable, NetSerializable] -public enum TegVisualLayers -{ - PowerOutput, - CirculatorBase, - CirculatorLight -} - -/// -/// Visual speed levels for the TEG circulators. -/// -[Serializable, NetSerializable] -public enum TegCirculatorSpeed -{ - SpeedStill, - SpeedSlow, - SpeedFast -} diff --git a/Content.Shared/SensorMonitoring/SharedSensorMonitoringConsoleComponent.cs b/Content.Shared/SensorMonitoring/SharedSensorMonitoringConsoleComponent.cs deleted file mode 100644 index 472697d974ac..000000000000 --- a/Content.Shared/SensorMonitoring/SharedSensorMonitoringConsoleComponent.cs +++ /dev/null @@ -1,112 +0,0 @@ -using Robust.Shared.Serialization; -using ConsoleUIState = Content.Shared.SensorMonitoring.SensorMonitoringConsoleBoundInterfaceState; - -namespace Content.Shared.SensorMonitoring; - -[Serializable, NetSerializable] -public sealed class SensorMonitoringConsoleBoundInterfaceState : BoundUserInterfaceState -{ - public TimeSpan RetentionTime; - public SensorData[] Sensors = Array.Empty(); - - [Serializable, NetSerializable] - public sealed class SensorData - { - public int NetId; - public string Name = ""; - public string Address = ""; - public SensorDeviceType DeviceType; - - public SensorStream[] Streams = Array.Empty(); - } - - [Serializable, NetSerializable] - public sealed class SensorStream - { - public int NetId; - public string Name = ""; - public SensorUnit Unit; - public SensorSample[] Samples = Array.Empty(); - } -} - -[Serializable, NetSerializable] -public sealed class SensorMonitoringIncrementalUpdate : BoundUserInterfaceMessage -{ - public TimeSpan RelTime; - public SensorData[] Sensors = Array.Empty(); - public int[] RemovedSensors = Array.Empty(); - - [Serializable, NetSerializable] - public sealed class SensorData - { - public int NetId; - public SensorStream[] Streams = Array.Empty(); - } - - [Serializable, NetSerializable] - public sealed class SensorStream - { - public int NetId; - public SensorUnit Unit; - // Note: these samples have their time values relative to RelTime. - // This improves effectiveness of integer compression in NetSerializer. - public SensorSample[] Samples = Array.Empty(); - } -} - -[Serializable, NetSerializable] -public enum SensorMonitoringConsoleUiKey -{ - Key -} - -[Serializable, NetSerializable] -public enum SensorUnit : byte -{ - Undetermined = 0, - - /// - /// A pressure value in kilopascals (kPa). - /// - PressureKpa, - - /// - /// A temperature value in Kelvin (K). - /// - TemperatureK, - - /// - /// An amount of matter in moles. - /// - Moles, - - /// - /// A value in the range 0-1. - /// - /* L + */ Ratio, - - /// - /// Power in Watts (W). - /// - PowerW, - - /// - /// Energy in Joules (J). - /// - EnergyJ -} - -[Serializable, NetSerializable] -public enum SensorDeviceType -{ - Unknown = 0, - Teg, - AtmosSensor, - ThermoMachine, - VolumePump, - Battery, -} - -[Serializable, NetSerializable] -public record struct SensorSample(TimeSpan Time, float Value); diff --git a/Resources/Locale/en-US/devices/device-network.ftl b/Resources/Locale/en-US/devices/device-network.ftl index 8ce90bb2374e..9d8a9e91b873 100644 --- a/Resources/Locale/en-US/devices/device-network.ftl +++ b/Resources/Locale/en-US/devices/device-network.ftl @@ -24,20 +24,12 @@ device-frequency-prototype-name-surveillance-camera-entertainment = Entertainmen device-address-prefix-vent = VNT- device-address-prefix-scrubber = SCR- device-address-prefix-sensor = SNS- -# Damn bet you couldn't see this one coming. -device-address-prefix-teg = TEG- -device-address-prefix-heater = HTR- -device-address-prefix-freezer = FZR- -device-address-prefix-volume-pump = VPP- -device-address-prefix-smes = SMS- #PDAs and terminals device-address-prefix-console = CLS- device-address-prefix-fire-alarm = FIR- device-address-prefix-air-alarm = AIR- -device-address-prefix-sensor-monitor = MON- - device-address-examine-message = The device's address is {$address}. #Device net ID names @@ -47,4 +39,3 @@ device-net-id-wireless = Wireless device-net-id-apc = Apc device-net-id-atmos-devices = Atmos Devices device-net-id-reserved = Reserved - diff --git a/Resources/Locale/en-US/guidebook/guides.ftl b/Resources/Locale/en-US/guidebook/guides.ftl index b6619d49f26a..7e2d50b13a17 100644 --- a/Resources/Locale/en-US/guidebook/guides.ftl +++ b/Resources/Locale/en-US/guidebook/guides.ftl @@ -9,7 +9,6 @@ guide-entry-network-configurator = Network Configurator guide-entry-power = Power guide-entry-ame = Antimatter Engine (AME) guide-entry-singularity = Singularity -guide-entry-teg = Thermo-electric Generator (TEG) guide-entry-controls = Controls guide-entry-radio = Radio guide-entry-jobs = Jobs diff --git a/Resources/Locale/en-US/power/teg.ftl b/Resources/Locale/en-US/power/teg.ftl deleted file mode 100644 index 6c3478197768..000000000000 --- a/Resources/Locale/en-US/power/teg.ftl +++ /dev/null @@ -1,2 +0,0 @@ -teg-generator-examine-power = It's generating [color=yellow]{ POWERWATTS($power) }[/color]. -teg-generator-examine-connection = To function, a [color=white]circulator[/color] must be attached on both sides. diff --git a/Resources/Locale/en-US/sensor-monitoring/sensor-monitoring.ftl b/Resources/Locale/en-US/sensor-monitoring/sensor-monitoring.ftl deleted file mode 100644 index 3450c1be3e12..000000000000 --- a/Resources/Locale/en-US/sensor-monitoring/sensor-monitoring.ftl +++ /dev/null @@ -1,13 +0,0 @@ -sensor-monitoring-window-title = Sensor Monitoring Console - -sensor-monitoring-value-display = {$unit -> - [PressureKpa] { PRESSURE($value) } - [PowerW] { POWERWATTS($value) } - [EnergyJ] { POWERJOULES($value) } - [TemperatureK] { TOSTRING($value, "N3") } K - [Ratio] { NATURALPERCENT($value) } - [Moles] { TOSTRING($value, "N3") } mol - *[Other] { $value } -} - -# ({ TOSTRING(SUB($value, 273.15), "N3") } °C) diff --git a/Resources/Maps/Test/test_teg.yml b/Resources/Maps/Test/test_teg.yml deleted file mode 100644 index 11dd0de1c65a..000000000000 --- a/Resources/Maps/Test/test_teg.yml +++ /dev/null @@ -1,2896 +0,0 @@ -meta: - format: 5 - postmapinit: false -tilemap: - 0: Space - 69: FloorSteel - 80: FloorTechMaint2 - 94: Lattice - 95: Plating -entities: -- proto: "" - entities: - - uid: 1 - components: - - type: MetaData - - type: Transform - - type: Map - - type: PhysicsMap - - type: GridTree - - type: MovedGrids - - type: Broadphase - - type: OccluderTree - - type: LoadedMap - - uid: 2 - components: - - type: MetaData - - pos: -3.0649385,-1.2334023 - parent: 1 - type: Transform - - chunks: - 0,0: - ind: 0,0 - tiles: XwAAAF8AAABfAAAAXwAAAF8AAABfAAAAXwAAAF8AAABfAAAAXwAAAAAAAABeAAAAAAAAAAAAAAAAAAAAAAAAAF8AAABfAAAAXwAAAF8AAABfAAAAXwAAAF8AAABfAAAAXwAAAF8AAAAAAAAAXgAAAAAAAAAAAAAAAAAAAAAAAABfAAAAXwAAAF8AAABfAAAAXwAAAF8AAABfAAAAXwAAAF8AAABfAAAAAAAAAF4AAAAAAAAAAAAAAAAAAAAAAAAAXwAAAF8AAABfAAAAXwAAAF8AAABfAAAAXwAAAF8AAABfAAAAXwAAAAAAAABeAAAAAAAAAAAAAAAAAAAAAAAAAF8AAABfAAAAXwAAAF8AAABfAAAAXwAAAF8AAABfAAAAXwAAAF8AAAAAAAAAXgAAAAAAAAAAAAAAAAAAAAAAAABfAAAAXwAAAF8AAABfAAAAXwAAAF8AAABFAAAAXwAAAF8AAABfAAAAXgAAAF4AAAAAAAAAAAAAAAAAAAAAAAAAXwAAAF8AAABfAAAAXwAAAEUAAABFAAAARQAAAEUAAABFAAAAXwAAAAAAAABeAAAAAAAAAAAAAAAAAAAAAAAAAF8AAABfAAAAXwAAAEUAAABFAAAARQAAAEUAAABFAAAARQAAAF8AAAAAAAAAXgAAAAAAAAAAAAAAAAAAAAAAAABQAAAAUAAAAFAAAABfAAAARQAAAEUAAABFAAAARQAAAEUAAABfAAAAAAAAAF4AAAAAAAAAAAAAAAAAAAAAAAAAXwAAAF8AAABfAAAAXwAAAF8AAABfAAAAXwAAAF8AAABfAAAAXwAAAF4AAABeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF4AAAAAAAAAXgAAAAAAAAAAAAAAAAAAAAAAAABeAAAAXgAAAF4AAABeAAAAXgAAAF4AAABeAAAAXgAAAF4AAABeAAAAXgAAAF4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== - -1,-1: - ind: -1,-1 - tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF4AAABeAAAAXgAAAF4AAABeAAAAXgAAAF4AAABeAAAAXgAAAF4AAABeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABeAAAAAAAAAF4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXgAAAF4AAABfAAAAXwAAAF8AAABfAAAAXwAAAF8AAABfAAAAXwAAAF8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF4AAAAAAAAAXwAAAF8AAABfAAAAUAAAAFAAAABQAAAAUAAAAFAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABeAAAAAAAAAF8AAABfAAAAXwAAAFAAAABQAAAAUAAAAFAAAABQAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXgAAAAAAAABfAAAAXwAAAF8AAABQAAAAUAAAAFAAAABQAAAAUAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF4AAABeAAAAXwAAAF8AAABfAAAAXwAAAF8AAABfAAAAXwAAAF8AAABfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABeAAAAAAAAAF8AAABfAAAAXwAAAF8AAABfAAAAXwAAAF8AAABfAAAAXwAAAA== - -1,0: - ind: -1,0 - tiles: AAAAAAAAAAAAAAAAAAAAAAAAAABeAAAAAAAAAF8AAABfAAAAXwAAAF8AAABfAAAAXwAAAF8AAABfAAAAXwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXgAAAAAAAABfAAAAXwAAAF8AAABfAAAAXwAAAF8AAABfAAAAXwAAAF8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF4AAAAAAAAAXwAAAF8AAABfAAAAXwAAAF8AAABfAAAAXwAAAF8AAABfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABeAAAAAAAAAF8AAABfAAAAXwAAAF8AAABfAAAAXwAAAF8AAABfAAAAXwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXgAAAAAAAABfAAAAXwAAAF8AAABfAAAAXwAAAF8AAABfAAAAXwAAAF8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF4AAABeAAAAXwAAAFAAAABQAAAAXwAAAFAAAABQAAAAXwAAAF8AAABfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABeAAAAAAAAAF8AAABfAAAAXwAAAF8AAABfAAAAXwAAAF8AAABfAAAAXwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXgAAAAAAAABfAAAAXwAAAF8AAABfAAAAXwAAAF8AAABfAAAAXwAAAF8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF4AAAAAAAAAXwAAAFAAAABQAAAAUAAAAFAAAABQAAAAXwAAAFAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABeAAAAXgAAAF8AAABfAAAAXwAAAF8AAABfAAAAXwAAAEUAAABfAAAAXwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXgAAAAAAAABeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF4AAABeAAAAXgAAAF4AAABeAAAAXgAAAF4AAABeAAAAXgAAAF4AAABeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== - 0,-1: - ind: 0,-1 - tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABeAAAAXgAAAF4AAABeAAAAXgAAAF4AAABeAAAAXgAAAF4AAABeAAAAXgAAAF4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXgAAAAAAAABeAAAAAAAAAAAAAAAAAAAAAAAAAF8AAABfAAAAXwAAAF8AAABfAAAAXwAAAF8AAABfAAAAXwAAAF8AAABeAAAAXgAAAAAAAAAAAAAAAAAAAAAAAABQAAAAUAAAAFAAAABQAAAAUAAAAFAAAABQAAAAXwAAAF8AAABfAAAAAAAAAF4AAAAAAAAAAAAAAAAAAAAAAAAAUAAAAFAAAABQAAAAUAAAAFAAAABQAAAAUAAAAF8AAABfAAAAXwAAAAAAAABeAAAAAAAAAAAAAAAAAAAAAAAAAFAAAABQAAAAUAAAAFAAAABQAAAAUAAAAFAAAABfAAAAXwAAAF8AAAAAAAAAXgAAAAAAAAAAAAAAAAAAAAAAAABfAAAAXwAAAF8AAABfAAAAXwAAAF8AAABfAAAAXwAAAF8AAABfAAAAXgAAAF4AAAAAAAAAAAAAAAAAAAAAAAAAXwAAAF8AAABfAAAAXwAAAF8AAABfAAAAXwAAAF8AAABfAAAAXwAAAAAAAABeAAAAAAAAAAAAAAAAAAAAAAAAAA== - type: MapGrid - - type: Broadphase - - bodyStatus: InAir - angularDamping: 0.05 - linearDamping: 0.05 - fixedRotation: False - bodyType: Dynamic - type: Physics - - fixtures: {} - type: Fixtures - - type: OccluderTree - - type: SpreaderGrid - - type: Shuttle - - type: GridPathfinding - - gravityShakeSound: !type:SoundPathSpecifier - path: /Audio/Effects/alert.ogg - type: Gravity - - chunkCollection: - version: 2 - nodes: - - node: - color: '#639EEB93' - id: BotGreyscale - decals: - 38: 4,-5 - 39: 4,-4 - 40: 4,-3 - 41: 5,-3 - 42: 5,-4 - 43: 5,-5 - 44: 6,-5 - 45: 6,-4 - 46: 6,-3 - - node: - color: '#9BE59D93' - id: BotGreyscale - decals: - 11: -4,-3 - 12: -4,-4 - 13: -4,-5 - 14: -5,-5 - 15: -5,-4 - 16: -5,-3 - 17: -6,-3 - 18: -6,-4 - 19: -6,-5 - - node: - color: '#FB2F2B93' - id: BotGreyscale - decals: - 29: 1,-3 - 30: 1,-4 - 31: 1,-5 - 32: 2,-5 - 33: 2,-4 - 34: 2,-3 - 35: 3,-3 - 36: 3,-4 - 37: 3,-5 - - node: - color: '#FBB22B93' - id: BotGreyscale - decals: - 20: -3,-5 - 21: -3,-4 - 22: -3,-3 - 23: -2,-3 - 24: -2,-4 - 25: -2,-5 - 26: -1,-5 - 27: -1,-4 - 28: -1,-3 - - node: - color: '#EFB34196' - id: HalfTileOverlayGreyscale - decals: - 5: 5,8 - 6: 6,8 - 7: 7,8 - - node: - color: '#EFB34196' - id: HalfTileOverlayGreyscale180 - decals: - 8: 7,6 - 9: 6,6 - 10: 5,6 - - node: - color: '#EFB34196' - id: HalfTileOverlayGreyscale90 - decals: - 4: 8,7 - - node: - color: '#EFB34196' - id: ThreeQuarterTileOverlayGreyscale - decals: - 0: 4,8 - - node: - color: '#EFB34196' - id: ThreeQuarterTileOverlayGreyscale180 - decals: - 2: 8,6 - - node: - color: '#EFB34196' - id: ThreeQuarterTileOverlayGreyscale270 - decals: - 3: 4,6 - - node: - color: '#EFB34196' - id: ThreeQuarterTileOverlayGreyscale90 - decals: - 1: 8,8 - type: DecalGrid - - version: 2 - data: - tiles: - 0,0: - 0: 65535 - -1,-1: - 0: 65535 - -1,0: - 0: 65535 - 0,-1: - 0: 65535 - 0,1: - 0: 65535 - 0,2: - 0: 63743 - 1,0: - 0: 65535 - 1,1: - 0: 65535 - 1,2: - 0: 61695 - 2,0: - 0: 48059 - 2,1: - 0: 48123 - 2,2: - 0: 64251 - -3,-2: - 0: 44718 - -3,-1: - 0: 44714 - -2,-2: - 0: 65295 - -2,-1: - 0: 65535 - -1,-2: - 0: 65327 - -3,0: - 0: 43690 - -3,1: - 0: 43754 - -3,2: - 0: 60138 - -2,0: - 0: 65535 - -2,1: - 0: 65535 - -2,2: - 0: 61695 - -1,1: - 0: 65535 - -1,2: - 0: 62207 - 0,-2: - 0: 65423 - 1,-2: - 0: 65295 - 1,-1: - 0: 65535 - 2,-2: - 0: 49071 - 2,-1: - 0: 49083 - uniqueMixes: - - volume: 2500 - temperature: 293.15 - moles: - - 21.824879 - - 82.10312 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - chunkSize: 4 - type: GridAtmosphere - - type: GasTileOverlay - - type: RadiationGridResistance - - id: TEG - type: BecomesStation -- proto: AirAlarm - entities: - - uid: 436 - components: - - pos: -2.5,5.5 - parent: 2 - type: Transform - - ShutdownSubscribers: - - 437 - type: DeviceNetwork - - devices: - - 437 - type: DeviceList -- proto: AirlockEngineeringGlass - entities: - - uid: 128 - components: - - pos: 6.5,5.5 - parent: 2 - type: Transform - - uid: 143 - components: - - pos: 3.5,7.5 - parent: 2 - type: Transform -- proto: AirSensor - entities: - - uid: 437 - components: - - pos: -5.5,1.5 - parent: 2 - type: Transform - - ShutdownSubscribers: - - 436 - type: DeviceNetwork -- proto: Bed - entities: - - uid: 371 - components: - - pos: 8.5,8.5 - parent: 2 - type: Transform -- proto: BedsheetCE - entities: - - uid: 372 - components: - - pos: 8.5,8.5 - parent: 2 - type: Transform -- proto: CableApcExtension - entities: - - uid: 246 - components: - - pos: -7.5,7.5 - parent: 2 - type: Transform - - enabled: True - type: AmbientSound - - uid: 247 - components: - - pos: -7.5,8.5 - parent: 2 - type: Transform - - uid: 248 - components: - - pos: -7.5,6.5 - parent: 2 - type: Transform - - enabled: True - type: AmbientSound - - uid: 249 - components: - - pos: -7.5,5.5 - parent: 2 - type: Transform - - uid: 250 - components: - - pos: -7.5,4.5 - parent: 2 - type: Transform - - enabled: True - type: AmbientSound - - uid: 251 - components: - - pos: -7.5,3.5 - parent: 2 - type: Transform - - enabled: True - type: AmbientSound - - uid: 252 - components: - - pos: -7.5,2.5 - parent: 2 - type: Transform - - enabled: True - type: AmbientSound - - uid: 253 - components: - - pos: -7.5,1.5 - parent: 2 - type: Transform - - enabled: True - type: AmbientSound - - uid: 254 - components: - - pos: -7.5,0.5 - parent: 2 - type: Transform - - enabled: True - type: AmbientSound - - uid: 255 - components: - - pos: -7.5,-0.5 - parent: 2 - type: Transform - - enabled: True - type: AmbientSound - - uid: 256 - components: - - pos: -7.5,-1.5 - parent: 2 - type: Transform - - enabled: True - type: AmbientSound - - uid: 257 - components: - - pos: -7.5,-2.5 - parent: 2 - type: Transform - - enabled: True - type: AmbientSound - - uid: 258 - components: - - pos: -7.5,-3.5 - parent: 2 - type: Transform - - enabled: True - type: AmbientSound - - uid: 259 - components: - - pos: -7.5,-4.5 - parent: 2 - type: Transform - - enabled: True - type: AmbientSound - - uid: 260 - components: - - pos: -6.5,-4.5 - parent: 2 - type: Transform - - enabled: True - type: AmbientSound - - uid: 261 - components: - - pos: -5.5,-4.5 - parent: 2 - type: Transform - - uid: 262 - components: - - pos: -4.5,-4.5 - parent: 2 - type: Transform - - uid: 263 - components: - - pos: -3.5,-4.5 - parent: 2 - type: Transform - - uid: 264 - components: - - pos: -2.5,-4.5 - parent: 2 - type: Transform - - uid: 265 - components: - - pos: -1.5,-4.5 - parent: 2 - type: Transform - - uid: 266 - components: - - pos: -0.5,-4.5 - parent: 2 - type: Transform - - uid: 267 - components: - - pos: 0.5,-4.5 - parent: 2 - type: Transform - - uid: 268 - components: - - pos: 1.5,-4.5 - parent: 2 - type: Transform - - uid: 269 - components: - - pos: 2.5,-4.5 - parent: 2 - type: Transform - - uid: 270 - components: - - pos: 3.5,-4.5 - parent: 2 - type: Transform - - uid: 271 - components: - - pos: 4.5,-4.5 - parent: 2 - type: Transform - - uid: 272 - components: - - pos: 5.5,-4.5 - parent: 2 - type: Transform - - uid: 273 - components: - - pos: 6.5,-4.5 - parent: 2 - type: Transform - - uid: 274 - components: - - pos: 7.5,-4.5 - parent: 2 - type: Transform - - enabled: True - type: AmbientSound - - uid: 275 - components: - - pos: 8.5,-4.5 - parent: 2 - type: Transform - - enabled: True - type: AmbientSound - - uid: 276 - components: - - pos: 8.5,-3.5 - parent: 2 - type: Transform - - enabled: True - type: AmbientSound - - uid: 277 - components: - - pos: 8.5,-2.5 - parent: 2 - type: Transform - - enabled: True - type: AmbientSound - - uid: 278 - components: - - pos: 8.5,-1.5 - parent: 2 - type: Transform - - enabled: True - type: AmbientSound - - uid: 279 - components: - - pos: 8.5,-0.5 - parent: 2 - type: Transform - - enabled: True - type: AmbientSound - - uid: 280 - components: - - pos: 8.5,0.5 - parent: 2 - type: Transform - - enabled: True - type: AmbientSound - - uid: 281 - components: - - pos: 8.5,1.5 - parent: 2 - type: Transform - - enabled: True - type: AmbientSound - - uid: 282 - components: - - pos: 8.5,2.5 - parent: 2 - type: Transform - - enabled: True - type: AmbientSound - - uid: 283 - components: - - pos: 8.5,3.5 - parent: 2 - type: Transform - - enabled: True - type: AmbientSound - - uid: 284 - components: - - pos: 8.5,4.5 - parent: 2 - type: Transform - - enabled: True - type: AmbientSound - - uid: 285 - components: - - pos: 8.5,5.5 - parent: 2 - type: Transform - - enabled: True - type: AmbientSound - - uid: 286 - components: - - pos: 8.5,6.5 - parent: 2 - type: Transform - - uid: 287 - components: - - pos: 8.5,7.5 - parent: 2 - type: Transform - - uid: 288 - components: - - pos: 8.5,8.5 - parent: 2 - type: Transform - - uid: 289 - components: - - pos: 7.5,8.5 - parent: 2 - type: Transform - - uid: 290 - components: - - pos: 6.5,8.5 - parent: 2 - type: Transform - - uid: 291 - components: - - pos: 5.5,8.5 - parent: 2 - type: Transform - - uid: 292 - components: - - pos: 4.5,8.5 - parent: 2 - type: Transform - - uid: 293 - components: - - pos: 3.5,8.5 - parent: 2 - type: Transform - - enabled: True - type: AmbientSound - - uid: 294 - components: - - pos: 2.5,8.5 - parent: 2 - type: Transform - - uid: 295 - components: - - pos: 1.5,8.5 - parent: 2 - type: Transform - - uid: 296 - components: - - pos: 0.5,8.5 - parent: 2 - type: Transform - - uid: 297 - components: - - pos: -0.5,8.5 - parent: 2 - type: Transform - - uid: 298 - components: - - pos: -1.5,8.5 - parent: 2 - type: Transform - - uid: 299 - components: - - pos: -2.5,8.5 - parent: 2 - type: Transform - - enabled: True - type: AmbientSound - - uid: 300 - components: - - pos: -3.5,8.5 - parent: 2 - type: Transform - - uid: 301 - components: - - pos: -4.5,8.5 - parent: 2 - type: Transform - - uid: 302 - components: - - pos: -5.5,8.5 - parent: 2 - type: Transform - - uid: 303 - components: - - pos: -6.5,8.5 - parent: 2 - type: Transform - - uid: 380 - components: - - pos: -0.5,4.5 - parent: 2 - type: Transform - - enabled: True - type: AmbientSound - - uid: 381 - components: - - pos: -0.5,7.5 - parent: 2 - type: Transform - - enabled: True - type: AmbientSound - - uid: 382 - components: - - pos: -0.5,5.5 - parent: 2 - type: Transform - - enabled: True - type: AmbientSound - - uid: 392 - components: - - pos: -0.5,6.5 - parent: 2 - type: Transform - - enabled: True - type: AmbientSound - - uid: 393 - components: - - pos: -1.5,4.5 - parent: 2 - type: Transform - - enabled: True - type: AmbientSound - - uid: 398 - components: - - pos: -2.5,4.5 - parent: 2 - type: Transform - - enabled: True - type: AmbientSound - - uid: 399 - components: - - pos: -3.5,4.5 - parent: 2 - type: Transform - - enabled: True - type: AmbientSound - - uid: 400 - components: - - pos: 0.5,4.5 - parent: 2 - type: Transform - - enabled: True - type: AmbientSound - - uid: 401 - components: - - pos: 1.5,4.5 - parent: 2 - type: Transform - - enabled: True - type: AmbientSound - - uid: 402 - components: - - pos: 2.5,4.5 - parent: 2 - type: Transform - - enabled: True - type: AmbientSound - - uid: 403 - components: - - pos: 3.5,4.5 - parent: 2 - type: Transform - - enabled: True - type: AmbientSound - - uid: 404 - components: - - pos: 4.5,4.5 - parent: 2 - type: Transform - - enabled: True - type: AmbientSound - - uid: 405 - components: - - pos: 5.5,4.5 - parent: 2 - type: Transform - - enabled: True - type: AmbientSound - - uid: 406 - components: - - pos: 6.5,4.5 - parent: 2 - type: Transform - - enabled: True - type: AmbientSound - - uid: 407 - components: - - pos: 7.5,4.5 - parent: 2 - type: Transform - - enabled: True - type: AmbientSound - - uid: 408 - components: - - pos: -4.5,4.5 - parent: 2 - type: Transform - - enabled: True - type: AmbientSound - - uid: 409 - components: - - pos: -5.5,4.5 - parent: 2 - type: Transform - - enabled: True - type: AmbientSound - - uid: 410 - components: - - pos: -6.5,4.5 - parent: 2 - type: Transform - - enabled: True - type: AmbientSound - - uid: 411 - components: - - pos: 0.5,3.5 - parent: 2 - type: Transform - - enabled: True - type: AmbientSound - - uid: 412 - components: - - pos: 0.5,2.5 - parent: 2 - type: Transform - - enabled: True - type: AmbientSound - - uid: 413 - components: - - pos: 0.5,1.5 - parent: 2 - type: Transform - - enabled: True - type: AmbientSound - - uid: 414 - components: - - pos: 0.5,0.5 - parent: 2 - type: Transform - - enabled: True - type: AmbientSound - - uid: 415 - components: - - pos: 0.5,-0.5 - parent: 2 - type: Transform - - enabled: True - type: AmbientSound - - uid: 416 - components: - - pos: 0.5,-1.5 - parent: 2 - type: Transform - - enabled: True - type: AmbientSound - - uid: 417 - components: - - pos: -0.5,0.5 - parent: 2 - type: Transform - - enabled: True - type: AmbientSound - - uid: 418 - components: - - pos: -1.5,0.5 - parent: 2 - type: Transform - - enabled: True - type: AmbientSound - - uid: 419 - components: - - pos: -2.5,0.5 - parent: 2 - type: Transform - - enabled: True - type: AmbientSound - - uid: 420 - components: - - pos: -3.5,0.5 - parent: 2 - type: Transform - - enabled: True - type: AmbientSound - - uid: 421 - components: - - pos: -4.5,0.5 - parent: 2 - type: Transform - - enabled: True - type: AmbientSound - - uid: 422 - components: - - pos: -5.5,0.5 - parent: 2 - type: Transform - - enabled: True - type: AmbientSound - - uid: 423 - components: - - pos: -6.5,0.5 - parent: 2 - type: Transform - - enabled: True - type: AmbientSound - - uid: 424 - components: - - pos: 1.5,0.5 - parent: 2 - type: Transform - - enabled: True - type: AmbientSound - - uid: 425 - components: - - pos: 2.5,0.5 - parent: 2 - type: Transform - - enabled: True - type: AmbientSound - - uid: 426 - components: - - pos: 3.5,0.5 - parent: 2 - type: Transform - - enabled: True - type: AmbientSound - - uid: 427 - components: - - pos: 4.5,0.5 - parent: 2 - type: Transform - - enabled: True - type: AmbientSound - - uid: 428 - components: - - pos: 5.5,0.5 - parent: 2 - type: Transform - - enabled: True - type: AmbientSound - - uid: 429 - components: - - pos: 6.5,0.5 - parent: 2 - type: Transform - - enabled: True - type: AmbientSound - - uid: 430 - components: - - pos: 7.5,0.5 - parent: 2 - type: Transform - - enabled: True - type: AmbientSound -- proto: CableApcStack - entities: - - uid: 385 - components: - - pos: -3.4853406,5.751219 - parent: 2 - type: Transform -- proto: CableHV - entities: - - uid: 9 - components: - - pos: 0.5,2.5 - parent: 2 - type: Transform - - enabled: True - type: AmbientSound - - uid: 10 - components: - - pos: 0.5,3.5 - parent: 2 - type: Transform - - enabled: True - type: AmbientSound - - uid: 11 - components: - - pos: 0.5,4.5 - parent: 2 - type: Transform - - enabled: True - type: AmbientSound - - uid: 32 - components: - - pos: 0.5,8.5 - parent: 2 - type: Transform - - uid: 33 - components: - - pos: -0.5,8.5 - parent: 2 - type: Transform - - uid: 101 - components: - - pos: 1.5,4.5 - parent: 2 - type: Transform - - enabled: True - type: AmbientSound - - uid: 137 - components: - - pos: 2.5,4.5 - parent: 2 - type: Transform - - enabled: True - type: AmbientSound - - uid: 138 - components: - - pos: 3.5,4.5 - parent: 2 - type: Transform - - enabled: True - type: AmbientSound - - uid: 139 - components: - - pos: 4.5,4.5 - parent: 2 - type: Transform - - enabled: True - type: AmbientSound - - uid: 140 - components: - - pos: 4.5,5.5 - parent: 2 - type: Transform - - enabled: True - type: AmbientSound - - uid: 142 - components: - - pos: 4.5,6.5 - parent: 2 - type: Transform - - uid: 435 - components: - - pos: 2.5,5.5 - parent: 2 - type: Transform - - enabled: True - type: AmbientSound -- proto: CableHVStack - entities: - - uid: 386 - components: - - pos: -3.5165906,5.532316 - parent: 2 - type: Transform -- proto: CableMV - entities: - - uid: 36 - components: - - pos: -0.5,8.5 - parent: 2 - type: Transform - - uid: 37 - components: - - pos: -1.5,8.5 - parent: 2 - type: Transform -- proto: CableMVStack - entities: - - uid: 384 - components: - - pos: -3.4853406,5.3029904 - parent: 2 - type: Transform -- proto: CableTerminal - entities: - - uid: 30 - components: - - rot: 3.141592653589793 rad - pos: 0.5,4.5 - parent: 2 - type: Transform -- proto: Catwalk - entities: - - uid: 53 - components: - - rot: -1.5707963267948966 rad - pos: 0.5,6.5 - parent: 2 - type: Transform - - uid: 54 - components: - - rot: -1.5707963267948966 rad - pos: 1.5,5.5 - parent: 2 - type: Transform - - uid: 55 - components: - - rot: -1.5707963267948966 rad - pos: 1.5,6.5 - parent: 2 - type: Transform - - uid: 56 - components: - - rot: -1.5707963267948966 rad - pos: 1.5,4.5 - parent: 2 - type: Transform - - uid: 59 - components: - - rot: -1.5707963267948966 rad - pos: 0.5,-0.5 - parent: 2 - type: Transform - - uid: 60 - components: - - rot: -1.5707963267948966 rad - pos: -0.5,6.5 - parent: 2 - type: Transform - - uid: 61 - components: - - rot: -1.5707963267948966 rad - pos: 0.5,0.5 - parent: 2 - type: Transform - - uid: 62 - components: - - rot: -1.5707963267948966 rad - pos: 0.5,1.5 - parent: 2 - type: Transform - - uid: 86 - components: - - rot: -1.5707963267948966 rad - pos: 0.5,3.5 - parent: 2 - type: Transform - - uid: 87 - components: - - rot: -1.5707963267948966 rad - pos: -0.5,4.5 - parent: 2 - type: Transform - - uid: 88 - components: - - rot: -1.5707963267948966 rad - pos: 0.5,-1.5 - parent: 2 - type: Transform - - uid: 102 - components: - - rot: -1.5707963267948966 rad - pos: -0.5,5.5 - parent: 2 - type: Transform - - uid: 134 - components: - - pos: -1.5,4.5 - parent: 2 - type: Transform - - uid: 136 - components: - - rot: -1.5707963267948966 rad - pos: 0.5,4.5 - parent: 2 - type: Transform - - uid: 241 - components: - - rot: 1.5707963267948966 rad - pos: -1.5,7.5 - parent: 2 - type: Transform - - uid: 242 - components: - - rot: 1.5707963267948966 rad - pos: -0.5,7.5 - parent: 2 - type: Transform - - uid: 243 - components: - - rot: 1.5707963267948966 rad - pos: 0.5,7.5 - parent: 2 - type: Transform - - uid: 244 - components: - - rot: 1.5707963267948966 rad - pos: 1.5,7.5 - parent: 2 - type: Transform - - uid: 245 - components: - - rot: 1.5707963267948966 rad - pos: 2.5,7.5 - parent: 2 - type: Transform - - uid: 317 - components: - - rot: 1.5707963267948966 rad - pos: 2.5,6.5 - parent: 2 - type: Transform - - uid: 318 - components: - - rot: 1.5707963267948966 rad - pos: -2.5,6.5 - parent: 2 - type: Transform - - uid: 319 - components: - - rot: 1.5707963267948966 rad - pos: -1.5,6.5 - parent: 2 - type: Transform - - uid: 320 - components: - - rot: 1.5707963267948966 rad - pos: -2.5,7.5 - parent: 2 - type: Transform - - uid: 321 - components: - - rot: 1.5707963267948966 rad - pos: -3.5,7.5 - parent: 2 - type: Transform - - uid: 322 - components: - - rot: 1.5707963267948966 rad - pos: -3.5,6.5 - parent: 2 - type: Transform - - uid: 323 - components: - - rot: 1.5707963267948966 rad - pos: -4.5,7.5 - parent: 2 - type: Transform - - uid: 324 - components: - - rot: 1.5707963267948966 rad - pos: -4.5,6.5 - parent: 2 - type: Transform - - uid: 325 - components: - - rot: 1.5707963267948966 rad - pos: -5.5,7.5 - parent: 2 - type: Transform - - uid: 326 - components: - - rot: 1.5707963267948966 rad - pos: -5.5,6.5 - parent: 2 - type: Transform - - uid: 327 - components: - - rot: 1.5707963267948966 rad - pos: -6.5,7.5 - parent: 2 - type: Transform - - uid: 328 - components: - - rot: 1.5707963267948966 rad - pos: -6.5,6.5 - parent: 2 - type: Transform - - uid: 329 - components: - - rot: 1.5707963267948966 rad - pos: -7.5,7.5 - parent: 2 - type: Transform - - uid: 330 - components: - - rot: 1.5707963267948966 rad - pos: -7.5,6.5 - parent: 2 - type: Transform - - uid: 337 - components: - - pos: -5.5,5.5 - parent: 2 - type: Transform - - uid: 338 - components: - - pos: -5.5,4.5 - parent: 2 - type: Transform - - uid: 339 - components: - - pos: -2.5,4.5 - parent: 2 - type: Transform - - uid: 340 - components: - - pos: -3.5,4.5 - parent: 2 - type: Transform - - uid: 341 - components: - - pos: -4.5,4.5 - parent: 2 - type: Transform - - uid: 342 - components: - - pos: 2.5,4.5 - parent: 2 - type: Transform - - uid: 343 - components: - - pos: 3.5,4.5 - parent: 2 - type: Transform - - uid: 344 - components: - - pos: 4.5,4.5 - parent: 2 - type: Transform - - uid: 345 - components: - - pos: 5.5,4.5 - parent: 2 - type: Transform - - uid: 346 - components: - - pos: 6.5,4.5 - parent: 2 - type: Transform - - uid: 347 - components: - - pos: -7.5,4.5 - parent: 2 - type: Transform - - uid: 348 - components: - - pos: -7.5,3.5 - parent: 2 - type: Transform - - uid: 349 - components: - - pos: -7.5,2.5 - parent: 2 - type: Transform - - uid: 350 - components: - - pos: -7.5,1.5 - parent: 2 - type: Transform - - uid: 351 - components: - - pos: -7.5,0.5 - parent: 2 - type: Transform - - uid: 352 - components: - - pos: -7.5,-0.5 - parent: 2 - type: Transform - - uid: 353 - components: - - pos: -7.5,-1.5 - parent: 2 - type: Transform - - uid: 354 - components: - - pos: -7.5,-2.5 - parent: 2 - type: Transform - - uid: 355 - components: - - pos: -7.5,-3.5 - parent: 2 - type: Transform - - uid: 356 - components: - - pos: -7.5,-4.5 - parent: 2 - type: Transform - - uid: 357 - components: - - pos: -6.5,-4.5 - parent: 2 - type: Transform - - uid: 358 - components: - - pos: -6.5,4.5 - parent: 2 - type: Transform - - uid: 359 - components: - - pos: 7.5,4.5 - parent: 2 - type: Transform - - uid: 360 - components: - - pos: 8.5,4.5 - parent: 2 - type: Transform - - uid: 361 - components: - - pos: 8.5,3.5 - parent: 2 - type: Transform - - uid: 362 - components: - - pos: 8.5,2.5 - parent: 2 - type: Transform - - uid: 363 - components: - - pos: 8.5,1.5 - parent: 2 - type: Transform - - uid: 364 - components: - - pos: 8.5,0.5 - parent: 2 - type: Transform - - uid: 365 - components: - - pos: 8.5,-0.5 - parent: 2 - type: Transform - - uid: 366 - components: - - pos: 8.5,-1.5 - parent: 2 - type: Transform - - uid: 367 - components: - - pos: 8.5,-2.5 - parent: 2 - type: Transform - - uid: 368 - components: - - pos: 8.5,-3.5 - parent: 2 - type: Transform - - uid: 369 - components: - - pos: 8.5,-4.5 - parent: 2 - type: Transform - - uid: 370 - components: - - pos: 7.5,-4.5 - parent: 2 - type: Transform -- proto: ClothingBeltChiefEngineerFilled - entities: - - uid: 332 - components: - - pos: -4.699811,5.342529 - parent: 2 - type: Transform - - uid: 333 - components: - - pos: -4.696474,5.7329693 - parent: 2 - type: Transform -- proto: ClothingHandsGlovesColorYellow - entities: - - uid: 237 - components: - - pos: -6.408145,5.6760936 - parent: 2 - type: Transform - - uid: 238 - components: - - pos: -6.491478,5.311256 - parent: 2 - type: Transform -- proto: ComputerPowerMonitoring - entities: - - uid: 141 - components: - - rot: 3.141592653589793 rad - pos: 4.5,6.5 - parent: 2 - type: Transform - - uid: 434 - components: - - rot: -1.5707963267948966 rad - pos: 2.5,5.5 - parent: 2 - type: Transform -- proto: ComputerSensorMonitoring - entities: - - uid: 433 - components: - - rot: 1.5707963267948966 rad - pos: -1.5,5.5 - parent: 2 - type: Transform - - debug_streams: True - type: SensorMonitoringConsole - - ShutdownSubscribers: - - 3 - - 6 - - 146 - - 7 - - 147 - - 29 - type: DeviceNetwork - - devices: - - 3 - - 6 - - 146 - - 7 - - 147 - - 29 - type: DeviceList -- proto: DebugAPC - entities: - - uid: 38 - components: - - pos: -1.5,8.5 - parent: 2 - type: Transform -- proto: DebugGenerator - entities: - - uid: 31 - components: - - pos: 0.5,8.5 - parent: 2 - type: Transform - - supplyRampTolerance: 500000 - supplyRate: 300000 - type: PowerSupplier -- proto: DebugSubstation - entities: - - uid: 34 - components: - - pos: -0.5,8.5 - parent: 2 - type: Transform -- proto: DrinkMugOne - entities: - - uid: 378 - components: - - pos: 8.710588,6.8378325 - parent: 2 - type: Transform -- proto: FoodBoxDonkpocket - entities: - - uid: 377 - components: - - pos: 8.656412,6.4768915 - parent: 2 - type: Transform -- proto: FoodBoxDonkpocketPizza - entities: - - uid: 376 - components: - - pos: 8.323078,6.8417277 - parent: 2 - type: Transform -- proto: GasAnalyzer - entities: - - uid: 431 - components: - - pos: -4.1251473,5.6412144 - parent: 2 - type: Transform -- proto: GasPipeBend - entities: - - uid: 8 - components: - - pos: -0.5,3.5 - parent: 2 - type: Transform - - enabled: True - type: AmbientSound - - uid: 12 - components: - - rot: 3.141592653589793 rad - pos: 1.5,1.5 - parent: 2 - type: Transform - - enabled: True - type: AmbientSound - - uid: 13 - components: - - rot: -1.5707963267948966 rad - pos: -0.5,1.5 - parent: 2 - type: Transform - - enabled: True - type: AmbientSound - - uid: 19 - components: - - rot: 1.5707963267948966 rad - pos: -2.5,3.5 - parent: 2 - type: Transform - - enabled: True - type: AmbientSound - - uid: 20 - components: - - rot: 3.141592653589793 rad - pos: -2.5,1.5 - parent: 2 - type: Transform - - enabled: True - type: AmbientSound - - uid: 21 - components: - - rot: -1.5707963267948966 rad - pos: 3.5,1.5 - parent: 2 - type: Transform - - enabled: True - type: AmbientSound - - uid: 23 - components: - - pos: 3.5,3.5 - parent: 2 - type: Transform - - enabled: True - type: AmbientSound - - uid: 24 - components: - - rot: 1.5707963267948966 rad - pos: 1.5,3.5 - parent: 2 - type: Transform - - enabled: True - type: AmbientSound -- proto: GasPipeFourway - entities: - - uid: 16 - components: - - pos: 4.5,2.5 - parent: 2 - type: Transform - - enabled: True - type: AmbientSound - - uid: 18 - components: - - pos: -3.5,2.5 - parent: 2 - type: Transform - - enabled: True - type: AmbientSound -- proto: GasPipeStraight - entities: - - uid: 22 - components: - - rot: -1.5707963267948966 rad - pos: 2.5,3.5 - parent: 2 - type: Transform - - enabled: True - type: AmbientSound - - uid: 25 - components: - - rot: -1.5707963267948966 rad - pos: -1.5,1.5 - parent: 2 - type: Transform - - enabled: True - type: AmbientSound -- proto: GasPipeTJunction - entities: - - uid: 14 - components: - - rot: 1.5707963267948966 rad - pos: 3.5,2.5 - parent: 2 - type: Transform - - enabled: True - type: AmbientSound - - uid: 15 - components: - - rot: -1.5707963267948966 rad - pos: -2.5,2.5 - parent: 2 - type: Transform - - enabled: True - type: AmbientSound -- proto: GasPort - entities: - - uid: 27 - components: - - rot: 3.141592653589793 rad - pos: -3.5,0.5 - parent: 2 - type: Transform - - uid: 28 - components: - - rot: 3.141592653589793 rad - pos: 4.5,0.5 - parent: 2 - type: Transform -- proto: GasThermoMachineFreezer - entities: - - uid: 147 - components: - - pos: 4.5,3.5 - parent: 2 - type: Transform - - targetTemperature: 73.15 - type: GasThermoMachine - - ShutdownSubscribers: - - 433 - type: DeviceNetwork -- proto: GasThermoMachineHeater - entities: - - uid: 146 - components: - - pos: -3.5,3.5 - parent: 2 - type: Transform - - targetTemperature: 593.15 - type: GasThermoMachine - - ShutdownSubscribers: - - 433 - type: DeviceNetwork -- proto: GasVolumePump - entities: - - uid: 6 - components: - - rot: -1.5707963267948966 rad - pos: -1.5,3.5 - parent: 2 - type: Transform - - ShutdownSubscribers: - - 433 - type: DeviceNetwork - - uid: 7 - components: - - rot: 1.5707963267948966 rad - pos: 2.5,1.5 - parent: 2 - type: Transform - - ShutdownSubscribers: - - 433 - type: DeviceNetwork - - uid: 17 - components: - - rot: 3.141592653589793 rad - pos: -3.5,1.5 - parent: 2 - type: Transform - - uid: 26 - components: - - rot: 3.141592653589793 rad - pos: 4.5,1.5 - parent: 2 - type: Transform -- proto: GravityGeneratorMini - entities: - - uid: 432 - components: - - pos: 2.5,8.5 - parent: 2 - type: Transform -- proto: Grille - entities: - - uid: 35 - components: - - pos: -1.5,9.5 - parent: 2 - type: Transform - - uid: 39 - components: - - pos: -0.5,9.5 - parent: 2 - type: Transform - - uid: 40 - components: - - pos: 0.5,9.5 - parent: 2 - type: Transform - - uid: 41 - components: - - pos: 2.5,9.5 - parent: 2 - type: Transform - - uid: 42 - components: - - pos: 1.5,9.5 - parent: 2 - type: Transform - - uid: 50 - components: - - rot: -1.5707963267948966 rad - pos: 0.5,-5.5 - parent: 2 - type: Transform - - uid: 51 - components: - - rot: -1.5707963267948966 rad - pos: -0.5,-5.5 - parent: 2 - type: Transform - - uid: 52 - components: - - rot: -1.5707963267948966 rad - pos: -1.5,-5.5 - parent: 2 - type: Transform - - uid: 57 - components: - - rot: -1.5707963267948966 rad - pos: 1.5,-5.5 - parent: 2 - type: Transform - - uid: 58 - components: - - rot: -1.5707963267948966 rad - pos: 2.5,-5.5 - parent: 2 - type: Transform - - uid: 111 - components: - - rot: -1.5707963267948966 rad - pos: 7.5,9.5 - parent: 2 - type: Transform - - uid: 113 - components: - - rot: -1.5707963267948966 rad - pos: 4.5,9.5 - parent: 2 - type: Transform - - uid: 114 - components: - - rot: -1.5707963267948966 rad - pos: 5.5,9.5 - parent: 2 - type: Transform - - uid: 115 - components: - - rot: -1.5707963267948966 rad - pos: 6.5,9.5 - parent: 2 - type: Transform - - uid: 116 - components: - - rot: -1.5707963267948966 rad - pos: 8.5,9.5 - parent: 2 - type: Transform - - uid: 123 - components: - - rot: -1.5707963267948966 rad - pos: 3.5,6.5 - parent: 2 - type: Transform - - uid: 124 - components: - - rot: -1.5707963267948966 rad - pos: 3.5,8.5 - parent: 2 - type: Transform - - uid: 126 - components: - - rot: -1.5707963267948966 rad - pos: 4.5,5.5 - parent: 2 - type: Transform - - uid: 127 - components: - - rot: -1.5707963267948966 rad - pos: 5.5,5.5 - parent: 2 - type: Transform - - uid: 130 - components: - - rot: -1.5707963267948966 rad - pos: 8.5,5.5 - parent: 2 - type: Transform - - uid: 133 - components: - - pos: 7.5,5.5 - parent: 2 - type: Transform - - uid: 152 - components: - - pos: -7.5,9.5 - parent: 2 - type: Transform - - uid: 153 - components: - - pos: -8.5,8.5 - parent: 2 - type: Transform - - uid: 154 - components: - - pos: -6.5,9.5 - parent: 2 - type: Transform - - uid: 155 - components: - - pos: -5.5,9.5 - parent: 2 - type: Transform - - uid: 156 - components: - - pos: -4.5,9.5 - parent: 2 - type: Transform - - uid: 157 - components: - - pos: -3.5,9.5 - parent: 2 - type: Transform - - uid: 158 - components: - - pos: -8.5,7.5 - parent: 2 - type: Transform - - uid: 159 - components: - - pos: -8.5,6.5 - parent: 2 - type: Transform - - uid: 160 - components: - - pos: -8.5,4.5 - parent: 2 - type: Transform - - uid: 161 - components: - - pos: -8.5,3.5 - parent: 2 - type: Transform - - uid: 162 - components: - - pos: -8.5,2.5 - parent: 2 - type: Transform - - uid: 163 - components: - - pos: -8.5,-4.5 - parent: 2 - type: Transform - - uid: 164 - components: - - pos: -8.5,1.5 - parent: 2 - type: Transform - - uid: 165 - components: - - pos: -8.5,-3.5 - parent: 2 - type: Transform - - uid: 166 - components: - - pos: -8.5,-2.5 - parent: 2 - type: Transform - - uid: 167 - components: - - pos: -8.5,0.5 - parent: 2 - type: Transform - - uid: 168 - components: - - pos: -7.5,-5.5 - parent: 2 - type: Transform - - uid: 169 - components: - - pos: -8.5,-0.5 - parent: 2 - type: Transform - - uid: 170 - components: - - pos: -6.5,-5.5 - parent: 2 - type: Transform - - uid: 171 - components: - - pos: -5.5,-5.5 - parent: 2 - type: Transform - - uid: 172 - components: - - pos: -4.5,-5.5 - parent: 2 - type: Transform - - uid: 173 - components: - - pos: -3.5,-5.5 - parent: 2 - type: Transform - - uid: 174 - components: - - pos: 4.5,-5.5 - parent: 2 - type: Transform - - uid: 175 - components: - - pos: 5.5,-5.5 - parent: 2 - type: Transform - - uid: 176 - components: - - pos: 6.5,-5.5 - parent: 2 - type: Transform - - uid: 177 - components: - - pos: 7.5,-5.5 - parent: 2 - type: Transform - - uid: 178 - components: - - pos: 8.5,-5.5 - parent: 2 - type: Transform - - uid: 179 - components: - - pos: 9.5,-4.5 - parent: 2 - type: Transform - - uid: 180 - components: - - pos: 9.5,-3.5 - parent: 2 - type: Transform - - uid: 181 - components: - - pos: 9.5,-2.5 - parent: 2 - type: Transform - - uid: 182 - components: - - pos: 9.5,-0.5 - parent: 2 - type: Transform - - uid: 183 - components: - - pos: 9.5,0.5 - parent: 2 - type: Transform - - uid: 184 - components: - - pos: 9.5,1.5 - parent: 2 - type: Transform - - uid: 185 - components: - - pos: 9.5,2.5 - parent: 2 - type: Transform - - uid: 186 - components: - - pos: 9.5,3.5 - parent: 2 - type: Transform - - uid: 187 - components: - - pos: 9.5,4.5 - parent: 2 - type: Transform - - uid: 188 - components: - - pos: 9.5,6.5 - parent: 2 - type: Transform - - uid: 189 - components: - - pos: 9.5,7.5 - parent: 2 - type: Transform - - uid: 190 - components: - - pos: 9.5,8.5 - parent: 2 - type: Transform -- proto: KitchenMicrowave - entities: - - uid: 374 - components: - - pos: 8.5,7.5 - parent: 2 - type: Transform -- proto: LockerChiefEngineerFilledHardsuit - entities: - - uid: 396 - components: - - pos: -4.5,8.5 - parent: 2 - type: Transform -- proto: LockerElectricalSuppliesFilled - entities: - - uid: 397 - components: - - pos: -5.5,8.5 - parent: 2 - type: Transform -- proto: LockerWeldingSuppliesFilled - entities: - - uid: 236 - components: - - pos: -3.5,8.5 - parent: 2 - type: Transform -- proto: NitrogenCanister - entities: - - uid: 72 - components: - - pos: 3.5,-4.5 - parent: 2 - type: Transform - - uid: 73 - components: - - pos: 3.5,-3.5 - parent: 2 - type: Transform - - uid: 74 - components: - - pos: 3.5,-2.5 - parent: 2 - type: Transform - - uid: 79 - components: - - pos: 2.5,-4.5 - parent: 2 - type: Transform - - uid: 95 - components: - - pos: 2.5,-2.5 - parent: 2 - type: Transform - - uid: 96 - components: - - pos: 1.5,-3.5 - parent: 2 - type: Transform - - uid: 98 - components: - - pos: 2.5,-3.5 - parent: 2 - type: Transform - - uid: 99 - components: - - pos: 1.5,-2.5 - parent: 2 - type: Transform - - uid: 100 - components: - - pos: 1.5,-4.5 - parent: 2 - type: Transform -- proto: OxygenCanister - entities: - - uid: 68 - components: - - pos: 5.5,-2.5 - parent: 2 - type: Transform - - uid: 69 - components: - - pos: 5.5,-3.5 - parent: 2 - type: Transform - - uid: 70 - components: - - pos: 5.5,-4.5 - parent: 2 - type: Transform - - uid: 71 - components: - - pos: 4.5,-4.5 - parent: 2 - type: Transform - - uid: 75 - components: - - pos: 4.5,-2.5 - parent: 2 - type: Transform - - uid: 76 - components: - - pos: 4.5,-3.5 - parent: 2 - type: Transform - - uid: 91 - components: - - pos: 6.5,-2.5 - parent: 2 - type: Transform - - uid: 93 - components: - - pos: 6.5,-4.5 - parent: 2 - type: Transform - - uid: 94 - components: - - pos: 6.5,-3.5 - parent: 2 - type: Transform -- proto: PartRodMetal - entities: - - uid: 391 - components: - - pos: -6.820592,5.657404 - parent: 2 - type: Transform -- proto: PlasmaCanister - entities: - - uid: 77 - components: - - pos: -2.5,-3.5 - parent: 2 - type: Transform - - uid: 78 - components: - - pos: -2.5,-2.5 - parent: 2 - type: Transform - - uid: 80 - components: - - pos: -1.5,-2.5 - parent: 2 - type: Transform - - uid: 81 - components: - - pos: -0.5,-2.5 - parent: 2 - type: Transform - - uid: 82 - components: - - pos: -0.5,-3.5 - parent: 2 - type: Transform - - uid: 83 - components: - - pos: -0.5,-4.5 - parent: 2 - type: Transform - - uid: 84 - components: - - pos: -1.5,-4.5 - parent: 2 - type: Transform - - uid: 85 - components: - - pos: -1.5,-3.5 - parent: 2 - type: Transform - - uid: 97 - components: - - pos: -2.5,-4.5 - parent: 2 - type: Transform -- proto: PlushieSharkBlue - entities: - - uid: 379 - components: - - pos: 8.481326,8.370146 - parent: 2 - type: Transform -- proto: PoweredlightLED - entities: - - uid: 304 - components: - - rot: 1.5707963267948966 rad - pos: -7.5,5.5 - parent: 2 - type: Transform - - enabled: False - type: AmbientSound - - uid: 305 - components: - - rot: 1.5707963267948966 rad - pos: -7.5,-1.5 - parent: 2 - type: Transform - - enabled: False - type: AmbientSound - - uid: 306 - components: - - rot: 3.141592653589793 rad - pos: -2.5,-4.5 - parent: 2 - type: Transform - - enabled: False - type: AmbientSound - - uid: 307 - components: - - rot: 3.141592653589793 rad - pos: 3.5,-4.5 - parent: 2 - type: Transform - - enabled: False - type: AmbientSound - - uid: 308 - components: - - rot: -1.5707963267948966 rad - pos: 8.5,-1.5 - parent: 2 - type: Transform - - enabled: False - type: AmbientSound - - uid: 309 - components: - - pos: 3.5,4.5 - parent: 2 - type: Transform - - enabled: False - type: AmbientSound - - uid: 312 - components: - - rot: -1.5707963267948966 rad - pos: 8.5,7.5 - parent: 2 - type: Transform - - enabled: False - type: AmbientSound - - uid: 313 - components: - - rot: -1.5707963267948966 rad - pos: 8.5,3.5 - parent: 2 - type: Transform - - enabled: False - type: AmbientSound - - uid: 314 - components: - - pos: 0.5,8.5 - parent: 2 - type: Transform - - enabled: False - type: AmbientSound - - uid: 315 - components: - - pos: -2.5,4.5 - parent: 2 - type: Transform - - enabled: False - type: AmbientSound -- proto: Railing - entities: - - uid: 240 - components: - - rot: 1.5707963267948966 rad - pos: -2.5,8.5 - parent: 2 - type: Transform -- proto: ReinforcedWindow - entities: - - uid: 43 - components: - - pos: 2.5,9.5 - parent: 2 - type: Transform - - uid: 44 - components: - - pos: -1.5,9.5 - parent: 2 - type: Transform - - uid: 45 - components: - - pos: -0.5,9.5 - parent: 2 - type: Transform - - uid: 46 - components: - - pos: 0.5,9.5 - parent: 2 - type: Transform - - uid: 47 - components: - - pos: 1.5,9.5 - parent: 2 - type: Transform - - uid: 104 - components: - - rot: -1.5707963267948966 rad - pos: 2.5,-5.5 - parent: 2 - type: Transform - - uid: 105 - components: - - rot: -1.5707963267948966 rad - pos: 1.5,-5.5 - parent: 2 - type: Transform - - uid: 106 - components: - - rot: -1.5707963267948966 rad - pos: 0.5,-5.5 - parent: 2 - type: Transform - - uid: 107 - components: - - rot: -1.5707963267948966 rad - pos: -0.5,-5.5 - parent: 2 - type: Transform - - uid: 108 - components: - - rot: -1.5707963267948966 rad - pos: -1.5,-5.5 - parent: 2 - type: Transform - - uid: 117 - components: - - rot: -1.5707963267948966 rad - pos: 4.5,9.5 - parent: 2 - type: Transform - - uid: 118 - components: - - rot: -1.5707963267948966 rad - pos: 5.5,9.5 - parent: 2 - type: Transform - - uid: 119 - components: - - rot: -1.5707963267948966 rad - pos: 6.5,9.5 - parent: 2 - type: Transform - - uid: 120 - components: - - rot: -1.5707963267948966 rad - pos: 7.5,9.5 - parent: 2 - type: Transform - - uid: 121 - components: - - rot: -1.5707963267948966 rad - pos: 8.5,9.5 - parent: 2 - type: Transform - - uid: 122 - components: - - rot: -1.5707963267948966 rad - pos: 3.5,8.5 - parent: 2 - type: Transform - - uid: 125 - components: - - rot: -1.5707963267948966 rad - pos: 3.5,6.5 - parent: 2 - type: Transform - - uid: 129 - components: - - pos: 7.5,5.5 - parent: 2 - type: Transform - - uid: 131 - components: - - rot: -1.5707963267948966 rad - pos: 4.5,5.5 - parent: 2 - type: Transform - - uid: 132 - components: - - rot: -1.5707963267948966 rad - pos: 5.5,5.5 - parent: 2 - type: Transform - - uid: 135 - components: - - rot: -1.5707963267948966 rad - pos: 8.5,5.5 - parent: 2 - type: Transform - - uid: 195 - components: - - pos: -7.5,-5.5 - parent: 2 - type: Transform - - uid: 196 - components: - - pos: -6.5,-5.5 - parent: 2 - type: Transform - - uid: 197 - components: - - pos: -5.5,-5.5 - parent: 2 - type: Transform - - uid: 198 - components: - - pos: -4.5,-5.5 - parent: 2 - type: Transform - - uid: 199 - components: - - pos: -3.5,-5.5 - parent: 2 - type: Transform - - uid: 200 - components: - - pos: -8.5,-4.5 - parent: 2 - type: Transform - - uid: 201 - components: - - pos: -8.5,-3.5 - parent: 2 - type: Transform - - uid: 202 - components: - - pos: -8.5,-2.5 - parent: 2 - type: Transform - - uid: 203 - components: - - pos: -8.5,-0.5 - parent: 2 - type: Transform - - uid: 204 - components: - - pos: -8.5,0.5 - parent: 2 - type: Transform - - uid: 205 - components: - - pos: -8.5,1.5 - parent: 2 - type: Transform - - uid: 206 - components: - - pos: -8.5,2.5 - parent: 2 - type: Transform - - uid: 207 - components: - - pos: -8.5,3.5 - parent: 2 - type: Transform - - uid: 208 - components: - - pos: -8.5,4.5 - parent: 2 - type: Transform - - uid: 209 - components: - - pos: -8.5,6.5 - parent: 2 - type: Transform - - uid: 210 - components: - - pos: -8.5,7.5 - parent: 2 - type: Transform - - uid: 211 - components: - - pos: -8.5,8.5 - parent: 2 - type: Transform - - uid: 212 - components: - - pos: -7.5,9.5 - parent: 2 - type: Transform - - uid: 213 - components: - - pos: -6.5,9.5 - parent: 2 - type: Transform - - uid: 214 - components: - - pos: -5.5,9.5 - parent: 2 - type: Transform - - uid: 215 - components: - - pos: -4.5,9.5 - parent: 2 - type: Transform - - uid: 216 - components: - - pos: -3.5,9.5 - parent: 2 - type: Transform - - uid: 217 - components: - - pos: 9.5,8.5 - parent: 2 - type: Transform - - uid: 218 - components: - - pos: 9.5,7.5 - parent: 2 - type: Transform - - uid: 219 - components: - - pos: 9.5,6.5 - parent: 2 - type: Transform - - uid: 220 - components: - - pos: 9.5,4.5 - parent: 2 - type: Transform - - uid: 221 - components: - - pos: 9.5,3.5 - parent: 2 - type: Transform - - uid: 222 - components: - - pos: 9.5,2.5 - parent: 2 - type: Transform - - uid: 223 - components: - - pos: 9.5,1.5 - parent: 2 - type: Transform - - uid: 224 - components: - - pos: 9.5,0.5 - parent: 2 - type: Transform - - uid: 225 - components: - - pos: 9.5,-0.5 - parent: 2 - type: Transform - - uid: 226 - components: - - pos: 9.5,-2.5 - parent: 2 - type: Transform - - uid: 227 - components: - - pos: 9.5,-3.5 - parent: 2 - type: Transform - - uid: 228 - components: - - pos: 9.5,-4.5 - parent: 2 - type: Transform - - uid: 229 - components: - - pos: 8.5,-5.5 - parent: 2 - type: Transform - - uid: 230 - components: - - pos: 7.5,-5.5 - parent: 2 - type: Transform - - uid: 231 - components: - - pos: 6.5,-5.5 - parent: 2 - type: Transform - - uid: 232 - components: - - pos: 5.5,-5.5 - parent: 2 - type: Transform - - uid: 233 - components: - - pos: 4.5,-5.5 - parent: 2 - type: Transform -- proto: SheetGlass - entities: - - uid: 390 - components: - - pos: -7.193118,5.2925663 - parent: 2 - type: Transform -- proto: SheetPlasteel - entities: - - uid: 387 - components: - - pos: -7.609784,5.6052837 - parent: 2 - type: Transform -- proto: SheetRGlass - entities: - - uid: 388 - components: - - pos: -7.630618,5.323839 - parent: 2 - type: Transform -- proto: SheetSteel - entities: - - uid: 389 - components: - - pos: -7.203534,5.6469793 - parent: 2 - type: Transform -- proto: SMESBasicEmpty - entities: - - uid: 29 - components: - - pos: 0.5,5.5 - parent: 2 - type: Transform - - maxCharge: 8E+12 - type: Battery - - maxChargeRate: 5E+09 - type: PowerNetworkBattery - - ShutdownSubscribers: - - 433 - type: DeviceNetwork - missingComponents: - - UpgradeBattery -- proto: SpawnPointChiefEngineer - entities: - - uid: 145 - components: - - pos: 0.5,-0.5 - parent: 2 - type: Transform -- proto: SpawnPointLatejoin - entities: - - uid: 144 - components: - - rot: 3.141592653589793 rad - pos: 0.5,0.5 - parent: 2 - type: Transform -- proto: SuitStorageCE - entities: - - uid: 239 - components: - - pos: 4.5,8.5 - parent: 2 - type: Transform -- proto: Table - entities: - - uid: 331 - components: - - pos: -6.5,5.5 - parent: 2 - type: Transform - - uid: 334 - components: - - pos: -7.5,5.5 - parent: 2 - type: Transform - - uid: 335 - components: - - pos: -4.5,5.5 - parent: 2 - type: Transform - - uid: 336 - components: - - pos: -3.5,5.5 - parent: 2 - type: Transform - - uid: 373 - components: - - pos: 8.5,7.5 - parent: 2 - type: Transform - - uid: 375 - components: - - pos: 8.5,6.5 - parent: 2 - type: Transform -- proto: TegCenter - entities: - - uid: 3 - components: - - anchored: True - rot: 1.5707963267948966 rad - pos: 0.5,2.5 - parent: 2 - type: Transform - - ShutdownSubscribers: - - 433 - type: DeviceNetwork -- proto: TegCirculator - entities: - - uid: 4 - components: - - anchored: True - pos: 1.5,2.5 - parent: 2 - type: Transform - - uid: 5 - components: - - anchored: True - rot: 3.141592653589793 rad - pos: -0.5,2.5 - parent: 2 - type: Transform -- proto: TritiumCanister - entities: - - uid: 63 - components: - - pos: -4.5,-2.5 - parent: 2 - type: Transform - - locked: False - type: Lock - - uid: 64 - components: - - pos: -4.5,-3.5 - parent: 2 - type: Transform - - uid: 65 - components: - - pos: -4.5,-4.5 - parent: 2 - type: Transform - - uid: 66 - components: - - pos: -5.5,-2.5 - parent: 2 - type: Transform - - uid: 67 - components: - - pos: -5.5,-4.5 - parent: 2 - type: Transform - - uid: 89 - components: - - pos: -3.5,-2.5 - parent: 2 - type: Transform - - uid: 90 - components: - - pos: -3.5,-4.5 - parent: 2 - type: Transform - - uid: 92 - components: - - pos: -3.5,-3.5 - parent: 2 - type: Transform - - uid: 103 - components: - - pos: -5.5,-3.5 - parent: 2 - type: Transform -- proto: VendingMachineEngivend - entities: - - uid: 235 - components: - - flags: SessionSpecific - type: MetaData - - pos: -7.5,8.5 - parent: 2 - type: Transform -- proto: VendingMachineTankDispenserEngineering - entities: - - uid: 383 - components: - - flags: SessionSpecific - type: MetaData - - pos: -6.5,-4.5 - parent: 2 - type: Transform -- proto: VendingMachineYouTool - entities: - - uid: 234 - components: - - flags: SessionSpecific - type: MetaData - - pos: -6.5,8.5 - parent: 2 - type: Transform -- proto: WallReinforced - entities: - - uid: 48 - components: - - pos: -2.5,9.5 - parent: 2 - type: Transform - - uid: 49 - components: - - pos: 3.5,9.5 - parent: 2 - type: Transform - - uid: 109 - components: - - rot: -1.5707963267948966 rad - pos: -2.5,-5.5 - parent: 2 - type: Transform - - uid: 110 - components: - - rot: -1.5707963267948966 rad - pos: 3.5,-5.5 - parent: 2 - type: Transform - - uid: 148 - components: - - pos: 9.5,9.5 - parent: 2 - type: Transform - - uid: 149 - components: - - pos: 9.5,5.5 - parent: 2 - type: Transform - - uid: 150 - components: - - pos: 9.5,-5.5 - parent: 2 - type: Transform - - uid: 151 - components: - - pos: 9.5,-1.5 - parent: 2 - type: Transform - - uid: 191 - components: - - pos: -8.5,9.5 - parent: 2 - type: Transform - - uid: 192 - components: - - pos: -8.5,5.5 - parent: 2 - type: Transform - - uid: 193 - components: - - pos: -8.5,-1.5 - parent: 2 - type: Transform - - uid: 194 - components: - - pos: -8.5,-5.5 - parent: 2 - type: Transform -- proto: WallSolid - entities: - - uid: 112 - components: - - rot: -1.5707963267948966 rad - pos: 3.5,5.5 - parent: 2 - type: Transform - - uid: 311 - components: - - pos: -2.5,5.5 - parent: 2 - type: Transform -- proto: WaterTankHighCapacity - entities: - - uid: 395 - components: - - pos: -7.5,-4.5 - parent: 2 - type: Transform -- proto: WeldingFuelTankHighCapacity - entities: - - uid: 394 - components: - - pos: -2.5,8.5 - parent: 2 - type: Transform -... diff --git a/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/computer.yml b/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/computer.yml index 13967b9df597..1066bbb07ce9 100644 --- a/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/computer.yml +++ b/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/computer.yml @@ -377,14 +377,3 @@ price: 150 - type: ComputerBoard prototype: ComputerMassMedia - -- type: entity - parent: BaseComputerCircuitboard - id: SensorConsoleCircuitboard - name: sensor monitoring console board - description: A computer printed circuit board for a sensor monitoring console. - components: - - type: Sprite - state: cpu_engineering - - type: ComputerBoard - prototype: ComputerSensorMonitoring diff --git a/Resources/Prototypes/Entities/Stations/test.yml b/Resources/Prototypes/Entities/Stations/test.yml deleted file mode 100644 index 0f2e40537a2f..000000000000 --- a/Resources/Prototypes/Entities/Stations/test.yml +++ /dev/null @@ -1,11 +0,0 @@ -# Station prototype for cut-down test maps that don't need all the infrastructure. -- type: entity - id: TestStation - parent: - - BaseStation - - BaseStationJobsSpawning - - BaseStationRecords - - BaseStationAlertLevels - noSpawn: true - components: - - type: Transform diff --git a/Resources/Prototypes/Entities/Structures/Machines/Computers/computers.yml b/Resources/Prototypes/Entities/Structures/Machines/Computers/computers.yml index 090f1e6c073f..27ad39fafbb0 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/Computers/computers.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/Computers/computers.yml @@ -972,46 +972,3 @@ interfaces: - key: enum.NewsWriteUiKey.Key type: NewsWriteBoundUserInterface - -- type: entity - parent: BaseComputer - id: ComputerSensorMonitoring - name: sensor monitoring computer - description: A flexible console for monitoring all kinds of sensors. - # Putting this as "DO NOT MAP" until the performance issues are fixed. - # And it's more fleshed out. - suffix: TESTING, DO NOT MAP - components: - - type: Sprite - layers: - - map: ["computerLayerBody"] - state: computer - - map: ["computerLayerKeyboard"] - state: generic_keyboard - - map: ["computerLayerScreen"] - state: sensors - - map: ["computerLayerKeys"] - state: atmos_key - - type: PointLight - radius: 1.5 - energy: 1.6 - color: "#43ccb5" - - type: Computer - board: SensorConsoleCircuitboard - - type: SensorMonitoringConsole - - type: ActivatableUI - key: enum.SensorMonitoringConsoleUiKey.Key - - type: UserInterface - interfaces: - - key: enum.SensorMonitoringConsoleUiKey.Key - type: SensorMonitoringConsoleBoundUserInterface - - type: DeviceNetwork - deviceNetId: AtmosDevices - receiveFrequencyId: AtmosMonitor - transmitFrequencyId: AtmosMonitor - prefix: device-address-prefix-sensor-monitor - sendBroadcastAttemptEvent: true - examinableAddress: true - - type: WiredNetworkConnection - - type: DeviceList - - type: AtmosDevice diff --git a/Resources/Prototypes/Entities/Structures/Piping/Atmospherics/binary.yml b/Resources/Prototypes/Entities/Structures/Piping/Atmospherics/binary.yml index f60a03cfb01d..13116f19ef88 100644 --- a/Resources/Prototypes/Entities/Structures/Piping/Atmospherics/binary.yml +++ b/Resources/Prototypes/Entities/Structures/Piping/Atmospherics/binary.yml @@ -102,14 +102,6 @@ range: 5 sound: path: /Audio/Ambience/Objects/gas_pump.ogg - - type: DeviceNetwork - deviceNetId: AtmosDevices - receiveFrequencyId: AtmosMonitor - transmitFrequencyId: AtmosMonitor - sendBroadcastAttemptEvent: true - examinableAddress: true - prefix: device-address-prefix-volume-pump - - type: WiredNetworkConnection - type: entity parent: GasBinaryBase diff --git a/Resources/Prototypes/Entities/Structures/Piping/Atmospherics/unary.yml b/Resources/Prototypes/Entities/Structures/Piping/Atmospherics/unary.yml index e50e256e9c61..4745a5c7eb82 100644 --- a/Resources/Prototypes/Entities/Structures/Piping/Atmospherics/unary.yml +++ b/Resources/Prototypes/Entities/Structures/Piping/Atmospherics/unary.yml @@ -250,14 +250,6 @@ pipeDirection: South - type: Transform noRot: false - - type: DeviceNetwork - deviceNetId: AtmosDevices - receiveFrequencyId: AtmosMonitor - transmitFrequencyId: AtmosMonitor - sendBroadcastAttemptEvent: true - examinableAddress: true - - type: WiredNetworkConnection - - type: PowerSwitch - type: entity parent: BaseGasThermoMachine @@ -289,8 +281,6 @@ powerDisabled: true #starts off - type: Machine board: ThermomachineFreezerMachineCircuitBoard - - type: DeviceNetwork - prefix: device-address-prefix-freezer - type: entity parent: GasThermoMachineFreezer @@ -332,8 +322,6 @@ powerDisabled: true #starts off - type: Machine board: ThermomachineHeaterMachineCircuitBoard - - type: DeviceNetwork - prefix: device-address-prefix-heater - type: entity parent: GasThermoMachineHeater diff --git a/Resources/Prototypes/Entities/Structures/Power/Generation/teg.yml b/Resources/Prototypes/Entities/Structures/Power/Generation/teg.yml deleted file mode 100644 index 6fd3117112a4..000000000000 --- a/Resources/Prototypes/Entities/Structures/Power/Generation/teg.yml +++ /dev/null @@ -1,189 +0,0 @@ -- type: entity - id: TegCenter - name: thermo-electric generator - description: A high efficiency generator that uses energy transfer between hot and cold gases to produce electricity. - parent: BaseMachinePowered - placement: - mode: SnapgridCenter - components: - - type: Transform - noRot: false - - type: Sprite - sprite: Structures/Power/Generation/teg.rsi - layers: - - state: teg - - state: teg_mid - shader: unshaded - map: [ "enum.PowerDeviceVisualLayers.Powered" ] - - state: teg-op1 - shader: unshaded - visible: false - map: [ "enum.TegVisualLayers.PowerOutput" ] - - type: GenericVisualizer - visuals: - enum.PowerDeviceVisuals.Powered: - enum.PowerDeviceVisualLayers.Powered: - True: { visible: true } - False: { visible: false } - enum.TegVisuals.PowerOutput: - enum.TegVisualLayers.PowerOutput: - 0: { visible: false } - 1: { visible: true, state: teg-op1 } - 2: { visible: true, state: teg-op2 } - 3: { visible: true, state: teg-op3 } - 4: { visible: true, state: teg-op4 } - 5: { visible: true, state: teg-op5 } - 6: { visible: true, state: teg-op6 } - 7: { visible: true, state: teg-op7 } - 8: { visible: true, state: teg-op8 } - 9: { visible: true, state: teg-op9 } - 10: { visible: true, state: teg-op10 } - 11: { visible: true, state: teg-op11 } - - - type: Anchorable - - type: Pullable - - type: NodeContainer - examinable: true - nodes: - output: - !type:CableDeviceNode - nodeGroupID: HVPower - teg: - !type:TegNodeGenerator - nodeGroupID: Teg - - type: Rotatable - - # Note that only the TEG center is an AtmosDevice. - # It fires processing on behalf of its connected circulators. - - type: AtmosDevice - - type: TegGenerator - - - type: DeviceNetwork - deviceNetId: AtmosDevices - receiveFrequencyId: AtmosMonitor - transmitFrequencyId: AtmosMonitor - prefix: device-address-prefix-teg - sendBroadcastAttemptEvent: true - examinableAddress: true - - type: WiredNetworkConnection - - - type: PowerSupplier - # Have practically irrelevant supply ramping. - # Ramping is effectively implemented by the TEG manually, - # due to how power output is handled. - supplyRampRate: 100000000 - supplyRampTolerance: 10000000000 - - - type: Appearance - - type: ApcPowerReceiver - powerLoad: 1000 - - - type: LitOnPowered - - type: PointLight - enabled: false - castShadows: false - radius: 1.5 - color: "#FFAA00" - - - type: AmbientSound - volume: -4 - range: 6 - enabled: false - sound: - path: /Audio/Ambience/Objects/vending_machine_hum.ogg - -- type: entity - id: TegCirculator - name: circulator - description: Passes gas through the thermo-electric generator to exchange heat. Has an inlet and outlet port. - parent: BaseMachine - placement: - mode: SnapgridCenter - components: - - type: Transform - noRot: false - - # visuals - - type: Sprite - sprite: Structures/Power/Generation/teg.rsi - layers: - - state: circ-0 - map: [ "enum.TegVisualLayers.CirculatorBase" ] - - state: circ-0-light - shader: unshaded - map: [ "enum.TegVisualLayers.CirculatorLight" ] - - - type: GenericVisualizer - visuals: - enum.TegVisuals.CirculatorPower: - enum.TegVisualLayers.CirculatorLight: - True: { visible: true } - False: { visible: false } - enum.TegVisuals.CirculatorSpeed: - enum.TegVisualLayers.CirculatorBase: - SpeedStill: { state: circ-0 } - SpeedSlow: { state: circ-1 } - SpeedFast: { state: circ-2 } - enum.TegVisualLayers.CirculatorLight: - SpeedStill: { state: circ-0-light } - SpeedSlow: { state: circ-1-light } - SpeedFast: { state: circ-2-light } - - - type: Appearance - - type: PointLight - enabled: false - castShadows: false - radius: 1.5 - color: "#CC00FF" - - # tags - - type: Tag - tags: - - Pipe - - Unstackable - - # basic interactions - - type: Rotatable - - type: Anchorable - - type: Pullable - - # functionality - - type: NodeContainer - nodes: - inlet: - !type:PipeNode - nodeGroupID: Pipe - pipeDirection: North - volume: 100 - outlet: - !type:PipeNode - nodeGroupID: Pipe - pipeDirection: South - volume: 100 - circulator: - !type:TegNodeCirculator - nodeGroupID: Teg - - - type: AtmosUnsafeUnanchor - - type: TegCirculator - light_color_fast: '#AA00FF' - light_color_slow: '#FF3300' - -- # Spawned by the client-side circulator examine code to indicate the inlet/outlet direction. - type: entity - id: TegCirculatorArrow - noSpawn: true - components: - - type: Sprite - sprite: Markers/teg_arrow.rsi - color: "#FFFFFFBB" - layers: - - state: arrow - offset: 0, 0.75 - - state: arrow - offset: 0, -0.75 - - type: TimedDespawn - lifetime: 2 - - type: Tag - tags: - - HideContextMenu diff --git a/Resources/Prototypes/Entities/Structures/Power/smes.yml b/Resources/Prototypes/Entities/Structures/Power/smes.yml index 7ecc330a38d2..bdd1093bad3e 100644 --- a/Resources/Prototypes/Entities/Structures/Power/smes.yml +++ b/Resources/Prototypes/Entities/Structures/Power/smes.yml @@ -78,15 +78,6 @@ - type: Damageable damageContainer: Inorganic damageModifierSet: StrongMetallic - - type: BatterySensor - - type: DeviceNetwork - deviceNetId: AtmosDevices - receiveFrequencyId: AtmosMonitor - transmitFrequencyId: AtmosMonitor - prefix: device-address-prefix-smes - sendBroadcastAttemptEvent: true - examinableAddress: true - - type: WiredNetworkConnection # SMES' in use diff --git a/Resources/Prototypes/Guidebook/engineering.yml b/Resources/Prototypes/Guidebook/engineering.yml index 2c5e47c0811e..afa89c8e9ef9 100644 --- a/Resources/Prototypes/Guidebook/engineering.yml +++ b/Resources/Prototypes/Guidebook/engineering.yml @@ -51,19 +51,13 @@ children: - AME - Singularity - - TEG - + - type: guideEntry id: AME name: guide-entry-ame text: "/ServerInfo/Guidebook/Engineering/AME.xml" - + - type: guideEntry id: Singularity name: guide-entry-singularity text: "/ServerInfo/Guidebook/Engineering/Singularity.xml" - -- type: guideEntry - id: TEG - name: guide-entry-teg - text: "/ServerInfo/Guidebook/Engineering/TEG.xml" diff --git a/Resources/Prototypes/Maps/debug.yml b/Resources/Prototypes/Maps/debug.yml index 2f475c1e5795..be23cdac990a 100644 --- a/Resources/Prototypes/Maps/debug.yml +++ b/Resources/Prototypes/Maps/debug.yml @@ -31,20 +31,3 @@ - Captain availableJobs: Captain: [ -1, -1 ] - -- type: gameMap - id: TestTeg - mapName: Test TEG - mapPath: /Maps/Test/test_teg.yml - minPlayers: 0 - stations: - TEG: - stationProto: TestStation - components: - - type: StationNameSetup - mapNameTemplate: "TEG" - - type: StationJobs - overflowJobs: - - ChiefEngineer - availableJobs: - ChiefEngineer: [ -1, -1 ] diff --git a/Resources/ServerInfo/Guidebook/Engineering/TEG.xml b/Resources/ServerInfo/Guidebook/Engineering/TEG.xml deleted file mode 100644 index a2a04e03ef0a..000000000000 --- a/Resources/ServerInfo/Guidebook/Engineering/TEG.xml +++ /dev/null @@ -1,39 +0,0 @@ - - # Thermo-electric Engine (TEG) - - The TEG generates power by exchanging heat between hot and cold gases. On station, hot gas is usually created by burning plasma, and an array of heat-exchanging pipes in space radiates away heat to make a cold side. - - The TEG relies heavily on atmospherics piping. The only truly special component about it is the generator core, the rest is all off-the-shelf atmospherics equipment. Note that while the exact layout may vary significantly depending on station, the general components and setup are usually the same. - - ## Generator - - The main generator itself is a machine made up of multiple parts: the core generator and two "circulators", in this arrangement: - - - - - - - - The circulators take in either a hot or cold gas, and pass it through the machine to exchange heat. The gas then gets output on the other end of the circulator. The generator produces the actual power and outputs it over an HV wire. - - Note that the circulators are [color=#a4885c]directional[/color]: they will only let gas through one way. You can see this direction in-game by examining the circulator itself. A pressure difference is required across the input and output, so pumps are generally provided and must be turned on. - - There is no preference for which side must be hot or cold, there need only be a difference in temperature between them. The gases in the two "loops" are never mixed, only energy is exchanged between them. The hot side will cool down, the cold side will heat up. - - ## Burn Chamber - - As I'm sure a wise person once said: the best way to make something hot is to light it on fire. Well, depending on context that may not be very wise, but luckily your engineering department has just what's needed to do it wisely after all. - - TODO: somebody fill this out once we settle on a general mapped layout for burn chambers. - - ## Coolant Array - - A whole bunch of heat-exchanger piping in space. There's not much to say here: gas goes through and cools down. - - ## The Pipes - - TODO: somebody fill this out once we settle on a general mapped layout for burn chambers. - - - diff --git a/Resources/Textures/Markers/teg_arrow.rsi/arrow.png b/Resources/Textures/Markers/teg_arrow.rsi/arrow.png deleted file mode 100644 index f0a15248cd6ebe75ef909f465c349005dca7157f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1058 zcmeAS@N?(olHy`uVBq!ia0vp^3xK$RgAGXbBqvD&DaPU;cPEB*=VV?oFfiZoba4!+ znDh3|-oi%?630G@78_3Na}Zs@yt8BVflkhKEH;n%KJ>g~V7EBH`#`S8dI3|~fi4Y) z>VtDXB$aHl3;Vt3>VNUXGd~1>)VkN4T`U4L9}K2@W$(Qfwf>}fyvm3 zo%#CD%TN9Mr(19Q^D}GtbM2iqFMsDh{{R2*HAdUJ|E_HN7Zy4Dt%HfZZB5Ly6a4L) zeilwKJ-6Mgp*BUYfu)#HWd?VEIP;A}I~@k*j$1i84R5#>e)r-}_&4eI?r`hey(a4S z&;JQpp0M_7m5sOX(kW3shpsP=F8zAbrsA?)40Y+Kd-DO{^K~E;9VOaN#Bk z_l20{zZuPMAG|5FMI8&ChSICXAXL*0RCpWe^^elpG4;-tRRzmGb; zk2E&V`~PE;|E1=j?vpQO#GCy2e*U+L%(l-zjt7=a0&;&o4l&#RN%O|`x?P(-C2CK; ze=Kt*{aYkq!sezezX z=j-Rc|9m-K`tSdjMe-XmIB&`QJOA^U&<=@zi)tpn{B;`$+E8PfAPM` zxv&2mpMLqz{rz`fUVZ(wWas6}Py2x0`8^X`3V2z=@oDLNzD+OKTQp8}Ds(ZnXs`(^ zl5pr)BrmW?>ML_y>F#x3E<1)j4c?Idw`4--N_m6-H<#C0omh2;KV!H2I`5ww)=&Q1 zFzM%p)n)bzO6=#R*emEYT&uE;fBU6I^)i3CAW)a;-+8l3>>%NNL9m`dzW=1%ugd2v OAQ4YjKbLh*2~7Zcj|Gqb diff --git a/Resources/Textures/Markers/teg_arrow.rsi/meta.json b/Resources/Textures/Markers/teg_arrow.rsi/meta.json deleted file mode 100644 index 366bdec16fab..000000000000 --- a/Resources/Textures/Markers/teg_arrow.rsi/meta.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "version": 1, - "license": "CC-BY-SA-3.0", - "copyright": "Made by PJB3005", - "size": { - "x": 32, - "y": 32 - }, - "states": [ - { - "name": "arrow", - "delays": [[0.033, 0.033, 0.033, 0.033, 0.033, 0.033, 0.033, 0.033, 0.033, 0.033, 0.033, 0.033, 0.033, 0.033, 0.033, 0.033, 0.033]] - } - ] -} diff --git a/Resources/Textures/Structures/Machines/computers.rsi/meta.json b/Resources/Textures/Structures/Machines/computers.rsi/meta.json index b6741b195d2a..c43d5d7e52d1 100644 --- a/Resources/Textures/Structures/Machines/computers.rsi/meta.json +++ b/Resources/Textures/Structures/Machines/computers.rsi/meta.json @@ -1460,10 +1460,6 @@ "name": "security_key_off", "directions": 4 }, - { - "name": "sensors", - "directions": 4 - }, { "name": "shuttle", "directions": 4, diff --git a/Resources/Textures/Structures/Machines/computers.rsi/sensors.png b/Resources/Textures/Structures/Machines/computers.rsi/sensors.png deleted file mode 100644 index 8c0b6769fce4b0ca69266ef9002962a263a23049..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 685 zcmV;e0#f~nP)Px%XGugsRCt{2nlVTtK@^7nT*M}&O(12sMi$bg5Eu6llFsIGMM@hhJ0XZoND~gh z?y58?ZF0?aZgU$pSl9`}HAhOp#?nrSMY74NGjVs{xD(I!L11@=%)Ix{+s7vF0Sv=1 z48wd@ajZ~i)v!)XK(%ifFHfi z(uLldUsa?L005WA2eB5|`sU;Ek2AjppuAs2lmdh&52(e6IuGb`Jj)!EI08cF0JVeE z6E9S4T<@uKP`%&5#eQ2lXVrX^n!{J~6~$VKBH-nTuL@SppI-~lLA^hmj-M@j$ba3G zepf2M{Z)Wy2-?3#z{W1}hqG%L8@uYc*_vqy9Tc7;os*3NfH+!2amAI}CKcdLxVRH; z5*y!zmyU<`rRHK@J9+YmyrMOhkq zi$c{#c@P*Ep*#pk{~x9n006G{wvCEV9t4xee}749kOTmL$6pUdL?{n}$+GHET*v|d z(@4lNClp)V`N>C%A88;7Q16>BiBoML32?FBMyWX@8ITrnbg;BY8W&}8G!E0!RC{&` z>m);xqQiNB7y-g_VAXsrh9u?Yd_a{99Px$6iGxuRCt{2+Cd7!Knw-YRJ@WqPvt>8mG{!kAVKOhwuznJ{~x%pRG5a6Niv#= z2(xML1!Q}gUH$jT?9sdbT)UkAY7c+;xYiBAsd`a6xwp@vL%jjcEqWt;4xqRA1{^)2 z-5jtctD=eS0^zKRCb|oRvnm?;93UbhB0{TM34T_A?FU0wg1@f$YcDX@3AXFQ24T&b zBh8TS0#TZx@R}n5KzV2{XC}yy14PI{oC{P=rG`Hls-8?Eoeh>urjY_rf<6Gl=K!aq zBBkF2L_|bHXr)$yh!tB}FM#@wvWjjH>K|qF?J#`+D&_%DCrR|XfQWE|7>drxO1Ma4 s@wd#f8@&+PTy{gg0nX;4i#`Xu0CEsLY0Q)j`~Uy|07*qoM6N<$f)PTJr2qf` diff --git a/Resources/Textures/Structures/Power/Generation/teg.rsi/circ-0.png b/Resources/Textures/Structures/Power/Generation/teg.rsi/circ-0.png deleted file mode 100644 index 73508ad504989d700fde521d6fb6eaed1285e50b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2186 zcmV;52zB>~P)oUCWhp0!FwqMg~kl(Vz5MHe`K{=C;1 zA2}f>yRx&~xpQYHf5FzDtilH$c6x?;4pFEzyTL&ydLMk0sL;? zzFp)%-bz5p#6nC=Of>F)i&2K$=g*(3E#=5w;%xvR`M|MI4&X5zRgfWxrSkyVv`i~$ z)2I3QdDjLRC7p-k@XvCbXYr>~V*;Dc=i_G?<`q)-mGk+qcEs z+?@N5{i&&`+RG5HBM~w$gvd;>7ogwK;c(77xHJq-%B=((K7IOh@%;Jo>Ob~Lg2wRh zaF!jpV}{Z)unou_)_|j*K7DGm#jfcBWk_j1=*8gBHC@?RcExNc6n#+_x~8)T&`M$4 zhYufm7PxKOwy5)vKQlAq<^!gur`IoDyjUIgU5oZEY-=Pz8rLh}NQi)t12`7Dwr$(I zPl2OHk7g@)`0%0Im!mHUI`Hk=H`j)Jwlfkm<9M@L7CEnBvDuam^^<;p_LX6k&yN>d7FTrTM)xmi*fWoXSXk$u1Z zU>3^9#>Oh4c&EmHNrDAB9|OS!r1A3QOYbqQhP>rd95|t4C(jTZ24KrKh{aU zaOwwl?%XL}y?W(}BiP?)TR(E-NGtL~Hfui}0T#>1pgN=GK+0t3>+COqV<5qoC{qx# zxsd}b$JquWv?12{Ry%sxg6w%uyICGPb?Q_RLa#QLK0|Y%<@g+p!FL^QksST0D022t7Y)27;glK|cOzM4HC>xwK}$&z(W6lmjq2BHyQErO6Wdw?Y?S-tTs zUT6cc9F&6w0lvh?UWfB2f8ocTW*J=GA~HXuM!}UUSAvtCxjD$ELn0{$=$d`VaR4Ow zjEezpYQEKC{pKL69#JE}>V2zbukUrMZjT7@tqjY3BJ`7kVn~Vr3gUfjttXP}0dnj1 z1i~M)zp_%?Rt{oC8ahs%Jn7CWF}g|_;7Et$_!(7SNDfiJ^Iv4blgJkbB{H4B%fMw5uLZGYhxYWsgLJh#qSbp>cX>JT9lSoBb zbn2%7AnlMO0GbFN=q#PrdbwXc1-hKbjKR{)rvVc(NdQt;iEud$o##BDEXh-U^hJo{ zaXr?)bm`LfogX33aJRkkg(%InYv7r8)Xhfx6J&Pmd7UeCoB7Lp0DzP7NQ$2g}S5?CljDGY`K znur*r;{cr31z94AfW^hdM%%}aAKgBdrD$?+4GriO>@`h94ASu!q6EN^>({S090d06 z-CJ!zfCSFPHPV2WkW?Y&^pkT6m5VuV25ee!T*Q zZ@juTNMNtZTfpjRy!OUk^lAiHUs@suSl<<;toYi!dv_xT;1PA>#*HEsBmw&%0`LC# zh7gdq0NOY%;QM~cTW*bj+;zAhCKiVJWu%w2zI22{5IXttf6nXuf5epif{9_T$^ZZW M07*qoM6N<$f@%~S^Z)<= diff --git a/Resources/Textures/Structures/Power/Generation/teg.rsi/circ-1-light.png b/Resources/Textures/Structures/Power/Generation/teg.rsi/circ-1-light.png deleted file mode 100644 index dbe84b6ce46cc8c8aa45d4c1e399663e8d626dd5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 614 zcmV-s0-61ZP)Px%AW1|)RCt{2+|5zLFc1b%!O#draHA>;Nmbk^3NB_QWD;A(lC_fFyTF*APn%H^ z$I?0_0001B7EfEh@SW28%^!T$8%{i<*Z;Ei!=?DQn`6U02#?HA|LO#|a#_B9)EdYm zL7sub)}K28PA@#AP|v_&>tCG!PbqzV-#Jz)e1|5_z!~b_d<6*de%Is~n9}(5Z+;4B zEyy`QGqcwZ0000$A*)vcZ?8fve{kBBDEamCAFc)5TZvkZpYkBcKPNwDIrwt*eTzjI z`4#hXCP1^5IQjMSodd`R003Yf#dihIzKgZD`g1#jvIOenX`;vai%x(m!}ii;>Zbl$ z6JXe0x=h{FUvvV@&`YPO12y(ciG0ek94${%V^p#1&$&H>~D0000000000FovRg0?)of zRkS-|^;mzgUBPGHr8Cf7L7R-HRNiyRK`k!n@4ocf&d%G?RsA(4039&_CRd{~=(j87 zHKp`b;r~C%i{k9@9Ln=4prG072LJ#7Ah4_}fzhrw&3?tLvk#m2lJ2KD6)04g#3e?15BR(18fue5qrM4{r~^~07*qoM6N<$f~p)H AcK`qY diff --git a/Resources/Textures/Structures/Power/Generation/teg.rsi/circ-1.png b/Resources/Textures/Structures/Power/Generation/teg.rsi/circ-1.png deleted file mode 100644 index a86d1c040f0611fb9599a215cd6b9550a5841973..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4199 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 CdLs(} diff --git a/Resources/Textures/Structures/Power/Generation/teg.rsi/meta.json b/Resources/Textures/Structures/Power/Generation/teg.rsi/meta.json deleted file mode 100644 index f0c0b58f05e7..000000000000 --- a/Resources/Textures/Structures/Power/Generation/teg.rsi/meta.json +++ /dev/null @@ -1,279 +0,0 @@ -{ - "version": 1, - "license": "CC-BY-SA-3.0", - "copyright": "Taken from https://github.com/Baystation12/Baystation12/blob/fc2196fa74492570e5abb847085afca0e53f4ea8/icons/obj/power.dmi. Modified to split light layers", - "size": { - "x": 32, - "y": 32 - }, - "states": [ - { - "name": "teg", - "directions": 4 - }, - { - "name": "teg-op1", - "directions": 4 - }, - { - "name": "teg-op2", - "directions": 4 - }, - { - "name": "teg-op3", - "directions": 4 - }, - { - "name": "teg-op4", - "directions": 4 - }, - { - "name": "teg-op5", - "directions": 4 - }, - { - "name": "teg-op6", - "directions": 4 - }, - { - "name": "teg-op7", - "directions": 4 - }, - { - "name": "teg-op8", - "directions": 4 - }, - { - "name": "teg-op9", - "directions": 4 - }, - { - "name": "teg-op10", - "directions": 4 - }, - { - "name": "teg-op11", - "directions": 4 - }, - { - "name": "teg_mid", - "directions": 4, - "delays": [ - [ - 0.1, - 0.1, - 0.1, - 0.1 - ], - [ - 0.1, - 0.1, - 0.1, - 0.1 - ], - [ - 0.1, - 0.1, - 0.1, - 0.1 - ], - [ - 0.1, - 0.1, - 0.1, - 0.1 - ] - ] - }, - { - "name": "teg-oc00" - }, - { - "name": "teg-oc10", - "delays": [ - [ - 0.3, - 0.3 - ] - ] - }, - { - "name": "teg-oc01", - "delays": [ - [ - 0.3, - 0.3 - ] - ] - }, - { - "name": "teg-oc11", - "delays": [ - [ - 0.3, - 0.3 - ] - ] - }, - { - "name": "circ-2", - "directions": 4, - "delays": [ - [ - 0.1, - 0.1, - 0.1, - 0.1, - 0.1, - 0.1, - 0.1, - 0.1 - ], - [ - 0.1, - 0.1, - 0.1, - 0.1, - 0.1, - 0.1, - 0.1, - 0.1 - ], - [ - 0.1, - 0.1, - 0.1, - 0.1, - 0.1, - 0.1, - 0.1, - 0.1 - ], - [ - 0.1, - 0.1, - 0.1, - 0.1, - 0.1, - 0.1, - 0.1, - 0.1 - ] - ] - }, - { - "name": "circ-2-light", - "directions": 4, - "delays": [ - [ - 0.1, - 0.1, - 0.1, - 0.1, - 0.1, - 0.1, - 0.1, - 0.1 - ], - [ - 0.1, - 0.1, - 0.1, - 0.1, - 0.1, - 0.1, - 0.1, - 0.1 - ], - [ - 0.1, - 0.1, - 0.1, - 0.1, - 0.1, - 0.1, - 0.1, - 0.1 - ], - [ - 0.1, - 0.1, - 0.1, - 0.1, - 0.1, - 0.1, - 0.1, - 0.1 - ] - ] - }, - { - "name": "circ-1", - "directions": 4, - "delays": [ - [ - 0.2, - 0.2, - 0.2, - 0.2 - ], - [ - 0.2, - 0.2, - 0.2, - 0.2 - ], - [ - 0.2, - 0.2, - 0.2, - 0.2 - ], - [ - 0.2, - 0.2, - 0.2, - 0.2 - ] - ] - }, - { - "name": "circ-1-light", - "directions": 4, - "delays": [ - [ - 0.2, - 0.2, - 0.2, - 0.2 - ], - [ - 0.2, - 0.2, - 0.2, - 0.2 - ], - [ - 0.2, - 0.2, - 0.2, - 0.2 - ], - [ - 0.2, - 0.2, - 0.2, - 0.2 - ] - ] - }, - { - "name": "circ-0", - "directions": 4 - }, - { - "name": "circ-0-light", - "directions": 4 - } - ] -} \ No newline at end of file diff --git a/Resources/Textures/Structures/Power/Generation/teg.rsi/teg-oc00.png b/Resources/Textures/Structures/Power/Generation/teg.rsi/teg-oc00.png deleted file mode 100644 index 209e4faa88c93ecfa6439da913e3feb68e35c355..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 235 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz&H|6fVg?4jBOuH;Rhv&5C^*;C z#WAE}&f6(xc^edXS``Z!(+~JYG)l%ex?d2Tvrv0S=eY+QSyu}Vu_Qb4zmMgTc`^O^ ze5YC+pjL*&hN@WkzeX9l+!F$~Go-EQdoky8{@+VanPANtIKQ3nyea5uzQ}um*Z;Xq@eD0)6K7BSksxfYsC|PytW3OxF>XzmWJ3=V$Z#M? YV7~cMZJoyR^ZFp3r>mdKI;Vst0NTS)pa1{> diff --git a/Resources/Textures/Structures/Power/Generation/teg.rsi/teg-oc01.png b/Resources/Textures/Structures/Power/Generation/teg.rsi/teg-oc01.png deleted file mode 100644 index f23a3eefe5e341d04d1b2f607a25235a4cd1379f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 297 zcmeAS@N?(olHy`uVBq!ia0vp^3P9|@!3HF&`%2dVDb50q$YKTtz9S&aI8~cZ8Yp<% z)5S5QV$Rze7kQfu1lS&AKVmx9FnfbjdP1vF)4BsZu?Kxi*xXjkQ?>EPHigCR%m9?($gcCOTnR&AMX(pAOU}&6^VLQe?V{!Ca@+Ao%i)wM@bdL7JZudulG5 z+qKMj9;9-xGoE?hk1eMdM3_NVK|n(w!!PERe+SH7{cSuemhqjv>whb6(snK%h70l+ gI^G&XR2_(C$a{L$*XDNiu|AN9r>mdKI;Vst0JuPNLI3~& diff --git a/Resources/Textures/Structures/Power/Generation/teg.rsi/teg-oc10.png b/Resources/Textures/Structures/Power/Generation/teg.rsi/teg-oc10.png deleted file mode 100644 index b34326da366f91884c719c278df4cc1e19b8fc42..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 292 zcmeAS@N?(olHy`uVBq!ia0vp^3P9|@!3HF&`%2dVDb50q$YKTtz9S&aI8~cZ8Yp

pdd Y*tdP~wc)W(l>>=*y85}Sb4q9e04;rFlK=n! diff --git a/Resources/Textures/Structures/Power/Generation/teg.rsi/teg-oc11.png b/Resources/Textures/Structures/Power/Generation/teg.rsi/teg-oc11.png deleted file mode 100644 index 4e936ef8fa3360dc44f92a036ca65baee7646ea3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 303 zcmeAS@N?(olHy`uVBq!ia0vp^3P9|@!3HF&`%2dVDb50q$YKTtz9S&aI8~cZ8YuYC z)5S5QV$Rze4|xwM2(Ug-E@Vt!F?$1(aS5wc)0zvC5eI!s*xVczX7wCpQJypX%U=78 z`YrL**VXRy{gVOeU%(@g{O6U<=Ac~0o}U~YpNoPgZ#|!^C-ajbYfreMPWN5^E6P_@ zKis?QFt5k(XZ`Bsf$>eZTQ9rDX8bl;<$XcB=suHR!^4sjuNQv|3Nrrn#koB1(3Ebw z=U4ZBYs~wttHE6NW6L&11CTdhU?Ia9_7!_H6X){p$@ki3E*~+qq1rCsj(Azeo$U@R k44)bMPP}7;C^lo*bgM)>FVdQ&MBb@0NwU+EdT%j diff --git a/Resources/Textures/Structures/Power/Generation/teg.rsi/teg-op1.png b/Resources/Textures/Structures/Power/Generation/teg.rsi/teg-op1.png deleted file mode 100644 index 8210dfa200bf713e7c18aaa0950a503ada3e3312..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 371 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=oCO|{#S9F5M?jcysy3fA0|TR~ zr;B4q#hkaZ0=W(u2)MX^@TsfRKL7COo)Fg+s?(+%n{ZR*%pU!-?ab#>Zl+bYT8J?e zzF-o2uq}Q!gFZ{)G=I?zZTF2|D++miTHJTQ_~#!7oA#gU7#%Hb|9xFlv#Q~|Wi;P4 zK?hH}T6UMPKeKACGjt>~zMOt>w;9{)2FYD!Y&(?=a;_gcV5+d$3`i#k8#rG-_8^_T z=iXMs0^SCYbvg`>A{dTr1ZfmF&ZOWsvEj?6O~;kBjsJ%n__xXE)g%)wAWQ1n+eIyN z-%BB>zZ`O)ZlC;Jv+GaHg(u8@@4oHq)}KAfALhRQKFjF;)b~;jKhCbar=OvwV1B<} sr)ld?-|_=J@5OhpImmFMTKt(U|GC%KY7KQpU??(py85}Sb4q9e0Joo+uK)l5 diff --git a/Resources/Textures/Structures/Power/Generation/teg.rsi/teg-op10.png b/Resources/Textures/Structures/Power/Generation/teg.rsi/teg-op10.png deleted file mode 100644 index 5e9d96d8d3eb2db33cb1d8bd179f324bdc60b5b5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 449 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=oCO|{#S9F5M?jcysy3fA0|R5R zr;B4q#hkaZy!#Fr2)JkmoikazQWu4B;$+r{(XjvhR9-bvM6R>;JS{pM|WR^l!eFQ@HBix1QLv+wD27 z%m3U_4X}@hcltb^Y1#gwiwyNuPhV>?6vZ+5z3^UM^OfQH-udBm-4>7Afb0p6wGu4W z{gEi(jQF&;%Aw!fE4a?jVRv)wp2PmF-;5Uie7u_Xdd=JE%z}>{mWBUY#O~5}x%kV8 z>%k09JQz+)WSF4LsNl}z0CFTJgQXhdPR(bmo7b;De?Gu@_rkU5b)gQKT|2#IN5+2t zv#R0C#H3pH<%i0c_k1qpXRs7vC{h6%vyt1QTS9#GPAz>|-}I_EpK_U&)vjNBRCM9( z@+Z^we-+wspzrvUiqAE7na!^Kzun4Ly^&Kx*JQ=NwHJLa7~a3feCdW&(%piTeeaOn d0x|s#!@)06JO3GfSPhI522WQ%mvv4FO#q=HzD@uD diff --git a/Resources/Textures/Structures/Power/Generation/teg.rsi/teg-op11.png b/Resources/Textures/Structures/Power/Generation/teg.rsi/teg-op11.png deleted file mode 100644 index 6270b81b2aeea0c6dd7f83cc4312fcda3f43cb9f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 445 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=oCO|{#S9F5M?jcysy3fA0|R5e zr;B4q#hkaZy!#F-2)J;cOrI5+H}&Wfj>)ci)4UBgP2oS0a9~+t;MXv*ywZtW3I&@R zWF#4il9+Ak%mn$)8#Bq>p2IhDj_{Z13PrqomKe#rJ>vamQpWvR2A=k&ta1lGi`HhG zvqlgU)4PO@^9zL7Fm_-*>{a$ zf-8;iNc;@dH;zV6$-`WM#SWT>yvp0!8t*1RJj`%}4WF1WqdTHm?v zT0>hz_pVxQwO^^sMW)}lcIh-7`&Fu}U=iHE!`vn)KAYjhL`DU7HgJHYfH}|Qx7bJR V{P0O<2QWSuJYD@<);T3K0RUx|whaIP diff --git a/Resources/Textures/Structures/Power/Generation/teg.rsi/teg-op2.png b/Resources/Textures/Structures/Power/Generation/teg.rsi/teg-op2.png deleted file mode 100644 index c3b489c869079319b45681fb9ee970c1f9849fb1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 352 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=oCO|{#S9F5M?jcysy3fA0|TRw zr;B4q#hkaZ0=W(u2)N9DF!Rr+uz82OD_3>}cuk$gb~11CnLYZm`Pt=8mPvo>vJh*q zc*vx-XOrpk1k;mA!PgPhAk2bC5$0mZ{5129(>R_N*EPw7@ORL}J_Dr7Z#;&zzcWItGVJ~99KDR7TXzqKd29OgW=q^i$ z?7A093qBRNzE=*&+i}Qr!RP-|XX}E5avZnI29$2YV#U2ABd@O$p3K<|3^E2!S3j3^ HP6yPp-u(~B{7G|Is={?FaYcr>C>FOvuysS_82WEG@)P zG>fA{H`IL3w9}?PuQCOBUoAKjT64pkf7S1e{!dvib>Tx)a9wzSuEN&!|Lxe4 qvp&zh!)RO|zCelrat}ESY-bn%Zv1w0qN4ZfN$WOS4%anbA2_@G*={xkka3;|I=24W@Mn8N{IWG1Zco?GYdG`$ zi;(iCSZ0CaOz0?mdc&o>MNM*Kj#Q(;(-o(?n`_)*n>E}C!j%3Eq=I;49Y?B*|P0X6F z2ql<&)BoJ^EZ92X$FpB&ESMrD`|BS(!FO}g`*=p6;?9j?)nC(oLR9x#KX}o5_JAw{ z$g&8ABO5`+2^?oq=wo%56Ur3CE|$-9o=4-SE8|Y)?wij;IN$tP)KK^-t$xae&v#)8 zWw;wGcC*ynUc|Ry`$^MJ=G+>&fyc8mgtDGqk6?;Tvw1b8Jba(^f*ghFZn#tV v?~~Mo6;t=W=KIn9obwK{F=Akc>|wAJ_WH`TVeM>SNHTc3`njxgN@xNAONN!s diff --git a/Resources/Textures/Structures/Power/Generation/teg.rsi/teg-op6.png b/Resources/Textures/Structures/Power/Generation/teg.rsi/teg-op6.png deleted file mode 100644 index b6597e52321cac880871a8ef3773d18c8714203a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 376 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=oCO|{#S9F5M?jcysy3fA0|TR$ zr;B4q#hkaZ0{NN@B$~4y&8+zpHm|w6Qj>>MF~Mv*&oASg{p!XS)#A5V$&_~_GYYip zC9ufdPd0zhtKjuBgt7RCv7wyOLN)s=PM+1*^^Z(GTh8tKHeG1Ct6TW2Rx?Dcvdr9}n$=Q> zq38~4$$_`OZ?IM5v5&k#;i2|vToLs)$9#2oD3j0 zsW3e8U^p?6VS+NFg1UFZ)+08DE59Byw%1I^?W{CB=h;+V7j)pmq@>@6`riN8`}r!f zLmvxFFCV8wd9iAq!=A7zuV?SYHf)=HTBiGxkk|A7K}@-i_I%gMpIGy?LB8&{_-~Ff z?ugsv$$h06O-n!XpKaLu{`bx1DwxIYOfXaP-yKgp`eu^lHDJIqc)I$ztaD0e0s!v$ Bv7G<_ diff --git a/Resources/Textures/Structures/Power/Generation/teg.rsi/teg-op8.png b/Resources/Textures/Structures/Power/Generation/teg.rsi/teg-op8.png deleted file mode 100644 index 9baf9e440819974079e9fa22549565c6f2daad02..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 427 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=oCO|{#S9F5M?jcysy3fA0|R5M zr;B4q#hkaZ9P^qDL|oK^&QA%=zv|m}Ku!Gh(heoXkV)@vxScV7btYOdN#f()QlJD@*l#nWI`orm`i{uJTV{TbPR;P3g5{GT+R<+Gd#4$#|vq)2wc zey)f^_fMyunrNV9U&Z1Vy^hC*XPvuwPinwE?S`uFFAwKS{;zP}r>&rwek9}46o1hV zGW(xv+V!(UeR?T6;iuY8b$g+LTSciGxGL&o&pI}*@xLDUb2itBKYslZ6W=EaJc?jA zvXKGgtm8}yeXI^L+zl4KOp8>X@t)oyoc*nRX1r)XR1)89p=%#+{0wD0t#b7FY@z2r zZvK473{x(~P`HaVXWORGI0p%BTleSXoEo{Q+S`tA6q5K^E#FwZm$P*0_YF1Q8Lij< zHm~N`#WH2v9Fg1dcQ}nc?bd$qCOWRFP@bVshXKVY=a{7)BpzMz-KrHB`V5|~elF{r G5}E*gBd%Bg diff --git a/Resources/Textures/Structures/Power/Generation/teg.rsi/teg-op9.png b/Resources/Textures/Structures/Power/Generation/teg.rsi/teg-op9.png deleted file mode 100644 index 98ab279f8f1867aca37eba18660ec62fe0148674..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 425 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=oCO|{#S9F5M?jcysy3fA0|R5U zr;B4q#hkaZeEFITL|Tp?G2ZzpEYE^TTJPCX0~Hp>Tb~qa*Q*)dKc!&sA<*mpI|X+p zhrZnnf)#)Ab~EO)6i#`smB3f8wyoV`!;^fLp4vlU;ZL2~uf7k@TQ2sqyTP(1fA#t@ zLD#6K%i|a?UoKKHiH~QT@LBZ2Lfzg^p-eI7?}`8Gu6Wc|GnHY2u<8QW>O&v{vkvyw zR#`J`c(R-&q&7-C&&;G=(BNy|u`8TSyVkA!WUi{PY5u%LuKV^eft|zBAj8REDa25u z!tlg{;e;Wlhp%CNMDMPOo^KV;h;y2ZyGv`>c_-X5ww3#t#<;Vz=4f(&e^dCsso@C?yz5OFLqCVI$5=ee53i0n zsH3p`)}jiZqh1%Z|A%mPMBNgax!wwFHQc~HmWDa}Zm$xLhOawy2pIMZp00i_>zopr E01ytQ^8f$< diff --git a/Resources/Textures/Structures/Power/Generation/teg.rsi/teg.png b/Resources/Textures/Structures/Power/Generation/teg.rsi/teg.png deleted file mode 100644 index bfd6cd27aaae8a58f43f7d5732abb8032d2e0ff6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1502 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 Ypm$A>yM{>=e|7-O(cOXkga6O}0A>T$J^%m! diff --git a/SpaceStation14.sln.DotSettings b/SpaceStation14.sln.DotSettings index 79f0474aa162..8399fee5d62a 100644 --- a/SpaceStation14.sln.DotSettings +++ b/SpaceStation14.sln.DotSettings @@ -504,7 +504,6 @@ public sealed class $CLASS$ : Shared$CLASS$ { True True True - True True True True