From 1fc941b3b38442659e12206f51da0e8b5d0ac925 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Aguilera=20Puerto?= Date: Wed, 12 Aug 2020 19:37:07 +0200 Subject: [PATCH 01/48] Removes CannyFastMath usage from Atmos. --- Content.Server/Atmos/GasMixture.cs | 2 -- Content.Server/Atmos/HighPressureMovementController.cs | 7 +++---- Content.Server/Atmos/Reactions/PhoronFireReaction.cs | 2 +- Content.Server/Atmos/TileAtmosphere.cs | 6 ++---- .../GameObjects/Components/Atmos/BarotraumaComponent.cs | 4 ++-- 5 files changed, 8 insertions(+), 13 deletions(-) diff --git a/Content.Server/Atmos/GasMixture.cs b/Content.Server/Atmos/GasMixture.cs index a500e831b1..1455402779 100644 --- a/Content.Server/Atmos/GasMixture.cs +++ b/Content.Server/Atmos/GasMixture.cs @@ -11,8 +11,6 @@ using Robust.Shared.IoC; using Robust.Shared.Prototypes; using Robust.Shared.Serialization; using Robust.Shared.ViewVariables; -using Math = CannyFastMath.Math; -using MathF = CannyFastMath.MathF; namespace Content.Server.Atmos { diff --git a/Content.Server/Atmos/HighPressureMovementController.cs b/Content.Server/Atmos/HighPressureMovementController.cs index b7644151d4..d3d8a93d48 100644 --- a/Content.Server/Atmos/HighPressureMovementController.cs +++ b/Content.Server/Atmos/HighPressureMovementController.cs @@ -1,4 +1,5 @@ #nullable enable +using System; using Content.Server.GameObjects.Components.Atmos; using Robust.Shared.GameObjects.Components; using Robust.Shared.Interfaces.Physics; @@ -8,8 +9,6 @@ using Robust.Shared.Map; using Robust.Shared.Maths; using Robust.Shared.Physics; using Robust.Shared.Random; -using Logger = Robust.Shared.Log.Logger; -using MathF = CannyFastMath.MathF; namespace Content.Server.Atmos { @@ -52,13 +51,13 @@ namespace Content.Server.Atmos if (maxForce > ThrowForce && throwTarget != GridCoordinates.InvalidGrid) { - var moveForce = MathF.Min(maxForce * MathF.Clamp(moveProb, 0, 100) / 100f, 50f); + var moveForce = MathF.Min(maxForce * Math.Clamp(moveProb, 0, 100) / 100f, 50f); var pos = throwTarget.Position - transform.GridPosition.Position; LinearVelocity = pos * moveForce; } else { - var moveForce = MathF.Min(maxForce * MathF.Clamp(moveProb, 0, 100) / 100f, 25f); + var moveForce = MathF.Min(maxForce * Math.Clamp(moveProb, 0, 100) / 100f, 25f); LinearVelocity = direction.ToVec() * moveForce; } diff --git a/Content.Server/Atmos/Reactions/PhoronFireReaction.cs b/Content.Server/Atmos/Reactions/PhoronFireReaction.cs index f67752f906..4b9d05e90f 100644 --- a/Content.Server/Atmos/Reactions/PhoronFireReaction.cs +++ b/Content.Server/Atmos/Reactions/PhoronFireReaction.cs @@ -1,5 +1,5 @@ #nullable enable -using CannyFastMath; +using System; using Content.Server.Interfaces; using Content.Shared.Atmos; using JetBrains.Annotations; diff --git a/Content.Server/Atmos/TileAtmosphere.cs b/Content.Server/Atmos/TileAtmosphere.cs index f709f8e9de..f0c7cc458b 100644 --- a/Content.Server/Atmos/TileAtmosphere.cs +++ b/Content.Server/Atmos/TileAtmosphere.cs @@ -18,8 +18,6 @@ using Robust.Shared.Map; using Robust.Shared.Maths; using Robust.Shared.Random; using Robust.Shared.ViewVariables; -using Logger = Robust.Shared.Log.Logger; -using MathF = CannyFastMath.MathF; namespace Content.Server.Atmos { @@ -140,7 +138,7 @@ namespace Content.Server.Atmos { if(_soundCooldown == 0) EntitySystem.Get().PlayAtCoords("/Audio/Effects/space_wind.ogg", - GridIndices.ToGridCoordinates(_mapManager, GridIndex), AudioHelpers.WithVariation(0.125f).WithVolume(MathF.Clamp(PressureDifference / 10, 10, 100))); + GridIndices.ToGridCoordinates(_mapManager, GridIndex), AudioHelpers.WithVariation(0.125f).WithVolume(Math.Clamp(PressureDifference / 10, 10, 100))); } @@ -812,7 +810,7 @@ namespace Content.Server.Atmos private void HandleDecompressionFloorRip(float sum) { - if (sum > 20 && _robustRandom.Prob(MathF.Clamp(sum / 100, 0.005f, 0.5f))) + if (sum > 20 && _robustRandom.Prob(Math.Clamp(sum / 100, 0.005f, 0.5f))) _gridAtmosphereComponent.PryTile(GridIndices); } diff --git a/Content.Server/GameObjects/Components/Atmos/BarotraumaComponent.cs b/Content.Server/GameObjects/Components/Atmos/BarotraumaComponent.cs index 0f35468ae7..cd2066d99c 100644 --- a/Content.Server/GameObjects/Components/Atmos/BarotraumaComponent.cs +++ b/Content.Server/GameObjects/Components/Atmos/BarotraumaComponent.cs @@ -1,5 +1,5 @@ -using System.Runtime.CompilerServices; -using CannyFastMath; +using System; +using System.Runtime.CompilerServices; using Content.Server.GameObjects.Components.Mobs; using Content.Server.GameObjects.EntitySystems; using Content.Server.Interfaces.GameObjects; From 60163e85bf87e5f490a2f5837777661393fd57ad Mon Sep 17 00:00:00 2001 From: DrSmugleaf Date: Wed, 12 Aug 2020 20:44:18 +0200 Subject: [PATCH 02/48] Fix restartround crash with the DoAfter system (#1658) --- .../EntitySystems/DoAfter/DoAfterGui.cs | 34 +++++++++---------- .../EntitySystems/DoAfter/DoAfterSystem.cs | 26 ++++++++------ 2 files changed, 33 insertions(+), 27 deletions(-) diff --git a/Content.Client/GameObjects/EntitySystems/DoAfter/DoAfterGui.cs b/Content.Client/GameObjects/EntitySystems/DoAfter/DoAfterGui.cs index b785251aa9..35ea070048 100644 --- a/Content.Client/GameObjects/EntitySystems/DoAfter/DoAfterGui.cs +++ b/Content.Client/GameObjects/EntitySystems/DoAfter/DoAfterGui.cs @@ -20,20 +20,20 @@ namespace Content.Client.GameObjects.EntitySystems.DoAfter { [Dependency] private readonly IEyeManager _eyeManager = default!; [Dependency] private readonly IGameTiming _gameTiming = default!; - + private Dictionary _doAfterControls = new Dictionary(); private Dictionary _doAfterBars = new Dictionary(); - + // We'll store cancellations for a little bit just so we can flash the graphic to indicate it's cancelled private Dictionary _cancelledDoAfters = new Dictionary(); public IEntity? AttachedEntity { get; set; } private ScreenCoordinates _playerPosition; - + // This behavior probably shouldn't be happening; so for whatever reason the control position is set the frame after // I got NFI why because I don't know the UI internals private bool _firstDraw = true; - + public DoAfterGui() { IoCManager.InjectDependencies(this); @@ -71,7 +71,7 @@ namespace Content.Client.GameObjects.EntitySystems.DoAfter TextureScale = Vector2.One * DoAfterBar.DoAfterBarScale, SizeFlagsVertical = SizeFlags.ShrinkCenter, }, - + doAfterBar } }; @@ -79,9 +79,9 @@ namespace Content.Client.GameObjects.EntitySystems.DoAfter AddChild(control); _doAfterControls.Add(message.ID, control); } - + // NOTE THAT THE BELOW ONLY HANDLES THE UI SIDE - + /// /// Removes a DoAfter without showing a cancel graphic. /// @@ -92,7 +92,7 @@ namespace Content.Client.GameObjects.EntitySystems.DoAfter { return; } - + var control = _doAfterControls[id]; RemoveChild(control); _doAfterControls.Remove(id); @@ -114,7 +114,7 @@ namespace Content.Client.GameObjects.EntitySystems.DoAfter { return; } - + var control = _doAfterControls[id]; _doAfterBars[id].Cancelled = true; _cancelledDoAfters.Add(id, _gameTiming.CurTime); @@ -124,13 +124,13 @@ namespace Content.Client.GameObjects.EntitySystems.DoAfter { base.FrameUpdate(args); - if (AttachedEntity == null || !AttachedEntity.TryGetComponent(out DoAfterComponent doAfterComponent)) + if (AttachedEntity?.IsValid() != true || !AttachedEntity.TryGetComponent(out DoAfterComponent doAfterComponent)) { return; } - + var doAfters = doAfterComponent.DoAfters; - + // Nothing to render so we'll hide. if (doAfters.Count == 0 && _cancelledDoAfters.Count == 0) { @@ -138,7 +138,7 @@ namespace Content.Client.GameObjects.EntitySystems.DoAfter Visible = false; return; } - + // Set position ready for 2nd+ frames. _playerPosition = _eyeManager.WorldToScreen(AttachedEntity.Transform.GridPosition); LayoutContainer.SetPosition(this, new Vector2(_playerPosition.X - Width / 2, _playerPosition.Y - Height - 30.0f)); @@ -152,7 +152,7 @@ namespace Content.Client.GameObjects.EntitySystems.DoAfter Visible = true; var currentTime = _gameTiming.CurTime; var toCancel = new List(); - + // Cleanup cancelled DoAfters foreach (var (id, cancelTime) in _cancelledDoAfters) { @@ -166,7 +166,7 @@ namespace Content.Client.GameObjects.EntitySystems.DoAfter { RemoveDoAfter(id); } - + // Update 0 -> 1.0f of the things foreach (var (id, message) in doAfters) { @@ -174,11 +174,11 @@ namespace Content.Client.GameObjects.EntitySystems.DoAfter { continue; } - + var doAfterBar = _doAfterBars[id]; doAfterBar.Ratio = MathF.Min(1.0f, (float) (currentTime - message.StartTime).TotalSeconds / message.Delay); } } } -} \ No newline at end of file +} diff --git a/Content.Client/GameObjects/EntitySystems/DoAfter/DoAfterSystem.cs b/Content.Client/GameObjects/EntitySystems/DoAfter/DoAfterSystem.cs index d04ac081f9..8ba59fde7f 100644 --- a/Content.Client/GameObjects/EntitySystems/DoAfter/DoAfterSystem.cs +++ b/Content.Client/GameObjects/EntitySystems/DoAfter/DoAfterSystem.cs @@ -50,19 +50,20 @@ namespace Content.Client.GameObjects.EntitySystems.DoAfter base.Shutdown(); Gui?.Dispose(); Gui = null; + _player = null; } - + private void HandlePlayerAttached(IEntity? entity) { _player = entity; // Setup the GUI and pass the new data to it if applicable. Gui?.Dispose(); - + if (entity == null) { return; } - + Gui ??= new DoAfterGui(); Gui.AttachedEntity = entity; @@ -81,24 +82,29 @@ namespace Content.Client.GameObjects.EntitySystems.DoAfter var currentTime = _gameTiming.CurTime; - if (_player == null || !_player.TryGetComponent(out DoAfterComponent doAfterComponent)) + if (_player?.IsValid() != true) { return; } - + + if (!_player.TryGetComponent(out DoAfterComponent doAfterComponent)) + { + return; + } + var doAfters = doAfterComponent.DoAfters.ToList(); if (doAfters.Count == 0) { return; } - + var userGrid = _player.Transform.GridPosition; - + // Check cancellations / finishes foreach (var (id, doAfter) in doAfters) { var elapsedTime = (currentTime - doAfter.StartTime).TotalSeconds; - + // If we've passed the final time (after the excess to show completion graphic) then remove. if (elapsedTime > doAfter.Delay + ExcessTime) { @@ -106,7 +112,7 @@ namespace Content.Client.GameObjects.EntitySystems.DoAfter doAfterComponent.Remove(doAfter); continue; } - + // Don't predict cancellation if it's already finished. if (elapsedTime > doAfter.Delay) { @@ -147,4 +153,4 @@ namespace Content.Client.GameObjects.EntitySystems.DoAfter } } } -} \ No newline at end of file +} From 3ca3b5e684b45557305cda80a45d570843f7ba67 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Aguilera=20Puerto?= Date: Wed, 12 Aug 2020 21:02:27 +0200 Subject: [PATCH 03/48] Update submodule. --- RobustToolbox | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/RobustToolbox b/RobustToolbox index 64a3916c04..5bb3bc7083 160000 --- a/RobustToolbox +++ b/RobustToolbox @@ -1 +1 @@ -Subproject commit 64a3916c04daecf44b4617f2e8755900326957f0 +Subproject commit 5bb3bc7083e30243b5ce52a9ac4786e6e2f65ae9 From f182ff561311e37c9676ba28ff50db40f827675f Mon Sep 17 00:00:00 2001 From: Pieter-Jan Briers Date: Wed, 12 Aug 2020 21:09:56 +0200 Subject: [PATCH 04/48] Remove CannyFastMath. --- .../Components/Weapons/FlashableComponent.cs | 2 +- Content.Client/Parallax/ParallaxGenerator.cs | 5 +- Content.Client/State/LobbyState.cs | 3 - .../UserInterface/CooldownGraphic.cs | 5 +- .../Utility/Considerations/Consideration.cs | 11 +-- .../Atmos/HighPressureMovementController.cs | 4 +- Content.Server/Atmos/TileAtmosphere.cs | 4 +- .../ExplosionReactionEffect.cs | 3 - .../Mobs/HeatResistanceComponent.cs | 4 +- .../Weapon/Melee/MeleeWeaponComponent.cs | 3 - .../Barrels/ServerRangedBarrelComponent.cs | 2 +- .../AI/Steering/AiSteeringSystem.cs | 86 +++++++++---------- .../EntitySystems/PowerSolarSystem.cs | 5 +- .../GamePresets/PresetSuspicion.cs | 4 +- Content.Server/Throw/ThrowHelper.cs | 4 +- 15 files changed, 64 insertions(+), 81 deletions(-) diff --git a/Content.Client/GameObjects/Components/Weapons/FlashableComponent.cs b/Content.Client/GameObjects/Components/Weapons/FlashableComponent.cs index 05e6305a59..18047a8f85 100644 --- a/Content.Client/GameObjects/Components/Weapons/FlashableComponent.cs +++ b/Content.Client/GameObjects/Components/Weapons/FlashableComponent.cs @@ -141,7 +141,7 @@ namespace Content.Client.GameObjects.Components.Weapons const float xOffset = 0.0f; // Overkill but easy to adjust if you want to mess around with the design - var result = (float) Math.Clamp(slope * (float) Math.Pow(ratio - xOffset, exponent) + yOffset, 0.0, 1.0); + var result = (float) FloatMath.Clamp(slope * (float) Math.Pow(ratio - xOffset, exponent) + yOffset, 0.0, 1.0); DebugTools.Assert(!float.IsNaN(result)); return result; } diff --git a/Content.Client/Parallax/ParallaxGenerator.cs b/Content.Client/Parallax/ParallaxGenerator.cs index 9011cf411e..b9e532a8a2 100644 --- a/Content.Client/Parallax/ParallaxGenerator.cs +++ b/Content.Client/Parallax/ParallaxGenerator.cs @@ -12,9 +12,6 @@ using SixLabors.ImageSharp; using SixLabors.ImageSharp.Advanced; using SixLabors.ImageSharp.PixelFormats; using Color = Robust.Shared.Maths.Color; -using CannyFastMath; -using Math = CannyFastMath.Math; -using MathF = CannyFastMath.MathF; namespace Content.Client.Parallax { @@ -81,7 +78,7 @@ namespace Content.Client.Parallax private readonly NoiseGenerator.NoiseType NoiseType = NoiseGenerator.NoiseType.Fbm; private readonly uint Seed = 1234; private readonly float Persistence = 0.5f; - private readonly float Lacunarity = (float) (Math.TAU / 3); + private readonly float Lacunarity = (float) (Math.PI / 3); private readonly float Frequency = 1; private readonly uint Octaves = 3; private readonly float Threshold; diff --git a/Content.Client/State/LobbyState.cs b/Content.Client/State/LobbyState.cs index 7136d581d2..5f4b6853e0 100644 --- a/Content.Client/State/LobbyState.cs +++ b/Content.Client/State/LobbyState.cs @@ -20,9 +20,6 @@ using Robust.Shared.Localization; using Robust.Shared.Prototypes; using Robust.Shared.Timing; using Robust.Shared.ViewVariables; -using CannyFastMath; -using Math = CannyFastMath.Math; -using MathF = CannyFastMath.MathF; namespace Content.Client.State { diff --git a/Content.Client/UserInterface/CooldownGraphic.cs b/Content.Client/UserInterface/CooldownGraphic.cs index ae09ec8fb8..fb440af952 100644 --- a/Content.Client/UserInterface/CooldownGraphic.cs +++ b/Content.Client/UserInterface/CooldownGraphic.cs @@ -6,9 +6,6 @@ using System; using Robust.Client.Graphics.Shaders; using Robust.Shared.IoC; using Robust.Shared.Prototypes; -using CannyFastMath; -using Math = CannyFastMath.Math; -using MathF = CannyFastMath.MathF; namespace Robust.Client.UserInterface.Controls { @@ -45,7 +42,7 @@ namespace Robust.Client.UserInterface.Controls } else { - var alpha = MathF.Clamp(0.5f * lerp, 0f, 0.5f); + var alpha = FloatMath.Clamp(0.5f * lerp, 0f, 0.5f); color = new Color(1f, 1f, 1f, alpha); } diff --git a/Content.Server/AI/Utility/Considerations/Consideration.cs b/Content.Server/AI/Utility/Considerations/Consideration.cs index f2f0a9429d..20afc4dec1 100644 --- a/Content.Server/AI/Utility/Considerations/Consideration.cs +++ b/Content.Server/AI/Utility/Considerations/Consideration.cs @@ -2,6 +2,7 @@ using System; using Content.Server.AI.WorldState; using Content.Server.AI.WorldState.States.Utility; using JetBrains.Annotations; +using Robust.Shared.Maths; namespace Content.Server.AI.Utility.Considerations { @@ -16,7 +17,7 @@ namespace Content.Server.AI.Utility.Considerations var modificationFactor = 1.0f - 1.0f / considerationsCount; var makeUpValue = (1.0f - score) * modificationFactor; var adjustedScore = score + makeUpValue * score; - return Math.Clamp(adjustedScore, 0.0f, 1.0f); + return FloatMath.Clamp(adjustedScore, 0.0f, 1.0f); } [Pure] @@ -43,7 +44,7 @@ namespace Content.Server.AI.Utility.Considerations // ReSharper disable once CompareOfFloatsByEqualityOperator return x == 1.0f ? 0.0f : 1.0f; } - + public Func InverseBoolCurve(Blackboard context) { float Result() @@ -58,7 +59,7 @@ namespace Content.Server.AI.Utility.Considerations [Pure] private static float LogisticCurve(float x, float slope, float exponent, float yOffset, float xOffset) { - return Math.Clamp( + return FloatMath.Clamp( exponent * (1 / (1 + (float) Math.Pow(Math.Log(1000) * slope, -1 * x + xOffset))) + yOffset, 0.0f, 1.0f); } @@ -76,7 +77,7 @@ namespace Content.Server.AI.Utility.Considerations [Pure] private static float QuadraticCurve(float x, float slope, float exponent, float yOffset, float xOffset) { - return Math.Clamp(slope * (float) Math.Pow(x - xOffset, exponent) + yOffset, 0.0f, 1.0f); + return FloatMath.Clamp(slope * (float) Math.Pow(x - xOffset, exponent) + yOffset, 0.0f, 1.0f); } public Func QuadraticCurve(Blackboard context, float slope, float exponent, float yOffset, float xOffset) @@ -102,7 +103,7 @@ namespace Content.Server.AI.Utility.Considerations float Result() { var adjustedScore = GetAdjustedScore(context); - + switch (preset) { case Considerations.PresetCurve.Distance: diff --git a/Content.Server/Atmos/HighPressureMovementController.cs b/Content.Server/Atmos/HighPressureMovementController.cs index d3d8a93d48..60086206b9 100644 --- a/Content.Server/Atmos/HighPressureMovementController.cs +++ b/Content.Server/Atmos/HighPressureMovementController.cs @@ -51,13 +51,13 @@ namespace Content.Server.Atmos if (maxForce > ThrowForce && throwTarget != GridCoordinates.InvalidGrid) { - var moveForce = MathF.Min(maxForce * Math.Clamp(moveProb, 0, 100) / 100f, 50f); + var moveForce = MathF.Min(maxForce * FloatMath.Clamp(moveProb, 0, 100) / 100f, 50f); var pos = throwTarget.Position - transform.GridPosition.Position; LinearVelocity = pos * moveForce; } else { - var moveForce = MathF.Min(maxForce * Math.Clamp(moveProb, 0, 100) / 100f, 25f); + var moveForce = MathF.Min(maxForce * FloatMath.Clamp(moveProb, 0, 100) / 100f, 25f); LinearVelocity = direction.ToVec() * moveForce; } diff --git a/Content.Server/Atmos/TileAtmosphere.cs b/Content.Server/Atmos/TileAtmosphere.cs index f0c7cc458b..dfb3ad675f 100644 --- a/Content.Server/Atmos/TileAtmosphere.cs +++ b/Content.Server/Atmos/TileAtmosphere.cs @@ -138,7 +138,7 @@ namespace Content.Server.Atmos { if(_soundCooldown == 0) EntitySystem.Get().PlayAtCoords("/Audio/Effects/space_wind.ogg", - GridIndices.ToGridCoordinates(_mapManager, GridIndex), AudioHelpers.WithVariation(0.125f).WithVolume(Math.Clamp(PressureDifference / 10, 10, 100))); + GridIndices.ToGridCoordinates(_mapManager, GridIndex), AudioHelpers.WithVariation(0.125f).WithVolume(FloatMath.Clamp(PressureDifference / 10, 10, 100))); } @@ -810,7 +810,7 @@ namespace Content.Server.Atmos private void HandleDecompressionFloorRip(float sum) { - if (sum > 20 && _robustRandom.Prob(Math.Clamp(sum / 100, 0.005f, 0.5f))) + if (sum > 20 && _robustRandom.Prob(FloatMath.Clamp(sum / 100, 0.005f, 0.5f))) _gridAtmosphereComponent.PryTile(GridIndices); } diff --git a/Content.Server/Chemistry/ReactionEffects/ExplosionReactionEffect.cs b/Content.Server/Chemistry/ReactionEffects/ExplosionReactionEffect.cs index 1996e287a6..89f26f2413 100644 --- a/Content.Server/Chemistry/ReactionEffects/ExplosionReactionEffect.cs +++ b/Content.Server/Chemistry/ReactionEffects/ExplosionReactionEffect.cs @@ -4,9 +4,6 @@ using Content.Server.GameObjects.Components.Chemistry; using Content.Shared.Interfaces; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Serialization; -using CannyFastMath; -using Math = CannyFastMath.Math; -using MathF = CannyFastMath.MathF; namespace Content.Server.Chemistry.ReactionEffects { diff --git a/Content.Server/GameObjects/Components/Mobs/HeatResistanceComponent.cs b/Content.Server/GameObjects/Components/Mobs/HeatResistanceComponent.cs index 760aea0caf..8d3283fe25 100644 --- a/Content.Server/GameObjects/Components/Mobs/HeatResistanceComponent.cs +++ b/Content.Server/GameObjects/Components/Mobs/HeatResistanceComponent.cs @@ -1,6 +1,6 @@ -using Content.Shared.GameObjects.Components.Inventory; +using System; +using Content.Shared.GameObjects.Components.Inventory; using Robust.Shared.GameObjects; -using Math = CannyFastMath.Math; namespace Content.Server.GameObjects { diff --git a/Content.Server/GameObjects/Components/Weapon/Melee/MeleeWeaponComponent.cs b/Content.Server/GameObjects/Components/Weapon/Melee/MeleeWeaponComponent.cs index 8faffa150d..2a9a7f639a 100644 --- a/Content.Server/GameObjects/Components/Weapon/Melee/MeleeWeaponComponent.cs +++ b/Content.Server/GameObjects/Components/Weapon/Melee/MeleeWeaponComponent.cs @@ -15,10 +15,7 @@ using Robust.Shared.IoC; using Robust.Shared.Maths; using Robust.Shared.Serialization; using Robust.Shared.ViewVariables; -using CannyFastMath; using Content.Shared.Interfaces.GameObjects.Components; -using Math = CannyFastMath.Math; -using MathF = CannyFastMath.MathF; namespace Content.Server.GameObjects.Components.Weapon.Melee { diff --git a/Content.Server/GameObjects/Components/Weapon/Ranged/Barrels/ServerRangedBarrelComponent.cs b/Content.Server/GameObjects/Components/Weapon/Ranged/Barrels/ServerRangedBarrelComponent.cs index ce2349aea0..74e0cd5c4d 100644 --- a/Content.Server/GameObjects/Components/Weapon/Ranged/Barrels/ServerRangedBarrelComponent.cs +++ b/Content.Server/GameObjects/Components/Weapon/Ranged/Barrels/ServerRangedBarrelComponent.cs @@ -180,7 +180,7 @@ namespace Content.Server.GameObjects.Components.Weapon.Ranged.Barrels { var currentTime = _gameTiming.CurTime; var timeSinceLastFire = (currentTime - _lastFire).TotalSeconds; - var newTheta = Math.Clamp(_currentAngle.Theta + _angleIncrease - _angleDecay * timeSinceLastFire, _minAngle.Theta, _maxAngle.Theta); + var newTheta = FloatMath.Clamp(_currentAngle.Theta + _angleIncrease - _angleDecay * timeSinceLastFire, _minAngle.Theta, _maxAngle.Theta); _currentAngle = new Angle(newTheta); var random = (_robustRandom.NextDouble() - 0.5) * 2; diff --git a/Content.Server/GameObjects/EntitySystems/AI/Steering/AiSteeringSystem.cs b/Content.Server/GameObjects/EntitySystems/AI/Steering/AiSteeringSystem.cs index e3c3863a80..0bdd56c9cb 100644 --- a/Content.Server/GameObjects/EntitySystems/AI/Steering/AiSteeringSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/AI/Steering/AiSteeringSystem.cs @@ -27,7 +27,7 @@ namespace Content.Server.GameObjects.EntitySystems.AI.Steering public sealed class AiSteeringSystem : EntitySystem { // http://www.red3d.com/cwr/papers/1999/gdc99steer.html for a steering overview - + #pragma warning disable 649 [Dependency] private IMapManager _mapManager; [Dependency] private IEntityManager _entityManager; @@ -45,9 +45,9 @@ namespace Content.Server.GameObjects.EntitySystems.AI.Steering /// How close we need to get to the center of each tile /// private const float TileTolerance = 0.8f; - + private Dictionary RunningAgents => _agentLists[_listIndex]; - + // We'll cycle the running list every tick as all we're doing is getting a vector2 for the // agent's steering. Should help a lot given this is the most expensive operator by far. // The AI will keep moving, it's just it'll keep moving in its existing direction. @@ -55,31 +55,31 @@ namespace Content.Server.GameObjects.EntitySystems.AI.Steering private readonly List> _agentLists = new List>(AgentListCount); private const int AgentListCount = 2; private int _listIndex; - + // Cache nextGrid private readonly Dictionary _nextGrid = new Dictionary(); - + /// /// Current live paths for AI /// private readonly Dictionary> _paths = new Dictionary>(); - + /// /// Pathfinding request jobs we're waiting on /// - private readonly Dictionary> Job)> _pathfindingRequests = + private readonly Dictionary> Job)> _pathfindingRequests = new Dictionary>)>(); - + /// /// Keep track of how long we've been in 1 position and re-path if it's been too long /// private readonly Dictionary _stuckCounter = new Dictionary(); - + /// /// Get a fixed position for the target entity; if they move then re-path /// private readonly Dictionary _entityTargetPosition = new Dictionary(); - + // Anti-Stuck // Given the collision avoidance can lead to twitching need to store a reference position and check if we've been near this too long private readonly Dictionary _stuckPositions = new Dictionary(); @@ -88,7 +88,7 @@ namespace Content.Server.GameObjects.EntitySystems.AI.Steering { base.Initialize(); _pathfindingSystem = Get(); - + for (var i = 0; i < AgentListCount; i++) { _agentLists.Add(new Dictionary()); @@ -111,14 +111,14 @@ namespace Content.Server.GameObjects.EntitySystems.AI.Steering var agentList = _agentLists[i]; // Register shouldn't be called twice; if it is then someone dun fucked up DebugTools.Assert(!agentList.ContainsKey(entity)); - + if (agentList.Count < lowestListCount) { lowestListCount = agentList.Count; lowestListIndex = i; } } - + _agentLists[lowestListIndex].Add(entity, steeringRequest); } @@ -133,7 +133,7 @@ namespace Content.Server.GameObjects.EntitySystems.AI.Steering { controller.VelocityDir = Vector2.Zero; } - + if (_pathfindingRequests.TryGetValue(entity, out var request)) { switch (request.Job.Status) @@ -157,7 +157,7 @@ namespace Content.Server.GameObjects.EntitySystems.AI.Steering } _pathfindingRequests.Remove(entity); } - + if (_paths.ContainsKey(entity)) { _paths.Remove(entity); @@ -177,7 +177,7 @@ namespace Content.Server.GameObjects.EntitySystems.AI.Steering { _entityTargetPosition.Remove(entity); } - + foreach (var agentList in _agentLists) { if (agentList.ContainsKey(entity)) @@ -214,7 +214,7 @@ namespace Content.Server.GameObjects.EntitySystems.AI.Steering { var result = Steer(agent, steering); steering.Status = result; - + switch (result) { case SteeringStatus.Pending: @@ -255,7 +255,7 @@ namespace Content.Server.GameObjects.EntitySystems.AI.Steering controller.VelocityDir = Vector2.Zero; return SteeringStatus.Pending; } - + // Validation // Check if we can even arrive -> Currently only samegrid movement supported if (entity.Transform.GridID != steeringRequest.TargetGrid.GridID) @@ -263,7 +263,7 @@ namespace Content.Server.GameObjects.EntitySystems.AI.Steering controller.VelocityDir = Vector2.Zero; return SteeringStatus.NoPath; } - + // Check if we have arrived var targetDistance = (entity.Transform.MapPosition.Position - steeringRequest.TargetMap.Position).Length; if (targetDistance <= steeringRequest.ArrivalDistance) @@ -274,7 +274,7 @@ namespace Content.Server.GameObjects.EntitySystems.AI.Steering controller.VelocityDir = Vector2.Zero; return SteeringStatus.Arrived; } - + // Handle pathfinding job // If we still have an existing path then keep following that until the new path arrives if (_pathfindingRequests.TryGetValue(entity, out var pathRequest) && pathRequest.Job.Status == JobStatus.Finished) @@ -297,7 +297,7 @@ namespace Content.Server.GameObjects.EntitySystems.AI.Steering controller.VelocityDir = Vector2.Zero; return SteeringStatus.NoPath; } - + // If we're closer to next tile then we don't want to walk backwards to our tile's center UpdatePath(entity, path); @@ -319,7 +319,7 @@ namespace Content.Server.GameObjects.EntitySystems.AI.Steering RequestPath(entity, steeringRequest); return SteeringStatus.Pending; } - + var ignoredCollision = new List(); // Check if the target entity has moved - If so then re-path // TODO: Patch the path from the target's position back towards us, stopping if it ever intersects the current path @@ -331,19 +331,19 @@ namespace Content.Server.GameObjects.EntitySystems.AI.Steering controller.VelocityDir = Vector2.Zero; return SteeringStatus.NoPath; } - + // Check if target's moved too far if (_entityTargetPosition.TryGetValue(entity, out var targetGrid) && (entitySteer.TargetGrid.Position - targetGrid.Position).Length >= entitySteer.TargetMaxMove) { // We'll just repath and keep following the existing one until we get a new one RequestPath(entity, steeringRequest); } - + ignoredCollision.Add(entitySteer.Target); } HandleStuck(entity); - + // TODO: Probably need a dedicated queuing solver (doorway congestion FML) // Get the target grid (either next tile or target itself) and pass it in to the steering behaviors // If there's nowhere to go then just stop and wait @@ -353,14 +353,14 @@ namespace Content.Server.GameObjects.EntitySystems.AI.Steering controller.VelocityDir = Vector2.Zero; return SteeringStatus.NoPath; } - + // Validate that we can even get to the next grid (could probably just check if we can use nextTile if we're not near the target grid) if (!_pathfindingSystem.CanTraverse(entity, nextGrid.Value)) { controller.VelocityDir = Vector2.Zero; return SteeringStatus.NoPath; } - + // Now we can /finally/ move var movementVector = Vector2.Zero; @@ -370,10 +370,10 @@ namespace Content.Server.GameObjects.EntitySystems.AI.Steering movementVector += Seek(entity, nextGrid.Value); if (CollisionAvoidanceEnabled) { - movementVector += CollisionAvoidance(entity, movementVector, ignoredCollision); + movementVector += CollisionAvoidance(entity, movementVector, ignoredCollision); } // Group behaviors would also go here e.g. separation, cohesion, alignment - + // Move towards it DebugTools.Assert(movementVector != new Vector2(float.NaN, float.NaN)); controller.VelocityDir = movementVector.Normalized; @@ -391,7 +391,7 @@ namespace Content.Server.GameObjects.EntitySystems.AI.Steering { return; } - + var cancelToken = new CancellationTokenSource(); var gridManager = _mapManager.GetGrid(entity.Transform.GridID); var startTile = gridManager.GetTileRef(entity.Transform.GridPosition); @@ -403,7 +403,7 @@ namespace Content.Server.GameObjects.EntitySystems.AI.Steering } var access = AccessReader.FindAccessTags(entity); - + var job = _pathfindingSystem.RequestPath(new PathfindingArgs( entity.Uid, access, @@ -423,11 +423,11 @@ namespace Content.Server.GameObjects.EntitySystems.AI.Steering private void UpdatePath(IEntity entity, Queue path) { _pathfindingRequests.Remove(entity); - + var entityTile = _mapManager.GetGrid(entity.Transform.GridID).GetTileRef(entity.Transform.GridPosition); var tile = path.Dequeue(); var closestDistance = PathfindingHelpers.OctileDistance(entityTile, tile); - + for (var i = 0; i < path.Count; i++) { tile = path.Peek(); @@ -441,7 +441,7 @@ namespace Content.Server.GameObjects.EntitySystems.AI.Steering break; } } - + _paths[entity] = path; } @@ -458,20 +458,20 @@ namespace Content.Server.GameObjects.EntitySystems.AI.Steering { _nextGrid.Remove(entity); } - + // If no tiles left just move towards the target (if we're close) if (!_paths.ContainsKey(entity) || _paths[entity].Count == 0) { if ((steeringRequest.TargetGrid.Position - entity.Transform.GridPosition.Position).Length <= 2.0f) { - return steeringRequest.TargetGrid; + return steeringRequest.TargetGrid; } // Too far so we need a re-path return null; } - - if (!_nextGrid.TryGetValue(entity, out var nextGrid) || + + if (!_nextGrid.TryGetValue(entity, out var nextGrid) || (nextGrid.Position - entity.Transform.GridPosition.Position).Length <= TileTolerance) { UpdateGridCache(entity); @@ -526,7 +526,7 @@ namespace Content.Server.GameObjects.EntitySystems.AI.Steering { return; } - + // Okay now we're stuck _paths.Remove(entity); _stuckCounter[entity] = 0; @@ -580,7 +580,7 @@ namespace Content.Server.GameObjects.EntitySystems.AI.Steering { return Vector2.Zero; } - + if (target.TryGetComponent(out IPhysicsComponent physicsComponent)) { var targetDistance = (targetPos.Position - entityPos.Position); @@ -603,7 +603,7 @@ namespace Content.Server.GameObjects.EntitySystems.AI.Steering { return Vector2.Zero; } - + // We'll check tile-by-tile // Rewriting this frequently so not many comments as they'll go stale // I realise this is bad so please rewrite it ;-; @@ -636,7 +636,7 @@ namespace Content.Server.GameObjects.EntitySystems.AI.Steering //Pathfinding updates are deferred so this may not be done yet. if (physicsEntity.Deleted) continue; - + // if we're moving in the same direction then ignore // So if 2 entities are moving towards each other and both detect a collision they'll both move in the same direction // i.e. towards the right @@ -650,7 +650,7 @@ namespace Content.Server.GameObjects.EntitySystems.AI.Steering var additionalVector = (centerGrid.Position - entityGridCoords.Position); var distance = additionalVector.Length; // If we're too far no point, if we're close then cap it at the normalized vector - distance = Math.Clamp(2.5f - distance, 0.0f, 1.0f); + distance = FloatMath.Clamp(2.5f - distance, 0.0f, 1.0f); additionalVector = new Angle(90 * distance).RotateVec(additionalVector); avoidanceVector += additionalVector; // if we do need to avoid that means we'll have to lookahead for the next tile diff --git a/Content.Server/GameObjects/EntitySystems/PowerSolarSystem.cs b/Content.Server/GameObjects/EntitySystems/PowerSolarSystem.cs index 604e475d9c..433c7661f2 100644 --- a/Content.Server/GameObjects/EntitySystems/PowerSolarSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/PowerSolarSystem.cs @@ -12,9 +12,6 @@ using Robust.Shared.IoC; using Robust.Shared.Maths; using System; using System.Linq; -using CannyFastMath; -using Math = CannyFastMath.Math; -using MathF = CannyFastMath.MathF; namespace Content.Server.Interfaces.GameObjects.Components.Interaction { @@ -80,7 +77,7 @@ namespace Content.Server.Interfaces.GameObjects.Components.Interaction { EntityQuery = new TypeEntityQuery(typeof(SolarPanelComponent)); // Initialize the sun to something random - TowardsSun = Math.TAU * _robustRandom.NextDouble(); + TowardsSun = MathHelper.TwoPi * _robustRandom.NextDouble(); SunAngularVelocity = Angle.FromDegrees(0.1 + ((_robustRandom.NextDouble() - 0.5) * 0.05)); } diff --git a/Content.Server/GameTicking/GamePresets/PresetSuspicion.cs b/Content.Server/GameTicking/GamePresets/PresetSuspicion.cs index 17def7d31a..9d162705eb 100644 --- a/Content.Server/GameTicking/GamePresets/PresetSuspicion.cs +++ b/Content.Server/GameTicking/GamePresets/PresetSuspicion.cs @@ -16,7 +16,7 @@ using System.Linq; using Robust.Shared.Log; using System.Threading.Tasks; using Content.Shared.Preferences; - +using Robust.Shared.Maths; namespace Content.Server.GameTicking.GamePresets @@ -60,7 +60,7 @@ namespace Content.Server.GameTicking.GamePresets } } - var numTraitors = Math.Clamp(readyPlayers.Count % PlayersPerTraitor, + var numTraitors = FloatMath.Clamp(readyPlayers.Count % PlayersPerTraitor, MinTraitors, readyPlayers.Count); for (var i = 0; i < numTraitors; i++) diff --git a/Content.Server/Throw/ThrowHelper.cs b/Content.Server/Throw/ThrowHelper.cs index 17cadf3539..b0ebd1133b 100644 --- a/Content.Server/Throw/ThrowHelper.cs +++ b/Content.Server/Throw/ThrowHelper.cs @@ -1,4 +1,5 @@ -using Content.Server.GameObjects.Components; +using System; +using Content.Server.GameObjects.Components; using Content.Shared.GameObjects.EntitySystems; using Content.Shared.Physics; using Robust.Shared.GameObjects.Components; @@ -12,7 +13,6 @@ using Robust.Shared.Maths; using Robust.Shared.Physics; using Robust.Shared.Random; using Robust.Shared.Interfaces.Physics; -using MathF = CannyFastMath.MathF; namespace Content.Server.Throw { From e76003948b039f90b9391c54bac82153a08d043e Mon Sep 17 00:00:00 2001 From: Pieter-Jan Briers Date: Wed, 12 Aug 2020 21:15:26 +0200 Subject: [PATCH 05/48] Remove this parameter from FloatMath.Clamp. That was a stupid idea. --- Content.Client/Chat/SpeechBubble.cs | 2 +- .../GameObjects/Components/MagicMirrorBoundUserInterface.cs | 2 +- .../GameObjects/Components/Mobs/ClientStatusEffectsComponent.cs | 2 +- Content.Client/UserInterface/ItemSlotManager.cs | 2 +- Content.Server/Preferences/PreferencesDatabase.cs | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Content.Client/Chat/SpeechBubble.cs b/Content.Client/Chat/SpeechBubble.cs index 147c3a8d5a..715715d9a1 100644 --- a/Content.Client/Chat/SpeechBubble.cs +++ b/Content.Client/Chat/SpeechBubble.cs @@ -122,7 +122,7 @@ namespace Content.Client.Chat var screenPos = lowerCenter - (Width / 2, ContentHeight + _verticalOffsetAchieved); LayoutContainer.SetPosition(this, screenPos); - var height = (lowerCenter.Y - screenPos.Y).Clamp(0, ContentHeight); + var height = FloatMath.Clamp(lowerCenter.Y - screenPos.Y, 0, ContentHeight); LayoutContainer.SetSize(this, (Size.X, height)); } diff --git a/Content.Client/GameObjects/Components/MagicMirrorBoundUserInterface.cs b/Content.Client/GameObjects/Components/MagicMirrorBoundUserInterface.cs index 8a6e1667e2..f44166c11f 100644 --- a/Content.Client/GameObjects/Components/MagicMirrorBoundUserInterface.cs +++ b/Content.Client/GameObjects/Components/MagicMirrorBoundUserInterface.cs @@ -244,7 +244,7 @@ namespace Content.Client.GameObjects.Components if (int.TryParse(ev.Text, out var result)) { - result = result.Clamp(0, byte.MaxValue); + result = FloatMath.Clamp(result, 0, byte.MaxValue); _ignoreEvents = true; _colorValue = (byte) result; diff --git a/Content.Client/GameObjects/Components/Mobs/ClientStatusEffectsComponent.cs b/Content.Client/GameObjects/Components/Mobs/ClientStatusEffectsComponent.cs index 68925253c4..926e6a5c46 100644 --- a/Content.Client/GameObjects/Components/Mobs/ClientStatusEffectsComponent.cs +++ b/Content.Client/GameObjects/Components/Mobs/ClientStatusEffectsComponent.cs @@ -152,7 +152,7 @@ namespace Content.Client.GameObjects.Components.Mobs var progress = (_gameTiming.CurTime - start).TotalSeconds / length; var ratio = (progress <= 1 ? (1 - progress) : (_gameTiming.CurTime - end).TotalSeconds * -5); - cooldownGraphic.Progress = (float)ratio.Clamp(-1, 1); + cooldownGraphic.Progress = FloatMath.Clamp((float)ratio, -1, 1); cooldownGraphic.Visible = ratio > -1f; } } diff --git a/Content.Client/UserInterface/ItemSlotManager.cs b/Content.Client/UserInterface/ItemSlotManager.cs index ff8872553d..2186d4e4ee 100644 --- a/Content.Client/UserInterface/ItemSlotManager.cs +++ b/Content.Client/UserInterface/ItemSlotManager.cs @@ -112,7 +112,7 @@ namespace Content.Client.UserInterface var progress = (_gameTiming.CurTime - start).TotalSeconds / length; var ratio = (progress <= 1 ? (1 - progress) : (_gameTiming.CurTime - end).TotalSeconds * -5); - cooldownDisplay.Progress = (float)ratio.Clamp(-1, 1); + cooldownDisplay.Progress = FloatMath.Clamp((float)ratio, -1, 1); if (ratio > -1f) { diff --git a/Content.Server/Preferences/PreferencesDatabase.cs b/Content.Server/Preferences/PreferencesDatabase.cs index 6c6c4719d0..8f13a1324e 100644 --- a/Content.Server/Preferences/PreferencesDatabase.cs +++ b/Content.Server/Preferences/PreferencesDatabase.cs @@ -60,7 +60,7 @@ namespace Content.Server.Preferences await _prefsSemaphore.WaitAsync(); try { - index = index.Clamp(0, _maxCharacterSlots - 1); + index = FloatMath.Clamp(index, 0, _maxCharacterSlots - 1); await _prefsDb.SaveSelectedCharacterIndex(username, index); } finally From df798b333858ee00ae720a215bbe99b2cf517e44 Mon Sep 17 00:00:00 2001 From: Pieter-Jan Briers Date: Wed, 12 Aug 2020 21:19:26 +0200 Subject: [PATCH 06/48] Update that mf submodule --- RobustToolbox | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/RobustToolbox b/RobustToolbox index 5bb3bc7083..d4a47778ef 160000 --- a/RobustToolbox +++ b/RobustToolbox @@ -1 +1 @@ -Subproject commit 5bb3bc7083e30243b5ce52a9ac4786e6e2f65ae9 +Subproject commit d4a47778ef0453f1aebc80de1622e84aa000816b From fee5ae05bc552a9d21578285def7b75418df5718 Mon Sep 17 00:00:00 2001 From: DrSmugleaf Date: Thu, 13 Aug 2020 13:51:57 +0200 Subject: [PATCH 07/48] Add more atmos helpers (#1661) --- Content.Server/Atmos/AtmosHelpers.cs | 37 +++++++++++++++++++++++++--- 1 file changed, 34 insertions(+), 3 deletions(-) diff --git a/Content.Server/Atmos/AtmosHelpers.cs b/Content.Server/Atmos/AtmosHelpers.cs index 4a4eb37d0c..5561b70639 100644 --- a/Content.Server/Atmos/AtmosHelpers.cs +++ b/Content.Server/Atmos/AtmosHelpers.cs @@ -1,9 +1,9 @@ -using Content.Server.GameObjects.EntitySystems; +#nullable enable +using System.Diagnostics.CodeAnalysis; +using Content.Server.GameObjects.EntitySystems; using Robust.Shared.GameObjects.Systems; using Robust.Shared.Map; -#nullable enable - namespace Content.Server.Atmos { public static class AtmosHelpers @@ -15,11 +15,42 @@ namespace Content.Server.Atmos return gridAtmos?.GetTile(coordinates); } + public static GasMixture? GetTileAir(this GridCoordinates coordinates) + { + return coordinates.GetTileAtmosphere()?.Air; + } + + public static bool TryGetTileAtmosphere(this GridCoordinates coordinates, [NotNullWhen(true)] out TileAtmosphere atmosphere) + { + return (atmosphere = coordinates.GetTileAtmosphere()!) != default; + } + + public static bool TryGetTileAir(this GridCoordinates coordinates, [NotNullWhen(true)] out GasMixture air) + { + return !(air = coordinates.GetTileAir()!).Equals(default); + } + public static TileAtmosphere? GetTileAtmosphere(this MapIndices indices, GridId gridId) { var gridAtmos = EntitySystem.Get().GetGridAtmosphere(gridId); return gridAtmos?.GetTile(indices); } + + public static GasMixture? GetTileAir(this MapIndices indices, GridId gridId) + { + return indices.GetTileAtmosphere(gridId)?.Air; + } + + public static bool TryGetTileAtmosphere(this MapIndices indices, GridId gridId, + [NotNullWhen(true)] out TileAtmosphere atmosphere) + { + return (atmosphere = indices.GetTileAtmosphere(gridId)!) != default; + } + + public static bool TryGetTileAir(this MapIndices indices, GridId gridId, [NotNullWhen(true)] out GasMixture air) + { + return !(air = indices.GetTileAir(gridId)!).Equals(default); + } } } From f4bf71edfed77835eb5f31974514705d73c06fa8 Mon Sep 17 00:00:00 2001 From: ShadowCommander <10494922+ShadowCommander@users.noreply.github.com> Date: Thu, 13 Aug 2020 04:58:28 -0700 Subject: [PATCH 08/48] Fix collision masks and layers (#1654) * Fix bullets getting stopped by tables * Fix collision masks --- Resources/Prototypes/Entities/Constructible/Ground/table.yml | 2 +- .../Entities/Constructible/Storage/Closets/closet.yml | 1 - .../Prototypes/Entities/Constructible/Storage/crate_base.yml | 2 -- .../Prototypes/Entities/Constructible/Walls/low_wall.yml | 4 +++- Resources/Prototypes/Entities/Mobs/Species/human.yml | 1 - .../Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml | 2 -- 6 files changed, 4 insertions(+), 8 deletions(-) diff --git a/Resources/Prototypes/Entities/Constructible/Ground/table.yml b/Resources/Prototypes/Entities/Constructible/Ground/table.yml index ed324df1d3..8c28f0aef9 100644 --- a/Resources/Prototypes/Entities/Constructible/Ground/table.yml +++ b/Resources/Prototypes/Entities/Constructible/Ground/table.yml @@ -16,7 +16,7 @@ shapes: - !type:PhysShapeAabb layer: - - SmallImpassable + - VaultImpassable - type: SnapGrid offset: Center - type: IconSmooth diff --git a/Resources/Prototypes/Entities/Constructible/Storage/Closets/closet.yml b/Resources/Prototypes/Entities/Constructible/Storage/Closets/closet.yml index 19d0a25958..2833854a0d 100644 --- a/Resources/Prototypes/Entities/Constructible/Storage/Closets/closet.yml +++ b/Resources/Prototypes/Entities/Constructible/Storage/Closets/closet.yml @@ -32,7 +32,6 @@ - SmallImpassable layer: - Opaque - - Impassable - MobImpassable - VaultImpassable - SmallImpassable diff --git a/Resources/Prototypes/Entities/Constructible/Storage/crate_base.yml b/Resources/Prototypes/Entities/Constructible/Storage/crate_base.yml index 10b4afb31a..711f2f4ac9 100644 --- a/Resources/Prototypes/Entities/Constructible/Storage/crate_base.yml +++ b/Resources/Prototypes/Entities/Constructible/Storage/crate_base.yml @@ -26,9 +26,7 @@ - SmallImpassable layer: - Opaque - - Impassable - MobImpassable - - VaultImpassable - SmallImpassable IsScrapingFloor: true - type: Physics diff --git a/Resources/Prototypes/Entities/Constructible/Walls/low_wall.yml b/Resources/Prototypes/Entities/Constructible/Walls/low_wall.yml index 230c66d1d3..36d945b8de 100644 --- a/Resources/Prototypes/Entities/Constructible/Walls/low_wall.yml +++ b/Resources/Prototypes/Entities/Constructible/Walls/low_wall.yml @@ -20,7 +20,9 @@ - type: Collidable shapes: - !type:PhysShapeAabb - layer: [SmallImpassable, MobImpassable] + layer: + - VaultImpassable + - SmallImpassable - type: Damageable - type: Destructible thresholdvalue: 100 diff --git a/Resources/Prototypes/Entities/Mobs/Species/human.yml b/Resources/Prototypes/Entities/Mobs/Species/human.yml index 5118d9606e..b5a18678fd 100644 --- a/Resources/Prototypes/Entities/Mobs/Species/human.yml +++ b/Resources/Prototypes/Entities/Mobs/Species/human.yml @@ -113,7 +113,6 @@ - Impassable - MobImpassable - VaultImpassable - - SmallImpassable layer: - Opaque - MobImpassable diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml index 4e810bdb1b..0aac56f67c 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml @@ -23,8 +23,6 @@ mask: - Impassable - MobImpassable - - VaultImpassable - - SmallImpassable - type: Physics edgeslide: false - type: Projectile From 619386a04adc3ede4496728a88970ed14fc8ae98 Mon Sep 17 00:00:00 2001 From: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com> Date: Thu, 13 Aug 2020 22:17:12 +1000 Subject: [PATCH 09/48] Server EntitySystem cleanup (#1617) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Server EntitySystem cleanup I went after low-hanging fruit systems. * Add / change to internal access modifiers to systems * Use EntityQuery to get components instead * Add sealed modifier to systems * Remove unused imports * Add jetbrains annotation for unused classes * Removed some pragmas for dependencies This should also fix a decent chunk of the server build warnings, at least the ones that matter. * Also disposals * Update Content.Server/GameObjects/EntitySystems/GravitySystem.cs * Fix build Co-authored-by: Metal Gear Sloth Co-authored-by: Víctor Aguilera Puerto <6766154+Zumorica@users.noreply.github.com> --- .../GameObjects/EntitySystems/AI/AiSystem.cs | 15 +++----- .../AI/Steering/AiSteeringSystem.cs | 5 +-- .../EntitySystems/BaseChargerSystem.cs | 12 ++----- .../EntitySystems/BatteryDischargerSystem.cs | 21 +++++------ .../EntitySystems/BatteryStorageSystem.cs | 21 +++++------ .../EntitySystems/BloodstreamSystem.cs | 16 +++------ .../GameObjects/EntitySystems/BuckleSystem.cs | 15 ++------ .../EntitySystems/ConveyorSystem.cs | 22 +++--------- .../EntitySystems/DisposableSystem.cs | 13 ++----- .../EntitySystems/DisposalUnitSystem.cs | 14 ++------ .../EntitySystems/GravitySystem.cs | 35 +++++++------------ .../EntitySystems/HandHeldLightSystem.cs | 13 +++---- .../GameObjects/EntitySystems/HungerSystem.cs | 14 +++----- .../EntitySystems/InstrumentSystem.cs | 15 +++----- .../GameObjects/EntitySystems/LatheSystem.cs | 13 +++---- .../EntitySystems/ListeningSystem.cs | 24 +++---------- .../EntitySystems/MedicalScannerSystem.cs | 13 +++---- .../EntitySystems/MicrowaveSystem.cs | 14 +++----- .../EntitySystems/PointingSystem.cs | 10 ++---- .../GameObjects/EntitySystems/PortalSystem.cs | 12 ++----- .../EntitySystems/PowerApcSystem.cs | 23 +++++------- .../EntitySystems/PowerSmesSystem.cs | 11 +++--- .../PowerSolarControlConsoleSystem.cs | 29 ++++----------- .../EntitySystems/PowerSolarSystem.cs | 18 ++++------ .../EntitySystems/ProjectileSystem.cs | 13 ++----- .../GameObjects/EntitySystems/PuddleSystem.cs | 16 ++++----- .../GameObjects/EntitySystems/RadioSystem.cs | 23 +++--------- .../EntitySystems/RecyclerSystem.cs | 14 ++------ .../EntitySystems/RoguePointingSystem.cs | 14 ++------ .../EntitySystems/StomachSystem.cs | 16 +++------ .../EntitySystems/StorageSystem.cs | 20 +++++------ .../EntitySystems/StressTestMovementSystem.cs | 15 ++------ .../GameObjects/EntitySystems/StunSystem.cs | 18 +++------- .../EntitySystems/TemperatureSystem.cs | 13 +++---- .../GameObjects/EntitySystems/ThirstSystem.cs | 14 +++----- .../TimedOverlayRemovalSystem.cs | 22 ++++-------- 36 files changed, 172 insertions(+), 424 deletions(-) diff --git a/Content.Server/GameObjects/EntitySystems/AI/AiSystem.cs b/Content.Server/GameObjects/EntitySystems/AI/AiSystem.cs index 0c1a8d1c68..dbca826f84 100644 --- a/Content.Server/GameObjects/EntitySystems/AI/AiSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/AI/AiSystem.cs @@ -33,9 +33,6 @@ namespace Content.Server.GameObjects.EntitySystems.AI { base.Initialize(); - // register entity query - EntityQuery = new TypeEntityQuery(typeof(AiControllerComponent)); - var processors = _reflectionManager.GetAllChildren(); foreach (var processor in processors) { @@ -49,18 +46,16 @@ namespace Content.Server.GameObjects.EntitySystems.AI /// public override void Update(float frameTime) { - var entities = EntityManager.GetEntities(EntityQuery); - foreach (var entity in entities) + foreach (var comp in ComponentManager.EntityQuery()) { - if (_pauseManager.IsEntityPaused(entity)) + if (_pauseManager.IsEntityPaused(comp.Owner)) { continue; } + + ProcessorInitialize(comp); - var aiComp = entity.GetComponent(); - ProcessorInitialize(aiComp); - - var processor = aiComp.Processor; + var processor = comp.Processor; processor.Update(frameTime); } diff --git a/Content.Server/GameObjects/EntitySystems/AI/Steering/AiSteeringSystem.cs b/Content.Server/GameObjects/EntitySystems/AI/Steering/AiSteeringSystem.cs index 0bdd56c9cb..c6296a98cc 100644 --- a/Content.Server/GameObjects/EntitySystems/AI/Steering/AiSteeringSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/AI/Steering/AiSteeringSystem.cs @@ -581,7 +581,7 @@ namespace Content.Server.GameObjects.EntitySystems.AI.Steering return Vector2.Zero; } - if (target.TryGetComponent(out IPhysicsComponent physicsComponent)) + if (target.TryGetComponent(out ICollidableComponent physicsComponent)) { var targetDistance = (targetPos.Position - entityPos.Position); targetPos = targetPos.Offset(physicsComponent.LinearVelocity * targetDistance); @@ -640,11 +640,12 @@ namespace Content.Server.GameObjects.EntitySystems.AI.Steering // if we're moving in the same direction then ignore // So if 2 entities are moving towards each other and both detect a collision they'll both move in the same direction // i.e. towards the right - if (physicsEntity.TryGetComponent(out IPhysicsComponent physicsComponent) && + if (physicsEntity.TryGetComponent(out ICollidableComponent physicsComponent) && Vector2.Dot(physicsComponent.LinearVelocity, direction) > 0) { continue; } + var centerGrid = physicsEntity.Transform.GridPosition; // Check how close we are to center of tile and get the inverse; if we're closer this is stronger var additionalVector = (centerGrid.Position - entityGridCoords.Position); diff --git a/Content.Server/GameObjects/EntitySystems/BaseChargerSystem.cs b/Content.Server/GameObjects/EntitySystems/BaseChargerSystem.cs index 7e59153404..2d763020b4 100644 --- a/Content.Server/GameObjects/EntitySystems/BaseChargerSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/BaseChargerSystem.cs @@ -1,23 +1,17 @@ using Content.Server.GameObjects.Components.Power.Chargers; using JetBrains.Annotations; -using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Systems; namespace Content.Server.Interfaces.GameObjects.Components.Interaction { [UsedImplicitly] - internal class BaseChargerSystem : EntitySystem + internal sealed class BaseChargerSystem : EntitySystem { - public override void Initialize() - { - EntityQuery = new TypeEntityQuery(typeof(BaseCharger)); - } - public override void Update(float frameTime) { - foreach (var entity in RelevantEntities) + foreach (var comp in ComponentManager.EntityQuery()) { - entity.GetComponent().OnUpdate(frameTime); + comp.OnUpdate(frameTime); } } } diff --git a/Content.Server/GameObjects/EntitySystems/BatteryDischargerSystem.cs b/Content.Server/GameObjects/EntitySystems/BatteryDischargerSystem.cs index a17571a1b7..22fc2b7215 100644 --- a/Content.Server/GameObjects/EntitySystems/BatteryDischargerSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/BatteryDischargerSystem.cs @@ -1,31 +1,26 @@ using Content.Server.GameObjects.Components.Power.PowerNetComponents; +using JetBrains.Annotations; using Robust.Server.Interfaces.Timing; -using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Systems; using Robust.Shared.IoC; namespace Content.Server.GameObjects.EntitySystems { - internal class BatteryDischargerSystem : EntitySystem + [UsedImplicitly] + internal sealed class BatteryDischargerSystem : EntitySystem { -#pragma warning disable 649 - [Dependency] private readonly IPauseManager _pauseManager; -#pragma warning restore 649 - - public override void Initialize() - { - EntityQuery = new TypeEntityQuery(typeof(BatteryDischargerComponent)); - } + [Dependency] private readonly IPauseManager _pauseManager = default!; public override void Update(float frameTime) { - foreach (var entity in RelevantEntities) + foreach (var comp in ComponentManager.EntityQuery()) { - if (_pauseManager.IsEntityPaused(entity)) + if (_pauseManager.IsEntityPaused(comp.Owner)) { continue; } - entity.GetComponent().Update(frameTime); + + comp.Update(frameTime); } } } diff --git a/Content.Server/GameObjects/EntitySystems/BatteryStorageSystem.cs b/Content.Server/GameObjects/EntitySystems/BatteryStorageSystem.cs index 38fe005dcd..6f5ac89a8b 100644 --- a/Content.Server/GameObjects/EntitySystems/BatteryStorageSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/BatteryStorageSystem.cs @@ -1,31 +1,26 @@ using Content.Server.GameObjects.Components.Power.PowerNetComponents; +using JetBrains.Annotations; using Robust.Server.Interfaces.Timing; -using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Systems; using Robust.Shared.IoC; namespace Content.Server.GameObjects.EntitySystems { - internal class BatteryStorageSystem : EntitySystem + [UsedImplicitly] + internal sealed class BatteryStorageSystem : EntitySystem { -#pragma warning disable 649 - [Dependency] private readonly IPauseManager _pauseManager; -#pragma warning restore 649 - - public override void Initialize() - { - EntityQuery = new TypeEntityQuery(typeof(BatteryStorageComponent)); - } + [Dependency] private readonly IPauseManager _pauseManager = default!; public override void Update(float frameTime) { - foreach (var entity in RelevantEntities) + foreach (var comp in ComponentManager.EntityQuery()) { - if (_pauseManager.IsEntityPaused(entity)) + if (_pauseManager.IsEntityPaused(comp.Owner)) { continue; } - entity.GetComponent().Update(frameTime); + + comp.Update(frameTime); } } } diff --git a/Content.Server/GameObjects/EntitySystems/BloodstreamSystem.cs b/Content.Server/GameObjects/EntitySystems/BloodstreamSystem.cs index 69b432084b..5a1587b626 100644 --- a/Content.Server/GameObjects/EntitySystems/BloodstreamSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/BloodstreamSystem.cs @@ -1,21 +1,16 @@ using Content.Server.GameObjects.Components.Metabolism; using JetBrains.Annotations; -using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Systems; namespace Content.Server.Interfaces.GameObjects.Components.Interaction { /// - /// Triggers metabolism updates for + /// Triggers metabolism updates for /// [UsedImplicitly] - public class BloodstreamSystem : EntitySystem + internal sealed class BloodstreamSystem : EntitySystem { private float _accumulatedFrameTime; - public override void Initialize() - { - EntityQuery = new TypeEntityQuery(typeof(BloodstreamComponent)); - } public override void Update(float frameTime) { @@ -23,12 +18,11 @@ namespace Content.Server.Interfaces.GameObjects.Components.Interaction _accumulatedFrameTime += frameTime; if (_accumulatedFrameTime > 1.0f) { - foreach (var entity in RelevantEntities) + foreach (var component in ComponentManager.EntityQuery()) { - var comp = entity.GetComponent(); - comp.OnUpdate(_accumulatedFrameTime); + component.OnUpdate(_accumulatedFrameTime); } - _accumulatedFrameTime = 0.0f; + _accumulatedFrameTime -= 1.0f; } } } diff --git a/Content.Server/GameObjects/EntitySystems/BuckleSystem.cs b/Content.Server/GameObjects/EntitySystems/BuckleSystem.cs index 0f5719d500..9fbb049322 100644 --- a/Content.Server/GameObjects/EntitySystems/BuckleSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/BuckleSystem.cs @@ -2,36 +2,25 @@ using Content.Server.GameObjects.EntitySystems.Click; using JetBrains.Annotations; using Robust.Server.GameObjects.EntitySystems; -using Robust.Shared.GameObjects; -using Robust.Shared.GameObjects.Components.Transform; using Robust.Shared.GameObjects.Systems; -using Robust.Shared.Interfaces.Map; -using Robust.Shared.IoC; namespace Content.Server.GameObjects.EntitySystems { [UsedImplicitly] - public class BuckleSystem : EntitySystem + internal sealed class BuckleSystem : EntitySystem { public override void Initialize() { base.Initialize(); - EntityQuery = new TypeEntityQuery(typeof(BuckleComponent)); - UpdatesAfter.Add(typeof(InteractionSystem)); UpdatesAfter.Add(typeof(InputSystem)); } public override void Update(float frameTime) { - foreach (var entity in RelevantEntities) + foreach (var buckle in ComponentManager.EntityQuery()) { - if (!entity.TryGetComponent(out BuckleComponent buckle)) - { - continue; - } - buckle.Update(); } } diff --git a/Content.Server/GameObjects/EntitySystems/ConveyorSystem.cs b/Content.Server/GameObjects/EntitySystems/ConveyorSystem.cs index 6d75e5bcd8..d65b266d1f 100644 --- a/Content.Server/GameObjects/EntitySystems/ConveyorSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/ConveyorSystem.cs @@ -1,33 +1,19 @@ -using System; -using System.Collections.Generic; +using System.Collections.Generic; using Content.Server.GameObjects.Components.Conveyor; using Content.Shared.GameObjects.Components.Conveyor; using JetBrains.Annotations; -using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Systems; namespace Content.Server.GameObjects.EntitySystems { [UsedImplicitly] - public class ConveyorSystem : EntitySystem + internal sealed class ConveyorSystem : EntitySystem { - public override void Initialize() - { - base.Initialize(); - - EntityQuery = new TypeEntityQuery(typeof(ConveyorComponent)); - } - public override void Update(float frameTime) { - foreach (var entity in RelevantEntities) + foreach (var comp in ComponentManager.EntityQuery()) { - if (!entity.TryGetComponent(out ConveyorComponent conveyor)) - { - continue; - } - - conveyor.Update(frameTime); + comp.Update(frameTime); } } } diff --git a/Content.Server/GameObjects/EntitySystems/DisposableSystem.cs b/Content.Server/GameObjects/EntitySystems/DisposableSystem.cs index fd2bef87bf..536f0dfda4 100644 --- a/Content.Server/GameObjects/EntitySystems/DisposableSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/DisposableSystem.cs @@ -1,25 +1,18 @@ using Content.Server.GameObjects.Components.Disposal; using JetBrains.Annotations; -using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Systems; namespace Content.Server.GameObjects.EntitySystems { [UsedImplicitly] - public class DisposableSystem : EntitySystem + internal sealed class DisposableSystem : EntitySystem { - public override void Initialize() - { - base.Initialize(); - - EntityQuery = new TypeEntityQuery(typeof(DisposalHolderComponent)); - } public override void Update(float frameTime) { - foreach (var disposable in RelevantEntities) + foreach (var comp in ComponentManager.EntityQuery()) { - disposable.GetComponent().Update(frameTime); + comp.Update(frameTime); } } } diff --git a/Content.Server/GameObjects/EntitySystems/DisposalUnitSystem.cs b/Content.Server/GameObjects/EntitySystems/DisposalUnitSystem.cs index cf668534bb..ecac19f19e 100644 --- a/Content.Server/GameObjects/EntitySystems/DisposalUnitSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/DisposalUnitSystem.cs @@ -1,25 +1,17 @@ using Content.Server.GameObjects.Components.Disposal; using JetBrains.Annotations; -using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Systems; namespace Content.Server.GameObjects.EntitySystems { [UsedImplicitly] - public class DisposalUnitSystem : EntitySystem + internal sealed class DisposalUnitSystem : EntitySystem { - public override void Initialize() - { - base.Initialize(); - - EntityQuery = new TypeEntityQuery(typeof(DisposalUnitComponent)); - } - public override void Update(float frameTime) { - foreach (var entity in RelevantEntities) + foreach (var comp in ComponentManager.EntityQuery()) { - entity.GetComponent().Update(frameTime); + comp.Update(frameTime); } } } diff --git a/Content.Server/GameObjects/EntitySystems/GravitySystem.cs b/Content.Server/GameObjects/EntitySystems/GravitySystem.cs index f87d303d05..eac786be6c 100644 --- a/Content.Server/GameObjects/EntitySystems/GravitySystem.cs +++ b/Content.Server/GameObjects/EntitySystems/GravitySystem.cs @@ -1,4 +1,3 @@ -using System; using System.Collections.Generic; using System.Linq; using Content.Server.GameObjects.Components.Gravity; @@ -6,9 +5,7 @@ using Content.Server.GameObjects.Components.Mobs; using JetBrains.Annotations; using Robust.Server.GameObjects.EntitySystems; using Robust.Server.Interfaces.Player; -using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Systems; -using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Interfaces.Map; using Robust.Shared.Interfaces.Random; using Robust.Shared.IoC; @@ -19,42 +16,34 @@ using Robust.Shared.Random; namespace Content.Server.Interfaces.GameObjects.Components.Interaction { [UsedImplicitly] - public class GravitySystem: EntitySystem + internal sealed class GravitySystem : EntitySystem { -#pragma warning disable 649 - [Dependency] private readonly IMapManager _mapManager; - [Dependency] private readonly IPlayerManager _playerManager; - [Dependency] private readonly IRobustRandom _random; -#pragma warning restore 649 + [Dependency] private readonly IMapManager _mapManager = default!; + [Dependency] private readonly IPlayerManager _playerManager = default!; + [Dependency] private readonly IRobustRandom _random = default!; private const float GravityKick = 100.0f; private const uint ShakeTimes = 10; - private Dictionary _gridsToShake; + private Dictionary _gridsToShake = new Dictionary(); - private float internalTimer = 0.0f; - - public override void Initialize() - { - EntityQuery = new TypeEntityQuery(); - _gridsToShake = new Dictionary(); - } + private float _internalTimer = 0.0f; public override void Update(float frameTime) { - internalTimer += frameTime; + _internalTimer += frameTime; var gridsWithGravity = new List(); - foreach (var entity in RelevantEntities) + foreach (var generator in ComponentManager.EntityQuery()) { - var generator = entity.GetComponent(); if (generator.NeedsUpdate) { generator.UpdateState(); } + if (generator.Status == GravityGeneratorStatus.On) { - gridsWithGravity.Add(entity.Transform.GridID); + gridsWithGravity.Add(generator.Owner.Transform.GridID); } } @@ -71,10 +60,10 @@ namespace Content.Server.Interfaces.GameObjects.Components.Interaction } } - if (internalTimer > 0.2f) + if (_internalTimer > 0.2f) { ShakeGrids(); - internalTimer = 0.0f; + _internalTimer = 0.0f; } } diff --git a/Content.Server/GameObjects/EntitySystems/HandHeldLightSystem.cs b/Content.Server/GameObjects/EntitySystems/HandHeldLightSystem.cs index 8dd40458c3..0ffd887de5 100644 --- a/Content.Server/GameObjects/EntitySystems/HandHeldLightSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/HandHeldLightSystem.cs @@ -1,21 +1,16 @@ using Content.Server.GameObjects.Components.Interactable; -using Robust.Shared.GameObjects; +using JetBrains.Annotations; using Robust.Shared.GameObjects.Systems; namespace Content.Server.Interfaces.GameObjects.Components.Interaction { - public class HandHeldLightSystem : EntitySystem + [UsedImplicitly] + internal sealed class HandHeldLightSystem : EntitySystem { - public override void Initialize() - { - EntityQuery = new TypeEntityQuery(typeof(HandheldLightComponent)); - } - public override void Update(float frameTime) { - foreach (var entity in RelevantEntities) + foreach (var comp in ComponentManager.EntityQuery()) { - var comp = entity.GetComponent(); comp.OnUpdate(frameTime); } } diff --git a/Content.Server/GameObjects/EntitySystems/HungerSystem.cs b/Content.Server/GameObjects/EntitySystems/HungerSystem.cs index 08d2c9bf98..4cc7972528 100644 --- a/Content.Server/GameObjects/EntitySystems/HungerSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/HungerSystem.cs @@ -1,30 +1,24 @@ using Content.Server.GameObjects.Components.Nutrition; using JetBrains.Annotations; -using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Systems; namespace Content.Server.Interfaces.GameObjects.Components.Interaction { [UsedImplicitly] - public class HungerSystem : EntitySystem + internal sealed class HungerSystem : EntitySystem { private float _accumulatedFrameTime; - public override void Initialize() - { - EntityQuery = new TypeEntityQuery(typeof(HungerComponent)); - } - + public override void Update(float frameTime) { _accumulatedFrameTime += frameTime; if (_accumulatedFrameTime > 1.0f) { - foreach (var entity in RelevantEntities) + foreach (var comp in ComponentManager.EntityQuery()) { - var comp = entity.GetComponent(); comp.OnUpdate(_accumulatedFrameTime); } - _accumulatedFrameTime = 0.0f; + _accumulatedFrameTime -= 1.0f; } } } diff --git a/Content.Server/GameObjects/EntitySystems/InstrumentSystem.cs b/Content.Server/GameObjects/EntitySystems/InstrumentSystem.cs index a64f1fec01..e95f9016b5 100644 --- a/Content.Server/GameObjects/EntitySystems/InstrumentSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/InstrumentSystem.cs @@ -1,24 +1,19 @@ using Content.Server.GameObjects.Components.Instruments; -using Robust.Shared.GameObjects; +using JetBrains.Annotations; using Robust.Shared.GameObjects.Systems; namespace Content.Server.GameObjects.EntitySystems { - public class InstrumentSystem : EntitySystem + [UsedImplicitly] + internal sealed class InstrumentSystem : EntitySystem { - public override void Initialize() - { - base.Initialize(); - EntityQuery = new TypeEntityQuery(typeof(InstrumentComponent)); - } - public override void Update(float frameTime) { base.Update(frameTime); - foreach (var entity in RelevantEntities) + foreach (var component in ComponentManager.EntityQuery()) { - entity.GetComponent().Update(frameTime); + component.Update(frameTime); } } } diff --git a/Content.Server/GameObjects/EntitySystems/LatheSystem.cs b/Content.Server/GameObjects/EntitySystems/LatheSystem.cs index 7c39ae0cc3..7c4c96d9a1 100644 --- a/Content.Server/GameObjects/EntitySystems/LatheSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/LatheSystem.cs @@ -1,21 +1,16 @@ using Content.Server.GameObjects.Components.Research; -using Robust.Shared.GameObjects; +using JetBrains.Annotations; using Robust.Shared.GameObjects.Systems; namespace Content.Server.Interfaces.GameObjects.Components.Interaction { - public class LatheSystem : EntitySystem + [UsedImplicitly] + internal sealed class LatheSystem : EntitySystem { - public override void Initialize() - { - EntityQuery = new TypeEntityQuery(typeof(LatheComponent)); - } - public override void Update(float frameTime) { - foreach (var entity in RelevantEntities) + foreach (var comp in ComponentManager.EntityQuery()) { - var comp = entity.GetComponent(); if (comp.Producing == false && comp.Queue.Count > 0) { comp.Produce(comp.Queue.Dequeue()); diff --git a/Content.Server/GameObjects/EntitySystems/ListeningSystem.cs b/Content.Server/GameObjects/EntitySystems/ListeningSystem.cs index e4e518e1a8..f69477e089 100644 --- a/Content.Server/GameObjects/EntitySystems/ListeningSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/ListeningSystem.cs @@ -1,37 +1,23 @@ using Content.Server.GameObjects.Components; -using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Systems; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Interfaces.Map; using Robust.Shared.IoC; using Robust.Shared.Map; -using System; -using System.Collections.Generic; -using System.Text; namespace Content.Server.GameObjects.EntitySystems { - class ListeningSystem : EntitySystem + internal sealed class ListeningSystem : EntitySystem { -#pragma warning disable 649 - [Dependency] private readonly IMapManager _mapManager; - [Dependency] private readonly IEntitySystemManager _entitySystemManager; -#pragma warning restore 649 - - public override void Initialize() - { - base.Initialize(); - EntityQuery = new TypeEntityQuery(typeof(ListeningComponent)); - } + [Dependency] private readonly IMapManager _mapManager = default!; public void PingListeners(IEntity source, GridCoordinates sourcePos, string message) { - foreach (var listener in RelevantEntities) + foreach (var listener in ComponentManager.EntityQuery()) { - var dist = sourcePos.Distance(_mapManager, listener.Transform.GridPosition); + var dist = sourcePos.Distance(_mapManager, listener.Owner.Transform.GridPosition); - listener.GetComponent() - .PassSpeechData(message, source, dist); + listener.PassSpeechData(message, source, dist); } } } diff --git a/Content.Server/GameObjects/EntitySystems/MedicalScannerSystem.cs b/Content.Server/GameObjects/EntitySystems/MedicalScannerSystem.cs index 8dc8379b0d..9e84644d4f 100644 --- a/Content.Server/GameObjects/EntitySystems/MedicalScannerSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/MedicalScannerSystem.cs @@ -1,21 +1,16 @@ using Content.Server.GameObjects.Components.Medical; -using Robust.Shared.GameObjects; +using JetBrains.Annotations; using Robust.Shared.GameObjects.Systems; namespace Content.Server.Interfaces.GameObjects.Components.Interaction { - public class MedicalScannerSystem : EntitySystem + [UsedImplicitly] + internal sealed class MedicalScannerSystem : EntitySystem { - public override void Initialize() - { - EntityQuery = new TypeEntityQuery(typeof(MedicalScannerComponent)); - } - public override void Update(float frameTime) { - foreach (var entity in RelevantEntities) + foreach (var comp in ComponentManager.EntityQuery()) { - var comp = entity.GetComponent(); comp.Update(frameTime); } } diff --git a/Content.Server/GameObjects/EntitySystems/MicrowaveSystem.cs b/Content.Server/GameObjects/EntitySystems/MicrowaveSystem.cs index 8bb7d80bdd..3231d4db5e 100644 --- a/Content.Server/GameObjects/EntitySystems/MicrowaveSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/MicrowaveSystem.cs @@ -1,23 +1,17 @@ using Content.Server.GameObjects.Components.Kitchen; -using Robust.Shared.GameObjects; +using JetBrains.Annotations; using Robust.Shared.GameObjects.Systems; namespace Content.Server.Interfaces.GameObjects.Components.Interaction { - public class MicrowaveSystem : EntitySystem + [UsedImplicitly] + internal sealed class MicrowaveSystem : EntitySystem { - public override void Initialize() - { - base.Initialize(); - EntityQuery = new TypeEntityQuery(typeof(MicrowaveComponent)); - } - public override void Update(float frameTime) { base.Update(frameTime); - foreach (var entity in RelevantEntities) + foreach (var comp in ComponentManager.EntityQuery()) { - var comp = entity.GetComponent(); comp.OnUpdate(); } } diff --git a/Content.Server/GameObjects/EntitySystems/PointingSystem.cs b/Content.Server/GameObjects/EntitySystems/PointingSystem.cs index 6352aafef9..898ed90475 100644 --- a/Content.Server/GameObjects/EntitySystems/PointingSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/PointingSystem.cs @@ -24,14 +24,12 @@ using Robust.Shared.Players; namespace Content.Server.GameObjects.EntitySystems { [UsedImplicitly] - public class PointingSystem : EntitySystem + internal sealed class PointingSystem : EntitySystem { -#pragma warning disable 649 [Dependency] private readonly IMapManager _mapManager = default!; [Dependency] private readonly IPlayerManager _playerManager = default!; [Dependency] private readonly ITileDefinitionManager _tileDefinitionManager = default!; [Dependency] private readonly IGameTiming _gameTiming = default!; -#pragma warning restore 649 private static readonly TimeSpan PointDelay = TimeSpan.FromSeconds(0.5f); @@ -156,8 +154,6 @@ namespace Content.Server.GameObjects.EntitySystems _playerManager.PlayerStatusChanged += OnPlayerStatusChanged; - EntityQuery = new TypeEntityQuery(typeof(PointingArrowComponent)); - CommandBinds.Builder .Bind(ContentKeyFunctions.Point, new PointerInputCmdHandler(TryPoint)) .Register(); @@ -173,9 +169,9 @@ namespace Content.Server.GameObjects.EntitySystems public override void Update(float frameTime) { - foreach (var entity in RelevantEntities) + foreach (var component in ComponentManager.EntityQuery()) { - entity.GetComponent().Update(frameTime); + component.Update(frameTime); } } } diff --git a/Content.Server/GameObjects/EntitySystems/PortalSystem.cs b/Content.Server/GameObjects/EntitySystems/PortalSystem.cs index 7ffc532422..fc16603c09 100644 --- a/Content.Server/GameObjects/EntitySystems/PortalSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/PortalSystem.cs @@ -1,23 +1,17 @@ using Content.Server.GameObjects.Components.Movement; using JetBrains.Annotations; -using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Systems; namespace Content.Server.Interfaces.GameObjects.Components.Interaction { [UsedImplicitly] - public class PortalSystem : EntitySystem + internal sealed class PortalSystem : EntitySystem { - public override void Initialize() - { - EntityQuery = new TypeEntityQuery(typeof(ServerPortalComponent)); - } - + // TODO: Someone refactor portals public override void Update(float frameTime) { - foreach (var entity in RelevantEntities) + foreach (var comp in ComponentManager.EntityQuery()) { - var comp = entity.GetComponent(); comp.OnUpdate(); } } diff --git a/Content.Server/GameObjects/EntitySystems/PowerApcSystem.cs b/Content.Server/GameObjects/EntitySystems/PowerApcSystem.cs index cbaaaa981e..2bdb58b2a2 100644 --- a/Content.Server/GameObjects/EntitySystems/PowerApcSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/PowerApcSystem.cs @@ -1,37 +1,32 @@ using Content.Server.GameObjects.Components.Power.ApcNetComponents; using Content.Server.GameObjects.Components.NodeContainer.NodeGroups; -using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Systems; using System.Collections.Generic; +using JetBrains.Annotations; using Robust.Shared.IoC; using Robust.Server.Interfaces.Timing; namespace Content.Server.Interfaces.GameObjects.Components.Interaction { - public sealed class ApcSystem : EntitySystem + [UsedImplicitly] + internal sealed class PowerApcSystem : EntitySystem { -#pragma warning disable 649 - [Dependency] private readonly IPauseManager _pauseManager; -#pragma warning restore 649 - - public override void Initialize() - { - EntityQuery = new TypeEntityQuery(typeof(ApcComponent)); - } + [Dependency] private readonly IPauseManager _pauseManager = default!; public override void Update(float frameTime) { var uniqueApcNets = new HashSet(); //could be improved by maintaining set instead of getting collection every frame - foreach (var entity in RelevantEntities) + foreach (var apc in ComponentManager.EntityQuery()) { - if (_pauseManager.IsEntityPaused(entity)) + if (_pauseManager.IsEntityPaused(apc.Owner)) { continue; } - var apc = entity.GetComponent(); + uniqueApcNets.Add(apc.Net); - entity.GetComponent().Update(); + apc.Update(); } + foreach (var apcNet in uniqueApcNets) { apcNet.Update(frameTime); diff --git a/Content.Server/GameObjects/EntitySystems/PowerSmesSystem.cs b/Content.Server/GameObjects/EntitySystems/PowerSmesSystem.cs index 84f87f76b7..3f75198dbe 100644 --- a/Content.Server/GameObjects/EntitySystems/PowerSmesSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/PowerSmesSystem.cs @@ -1,21 +1,18 @@ using Content.Server.GameObjects.Components.Power; +using JetBrains.Annotations; using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Systems; namespace Content.Server.Interfaces.GameObjects.Components.Interaction { + [UsedImplicitly] internal class PowerSmesSystem : EntitySystem { - public override void Initialize() - { - EntityQuery = new TypeEntityQuery(typeof(SmesComponent)); - } - public override void Update(float frameTime) { - foreach (var entity in RelevantEntities) + foreach (var comp in ComponentManager.EntityQuery()) { - entity.GetComponent().OnUpdate(); + comp.OnUpdate(); } } } diff --git a/Content.Server/GameObjects/EntitySystems/PowerSolarControlConsoleSystem.cs b/Content.Server/GameObjects/EntitySystems/PowerSolarControlConsoleSystem.cs index c823080a65..d2fb4e4255 100644 --- a/Content.Server/GameObjects/EntitySystems/PowerSolarControlConsoleSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/PowerSolarControlConsoleSystem.cs @@ -1,16 +1,6 @@ using Content.Server.GameObjects.Components.Power; using JetBrains.Annotations; -using Content.Shared.Physics; -using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Systems; -using Robust.Shared.Interfaces.GameObjects; -using Robust.Shared.Interfaces.Physics; -using Robust.Shared.Interfaces.Random; -using Robust.Shared.Interfaces.Timing; -using Robust.Shared.Physics; -using Robust.Shared.IoC; -using Robust.Shared.Maths; -using System; namespace Content.Server.GameObjects.EntitySystems { @@ -18,27 +8,22 @@ namespace Content.Server.GameObjects.EntitySystems /// Responsible for updating solar control consoles. /// [UsedImplicitly] - public class PowerSolarControlConsoleSystem : EntitySystem + internal sealed class PowerSolarControlConsoleSystem : EntitySystem { /// /// Timer used to avoid updating the UI state every frame (which would be overkill) /// - private float UpdateTimer = 0f; - - public override void Initialize() - { - EntityQuery = new TypeEntityQuery(typeof(SolarControlConsoleComponent)); - } + private float _updateTimer; public override void Update(float frameTime) { - UpdateTimer += frameTime; - if (UpdateTimer >= 1) + _updateTimer += frameTime; + if (_updateTimer >= 1) { - UpdateTimer = 0; - foreach (var entity in RelevantEntities) + _updateTimer -= 1; + foreach (var component in ComponentManager.EntityQuery()) { - entity.GetComponent().UpdateUIState(); + component.UpdateUIState(); } } } diff --git a/Content.Server/GameObjects/EntitySystems/PowerSolarSystem.cs b/Content.Server/GameObjects/EntitySystems/PowerSolarSystem.cs index 433c7661f2..4a5244302c 100644 --- a/Content.Server/GameObjects/EntitySystems/PowerSolarSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/PowerSolarSystem.cs @@ -1,13 +1,11 @@ using Content.Server.GameObjects.Components.Power; using JetBrains.Annotations; using Content.Shared.Physics; -using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Systems; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Interfaces.Physics; using Robust.Shared.Interfaces.Random; using Robust.Shared.Interfaces.Timing; -using Robust.Shared.Physics; using Robust.Shared.IoC; using Robust.Shared.Maths; using System; @@ -19,12 +17,10 @@ namespace Content.Server.Interfaces.GameObjects.Components.Interaction /// Responsible for maintaining the solar-panel sun angle and updating coverage. /// [UsedImplicitly] - public class PowerSolarSystem : EntitySystem + internal sealed class PowerSolarSystem : EntitySystem { -#pragma warning disable 649 - [Dependency] private IGameTiming _gameTiming; - [Dependency] private IRobustRandom _robustRandom; -#pragma warning restore 649 + [Dependency] private readonly IGameTiming _gameTiming = default!; + [Dependency] private readonly IRobustRandom _robustRandom = default!; /// /// The current sun angle. @@ -75,7 +71,6 @@ namespace Content.Server.Interfaces.GameObjects.Components.Interaction public override void Initialize() { - EntityQuery = new TypeEntityQuery(typeof(SolarPanelComponent)); // Initialize the sun to something random TowardsSun = MathHelper.TwoPi * _robustRandom.NextDouble(); SunAngularVelocity = Angle.FromDegrees(0.1 + ((_robustRandom.NextDouble() - 0.5) * 0.05)); @@ -91,12 +86,11 @@ namespace Content.Server.Interfaces.GameObjects.Components.Interaction TotalPanelPower = 0; - foreach (var entity in RelevantEntities) + foreach (var panel in ComponentManager.EntityQuery()) { // There's supposed to be rotational logic here, but that implies putting it somewhere. - entity.Transform.WorldRotation = TargetPanelRotation; - - var panel = entity.GetComponent(); + panel.Owner.Transform.WorldRotation = TargetPanelRotation; + if (panel.TimeOfNextCoverageUpdate < _gameTiming.CurTime) { // Setup the next coverage check. diff --git a/Content.Server/GameObjects/EntitySystems/ProjectileSystem.cs b/Content.Server/GameObjects/EntitySystems/ProjectileSystem.cs index 6dd87f8b24..86d9151657 100644 --- a/Content.Server/GameObjects/EntitySystems/ProjectileSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/ProjectileSystem.cs @@ -1,6 +1,5 @@ using Content.Server.GameObjects.Components.Projectiles; using JetBrains.Annotations; -using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Systems; namespace Content.Server.Interfaces.GameObjects.Components.Interaction @@ -8,25 +7,17 @@ namespace Content.Server.Interfaces.GameObjects.Components.Interaction [UsedImplicitly] internal sealed class ProjectileSystem : EntitySystem { - public override void Initialize() - { - base.Initialize(); - - EntityQuery = new TypeEntityQuery(typeof(ProjectileComponent)); - } - public override void Update(float frameTime) { base.Update(frameTime); - foreach (var entity in RelevantEntities) + foreach (var component in ComponentManager.EntityQuery()) { - var component = entity.GetComponent(); component.TimeLeft -= frameTime; if (component.TimeLeft <= 0) { - entity.Delete(); + component.Owner.Delete(); } } } diff --git a/Content.Server/GameObjects/EntitySystems/PuddleSystem.cs b/Content.Server/GameObjects/EntitySystems/PuddleSystem.cs index 77133b8462..866ad39de9 100644 --- a/Content.Server/GameObjects/EntitySystems/PuddleSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/PuddleSystem.cs @@ -1,4 +1,5 @@ using Content.Server.GameObjects.Components.Fluids; +using JetBrains.Annotations; using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Components.Transform; using Robust.Shared.GameObjects.Systems; @@ -8,12 +9,12 @@ using Robust.Shared.Map; namespace Content.Server.Interfaces.GameObjects.Components.Interaction { - public class PuddleSystem : EntitySystem + [UsedImplicitly] + internal sealed class PuddleSystem : EntitySystem { public override void Initialize() { base.Initialize(); - EntityQuery = new TypeEntityQuery(typeof(PuddleComponent)); var mapManager = IoCManager.Resolve(); mapManager.TileChanged += HandleTileChanged; } @@ -28,17 +29,14 @@ namespace Content.Server.Interfaces.GameObjects.Components.Interaction private void HandleTileChanged(object sender, TileChangedEventArgs eventArgs) { // If this gets hammered you could probably queue up all the tile changes every tick but I doubt that would ever happen. - var entities = EntityManager.GetEntities(EntityQuery); - - foreach (var entity in entities) + foreach (var (puddle, snapGrid) in ComponentManager.EntityQuery()) { // If the tile becomes space then delete it (potentially change by design) - if (eventArgs.NewTile.GridIndex == entity.Transform.GridID && - entity.TryGetComponent(out SnapGridComponent snapGridComponent) && - snapGridComponent.Position == eventArgs.NewTile.GridIndices && + if (eventArgs.NewTile.GridIndex == puddle.Owner.Transform.GridID && + snapGrid.Position == eventArgs.NewTile.GridIndices && eventArgs.NewTile.Tile.IsEmpty) { - entity.Delete(); + puddle.Owner.Delete(); break; // Currently it's one puddle per tile, if that changes remove this } } diff --git a/Content.Server/GameObjects/EntitySystems/RadioSystem.cs b/Content.Server/GameObjects/EntitySystems/RadioSystem.cs index 0d8ddf85db..59f2e27c2f 100644 --- a/Content.Server/GameObjects/EntitySystems/RadioSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/RadioSystem.cs @@ -1,27 +1,13 @@ using Content.Server.GameObjects.Components.Interactable; -using JetBrains.Annotations; -using Microsoft.CodeAnalysis.CSharp.Syntax; -using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Systems; using Robust.Shared.Interfaces.GameObjects; -using System; using System.Collections.Generic; -using System.Linq; -using System.Text; namespace Content.Server.GameObjects.EntitySystems { - class RadioSystem : EntitySystem + internal sealed class RadioSystem : EntitySystem { - private List _messages; - - public override void Initialize() - { - base.Initialize(); - - EntityQuery = new TypeEntityQuery(typeof(RadioComponent)); - _messages = new List(); - } + private readonly List _messages = new List(); public void SpreadMessage(IEntity source, string message) { @@ -32,10 +18,9 @@ namespace Content.Server.GameObjects.EntitySystems _messages.Add(message); - foreach (var radioEntity in RelevantEntities) + foreach (var radio in ComponentManager.EntityQuery()) { - var radio = radioEntity.GetComponent(); - if (radioEntity == source || !radio.RadioOn) + if (radio.Owner == source || !radio.RadioOn) { continue; } diff --git a/Content.Server/GameObjects/EntitySystems/RecyclerSystem.cs b/Content.Server/GameObjects/EntitySystems/RecyclerSystem.cs index 82029d4f08..c0904a1271 100644 --- a/Content.Server/GameObjects/EntitySystems/RecyclerSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/RecyclerSystem.cs @@ -1,25 +1,17 @@ using Content.Server.GameObjects.Components.Recycling; using JetBrains.Annotations; -using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Systems; namespace Content.Server.GameObjects.EntitySystems { [UsedImplicitly] - public class RecyclerSystem : EntitySystem + internal sealed class RecyclerSystem : EntitySystem { - public override void Initialize() - { - base.Initialize(); - - EntityQuery = new TypeEntityQuery(typeof(RecyclerComponent)); - } - public override void Update(float frameTime) { - foreach (var entity in RelevantEntities) + foreach (var component in ComponentManager.EntityQuery()) { - entity.GetComponent().Update(frameTime); + component.Update(frameTime); } } } diff --git a/Content.Server/GameObjects/EntitySystems/RoguePointingSystem.cs b/Content.Server/GameObjects/EntitySystems/RoguePointingSystem.cs index 7fcb5a06e7..7686fb1e3a 100644 --- a/Content.Server/GameObjects/EntitySystems/RoguePointingSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/RoguePointingSystem.cs @@ -1,25 +1,17 @@ using Content.Server.GameObjects.Components.Pointing; using JetBrains.Annotations; -using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Systems; namespace Content.Server.GameObjects.EntitySystems { [UsedImplicitly] - public class RoguePointingSystem : EntitySystem + internal sealed class RoguePointingSystem : EntitySystem { - public override void Initialize() - { - base.Initialize(); - - EntityQuery = new TypeEntityQuery(typeof(RoguePointingArrowComponent)); - } - public override void Update(float frameTime) { - foreach (var entity in RelevantEntities) + foreach (var component in ComponentManager.EntityQuery()) { - entity.GetComponent().Update(frameTime); + component.Update(frameTime); } } } diff --git a/Content.Server/GameObjects/EntitySystems/StomachSystem.cs b/Content.Server/GameObjects/EntitySystems/StomachSystem.cs index bbdc796c98..a6b6cad130 100644 --- a/Content.Server/GameObjects/EntitySystems/StomachSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/StomachSystem.cs @@ -1,21 +1,16 @@ using Content.Server.GameObjects.Components.Nutrition; using JetBrains.Annotations; -using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Systems; namespace Content.Server.Interfaces.GameObjects.Components.Interaction { /// - /// Triggers digestion updates on + /// Triggers digestion updates on /// [UsedImplicitly] - public class StomachSystem : EntitySystem + internal sealed class StomachSystem : EntitySystem { private float _accumulatedFrameTime; - public override void Initialize() - { - EntityQuery = new TypeEntityQuery(typeof(StomachComponent)); - } public override void Update(float frameTime) { @@ -23,12 +18,11 @@ namespace Content.Server.Interfaces.GameObjects.Components.Interaction _accumulatedFrameTime += frameTime; if (_accumulatedFrameTime > 1.0f) { - foreach (var entity in RelevantEntities) + foreach (var component in ComponentManager.EntityQuery()) { - var comp = entity.GetComponent(); - comp.OnUpdate(_accumulatedFrameTime); + component.OnUpdate(_accumulatedFrameTime); } - _accumulatedFrameTime = 0.0f; + _accumulatedFrameTime -= 1.0f; } } } diff --git a/Content.Server/GameObjects/EntitySystems/StorageSystem.cs b/Content.Server/GameObjects/EntitySystems/StorageSystem.cs index 5d8793c72e..e33b958a93 100644 --- a/Content.Server/GameObjects/EntitySystems/StorageSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/StorageSystem.cs @@ -1,16 +1,15 @@ using System.Collections.Generic; -using Content.Server.GameObjects; using Content.Server.GameObjects.Components.Items.Storage; using Content.Server.GameObjects.EntitySystems.Click; +using JetBrains.Annotations; using Robust.Server.GameObjects.EntitySystemMessages; using Robust.Server.Interfaces.Player; -using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Systems; -using Robust.Shared.Interfaces.GameObjects; namespace Content.Server.Interfaces.GameObjects.Components.Interaction { - class StorageSystem : EntitySystem + [UsedImplicitly] + internal sealed class StorageSystem : EntitySystem { private readonly List _sessionCache = new List(); @@ -19,16 +18,14 @@ namespace Content.Server.Interfaces.GameObjects.Components.Interaction { SubscribeLocalEvent(HandleEntityRemovedFromContainer); SubscribeLocalEvent(HandleEntityInsertedIntoContainer); - - EntityQuery = new TypeEntityQuery(typeof(ServerStorageComponent)); } /// public override void Update(float frameTime) { - foreach (var entity in RelevantEntities) + foreach (var component in ComponentManager.EntityQuery()) { - CheckSubscribedEntities(entity); + CheckSubscribedEntities(component); } } @@ -52,9 +49,8 @@ namespace Content.Server.Interfaces.GameObjects.Components.Interaction } } - private void CheckSubscribedEntities(IEntity entity) + private void CheckSubscribedEntities(ServerStorageComponent storageComp) { - var storageComp = entity.GetComponent(); // We have to cache the set of sessions because Unsubscribe modifies the original. _sessionCache.Clear(); @@ -63,8 +59,8 @@ namespace Content.Server.Interfaces.GameObjects.Components.Interaction if (_sessionCache.Count == 0) return; - var storagePos = entity.Transform.WorldPosition; - var storageMap = entity.Transform.MapID; + var storagePos = storageComp.Owner.Transform.WorldPosition; + var storageMap = storageComp.Owner.Transform.MapID; foreach (var session in _sessionCache) { diff --git a/Content.Server/GameObjects/EntitySystems/StressTestMovementSystem.cs b/Content.Server/GameObjects/EntitySystems/StressTestMovementSystem.cs index 6539c17679..abdda79a09 100644 --- a/Content.Server/GameObjects/EntitySystems/StressTestMovementSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/StressTestMovementSystem.cs @@ -1,30 +1,21 @@ using System; using Content.Server.GameObjects.Components; using JetBrains.Annotations; -using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Systems; using Robust.Shared.Maths; namespace Content.Server.GameObjects.EntitySystems { [UsedImplicitly] - public class StressTestMovementSystem : EntitySystem + internal sealed class StressTestMovementSystem : EntitySystem { - public override void Initialize() - { - base.Initialize(); - - EntityQuery = new TypeEntityQuery(); - } - public override void Update(float frameTime) { base.Update(frameTime); - foreach (var entity in RelevantEntities) + foreach (var stressTest in ComponentManager.EntityQuery()) { - var stressTest = entity.GetComponent(); - var transform = entity.Transform; + var transform = stressTest.Owner.Transform; stressTest.Progress += frameTime; diff --git a/Content.Server/GameObjects/EntitySystems/StunSystem.cs b/Content.Server/GameObjects/EntitySystems/StunSystem.cs index ad5db08de4..8278b73b29 100644 --- a/Content.Server/GameObjects/EntitySystems/StunSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/StunSystem.cs @@ -1,27 +1,19 @@ using Content.Server.GameObjects.Components.Mobs; -using Content.Shared.GameObjects.Components.Mobs; -using Robust.Shared.GameObjects; +using JetBrains.Annotations; using Robust.Shared.GameObjects.Systems; -using Robust.Shared.Interfaces.GameObjects; namespace Content.Server.Interfaces.GameObjects.Components.Interaction { - public class StunSystem : EntitySystem + [UsedImplicitly] + internal sealed class StunSystem : EntitySystem { - public override void Initialize() - { - base.Initialize(); - - EntityQuery = new TypeEntityQuery(typeof(StunnableComponent)); - } - public override void Update(float frameTime) { base.Update(frameTime); - foreach (var entity in RelevantEntities) + foreach (var component in ComponentManager.EntityQuery()) { - entity.GetComponent().Update(frameTime); + component.Update(frameTime); } } } diff --git a/Content.Server/GameObjects/EntitySystems/TemperatureSystem.cs b/Content.Server/GameObjects/EntitySystems/TemperatureSystem.cs index a60c561bdf..27652ad9f1 100644 --- a/Content.Server/GameObjects/EntitySystems/TemperatureSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/TemperatureSystem.cs @@ -1,21 +1,16 @@ using Content.Server.GameObjects; -using Robust.Shared.GameObjects; +using JetBrains.Annotations; using Robust.Shared.GameObjects.Systems; namespace Content.Server.Interfaces.GameObjects.Components.Interaction { - class TemperatureSystem : EntitySystem + [UsedImplicitly] + internal sealed class TemperatureSystem : EntitySystem { - public override void Initialize() - { - EntityQuery = new TypeEntityQuery(typeof(TemperatureComponent)); - } - public override void Update(float frameTime) { - foreach (var entity in RelevantEntities) + foreach (var comp in ComponentManager.EntityQuery()) { - var comp = entity.GetComponent(); comp.OnUpdate(frameTime); } } diff --git a/Content.Server/GameObjects/EntitySystems/ThirstSystem.cs b/Content.Server/GameObjects/EntitySystems/ThirstSystem.cs index fa2b860f70..dfc2294909 100644 --- a/Content.Server/GameObjects/EntitySystems/ThirstSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/ThirstSystem.cs @@ -1,30 +1,24 @@ using Content.Server.GameObjects.Components.Nutrition; using JetBrains.Annotations; -using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Systems; namespace Content.Server.Interfaces.GameObjects.Components.Interaction { [UsedImplicitly] - public class ThirstSystem : EntitySystem + internal sealed class ThirstSystem : EntitySystem { private float _accumulatedFrameTime; - public override void Initialize() - { - EntityQuery = new TypeEntityQuery(typeof(ThirstComponent)); - } public override void Update(float frameTime) { _accumulatedFrameTime += frameTime; if (_accumulatedFrameTime > 1.0f) { - foreach (var entity in RelevantEntities) + foreach (var component in ComponentManager.EntityQuery()) { - var comp = entity.GetComponent(); - comp.OnUpdate(_accumulatedFrameTime); + component.OnUpdate(_accumulatedFrameTime); } - _accumulatedFrameTime = 0.0f; + _accumulatedFrameTime -= 1.0f; } } } diff --git a/Content.Server/GameObjects/EntitySystems/TimedOverlayRemovalSystem.cs b/Content.Server/GameObjects/EntitySystems/TimedOverlayRemovalSystem.cs index ceb07b97b1..4994837d09 100644 --- a/Content.Server/GameObjects/EntitySystems/TimedOverlayRemovalSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/TimedOverlayRemovalSystem.cs @@ -1,7 +1,6 @@ using Content.Server.GameObjects.Components.Mobs; using Content.Shared.GameObjects.Components.Mobs; using JetBrains.Annotations; -using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Systems; using Robust.Shared.Interfaces.Timing; using Robust.Shared.IoC; @@ -9,33 +8,24 @@ using Robust.Shared.IoC; namespace Content.Server.GameObjects.EntitySystems { [UsedImplicitly] - public class TimedOverlayRemovalSystem : EntitySystem + internal sealed class TimedOverlayRemovalSystem : EntitySystem { -#pragma warning disable 649 - [Dependency] private readonly IGameTiming _gameTiming; -#pragma warning restore 649 - - public override void Initialize() - { - base.Initialize(); - - EntityQuery = new TypeEntityQuery(typeof(ServerOverlayEffectsComponent)); - } + [Dependency] private readonly IGameTiming _gameTiming = default!; public override void Update(float frameTime) { base.Update(frameTime); - foreach (var entity in RelevantEntities) + foreach (var component in ComponentManager.EntityQuery()) { - var effectsComponent = entity.GetComponent(); - foreach (var overlay in effectsComponent.ActiveOverlays.ToArray()) + + foreach (var overlay in component.ActiveOverlays.ToArray()) { if (overlay.TryGetOverlayParameter(out var parameter)) { if (parameter.StartedAt + parameter.Length <= _gameTiming.CurTime.TotalMilliseconds) { - effectsComponent.RemoveOverlay(overlay); + component.RemoveOverlay(overlay); } } } From ca68fbe818902318eb6666298527f1c638782728 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Aguilera=20Puerto?= <6766154+Zumorica@users.noreply.github.com> Date: Thu, 13 Aug 2020 14:18:26 +0200 Subject: [PATCH 10/48] Add heat conduction (#1653) --- Content.Server/Atmos/GasMixture.cs | 29 ++- .../Atmos/IGridAtmosphereComponent.cs | 12 ++ Content.Server/Atmos/TileAtmosphere.cs | 176 +++++++++++++++++- .../Atmos/GridAtmosphereComponent.cs | 41 +++- Content.Shared/Atmos/Atmospherics.cs | 13 ++ Content.Shared/Maps/ContentTileDefinition.cs | 10 + Content.Shared/Maps/TurfHelpers.cs | 28 +++ SpaceStation14.sln.DotSettings | 1 + 8 files changed, 301 insertions(+), 9 deletions(-) diff --git a/Content.Server/Atmos/GasMixture.cs b/Content.Server/Atmos/GasMixture.cs index 1455402779..f886acad84 100644 --- a/Content.Server/Atmos/GasMixture.cs +++ b/Content.Server/Atmos/GasMixture.cs @@ -330,7 +330,7 @@ namespace Content.Server.Atmos } [MethodImpl(MethodImplOptions.AggressiveInlining)] - public void TemperatureShare(GasMixture sharer, float conductionCoefficient) + public float TemperatureShare(GasMixture sharer, float conductionCoefficient) { var temperatureDelta = TemperatureArchived - sharer.TemperatureArchived; if (MathF.Abs(temperatureDelta) > Atmospherics.MinimumTemperatureDeltaToConsider) @@ -349,6 +349,30 @@ namespace Content.Server.Atmos sharer.Temperature = MathF.Abs(MathF.Max(sharer.Temperature + heat / sharerHeatCapacity, Atmospherics.TCMB)); } } + + return sharer.Temperature; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public float TemperatureShare(float conductionCoefficient, float sharerTemperature, float sharerHeatCapacity) + { + var temperatureDelta = TemperatureArchived - sharerTemperature; + if (MathF.Abs(temperatureDelta) > Atmospherics.MinimumTemperatureDeltaToConsider) + { + var heatCapacity = HeatCapacityArchived; + + if (sharerHeatCapacity > Atmospherics.MinimumHeatCapacity && heatCapacity > Atmospherics.MinimumHeatCapacity) + { + var heat = conductionCoefficient * temperatureDelta * (heatCapacity * sharerHeatCapacity / (heatCapacity + sharerHeatCapacity)); + + if (!Immutable) + Temperature = MathF.Abs(MathF.Max(Temperature - heat / heatCapacity, Atmospherics.TCMB)); + + sharerTemperature = MathF.Abs(MathF.Max(sharerTemperature + heat / sharerHeatCapacity, Atmospherics.TCMB)); + } + } + + return sharerTemperature; } public enum GasCompareResult @@ -357,6 +381,9 @@ namespace Content.Server.Atmos TemperatureExchange = -1, } + /// + /// Compares sample to self to see if within acceptable ranges that group processing may be enabled. + /// [MethodImpl(MethodImplOptions.AggressiveInlining)] public GasCompareResult Compare(GasMixture sample) { diff --git a/Content.Server/Atmos/IGridAtmosphereComponent.cs b/Content.Server/Atmos/IGridAtmosphereComponent.cs index 5fdd25b2e3..430c674bce 100644 --- a/Content.Server/Atmos/IGridAtmosphereComponent.cs +++ b/Content.Server/Atmos/IGridAtmosphereComponent.cs @@ -66,6 +66,18 @@ namespace Content.Server.Atmos /// void RemoveHotspotTile(TileAtmosphere tile); + /// + /// Marks a tile as superconductive so it can be processed. + /// + /// + void AddSuperconductivityTile(TileAtmosphere tile); + + /// + /// Removes a tile from the superconductivity processing list. + /// + /// + void RemoveSuperconductivityTile(TileAtmosphere tile); + /// /// Marks a tile has having high pressure differences that need to be equalized. /// diff --git a/Content.Server/Atmos/TileAtmosphere.cs b/Content.Server/Atmos/TileAtmosphere.cs index dfb3ad675f..69d74ce995 100644 --- a/Content.Server/Atmos/TileAtmosphere.cs +++ b/Content.Server/Atmos/TileAtmosphere.cs @@ -7,6 +7,7 @@ using Content.Server.GameObjects.EntitySystems; using Content.Server.Interfaces; using Content.Shared.Atmos; using Content.Shared.Audio; +using Content.Shared.Maps; using Robust.Server.GameObjects.EntitySystems; using Robust.Shared.GameObjects.Components; using Robust.Shared.GameObjects.Systems; @@ -27,9 +28,21 @@ namespace Content.Server.Atmos [Robust.Shared.IoC.Dependency] private IEntityManager _entityManager = default!; [Robust.Shared.IoC.Dependency] private IMapManager _mapManager = default!; + [ViewVariables] private int _archivedCycle = 0; + + [ViewVariables] private int _currentCycle = 0; + [ViewVariables] + private static GasTileOverlaySystem _gasTileOverlaySystem; + + [ViewVariables] + private float _temperature = Atmospherics.T20C; + + [ViewVariables] + private float _temperatureArchived = Atmospherics.T20C; + // I know this being static is evil, but I seriously can't come up with a better solution to sound spam. private static int _soundCooldown = 0; @@ -39,6 +52,12 @@ namespace Content.Server.Atmos [ViewVariables] public float PressureDifference { get; set; } = 0; + [ViewVariables(VVAccess.ReadWrite)] + public float HeatCapacity { get; set; } = 1f; + + [ViewVariables] + public float ThermalConductivity => Tile?.Tile.GetContentTileDefinition().ThermalConductivity ?? 0.05f; + [ViewVariables] public bool Excited { get; set; } = false; @@ -54,11 +73,15 @@ namespace Content.Server.Atmos [ViewVariables] public Hotspot Hotspot; + [ViewVariables] private Direction _pressureDirection; [ViewVariables] public GridId GridIndex { get; } + [ViewVariables] + public TileRef? Tile => GridIndices.GetTileRef(GridIndex); + [ViewVariables] public MapIndices GridIndices { get; } @@ -68,6 +91,9 @@ namespace Content.Server.Atmos [ViewVariables] public GasMixture Air { get; set; } + [ViewVariables] + public bool BlocksAir => _gridAtmosphereComponent.IsAirBlocked(GridIndices); + public TileAtmosphere(GridAtmosphereComponent atmosphereComponent, GridId gridIndex, MapIndices gridIndices, GasMixture mixture = null) { IoCManager.InjectDependencies(this); @@ -80,8 +106,9 @@ namespace Content.Server.Atmos [MethodImpl(MethodImplOptions.AggressiveInlining)] private void Archive(int fireCount) { - _archivedCycle = fireCount; Air?.Archive(); + _archivedCycle = fireCount; + _temperatureArchived = _temperature; } public void HotspotExpose(float exposedTemperature, float exposedVolume, bool soh = false) @@ -704,10 +731,150 @@ namespace Content.Server.Atmos // TODO ATMOS Let all entities in this tile know about the fire? } + private bool ConsiderSuperconductivity() + { + if (ThermalConductivity == 0f) + return false; + + _gridAtmosphereComponent.AddSuperconductivityTile(this); + return true; + } + private bool ConsiderSuperconductivity(bool starting) { - // TODO ATMOS - return false; + if (Air.Temperature < (starting + ? Atmospherics.MinimumTemperatureStartSuperConduction + : Atmospherics.MinimumTemperatureForSuperconduction)) + return false; + + return !(Air.HeatCapacity < Atmospherics.MCellWithRatio) && ConsiderSuperconductivity(); + } + + public void Superconduct() + { + var directions = ConductivityDirections(); + var adjacentTiles = _gridAtmosphereComponent.GetAdjacentTiles(GridIndices, true); + + if (directions.Length > 0) + { + foreach (var direction in directions) + { + if (!adjacentTiles.TryGetValue(direction, out var adjacent)) continue; + + if (adjacent.ThermalConductivity == 0f) + continue; + + if(adjacent._archivedCycle < _gridAtmosphereComponent.UpdateCounter) + adjacent.Archive(_gridAtmosphereComponent.UpdateCounter); + + adjacent.NeighborConductWithSource(this); + + adjacent.ConsiderSuperconductivity(); + } + } + + RadiateToSpace(); + + FinishSuperconduction(); + } + + private void FinishSuperconduction() + { + // Conduct with air on my tile if I have it + if (!BlocksAir) + { + _temperature = Air.TemperatureShare(ThermalConductivity, _temperature, HeatCapacity); + } + + FinishSuperconduction(BlocksAir ? _temperature : Air.Temperature); + } + + private void FinishSuperconduction(float temperature) + { + // Make sure it's still hot enough to continue conducting. + if (temperature < Atmospherics.MinimumTemperatureForSuperconduction) + { + _gridAtmosphereComponent.RemoveSuperconductivityTile(this); + } + } + + private void NeighborConductWithSource(TileAtmosphere other) + { + if (BlocksAir) + { + if (!other.BlocksAir) + { + other.TemperatureShareOpenToSolid(this); + } + else + { + other.TemperatureShareMutualSolid(this, ThermalConductivity); + } + + TemperatureExpose(null, _temperature, _gridAtmosphereComponent.GetVolumeForCells(1)); + return; + } + + if (!other.BlocksAir) + { + other.Air.TemperatureShare(Air, Atmospherics.WindowHeatTransferCoefficient); + } + else + { + TemperatureShareOpenToSolid(other); + } + + _gridAtmosphereComponent.AddActiveTile(this); + } + + private void TemperatureShareOpenToSolid(TileAtmosphere other) + { + other._temperature = + Air.TemperatureShare(other.ThermalConductivity, other._temperature, other.HeatCapacity); + } + + private void TemperatureShareMutualSolid(TileAtmosphere other, float conductionCoefficient) + { + var deltaTemperature = (_temperatureArchived - other._temperatureArchived); + if (MathF.Abs(deltaTemperature) > Atmospherics.MinimumTemperatureDeltaToConsider + && HeatCapacity != 0f && other.HeatCapacity != 0f) + { + var heat = conductionCoefficient * deltaTemperature * + (HeatCapacity * other.HeatCapacity / (HeatCapacity + other.HeatCapacity)); + + _temperature -= heat / HeatCapacity; + other._temperature += heat / other.HeatCapacity; + } + } + + public void RadiateToSpace() + { + // Considering 0ºC as the break even point for radiation in and out. + if (_temperature > Atmospherics.T0C) + { + // Hardcoded space temperature. + var deltaTemperature = (_temperatureArchived - Atmospherics.TCMB); + if ((HeatCapacity > 0) && (MathF.Abs(deltaTemperature) > Atmospherics.MinimumTemperatureDeltaToConsider)) + { + var heat = ThermalConductivity * deltaTemperature * (HeatCapacity * + Atmospherics.HeatCapacityVacuum / (HeatCapacity + Atmospherics.HeatCapacityVacuum)); + + _temperature -= heat; + } + } + } + + public Direction[] ConductivityDirections() + { + if(BlocksAir) + { + if(_archivedCycle < _gridAtmosphereComponent.UpdateCounter) + Archive(_gridAtmosphereComponent.UpdateCounter); + return Cardinal; + } + + // TODO ATMOS check if this is correct + return Cardinal; } //[MethodImpl(MethodImplOptions.AggressiveInlining)] @@ -820,7 +987,6 @@ namespace Content.Server.Atmos //throw new NotImplementedException(); } - private void React() { // TODO ATMOS I think this is enough? gotta make sure... @@ -880,8 +1046,6 @@ namespace Content.Server.Atmos Direction.North, Direction.East, Direction.South, Direction.West }; - private static GasTileOverlaySystem _gasTileOverlaySystem; - public void TemperatureExpose(GasMixture mixture, float temperature, float cellVolume) { // TODO ATMOS do this diff --git a/Content.Server/GameObjects/Components/Atmos/GridAtmosphereComponent.cs b/Content.Server/GameObjects/Components/Atmos/GridAtmosphereComponent.cs index ea05c19642..c7207ffa4e 100644 --- a/Content.Server/GameObjects/Components/Atmos/GridAtmosphereComponent.cs +++ b/Content.Server/GameObjects/Components/Atmos/GridAtmosphereComponent.cs @@ -65,6 +65,9 @@ namespace Content.Server.GameObjects.Components.Atmos [ViewVariables] private readonly HashSet _hotspotTiles = new HashSet(1000); + [ViewVariables] + private readonly HashSet _superconductivityTiles = new HashSet(1000); + [ViewVariables] private readonly HashSet _invalidatedCoords = new HashSet(1000); @@ -81,6 +84,7 @@ namespace Content.Server.GameObjects.Components.Atmos ExcitedGroups, HighPressureDelta, Hotspots, + Superconductivity, } /// @@ -237,6 +241,18 @@ namespace Content.Server.GameObjects.Components.Atmos _hotspotTiles.Remove(tile); } + public void AddSuperconductivityTile(TileAtmosphere tile) + { + if (tile?.GridIndex != _grid.Index) return; + _superconductivityTiles.Add(tile); + } + + public void RemoveSuperconductivityTile(TileAtmosphere tile) + { + if (tile == null) return; + _superconductivityTiles.Remove(tile); + } + /// [MethodImpl(MethodImplOptions.AggressiveInlining)] public void AddHighPressureDelta(TileAtmosphere tile) @@ -302,14 +318,14 @@ namespace Content.Server.GameObjects.Components.Atmos return _grid.GetTileRef(indices).Tile.IsEmpty; } - public Dictionary GetAdjacentTiles(MapIndices indices) + public Dictionary GetAdjacentTiles(MapIndices indices, bool includeAirBlocked = false) { var sides = new Dictionary(); foreach (var dir in Cardinal) { var side = indices.Offset(dir); var tile = GetTile(side); - if(tile?.Air != null) + if(tile?.Air != null || includeAirBlocked) sides[dir] = tile; } @@ -361,6 +377,10 @@ namespace Content.Server.GameObjects.Components.Atmos break; case ProcessState.Hotspots: ProcessHotspots(); + _state = ProcessState.Superconductivity; + break; + case ProcessState.Superconductivity: + ProcessSuperconductivity(); _state = ProcessState.TileEqualize; break; } @@ -463,6 +483,23 @@ namespace Content.Server.GameObjects.Components.Atmos } } + private void ProcessSuperconductivity() + { + _stopwatch.Restart(); + + var number = 0; + foreach (var superconductivity in _superconductivityTiles.ToArray()) + { + superconductivity.Superconduct(); + + if (number++ < LagCheckIterations) continue; + number = 0; + // Process the rest next time. + if (_stopwatch.Elapsed.TotalMilliseconds >= LagCheckMaxMilliseconds) + return; + } + } + private AirtightComponent GetObstructingComponent(MapIndices indices) { foreach (var v in _grid.GetSnapGridCell(indices, SnapGridOffset.Center)) diff --git a/Content.Shared/Atmos/Atmospherics.cs b/Content.Shared/Atmos/Atmospherics.cs index 4659ab2441..2b1e2a5dc6 100644 --- a/Content.Shared/Atmos/Atmospherics.cs +++ b/Content.Shared/Atmos/Atmospherics.cs @@ -63,6 +63,11 @@ namespace Content.Shared.Atmos /// public const float MolesCellStandard = (OneAtmosphere * CellVolume / (T20C * R)); + /// + /// Compared against for superconduction. + /// + public const float MCellWithRatio = (MolesCellStandard * 0.005f); + public const float OxygenStandard = 0.21f; public const float NitrogenStandard = 0.79f; @@ -83,6 +88,11 @@ namespace Content.Shared.Atmos public const float OpenHeatTransferCoefficient = 0.4f; + /// + /// Hack to make vacuums cold, sacrificing realism for gameplay. + /// + public const float HeatCapacityVacuum = 7000f; + /// /// Ratio of air that must move to/from a tile to reset group processing /// @@ -116,6 +126,7 @@ namespace Content.Shared.Atmos /// Minimum temperature for starting superconduction. /// public const float MinimumTemperatureStartSuperConduction = (T20C + 200f); + public const float MinimumTemperatureForSuperconduction = (T20C + 10f); /// /// Minimum heat capacity. @@ -214,6 +225,8 @@ namespace Content.Shared.Atmos /// so it just applies this flat value). /// public const int LowPressureDamage = 4; + + public const float WindowHeatTransferCoefficient = 0.1f; } /// diff --git a/Content.Shared/Maps/ContentTileDefinition.cs b/Content.Shared/Maps/ContentTileDefinition.cs index 419a1bd812..c00e62fa87 100644 --- a/Content.Shared/Maps/ContentTileDefinition.cs +++ b/Content.Shared/Maps/ContentTileDefinition.cs @@ -26,6 +26,7 @@ namespace Content.Shared.Maps public bool CanCrowbar { get; private set; } public string FootstepSounds { get; private set; } public float Friction { get; set; } + public float ThermalConductivity { get; set; } public string ItemDropPrototypeName { get; private set; } public void AssignTileId(ushort id) @@ -68,6 +69,15 @@ namespace Content.Shared.Maps Friction = 0; } + if (mapping.TryGetNode("thermalConductivity", out node)) + { + ThermalConductivity = node.AsFloat(); + } + else + { + ThermalConductivity = 0.05f; + } + if (mapping.TryGetNode("item_drop", out node)) { ItemDropPrototypeName = node.ToString(); diff --git a/Content.Shared/Maps/TurfHelpers.cs b/Content.Shared/Maps/TurfHelpers.cs index 1f81bc6f8f..aa60e7168c 100644 --- a/Content.Shared/Maps/TurfHelpers.cs +++ b/Content.Shared/Maps/TurfHelpers.cs @@ -12,6 +12,34 @@ namespace Content.Shared.Maps { public static class TurfHelpers { + /// + /// Returns the content tile definition for a tile. + /// + public static ContentTileDefinition GetContentTileDefinition(this Tile tile) + { + var tileDefinitionManager = IoCManager.Resolve(); + return (ContentTileDefinition)tileDefinitionManager[tile.TypeId]; + } + + /// + /// Attempts to get the turf at map indices with grid id or null if no such turf is found. + /// + public static TileRef? GetTileRef(this MapIndices mapIndices, GridId gridId) + { + if (!gridId.IsValid()) + return null; + + var mapManager = IoCManager.Resolve(); + + if (!mapManager.TryGetGrid(gridId, out var grid)) + return null; + + if (!grid.TryGetTileRef(mapIndices, out var tile)) + return null; + + return tile; + } + /// /// Attempts to get the turf at a certain coordinates or null if no such turf is found. /// diff --git a/SpaceStation14.sln.DotSettings b/SpaceStation14.sln.DotSettings index bd8ed2aff7..f9a53158a2 100644 --- a/SpaceStation14.sln.DotSettings +++ b/SpaceStation14.sln.DotSettings @@ -72,6 +72,7 @@ True True True + True True True True From 05a76d55f769a63f121453d87badbd83b368a670 Mon Sep 17 00:00:00 2001 From: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com> Date: Thu, 13 Aug 2020 22:39:23 +1000 Subject: [PATCH 11/48] Vending machine uplift (#1549) * Let there be (vending machine) light Cut up vending machines to have unshaded layers. I scripted the cutting up so there might need to be minor tweaks to some of them. Added the eris vending machine sound (I liked it more than tg's, fight me). * Tweak sound reduction * Mark vending as abstract Appearance is done on each vending based on what sprite states they have (at the moment) and the vendingmachine shouldn't be spawned on its own anyway. * Add screen layer back in * Unstuff what was stuffed * Removed the Soviet and USA vending machines * Added proper licensing Co-authored-by: Metal Gear Sloth Co-authored-by: Swept --- .../VendingMachineVisualizer.cs | 168 ++++++- .../VendingMachineComponent.cs | 9 + Resources/Audio/Machines/machine_vend.ogg | Bin 0 -> 17353 bytes .../Constructible/Power/vending_machines.yml | 454 +++++++++++++++++- .../boozeomat.rsi/deny-unshaded.png | Bin 0 -> 1177 bytes .../VendingMachines/boozeomat.rsi/deny.png | Bin 1672 -> 0 bytes .../VendingMachines/boozeomat.rsi/meta.json | 52 +- .../boozeomat.rsi/normal-unshaded.png | Bin 0 -> 1458 bytes .../VendingMachines/boozeomat.rsi/normal.png | Bin 2002 -> 0 bytes .../cart.rsi/deny-unshaded.png | Bin 0 -> 902 bytes .../Power/VendingMachines/cart.rsi/deny.png | Bin 1182 -> 0 bytes .../cart.rsi/eject-unshaded.png | Bin 0 -> 693 bytes .../Power/VendingMachines/cart.rsi/eject.png | Bin 947 -> 0 bytes .../Power/VendingMachines/cart.rsi/meta.json | 56 ++- .../cart.rsi/normal-unshaded.png | Bin 0 -> 415 bytes .../Power/VendingMachines/cart.rsi/normal.png | Bin 596 -> 0 bytes .../chapel.rsi/deny-unshaded.png | Bin 0 -> 1871 bytes .../Power/VendingMachines/chapel.rsi/deny.png | Bin 3051 -> 0 bytes .../VendingMachines/chapel.rsi/meta.json | 127 ++++- .../chapel.rsi/normal-unshaded.png | Bin 0 -> 21655 bytes .../VendingMachines/chapel.rsi/normal.png | Bin 24541 -> 0 bytes .../cigs.rsi/deny-unshaded.png | Bin 0 -> 530 bytes .../Power/VendingMachines/cigs.rsi/deny.png | Bin 840 -> 0 bytes .../cigs.rsi/eject-unshaded.png | Bin 0 -> 526 bytes .../Power/VendingMachines/cigs.rsi/eject.png | Bin 817 -> 0 bytes .../Power/VendingMachines/cigs.rsi/meta.json | 52 +- .../cigs.rsi/normal-unshaded.png | Bin 0 -> 352 bytes .../Power/VendingMachines/cigs.rsi/normal.png | Bin 540 -> 0 bytes .../coffee.rsi/deny-unshaded.png | Bin 0 -> 253 bytes .../Power/VendingMachines/coffee.rsi/deny.png | Bin 819 -> 0 bytes .../coffee.rsi/eject-unshaded.png | Bin 0 -> 699 bytes .../VendingMachines/coffee.rsi/eject.png | Bin 1321 -> 0 bytes .../VendingMachines/coffee.rsi/meta.json | 84 +++- .../coffee.rsi/normal-unshaded.png | Bin 0 -> 153 bytes .../VendingMachines/coffee.rsi/normal.png | Bin 503 -> 0 bytes .../cola.rsi/deny-unshaded.png | Bin 0 -> 490 bytes .../Power/VendingMachines/cola.rsi/deny.png | Bin 815 -> 0 bytes .../cola.rsi/eject-unshaded.png | Bin 0 -> 962 bytes .../Power/VendingMachines/cola.rsi/eject.png | Bin 799 -> 0 bytes .../Power/VendingMachines/cola.rsi/meta.json | 57 ++- .../cola.rsi/normal-unshaded.png | Bin 0 -> 289 bytes .../Power/VendingMachines/cola.rsi/normal.png | Bin 517 -> 0 bytes .../dinnerware.rsi/eject-unshaded.png | Bin 0 -> 1482 bytes .../VendingMachines/dinnerware.rsi/eject.png | Bin 2031 -> 0 bytes .../VendingMachines/dinnerware.rsi/meta.json | 42 +- .../dinnerware.rsi/normal-unshaded.png | Bin 0 -> 488 bytes .../VendingMachines/dinnerware.rsi/normal.png | Bin 800 -> 0 bytes .../VendingMachines/discount.rsi/meta.json | 31 +- .../discount.rsi/normal-unshaded.png | Bin 0 -> 897 bytes .../VendingMachines/discount.rsi/normal.png | Bin 1683 -> 0 bytes .../Power/VendingMachines/empty.rsi/meta.json | 24 +- .../empty.rsi/normal-unshaded.png | Bin 0 -> 109 bytes .../VendingMachines/empty.rsi/normal.png | Bin 806 -> 0 bytes .../engivend.rsi/deny-unshaded.png | Bin 0 -> 791 bytes .../VendingMachines/engivend.rsi/deny.png | Bin 1435 -> 0 bytes .../engivend.rsi/eject-unshaded.png | Bin 0 -> 575 bytes .../VendingMachines/engivend.rsi/eject.png | Bin 1100 -> 0 bytes .../VendingMachines/engivend.rsi/meta.json | 53 +- .../engivend.rsi/normal-unshaded.png | Bin 0 -> 413 bytes .../VendingMachines/engivend.rsi/normal.png | Bin 822 -> 0 bytes .../Power/VendingMachines/hats.rsi/meta.json | 32 +- .../hats.rsi/normal-unshaded.png | Bin 0 -> 306 bytes .../Power/VendingMachines/hats.rsi/normal.png | Bin 630 -> 0 bytes .../VendingMachines/magivend.rsi/meta.json | 24 +- .../magivend.rsi/normal-unshaded.png | Bin 0 -> 502 bytes .../VendingMachines/magivend.rsi/normal.png | Bin 957 -> 0 bytes .../medical.rsi/deny-unshaded.png | Bin 0 -> 1022 bytes .../VendingMachines/medical.rsi/deny.png | Bin 1529 -> 0 bytes .../medical.rsi/eject-unshaded.png | Bin 0 -> 749 bytes .../VendingMachines/medical.rsi/eject.png | Bin 1157 -> 0 bytes .../VendingMachines/medical.rsi/meta.json | 53 +- .../medical.rsi/normal-unshaded.png | Bin 0 -> 465 bytes .../VendingMachines/medical.rsi/normal.png | Bin 857 -> 0 bytes .../mining.rsi/deny-unshaded.png | Bin 0 -> 487 bytes .../Power/VendingMachines/mining.rsi/deny.png | Bin 1079 -> 0 bytes .../VendingMachines/mining.rsi/meta.json | 34 +- .../mining.rsi/normal-unshaded.png | Bin 0 -> 370 bytes .../VendingMachines/mining.rsi/normal.png | Bin 886 -> 0 bytes .../nutri.rsi/deny-unshaded.png | Bin 0 -> 662 bytes .../Power/VendingMachines/nutri.rsi/deny.png | Bin 1271 -> 0 bytes .../nutri.rsi/eject-unshaded.png | Bin 0 -> 1332 bytes .../Power/VendingMachines/nutri.rsi/eject.png | Bin 2244 -> 0 bytes .../Power/VendingMachines/nutri.rsi/meta.json | 48 +- .../nutri.rsi/normal-unshaded.png | Bin 0 -> 685 bytes .../VendingMachines/nutri.rsi/normal.png | Bin 1286 -> 0 bytes .../robotics.rsi/deny-unshaded.png | Bin 0 -> 1090 bytes .../VendingMachines/robotics.rsi/deny.png | Bin 1893 -> 0 bytes .../VendingMachines/robotics.rsi/meta.json | 39 +- .../robotics.rsi/normal-unshaded.png | Bin 0 -> 429 bytes .../VendingMachines/robotics.rsi/normal.png | Bin 1089 -> 0 bytes .../sale.rsi/broken-unshaded.png | Bin 0 -> 5177 bytes .../Power/VendingMachines/sale.rsi/broken.png | Bin 1709 -> 2444 bytes .../Power/VendingMachines/sale.rsi/meta.json | 52 +- .../sale.rsi/normal-unshaded.png | Bin 0 -> 532 bytes .../Power/VendingMachines/sale.rsi/normal.png | Bin 2157 -> 0 bytes .../VendingMachines/sec.rsi/deny-unshaded.png | Bin 0 -> 898 bytes .../Power/VendingMachines/sec.rsi/deny.png | Bin 1491 -> 0 bytes .../sec.rsi/eject-unshaded.png | Bin 0 -> 644 bytes .../Power/VendingMachines/sec.rsi/eject.png | Bin 1050 -> 0 bytes .../Power/VendingMachines/sec.rsi/meta.json | 53 +- .../sec.rsi/normal-unshaded.png | Bin 0 -> 387 bytes .../Power/VendingMachines/sec.rsi/normal.png | Bin 789 -> 0 bytes .../seeds.rsi/eject-unshaded.png | Bin 0 -> 2220 bytes .../Power/VendingMachines/seeds.rsi/eject.png | Bin 2555 -> 0 bytes .../Power/VendingMachines/seeds.rsi/meta.json | 42 +- .../seeds.rsi/normal-unshaded.png | Bin 0 -> 1388 bytes .../VendingMachines/seeds.rsi/normal.png | Bin 1677 -> 0 bytes .../Power/VendingMachines/shoes.rsi/meta.json | 32 +- .../shoes.rsi/normal-unshaded.png | Bin 0 -> 282 bytes .../VendingMachines/shoes.rsi/normal.png | Bin 753 -> 0 bytes .../VendingMachines/smartfridge.rsi/meta.json | 24 +- .../smartfridge.rsi/normal-unshaded.png | Bin 0 -> 784 bytes .../smartfridge.rsi/normal.png | Bin 987 -> 0 bytes .../snack.rsi/deny-unshaded.png | Bin 0 -> 877 bytes .../Power/VendingMachines/snack.rsi/deny.png | Bin 1191 -> 0 bytes .../snack.rsi/eject-unshaded.png | Bin 0 -> 862 bytes .../Power/VendingMachines/snack.rsi/eject.png | Bin 1156 -> 0 bytes .../Power/VendingMachines/snack.rsi/meta.json | 59 ++- .../snack.rsi/normal-unshaded.png | Bin 0 -> 784 bytes .../VendingMachines/snack.rsi/normal.png | Bin 1106 -> 0 bytes .../sovietsoda.rsi/deny-unshaded.png | Bin 0 -> 348 bytes .../VendingMachines/sovietsoda.rsi/deny.png | Bin 806 -> 0 bytes .../sovietsoda.rsi/eject-unshaded.png | Bin 0 -> 498 bytes .../VendingMachines/sovietsoda.rsi/eject.png | Bin 993 -> 0 bytes .../VendingMachines/sovietsoda.rsi/meta.json | 51 +- .../sovietsoda.rsi/normal-unshaded.png | Bin 0 -> 298 bytes .../VendingMachines/sovietsoda.rsi/normal.png | Bin 710 -> 0 bytes .../Power/VendingMachines/suits.rsi/meta.json | 32 +- .../suits.rsi/normal-unshaded.png | Bin 0 -> 337 bytes .../VendingMachines/suits.rsi/normal.png | Bin 809 -> 0 bytes .../theater.rsi/deny-unshaded.png | Bin 0 -> 652 bytes .../VendingMachines/theater.rsi/deny.png | Bin 939 -> 0 bytes .../theater.rsi/eject-unshaded.png | Bin 0 -> 735 bytes .../VendingMachines/theater.rsi/eject.png | Bin 921 -> 0 bytes .../VendingMachines/theater.rsi/meta.json | 62 ++- .../theater.rsi/normal-unshaded.png | Bin 0 -> 425 bytes .../VendingMachines/theater.rsi/normal.png | Bin 623 -> 0 bytes .../theater.rsi/{overlay.png => screen.png} | Bin .../vendomat.rsi/deny-unshaded.png | Bin 0 -> 6639 bytes .../VendingMachines/vendomat.rsi/deny.png | Bin 919 -> 0 bytes .../vendomat.rsi/eject-unshaded.png | Bin 0 -> 9248 bytes .../VendingMachines/vendomat.rsi/eject.png | Bin 857 -> 9262 bytes .../VendingMachines/vendomat.rsi/meta.json | 52 +- .../vendomat.rsi/normal-unshaded.png | Bin 0 -> 3129 bytes .../VendingMachines/vendomat.rsi/normal.png | Bin 559 -> 0 bytes .../Power/VendingMachines/vox.rsi/meta.json | 24 +- .../vox.rsi/normal-unshaded.png | Bin 0 -> 3583 bytes .../Power/VendingMachines/vox.rsi/normal.png | Bin 819 -> 0 bytes .../wallmed.rsi/deny-unshaded.png | Bin 0 -> 737 bytes .../VendingMachines/wallmed.rsi/deny.png | Bin 876 -> 0 bytes .../VendingMachines/wallmed.rsi/meta.json | 44 +- .../wallmed.rsi/normal-unshaded.png | Bin 0 -> 217 bytes .../VendingMachines/wallmed.rsi/normal.png | Bin 286 -> 0 bytes .../youtool.rsi/deny-unshaded.png | Bin 0 -> 17038 bytes .../VendingMachines/youtool.rsi/deny.png | Bin 1601 -> 0 bytes .../youtool.rsi/eject-unshaded.png | Bin 0 -> 12296 bytes .../VendingMachines/youtool.rsi/eject.png | Bin 1179 -> 12327 bytes .../VendingMachines/youtool.rsi/meta.json | 67 ++- .../youtool.rsi/normal-unshaded.png | Bin 0 -> 4581 bytes .../VendingMachines/youtool.rsi/normal.png | Bin 904 -> 0 bytes 160 files changed, 1962 insertions(+), 71 deletions(-) create mode 100644 Resources/Audio/Machines/machine_vend.ogg create mode 100644 Resources/Textures/Constructible/Power/VendingMachines/boozeomat.rsi/deny-unshaded.png delete mode 100644 Resources/Textures/Constructible/Power/VendingMachines/boozeomat.rsi/deny.png create mode 100644 Resources/Textures/Constructible/Power/VendingMachines/boozeomat.rsi/normal-unshaded.png delete mode 100644 Resources/Textures/Constructible/Power/VendingMachines/boozeomat.rsi/normal.png create mode 100644 Resources/Textures/Constructible/Power/VendingMachines/cart.rsi/deny-unshaded.png delete mode 100644 Resources/Textures/Constructible/Power/VendingMachines/cart.rsi/deny.png create mode 100644 Resources/Textures/Constructible/Power/VendingMachines/cart.rsi/eject-unshaded.png delete mode 100644 Resources/Textures/Constructible/Power/VendingMachines/cart.rsi/eject.png create mode 100644 Resources/Textures/Constructible/Power/VendingMachines/cart.rsi/normal-unshaded.png delete mode 100644 Resources/Textures/Constructible/Power/VendingMachines/cart.rsi/normal.png create mode 100644 Resources/Textures/Constructible/Power/VendingMachines/chapel.rsi/deny-unshaded.png delete mode 100644 Resources/Textures/Constructible/Power/VendingMachines/chapel.rsi/deny.png create mode 100644 Resources/Textures/Constructible/Power/VendingMachines/chapel.rsi/normal-unshaded.png delete mode 100644 Resources/Textures/Constructible/Power/VendingMachines/chapel.rsi/normal.png create mode 100644 Resources/Textures/Constructible/Power/VendingMachines/cigs.rsi/deny-unshaded.png delete mode 100644 Resources/Textures/Constructible/Power/VendingMachines/cigs.rsi/deny.png create mode 100644 Resources/Textures/Constructible/Power/VendingMachines/cigs.rsi/eject-unshaded.png delete mode 100644 Resources/Textures/Constructible/Power/VendingMachines/cigs.rsi/eject.png create mode 100644 Resources/Textures/Constructible/Power/VendingMachines/cigs.rsi/normal-unshaded.png delete mode 100644 Resources/Textures/Constructible/Power/VendingMachines/cigs.rsi/normal.png create mode 100644 Resources/Textures/Constructible/Power/VendingMachines/coffee.rsi/deny-unshaded.png delete mode 100644 Resources/Textures/Constructible/Power/VendingMachines/coffee.rsi/deny.png create mode 100644 Resources/Textures/Constructible/Power/VendingMachines/coffee.rsi/eject-unshaded.png delete mode 100644 Resources/Textures/Constructible/Power/VendingMachines/coffee.rsi/eject.png create mode 100644 Resources/Textures/Constructible/Power/VendingMachines/coffee.rsi/normal-unshaded.png delete mode 100644 Resources/Textures/Constructible/Power/VendingMachines/coffee.rsi/normal.png create mode 100644 Resources/Textures/Constructible/Power/VendingMachines/cola.rsi/deny-unshaded.png delete mode 100644 Resources/Textures/Constructible/Power/VendingMachines/cola.rsi/deny.png create mode 100644 Resources/Textures/Constructible/Power/VendingMachines/cola.rsi/eject-unshaded.png delete mode 100644 Resources/Textures/Constructible/Power/VendingMachines/cola.rsi/eject.png create mode 100644 Resources/Textures/Constructible/Power/VendingMachines/cola.rsi/normal-unshaded.png delete mode 100644 Resources/Textures/Constructible/Power/VendingMachines/cola.rsi/normal.png create mode 100644 Resources/Textures/Constructible/Power/VendingMachines/dinnerware.rsi/eject-unshaded.png delete mode 100644 Resources/Textures/Constructible/Power/VendingMachines/dinnerware.rsi/eject.png create mode 100644 Resources/Textures/Constructible/Power/VendingMachines/dinnerware.rsi/normal-unshaded.png delete mode 100644 Resources/Textures/Constructible/Power/VendingMachines/dinnerware.rsi/normal.png create mode 100644 Resources/Textures/Constructible/Power/VendingMachines/discount.rsi/normal-unshaded.png delete mode 100644 Resources/Textures/Constructible/Power/VendingMachines/discount.rsi/normal.png create mode 100644 Resources/Textures/Constructible/Power/VendingMachines/empty.rsi/normal-unshaded.png delete mode 100644 Resources/Textures/Constructible/Power/VendingMachines/empty.rsi/normal.png create mode 100644 Resources/Textures/Constructible/Power/VendingMachines/engivend.rsi/deny-unshaded.png delete mode 100644 Resources/Textures/Constructible/Power/VendingMachines/engivend.rsi/deny.png create mode 100644 Resources/Textures/Constructible/Power/VendingMachines/engivend.rsi/eject-unshaded.png delete mode 100644 Resources/Textures/Constructible/Power/VendingMachines/engivend.rsi/eject.png create mode 100644 Resources/Textures/Constructible/Power/VendingMachines/engivend.rsi/normal-unshaded.png delete mode 100644 Resources/Textures/Constructible/Power/VendingMachines/engivend.rsi/normal.png create mode 100644 Resources/Textures/Constructible/Power/VendingMachines/hats.rsi/normal-unshaded.png delete mode 100644 Resources/Textures/Constructible/Power/VendingMachines/hats.rsi/normal.png create mode 100644 Resources/Textures/Constructible/Power/VendingMachines/magivend.rsi/normal-unshaded.png delete mode 100644 Resources/Textures/Constructible/Power/VendingMachines/magivend.rsi/normal.png create mode 100644 Resources/Textures/Constructible/Power/VendingMachines/medical.rsi/deny-unshaded.png delete mode 100644 Resources/Textures/Constructible/Power/VendingMachines/medical.rsi/deny.png create mode 100644 Resources/Textures/Constructible/Power/VendingMachines/medical.rsi/eject-unshaded.png delete mode 100644 Resources/Textures/Constructible/Power/VendingMachines/medical.rsi/eject.png create mode 100644 Resources/Textures/Constructible/Power/VendingMachines/medical.rsi/normal-unshaded.png delete mode 100644 Resources/Textures/Constructible/Power/VendingMachines/medical.rsi/normal.png create mode 100644 Resources/Textures/Constructible/Power/VendingMachines/mining.rsi/deny-unshaded.png delete mode 100644 Resources/Textures/Constructible/Power/VendingMachines/mining.rsi/deny.png create mode 100644 Resources/Textures/Constructible/Power/VendingMachines/mining.rsi/normal-unshaded.png delete mode 100644 Resources/Textures/Constructible/Power/VendingMachines/mining.rsi/normal.png create mode 100644 Resources/Textures/Constructible/Power/VendingMachines/nutri.rsi/deny-unshaded.png delete mode 100644 Resources/Textures/Constructible/Power/VendingMachines/nutri.rsi/deny.png create mode 100644 Resources/Textures/Constructible/Power/VendingMachines/nutri.rsi/eject-unshaded.png delete mode 100644 Resources/Textures/Constructible/Power/VendingMachines/nutri.rsi/eject.png create mode 100644 Resources/Textures/Constructible/Power/VendingMachines/nutri.rsi/normal-unshaded.png delete mode 100644 Resources/Textures/Constructible/Power/VendingMachines/nutri.rsi/normal.png create mode 100644 Resources/Textures/Constructible/Power/VendingMachines/robotics.rsi/deny-unshaded.png delete mode 100644 Resources/Textures/Constructible/Power/VendingMachines/robotics.rsi/deny.png create mode 100644 Resources/Textures/Constructible/Power/VendingMachines/robotics.rsi/normal-unshaded.png delete mode 100644 Resources/Textures/Constructible/Power/VendingMachines/robotics.rsi/normal.png create mode 100644 Resources/Textures/Constructible/Power/VendingMachines/sale.rsi/broken-unshaded.png create mode 100644 Resources/Textures/Constructible/Power/VendingMachines/sale.rsi/normal-unshaded.png delete mode 100644 Resources/Textures/Constructible/Power/VendingMachines/sale.rsi/normal.png create mode 100644 Resources/Textures/Constructible/Power/VendingMachines/sec.rsi/deny-unshaded.png delete mode 100644 Resources/Textures/Constructible/Power/VendingMachines/sec.rsi/deny.png create mode 100644 Resources/Textures/Constructible/Power/VendingMachines/sec.rsi/eject-unshaded.png delete mode 100644 Resources/Textures/Constructible/Power/VendingMachines/sec.rsi/eject.png create mode 100644 Resources/Textures/Constructible/Power/VendingMachines/sec.rsi/normal-unshaded.png delete mode 100644 Resources/Textures/Constructible/Power/VendingMachines/sec.rsi/normal.png create mode 100644 Resources/Textures/Constructible/Power/VendingMachines/seeds.rsi/eject-unshaded.png delete mode 100644 Resources/Textures/Constructible/Power/VendingMachines/seeds.rsi/eject.png create mode 100644 Resources/Textures/Constructible/Power/VendingMachines/seeds.rsi/normal-unshaded.png delete mode 100644 Resources/Textures/Constructible/Power/VendingMachines/seeds.rsi/normal.png create mode 100644 Resources/Textures/Constructible/Power/VendingMachines/shoes.rsi/normal-unshaded.png delete mode 100644 Resources/Textures/Constructible/Power/VendingMachines/shoes.rsi/normal.png create mode 100644 Resources/Textures/Constructible/Power/VendingMachines/smartfridge.rsi/normal-unshaded.png delete mode 100644 Resources/Textures/Constructible/Power/VendingMachines/smartfridge.rsi/normal.png create mode 100644 Resources/Textures/Constructible/Power/VendingMachines/snack.rsi/deny-unshaded.png delete mode 100644 Resources/Textures/Constructible/Power/VendingMachines/snack.rsi/deny.png create mode 100644 Resources/Textures/Constructible/Power/VendingMachines/snack.rsi/eject-unshaded.png delete mode 100644 Resources/Textures/Constructible/Power/VendingMachines/snack.rsi/eject.png create mode 100644 Resources/Textures/Constructible/Power/VendingMachines/snack.rsi/normal-unshaded.png delete mode 100644 Resources/Textures/Constructible/Power/VendingMachines/snack.rsi/normal.png create mode 100644 Resources/Textures/Constructible/Power/VendingMachines/sovietsoda.rsi/deny-unshaded.png delete mode 100644 Resources/Textures/Constructible/Power/VendingMachines/sovietsoda.rsi/deny.png create mode 100644 Resources/Textures/Constructible/Power/VendingMachines/sovietsoda.rsi/eject-unshaded.png delete mode 100644 Resources/Textures/Constructible/Power/VendingMachines/sovietsoda.rsi/eject.png create mode 100644 Resources/Textures/Constructible/Power/VendingMachines/sovietsoda.rsi/normal-unshaded.png delete mode 100644 Resources/Textures/Constructible/Power/VendingMachines/sovietsoda.rsi/normal.png create mode 100644 Resources/Textures/Constructible/Power/VendingMachines/suits.rsi/normal-unshaded.png delete mode 100644 Resources/Textures/Constructible/Power/VendingMachines/suits.rsi/normal.png create mode 100644 Resources/Textures/Constructible/Power/VendingMachines/theater.rsi/deny-unshaded.png delete mode 100644 Resources/Textures/Constructible/Power/VendingMachines/theater.rsi/deny.png create mode 100644 Resources/Textures/Constructible/Power/VendingMachines/theater.rsi/eject-unshaded.png delete mode 100644 Resources/Textures/Constructible/Power/VendingMachines/theater.rsi/eject.png create mode 100644 Resources/Textures/Constructible/Power/VendingMachines/theater.rsi/normal-unshaded.png delete mode 100644 Resources/Textures/Constructible/Power/VendingMachines/theater.rsi/normal.png rename Resources/Textures/Constructible/Power/VendingMachines/theater.rsi/{overlay.png => screen.png} (100%) create mode 100644 Resources/Textures/Constructible/Power/VendingMachines/vendomat.rsi/deny-unshaded.png delete mode 100644 Resources/Textures/Constructible/Power/VendingMachines/vendomat.rsi/deny.png create mode 100644 Resources/Textures/Constructible/Power/VendingMachines/vendomat.rsi/eject-unshaded.png create mode 100644 Resources/Textures/Constructible/Power/VendingMachines/vendomat.rsi/normal-unshaded.png delete mode 100644 Resources/Textures/Constructible/Power/VendingMachines/vendomat.rsi/normal.png create mode 100644 Resources/Textures/Constructible/Power/VendingMachines/vox.rsi/normal-unshaded.png delete mode 100644 Resources/Textures/Constructible/Power/VendingMachines/vox.rsi/normal.png create mode 100644 Resources/Textures/Constructible/Power/VendingMachines/wallmed.rsi/deny-unshaded.png delete mode 100644 Resources/Textures/Constructible/Power/VendingMachines/wallmed.rsi/deny.png create mode 100644 Resources/Textures/Constructible/Power/VendingMachines/wallmed.rsi/normal-unshaded.png delete mode 100644 Resources/Textures/Constructible/Power/VendingMachines/wallmed.rsi/normal.png create mode 100644 Resources/Textures/Constructible/Power/VendingMachines/youtool.rsi/deny-unshaded.png delete mode 100644 Resources/Textures/Constructible/Power/VendingMachines/youtool.rsi/deny.png create mode 100644 Resources/Textures/Constructible/Power/VendingMachines/youtool.rsi/eject-unshaded.png create mode 100644 Resources/Textures/Constructible/Power/VendingMachines/youtool.rsi/normal-unshaded.png delete mode 100644 Resources/Textures/Constructible/Power/VendingMachines/youtool.rsi/normal.png diff --git a/Content.Client/GameObjects/Components/VendingMachines/VendingMachineVisualizer.cs b/Content.Client/GameObjects/Components/VendingMachines/VendingMachineVisualizer.cs index 0f052ef173..1202401d27 100644 --- a/Content.Client/GameObjects/Components/VendingMachines/VendingMachineVisualizer.cs +++ b/Content.Client/GameObjects/Components/VendingMachines/VendingMachineVisualizer.cs @@ -1,44 +1,109 @@ using System; +using System.Collections.Generic; +using JetBrains.Annotations; using Robust.Client.Animations; using Robust.Client.GameObjects; using Robust.Client.GameObjects.Components.Animations; using Robust.Client.Interfaces.GameObjects.Components; using Robust.Shared.Interfaces.GameObjects; +using Robust.Shared.Utility; using YamlDotNet.RepresentationModel; using static Content.Shared.GameObjects.Components.VendingMachines.SharedVendingMachineComponent; namespace Content.Client.GameObjects.Components.VendingMachines { - public class VendingMachineVisualizer : AppearanceVisualizer + [UsedImplicitly] + public sealed class VendingMachineVisualizer : AppearanceVisualizer { + // TODO: Should default to off or broken if damaged + // + // TODO: The length of these animations is supposed to be dictated // by the vending machine's pack prototype's `AnimationDuration` // but we have no good way of passing that data from the server // to the client at the moment. Rework Visualizers? - private const string DeniedAnimationKey = "deny"; - private const string EjectAnimationKey = "eject"; - private Animation _deniedAnimation; - private Animation _ejectAnimation; + private Dictionary _baseStates; + + private static readonly Dictionary LayerMap = + new Dictionary + { + {"off", VendingMachineVisualLayers.Unlit}, + {"screen", VendingMachineVisualLayers.Screen}, + {"normal", VendingMachineVisualLayers.Base}, + {"normal-unshaded", VendingMachineVisualLayers.BaseUnshaded}, + {"eject", VendingMachineVisualLayers.Base}, + {"eject-unshaded", VendingMachineVisualLayers.BaseUnshaded}, + {"deny", VendingMachineVisualLayers.Base}, + {"deny-unshaded", VendingMachineVisualLayers.BaseUnshaded}, + {"broken", VendingMachineVisualLayers.Unlit}, + }; + + private Dictionary _animations = new Dictionary(); public override void LoadData(YamlMappingNode node) { base.LoadData(node); - _deniedAnimation = new Animation {Length = TimeSpan.FromSeconds(1.2f)}; + + _baseStates = new Dictionary { - var flick = new AnimationTrackSpriteFlick(); - _deniedAnimation.AnimationTracks.Add(flick); - flick.LayerKey = VendingMachineVisualLayers.Base; - flick.KeyFrames.Add(new AnimationTrackSpriteFlick.KeyFrame("deny", 0f)); + {"off", true}, + }; + + // Used a dictionary so the yaml can adhere to the style-guide and the texture states can be clear + var states = new Dictionary + { + {"screen", "screen"}, + {"normal", "normal"}, + {"normalUnshaded", "normal-unshaded"}, + {"eject", "eject"}, + {"ejectUnshaded", "eject-unshaded"}, + {"deny", "deny"}, + {"denyUnshaded", "deny-unshaded"}, + {"broken", "broken"}, + {"brokenUnshaded", "broken-unshaded"}, + }; + + foreach (var (state, textureState) in states) + { + if (!node.TryGetNode(state, out var yamlNode)) + { + _baseStates[textureState] = false; + continue; + } + + _baseStates.Add(textureState, yamlNode.AsBool()); } - _ejectAnimation = new Animation {Length = TimeSpan.FromSeconds(1.2f)}; + if (_baseStates["deny"]) { - var flick = new AnimationTrackSpriteFlick(); - _ejectAnimation.AnimationTracks.Add(flick); - flick.LayerKey = VendingMachineVisualLayers.Base; - flick.KeyFrames.Add(new AnimationTrackSpriteFlick.KeyFrame("eject", 0f)); + InitializeAnimation("deny"); } + + if (_baseStates["deny-unshaded"]) + { + InitializeAnimation("deny-unshaded", true); + } + + if (_baseStates["eject"]) + { + InitializeAnimation("eject"); + } + + if (_baseStates["eject-unshaded"]) + { + InitializeAnimation("eject-unshaded", true); + } + } + + private void InitializeAnimation(string key, bool unshaded = false) + { + _animations.Add(key, new Animation {Length = TimeSpan.FromSeconds(1.2f)}); + + var flick = new AnimationTrackSpriteFlick(); + _animations[key].AnimationTracks.Add(flick); + flick.LayerKey = unshaded ? VendingMachineVisualLayers.BaseUnshaded : VendingMachineVisualLayers.Base; + flick.KeyFrames.Add(new AnimationTrackSpriteFlick.KeyFrame(key, 0f)); } public override void InitializeEntity(IEntity entity) @@ -51,6 +116,16 @@ namespace Content.Client.GameObjects.Components.VendingMachines } } + private void HideLayers(ISpriteComponent spriteComponent) + { + foreach (var layer in spriteComponent.AllLayers) + { + layer.Visible = false; + } + + spriteComponent.LayerSetVisible(VendingMachineVisualLayers.Unlit, true); + } + public override void OnChangeData(AppearanceComponent component) { var sprite = component.Owner.GetComponent(); @@ -59,40 +134,81 @@ namespace Content.Client.GameObjects.Components.VendingMachines { state = VendingMachineVisualState.Normal; } + + // Hide last state + HideLayers(sprite); + ActivateState(sprite, "off"); switch (state) { case VendingMachineVisualState.Normal: - sprite.LayerSetState(VendingMachineVisualLayers.Base, "normal"); + ActivateState(sprite, "screen"); + ActivateState(sprite, "normal-unshaded"); + ActivateState(sprite, "normal"); break; + case VendingMachineVisualState.Off: - sprite.LayerSetState(VendingMachineVisualLayers.Base, "off"); break; + case VendingMachineVisualState.Broken: - sprite.LayerSetState(VendingMachineVisualLayers.Base, "broken"); + ActivateState(sprite, "broken-unshaded"); + ActivateState(sprite, "broken"); + break; case VendingMachineVisualState.Deny: - if (!animPlayer.HasRunningAnimation(DeniedAnimationKey)) - { - animPlayer.Play(_deniedAnimation, DeniedAnimationKey); - } + ActivateState(sprite, "screen"); + ActivateAnimation(sprite, animPlayer, "deny-unshaded"); + ActivateAnimation(sprite, animPlayer, "deny"); break; case VendingMachineVisualState.Eject: - if (!animPlayer.HasRunningAnimation(EjectAnimationKey)) - { - animPlayer.Play(_ejectAnimation, EjectAnimationKey); - } + ActivateState(sprite, "screen"); + ActivateAnimation(sprite, animPlayer, "eject-unshaded"); + ActivateAnimation(sprite, animPlayer, "eject"); break; default: throw new ArgumentOutOfRangeException(); } } + + // Helper methods just to avoid all of that hard-to-read-indented code + private void ActivateState(ISpriteComponent spriteComponent, string stateId) + { + // No state for it on the rsi :( + if (!_baseStates[stateId]) + { + return; + } + var stateLayer = LayerMap[stateId]; + spriteComponent.LayerSetVisible(stateLayer, true); + spriteComponent.LayerSetState(stateLayer, stateId); + } + + private void ActivateAnimation(ISpriteComponent spriteComponent, AnimationPlayerComponent animationPlayer, string key) + { + if (!_animations.TryGetValue(key, out var animation)) + { + return; + } + + if (!animationPlayer.HasRunningAnimation(key)) + { + spriteComponent.LayerSetVisible(LayerMap[key], true); + animationPlayer.Play(animation, key); + } + } + public enum VendingMachineVisualLayers { + // Off / Broken. The other layers will overlay this if the machine is on. + Unlit, + // Normal / Deny / Eject Base, + BaseUnshaded, + // Screens that are persistent (where the machine is not off or broken) + Screen, } } } diff --git a/Content.Server/GameObjects/Components/VendingMachines/VendingMachineComponent.cs b/Content.Server/GameObjects/Components/VendingMachines/VendingMachineComponent.cs index b395675156..58e408e3eb 100644 --- a/Content.Server/GameObjects/Components/VendingMachines/VendingMachineComponent.cs +++ b/Content.Server/GameObjects/Components/VendingMachines/VendingMachineComponent.cs @@ -10,8 +10,11 @@ using Content.Shared.Interfaces.GameObjects.Components; using Content.Shared.VendingMachines; using Robust.Server.GameObjects; using Robust.Server.GameObjects.Components.UserInterface; +using Robust.Server.GameObjects.EntitySystems; using Robust.Server.Interfaces.GameObjects; +using Robust.Shared.Audio; using Robust.Shared.GameObjects; +using Robust.Shared.GameObjects.Systems; using Robust.Shared.Interfaces.Random; using Robust.Shared.IoC; using Robust.Shared.Prototypes; @@ -43,6 +46,8 @@ namespace Content.Server.GameObjects.Components.VendingMachines private bool Powered => _powerReceiver.Powered; private bool _broken = false; + private string _soundVend; + public void Activate(ActivateEventArgs eventArgs) { if(!eventArgs.User.TryGetComponent(out IActorComponent actor)) @@ -67,6 +72,8 @@ namespace Content.Server.GameObjects.Components.VendingMachines base.ExposeData(serializer); serializer.DataField(ref _packPrototypeId, "pack", string.Empty); + // Grabbed from: https://github.com/discordia-space/CEV-Eris/blob/f702afa271136d093ddeb415423240a2ceb212f0/sound/machines/vending_drop.ogg + serializer.DataField(ref _soundVend, "soundVend", "/Audio/Machines/machine_vend.ogg"); } private void InitializeFromPrototype() @@ -178,6 +185,8 @@ namespace Content.Server.GameObjects.Components.VendingMachines TrySetVisualState(VendingMachineVisualState.Normal); Owner.EntityManager.SpawnEntity(id, Owner.Transform.GridPosition); }); + + EntitySystem.Get().PlayFromEntity(_soundVend, Owner, AudioParams.Default.WithVolume(-2f)); } private void FlickDenyAnimation() diff --git a/Resources/Audio/Machines/machine_vend.ogg b/Resources/Audio/Machines/machine_vend.ogg new file mode 100644 index 0000000000000000000000000000000000000000..8f7c187d0c37c130b4a2094e13755fd7430106dd GIT binary patch literal 17353 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Constructible/Power/VendingMachines/boozeomat.rsi/deny.png b/Resources/Textures/Constructible/Power/VendingMachines/boozeomat.rsi/deny.png deleted file mode 100644 index 74d3402ded998bf5bc97cbac65a7084e438ab56c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1672 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 diff --git a/Resources/Textures/Constructible/Power/VendingMachines/cart.rsi/deny-unshaded.png b/Resources/Textures/Constructible/Power/VendingMachines/cart.rsi/deny-unshaded.png new file mode 100644 index 0000000000000000000000000000000000000000..c7fa863d4dbcaa5802e6b4ea492130dc9a52c4b8 GIT binary patch literal 902 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7Ro>VD|NNaSW-L^LFmptl&U_@+U>XRonyr{eee<&!PdCmSDDWU?weSNY=kb0=9P1s)kVV#wJn zQnm1Ao@+g?wWS>Edhu@2zlY3CZtL3H>@%!i82w@3Wroc3k<={TEP_m}u> z_dk3v@r>!s4GZF5H2`@oF50WJPcoge{Qvp1Y}MC)E%V;~>-tqv@S=ZP`JYeM8tm3s zSCxF&SoT-zx3+RaM~9LxyQdoHw9AkEw#(bdE2%PBd<|A=2)4ImYBRp4y2xq$ z`FZ?zU9wmTUM_cYi2bJSe&GK6Hi4Z=32}d81P_1=_`T=5-m^OY{1tyYbpZ zb!@9d&}Rm{zgKJ)=>2Zydttjza{aew_k&j!1MPh!6EOX+BYVyLYD?RFzaAuB`5YOf z+~93*%Jgc}eiPwm2@`#0G`kul@~wKq?{{eW`#hKKzdv@JHsg%C$nSQb_w{w5JcVDn zj%!{_=X2cnSixNE%SJUFo@We+wQD%Fud)MEjfD2spO=1}U~XwdpoZKJ(Gxb<{bFwU zdQo0s&HTOg4%M}FdBE`A{GI*J^shgAfB_r5>iqO=_SN+b-+ukM^DFdQ`g{Hhar5U# z14CoYmFLf|ofl(#zSPcsd)?H(FZcznoxdl)U@wSUB$ogczWJMZ%XOg2cn#raU<+2g zanD_Wu(#hdG0}jX<8`uc#7aA0+CJ=Y{dqKFWrINh95HO@y>-87&4Nw#2ZUDrX4Y9y z^`C)z#Xb82I+wowoEEUVzCrZLJNX3Gt-skL9N+$93=6m^pTLRWffStk`;YNfV5D>w x=hnYK1$X5W7}s!eH(NSLtl?y4Xo&sCVC(nJKB|ApRG=FeJYD@<);T3K0RSM_s^kCw literal 0 HcmV?d00001 diff --git a/Resources/Textures/Constructible/Power/VendingMachines/cart.rsi/deny.png b/Resources/Textures/Constructible/Power/VendingMachines/cart.rsi/deny.png deleted file mode 100644 index d62be37f93181d32e3c09e535312f5d98787c0eb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1182 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7Ro>U`h3KaSW-L^LDO%hH#+F@%_3- zkNUoNuplAp7GDsPSPPHR)k{l54(|0>$SUq=y`uXsbCb8VMU;mrhvc8;GVX(XUdFB( zbGZ}^HC_e0xsb-GDqcRu<4wA69I>}2zQ zU41Jr%>J`mZ~x<%AGS(Ay!4t+eOo5>V{+^Aea9_7?!J9c{>jR{en%#eXBeB85%A=Ok_}Jn8UU~{FRN?k7Vuh4J-|F1C|FI z z_2OIq{`;H`YtY)4!+Jz?zX9Xd-*MN9|DRTxdCu&f;FfpaPg!3)fg~;JU&grQ?5^_q z&#o4e)-r_F+~n%eu6vm7=-2j}E%=?q%yZjhfA96ynBrCO@rU`kC3Rf&ZtC{-w$1!k zPw%)}eUQUmqwYSJgYsjBSIGeC>)?gk_9EPHpWRTj>yyeFr@(nFp&q-K{_(^X zAHS*}-{`l^{NA=X=~-oAuMX|}(8}pC$6EST6XS#5Zhx=-=1jQ3{pi^Dy{xT!`OTWI zUFUlD?ZlB4?^_F>X3u5@awTR;*lv+s-p3U`qoMD8^}XEwtf#su)2x2Kn`*p2mr3lo z_#J)GLnnR;c$GbRd_p|T;mZ54#a-P01KK|vb#cme-w-~3_0?(bQr^{QGYh3Pde`sE z-1n7T;#qWkLn4@Q`&-H3O`HZgulWtmZ2!k_xCVuB{T=^;d-K=NmKWJyR?qPDU(MY= z3w~_<&Aj6K^VxmzyX_mQ>i4~b3cP;i9nLTvS;^~X>_^w%m3P={A8#IC#rNP6&?J3Z z_JWt^ub-X1jzRD5&s{$!0z<0--NCF1=XcNSptW zV~4nRhIBnh_0`(gw?5%1vqzj`4PPy*Do2x(!-fk{TefZJXwl%fwW4|Yp>ta=v?P4< zDN8e-_u{8L$IQ8@&+p$go<8^P&&~r0Nj;nk@7K50IkS9FU^oOr4(5`1?&~I$*YQ+W zRivCQcI~cv!no7PF2`=omhJXu!qyyWdgP>K?l}41hTQbWHN8zmQ)hkUo^BNE+`P|} z!EvXTi%aoR)qKWepNjfT9=F;3w?tN#uacGeQoW5qNvUWJlc z`U_}w%`&gw={*~lMgI?Eo^GhN=gw>{^Dy@${;XMFZi-!a^^uT{`>z zzeY{=04*I6=h=-fFXum2X`wZKHwK%`^NyG8XR3N|EkGE7J|xvsbjDBFKhrB^Mkpi(cVE~ zwY|e(plY_N%3W;rO@DJ&G=2SfDdI1q=Y+WV|HBWMCo(WxIIaH5DfaM0&AqumM=*H0 L`njxgN@xNAJ!?M+ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Constructible/Power/VendingMachines/cart.rsi/eject.png b/Resources/Textures/Constructible/Power/VendingMachines/cart.rsi/eject.png deleted file mode 100644 index 7c62b0721d91dafcc812a5121d163b5e85f8f3b2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 947 zcmeAS@N?(olHy`uVBq!ia0vp^2|(6W8zTp>$xpXjeg;Wbq&;-A2jeKI=&MlW# zN=<5Ovbs{1Vc!0#VCUyayT8BP`#tVc#{B1-pVZ#>zW2WR`yTtE^7rKoT<`Ae`Ws!U z!#geP9`B33;*0V@o%>hlEZVsDrtrt~;`3XNTfXFX>-0Z==Y3~^%#N4kEDg6${^$O+ zP*CBEI46VQ#O@95X7MkAjeoq#W)4^xQl)fjRsPXma_oN>u3)}d!|0cHW5=VPH+P0e z9rLs|VY2yn?B0&}vYHJ7tBusnb7}>5yliI@kSY7x>uGUx(^cM+Nh_Z$k9KcYH=8hf zUm0&fS1QA^?u(OeN;15gu;yCUk9|eF`uE>GzWOV2ah1gjppExulnA%kF4$<^H+v>O zL&L_2f(+>lF-!#+A^hxrBa|QfNMLM!E~j<5?xySa@_7~wAyp4DuZ6Q6nEn5i^yCBI z)aH~$hU~id?@Na4-`&_``15od)WTTdd}Ca$_#HimtCH+{O^|ZMw1OYg`X~1&vW3^@2h<^#p%~I-WTR)X~lVq{_-rn ze5rr+>@R<&GMy`k4DW*Ipwtvg98 zjF&mmX&U&LhcV*MeLJz^2MQiDHEV_NNdMNGa*U0mmEl|yhuHg5Qfvj=R$Wz^^JoXd zO~nH7ljS@-JQ20MI(?@FO}H7qTsXiAR+@4ASm+O#KE{x>Vul*sc?;tlTlC{R8B?Y+ zbGB+NxxI}gxFbO7z{`f?($5dx-1N^=<>N#~S5-w*hJ^wLW^ycD+w8IJ&C83WSG-%i zx{6XP8d7wBEN-|`;=m{I!R%qf@> literal 0 HcmV?d00001 diff --git a/Resources/Textures/Constructible/Power/VendingMachines/cart.rsi/normal.png b/Resources/Textures/Constructible/Power/VendingMachines/cart.rsi/normal.png deleted file mode 100644 index a960108cbf47639ac9e4cc3f0341a6a621dbd560..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 596 zcmV-a0;~OrP)X`L20K7 zrBflK7DXMz4(+C(4(Xj|b4hxsvEP#S-sSFn_q~@~;(`H|W*5JV#{L4QSLZGO=r>Bf zpUpt6lpIOEliH(pA20d(=87YUdH6-(zmw|-^a4F6z->YTk3ZO30@-ZVk)$=H%qKtw zJpLdgpI3O{tz=4gj!prRTz#FRvCsN$M~g{5uP_N60akXU5Q7w!yLusI(rIefnhhO6 z(;kq*G63;r+(>Q$&`Odk7V&%)z`@BI4sQo__nHz=3Ng(PR6u>5!?gPb01yp@01N;a z0niX5Kot0_@1k#L&CsT?VQn5s4#2(wr2a}F22@IrS}~rjwyp%V=Fd)TE1=a~X6i3P z3d^l0LLXiq-IiJw2ytrJfqObHqiaF36fPUPV!uU**_(29_02}Jv#J<;`Lj{1@LD3_RH zJ#c-QLu5Ys%jdz6K*x1weFin9j7+)=D{u*HB~$dHLImUxvT8g_0_ z2y_fciYyf@MX(8iX$VeOY7vDhU<_NT6hcY_Nmvr-hjyGlbD!s)^W)s*J?Fgdxk?T4 zHQr{m4FF(F_VYOk`7UU4^z|Sc?sz5=0JsI&=WxjRN_o}YM6sVaiD{viW!pULanGkc(>*0a zhZ@KM2k;>t%yFas3)i7vw$@jQ`u3@)+4$ioEp z-Ss!Q{n3#E-!i1YSRr0Q@l%P`y>qFZ`?+O$hjky{irbS_&N!7N0y^m~#$aS+$YYti zm)zQB8&`@#RMSDb-L=m$Dzg5?*YMxoH}R+B`s^CIKEdFGY9{de$fgY1>-BzOdM{IC z+&nUXJcO%GpG&SQB$(2yLo5FhBJ4oTi5>xlcj5NcGbfoZ7gWwwU!`oSScKmMo%mvO zMM>@Y=jAzzF0H{N0qFs7q^u5IO@4d)2IASQf5oDz(~f*xfsyh2&LOA)%grhSxnPi+ z>A%8OMof#Wi6!RCFT*o`#}MVlDT4E&v|%}Er9^yre!1mM>c`XvW8J%JHm;2)KFQG&zb zJ+`4l4o2?@v}HMw3Kme;YsRHdEMyO*JbA1a_&Vklz@}rLk3D?jHVDz`g(e!f5B%iZ z-8{be^3??*CBAh8xjMMJkoUr(AJA{`X=VX>33{r{@es7*8c%}g19U4b5a126rs`1c=mTaFueVLXY_%)F$~ndc}~T9Srf?Ys4p5j(7&wO$Zqy> zHFo7y$80tjGe>!XKDLUWdc1Y{Jf<7590O;m8SXma(@5d=Z!0scwTfX1Df~lf*puf8 zfHlk-M`lmltInJ1@_2v(f_TDC5U`XG$)RSZ-u@9@p^#40RU3i&3!d8Z9r!~mb>JG5 z(tpwaiENCm(vkKG49jD()$*BE0qQ`;#=}juQBIc!)UciiB6az~e50YgLi)XU(3)=W zE*ia6R^fCzyY-qV_>EZkv4P$&)y4`!;B5;HHb5zl{=A5GjSBYJZ*$ex)m0n^$!`2^zRyNWkp-5{o*g>2TPU?GXrnZ3pXb1G)k)S1(XP#;6Q3em{Ll6^ zI$`te2N!-+pN=;Qh1ZYjqe~4~VTKEYpEF@@ugZ5gr=%q1Gn}~3fC3}s^%X3G=8^se z$>W)uI7tPGB1sbcHDSlrK+MI!9Vz$i7JD7YHQ2&u6CC`Z4dsgKv@X$XdF&0Zmsvb{ zoP(3KNtx9Xrc<86+&M_vfmpD(JSMRWp0T_npb6|A*cFM^6f0+?y4ml%S*1=yBl6nB zLE$Iabz1>%2E;>1n0DYD&$kBC9j^Tyg^Rx&nz>nB_Zo4@!_GB#)?K@uOTIAQ#kn_r zWAZGVC}9=c+ov6-%F`l-^Y`h%TJR9rp-SqlqQJ4wt?H9xt6Oy?lY)Gj|3<&`2ac10 A6#xJL literal 0 HcmV?d00001 diff --git a/Resources/Textures/Constructible/Power/VendingMachines/chapel.rsi/deny.png b/Resources/Textures/Constructible/Power/VendingMachines/chapel.rsi/deny.png deleted file mode 100644 index 8821a295f28533879bc78e823a760120b8b623d0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3051 zcmZuzd00~E7rv;8<$`0YTU1U?i<6e6B?_80P31&cmTOp+ZLT?LD&QVDrDkbaCT^uA z2`U-3c%d;f(?l~Ra}3uM+?7ob_+6akndh0`ANStxp8K8e+;h(RzTcO6=-^)6B}PjC z0MOm{vx^(_WIpy_H+7qu5J6)dLVm~T5fS4d^D zN(O^;>G^eqf*2SS)c5J}k)N@_YJft-e!;wgmOG0(fQo5U%I#6~(jEvL(9Zm`T(sL6~ z2n2T+;!iL=ETq!Lt01-2wgF)R@OztvE>VYWpGnb6L?F>MpmMycH*LZNvwtMFPo@V% zG#2ZDJlqnhto^w>Nk0^4@c5!-2(kT*e{KzahkA-sT;k`s;2aeh~OHM0xjs8e5E#%fr8UeyByXO0S_U5H&r>IG#(pC;9%1_=G z-e+vq6L<52RC-NJd!gwk{hBpOjJ5e~Wc2EJ@FMUjcP4?ts_bS>SeU!9w*Mif9Jsl= zFy1!gt6y}q;jLS@fP2Pif&pQ~o9$fjR+h_qdO@UU`Xx7d9{^;(S7_rOx-F(qDAY4) z$;4O0tekH$jP|EoP0?4im-Jsk9I@C8f=n(Gd*E;((x}#qt_=Nlyb@L+eik`7&S$=) zi!sAUWap0Th;lrVGGech-luP8E(rGEz9)Hzm3#mSu-BbbtV_Z*puDH>} z>r!f+?~KxoKUJyKR24d2B6jllqA1otYf*-H?WG=`p0Dp%;->f=n|*3R3k%aqExS3{ z0eB8@2s`wng~jJ4zJu8*&)Wp=+HJY6=7%?BTkYDF>as53!-o$Q4DiKn+%wt<(zL2x zU+yGR4I4()f02QA94~B-%}3A}DTp+6Lt?|4b(yiux*6te2bH!6+c3 z2}YBgFKgRMksml{Al+nFVnYUUV3b3XNT$uGKF<@`E!GEeo%4y-pa>Sq`?y|Kd~S4f z)Wh4``JvnE&h+3^w0s2mQ~`qN5W_fCd3mOIX@2ly8QzrBYd#rgLiAT>&7R1ru#cY6 z0LCs_0XalsS>$F(ahRZ(L>wUYz;3XIGaFBr(R37pAhvd9rQp}DG-KOP#e8&NU|>OM zDcsrFnYz;QcLNemtTQ%ewdXT^O}W(0nYk4csu{XExh2^Y4^j5=R4*)^ue}t7LVfP( z35xllU*xSz2%m2~uqHx3=1$7c-0U!wQFv_A^6w2&S^0NoW1pTtEkzAD%$DtBv&toQ z&RiYt4gimE1l|Ssa;2ttMh=i+VjV=SKifppyKNju>XJ3`d5YvLx^($m|qWB zmUoiGU|(6scUQtrEFCbuU)G_$|W1x4%Yg3V6LSVH=EI6UkxD~qFlWffSVE*!Fd*nc z#-j;WGVgsJrMH(NOW6uQz(Y;fN%#*Ik{?4j;-0FEdu0EASg6jTp;7ww2Hn0$h%3Hm znR@HWagttqB%|QJ`G*w^YY1!%vj!YG4yKM*Q^5 zLi^p&(=p|r+lKh1@^D-2CMboB32{k6ErT@?$bmZ7>I4!r$>LXm&r#YYGP4Slag1hX zl`^(^e^o;;YQ9_7^hU{?Y8tW9Bl(PHO{Dd(7kC*Hgj^;{a@;!xPY~pasuA&SkCPi4 z_kC}$I50T)O0Cd6wn)N=iG=~$+S;NjpDo7;D~fE^D}%p=y)A#}VX-csZD!cU9-ak3 z9A19cxk69jzV>`xqxhrGQZVW1JcBquTN{>E__C^GQA`8(32#(`*O9Ao8J+blDWIC z=2PMHFr_j#E1i$%bpSe$TyG=ij)dve8v7c8OohCp`HG|pWBlSUT_6G|+sN^JB4}e$ z;2?cVI>Ta*K@7i6HrMj#)T0Xy!wHU<7nU300RVGjR6pq{#lHGCFLtcWM~9(yj6KfF zN4)?#ajYD+;|Cr+SBOT*Tc+2)-2wDJVjpCN<5Q;z`uH43UZcpC8x?G|#buE4Mb5+H z3seMe*a3Xs2{8gig{`SnQE|FfCR!>^`;$2zZRL_hc@#DL#Ajaiu;P|<`bYZ6F#lvH{!I1I`W##d|Kb|v+Bv!PHyCWss*o@n{F z^?f4y{PAHsPfV-Swyf&k`p$s0;~V=VH~#yJTGWZeY-4LHdb-}g)YLS6zsATNy*7j? z*!CNHeX?3HS$-J!w>{Boxr+0@j_-~to$({v*c)};KA4FZtu43sNmWDk$CkJsQ*E|i zGl*H0xf(gNILKS+_6lLV-$tW+cE_)O1PHw@0UjRA zD>Y26UZM3-W;UYo;xU1No@eZr$;lBMGUA!g@UmO!nlS5@9I-hrJh{-Q-0yg`Laaux zYUm^=C`e|kUV0XX$a3GqrL1WqORPI`j_*icTYWb6bY;@N^AlFkr24EbTJ{d1qN2($ zdK0cBggy}t9AG7BC_JIs!})I$X)*>PZE!e8LIo`oDnEVa^9&5Fqt57#{?9t09%uK9 z(TYS|N1S%-5=`ja6AgJx>DG65QgsR3VZl}equ5=aXyn-~3*)s^5u5O>%g%hWtL|0k zOyqw~>2!)Dg24PFX)vNGWEku3AM18D+)d~J|BPxkv#-x(Tl~`aIVwbAOZn2~5;Cg~ z6G|sA9onkARooSo5DWg9_wn{wM{NTi(opE#4@y!xy@y$q}m#ah>E*Ll#n(@HSUWy#~+HZ zJ4;xy5=6|otiI|P=}N>Vm<1*>cCft|^KkJX^A12HNZ~d?2W-Y^JMm)VV4v(An8}?zJD$so}>S<{G1$Hd^&tWJyPA zNBds8xXD1oHM8o?K7wC*Geh?DV_dOmlTXBhrD(_e8!`&FJ}&BAllkN?fNB(}>vjl_ zOiiVBqdXJW*uCAX$U?YJ_iKpI`_PsN<@WSxkpD&wNx!yfZ0HnSCj3XmB+b+_YwY{? z%yX}8EYda|D}>B^$TqUAvC&wJ2?kd|j*#|TVHXyT<~jOJ_093nuJ$+Y{<>z?pS-Ur z(Js&Z8s*I!5Ts$phKuB5<~=GBzQobZUx_w0-)Jh3)3vtFy?X0^O9WZrH2&(yJJgN4 zvhn+MmIiOSb{om3%z?vsqHj-5{2xEIKg%GcB!cVHknix~+vBtO##Gy1LVHmo=+HU3 zt7-3+7{RBnPbOCK7bnqv`)ex`b;s5k2-}fjuGyc@j4z9@+~;~g9Bcm7-={q5-vdu3 zD+Vagk95{3^ zzFOxk;k@vc>0jw*bCePRS?m*$EMj3H_VErPEkox`4-qQ-{uO0vgjaBlS?dvH+1Ds#x3tym2MD_@jHBZb&}`)|j4xq#oFuxsNrF$oD| z4O??d2|NCC0lZtI_=m4z2;SK zrt*J%%?G7**FLh#jR-6}yse~Qz$VAd{j#)F)N_5JL!?XQR-tK~ewlq-#~x&h$1RbU z5S3L`c7H3Z+u{Y7WxOL_y*l;S!s7G8d`2u5dofITFwY=3B!tYz$7g4;Z@wOPoFI-) zA@`<+bNlWrG$x5TAgmO1&CJZIJy-8S7DXIDIrwZ;Az0_P&wc$mjgXMg!#sUOZ|}+` z0`rCL^y&HekctY4^}2ml1O*+x`S({eme$tO%gb%Etucw>j*JWp44IjkMb;gR92^|) zu3L~sMMdpKF}7fpQ^xfBf2_eN||t(sm^J{c|w z^4b1N;4=N4oKgIVZ3#MqAV*ZZA$o6e%X7+TJS^Mlw(fZ0*>mS^!bMx#+BgLS!tQ^# zLBq&+x6XHWVWflyUxZeMzv9mXa~hMF*m|%zlPKxRAtfax=}U6WuJ^KO!0v-{=g$*Z zsV+ecBh)M~mipU~tn%au|JScyca{byP(kYiE5jwI@Sm=Fgu$bSx|a&UL$V2$cxdPjIRw zxnyz2k46>^Hk`VbKj`BVmYS!tcoxp9m{SFyk3Tgo7UT54)?;d}MP>EH#4fsr^xz=ZW7fV{!Ko^a^nKT zM1dK)bNWZ9W1yV>feRu@)b83_e6OLvmo}bJUDiniB?^?aD6>7ZDg>_uK9sf7! zhR2s%G~Fp|npcSo#2Uy3kh3i`U(f6r*p8Ox|E`?$nP+JZV^V?4&#PC!oVJ7bUGAv% z;xw)3GQsyBKfd~GTf4crd2e?}wEp__(f@F3WxOUq-0}AY#0br~b063CAu(?DstHLs zo@vm&G7qs)H;3)KK{Tm`r4umRXyJ@-IoNna#ZsJ4yRgCkJ?mcbY}I^9Ow+P`YfxNZ zu``L=PQqV~MGB>YdI2}qsO^?|+VY5^qH80ib}_fc=|koD`SZGu+u}Ak5=dn>u;Vpe zZE<{hN=li^VT_L-txwc(a1;ZE@>xg^QBwMDDct&A>gjhz6^u^y{RflFzsnqoJy#8@ zyf;7co7EdDN3c3RmAMr{6$cM^w+y0JYGr?G>)i5B7?&jgwR3cI+$2cr^*^VP5C)dr zX^OpB_m~onM@#KE`?59YX`&YUvgvP-s$ib{E>$%}VmzYw9&scj^RXR-26D8P#TH61 zqIR1YD7#a#bAATTqFw$x`<+(qILf^}-<8nbu5R%4@rzflh)GCV$Eu#*R+7!q^9Os2y+qzr2{~tSIp{V0*-bFroO$P=+D)oM%4!#7dwsLK$JU; z|FTI9_**0|C>TybFSzk1gl%gvJ5|_WkRO5Fj6fn>R)(*8jN(_J>$DO=?r`?J+=*t* z3!|YzvqGwRPwyXUCHn*4kPro=)U54)nnFz0;cX+O1Izi=91UBb}*dFn3_ zYd~Cx(T`*^M^=JPa)iX)pqcAa*0y(} zv9WPUz8*?1LPo!oBfDKxpt^9X;<%JjVC2ae_ z__2!zBa@Eu3+4GE;0`7)62Ikl?{M%@|8V0$p9A~yJ{1K;3Bz;0NQ^crEsdRq#-P$A z9qvm(NeNbmKwE;4kh_34OzFK7NR%8LZkyA$8RP?NFNQVW96I9Q(8*HQO6B3ZchS4Jo4Gio-S%h)G5@{Yo^>&FtL1cVVf{3W@C>WWJ8HQDRObij?RJqaM9$~R z!^1;wUthPS{wqg&t7zM&NRi~jh!9h*r2Ky9*y61p@owDg=VQ!Q|4LsKm00s)bvi)Ph8e- z&vI{Ngx{d}`RZsz$)hGxNMYaKGKjQvbXd*(iZje{Y(3UgZMbPiOfs_T$eRDb;7VTX z!FrzPyKuET>gt&qsd7u>0U^|Ee|tZv^?!K~3R#i`6~(Et)uY1p`S{@Q@H*g@dncQl zoA7r}=R2*iCx-}t3*74O8d_s`?7GtkP`^0|pf+Z62Wm!}3>KPooyR zZu3s@wqt|RUU9Fx2Xi}v4CVIGKaGyI$m|-BfpOPE%wUC$rtGo&iw;ro> zg=f>)6-}H*em|F(~1F{ra`2!=Sos&H7kX44nQ$Wu@fF$;mruFF~IB?-32=*Dh3B z6iVuoGMM>q-X6?1Qh|bEJDA5HV$-Q>!^Y2vqhu6KyBl{EfzZ2^ z>Gqd;zfUSCAuAeG(OzuGe@>{7;%S$)Uo6kgj!-a(cVd=#g{Pev^1`~k zq^61)K`6yXyURbP8iNgLy|4H5^uTnqS|`u^jM(nJMLjZZW_E4`yS?l{IB_eGCaShp z2I54&$eh4oFfSc&+VhZ*nD}^Q7z-tncqUXH-2&spj%11RbaYu+jt*t44G?6ickh0@ zmn@DFUOUUc@R>9fD*nR)V^wI|2fn8RKLROY=eU3%))QTSbwhU63<@(q^$-oY!{-D< zq*Lqb8t||NYOr~!$c;ua_4krdBPBL5@7}eXb{1vvA^NY3XF>5$p%^R4pwt ze;;2@RDUvF9amsdLsx~KAgaWjcwIoe_d!(SxH&kM2lHp3=)Z{e6L%WB1B(wIbpyG2 zJnZbKD>_*&8&ir83r#5{ClE0)F+aMxB485xYP_7`uUld?+7?=cgLaKT7)}>Jh%}Btblb%VqPA<=gM&U zh|OZFlg6ux3Tal>ia@mtt(Mm7C9ZvR_vC-#yqCx~cf~ZDmj|7blX)zylMd$e98Uz; z?D#3!zNj(?9V3rFwzOB@H#R2x>be;|N1(8n8)14@P23pj=BwAQF9F^MyoOKw-MM-~ z5AzMJO6qp~D>JsI1_K?+pNxEi0`>aUD|Tov><7O5SznLnv9$y`#M|3DG9f`FRW5*e z@A&BGO{2Lc8n~11BI}}7zxbR3t~QcsXlQJ0Zx1*^Wvr^IN;<)`CGc@Rxa#L3TSyqj zB$4%|OOSWwmbErrecX8ZTk2Wsr&2XU&@sgB{+imN<@7oHI5J-tjV4HS8}MHF`g7wR zE(OJn&16>NN{g3{-R7LrznU0`8LoQDGcqLTA~rxQi9KB2)|NP2R*>l`lT?e#B8ZG@ zUM$5v87;r(lV2W$Ec~pReg8v_o-0FaVar^`m6Lr<$M3Q2iy{VIs}Skx_<_y+eI8EE;OEbY&z(EB(33&t>gq~$TvuEB-By$^M=jhy0{cv# z@P!qdO4Wmzipa!R5-b0l>5@>u`cL5z!IPSrTRc!5-a2e+rST6aD0(`7Ul?-~<;MSD zyt#Vw_{jJYk4jC%3N`?Vh+N#inh=qtaQLP_xAHAiO48z z9`IY2cruKNh@ghf=<5~VKWl6E0h|+jifo2b2!QtI=;-Jp9MD&-%Z2Fs5d8x~_Cp1f zy!&iWUzJUKcp$4m%X5x~hJe?DsI0+KIO@ZP{FFcEb=q97HmU@mirMWvJ;ed?S=!iG z2q%iVCJ5OSjUE&pkJZx8RCmpI1}hx8y)>#Vu^{eut2j1xD9B>`thsi2wA_*J0x>^~ z7~W;vtl~4iCt!MZkO)P4>C&ZGA+r=nFTK6J3;mzZV~+Q24mSQQReM?d4F9Laovi-= zpuIVQt?T>i^FUR&4$A|SY_~4)mEHh^%xhH6j{sm`F;VODy}7yAe&DKykD!gfk2qjK zcx`-^Lw37Lo41?Ayc(O?n3!^%&NDF?@t)FOU*?^#8vm@*7TUh@OJ;A_qJPtfU@q^? zWbAfE_~dC;zm@C4C44&B@$?f`Wp>IVQr6R5e}7XFUiD-|o{Sh5KW+cvwnWhIW^Z*A z4^df>C$7;kF?IuAXr15%sQ$tBY6Pq7FFbJpuyt`DmmZDTV`B5)2;#;rEZDLJ9z3$5 zBxM&BjRn3Iku%-^agqCj9nSX?_yl}|JKy=CZ}uX;zAqs>a&c;bt^<$4sHR(DeGkt*c#s(BnXh^QD|3D6w^Q4NKF5DLJT-NtR$afaS-} z(GS&SZIQ0|#T}^BHvN^;!7%)yT^O01P6bUoe`hf zR@xQdE`AiN8yFa5X7Y{;w5^xfbg{yelkuvF$O3qZ<eJ zPN9umbJjGTRt)V%idVeWk!r1xvLZP%P z*xAM(?;wvBd78snC>lU>xQXY^0^4>{t;}6vU{io_hzYhZX(0VF3fj;Em=mF$Kv5rlP zFSF~9DmINYc1Myq+AAL>-o^efni^eu#=f@{V^n~lcq~hoHt_7!k9_LFAJ3TM%Qh<< zN1HQMW1dta)AFKlC)-^_MbKSWd#xAHExL%(0K@k1s%}nN{DR<}MzJG^P8H}>4`yRD zfL^uv_MCiw_t}O0XOlH~(h$@K4>X&JQk>$=MRxbcj~MZTl5KhpHC#%{TDwnu)>uM% z#rgNJUctQH9B%gxzvyqXYcwqq7$z};g-Hi{?ZNGHDi$IvYQ)vF0As~%0yTXJp|!6y z%FeQt62}vE0Ii@!1|lE=W*>N-$2uN7l9KOW2@?G}XObqWE@0cA6ZQK*;DyTm%1CgJ z?JQt9Jf`MU3C|fFg3bqclJhh)jnEvVw_cC+bSp@fLS9eZIWzYb`&9kfWPV|~9HLi5 z{XP0!*XIM{PP2BN`RbW**Vs&gk?mlapSm%=PP0_%2;` zS^m!M2y_6%ymk%H7&}b{?0;}y8)E=I6=CW#M_Z5CGpacbXOg%dV{riFij>dRWmZ;J z8SKH#($r(<2>__sKjdhbMB+MX*6Z5p?p%~Q(l-qYp$P#gY=R`RCb?ui_v-CN=<_uMrAVjcN6N`4V&lnr_f@C$0}ir zB)mU_l$0P*{scx!zton7h>U6$AhcEcyX*cq%)acZbXd z?5csP{4CMNEbaOB|6fP`!1;c!k4t5ey>8dmAoX=Fdg*msxwntc>x6^^JUa)Bs!}JX zn^kQ~+$Qjh;?z~brf|%%FYDgpk@diRp39f-fY9K7w3rPv$3pid22tBceUZoCPpRI! z_W(Uv?wEWuriFuXTdj>%ad4cYrR7r2&{9&`{UGUjbLA0WkWC|O_>X`E>~RraJTZa9nd!}^113K|-p!?}ckAw0P|Qs$7rZ&Ixb(DJsDB|x&I_dyj;MxddZ z^xqDv-R_hYuL~a@)=!jrnl=0P@2?-B^mwXcsY^)-+9e;elpuFx>yfhoLyK^=Q=ugH zg#yDb9vrW7F&rF7%q~4(sPEsu<0-(Sokbnnn*M&>6AZ>~xabme!FUiC8L2Q{?ZL98 zks@ON^g;u4k3V2RAm+R%si}E*c~7DKM;mU}^N|GL;~%(J-Q0)w3fnV|Kj<*7++U87 zUZ$S9ii7HTnVnssZj>h0$mtdk@c_>Y(byY+ecyFhgDjApMHt+xY195LUDdU7W#x&u z^MpFI-NVIJ6wrfe+pysQ4sb~CMD5N&6(N`c@_G&=2Y=8s_Q%OI_Y?BW3Mp-GH#+&d zxe0^Z4focasd^rJvaJENTm>jopg3lSzgpBDOosw4VWCNXko%D8Q2uyD1R755&}XnQ(A<2xWa=9rWDNF1A3!-g=8#R>|LAh7Ec0H7V*{WMl(?LNO`Q58CQ>%p_&jKi<#+?d-K? zT;;p_<<%>h{jsM@wza$4`;$mBB_->QBrc2Qw^6{AgkZR1RE0%ExGr5%{NP$-F3M;H ztIu;A!7sTaw1@^tuFho~^^{|U$RU!xwaxR`B1ugAML72Hg+@1fc%$I$wqJ!D@@1me~ z>!haTV#fPrYe8*5Pu{Y1bx|7RvW++Trba&soKDR$_O_gNwBXa+(I{d@7LCKy(2X0TOcH^0-ZMT96 zcOCncD_4MaipHJH%O}-%7^|f3BCa0#shK~Z{&id#6X*E%?p9zYSN|+dmQ`i9SwikD z?bTb&wBe?#KOyL@Gj#z=#br2PQy~)}yT?P%C-%2&$TVZ?$Jc(lxyGEtdx;zEmzLb~ z$@PSU?X7j%4|&A)fBwL<&hg!2kaD~HAjUL1&`2Z481wg~UT2B)qT1iC)Ceh|hfk49 zap;zoCygh16@8f{HtDN@(k0;l9PM?bl*<&@R8_@pynkcA+SS%pv-&I-=sRvnNqy)u zs=h{8W1(Tk3we;vSDn1DCqDR<^@4)Ff2efl`1lyq7Zyl?D^3Y1DV>QTHh1pT8AxcV zp`kw{ARst6I2axm1nvYvq`0JnWowiebr(Ca<&sgHY5kB#ntDt&O+9hjlHNF~?aL++ z@qu5Ye{0JFvV<#q?>b_m9%Vhkh~Pp=ZFa%atpmaNh@7dOjE48 zmAT^OpUCTgEVCbwbe;b0NTdn15hNRuc=oh7dFYm4z-8JovLK{30O#j;p15>t=(7$P z7$ml~R**S$b#;qCT*I<2CMPsJBqAhy@(?9>M?nDr1z;BVR6x2;U&#?c4`lCjija=q20MBPa>Bai*&->A_|S@7MzY3^7(sC7Ey z!h_Zpn$A@DLjST#MRElRR+D9S9&mO54S$}I@k^DwtSlz{1W4Yc>NAFq?Yb+rffu5a zy8o1CxU?Ye$y`$kZ$QW!XMl0KuJ0+Kn`fSOTgUl^2d_qG*2If9f`KA4XLnQc^TP=wV`6nP`j)1~ z!=dp3IX<0~K(7Qe;2WMR-YNt+Ij)2%l28Ahft=+vD`fw^fksWRS#*}Wri)NIL#r}YQ!&X0HQ-{Xc!v*`oP z^wmQX#Rtl^Wt*B;?u^hmk`g+Q`9=Ac$pQACO=bwW2uY_^Z+Y|yKG&EAWRsve#LI$N zs1*pXtnQ1mq3P-ry(P(yc>BI#UrI2d=YqBB-v^-{KMWDLV{Xo_A-j74kCZ=Wr(D%N z8jB-X05p*K>66reD<2HF3Pgj~hb1K?q0G%a^tcs=%^1jXXq$Q+PR@y(3v6j^7CAS0B;E)r%!3~wH#xUf5O^Uv+#^+ zLNf5gt?@sQ@J+RMj$3>b9v+Lv87FG3qNmZ5TV8i`mMVE>u6JJwr%$S{%!z7O(jOcjmQfxXP~` zcdkg2FPlR5^W`1>xksJlF1OFk=qGy~#BH{LyCt|HhJ~-niL|eD3vh%Ee4~b|%clek zOUvE5o)rnEq8bZ@q!RYH&Xs8#2``N)rUmEpA!ds zDz!##4t@T?CENEMOElscjC%8-8I4mAUrY>_Xec4~A%3Wxg*i=1KtaNUgLF-v=l-UI zJe({o_w%oHm-;;+aU$74#fIulHX~Q<#H^CvLp1zhIg$i-LP;+&GX8=(<4D+z|62Z) z9#xt|o}-gZ1&Ki%`>fAz@5Hc!7+zD$%MLRYx>@yclTnF?QM(2X=qJ@s=g0{qTprGZ zBtOONJ;M(R_jAG_(@HY%43EbAm%c!fVAP9eVUy96-dpYkO@Yf*xEe|Y!}ca421;= zCdu5*TYsvM%P(^tXKy-B#H+p`CE=v#z)U_u*pF9>g;23n|B#+!5PypEVnFd9-+0zB zhBG-5`1c#Jd&I>O12*Y7S8fWN4>GLS(#j?h7&^f}=mec*NNf?-Qi$7H==|*Q`OdU| ztpr|~eIyS-4v2h7p9txbj?qns{;w7)@Wkee(A{G=mLm)X0}h$DP1u`o-GwelSXRGw z@{5vBx$kUACO6}`f*Yrp>ts41f%1OYq^~7*u|8WgOQ@gq@2kV|?yJ8i)!~MC^X&$0 zzo}tP`~?PLr>VSV>KF6a^~(s4m0_(C-Kl4Af$9DI{ULtZ%BeBjhXWB2kuo)s^83U` z`{By=Gy58epTe<5_?FsLnIp39vs{tk)anUyjvv}tsN|Crg5U2lrr8sf) zxKf(VX4R6%9NJ6t@!x6EC8F5nemKH>BdH1Ki;nX_dnO0nS)26g#KlyE@l4N3;myCM zF8_Sc3gr$8L%;#=U_~2|u;>3z*9tiH1UQkl*l{P`7}4fFm5(oT?hDtj3QZPqp6ipN6+&^F8-?fS*1OVaG)GO~;e?9|{PMqb^@2xQZuFfL-4K1vjAq z89^JRq9Hfo2-Ct>&3;4_+^!dd@_pi~!w1f^sM0fpx5cnVhh_iz&O%9en-rm@G1c9} zoE#EwbMj2z4FQPq^E8sQA#2mfqElY=usHkre5(6hj_&?}bo&`SJz~OtUl#ymCp?7r zr1*#6t|@Rn=*>SDt4>DDzEw)A*_7s_S#UZ@;vyWU$h1k4WK7Q36Sj7?#iQ5(GTyqF zjIUBF6MkXv4JIpb`!OVk)Bknd&>us`#D8n`vo8~don&SFKFCeQg!r!7Bw|Y@l$Vv# zrit1Abvbq7tKnvCaO5C#l*nam<15i+?m4ZJ=GL3Rehi7$_o|O?N5wzlShb}>teIZ( z@ZcR5eDnQ9=pl3U*RXiFUB-TCrTiq*%O*~b`wsH2&#``tMhE47<`#Eu8{ntOah|M~ zkaJ-nI3`&5%SiA`JbqC@D3)n}{YMgBNVYER}z%Q&W{A>k^1scVhFObuBxIQOQOWjNOF zmHa+^{k;biNT`gE$kTw0TbV?oyQ6iXFlm6I_&PK+!?4WWxY8vEbo!|G?^lY@An874 zAS%+lhLF8pDGRcH=}0rg_1=m>2;RaCzpIR!gqJl_o4YwMAh)n@X!+h)otb)w1+gR9 zk-sm<&dx4e;PjWL=a*9yR9&{*1u2(Uu8LNAi4A0`dZBrt32+?TXF9y6a?tFV49a)M z5aM~V6e2x6T?SZ;CzJJcEv%XVdjWXPLym{Z9Qdpg0^LkZQj%e&JP!|0ZL|SX2!zHW2#1RonRrbCQwZyZE7lImtisyJD-ZIZ`m0{p%8-w zCd;}=D68<0Bzbs3053=murV_m&#pF*laqtsZ#zBYhq&Q+W%#^{7;xYvM)VEZ)D0s* zJTyC*Ak<_LHWuW8BxL*iHvTOC_tysw-dIUQ|k|CjYKUTU^%Ig1z@8x!3&DzR## z1B=5QB_(1|BZ1|hL?V%Il{rD#ZUoa0Xi>nUJe|a0JkSo9+t!5fAW*5W`pm{l|7>o? zdvPS%0u61xc`S7Qi6346UDo#3PX(wLS>GLV&|6S$GogirLcp1S0+j{ff3o?rKi?=} zqRtP5>sJX0^n4HV*kxqK{vfWoFKBLVZ#RvOCht%9QKLX%yavpd7|w5NwiP&&Fc2~T z&FX_+5{O`+EQ4EGTFAK1Ywg!eL;%62&kArR4t#ot$9%ypt;H``foF+^pUF?3J|{p` zp9TP7Is9aBRC)=|c5{h{=qM?Ht|G)1uoLAE7ARqG^nASro{Zf?y!Q_LvK$=Rp9Bd=+(w-6AuRwk``SQ>` z;corf4=g6sn7X023~dsy1q_1DXKk(!-@d=QWouUw)3anS!(o6ZPSS$44X% zdxlNU*o497UoKSWH~tqFYWSq2=s$v=$m`d?uC_oZWk4XHv;*z`hvEm`*HaCpc74oy zOOncUjGFbYu0HO}^dZX8H@)T6Xv=uv!ewx-72EZ3@2cme#ECF{p47`X9I&G~xPM~! zfdF{6LQ?_9-=$GdlwbAOUO<6Bx699T{=CK0!SPDh3~TVA9{ca~sJ!T08w8GBRY?iR z8a@sV7)?xxO;`MH5f{~?kb29=#f&q;J6uD1h>zbWiyz0=D20jN$t7Lul^ix1WktcP z8P|IE2#AZ9D=lRh4FmL7!+;Y2Tu;{^K+lj8ftDCuG2t5umegX8<%db)j&}hw5`aVJ zA^o@E5}OF?pBo@12}A6BYieSU@peg1rDl_3MuEeq2<{Kx<$-J=y1hImC6@awzV7VG z*o!ENo}&1T8D(!?{hTSHxnFea0Zvty-@$0!b%Ym|`=QUm!hyaB(O=w+r%MsAnk~Uk zWDGn6!a2c)2u=bmZ~@W@ndZeWPSkh_A@mB2wIaTPa(Dtd zR8rNtUXq0S?+3O~GDAJ>bGi-035C_2$G$@6Ra>22^@M%5wCx=Z%X>c^hNDfIX=`hH znydRc8e9iJP`P?lgwYt$;Ru2TcUw(HrCqY*L1BWvpOBF7U%nrp$5raYcERd82evLQ zK|#D~2Ex)sY0o@sEG(x8uyf>;{gD9n5okoC@+XhLhtZxaL9OX~1tc?z-b_{C0zwi@ zeP4sgUAJVW(ui?Tn{l!yreZ|%R?4#e!S_;J&eIR;RA13+76W^oyMatr$f}C^E?zSS z($gk4)7Rx!ojlc^7*>GC9NbJ>V6)u-_LyFlQa??us;0&->X7h9I#h(E83-~hU}HQy z2IkrlO3WJxp?`T55kWTfDZx}b;S>(Moc+zXHX-y`R@Sv5PD`=0VFQ?1hr>!aklCQXQ5 zeaXo)r90gbQgYyv(5o)7`fMGy+}s)LGCSMxvom;OJ&y5&`s#x(nN-yV8f69=KMhRz zD#PeR2nK@#y_SdU&$@s}!@;q2ypC1_lzf`9A>W`xIiMc8KOnc4^D9Idh~I{V#er#y zUg|*N>0kBabzoCqQGlr~4vabp3+%@E_9>7a9M>+@)%f16v1aWpuL@B+2}l)g+0kO% zlGk9&T-PDB+b&XEB4(UT|J{kfa30mPy%}K@E>BhDII2;r5MS%9%&IB%Z_$At+agUF z&k!1d|N65=ffaR{WT3z)a`H={UxWD{O54vItqlADNOj}Dl>H-?b=TDtUw-QDUdoLH z&+2D2m(}5~M4F`ZValM;uv$VOFiW{9jn_j&tEb9+fD=u4&rseAPp{0hsj8=sbkRCI zsIIE%3}9b-*_S3+n0d3Fywlia?fR4P!aT~wKntIS?bb+}=jbk8Q?tqGLq|dszJ(a% zskl$>89RMYW)2o%R5U3wGxG{*H@HqcNCx#xeO`dQ?{}RjqlD9Y?w=dbt!_gwLjfaF z0Ht&js-0C^JZMMB9@ALtvGYX0{y#=Un2f^L=*n41=MTLcs;VKS>X&#GHau%ZXINbK zo-wH=Ja6_OLAz^D1=TW|M} zXs32t1@?(-M~I5rF_W*+Qy4_}W8p-7@J4bfzcmLc-X9!dqRtcV8APlRcoQq=i7J8h z(I343Czq=f<<9a@1Q>SYPBw1gU9LvXb)TqST3cEcIgW}eB*vGHJ=ZO>e<09L^=H-F zvA2f1f!bczW2X0k#MKAxVI`ho={~n4?!SMU@zA5?mlqF)QMYh<%&vvog@9A%XBMZfdU`R6!{gW9tMK@pn=}ZzY)Z_ zJ22mNuvf_$jSXnB!~%kMH$1LF7Mp>T zaT!u0EVdbNQ9gV~2T9HXY7!nSjExyXvDW~(iRFRxb2FbyvfF#3cB(FsiOKsVRo2XD z4>*l%>KLuJ3iv2D)uXp-ALZZ6nRk%zN|LzdD$4|4gOa5+Yq`BuIKA%O@cVLj0AJm( z>R*k2G(W(8|E>fmDPv;X3ryu;U{QjiDNwg0w$k0HkT{myBg=YU^&2O}Z6$$Qf(oXwi0ZlS>Vy8`92` zp|XD`+fAI^W1;CSNwW)(NU@zEJ*83VYEk0ZnkHVmm6!O_@LSdg>w?Vc9xTnmcC55{ z{U)uTDgT5Y{V(Ens45hvPe%g`nJky{fr9oAGFl53yaNf%X?bW%nH>ezU2T~1=;&C@ zwfXs<03r@Hf3m5nsS(8h%sF4h}U$~F}?x-!WX_mm23_Qm~Eq{V&fE`g% zuG7zdA4IUpcS21ezz5~p+8URyj^=H%A)7w~p9>@%hEUDBf4*7GOA8P=rgx+-XSnQK z;0-f7T;fl8Qg~U`V;O--Iggd(XSY6*A%B%9PeoCe;{J_2Z5Nenb+*&jymKTN<+bG1 z%svHcZw|udEKL+RxeNj@AG{`_0ByE{$BXOwbuA^QiP)K($>`vX4vEPY>Gj%-8!B%v zUIL^m3@N&`qazM9uwTF8_y$s6zsfVND%PbUG-S5c5QTD*;lv^Cq z+iXrb4Xbh0EM#BoPDWDrF$EW)K}5L`&-Adv^UgcO)lBGz1bAW#v|HHG0wn$I^d2u7 zydCGwt2@D@l&~AbR`jmFe{B;M?5J%J*#h9|DkGPq7c|yHvw@ZhntK~e&m0V%gTsC+ zG6Q=og@}zs{=O6J?&^xbZ|h~Vu2M_o8Mpeu@3naHs;1N_=Mjgd>r#wE;wfEbG#%`? z!n-8^dE0@r7YwCZZJMj#2Zmfv@at0}EE|{|Vg#6;KvtDrLBjSe@7)2tMA)7My&K-h z3ys5dcr+f#mu|hpdmdrnIoh92r)6>_SYCCpI-vjmd`lh`jj`ij<&L#|#hZDJP7f8R0A5r_GV6jlxUj887~06Q0yUXM`;T znw>AK#D>@>OQxRD6Hyo34G|T0J7T_gFEVa9y(0;gwnNMx97HlSTXNDCn?T@lWCx$i$W~Np6Q*Rx~t+u$3D&7k##| z6FA|3+NW9!)~VfqY>iYw(7{hOLtedtEsBP6M+=-{oSQK3Td-vZfO*lHP(4~dmyk`) zU*9D28>3$SX=7bNh&0fH?ts4)@9@DBuplA0uTOjc(vDzQ1_wTkcd!W#usxX0q97Tc zJ$rU4a?(;*6?l4R&HM8VVp>}6c$_p@3V#Kl4!Wn|EY_D=VSjQ}?lvjv;}YR;F4?DnovXdaxRSrAUvr$_DZfzEHt751l$+55TnVgso2Fp$G_hs2R#@Qc?z>+x55C zgNb$v26v8?wG+1gkfxbp^@li%(#R0w>n+&-z7hUEN2rNk{H0_`46S8b&R7l{H%r2Z zdlA`3buOIxuPv!=ZNE{sHy1dSuf~Z?8$GOfp|Jj(XLL@d?4}%Tz?R7p$->0-2zIp0 z)ws5&RYtIh)#fmi7GWq6beA@^tkp#I=h+->nv(#NWs-$Ks%KXf6-b6^@OwMsaRqvt z@1!U0^c{7l(eY#CH?COB9{8-%5nXwMJHD3M&D~u};9q;uziwN~zqxPG6qO&k<+DR$ zJ2D)$FGq9rVD>96HuS0%?6zN5!kO$NSPRJ19^UHny-VFNWE3+~DUi?9v{HDf^g8ju zv(yNOTEuEHg$`XqM#qb*fm3D^9!~gO`itmX#I-%-z4ubo(bP84X>**v+>{y#I$0>* zN&RlwEMfO?IpHsLo>%@YmczDi@)gy^!*F;U%M?A|Jei&LRK=^ny1FN)+M)Rpd|ZH6 z7P@6Lh(KJhvgYNuPozQ2=%p^~{u;8Xr*A5Ib-GA?zpIALlHnSwwy-(I^ye2H{MhYr z0zwnGbqO!i6?^Lr=g9YjyY|7U0|;YZZf0330@^>wRP^$UVDyjNF@~|W_Mu$%D-4Vh z-?Mi521JLE#9v4o-szcdJ5?6+OfA&Tkv7*pnGT(ES$oFRk$fr+9!+gK3|M!2p!L!N6-CLEQ={uE}oaMRSbF?s*Je%@dx z&4%79@VKwN^u_NT1mbUaTeg>;*F#6$TIu~;#xk+nVjJ?fYf(|;M1EBzTM{B_xQx6v zj86wQ;jHNFznfbnr1fSF%4fd)9e079Jp0>IWhu(Ny^p@Pk;WHFT*pbb{0c&!uM;&o zdlTYD@6cJAv?wt9lVH`>#Jr$F0S(m$&HDY^DeICC5B+huy;9e`udE}t^4#JlSu&X2 zxR4SaH6jUPl`aozerRILloL&^#cEB6?1|3KHm;Lh@R~z-dDQ68kEzyb=Z(O|)?>9X z6ac7yFo1136_kSkIhgZ5@>um3fARpknWhH;@ z;)TMHY$gqPZsxZlGmk{IbKgWJ=8o&mmZQgpnJhjIowt6Ld(-^(wTolUmE()M&lBse zbIXJs_EQSSxSEXGX~K0)=Fl14QSRhh&Tq-+jE}`9b53MN$;q`hUq?DKQ1dTz=miF@ zR=ZJVit%(QPEdL^PD%-x9r{>PSvqJ%D#A?pH99+g{?nb6vURM-x;1es_yikQBkH_x z1zS&QH_@#Vi2H?UUS>V_#nrL=e!lG7H|}75{~;5>C+;!g_hdi0k$Bnl_3OZoI;NAB zk?-IFGS{-Jt|ttn_DKaHs1yW?U~D0kaGS00>KHVlPEIKe|S@ zK=b6=8N-7z!}t>?3|%;eg%dW(yl6Y2o7P~7Ln6x*OarPC01Y)S22w00SSS_nN4Dbp z6{|g{T#s;*-xgz3ZVPrLu;3QC&e4BtonJ4PMcJ^Gto^R(tA73Z?%a#PdwEN7^uIe@ zk7TXHNEZLz|9O`4!O8RROU+EX-Of&W*&TPpQAYRdn_(hxIIi|sd{tW;NB%W(Rq!6p!c_u z{IO0xo7YabL`+5-lP23QXDjIEFct3VE=BX1UAj&lSpE3#r|d_+zddFPpSiGHu=;?*jUepsaPS9 zVR1U1`HIVR-$t8I7VhYhPAT8l$(lc>ErW1WCR~N zAX2AwaP-ES&`{$ZcW4*Sm9<2QF>k-;k%5$~0V81!LzmY48uuaRvj6&dZPk9 z#HDj*Qk-^}^$*TscHZ&skbKY5%KFN0+dk#l?Iz?UY5M8a_m~fhsnT*0NL=ckJynI>@OcdXuUBXAt@QTv-iK@^FoV4-6{^Hn!*+Y{=jgyncM|(+ z{;Tqidod$e`;QjjS_#(sEaOxs>_aL;@L36>HS0NK8~^zMJ~)AO=U;#3l}@5~*C@ap z(u_b$&@+;SwXwRz$eDql^+D%V(y(}9KF5D9HPoC>S>QQpaxPDF0DsQO-)6=Vk}0Q3 zpKxm%d%0pfeEk*sOn_Kk8DZ?%+S8xKKkez*AA6R&TjUn0RsX*_|hC zH+L7y3L>0zLNHtY_(L+A-gnZEb_|d6mpj|yNba)i4adJ&>XU9m?ks2>PKOFvZpoXS zeNAyiH+5nJ3q7qCY*f_Ak*mu+A(2ON{ShiKqCj)5O&_i9A^4$*_ZY^>=3Ze_2}@J& zL{1&iB(E~(YdA&B^*r<#j#1X(o|iXPJ;~J!@Xg0q{fbS8U2rSd^edNN@_7swvf(dc zfCZ-Jx^??SM!gg2*|8ii=Lh&J!#)Nukfy`%P39^BC!@C##J$o(U;Wn<1qzJ)?2?wF z)jzj(vk&ztU#=Qrgl=p9(hm=Z52xHKoVs~wa!UVsie^j|GqHAFed|~E9eK{N{d-dO zS?*nyYx&m{uSpkBouvKq2yvcRX;*j{*>H#Jl5q=)`4I)j9!NXSNmuHr`<4GeV7@*s zEFZMrvLf97pD$MC(^gb*4W^Jt#e1{R>SOBZ?|JTWx2Q`@0`2CxDtl8GR!i`*2VfE+yzl#c@AEvr2i8v#5~pBa_z4N%SKQdiA|CC)=eO4T zUKd6=4v-kW7fO8yR8Ghthf&~^Uk3y~&kry2fmg!Qj^S*Aqhasp=%|>~Mf(s}&V>p( z?2E5ifyBT;EX9C2luJraw?nuU2piFjldylA$0{`qf>odwV%z#B;}yA2*nmY1K-QxM z1QC{J`HuSUXT}>Rdj1Z|OP}~P$OxW895K>Sk@$<^3m9MDBQ#6+Sf5=dHZ-pB%}=YB z^L+8bPnOtPpT!nCb1U;=vld^6l*_0O^0R9zrHc2_BoH#?gE#$`M z@1OV*M-^>Qk1=#EmU_t4 z@NW&={dn+*C_J2KZ}|7_D(2iGk8A*4q{!&d>2$K+;?EB#RH_ZeEALQ=Hlzo=O`DW> zXjoZxs=s0Nl)3~J8xY{Hi6o5V-_&2R;EcvwbmW{m^z!B6_chr4pA0E4b#5=8Bu6nE zG-v>xMWN)|XT`Ml-wY}b9%=i6jNbD3&`J?tmKmJLE*H5=4jOT43~<&G zLNf2rYQ!x9&C-$+b`s{%%o6QR$6BEsJ4i`$$v~qdx?j_6+;F$;_RT3#&r#Yjj58lW zHr+Ubdo8*Bej}LisF)ZTsy5!Wx_%=!f#~wqGb4uy?rcAmG(^Q+^aWFhp=eTiH$9z$ zLIkWq6Nr)6v6%2zmaklS96|*^tTc4NXz}otOt6u~CSGMYTXwQjA2SrJ5-r-*&)v8Z zYnT@ID3f2mBND$@NY%WZ8y7`&_Tm1wTxJt`o7=-Ho+zIDb%}mR4oW}+P}~Hq`834K zAJ2F-W~`I_|(`qrS~Y z4Szt@O+kmeqGBNQJ_68;iuF&Dy8Yi=wpoj26yZ+&d)I@rX6Y|Q^}8)?p-rp;?V4zT z%*9|u?lxLajZppPW(K)`MMzw3o_Gih-Qnvl=p)_%$|M<`88)o}3XCW_*|A1dRTU43 z1FTWHO71^Y@~)OPd7hw1(L*2=oWcJZxOETi0HIFzT&|;oGx#yk>4w-sF?nT>7U=jQ zZZ9pKPg_7mMv+vt+W;9YeG7|pIJYKPOm=#I4RM2t1es>pmea#dB)>Db+zk2XrkUR6i+5Yp zZnqhJ8#1wm)llfLYVRgi-MJD}FL*r7vQZ_KNnq4?W-eCgJd%brFvNHP`Q1bL&GqQ( zQb)Z-*?FpmKl1OE$iI=W8aA`7aF)o;9`nK(pm;~cH(t<~$svNKo|KkWC`}LQG8sBx znjEQsACZOH)a-?;WAxx6L5_rLBx~y3UHS)w(MIC_q|XpWq4ldI$!VV<+AoJo5|g%qXY3(0P^Hz`f*a3Bon1G(7>OMD2KkE^cI;17xVcHCNmB`EX6(y41?I* z{0Ln%2LE)W54CM0C8v9)m<9E*;A&ciD~ zKrJab`D&aMG!^dLs3~yo8>I6MX9MkDX59J8;rN6E@`A?a*F#R-prZqQP#UH|oG_AW zDEm=o;j%3B&9dXHrw+pTWT{_@_W)CLhBGhjOkl_Qx#x*1Q&K9frMHs%h2T^>SsP?3 zJsXMqz6fqqDT-rGPmF?YI)>0wNpC2na*+VsjJ!uA^~%Z)*2fzgA2-R9!iyeAw;7$1k5W510=742l@0 zE4pzI0IkOq9XV5l{RU%=hJ(*2$Gf*!T1t;D0U_uIB9)4ksetz*d%px(!?& zRe6v)oAT^+KR`F1`WI4$sv?3%R>zWV>>-b^OPEC@a7R+IpE?*SG_V+PVMa)w2PcwX zxyU}CfI@lZLB-o?)qQKq@-Dh);e+OsCzEq2c+xPWc1|gS2|Ry=vhsTLgTeQnKrF=p zW^_bE#Nny{8tx8yu@w5?0P&Z@mI$a{g0*Jr;2>!4#-OmWS(gY@w|#6~INK9VCE*OJ zF~<|!v7uXK62MmbTJFM}AKO~9ND^oq#Pm6^BVyiNsO0f+%-3EsI%_+JzJ-(3@Ap}} ziwZ*04h;bYSXOG3WEkjKPic2+7pIKb)!n%AP$~9a+P{0V=&C>@UafVHbiD2Gpn*!nI#;G>|`Zdh>*Rq$&Qee701ZlR7y6-NVYhK z)IAJ6M?UH9vLzh5WpmbMD@ahBr<1cF*k^`6lcVT@2uh@ zW>j={vqtSv-+wnStT!+mG=6JXJE$wCEz-?@Gt~V$aP$u!5?zAh$#QZ$KKaI=#5iB> z=|*;CwLxRI5%$mL(b2YCgA&78*TnKI13%dA18sjqQcLW6ZCpn<}&TaiV|ULV6*BL?JLs+Wk#Cr-J^^kB+uu zRhK+HJ*#YnNEI-}BNn4M!>0edZBw!rBC(mU8ST$>*y#1gF8-(cuP^h zbssIiZ(pU+{)EH5-xIZz0p9QIJGEqnilR^-2?R80K(SDV=s>8#kTIe^i`Un5yv#vN zx2{Jo3n%V4HfUcVe8!(@OrW2j>xDF6#7#DMj})(S4Q2+m$fV1A6>4J#p;D(w$1>ro)F-EHH=_3_$xf4tMZt@rmk2kO-8C;g8c4Nx)~GtSV<vOen0sbhvbTJBp4QE$#Ez@!mw+?|>rgOg%N>y2jo{lKi~hLO?mt<}|44g4*m z$6+EEbK%tK#o6yJk*{(4|15(BQFp+-u6@$at}&r*+Mw&lkCe5E`uK!|o3QW8UrUU- zWI9U5_nfC!+@uGs0+jSBGPyn#9iA-3U&INV=T8&JokDL#L_{bOC`*k46Omn^btjSz zgR`tGe}0ifbfFm;7)aa9CrEhJI7gjoWPq>Q!@-kO zGM5R}7>z0;5R^%#KZl(bFs)07J^hkm=Jk_M)yOT}G0GoeElY>_8p$rRH*GJ}InN!X z<+zqzQ}b$m-g4}Ny%GAEyb$h^UcqI@p=9M)x0O(CSyJDNqrxpJQ=UhzSEy>an=cPb zoSBQ}kWEeGR61r9cuLT0`bet0qDR_KiRquY*IRjogf3nzVAn|Qzx9$B=v!Ys79)?w zwI5I;`UD3LwSSpP`qj#Ei6!N#tkTO88XFta<$UX^cn~}5Q=H)s6#b*q1!@wP!~FVMvbniAv%C891e+wCx3_oY`}ZZr z`!;!S79gFS$4gB4=+!B1a&L*8m1|VW*v!q%)sW~sNZc7M6QM6JuP(K9E4s8}{6Yn)>?qq$K4hA1la)y1K$bnGJsD z{rwx)##xf4mX<&&MxpGlcAh&+CmX!?3W|zUZC?`K5J>{R&wkJmrF-dhZ?C3^h{)i| zpLqseEnWB>x(A)cMwW11FGYo%oczq>vlbb2wbLyhjlzBOJp(hNH{Y<|e19c7-NP0= zeY?GKfU%z;AR9OoQcQ4f+z$8M5z8E8=BsZPxCi)zBX?>x-K8@s&M-B#9P51J=ADmi zYin!Ky+x(oh%oSvNSKF!4U{`s>d;&u@%TfxZ^AsQ)zL9Is`Mh_bN~3_J{%ItFC$9L z8dCjnbDY;7PF|SX``laDUBHjS;cP|@#)hwzx`z%1yxO6US5UVA^i|92P~JR_g5aICMC0orE0@g z+x9J_kG#BmZZE2CVRUbEw4H$JzK3{sGIifParxWZd&)g@f4mxQ`+2zM|Ghi1ejnNq zc5x||R#r-iiqE>`VFC>CmG^kSaotE;MVoj)J+urD>yTewq{ znRik1_1{-eY1|>PjO~lh5qtXM!E0}|W_a5tJ zx$M=CCc0lTiy|zzU+MbXP*PHIULNKS3!)=Eeph z7`J^Rl;$Ke^DzZGJHClJ_w$mHOaa^)Nss3{Pu}&(&)X^)C>KMB9rfSo2wO*^pXcVD zhrP0V_)x?L^Y~Lk!}55oDC7knKpz4oH8JpFGfPXV+S)W{&z==9`}7Kj^HGjsyA;96 zz|cP56|bhQP8uBd<-VdC1qH>q^XFl=xy8j9{QdnAhNX9!E3JCYNcnN+Zc5{IXZm)8`I6de^y7su8Y_XU%06GD&YBZ@|l?#;yMr} z^-m(NJZM)vV3TqQzG|<&`fh%swY8N*(g$-HF*!Lo?A;nlOVKnk5-*Ixor3p%otu02 zqXYBeK$c2+o$f5IC$_ts8D)at{fTyjlh|W> z44!QeOuMm=<|N{}py}Y~c!`(S96+k_`atScs(?&cZx`5nV^{S(0}++VEkFU8z5!Y|P;tIcD$lTnlli7uGev$L~Im(3AaEcO$2A#HePxYl)%N%Aq5t*x!w(jW=E z6ufgE)NW>ZzfbpZm8UXX%)FNK`Ko<~v4{JAa-F6cO=?}9_aygtlYdKqb$u4{x9sG! ziFiNAU~RFUKy&Sgp|IlSFXKHGiLdCRPF-v}Y72`C3vrp5Q4tYTt3RuGE?o+HZ#{5| zojtO;T0*#C=hTgm6K92lXfm`_EG;iUY8TsQb-@r1$9m&|kgV5E)5JtZu1a)VYO1=v z{u#(2aYqrb?TU(u!Ox!$y?db29?dzxljU^B?-k-;jK} zh(e2;9dO%MrD@86nm zN#1*FZBtX6PEJlxr&Vs=Bx99$L}rf1VQ~jj1jBh;&<2_@Xmbnw@#|#yN38F`t`&rX zW|rK9C89{nZ>rHZ|JNOjWFa*CHCpb578X!_em?j2gqoTARvZ0#?I_ahw(j;C)f^Ll zH-v-6ctD8-g_$9B%KEQg-R~ZBFkQJ%=GBnNF7xEF_pSpeDJkM?T?DmnOYku^$;SvJ z5((GY9zxB^B;}GP;0H;gFHORF)p#youZ2n&as8cI>kvW4Bbad5!Raq>raZwD_xc11 zCs%HW+8iY(bSLt|QZx9C%DzYue}J9W{YCO>|HM^vG8IBPgT{^7eCSLm52di3KUoRt zn0!wstW~`X);e<|L6X^6=Rcsa`0RGWr%yGHXGoiyn}b6_L_F3^K7IOxK_?^g&d~zA zAO>Ee@4@WK3RObXWDk08Y3PQR-|XjOAvEmWKi*q!Zf%`|TwGCcxy-CVJxlJo=WiNz z=?(nB`gXs}IsgXjfImLB7hC=eP?U|Eli5#PPqHwpsryQtunPpX;6z|28rqoCJld27 zj~RV!&!~O$yEA-#(AwqjoX<|iW!b!u<^KS{Z53pl+okh7OtdXZt2D7JXzVF(n;Vyw z2h6f?wj%{3*I6p+>t&F>f9MBf_tL*$;5&mSzrS0!OesY$bS(s3CTHU0jQ;T9D&)+> zql^c8>(PcKi6?kS{0N60lb(z0u*S}|2uAvu2qRQcMo0IASxVf@Z)iRFnK18&Vi&km zf#BriBt3E@|FA$OOIuZy5)Nfj8-=7l{+dRTz}c%;69)%x;rILr$>dZF70z?YrKP2L zo(t%ndN8dD|w zJVaEo8Oj^A&#@etQVuub_xpiYvfkn&g*w)KsaJQFM?#@~kN#T}#I}{L>c=`RgcEZkx4l`70NEe?7_yYhZGYbpt(eij+!NC-9M;38$@qo*h z896zf#D@7pr}8xz$0sK4Hu^}xAKbiob9!-+cw~Q8J1xSwXOnh&0g1KJ?knGMDk_M% z==&YQ#Wrta0-i4`Keki3js3xrh5XbLKM?xIB}9^2Yt}WTamT{G@*V z)BS>Mlg3v;kN4J0qc~*wr~}rfP+8N{<}IzQcdKkpYHMo~TcZF-f+W}Dpa>+K>u`EX zPxfNWvzM3Iem?JH6J@-SJTdYB|L0(d=nv}1G#cGjWjk^q+31}zg7W<-W@hFS%p$>$ zChDBG7qpI^U}}PLWVH=QPE}KLzU4Vp>Ah+ix`#4Jg7-p7O86}-EXc^oE$r@iRtDq ze>~kpa+HQmb$znoZiCl{DjM_lm&^_mb%|xB_39b{K!o*0vPxKP_o(9nS+#pu8Xu|i zp&sJ+js$2Io=ze?az~#Xp>WsVE!#v0AK%S5O7enSN>@*Bb9eV52ynS>uIh2<36cdxGxj7f$x)Us7 zl>GesA02+Q0MwNNRQ3L0UrT>~l*HuI8|s$2`#2+O`pg`Czdu;|qllqIx9)^Xn%)|! z&$P7Mr-yR;-G4CV z^IYDrIq~p)7&VLU^Kf>yfV4&|H~`Y$0h(=TX+h-uA(>4yGdYd841h{03aM6%`?blx zO7a5vc!<$d-*i7WBC_JjM%%ACC@c<>pHiMvF^W9-eP^LBO$Ay5Kxx^)u;u0F4^>)e zK>T&TIC;MNs-G+N{*xI1c84{!iOnD_bYJLP9=jk>zn zuZu>WR2z8*x$@dLV7gAy(FGJ1@<7A^?qGl#OT#9KFyHZkWJiR>FJ4f_#l_|2e{#V{ zXGB3S28`wr3YrAN3_;VnGj9zw9z7D`(qwETLNq_9e5H5ZwG>^<(OsM}AzoX_RZ7f- zzi$-~fPhyHh>WD}@4rs3@~)Yf?Hqo7jD#CE3u$h)Ey8ne!lTx0IZj{rmXN%lAT?wf z=o?g^aq(QMT|~T+aN=MUcQF4_bUR(z{W#Qw^YWzmQOIM(xYW&+i7b=99h|?<@{!JS zX@wnKoTfnHw)Yz4s~bGfZ#amD2CRH*CECf3uHyE=zwKCL|G&?Y_)Q|F4&9nluhZgM zRAgl2Z7tOs%Wl$D#)5{1hS1->9$D_}>*Kz1<@UR|>USTTCMQqXuXJ}5i?PUJvC=M_ z^t@j9RR=+vZ@tH5es*J@D|xxNR9PP(-4E?cp9UrsjG(6i=eAKd4FkeukBm zwfF)vrByFf0(vRJ(4zLpoBXTfN`0FGLM3AF9ae3vRvY2)f1zt(Wcn zw7wuQYNa->wnl#)se40Tas&tD4g~rt8=LbBMVCiKA1|99qtVVo4sdl`ilMUBj@#pX z9?ER2fZr>>x3_Cj^Qx)m5TEyTL?|Y$i!&u2^Jf(KeDqo=#s}#gLd&VW$RN}Fj-0kE z-*rEg!fW*i8@s7pZ}Rm>UHm-P_fy_pUPMY^W~hukN~`HzT(@fU5qUnoaDa)Vfm)+b zp0Gezl%f+dib8~agEG~8cKs+-8nJ1%q(yNEJ#0jd|OE#&v<&naF`_`cM z??r$7_yHUcv04K;8x|3vH;;?BlzYGHN^3jP@P0PkUTjZ!>1IT?T0ePxL6x1?aUC6< z;SOUP?fEo@dvv$fDc&Q z_5exqQ$>^D(~OKAkOU~HsoN$eGa(`N%sTz3eE$9W9U$`aMz3AFhOjtn&bbkqXH{EV zTntq&5~>j*N#Jfv?0FT-O~snjMKqfD(ug<_Hm=sEX|uEUx3;$UaI6bk?ChnQ;`qRV z8@6#gXKV#+q|e0Z43=h`e=A9zd0nSzD90`F&G3|bGEGw6)R5YM>zg}t_Cf@UkPvMS zTO6Q*6P$9)Wrq=lI`xAo8P|9%k{od;{62pl`>-lT??!0U)y2`@4|9)pcXh>baAD#{ z^Hu7ke1wIC+1S}H@$sF5XrE~f6@|VS_!aK24fkpupADs9p9S4lf6F8!zh-`m+ThL|N=hTo*3cR6#4ff* ztu9%QAMKp1to)9rSy?p{M{<;9Nm_l;8zjHe?hL;R5|r{3^xXYny}Y!;E-9J#XnOjl zO5yrbc%-Y#Uaf=X<9CTmQ!jgG7SSuJnD;RYG}q}a|30QF@&iNF)iavX2IQ6gf{qy@ z$Fd71h=TSZbU!E9r4vArfqG5s@&UWXZ>^S_*0;a9@_^mI13YlC(l z=+}5cktP@13OVPoOjrFNENxlgzg(^ju7M64q!cck#s9~>fbPJ6@ol699q(;}NK^ri zWs0=QY0B))o%3eJ-ESc7k`uKH=b-((=CwmCk#d;nBiC=-AReiWjSch9FHUNviiKs! zc%0(k(7t}16q;Ib7n@jboKqwAB2>K3-@YY55iTB!F1q{vA<5u-Yn>=Isg|Xo+{j6% zqDA?=*d#;2_ZnpwL6V$Ji7uJ5ClG;R8`d?Em+9`XB=n+Xsw-e4UDHWzlen4Y=OxKo z+%3#2&QCSJKP~CGb)jES*J_(zm!FoO16Q1wxoBzF=&ObK`ilgh>DuT=N7AkrN!`pg#e)%NR)6GEw$i{RcHw19NHf9A$ z*k|N&OX)cpn2>M=a(ysVO91`j^&ZiX}~BGZWm6@ zLJlW3W?XG9+LS-|{eD;+YC`F4x*B-oe~dl_t-p{eZ^Oxy&|Iunn8z>QiiM^CZ1w@t>4GwQ_AChQ9O|yZX%DqVIy=8~FUX@E94j|jwg04~p6m7d z5?7f1wr>`sv&(3m%!C9>H#9{K&#fnH*=G-0>+9;&KWzT-l9hS#+ZmV7*o0I`Hk=E+NHR`JU&^Qw1o0HaeSoP@qko&NI=TcNVaVAU2*Kio7$q${`= zc%AWR)k}@vPZw$U`8|vJ=@I_;QEa%LtHrgZicMDaLN%xWaX26L>UEng;lZwjpAzq~ zv%l}?PxTxIJ8Ej3#H)KlW_#6EzRQ&@xg_y)!yL{?FAD!h*bg`$={;*{Zo)(30j_j)yc>rRN5`!aHQf3dFp@VD)@7Fo@K=rx78}W5v$?hlSlHn?t$uwe{{8)35bzWmeG*els}jEZZnm-k<8$&rW&lum zFka&fgwpG;cKHKVR#x17+d{}jlkhblg9YwZ-aOf8B72FrvmWd8uKYQJOU`>{@4ieJ zr3x<~mOd1VdC)!d`X@cIHUvu; zKwjVdN*FclAST66vB6!?&+1DsCC4=aE56;Dg15GP5l6IbjCv^*mqQ z#!lO4VbJXemNfag9O!5$DJiGx*Bc*9e)1%ebwFwnZ=RX|p*sTDjn+_3Ki*Y9As4i$ zyU{$*MmbH%5d{utg44tuNrS&W$;rw2+|e-tIxGTO-t((GWqL6^M(TV>IpSWJHF}nP zyE9(F3?Q<*Gdc*iMLilkU0r;YCz|E|xkJ$$9^hU`vQ!jahIP|u*m`e&8wx;&>qt@0rfv>+$`-5iu(eY3l$7$tF?=y>@$cmOzJ^~5*rMP7S6L{%R>$~pCg%RF~ig=i|c zvdxa=V*fSP0c{0E*%z0RjDV<*qWyJD^jy*ch%D{j~b z>MAkJV%`MWZHoc8iQqC`LuY)pHCt!@az{Z|$1*lutCrob(KmpoPM3Xk?>~&a;T58M z8$X5Lm53)dqW;q>I`DXHT&j5OQydO%>+I^PpwxKM*NJ)$fWH^Hxs|-M)Ec3$2d?CE zS6A0O4Y(46zDUIjEr6RwWZKRsp{xRxY&w^3jaZTZl5YqIW6Kc-pPNe z``phT6Wry$UG4|9(@xJiX#Mh~&X9ILcl9d0goMP{M@J1q!{X@52S8IQCOF~{KYmEp zx!3lA)OCzquQ^I#`(cZLv6`P@K~m<#qj$C=7Z-Z5Jn6m}LjJWq^W2Ab))=*tldmyd zr%PK3jgL>9^||dK>lc7DqYG4ErCt7W8`GkDmeOt2CuL{5JCgv{=mL0v@5mrjV+`nZ zs#;nG3G1t?T3%jt^It60^$Ij+dW2C4fdO$u`R~4y6LQAb%h|D$2)4PhFHC{Wqlnb) zZf#A?AW-N)C3BOLxMGxp0vwI+#mCNt09CA0y+2qK8*vJ`y&dGQ8J+CsG*ai*kfV$L zeOJo3%cc0DZeUi*TXeN+G}ENTJlj(z)=Lp5^q?V6I55h%8vnGmD z=ykluL@l$Az?bBbp2khi(Y!T(x9+jy_;9Sx4XcOtJ=iiMBNyy4GfNac^+vtnXnwbX zdl$+FD>86x`vj88eEKuhSFd&tx7vqmfoN&*0WRTu`!1t-(To*db|7`C4pQ zp;;#H9kF1z<2{x+BNqiBWP|~+Y{O2coA%f`oN(6uOMr6^-VoJJuJjT z9@ni=+|rT_FkXgl5tfqL*=LBa30;v6d9Y>xcW<{z-EqvWTVnr7;pFJ__-~;p z0A00QTyGraKxbNae)J^y%Rzn*_36{6yLx*QIKCPjJo$L7bE(t5yrI3_-((Ib?Kwqd zm0ZWydf!Am{)`}$e^xme{W@zSgi> zB_Aw0S(mQJ-cMQiC{aTXR50D%-rA~hUr9PcW*6Zkb~NTdwP)R#eCL;QbzTX9A^i|h zjjAG1XH(V^!%xi}&*M+b$jInQRQ@?XMH%@Bf>2&tm1c%f0=?}yFvIz`R8;@8? zb!vyVX0K;wiP71kwd6Jp8JgBMi}{Z zW%r%u;vD~6zl7~E;fJu%hXtoVlWY$)*xx|rV#+ct^#+`D(rmMt4x7bHzX z&FbCcm)SPrEiYew6+5R~&Y|^kO-~CO&)TnISWwC)xG21ka)LBYQw+b&xZT-3)V)AR zxpOnEFxVDVsi>g;qa6iRVCeMgI-2m6U{D8IFd~^l~9LkYoB-3i|Z-BOqo#hrd>D``D6_xO|q0? zof)h9487IUcW5Mv01WsNa_SG9i!0&lJVcB}|1B2`dI4Y3H2_3*y9OlE6e!fq=W^ST z;wL*VQvz7(1nvurPFMfk|62U-`$7RTZstGkA)L)G|FK|%9C^8$q=?$zt5yG&o^4LZ zzssluM(v+v*nF?BP%dtA!B{QgOIkgiJP}tXPihsG*+a7XX=_K_=6ej3+C@@dzt^E( zFc~BAG0Fts!de}>FOsILL_c~(X=(R{R#WF>k`|drGV=DEus78$1G<}?$CVtNqvu`F|_2b6SA0;`BtBgb*gNK^PP!4kvp-$sR zc)LgjZP%v9HERk*9B?7Swrhi5#E)exXxEwqgyXtOwp1D8JvFudguSr|zcp?|gK{`` z>qoKNWm%G{6qOFef6f)rvyJ*!hh%6NIyLg$S|Y$jQm+(gd9Hxx%QBPE-1lSmNs-iIzQ7(89p}=TDBR z5=ljE*N&okq#;P>K#zmwUKA@|XL0V<=Nv!ijv}5RhIg`N#6!XqTrl@V2A1aql_Ozq zVl3$B7|FtjXQ%60!BMZ924V^q*7!r6UQz1DBP?H0!nwFTS1y1^q$YL2Ksa?{tbzjA z{FEY5B7Q%(Zt3|wceSgHuA0C2#etipb6bVc6){#FQ3zn3!_rO64(>yV-AUkX9(0Kb?3|r%?Bia1n`F(oTh?gv=95xsbPGU6_Ee(y|C(5b)9)3*fwZ|gvjJ0g7H#FDqp1QObUTabr83!~; zw*6v{n~jqO)K=xlsas<$J=f3==-6T;zp?X`wNB|2K<{rpi>9`0qerx%-Y@qH>H_ zO@aY@3{7)T?(N^7^mp7C5f#hJVq|%r$li+`y^KlT6!(Y=mvn91vU;h|9^GpeiL?(tC5_KkHJs;Uw#d0m}_|lnT}TY$FjCtWY+} zkSOhe%zS={z8O%XMu58H!~Sz6H@RBdZhS?Lsv~SvA=PzN@Z93WVdRf5k6~SEz5HoK zt8_h3;us>5`*WyC4ucAkxsD055mH1a>&~yQ5pdp&m;y{pOo&_`a89~H0ZfQqG(3UW zwDt8xLa%ll?4DSlonjLc+y1PKM!JyveZu|b0gwm{I(0NP6ZjCxZ)r?U`@Q{xUmb@S(A!&DIcVdK4W|eQSpbW+R*8d7b{TePXy~FZ$xZoyu?3*O ze&z`WEK%J0>2swT^_va#w9P0SxsIRzJ94!@r@^Vf@Z*}SHhu{nka*b0XYht4_t$^7 zCg=qPM2`LII4F1hZ&q=bAd4LS_hH5(3R3uL;K)~Lc^rj5}kDVy^JHeFwuBvK2&8g7>WDv0a#%E?~!*~X$Sf$1v)Hk=0 zdd0Yqj`GW=Z++S_LhG1`QwE6OmtMb_O_R1=*!thv${C5aa!RSq|36oGSghGLxXOuh zH${RP{6Sp zxZOLn3J!w?*m!U%qzXv$j&hpn8{opdjxB6}IrOocTV7Go3z+QyAl47`?W?QyN&3v5 zGcC`FZwO~0K0f{ico`uKFUn6nor#gc0Syf98a1`+^z#5fmdB+fC5b*m2L}OA|MEdT zK!CgE`nx$J-N>-1T6W1KwfE&zepzLME$^t(@1MUIw4YgQdZoyn+G|fbIeU0+LUDznYJHygGIj2<+Ahi`I?3y~V{We>iDZ z!-+n0n1*7M&bT!-2uB7U=Li7S^2qe^auBxe-_?tOd-=o@qn_8&gnU%q1qqJ}+9 zg)?my?mb9xy&fb*Yl1UFjaX>Equ9eu{!iqCHezs>H53&Djv26D`hh+fq+kleDgSS- z^r|ns=q(Z=9SE#u*xR>)Fd_psqQ0fW|3!!{UlH=Sd-bB2y; zWm#O)v4EhU zBS7Up+*_M?$tiDkrIGC`BT7fYH)9*gQ81@?H2XOPZLuhR1#cXuCpc)&b;$t8QmWV5 zilU+zFi_9zWGUxfabYEIj!h5`!O!zYPC{}cx?X|TChb;f9h?8JT8Q2Ms|!H92~F>-I(}$#>VP%2oQk5YZz%(5_N)NS5rGOVTM(m z21T5PGW}4F!lx1wgy)tej3I37?mom}Ha{Ki{zMRodOMsvZX-xP`#KE)E`glu!iC_L zmg~P)S3$CDgHb-XNTAmvP$+pQI>f;X@UMwK8mDZ+VYjh+D8k!LY?bTJ7OLJzVb4Rk1pN`Fzv%CC+}U>80Gq!X9SiC#>NhX3 zLlbwwl$Di%Abf&Odmi{Y$PX8Q7N>h{4;(bftIHOo6f~6d&e8uE+%31~W@lBQgsqN! z@Y(9(@!4pmKz!N=yhW!guuIvpL;zz92?jG4eYgI}Tev}9F(gvl+{a;B^?;M%!W2dH z69(nT9C55X{$bbGwCRbCK=Bs$KzoUq?@o_@#aX@G^kA!+pXX*eEahfbKQ5NhNLf$Q zf`4$mtLBO0&cn?}(txM*5*=A4<3#R?*A?@6o|w~!_I${XM7spcV$7n^+*waw5UT}H&^JdCBj@!cRiI?A!Jv2Ug#(w6B`YH$E-S+hx)dFf^wQ0wdSTKhln;gIO zUTYi@41nJB?lwtlV>T?ny8Q0r$A^$6ho|oYd>FF(pqz+=iRJ(J+->x8wb!r`D%hj$ z>MP+{ndB)_UM8kotz1KI#j*YccVc{yq1HUAjTBK@TzdAO-c*ZYMo+_tB(J7aJK>l% z&8@tXHHP09PW;YaynY`dM>c@iW$y4q!!TF2LIp?cTr`apvDJhG9@Cly`aA;MfC}ZK z??K>(LADO~mm=-XM|2%D2a@}2_em%pXl2Qn8q;#^VFsY7g3&D|iAQXZwQN2ZFS`N_ zuD1ONh6f6b%FO~|gexq&PAOqr3`TJ(*lf|7wzpLHR)N8!mlR124P{#R1~Izw_g1yD zEB`e0u(nMe;k4rdqgfo96wksjRusq3TOa-pGICzcolfmf?kfzZFKWivwe+C>7hil* zyCjT%V!;qd@(PCE&-@jW=Wfq}2IpO0w^%Q!SpSV-+~1~IPw-dB`jDYc)+2`TPY)C+ zBsv8@URXI<^MQ|@>@Bt5fVNjAyLnfeB$bz2VDEMQ;mRCW8QCE3m0Bii3kHoTHu;^$B7Td(u_2GOf;I@cn9Z;-6vD(<)K7a09 zAgFJyIE*uRPDoP?2fR5zQy*8G~CB>kN+YM7Z0;ArpdUv-ld z9~!C6cqj8=7=h1U}KK&u})%;V9 z=loq<4UBMkc^6o!KN{E~ ziUjdfM^~0cs9%@=>gs-8SbyiTOE!77^}GU=U!$Q6&ImcY>EJKvqN@UVG3elW)06;- zX_rooN4eWU>PF8W#0giDH(NY=U^DgHUO?L&?c7vhmCOPHWqZRiZfsrbKpr|Ij;r26~5K&1Y^zj>amVVGA@Wm06VZbtm3RjTPuz& z!OQbcP8sj>3f#@}!kH|Ke`wCC>rFLEPLkVFe`vCczmUHD>H1Ti;ZNI6Zp-38kQK|< zN=gWIaI$Mk;D2qjZ6a#_hk=8<&#c6O15Zkz7ysvh1FqV(&KVUYrC4ytg8!80U*Xd9 z7P|NGgprXE+!?TrwS4==03#k8*Pb?kX9KDgfTk>%R=Kmg*<;|lSw30SRA?}8x(%E%p>1p|1=$&7Hg z3Sq;@$jDU1^?7tM^T5XzFqm)r?;Jw#vJ`O+0q?!u&;j$B#KQ*yFc-igXpi2*M7eDm z$o#kT^>2=rndaMOLK7nDkN5cpsjBTgPYehvcJD!Xb_52XS|V>!Rc=q;e&*>DAEvN? z0fv|C)k?HbH(O&4^q(t;&w*^v*Mi9m`mR>6?fq!s={`t>V41c70>Ss(Zet^@i8 zT)zmbsl>qG+yyDA6kwp|R#tjIf(3ich0B*?Vq)lyQnLgnCeq*g=wJbT6PujRD?qLm z*47=YPM^+li*(5nT)w`-WUarSRpJy(F1xXq>E40dOrh8Fy^3=&)KNS+-c!~7K?AA> zNz>(%MI!!Nl|Pv-l7@-EO;#@?@XaMpw108Smhy>Iejt`D6T;kveXq}wo0MmSb zx>OKMQ^3G)yn2x1RAa`dnYWfW$c4|LsEdFfiKv>xU`bxH@|95n^ihc6N~-{H9q_r} z)Zbj$B&ddri)e4TH=|f+Q);iPRaCwaLYdHV$;hOExMmJRD20XA&++q+onn(tK(8*) zk;S2IgxJSm^gGK-176qqysLWzNr^bB2<;HDrG(@Vo08H6(+o?{gTaJnmBWuXz|11| zKfiE^oHFr)c@8dt9jSlj8_Wh_HB4eQbl|IiY)b+1>?LQ_(%W32B$< zD@PC#=s*}QcT1E=c-mI3s*cUQfi}X9O;eDO5yxf#5xupPjNID`5~3 zr~cQO^WR4ugnbcrEw^_h|1*64za3HUKkR}JJAeG;nq1aWd532vfq|56k12{e&k z|HEDw!i{GcHo7q`n8V?vt%#MseGk9n&#vE#Ub!y2)B9;_<%nJUx=iVdC4SO_ne#u@ zs|~;sk+acv95JvHOhKESP3gkdd0bo|mc09EF70+;{iW;V3B8}Xs|`}+z347*A6qHo zlzZdlO&p*nMYWTd`@RS%tXCMN*=Qpu>d8<`tR>-7x^Z3TCBip`xrx)6YsWbqgC6d- znbev#GTvgvJ-8RaJj}T7ZM-qr0o|V9EKYFb_8piB3He;^j9B{0{L!Db9D8i-LefQD zX1mstyUaQ-FsH5;255+mjE~LIuH`OH^leN!$i7W)dSi0QfVhy0sBn3!(&vP?=v~u6 z#@1EKr70s`mH9Q@x^Lh6`)MdBLS1O9zb$y@m1maEv}a`t2eSINOe->2$^{BJhW9v@ zi1|Nw6*A>?H(R)Jdhg!G_+<@_g*$_-Z?D}WF08%0ieh8r;fNBMbR?tS6Nkb@bk1xE z%j97)5Fh^dj-BR)tEQMA6E_C@QM`?O4l@4ad1tebPutzdztT6i449d^Y3?y1=|5(i zB3=Fw10P@EcVy0p1%Y3;)-Yqve=s!=lS-2z+tg*AZ(&GdQcofzIE^9*eJTi+-~ZT< zq`5b`i8fQ!CLegD`b`HxD>{QSuvsOgGJBp|_?$%TH+uU#>f`<9n}S(>)E>G5OCx$Z z8bKrpRVO5Un*%?--3jgszJa1_f91h(XJ}ZFctLG2lkZdaGmarjx;?6Le#w^Ii|dy} zO$OO+l;KNH!w40b4e!agtO3de@&a6!{hPgN5-gYDwp|lIL0IE4Xb_^!FIIH8c7{}ypgx0A@s6tLhadgYLmuGxV10iEjBXwxFHnw z_6se;k1bQt1ihN>tf-T6TYCKr!%wQ$@5OB0lJej6UpxJfvGjK^iur(Ip0Qb&k^G4U zqlRt$y-P_K@)I+ai9vD-)qOXBUqbMO)}V+R!X!GhkZs1yxmXxGi1)gGdgl(S{zZcp z&co^w29xlS&Dr;lXIQG-0s~K#eTXC%-e0OcQ`ljgn|p)5#^EwIZ!%$poT|UgW|Q-n zwa|?;h8U#f-IkA^{ez=iubAf!4R_JMo{KEBgb!?T;>FqZkzSYzojvZ;6>+uYz?1s{ zqxya>&jrPIk{oxE?g@M%6e-kDoXS5VkEc14Skc4bdi&jmpSIk5qFOL~@CfScX2}VJ zZ~Zd!)y_CkBf+JSBODBOVpEUFUfX&3RCxee}&V+`#rzk>v=u@^_phfGxvSn*L_`|!`o?O)JaBs{OnZN zi&ejEr3Zuyw(NfP%zK@(VZ*}jc7iQ&u%*d5Lz!Bdl=icp(+`{|jcw^ao{IA;4N-r1 z>YbGG-QFH4tJO3Qi%VVxnO+AN4=o4%EF(BFGBOZa`aMK2tZcS8aIlO#D01=Q#n74) z$~V0aC#O+|9@IS1Na5uQmDQ)wyrTKkV(+;EsKOfy~bGP-wxmQ}Cif|3j zXzh}*Iu~}thn4A_oK#aMXT}LsF)4o0_RlQFdaWekg%xEx}7t ziys-C-Yxgq~Vw+o3iC7-bNu)d>J^r%ngSKO_)CCm9-M$`E8T5_Y8cW|Y z8_i4-?3f>)Imw$i^ho2EGY$OqwCk_LQr|P#!pH&pWzp&dwvAQ#oI&e#aAQkyQ^Y`Zli5Xm{s^YB`}efW)^d7fv7%@w};@gr4BN7cxW)J^U)R^-~CF?s`0%k-XZq?}?> zWz+*|Cpg*Z>oG&`v+K>0k^|1i*}#Gqg6Lp_c=0k$@E#1WNN*oK`|8I!J+}&lx~HPu z#!s-iyU!W^i9O$OmE-ON$S&&4F+9kL>k2RYwj%y#B~$Il(g!u^cC+(w>*4F;B&T7< zJ(a5OE?YT{Z3>h&v?B<2`*Smdy^DNTKeCNA>J+|OVzy4L=UqC>QB=D*T{WP26McoW z)$QdJfU%N?I<)w%(@bvudtoDOMTTarQ9N~H`F6W{G66?8-kut z^Jt~|bfUcKz9!xNS3*g#tqX~bq-oz6{NZ!++1q~M@`YpY!&0;o9Xn&_$$48-c-ITfaO5o8uC4n$AdbFANRrI9sg?3t5~*XkU_;Yt7w< z=Z?FOY>eI{8aZI|Vg2@JEl0v%P{PiK#Tbs%_>n{eZ%R_}j~IdhkQ#Q&wq*<{Roc?` z98={Aecs%r8dJk>@!)?Hl#~{pm|lVALWUXj+&4p{r|Gm}?qWTcRU0-Wlq{ayFszst zEEp?l7EW~wts$(}z-#MJB-uxdu<}_WtiooLBfp6+8>kfUBy2`o8@f7KLRINp6@Sf+ z^nYBYePhURvq_6PB%oVbmD@f|cR7M+Y>;P875wwau4|gy{Kd}e-rA53@^PZ#`K}cr zrU&_|BUbzm^ZA3mDRhXLqj?X$R4(@%wS>kE?h57-@_ifh48>bI`DiRSp7u9V3DhM? z9Y-7ybNA7i(<4>vw(@caKe%fK+Ht-aEl0^3ogh#Si6_E^PN~cb)^7pu5V{ORKMh`g zelye2cXQ9B_j51Z;%)YXckRPYLd+W-C*kg@ZZ$Yad#>bI=FC{j+jP*9X8isdCub>^ z_UDmBt{$qe*sL&fmU4KWG)8mkVR})cKB=)Udr0~ zc*oGp&0sdlb|@s*=1iSTo%u7=SZ=6p<+tV;W9XwoeP%~Y71rVdUsTXr4GDUY>#!xR zs;Y{I-4duDu)~#wR^j{C4?28mA?mZiy++o2ztnFE-L@d=BjFW_KB&tJfJlgL`D{`F z#U&b09)L!Qii%2Z%rmsqsJJ|$DN%8y6EH)t^^=Y}J{069av{-v2TZr08n^PZhTm-E zcHdm(_AunWu~mO9-Nu~gj&KZ*__unum#Xvh9FnDcF6fo5fdox(X)w>mSmA23{b|_C zX;UGL227$wk$+c@dyZMB z8li^lPqDG{kUjuWSb$c@K2FfEG79edX)Pt<&J)Zv7rsEqbSo>E#W{4X(Y=AClXb3c zVr1k=YwN|EH&+0saLE?35x5E+U{0F(Kg!wkMcqyD#?U$zA>)tv1HiuEglNETft$HnM%`oofgOOZ!^}V+aGE`}s~x|ee-*%JD?{%tRa3({!H>hB z9m9eh^B>?w0%<}~zWhDt%t(Hq^I3X@yiedLXvlcMrn;}cUj!w`F$RN?`Bks8BRW>Z zoOyM{?J4%j@|-lqitzBz9|r{{*3`Ri8@@F=>;20bQ@bkae4WF`@NI`!e_P08SJus4 znr`RYL~_Vg!f;4Ph^38<#C0&qF?6oL$i)Clg?u>hJVe2V16_F|v`be?s2THT>~M&K zt`B`@Uw-1FHJEWAVj*Q8K@#P|wSepbDR$M!;ojQOdd>8@e)!q}IKl8m9tBrAnu zDLiKlc+_l&%TiEpa@Vd#0|i-WrKP192L$$eVWVEq1KbTMB^bP5K&C;TNHr4VFxYo| zk5N7`q4cbUXQQHQ_wWA+cyG|rn5|aUgO~>Umsjb;8d8-U93ci9D&k^LIOrc$$+lufBI_-yg=uV#Mt*e zfzBByTFCV!M?~P<#$2Q*;FxBQ7z7mmtFg^F9wy_{|7ni-S(OIIy+=@l*hHEU>j3KuPKu#TH6DPmj25?=m;{xv9emK zfFB0I;95YO0EfULr=5`A*w8?@_Lf8=mmLe80FM?(ZohEQSTO%Qko?9XSwybaAp+FOAw09O@5`A%Lyr!(^ZkI= z*S^Lr9Wn9$Qb@$0R3NUbN7GO0hWZt>(CT1IB_%EW$E!fPSPxu7DB9T_xrGf zdH@d4mFC4E@*mzjYJ|f(l?7{HP}S6gyA`}=el!Pi~$&{z9lFe@$CD2O8fYn_%~c z)i+DZ+J$FsZ%E%x9mzIjpy@HC(f*gbD3uM+&R7Z)2&lR?U<61>O2)syrJ9Bj3D1A{ zYnKsG1}|yac)=|LFuX{>OoUH-XogwmmOtP^w}Q5f%AvP;KrLv7u!H9)d)w+H(G<3o zZUX@9%ACvinVZmHOeAjmZ#x?86X3;Z|1RnA)f%f!k>9;$(58DoSLM98FPo9q2T?2t z3&46v78sxqIx`CCmxahgtg4~4_WWY#`nsGN+T2BkxFpQdjW7Vaiv3k#sdrIawR#)} z;}DB~F%N4>HMT?RDF=ua4r?sds8v7ojiWB<=kQ3_Uu4}F`M;x;zOFrzU;rY%A=E^G zE%g&JSl@S@Nl8h$Y_#gdn)u2*IjsOW-Rv9Oj2wP#G#wCTVArAsE-++ajRrixMhNX- zv1xhGy#{37q6G`K5{U_WHAo@6uklJAgN$3m-j1V1M7MY-BMt+ClQ32G;K4n(y)v#v zjYkM_bi|}xmo&DdKZHdWBO~`47nY$j_go7y6&n3u)FuCx7EUlg zq$LCh8u@H3vDgO23~pYXWRP OW@%x)J@ zM3X)Q4Q*Y6oaIpW;yrp--_LS9aChJHx!?U5fS}QirEQ?^sa9AruBmzWou

+S)RV`JY z=}FPVrtLS_s+W~cp{NIP4>*qrtT(P4e+o|Xg%JA7O%z9G-CrA_X$8zhW^Fg27Tl`< zr}gxbumKh=_=Yh{zv2KOZ2QFXjVe^2L0B zOum>8kjeA&0kV01K0r3l&j-lni}?VVd@&y&ljr9HWb^!d01=T)e`-E}h=|CZPbDeo Ur`stKBLDyZ07*qoM6N<$g8z5&kpKVy literal 0 HcmV?d00001 diff --git a/Resources/Textures/Constructible/Power/VendingMachines/cigs.rsi/deny.png b/Resources/Textures/Constructible/Power/VendingMachines/cigs.rsi/deny.png deleted file mode 100644 index 2ed8a88e1c95e20f9820964218a3a71598e0ff52..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 840 zcmV-O1GoH%P)Px&0!c(cRCt{2n$K$!K@`WoEj`N}xoNdWr#iiD_^RLcK`6NWqi!pjn!-yED6)c{5A)bJ@(! z?tC9Fvv2mtw+j|rOONkc?QfTr_0=w(<0$oe><%6sO9>U5}-N& z)pUFUY>VLev!{g$xh;ZJ`j*Smxo~*@WMoKa0FC+XC{Kg&Eg2mip+=}l30G<_lU7t^>&rARSte)95e~*6(;rW|iX8Y!qqnMAs zFxxZ5>#l-Ttlo6#85V$WF{*plTpHF$VzX&t|Y3 zs-i!e0RSYX%UH@8NKBW_b83@Q`10d2=EE0xB!uhNYukAL~tbyxEQ}E&zQ14DUs-9sNjj@c#(CNXG2Pcf1cMR7yC0>8k6XcQ#+6HaUf!d!O;@ z!cV+A*6ry&pdI~sZ5!X$hw${}E*g7jTYcsX2oIcaU4(Wv#mxY(`n)qhS`idk1H9<- z)&OZmFuJ&aQ+;nSV|?I|5UwAI4kB^;H*+OmCctYE5;X(7>hsP3X+`iL$=C>a5#-fp z7Qw@VQ6pR5F#+vVZxK-F2am%}oji}D&3~y;-x3oMu|Bf~JeqxI`8sKIEQR~C4_fx+ z%jK5#pOw1+fOMwlDL4v!W&$?W@|GVdtb$4n53`1Ijck2p0t%H9*HmP^!}B^tW$Op4 zfOG}Tv7G@js=6Cg>vs&6_vWho0hDO#51^vsi(rrd)d8rc;}f8*KY$7?{Q;B&mw;2J zYJUI)+WP}!;|qU)Onl)Fkclt+0W#6vA0Qho{Q;C{?+=iTFZ=;A@r6G?CffT0WTT}& zfD-Nf0kYBh%Mb;@sHro3GWD~3cssm7sw*G(sBK`vJfRw>< SaSf*c0000uTwH z)BV>cd*1q6IC*B^vp*a6`B~hqopE7(*S`OI-t~st^<<~NTVNh%AAQd9Zqf7ouhN%C zNi5yA)@#Nsv+s+qgzeh@>F~OJMo+$%GBzF6y?V&w;G=0OnMOClRtser-I%6w*8JSn zJN+j2E#Au}_jKy>FMISPOs4Jh&zb!TUc4&L7wSLmSz+XNX!6GQzgySXUH@!cK5OOr zXK{|=bC;#}bpDq+|KfFG`3k2ORdvr~KWzJ^RxY?Jpiuk5*FO_QA1cj1sQ0{o4ae_& z?|t?EYd-Nk^7PLcZi5U#tt{4E^XxY%&G|0ziIE{SIAf#1u_avBa;tqOh5Y@K`(Vz} z?_Vn(KHjaqf4Kjt=Q^5H2Oxw8WZ*862w$JPnEe-ee15NPT#r)}BQ0>1RkNQAndAjWPL9qj<~3o5mFO&uR|n-~^c%hC`$ zx$K$K-1Mfp^FaSrRfa}wh^y*e{?eG?K>M$bFF(~@ax*h9SQ{@t_x|X6!!Qhl%UPhozPdwT2LuC1}R&rW)Ji%ERq`|od!9qj`cy1b=3w(E*a zH)CK}e3WThQf`kJH$%gjDB;EB1T-fg}Dtul4*SdzZ-g8!VB>?dN#K=-qx) zc2jKo>60fr>%%1+%~bb!27j&o$G>8$l*I1;0lO}#|Bk<4X>;iO-poD!Yr5V=+J)HP zVX1v6KB1%ETYcf=+S2@lD_^&&CQi*Qm;$69K6%1oq`iOY7nenA^m!a^s4RKK+p}xm zHkF#0IazrRJU{Gu!9DrI)o$KdD_(yG$~)?W&RB5%@WmrvY-MuytKL1=I7>=$nf@8Z z_1EJo{g$8AfAS&e@6zn}r8i5a{?D;zW_ZH=HDD^UUfzZ5Ucap|Ki@OHyf9s{XP*JX z)uN-{8Dmt&7UV=rdrJqG3h22WQ%mvv4FO#r}Gec}KB diff --git a/Resources/Textures/Constructible/Power/VendingMachines/cigs.rsi/meta.json b/Resources/Textures/Constructible/Power/VendingMachines/cigs.rsi/meta.json index d00c37f2ec..29e93fb3ef 100644 --- a/Resources/Textures/Constructible/Power/VendingMachines/cigs.rsi/meta.json +++ b/Resources/Textures/Constructible/Power/VendingMachines/cigs.rsi/meta.json @@ -1 +1,51 @@ -{"version":1,"size":{"x":32,"y":32},"states":[{"name":"normal","directions":1,"delays":[[1.0]]},{"name":"broken","directions":1,"delays":[[1.0]]},{"name":"deny","directions":1,"delays":[[0.1,0.1,0.1]]},{"name":"off","directions":1,"delays":[[1.0]]},{"name":"panel","directions":1,"delays":[[1.0]]},{"name":"eject","directions":1,"delays":[[0.1,0.1,0.8,0.1,0.1]]}]} \ No newline at end of file +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from https://github.com/discordia-space/CEV-Eris/commit/e107a20eb3e8def075a7d967dbf91426accabcbe", + "states": [ + { + "name": "normal-unshaded", + "directions": 1 + }, + { + "name": "broken", + "directions": 1 + }, + { + "name": "deny-unshaded", + "directions": 1, + "delays": [ + [ + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "off", + "directions": 1 + }, + { + "name": "panel", + "directions": 1 + }, + { + "name": "eject-unshaded", + "directions": 1, + "delays": [ + [ + 0.1, + 0.1, + 0.8, + 0.1, + 0.1 + ] + ] + } + ] +} diff --git a/Resources/Textures/Constructible/Power/VendingMachines/cigs.rsi/normal-unshaded.png b/Resources/Textures/Constructible/Power/VendingMachines/cigs.rsi/normal-unshaded.png new file mode 100644 index 0000000000000000000000000000000000000000..f92b13efd1dcde1ccc1845e5650cad11c6f87794 GIT binary patch literal 352 zcmV-m0iXVfP))FfcImuKSMH4i=&e)PIX`&_!W}MVmjv z`EkCy44t;i;r#N$kt8{mi5NwS*YBawtAwwk(6g4@L!lWMAU-GLd!ijMF|dt6@%lZ6 ziGghl3=9kmViVgLRtaBc5S!S}z`(%3U|)8IVb+p+4EAMb;CkM@d-wm!a+&|IsK5mX zM!~)NkKm3#=EE$9@nM$3_(DQL1bxrIKtv+c3rHh55nkFbi}BsNcmJR5)MJ>x`Yqms zNH7GH6y-=xgqIkI4*{AbLSoYZ%@U!IkPxFzC1sd`4i$OTkQ yEbrdELrJjz))q1_FfcHPq%Isyl%rr2-~<2~$D|;2i$h5O0000Px$)=5M`R9J=WSHDXFVHkdlhCrGGmmpG5X)!WsNl^lEO0=dRqQ4+&v8}8@Y0E~J zB80#m8MINeOh<YvgyiwaB#{5b(h5w0#TYMMw&gagY009MTA?t;ax zDS;+a!xPI6V;1M`Ti!mRwud6CNCPIC6^tnZEf^C?RxkqJGbhbnF@bm}3KPvD9*P10 zjPV#!1{%hA3;^H>SCB}u@PsS;H%z^O$IBVM6;dF!fPH!8N%Y!Wa?a+GbGF51{fVH5 z*C8EWb{{BKOPE{RByk)-t9%cp-oRVVj;p&injOF7K0vI1*)%`22wP?46&RTam1(qL{hvUeJz?ZL71omh85CGthQR)d4vU$;;6fsghr;`+Jcml<0Nl`0EcSxxgO;&+q e1=Ol~?C=FqwA{bPnGaq70000+G`XY&2|gPHeF)c*goJcM;2Ln(tPR{(p!VjyFy>#1eiUKc-~@#XKn zy{m5BdziHS@5P{N$=!yx7DwLxx@F50(__b2Dvq;&Ol4pYN&EDlxv2QRkqhH1hAfc< wd<)z_jQWrE3|_CcJFYNfyl2SB&`?y%u-xPI^*3D!pFz4jUHx3vIVCg!0LkrVumAu6 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Constructible/Power/VendingMachines/coffee.rsi/deny.png b/Resources/Textures/Constructible/Power/VendingMachines/coffee.rsi/deny.png deleted file mode 100644 index 17aabbe63989c4a019983a497ef8309afc9393f8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 819 zcmV-31I+x1P)Px%?MXyIRCt{2n!#%mK^Vnfr8$&94pA`RC0Zha*h7g%7Ns_tgAIjVn`7~B5Jj-+ zNxbCZvDRBkQKVP|rJ@yONoy$>6-pOlE=rY64u#O0^^hi3+3e1&-^@;S_XmZ3>Fm78 z>&NUY`}$zPxE9?_rgK(*a!qY*35$BOk7cY({eG*#$#f1!kL#oh0CIr7z%){({sCf@ zo+C8C>jijC;0>_c1OXtQIYTORf0J*#EPYD@UOig?FhRP2)|@+_q003mSqOY5p ztLtRw+Zyno_>*J-*}S{!Wa!%(;D)X3Lnut1>(r&WchnN3`i=$+9XWyF)Ilckb)$~0 zZIkpACt6>~ZLqzAQ}5&=^o5-Ry!!II`s4;AVkWe)GG4A;hBj74B4$!ckm?KTfSb3b zMNLhrA0CCNCp>mIic1$KJ9YKbEVTrwK6wX>7NWMbXn6IRI$+(XGcVwEsfp3T{9ko4 z&3w6ZeMbW--!_=Vf!0Y(zx`|9Cj#XVfHqqKQUDsxb!6|F+S(Fy zV*pxehyNS@!`aLQ0P(#a`#OROx4z>hs81EJY7FCQJjqm3Q(jrdlRFKJpE8(gUW9Z2 zC2l%^2Vos>W18j;>$U?}^&LB4Wab($2*7Opheu{AUF$a0A5Bz?O{N7nasG6?^Lqpp z+uDu3tpWRYQ!kLAANXg1z#Cxsw)W&8c14JN{$j1Cntq_Lbj0g?fJ~Ik2goGwn_y^w z*9-8Pz#E`!K0p>q<^yD+bUr`^O6LP);JbVPFUscwMB~eR01v*+2e9J1d;l-L%?Gd& z9)+nV^g18Fi|_IQy!1pqKqSiN14N^IK0q|e=L1Bed_F)l%I5<_qkKLtl&Ti_796a z4q9d}cXILwa9n;#V7}vArIHB^e3BwH?14s>DVI+!@@|2*l$8Xh`TyxVo%DlPr`GUK28cK^LfKS@V2 zE?U2?>La4xY@s{Je1K&+xrWYiHR@@LbcH zKS@`t`%ihk@&5Wc`|Cd=|5ZH=-t~g*)OIET&0US3)`ENk25S!dV`zOon@?{JlZYQ9 z*Yya-x;mNGe^XzT>=B-|fB$X1v+IBVG7oB4wW{d(*EQE_s)Bz$e);{vpIx7S`aZp0 z`}Zyr*K&r|?3DV3(%Jp`w(}>so?mv-T-sv^9?N*NfR^RyavMmMeLi~p^|zF4?f9BK zC#AFl$`ODbg?Q(vZ>vQLui`E}_QKJ$4MO0!gKQMvB{bRJbrR$=) R{i80(22WQ%mvv4FO#ndV0rB6;uumf z=j|N-jLGRT$M>Jonc^TQ91z1Fy75+u){eZb3!6lvu8F1A^Cjsyv)ES5xX`U|W=qe( z4-0~9Ik@I2?Ytp&^W>sSQv+7FM0&gsdR``35>)*n!) zU~&E@&(r1k?RU2Cp82!Xv2W`BqJR8evUe`rY0T}F zT%6DFg2BkSv2O}c_-mW)qEiGSl#Ek?D@<)em#5|KlA<%hMbkN9rskrC=17Sl=mll-|fk4{loS*tgPX~v9&vj zep(%p-hQj1GXB@(S`C}IPW7A4cgi#D^NlNb#@5h(OrPEA+$n~d;%{Fr9TtsO*;n*T zPEN+@<8-Dr_U8H@$+z}DKegDQ?(y`-+ve>76;@kwVm-Iz^C^mTE6VUGi*;LmtX>;F z`~DBU3-dTC*X3TG$Dug=bYe+~$j+E^o%gf%-uly6){yft^?~^Z1=Id-E>$;oEwub_ znfK@KX=}CLvhO=`ne#9u2;6<{jqV{4G%Ww3n3JmL3Mc7^Y& z`5oSc%QxIvZ^y7RzLueA|1X9oVAUW6Yu_@+{|~)6dH(-R6MQYdvhTIOFXmYPKa4G* zqJX1!`8vzJ_Wzz7-5pw3zfZUR!u|ap8CPuk{rKkJ>`nX%^#%K<+Bulsl|PT$e3%2E z?q6)z@TW-<nZXIH-Ga0)0@XPyW&UwGN+SM7IAkbSKhO0 zc>VkH@k`9-?(}{&jX1IFLPY%IBlmBL9E_-9c;5H!lkK%1p$r=;>Z?qoTwizE_|@Ni z_MheOoS*;L7G2c%RJr|M*ztcgcKy-(d%@0vxfy4m!4#l-Dp0;bW-iMlNL~f`4Cqmi z7&dB-=}q>6m+Q^eya74!5YVM_eFdfU-+QMAvvA*>Vq9;UxRn1w)g$&fD*NpB&kDd{ o44T<*CqKzx0NUxmk@k;qZ=Oxp+V`x>fMp+pr>mdKI;Vst0GjHOvH$=8 diff --git a/Resources/Textures/Constructible/Power/VendingMachines/coffee.rsi/meta.json b/Resources/Textures/Constructible/Power/VendingMachines/coffee.rsi/meta.json index 0dc3d47206..a6e22752ac 100644 --- a/Resources/Textures/Constructible/Power/VendingMachines/coffee.rsi/meta.json +++ b/Resources/Textures/Constructible/Power/VendingMachines/coffee.rsi/meta.json @@ -1 +1,83 @@ -{"version":1,"size":{"x":32,"y":32},"states":[{"name":"normal","directions":1,"delays":[[1.0]]},{"name":"broken","directions":1,"delays":[[1.0]]},{"name":"deny","directions":1,"delays":[[0.1,0.1,0.1]]},{"name":"hellfire","directions":1,"delays":[[0.25,0.25,0.25]]},{"name":"off","directions":1,"delays":[[1.0]]},{"name":"panel","directions":1,"delays":[[1.0]]},{"name":"screen","directions":1,"delays":[[0.6,0.6,0.6,0.6]]},{"name":"eject","directions":1,"delays":[[0.2,0.2,0.6,0.3,0.3,0.3,0.3,0.3,0.3,0.2,0.2,0.2,0.2,0.8]]}]} \ No newline at end of file +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from https://github.com/discordia-space/CEV-Eris/commit/e107a20eb3e8def075a7d967dbf91426accabcbe", + "states": [ + { + "name": "normal-unshaded", + "directions": 1 + }, + { + "name": "broken", + "directions": 1 + }, + { + "name": "deny-unshaded", + "directions": 1, + "delays": [ + [ + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "hellfire", + "directions": 1, + "delays": [ + [ + 0.25, + 0.25, + 0.25 + ] + ] + }, + { + "name": "off", + "directions": 1 + }, + { + "name": "panel", + "directions": 1 + }, + { + "name": "screen", + "directions": 1, + "delays": [ + [ + 0.6, + 0.6, + 0.6, + 0.6 + ] + ] + }, + { + "name": "eject-unshaded", + "directions": 1, + "delays": [ + [ + 0.2, + 0.2, + 0.6, + 0.3, + 0.3, + 0.3, + 0.3, + 0.3, + 0.3, + 0.2, + 0.2, + 0.2, + 0.2, + 0.8 + ] + ] + } + ] +} diff --git a/Resources/Textures/Constructible/Power/VendingMachines/coffee.rsi/normal-unshaded.png b/Resources/Textures/Constructible/Power/VendingMachines/coffee.rsi/normal-unshaded.png new file mode 100644 index 0000000000000000000000000000000000000000..1a7fd066cdae3a85838f83f15ece9895ae3a8e97 GIT binary patch literal 153 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=ffJ1Wy;okcv6U2@)68>%6ned6GW7 zySw{;__Wi1^!XnB@#m@k(Rfing10fyfGdNSVOMyt*?n~_GoW1zp00i_>zopr0Ac|( AM*si- literal 0 HcmV?d00001 diff --git a/Resources/Textures/Constructible/Power/VendingMachines/coffee.rsi/normal.png b/Resources/Textures/Constructible/Power/VendingMachines/coffee.rsi/normal.png deleted file mode 100644 index 90d1bbd8bb6697fd89f5ea1fe982f2b0cf849bdc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 503 zcmVPx$u}MThR9J;$WWWM^t+@Xyn7Cq-A{#t7vzuY_v9FBi;w;z{E10-4D5@Q!ssk7p zTp1XSZNLy^qOvU{gHZI173U*VTg*ff%BIwKY~|1K?mqbYcLq83KM1d zx!Z3UUVM5(Qq<8T8^UrBF*%85i`(2 zYp5qm-QX>X$puQ{+zc+xk#PRKEA#NGr+NrDMsefiqXVKs;N0!EL_1*rvabw|Q7cjS z3MLdd;L_6@L|e|l04WKNHU2{q;l%3zf>Chz^gD)?Eiw!q`kV~Ene_1T85khhFe=gp zjtON$f+1jG?!dsnAOywu`K%0=7#J8JE#PCfIT@@}zY{W^a0r|@d4OSE(>n%V-P=U* zNd+_s0a5_XLZG^yxExL}1Z+)(;A~cgOL+M(aPQ?;hI{>ADR+RAH+9>E*ua3-1q1E? tjNU2(0|SG$GQ)pbSa$U;cKZet000hAk|O@Juw?)M002ovPDHLkV1k|;&1L`q diff --git a/Resources/Textures/Constructible/Power/VendingMachines/cola.rsi/deny-unshaded.png b/Resources/Textures/Constructible/Power/VendingMachines/cola.rsi/deny-unshaded.png new file mode 100644 index 0000000000000000000000000000000000000000..5450574f5557b7c3f55195e8009feac4eda3a205 GIT binary patch literal 490 zcmV4Dkhj@oU~}tSXzQ!|5t6O|F1-RYk_h54Noe+f7=6(SmrLXoV8crWIC5qKoIe@9SMtn(qwF;=E7pTt#5SuSaztbdW ze*g!Q{s0cm4@dg}pc6pT`~h^Gu7P^>=yPAi+P!XE&mnE5;!v_Aj}`t?^Ele0ll ztXDu3Xn#OaSgV5Odq8#mfTBSA1E5&B9jf*RKPx%=}AOERCt{2n!jrlK@`WoE5Sxgm%=I%@FXBX;(?t=xQjOC54gfYk`T)fh}<6_ zh;Y~jJ>ridg|RUc{eieek}&@8+u6mte`^GTiGxf3 zLSmI3Ax}Wo0c1_zCm^&5o;Q*d_}AE|CZDTQUzmWSb`#I4z~;&{0H9Q4*LW{HQ(w_v3W{fCHd&a*W|yi^_p<=}R?1)hE!H znZ@V!9XuYop)`+5-)*(<_URwoz4;^d-p~s0m!9eqxcBNMFaqGG(lj#tauVMM*3Io<+M`dTX>7=(zc*Tw(ao4Ia~8sRTF&OI>5-;u0L+H41a7zU617FI@qT z78bCz=5~!wOqH=*t96ZgpQF5>-Ya|(k_d5Up002ovPDHLkV1gZGhOqzu diff --git a/Resources/Textures/Constructible/Power/VendingMachines/cola.rsi/eject-unshaded.png b/Resources/Textures/Constructible/Power/VendingMachines/cola.rsi/eject-unshaded.png new file mode 100644 index 0000000000000000000000000000000000000000..0c39a512037061e803a5d071c094c3a0d7a1e290 GIT binary patch literal 962 zcmV;z13mnSP)rC2cz_2`S0LX#jy(40K~WkAjUO-!y$z+#u;PU>71!Func}_7sMFjp669O z&#R=VL{`e~2NG!s{YrzdZebS9i-8vo|m;#6FBLPG7g#nJ`{!ifJr z>6e1;ffxX%Wdx&$t7an9{#+1*5f|S)byGqU2PCNdwva}IIG`|pt%7)Xk%y;=JZir! zlvYEZzx}9HX#e{Y0Jv>k-BrXq`biM4zUT^c|2ONl3~IkE5~D*rxQIa2S2_OmC`$xV z`*T5>!O&y`Qv0!4869Z`Lz59m?I$PA{uh%GNbSc)DGQ3f`a!sQLet#d27r42@BjcN znJSnEKRMI~6sY}}D7^u?+ptYXAhkbN#Pjo{zrl(?YQJeR9ng^F=a^XtwLdo`<>xjc zklIg9(o#Xg_j%G@$|Cqpk!fq<`RDgb?>~C{6aWB*6Wjri+E0pXf)s=iuhwh4TCeej z@AGQCh7yU?ep6^q#FFj@VZ?X0S^)p{<(T>mNbSc&xq>SDx&uktEul_!N zy`(HOON`VOlsyA+1dyGeY0U$5S5?BsXjIF`QE;w`uSgi`xpFu zTN(1&H{|u%-JLcn`(7-Ub1WzOZ-Z#L}<5?#`LQuM{Hx@UYHlLEK=4bftntbL)h zR{K5UvhW3`e@$XO@oQ(1Ls(?mZ=N#Gcx#5ji(5KptU6qK;e0G>@2Y<17oZnu2z9S>ZT53MaWQqA2 z$!Y7%uH4IO?Mz>rSsNSjbt*GZ?Mi!xX*)Q79dEypu|hRe`j^#<7uxI&&)FqJuJ0Ag zXga=Vy-36BOHS`PXZ&~^d(D53?w?&>7G8M!z@*CEeoCJD?{)ed|0e8EtugZ0AlS?% zxl`8HjmZIuc%)K}EO2zgO6fhH1X6F9F#$xKWW=qql6?cOP)>7)?wTLWIT9*2*aV{^ tex}PL+*9~?gGXsqhhuY(gvp6J49kkkK35i|&IG1-22WQ%mvv4FO#q3HWhnpv diff --git a/Resources/Textures/Constructible/Power/VendingMachines/cola.rsi/meta.json b/Resources/Textures/Constructible/Power/VendingMachines/cola.rsi/meta.json index 276f9ec8ad..35e8a5cd3f 100644 --- a/Resources/Textures/Constructible/Power/VendingMachines/cola.rsi/meta.json +++ b/Resources/Textures/Constructible/Power/VendingMachines/cola.rsi/meta.json @@ -1 +1,56 @@ -{"version":1,"size":{"x":32,"y":32},"states":[{"name":"broken","directions":1,"delays":[[1.0]]},{"name":"eject","directions":1,"delays":[[0.5,0.1,1.0,0.1,0.1]]},{"name":"deny","directions":1,"delays":[[0.1,0.1,0.1]]},{"name":"normal","directions":1,"delays":[[1.0]]},{"name":"panel","directions":1,"delays":[[1.0]]},{"name":"off","directions":1,"delays":[[1.0]]}]} \ No newline at end of file +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from https://github.com/discordia-space/CEV-Eris/commit/e107a20eb3e8def075a7d967dbf91426accabcbe", + "states": [ + { + "name": "broken", + "directions": 1, + "delays": [ + [ + 1.0 + ] + ] + }, + { + "name": "eject-unshaded", + "directions": 1, + "delays": [ + [ + 0.5, + 0.1, + 1.0, + 0.1, + 0.1 + ] + ] + }, + { + "name": "deny-unshaded", + "directions": 1, + "delays": [ + [ + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "normal-unshaded", + "directions": 1 + }, + { + "name": "panel", + "directions": 1 + }, + { + "name": "off", + "directions": 1 + } + ] +} diff --git a/Resources/Textures/Constructible/Power/VendingMachines/cola.rsi/normal-unshaded.png b/Resources/Textures/Constructible/Power/VendingMachines/cola.rsi/normal-unshaded.png new file mode 100644 index 0000000000000000000000000000000000000000..5a4eb5ccbd7a22dfc553066cfc73d5487c4d1392 GIT binary patch literal 289 zcmV++0p9+JP)Px$zez+vR9J=WmrqLqK^VrLjp!0}?_>lSUL?#95aLRg`~V(0ga@x82!4Pdf~Bhm zu|Ee7b;>T~iUf9CJa`Ed%u}5Lv0E2A$k?qA;<@{H@^H9|6YnR-6LLXAe6J(UNBuMfwL=H~_Z^XN}}T^d60p z1i)y}#%T#?*0KPAWTqlz%sPgnL7Taj`wN=2ERvZDl9|d3BnWYT0WH}C%)1=`fCgar zIYwx&$XzScgt7^kmW8X6FYNEWyRPLXKu0f|fF6$nSOKsBVC)TmHkJi3EemgtQC!@9 z;Ih5y9e|kAAR-Vl2?R2Tl=OffDNTShBZ*(+L?}-n$W!n)d%*2jDw_i=(WX2QrE`F% zdGjIA1ndwjZEi;a0KybO){ zMmXo`Eg_u1aiM@#-E`CwX&qI=aMa0lj6mIRu4KXht-6UsT4&bX%;!lMVA$`XYPfeb z5pB+UmI(t)!Z~4MyXKh#faA3a09)ZhU$0}H2EBWx-$L~bO8mCX8qwap00000NkvXX Hu0mjfz+ByU diff --git a/Resources/Textures/Constructible/Power/VendingMachines/dinnerware.rsi/eject-unshaded.png b/Resources/Textures/Constructible/Power/VendingMachines/dinnerware.rsi/eject-unshaded.png new file mode 100644 index 0000000000000000000000000000000000000000..2fd223d6f44a420264c1f6d112ee897c8dff6aaf GIT binary patch literal 1482 zcmZ8heK^y56#wyKQ*C#9P*`bR+pLSr(k)%gSmDk~i@MchP0@rDqOlB9ZpvGtLh@Eg zSuaX$F1zI=Z)0Ac48b3W%h=X{>?r)aTbNhzI3q!HXCl&DfQmp~1m(ZXD2m}N_{S_N(~ zzv+yRqAhn%^wLK?Ce!2Qp*VSg=<`?M^}A=|Wi!Uc?=L?4SW^Xo6<1Pgf%#1)- zTI%p{apdT&TjEsX*Ng#iaO|C#vMhObl=dx1cXzF|HSUIr6BzVCjPkm>d~TG)x1mX< z3o`uizn3Et!t`w|HbEi^5nEtbJ>PLZJ-zz*8Is6hkHQ7?ZZ{`HF*qm%%5P+ItT_e7;J@PO;oW&eQAD>wkkv5r$J`* z*{Pubc(?-NGnMGX0_b3k&310Z3A$h|K*vY!R|~&{;tuV{cc$g3;NEFI9ShwsaEe3R z+;YW<>$|^V!#DL~6>%S0E}0>LfY0^dWBo{rJXITcNPx1USkEg2eN&4LtOtYW{si}6 z7*^Tiz#*JuxVXWi>%O!v-BSDD#^W+Df(WDe6WVkI4QvW4L*;ZXd9W{vH+eF-0i~)+2NJKXB^R#Ci6!`Q7Bdg0qIw~YmEqdcwJB_`5)v#G~M zMh|#Z-yECFO{uzFQ&fXBtjl_0_cn!W**iEIdVsD76JijyvV~RnB<>sK1 zq|&JDbvLqjK;M~p&0t(&_k?P&mi1+d&Rbhczl4^47m+5d%ZQZXac51~wUzjOmq7O- zUg@q>j!7dyc-@&%5x*6m9so-p)pd#0q4gIM!{KVJfd*~522EC8qxNj+Vh2_+#!4=X zCyPb(_8dlWYd!*#HwAJkZTG%`j&l~na_ml(nAkuxC)HG^<>My@jWKR-PD47UGLG1S zu5wbO$}nrZ3nRVSq$BE!LgD8}GTsv_7e+4yhHs0R+90fs*|{Z13Qo_NsSU_iY1ab- zDW0LQ?zL8g%()TMx*<%*7~}1<#r&0;Nmxngi5(#0gIGwQz-OU1?G2mjd~Gi}3afzAfIWkcADB;O*$w-Ae`9D{YLC0M6HxtQ6sf4c_ zr7VI3d;3Ufw=FJ2n^WgrP3zCDn%VGw*u#}Rr~wD76%}$|U|~>g5sd!n2av3hLy3}J ej8Z&2cAUzLy0vfF5uTOuMgy)S59bOZE#V)oy}w!j literal 0 HcmV?d00001 diff --git a/Resources/Textures/Constructible/Power/VendingMachines/dinnerware.rsi/eject.png b/Resources/Textures/Constructible/Power/VendingMachines/dinnerware.rsi/eject.png deleted file mode 100644 index 7d0de068b1b776255f2c3fd36211ded26e46512e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2031 zcmZ{lXH=8v635>VOk9+5U5X%>2&@RGG&O({LX!lfS`ZBck>W}xi*O+2#XS;gOqAk6 zXf8?>rHG&qSbB_vRY5>d0SOS0h0p^5ZuYGA+uje)Gjsmu%=4U?-^`gLS7&=!88sOI z0Az7kTX%^CCC6tsOmg?f#^L|~UWc=_x)8&f%O%`U^ib?+oIQ?!q!$fBi>T_lXG+BqPsQ~U@IA0_YFsXgShyD;pIdu_6Ea0s%mq!0VZ zH(5VtPLDkJr}E~r(>YPm+pM_xh8oVurq%v{PeWgF*Nuqt-^>U%M+>)TauzEaD5YF; zN@Kzznk!G+VX27u(RZubcD7e^Dy~w;1amnkGWCZ{#KGoPfWEYCzH>-l?51}|$KaSO zDW6Z{MmI^F+4(r^o9_*6nYx{^v8Bv#U|RAP+rGY18*MJ$L9S^#A;8&U#bpBqF72z` zMzJR)k<@JSmRfLt!%-(A0eWzW-S~vz$AJ?7aNNa0(fspb8-G&`Y4%&&V?hc43Iy;X zh<23<@XUYs7SQtO3;VE!N_+FdR&?$4SbEjs{OWvLU+(G4)kVrRHN+j&yiEe$pC6XZ zPRv~WR8PJxHG8Vg_uCSsaml-t_{C^%#(WUy-m$jgyYNQP67neKl1b08S=@a2@+-Aw zePx}TUay;CW}($NviPk@!hr)C!Vzk@4@NKF52W)x)&D}45|W$P!(LV1q$reS$;8k# z0Mql(PIGEj*9{uE82#6bHUXjmjTHLJV)^&aX1#{o|7r;jb?j$9E{s7)fkUjpriu%i zu)aUwi?E{Ls0B%cEs-1h?(PxGKLIV9UlXH(J72UB?$y!jf``2u@-`#_ z>Ml}x0os=;syVE_@{LH{EBiXt(}6F37dMKUa)F2H&&S^+`S3tV%COLj{LZX~UFYqx zp}%yDPfw4eU63=4SPmDiuqQAbL3CCeqs&jXyCdr)QU$>t9r{!UZbbc72%^J)Z;GvT+{o` z*9GM(?e8gy2VVpVp8Rv~*MP;o(DEH3!DO$K7b{qFT z>37=OEcJyE1F9UdERr%v1S8oMl3zg<#B&NLy=QdtRORxg=yo$W!^kIn5-^7OtmtwycN7yh4cwbQ<0?z}-X6_jwi~aUul|*LX^wRVZG+e<5xkd!+FF>n#kjKS{ z-P8loLCYophMTvB>k{EQK|IOxJF-o+(e8vR+EviYR)__r>~kz0l1X(9AGHuUMl$6K zDg*8N*PVV)ySm3R0_JqPD{+A=%P`fYs5;^~VOd%6h`^fN$CGNs&qQq41CbR8;F`bu zyVnN}PA;6adD4fwOo}15b{sxqX^1M}9Gr%3-uAOYDriUJSrWH6o1|#5YX3}cKjCCbg42y## zhspfbSFbqY^4`+h#`Sv9-*c^Tjz}~qeb5vj^eu!)=Qi?by=&?W-7Vqcr4TeYM#_=* zG5s+|Inb&n-_fNx<{$ z6D!*>&)L9AfBF?KGyx6b!?bPCpo5c|J+;xn3286!y|zh~)DZtM{#wBhUJiNm*OB(O zDoE~B8P~&%O8<;CK$jlHA1>6?BST)!F6xd?r!BktpaG-`Q&Yd01R8EgjqnJ8UK9mF zbXZXx;|PxpWTdLg2`aeq_x@t<4msq;YKk}ZKx%A>^oU3$!MC(N<$V|P+)VCY(r29S z>1OhyJH`h;en=QVg|&XDs~f*NfJPx0`B1lY>vGW0ICiASM2q&&a0}QjBaFWRk9i@ zFRKTAsO%`~FUMXDMZ0dXtdZ@kmdGAj>cL!9Gppncb?jA)^prV1@T@aqvQ6Y+q2n5$ z@p=ehK-@LX(@|)W5_H2A8lH!mdsHzBtIjYFEmIj>CJt z^bi-E7CEYGtI@>!7;s5jO-f=w5qXuO(BNHMwy0SK_ zJKo*xHfHa6XhOQ|XY}&nv!3xH08_7O*3Z*1bSmUamth0X(goFK@d+s>;E9pneaGP! z@vJS8guF8){ijTMh1!0myz6vtm&}F{p7f*N5@c^y58M!c3egfiL;~9U|4kU!!6Z4N UY!7l+l0^>S?3`^Yt$l9)7xf(GL;wH) diff --git a/Resources/Textures/Constructible/Power/VendingMachines/dinnerware.rsi/meta.json b/Resources/Textures/Constructible/Power/VendingMachines/dinnerware.rsi/meta.json index 0f01469900..d1f1da23c0 100644 --- a/Resources/Textures/Constructible/Power/VendingMachines/dinnerware.rsi/meta.json +++ b/Resources/Textures/Constructible/Power/VendingMachines/dinnerware.rsi/meta.json @@ -1 +1,41 @@ -{"version": 1, "size": {"x": 32, "y": 32}, "states": [{"name": "broken", "directions": 1, "delays": [[1.0]]}, {"name": "eject", "directions": 1, "delays": [[0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1]]}, {"name": "normal", "directions": 1, "delays": [[1.0]]}, {"name": "off", "directions": 1, "delays": [[1.0]]}]} \ No newline at end of file +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from https://github.com/discordia-space/CEV-Eris/commit/e107a20eb3e8def075a7d967dbf91426accabcbe", + "states": [ + { + "name": "broken", + "directions": 1 + }, + { + "name": "eject-unshaded", + "directions": 1, + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "normal-unshaded", + "directions": 1 + }, + { + "name": "off", + "directions": 1 + } + ] +} diff --git a/Resources/Textures/Constructible/Power/VendingMachines/dinnerware.rsi/normal-unshaded.png b/Resources/Textures/Constructible/Power/VendingMachines/dinnerware.rsi/normal-unshaded.png new file mode 100644 index 0000000000000000000000000000000000000000..22f242b7ddee3a5fbe99713f461add3a9557c1c7 GIT binary patch literal 488 zcmVP)YlyF+^1koHLkxe*CjGQF^SeXl3o-t^(m{JV{wHp9{rd5OrNMRWOFd3Q_${!HQ0uYU@3fYd5P;@#u zm#JYAo#r07w$LO>C_33WL#P8a15lNFuKi9%&Jxps6_x@?C_26F#_&=s!sT+qG!3qu zJ;-4vI3yLCL;&C)mf9B~04y#=aeQ>hOKTf$0j!AdOawIp*xTOxj3-m+Uoi&n<_sYX z_@^SceaPeaDUWzE4X@XScryKGjL}gIluKop=Ep!{-?|k&rvXcT&VfRcXg$7R={q(D z7+$Z>(q}j}2Nw*O3mWl{x?qLi`3e egB=a@={oQ4IZ1IWaam6Q0000F|9LGPa#qL4Ma;3$DE*ky|j0idix<*(YgHU8C@E{7Q7p;p#houPjvKlCLC`rs^ zk@8$8{y!rh;@6C69GtWi}wRUvu zq`I~r4fgff68nczB|moK!GS0L@!=h%<>Na`3kz`w9e}p-??bl_H2H=kv3)d0H*UBC zhtFP3FS-pdd0^6)MUW)JYlZ;7cYdO7%i;irQFiqUBGMd3GPsrAwnls*RU8E9s&LRf zFiLf?3xLVxb<_E#0KSmQx$tWM!r?U`03X)@IA2u*z{IELrt`Ceq5_`g7NJ%z^S9Y_ z2Q<0s>Y13G$J5+m+FojE;o0ZdBlA5O1;CbNzDA)PkW>iGy|-)=RbA|g`v4%S8hgod z2LdC*EZ@C@-R|JU&?C$C%HwI^uLmZVM@{4F05&8ES3HBU zk=^bf8dVt!26S`Bf`ODC*py{*PB_yC_~#xldR+#GMwpnLr}RuE{XLy{eg2gFXAaOkAhwNr?wN|U`ALbl6b1b+sRh91 zoAd$l+>P|MH8QiVa>3=WT!ao_Q;w6n;BH;=vSRr#hWVN=k%|=CNkly?eS4L_~aJoRfKD-e)xokN3Uz%Q@#g?)ySP zK|w)>iDxR>P5tS~{gpFV5=1{Y8dqH2@?{xF0VuP^%C(T2ux$@Z-5N zVzoeP{mcqD^3`n)ot!1?y+sI0@WLlM=J4uhB`qS%_P!?iZL~mO>su|h>=HbJO5pgO zB{aZz6qDNS-&{Y_03Rae{-`j2TR{{bBF^8~fI3J}yu!PR+0e7r&zu1lCx&qXsR-q$ z0qVK<-!QJU%;ZXqsL|xA*!6+6er5%fqdw|`L-hHGp=y=8mN10SSiAzyn z;^T2dJc$du6YMI$T0hf(>r+z%f#0U45ms<`{yqI3LtkDc6%h4Yc6JqDt)Dprul#xw zaRF3t3PBv_&R-zeoKkX*R=mjA&x88Yp#>8Yto1Vu7z`1qLSMa#s&Z`j4nYE!=C||h zL*YbO`N3%OYoVXn0;vQfJZdrL;qy0RCU!Rgct2j?yH?=9wasQTz*;}E0-6XR3Pg)c(eb8m4AuWj1I{DVO;HMZ0Oh^klzw-GFEPUMrs5e7i=N%z$2M1G6Dm-PtrhEqosPjx4pMzwVy` z1qB5K1qB_Z+b=>d!n%JC$bCM*n%w6Dtm%P#fGxSt2UwH)e1J8%&j(nO`+R^kxz7h! zlly#tHJJdCinS(o}@Ss=^+XOI(@@lD*ukt?R-Gj>2^L~HN2AffEVGF%?Gs0x_=53tattg Xli`~tQ~J}600000NkvXXu0mjfLZGx; literal 0 HcmV?d00001 diff --git a/Resources/Textures/Constructible/Power/VendingMachines/discount.rsi/normal.png b/Resources/Textures/Constructible/Power/VendingMachines/discount.rsi/normal.png deleted file mode 100644 index 96595bdccc85d381f309b93f04e228385fc0591e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1683 zcmZ{lX*3&%7RN&*Bx)&RPsy~FQl%cPU1Lv7XqsATsZdj1Ri%mwCCQ*8?Hom0W2b}0 zk_xS7EsapdmeJZ(?H-L92^CGFiAm?f%z5X$`EZvHzkC1Z+;i`_cQIb>a!^eu0059f zAziTIi1=zUV6m^g8Z!?7fCEr2j^2b~R-tE9ke|x0r1g2r6$=yk?--@^G>ZWXq}09k zA+Tf=qNeDK6H-MMZgsdQ>g_$~w|78yd=a{5{JA;Env3Ng@CVRm@N`f)((^6CXT0yK zqDAwVQIov}iS=T=fq;KtmZY3@Hcm(^(&$`IJh**-q?1GZaz{R>l^FgX#B!x@f&nVT%5Pf)w(Jo_Be4V^@xVX(obavlEJXZSPCsw zQ=hD9C4pkXvf)avvoU1_uM87`*kTz=JPho0u?0n`!A(D&yRCi3aT_cfyuI;utKGOK zl5)k*8|DW8*752x*TNMkgWQ;Ywjv#*Wy|Ez=JeoHVkk(aA@;+^x&OqYMD`-#)0xOi z2l`ZEjN}fZL|ZE$=Y4N%R!j)rF2y;lvi7rc$`k`vCt_cawodwzOW&1MR;+|{d0VAY z3@GI?+Rmuw#0rVx?}2jKvW8=0W1BEOt31NTm}cYnLS8Hu148Z{i&xpR{~WJh6>a`{ zDsN8K@It2l7H1Y&;V{y-Z^^A+C~@s@HZ*E{dZ0;P3^p_4$=2U%GC6^B_^euH>+qw) zj(+WrNlVw7VmhqX#uAmj-|qiHsvg2!8mcDe3wj|J$8nENmKCfs&q1}BF4lq?fAkV& z6uw%hpH#&$k*Cf!Ot~{oNz}^DIL8n?)k$H;l<^vrrPE8pxpMhw-}Gp0w%ZI2s0j#{ z37|LhM&gn>+55S|qdd1WD^jU46P5C7iR>O$>mZEu@4cMyi2S78^QCnQ;gN%lG*WL& z{ZGX0et1Gv@kC_?QzVg;+>OASrge7e`nWH+*Yb58UD=G}f`_Ji+}x$O)1hKK6tubm zmI&MG@=I*@UCOBN6yWyl0V4~rWrNO^HoU`?9;(AUfuJzLHhwt9#T*P?4mK5bL;GqlBX1+4O;*^&c zmrb)wRnzf)nIz&z$I_qusro<#xu-@u?*(_l5dDE6;Zo;yaVTqr1wmX|PKr4I7LDGa zC0-e-$8V3RS>7PD?z6W##asPFwZ8>2ENd=PcpTN~r72mKl6b-m)Ciu3oE!Fv{isz$ z@QUC!m}~~5nSI@7$zdl^?=PdPIR&8TsM&4|M_oJ1BkjaNTUN^KntHuL%vj-!T~J=r zhl!kg!4coInV@$lz~R2;Xt!ZP{kGZgA%i}59WEM;KgtiM(&YVGH3J>Yc(&e%;M9Q7 zWm8l0($fZk=lvy*uYtxfhcbHJ-Bj)PB)*soXurpeE@8)FI4$@3LM(V{QBECjd$hTXc#-8604|^ZKXT$u%Ou+-pA`OZ Sc(nN008p-8E_A1m)IR`Lhd9Ro diff --git a/Resources/Textures/Constructible/Power/VendingMachines/empty.rsi/meta.json b/Resources/Textures/Constructible/Power/VendingMachines/empty.rsi/meta.json index 8288f2c29d..92aee55bb4 100644 --- a/Resources/Textures/Constructible/Power/VendingMachines/empty.rsi/meta.json +++ b/Resources/Textures/Constructible/Power/VendingMachines/empty.rsi/meta.json @@ -1 +1,23 @@ -{"version": 1, "size": {"x": 32, "y": 32}, "states": [{"name": "broken", "directions": 1, "delays": [[1.0]]}, {"name": "normal", "directions": 1, "delays": [[1.0]]}, {"name": "off", "directions": 1, "delays": [[1.0]]}]} \ No newline at end of file +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from https://github.com/vgstation-coders/vgstation13/commit/a7290010020e541ed6b57817a07023ca6bef26fe", + "states": [ + { + "name": "broken", + "directions": 1 + }, + { + "name": "normal-unshaded", + "directions": 1 + }, + { + "name": "off", + "directions": 1 + } + ] +} diff --git a/Resources/Textures/Constructible/Power/VendingMachines/empty.rsi/normal-unshaded.png b/Resources/Textures/Constructible/Power/VendingMachines/empty.rsi/normal-unshaded.png new file mode 100644 index 0000000000000000000000000000000000000000..618d58f847e53fd6d17a8f30a3b0957924c6eb70 GIT binary patch literal 109 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz6Hgb%kcv5PFBmd17;qdgSSC~a z$Kv3jw5I&d2Dx5_A9ru^r9GQF^ToRrtG@oTVwWj6z{pUsO3R2X^646Npne8VS3j3^ HP61KIqEP)=5XZl}8%^JYrb$b!v?Xbkf}kSQs*gVOZ%~U+`j1Jqe?vi`Pa=X42_jT3G$3iU zcexr6+B3I1KE&JZ{mR`niZ9O7-relZXJ=+-=Yaq6kA+2F?CtH**4EbWBV$lXfr#|8 zIc6+8T`3jP;hcx`+wFGDUMXsPb8{2ROLYj&@N?kf@}&}_A`KH5R!V_$4k;xVVA;NqT$@ZU;qFVg$O;=>vb}B!#N-2J#E1BmJk9`N^s6Y9=SR@gYMy192^{kY?h)6 z)~c0EqebP|?rF%V!~g(bsxmpY(S?NtbUGb4Jr`0+?TwKDN+|%q$4~p(g#md|4n*^T zh;Yrb0RXKJZ*b-ILjc2MObcfSARy$NV}5?V@UB~}7G|#xLwMNfC7zyK0D(+QOcaJ# ze)J5k>*5P*W*W}~0DyA2TnOOh_6~>v{qGLe?yc%$n9Bpc?YZW$rkl>r&MpM7@pKFi0DzPdM1;k~#lpsI+m7Wx zApjx@g`sEy0%PU?=R9=Fd7f7oU@Q+vDFFC zpcsHzIz7(=5$PHqge7g<@Am-!ul9fZUagF^9KeYHD>s%jhzVsH9aUb7NOs5Zmn8%c zy)vV>S#h-oFwb(>*#j7kW%UsGdDMf z-QC@h^Md-436Le0Wueh%05}heWm&oAnkOa|AgR}n0^~Iq7zNJnmrQ`PL{m!X7^f{X zN`w%pa}qlu+v$NZ2H*ElDwRM)I_|-af^k}GO&z5az8yRHLSQ?t&RX+t$NW(-yWpUE zHphXU30A9CU^{LMAXbQ~Q!eAe(>GYBDHa$-k|LazJV?fSHYxS zY_x^*q>(aXy^&|c%KU#294SUmPxDPiL;wH)0002csV_}m`1|8`ewYR{m}f*pRR5g~ z<{5qa^Rw}Kw%+M6-^XQ~;Vh$l92B4G`S0}NJU-{o2J@_vw|c%!{$J0#z3%PffRbcg z6hfEy;d2FaK~w-7n1dgt0j);c;%_={@l*azkNIoWhL?Tw_1lqOV`x~Vx{&wd?i!^S3pS$)urqA}6N+zq&luN!#P?)aSeq86YwGhOr3 z-NbWvm%qhNPFn!?_eruQBGS%=e8uNVHhGv-j!k2MG`@HcUX8ZJk3jmO-Ax2ad!ZO?yg}|RY8}c~|(zX2C*PF_$s7?N&L6~a*557cYw`AKg z+Dei&-P6_aVQ(^`@Yn@K@tF1zd0mtpra>k5;yfLn$$`vcK@;nBz$rdkfJ7JTfKz+|W%_krG^V@KlzjXm{@JrdB zZ_9Q5R$Y)9Y#Ht@Vt;-U-}zg$0KO5^r>Zae^KJOZ-|GDU-Bxf@GwjR$d>cOU7qQVdV<|00000003|S{sE<) Vy{s0f0D}Mk002ovPDHLkV1m^?g8Bde literal 0 HcmV?d00001 diff --git a/Resources/Textures/Constructible/Power/VendingMachines/engivend.rsi/deny.png b/Resources/Textures/Constructible/Power/VendingMachines/engivend.rsi/deny.png deleted file mode 100644 index a4ca61c04ca735f8397f67866433c5e49e269176..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1435 zcmV;M1!Ve(P)Px)RY^oaRCt{2o55=vM-;}tR2K9W>L3i3!3T#ROsyPJaBM6e1j6_t_F(7MOB0fV zPo|foh0yj8nOt--ArR*eaB>j7sKuaz6zmw9L#4zhB`u`bE{W=x+ya(y5Av*MS2Nlf zX~z?3=L0j^UG4n#?VC56UB7n@99_ZiaXb>{9hO$Pc8C{vdrtKGLE(pZ@P+g{e0y^k z`1Hn?b|CaOc3ww+`WGL6_PW?0@tGsyar(>S>De)_>-5yf%sl@3?TOtM^A&uz_Q`V; z28sVg#}uQEWE`Mb#sQku$2%}GGw%z4^fNLuk7B+eeO|BgnGRT98vt;(WBBy!7>fCd z-8TAt>v>*~_}mCMy%0Gqq~A%O6J&l%2gD;`JpB3=juvAGWvc+t^qDA>t>V_phX8=m z=Fmxd0AL8E%>yJRq^`^6XKPcaXHGeNcdDpoVs=aKUyMBSolop13T3N~ZF+w@_P2CE zyDFV;-k0#H?|LSNTy6taX0pi%s`=#R^PJEQUuYFXfHZtPx@RAwb#J@j{pZ(j;P*FE zxP4(%1R*8MnnW(QVMoGQ@QK}p)q-Oda7&gi903Hl9^FGK3nUkl_CESzei+@sz3m}f zU3mmt1h6kkkQcf6v=dbD9d<^Y+wMq^~wC@T!lA_8c+ryv!4x4nMaFXaGw z>H+v8006G8Ji<2@pJ8c#TL!_Ed#bUlN#^%d@L6{9rXg9rkOK%jl&vDQJJ__JzBn=h zZeJM1^XoT!jR4|=Ty6sZn5!XGd~&ms*OHEH-fy5NpXq>jBnof@9kq39@{q1Io3-rpIRD zc`uRk$SQ@5)?&Vba_vy44>zB_$z%mY`X#MOJ{{roePB&PvV6H!P_*&6uv+kR$kP5c zmR9_m|A`Zxj(>10L*a6O3O<mG~^fmXffun-QJJJJvjoH(~t;X$N{{Ej@0fT zz&J+2kbW7}sphu&ncMEwkqSP~ex79bo(}lu+NwDDWuqZ4v6k1~0~o;a+IuXd#k-;P z--B1;U%u-gcIKGnC(Les;&m0^CzULGakA#t! z@V@xc=8(P2@^cREb-t$q%C$q3g+>B@jZH41w0VFRHG!@I#8(mlZg4SQIe8F~59wa# zd;UjEW(2SvwdoL)9f3jMGqc35VE9=4GUX(apBW^6%LtgdnZ~8dG5q;Q6_+l@@Oa_A zXGoGzWSuLkAn>`PLB%ML%}x$7-{_3gG6I5-pRb#5>H{?MO?`l7zR8Z(EaL#pG7iuz zQy-w2Z|Vay^G$t#X1?d!P#0+uv4w0Ix`bsGIWh+mWC4ORs_mv{&-; zW#za1QVwwEl4|=+eSl`ZsSnW1H}wIU`KCTVGvCw)Xy%*x0L^?; pAE23U>H{?MO?|*;$~QVA{SQ&hhZe~8VQ>Hd002ovPDHLkV1nR3!~FmN diff --git a/Resources/Textures/Constructible/Power/VendingMachines/engivend.rsi/eject-unshaded.png b/Resources/Textures/Constructible/Power/VendingMachines/engivend.rsi/eject-unshaded.png new file mode 100644 index 0000000000000000000000000000000000000000..dc5931f654630513c01f3e7bb96f86722ac03556 GIT binary patch literal 575 zcmV-F0>J%=P)qs=pr!SHfVQ+3Xz1O z81N@3gSb&9%fyA`?o_ap>7qnBi6%GAoKA1@J}{g4dWXZEn>*wHL_|bHJ*uzO3ELlR zFCL$6c_YUu;nT;hmiKFybpETqda5p>U4VGP!qoR8oK7A901Ely)Ak&tly~{{wU=BO z_JVj&sr&(*aK|Yjp0Hs58~}Dl;Y3Tm$+}Q%VIg2T0~?6<{GYgrloREX0NY{C+2E+s2#ExH-RTxF(e?qjF*) zl`ZQ;gqE-M3f!M9V-CRm88BCOZ13CKXRp~=n?NdC#?IP=PDE(=9nS$Zj^m%1Gr5Pp zOfI5x`%v?>3h?J|?fa$q7xzh#%x`-oSjZO}s{PVpL_*m4L|vxs)!ORV%+tbR|JDus z^S4><#qE!V{npsvKYfm_!x2D4L_|bHL_O%g?+=j1{s7$*!|o4|Vnly{BxCvmq!`g3 zAjydS07*vl2S_raKR}WZ{Q;7U=ns%&Tz>!&1Px(21!IgRCt{2noUR>K^TT#s}Z3GX(5P26dF+5;wlOYLL)+xV=p3>VrdV( zHMH~xl@=cy(9-qz+w}SDzPB=g9Z@~iZm2^NH%WbZg$3GW@oDp zgw6iUypwOfncd00CD5S_b%&DOrgxf}Xd;O@tdx*m&r82lPkh+DiCaT;z(Kqy+p5yv zSY32H*}(2oqsH>o*X$9WyW+5;yNNWox;VS~u{=GQ*@l8K378(P^%q4zsmIyXk5Dj1U5>TBW&p+mRRA6rEZ))GgitV+*{14UF)YVZUpE7e z8bZggdy~41nfiGHAlYrGzH=8XEl$IV=I58O@%9Y>AUs=>-tGXXL3nltu6C++ansKm zfRhrgJbui@LZ}G(#CL&~RtcBBOyOJYBmf}bpUHgGj4q_2ABjZp`S}5Qr8QCsQ}l@f zFh9Qx0Py}T!`|!4%)WxU5f87d0sv%LM&F|f_@fRI3Dfk6hroN^C)Cy*jYai$HR>K% zpO)}$a=R!&V5LtKfP9lsz(0fA*S8Uj%K%b6FuG6!S(X7*04V&&v(zUV0^ax-mP%j2 z8y|x=K9+Uv;?4W0ZatsbS9+jVT0IrbM4m$7XSdBi8ZWGOYlsj8qm?*1k&|APkqfH5KSc0kBzBl?$7n16Tto) z(3x|s@8i|1eWl#UpaY(XHH-{805}i|#t==AJ=pNnFL(}6$eo$}Q3w384Ayf%q54Dt zP~T?Uy*G4^DJW^ECKOyHk>ajTy&MksXY$^MQ)02q%8OeNXZ=iya8~vuTrJ1vfz;HwyfuI*Di4t-1V6(hds}VGY9a{ zHyi?z-3C|tQDJ4N3EK#sO#M?s-V89)AHWMC{Q*1?(jUN+Q~!4OEC6OVz-)x|2k=5je*jN}_6P7lXnz0? z{!4!V4VLi-u)-4l0G3$BAHWJr_ybsC34Z`fg!BjSL`Z)CPb}dNV2LIC0W7hcKcLtM z?+;*&(Eb1(2<;Exf$;tS)(GzpV2$wp0M-cY58#22{s5i`?GNCAu>OEEIPnj9#s4%P)#;{jz zH3I_!1H-0`yWkibc=ztz|0~O7{uc*v{>Nu73o({oxNw)jz(|i_!e15!hROU47v%4v z$Zy)Xi$P8vHJXHkgoug`q8z}$z`(Fz-g*>E&@Ds<@7}%p|7@oo!~E568G6@!$LScN z9DpwoZrZquA>H{c!}dF7DB{G108wdR!ku=8Tg<%-6YjJ#Ot{mIYLQPqgQO8RhMwXe z&j0V;y(5?gh;o3JIvc~bo4**m)Y%vq7$9i^hVwK#8J?f}ilL`^&QpeGJM|c<=RC!0 zHc?UV?Q8&p0|NuYx3dfk4rp@oR%v6^)0!g9P(9}%KGgt`j1t zk0=Kq=XF1SH=JVR0Fq0>O&fP%_!d`TGzvz+C>RB!U`PM}IB9n`cE$-i00000NkvXX Hu0mjf16r>m literal 0 HcmV?d00001 diff --git a/Resources/Textures/Constructible/Power/VendingMachines/engivend.rsi/normal.png b/Resources/Textures/Constructible/Power/VendingMachines/engivend.rsi/normal.png deleted file mode 100644 index 45fecab42b36aee3f70874086f313689898cdf37..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 822 zcmV-61Ihe}P)Px%@JU2LR9J=WmtROzVHn1LrW2tHDHt*~95hfXJc_~rp@|SAN=$FO>_)_hMO}2) zDEfm+K`J{ zJyzQ~#t6XYYC7s4>a6*z9fM=6Ezal5P%y!G;IP2vnVPNCi2no{^g0}aV<%!jS;sLr zMktstMqoD30z9nQc>ho*p zuU`QWj@WYLE?^@Z*~Qsc1%YZ2Za&`T)ER4d7j*XsT==xWm)3az0{*4^qsH{I{Podj zl#fpj84=PY*EK{S9$y2%`@4btm(BUQ0yT;Imr?+TqR8ljCj64M^oJ^p9s1vRK3r!bDnQZRZl)vU6Hp&2S5QBlDvA*}03+l?esR=8d zxinJ~R=`Rqm_W)LKiF!H0R_c7!!KF!iz4M>zz_lTHgkUlq5DA*aljd4Q%6fRYAbnm(rC^d%Ro< zW>Y~vaPH~PIhAzmd15>U%DO->n{f7(S0Nm+A!V{TW3u1XKO}l6OF+tGkqjx3)$LJ8 zgd@AeG8Gc2MuB3(%C4yRAQH@`iWJZ~YSk{#Qb6-&)QkPdfW@j%d_OFyz?DfCZCxF# ze*ZyRR|h`#^Rg~cT%k2r3z`bR>8PM}JO1bR0~Pv6wt*e0v;Y7A07*qoM6N<$g7cn# A5dZ)H diff --git a/Resources/Textures/Constructible/Power/VendingMachines/hats.rsi/meta.json b/Resources/Textures/Constructible/Power/VendingMachines/hats.rsi/meta.json index 95aa5778c4..96ad51b296 100644 --- a/Resources/Textures/Constructible/Power/VendingMachines/hats.rsi/meta.json +++ b/Resources/Textures/Constructible/Power/VendingMachines/hats.rsi/meta.json @@ -1 +1,31 @@ -{"version": 1, "size": {"x": 32, "y": 32}, "states": [{"name": "broken", "directions": 1, "delays": [[1.0]]}, {"name": "normal", "directions": 1, "delays": [[2.0, 0.1, 0.2, 0.1]]}, {"name": "off", "directions": 1, "delays": [[1.0]]}]} \ No newline at end of file +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from https://github.com/vgstation-coders/vgstation13/commit/a7290010020e541ed6b57817a07023ca6bef26fe", + "states": [ + { + "name": "broken", + "directions": 1 + }, + { + "name": "normal-unshaded", + "directions": 1, + "delays": [ + [ + 2.0, + 0.1, + 0.2, + 0.1 + ] + ] + }, + { + "name": "off", + "directions": 1 + } + ] +} diff --git a/Resources/Textures/Constructible/Power/VendingMachines/hats.rsi/normal-unshaded.png b/Resources/Textures/Constructible/Power/VendingMachines/hats.rsi/normal-unshaded.png new file mode 100644 index 0000000000000000000000000000000000000000..abd7aa091a4614878f35649e9db5f1ecefa5d2c8 GIT binary patch literal 306 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=KRsO>Ln`LHy=BPPS( z`$G#gj!a(B+WtuIi-}rtt6@r_yg^&T|LHSwVh+7A2tL@tz;NKcm8N)UZ2GBE*T9;0 z;o%qa`pshW4e!ifE0XSW*(B)CCY|)-|8FvX*z$yN#ktS@i&w7B_{J3$9%%I^?BmOZ zpT{rCEMmTLiode7DeC7!)wvJy^ko$cjf1c4y~@bG&pI*d?*EwP=ab}be_!RG_j6IA`=>Mc1uilM z&pyMxX2W#82?p{88`JC(KFl|N#?17Y5v)8vKje-2dS#!f%^JP)3f)9a3Gt2x=0j)BS$02Bhh3& z7@K(T8;um(vVH~wD$7z0oeNQ2*BK@*DgOi~*@O_*hQ;JxRfDSX004DegAf9mrWx#o z*!+AbaBP)jiH?oQe;S?i&%^~toj__C?*V=7_j}aEilR6lua*KnzZ&>>7qH$me%YNQ zr9{P5Rprb_6~IU9O#|x<06Ygyr)Hpi1B_MgaEa*N-oXVw4ep zz4`UytE%$nkM$nDS_-8O$2|ZjeO=pJAT{5ZfKm!|tYu1Qu~>K)KuU=^)>{bwDgj&L zhtBtVz_$Rl#t)tM<%15qY*fEzZH*7&@NYf^lv0po$C;zvU;bu_(;DL` zAf-IN-Rb@1Z>G3le!mCC+I&XzVDzI8U}@-b6u%#WJX z{Hp?(Dm9%>VcWLwJfB-HxZCZ}aFb&5oxTTb+twO0$;m!3knmB_+qQ+5*EiG!e}BH6 z5=hNQ6=0I*Bn`ugl5Z^l#VU=9sQFRf18nPpDfq@@Fe|t&n$2d=bsf6#G5OI~Y1tpZ z{s8s|SjGN;h~fgIP9U||9}tw;4e{#mJ**Cgh)2LZi~#lr1Z?aN@LU^Ye*pUf*dK5f z`vW5IAAT~#1xTGhYHJSIzN(y*)nXf^4p9 zeErs=0l(i5Ks>9mJz*ZcpG&_C-wOX@27u%6E8Fy z(*Yp_k%JuNH%S;vv%0(k!247T+Cz5}PCH;}^GnDp3oqURuwSYha^a}Y5D!OvR7wRU zRvMJkM_xA88Z3T4vu%UrhER0W(M?z>6&&A$j}uZNy|`Nwz1H_c s(iib=$sSa^uO{3X=$5Rn;x6tBmj=ZdKPGS?-T(jq07*qoM6N<$f?Vz5hX4Qo literal 0 HcmV?d00001 diff --git a/Resources/Textures/Constructible/Power/VendingMachines/magivend.rsi/normal.png b/Resources/Textures/Constructible/Power/VendingMachines/magivend.rsi/normal.png deleted file mode 100644 index 3e626ac04c03ae742b1d2e889384ff0f7a8b8b2f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 957 zcmV;u148_XP)Tz8Z)I$)nt{`4Vb_sa$ zWJJj!t^)}y7zd)xCEljV?qLIBw}S(Yh%q=uY?PU553|*D^}p>|1us5mrs~zJ?|t>^ z)tf5#U;bm!;)+hE6RfSRO$Id$Ap}7Xg#Bn+)70rg2*pO%b;aKEyo5hR(dl%8)zwut zdaZxHv=rI28VM3g$Fi(IwuKPrx_&5VbcI3)48veN9;55J5|NEwi+9hi(ChUSpEGg5 zb#HsRWfhQ3s}YinOM(D^{VzIqfbn=-jDQd#Y&Wb%*p~?>Lz>o>33uki&mqQ@y$(R` zRw@Ld41*xxi69YkxBQHQ=Q@+yhZIXEYimEgbdN_x_!Wb$o)cw6b8 zI+>mWd7^AoR<{0Fo#W!wX6RIL{L0GYI}p?RmaXP7mY>c}yr?JIb65l{%ok}1W$*W%{!^U&|J`*lCm?_9q_b;+c(9IcEe1*@EKDGt1HTP+!x}G( zNmhF}90G8APwxG(qZ6=$8lD4Aty>5rP3&$B>>7@ikC9%k9Kb#RIkIz7OLr~-c?z6b z_sAro&Wl7avk*D8ZU|;~Yn-Z|%mr%SZ)ZA}_lmSSlUaz;!0Ponl}d%h#YHNW3gvQ{ zdcCfYPK%t3?4bnmoCCP7%iP=?rfE_tl_-@;xUQ?r&D*|1uVm679)3x}b=`!+BIFC- z38Nv3lV}%6sI17v3tT3FFai-0(@2)R5Q0ssks1L-Ge18c$O)i6t)dT==q*@2K%(t< z(#eO(*8Fq0uB-S=B;jTE6LekY&F?-1CJz-&)7a>>&@_#8ZyUofSogNkbv?9~<54?_ fV;DxNbAZ1ACDprW#48^C00000NkvXXu0mjfD&om9 diff --git a/Resources/Textures/Constructible/Power/VendingMachines/medical.rsi/deny-unshaded.png b/Resources/Textures/Constructible/Power/VendingMachines/medical.rsi/deny-unshaded.png new file mode 100644 index 0000000000000000000000000000000000000000..96403be7cfe525e1fb44e90301dc31708eb9c8d2 GIT binary patch literal 1022 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 diff --git a/Resources/Textures/Constructible/Power/VendingMachines/medical.rsi/eject-unshaded.png b/Resources/Textures/Constructible/Power/VendingMachines/medical.rsi/eject-unshaded.png new file mode 100644 index 0000000000000000000000000000000000000000..a4fd4d3258f4cbc7a8fc71604c80f3407c9c81e8 GIT binary patch literal 749 zcmVfqpU1ROeav1lC;22q${j_%xlwY>sNhl(f`3dFzn*JwN0j~^W4I^Ud7{wD?{6~g9!a8vy*-r z!Ex%>qiWoSoCuV@#`lc~pkjS9&+Jif$HlxM> zk@{RQAbsN+)R+PQ*m?S@udK$DKJNq0#Q-<;E%yO-JKX&oUQGpAHs3%lGdEHU5TWl# z3~19k3fX)E`?FT*v$N4$R zEAC`_PU}m<=}468hIs4sGIYIMT)NIKq%LE5Y0 zf*=TjAP8c@@cjL}*LeMxmPn+|4-kQr`2ix4GCx2h(&q=bjW6;8+(i2P0Jrf?et=s@ zpC8~hQs)PVK>GXuw~;bGKqOM<2YANBZ-oJRKR+=@ogd&i>)Uw-0IdVYtUlfK{e;x{ f0R%x1gvPx(KS@MERCt{2nonrcP#nj<{y_wXg2RhLXVImS6}N5yKD-I2T#t!nyg)t=4EYuebap| z&C7dv-}Luheo0=wt6;*e?X`2BI>D@}BtCys@#)LdD!X=+`fJR@JA3qV z2~?W3W;+||>s=F+6G_`Pl=_Bbv}=3q+?L=y06 z;h3R5*dAi)hf?1(0FvrO6^tFQBB@@?ObwdUumylp-}El9`1)ySYlakyL!PaM6pN#! zty!;=XR9I4Ru{CN8Sel9q*5t7j{HWeFYD+JQ0iOe0F88d5-n}O=H_kyz=qs!Iz2gG z-qVmPr}SewdoDp78blxv0I(iFjh#%z^lbwG0FkS=QI%hQyRcpL_KBgrI5a=~QmGWC zWgqT7_=ecT(u3fpzHI>0Jrs-p9G~?+_HS-+Qovp{1I464xrR$ z$^oa(9EZQr2LKoyd1NU28-058f%4}7H}#ov!05;$M`djUT76mc4QDaXRZ~(9a8ti5 zIY49aHP|xP_2I({AfwXNGy%n4NbmY0ASjX+cY zPo1Do$6{1r45Fd}06Kg7^-P>kXU`?3lgifz0OhOw68X%>h4xPLi{1r1bpnFzA+W5{ z%84YDhx2Ri0N|TBoVRNr(_)KL#hz;02LQr~h091Dd}zjrr2ym^oMy}L0Ky{RW9JG5kE)(0z8 z`lch{<|wd!9j>JQe}&}?sH8uD67Ku~)Ntnypyt2-I=m8qN}oWb;nE*K33vVgYPj_W zP{E}?fD$hK0hDm*51@p5e}LO83x9x{aPJRrn`Pqr&o5-S-_m>U^4vZ5-kY}ohr^jgqNzHGrs`xcX4TlWKQb^a z{oJI*gM5idQiSvOmo0DzOj zGx$g2#>d#-s5$B^%OV|3#O3uPiq#jY8CL@=MW`w|Hn-M?SsB2R0cs669pV({kM^mW zU#o%C&Nd`j1OQYnZpLCs7RPQ6uw}rt54de$XS5GwlU|Z5w^2w3|F#AO*t3u;x6#o= zJ_#Z>;i6_0N6o!>F*;T#T!GZVZ6Yg@G0URs?u00000NkvXX Hu0mjfKY`6N literal 0 HcmV?d00001 diff --git a/Resources/Textures/Constructible/Power/VendingMachines/medical.rsi/normal.png b/Resources/Textures/Constructible/Power/VendingMachines/medical.rsi/normal.png deleted file mode 100644 index 2b58e1171ab1b6ad4941064038ab5a4ccbf28a21..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 857 zcmV-f1E&0mP)Px&6G=otR9J=WS5HV3Q5gSO5<*Ks(#1t>$=%gMnCdT|R351q2Z?mTyA-sp_Ebm@1Q z_r33Z-}igp``(|a0tHPCjav>UM^pV3R+klg`I@aN?K?;d?hl4>`%W)@*Bsi{?~%F_ z$bMWH{;{z!qQdp}qi#d!S;GOyWO*YFcND%T=*}((GKB ztSiE%hQ_VqZO;J!J}v`Mal^-Dc6F?d6BReHrGbw|%C;gk0|2lt-vBQcjpSY9myJ^= zUl= zub`_3IM&$@061Lyrqe40`BY0$P7xdbz##bXF?hXR05t&YdnW(@k>Mw>mC8%oZQIg} zZahC;NPjAo!kWb3*~{+`7U?8*C19oqMIixS_eGKwD;Y3-5{g2?P`*EMuS{2(fqkig zo42lj^)LW{$%$#5%z79yd!Pa}FgY=8Nmet^&Eyb@ zc)e5`Y7MC8Igy0~SPui%!;rP7^=a)#19sH4FJd%caR~}Xarvws=fg$qQPTJGfqL3i zm(_re%YaV;!lJ!6bBhGjqxjnOOM2yyzUyvDTbWNnRNQzm^IA7fdlefJ0D#Tv`He)>c2o5J_x*%7V6{-&{ jbQu6Dn+5IP@ju5OeMeckoRGpF00000NkvXXu0mjfODux| diff --git a/Resources/Textures/Constructible/Power/VendingMachines/mining.rsi/deny-unshaded.png b/Resources/Textures/Constructible/Power/VendingMachines/mining.rsi/deny-unshaded.png new file mode 100644 index 0000000000000000000000000000000000000000..5d9acc40104d63d6f63cdb85ab4201259aba386b GIT binary patch literal 487 zcmV5}`>>e@;{)H|DMWGJ;3xcz_imOqiLI*(v-K1)y zg@TQObr9h?)Re}gF-c#BEY!~LLZaw2=vvkqaYU9!^b_2s)wG&OM=Xjp+%IHlI{3$E29E1t|#!k zml>cFyaF)MJQ@6kJJysCow9RYGZqM-S>3a z**bAtgF)+$Ss8QLHu!lBxojJcwVI)iuQb6|ng-j=b=!2UA6^Jj-|{U00I}F4TCGo$ zcx`#s)J|o>2C-Bo+;?(L2}<9T8XKESzNg^9{-xs*2wLBi0f|I(AhC<{I#$=>p2r8R zZ@CB9VU<$9ZCBhYP8-kNv!D2_Z@CBXl_qY}X#hYd(r`41Uf$~O-S%`mVtenf^-T+) zsv6X}2|&980K90%{^*RgBUSBeSjmMc;OocuPy_G-pU4I7< d1VIoZ#5cV>=te?{{Yd}-002ovPDHLkV1fZ{-%kJl literal 0 HcmV?d00001 diff --git a/Resources/Textures/Constructible/Power/VendingMachines/mining.rsi/deny.png b/Resources/Textures/Constructible/Power/VendingMachines/mining.rsi/deny.png deleted file mode 100644 index 27270145489fdc7e11c86ecee452f5ea73d28f53..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1079 zcmV-71jze|P)# zO>Y}T9EYD>Z!5>OM3S~?(#(nN1hxM%YW!7uQPUgT*vgT!H{?EM6cn1FG(%gYt zsYy%tTNYTB9n>_<jG_kuiWfFGWuIQ1> z1Qe^Vx%pB#-x&evD;85%MK@(lnZ))@$&d^-FQ@XgoV7g3db9fB+4!o34hGj$g39k5w0d%mSstE5(|p15Cs zJ_v-xuNSH0OLqZ)@$rk)YOezD@|zO@|DC&+Jg_@=FNGGaSDhE%fX?5}mIbC+$22<$ zbYm3LtOH=)yZ{nEz}V$Z9@Bg!jSrJbz5zJ@zAVdPdU~+)__HT3c>A3jzSy!ft&mE- z4xLrleso`yTYo!llvMIPyMQ<)rBzwSOb3Clr1VQpxvhgWXPR{Te=vRPa5!fY4XV&AttNmW!Rb5Gwhh2ccv# zNv+Xfd~`I@$o~F*Aa1?XnY`|+E^+%4bqRD{e9s~%Q?1d6EWkxW-i{ytQ0ChYQl2=w zw=HMhpC$jJx2E{+$4Xaz=m@Aa8f4#n5D5qP>FJZ6(zzA2=bsl}dL;&StDeTNTmIe$ zap>{h3ZE6<-}^GYbP5czpb3RtaodL;FHj}l83Fcl(b=l9b40U6`*ETpm3(InDD7(e zzH{spNXY$ECH&$bA|5cqp0eC|?OwJQpj;--a`D)cRu$j5ipgc-=o&nDJ??}7-g{%j x3CDEJNhe(QcfTvrgKbx&UoIX8UWZlj{{y2^%>*nE;!OYm002ovPDHLkV1m6t4w?V} diff --git a/Resources/Textures/Constructible/Power/VendingMachines/mining.rsi/meta.json b/Resources/Textures/Constructible/Power/VendingMachines/mining.rsi/meta.json index dc487ded34..0d0c8a222b 100644 --- a/Resources/Textures/Constructible/Power/VendingMachines/mining.rsi/meta.json +++ b/Resources/Textures/Constructible/Power/VendingMachines/mining.rsi/meta.json @@ -1 +1,33 @@ -{"version": 1, "size": {"x": 32, "y": 32}, "states": [{"name": "broken", "directions": 1, "delays": [[1.0]]}, {"name": "deny", "directions": 1, "delays": [[0.1, 0.1]]}, {"name": "normal", "directions": 1, "delays": [[1.0]]}, {"name": "off", "directions": 1, "delays": [[1.0]]}]} \ No newline at end of file +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from https://github.com/vgstation-coders/vgstation13/commit/a7290010020e541ed6b57817a07023ca6bef26fe", + "states": [ + { + "name": "broken", + "directions": 1 + }, + { + "name": "deny-unshaded", + "directions": 1, + "delays": [ + [ + 0.1, + 0.1 + ] + ] + }, + { + "name": "normal-unshaded", + "directions": 1 + }, + { + "name": "off", + "directions": 1 + } + ] +} diff --git a/Resources/Textures/Constructible/Power/VendingMachines/mining.rsi/normal-unshaded.png b/Resources/Textures/Constructible/Power/VendingMachines/mining.rsi/normal-unshaded.png new file mode 100644 index 0000000000000000000000000000000000000000..a711db836598a76f5eed6fd9493a0af54a27f97a GIT binary patch literal 370 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Constructible/Power/VendingMachines/nutri.rsi/eject.png b/Resources/Textures/Constructible/Power/VendingMachines/nutri.rsi/eject.png deleted file mode 100644 index e7a8d00b386bef3b96c211a984489b498c49f24d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2244 zcma)8X*3(!7EYQLH8d2h>(-PSiWYsPyz3GwsMgb{rbSy~s#$coNDN6@kBb=E(z?ck z*3g*CHD8ICs!^fTR7A~UNR1H@UV4AMx88ee-5>j$v(Ea?*?WKA+I#H;xSh3xsJtiu z0Fbb`4!bSb@d87N2np8D5fL^3fC#|`W_|~qvo;Z!bmyKz_XhiD!kFIvDKuj~Q&g;m z^xSzcz#Z<946ZgXA1@l%dsY&koUr_32}EVU5CJ#Cd~sIMSC2Cc^sDt9wDO5|8&?-Q zVNhPx{Ltaayg8ES80Njs<<0a}-Hh}$u2EPo4C%wvWMlSojQ<|8-rjgbgy$<@xN6Zp zgBB%@u;T=XA5hYuL{3JMN|MopK(4DI^|5!Tj_@Z_Q!Z~kF;HWuZAa?4fq!Hh4jvXx zIqyHH4h3O0o!2s^`P&B_r^@>(?b}XYus!~Ynx)CeLjTjrQXkuqXr3T)vRX#(xC~4r z;aS1gp^V5Sqnu(&ag#2Ux6Dnrf(QKJTEshDBSsL&hW)^1`>RM!YuhB4*g3`3Ekgt-N0o-)%_L?!A77iXk4NaS zO}na#eqr5i|1+T;&~zL>)~iRO%W3bjiW$86U^?aU5UndXy~L9|+7mq@@uS1qqe!S2 z^fAEESPFL`jv6O^j!17bl!2WLcz-BeV-K=SH*-VW(v1wS3ueas5Kzv!vLl@eeD>f# zn4Xq>*5f!tDvRdUkJr%E?V79Dh{}%*-qVT+pX@x}eqQ{P(6_gls0Pj;CoNUnbMu9V zgAsvS9@r~-Z9FSGlR05K>gm&1o}esV?e1$5mh?ySqmAjf8QyphyO^!f2Pm8sf~5Ns zdGhyv3OOjKH}mHZf#~gn+hK;OdfqMXS9i~(RQA+-OnK}T-*j-SXsdpgF}p~Jlalz` z1_FYQ+mQCge|me~>Jro``!#RrGIn?jrV6x_&ZjP*0${2npNpk-yYDz7A!B==_g6v1 zTRoR{mAH)osURlqxwX*UZ@sP+!N{U74+<%~4Um4luDkVi znEK(o0{GoD$NM%XoR3n|txpD2kvsw?4}3?Csor)Dy#7YdAA5!Tflpx466eQ4N-=z! zYF~IB+dJ&G9&1_G0)UfTz9u}Tzkoh)XH<;+T$R61&mA;iYw#$`=RDia)(w5WWh!=I zQl0c9Shg+hRWSNDcbSc`;#c`|a0N9zTC|5n&QXx@msNxgSS%{S>dPu$i*J&ufHYJH z-I5l@``y{^Mix?Y?`as-M4h~u%{VQI^h%dTG2A9M{l&#~=UdLqtn}9vHRowvWfw2r zbCgKBRi6Y?rj2!RqISA67E2My14yOP>QmT@MuvMf0^Q43uM;|YK%f7y&ZAP^WDNa zm(xP=J*Ud1(z+#)nzon;z?nA4Ts(ZdE;kWn!HQT+4w#QkW*N`_*#_XP1l6MSot2T0 z1xj(79Wq9J$WBr&Mz$e(>{rarOA0eSJlqvW@v(&!`j%%c2;K-(1C$wTZ|4@&)TH%0 zLo}HgiX`&(POfT}vkSbdx#`AHhE;jygWi%E?Qhr{hmq^Yl4Kf!*CA(x`XK5ZWaLnn z_FXGDqCb4KrpVU9uLAgtKt4M0y>&_3vi*QoBs1Hf<#M~A)OT&O&Jj;s$bVn1x(+%t`;5kmTDSozPDG`vu_d&WFm`bsSlMcIr4AOHe z7$|)TD+-TtxeubwD-ajC-b((z?W0HdnQ!&_ diff --git a/Resources/Textures/Constructible/Power/VendingMachines/nutri.rsi/meta.json b/Resources/Textures/Constructible/Power/VendingMachines/nutri.rsi/meta.json index 22ee707ea4..295f5467fa 100644 --- a/Resources/Textures/Constructible/Power/VendingMachines/nutri.rsi/meta.json +++ b/Resources/Textures/Constructible/Power/VendingMachines/nutri.rsi/meta.json @@ -1 +1,47 @@ -{"version": 1, "size": {"x": 32, "y": 32}, "states": [{"name": "broken", "directions": 1, "delays": [[1.0]]}, {"name": "deny", "directions": 1, "delays": [[1.0]]}, {"name": "eject", "directions": 1, "delays": [[1.0, 0.1, 0.1, 0.1, 0.1, 0.5, 0.1, 1.0, 0.1, 0.1, 0.1, 0.1]]}, {"name": "normal", "directions": 1, "delays": [[1.0]]}, {"name": "off", "directions": 1, "delays": [[1.0]]}]} \ No newline at end of file +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from https://github.com/vgstation-coders/vgstation13/commit/a7290010020e541ed6b57817a07023ca6bef26fe", + "states": [ + { + "name": "broken", + "directions": 1 + }, + { + "name": "deny-unshaded", + "directions": 1 + }, + { + "name": "eject-unshaded", + "directions": 1, + "delays": [ + [ + 1.0, + 0.1, + 0.1, + 0.1, + 0.1, + 0.5, + 0.1, + 1.0, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "normal-unshaded", + "directions": 1 + }, + { + "name": "off", + "directions": 1 + } + ] +} diff --git a/Resources/Textures/Constructible/Power/VendingMachines/nutri.rsi/normal-unshaded.png b/Resources/Textures/Constructible/Power/VendingMachines/nutri.rsi/normal-unshaded.png new file mode 100644 index 0000000000000000000000000000000000000000..783cbaa6e3e10be0eac7f0f0af5d6b42d83fcf1b GIT binary patch literal 685 zcmV;e0#f~nP)A#CW_C5Vwq5N*6N1b>$kcmK9qS|+1QCIo_HpSFB6#UkbcpT|QAC|8C?g~2 z+AV4~ttd(>i1LGo%r;&3Kl66*8mwANmwnFf%=_b+cV?hMh5w9{D%jk#QN08Lf<+0q z`9;Bl5mdln85wz7a<4z(N)>GF%ZC zQU!Z2yk^(QF+$rbLQsMg4mFQs)li5EIOZ*sEdT`S+Y7ATCRhZOz|rk9Xn+ov$Nxq1 z1qHCdF+Nno#A^jnY;ar|u0{<+C{|&^$S8MjwrfwOP8S=XWd0qQUNr(O32GAwT-=ac5yv`5kU%PzoNA77cC<+9*?j=cOg3;n@snkRi0Zl|Lz_0Tf8=F(4D@Y|@hqF;baNap zmdJP%=sDPdh$S+C4R1#oxZSGVN7Db^KrWjF5uRk9BNP#0eCyvs`rIRY3Y=O#ZfR!U zyBA9`uz(@#Q!xQlFbY8oF=vRpCuR(440`w?z2oZ{82rN3>t7cYq@;mVaCn8P+61b~ zzO^3+5_mAt#HBgmL|l29Sxv|L;quIYmw<%%qcs+~Tl4g^`~sje|DDT)K>dwx+_}}N z$GXb!4(#me*I)w93X%5+9wmmVV2#IXVDj-``97l{McRJN@ujhzhQt^aOOQOnpO(?m zILr8S1Cv@@O7DdQK!mY%YY|mG=hvXB7*STOv`qY{!`mX^FaLuI6)IGy@L%~2k&*M| T#L(UQ00000NkvXXu0mjfn1?^+ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Constructible/Power/VendingMachines/nutri.rsi/normal.png b/Resources/Textures/Constructible/Power/VendingMachines/nutri.rsi/normal.png deleted file mode 100644 index e4f030005cb49cef54ab1cffad0435dc5c805a1f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1286 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 diff --git a/Resources/Textures/Constructible/Power/VendingMachines/robotics.rsi/meta.json b/Resources/Textures/Constructible/Power/VendingMachines/robotics.rsi/meta.json index 8ab345bb1d..74a652e3c4 100644 --- a/Resources/Textures/Constructible/Power/VendingMachines/robotics.rsi/meta.json +++ b/Resources/Textures/Constructible/Power/VendingMachines/robotics.rsi/meta.json @@ -1 +1,38 @@ -{"version": 1, "size": {"x": 32, "y": 32}, "states": [{"name": "broken", "directions": 1, "delays": [[1.0]]}, {"name": "deny", "directions": 1, "delays": [[0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1]]}, {"name": "normal", "directions": 1, "delays": [[1.0]]}, {"name": "off", "directions": 1, "delays": [[1.0]]}]} \ No newline at end of file +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from https://github.com/vgstation-coders/vgstation13/commit/a7290010020e541ed6b57817a07023ca6bef26fe", + "states": [ + { + "name": "broken", + "directions": 1 + }, + { + "name": "deny-unshaded", + "directions": 1, + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "normal-unshaded", + "directions": 1 + }, + { + "name": "off", + "directions": 1 + } + ] +} diff --git a/Resources/Textures/Constructible/Power/VendingMachines/robotics.rsi/normal-unshaded.png b/Resources/Textures/Constructible/Power/VendingMachines/robotics.rsi/normal-unshaded.png new file mode 100644 index 0000000000000000000000000000000000000000..6d68fe041e237d726b9078f11722701ebabd6e53 GIT binary patch literal 429 zcmV;e0aE^nP)Kmg6vn?cQ+1o#iHS?9x@3xM6AQNblA5Y&3<*h-n#m#h7gQsgG&#LW)K>Hmwaan~ zrmk{tW-y>oU|rKL<7c>gJl^~6csvfMsX1mmPop5# zVKfd0TJ_++QiS`aum~Ar8{c*}wz7EFGYkU&FquqB3&`x%x~>xdybT7>=5qkw4W{e5 ziKOA&Fbv$U*OC39)k44DFZ>tOY~7;gUN1Ua+{|YGXgin7yW=@l?OV*j8_~f9)YNZNhn+xhF@&5v2(oybs}MX75|)ug9S{aZ@q@i9a}$Dt zr#Xo%9tIWg+c)U%d!Z9fG`YIS=TMgigg$Sfnh6zF#4UIo*I~{P^;B$r>CbmJUm1Qf#-QR zj-wpPztn{g%8Bp$Se9jgot>Q-0}(=SetypK^0GmqPb!5%0U-oqV`Civ-9#T@5Cqt^ zjqm#iA&iKut*sFRfzh{5FBFSKqfw4148vGGj)kxV3DSr+wro#)RF z02mzfdHVEso;5 z&o%us;Ezw=L)t6M&(9--P+wFO0X=ia$H&QJG9AXfO1WGn48x9CzHugtyT@g zdc96In+3piT|R#Qm@j_*lSZSVY+Tpno84XBjE)+8lX9kmfHbOBtJLfDo<{4sE&v~2 zz2ZCI=;#PQC2rRUwA<~DIg%reN~6($Dm0>X+CNU>HZNlp$TgbF<;dl7iH;sB<#Jg8 zOW)Cb;Bhx6D=RDin#g^kB4FFL(IAuX_QjVS3E8XYn^$z2`*b5YM^V6E)0cex+h8KV z`ue&`+U@P_p2!(F;QM}0ou$mp&HbZ(1_3=hdIBo#+uohaB)m^l5(*&_&-njRR0QOi zE=A^n>$)9l`^DS0O4oP2d_E7r=H}*u38)CjGh7G%Fg2w}=-_WgN7X0EIwky`Zd2qI{ftP8GLHj%S%g3cv}6B4}y;n0NCB#1;Fz>!_aXY z04^>rR9z~SVrXdSUVx-SsDpqmp65}o*BL%I_`B}qORlf4IX*rnl}afhl0Z70P6XN7 z+Uiaq?jQ=Z!^m+QuCK2Zcq)}rZRvEHiHQj#I&c@E{r&w!aELhzJkMibpr}CgKcK*) zU=mRObdiTpbV?Kfd2<1%)qXI@==l&A0ZA+>vQA#v5 zO^kqEr|bIY6ECH*!Sg(Jc6NZ|3rSoAn$0Ey0|N$dv)NR>w2rzqSb1}5{Ay>UW$4m4G$0B%7=+<+qBzl`uqC{g1~qwNj)0Q=%YjkVQlY< zi;F4`PEJl9br2XC8M&1JVBTcA5zrs9@+BngrH?QSDV0iWY-|_=j3k_$oka-2!omV@ z_f)eii&CkCWmy!9MQq!qSS%uhQ0=mxwA1aSKijrDzybaOqs=qCQ*0N500000NkvXX Hu0mjfD3blE diff --git a/Resources/Textures/Constructible/Power/VendingMachines/sale.rsi/broken-unshaded.png b/Resources/Textures/Constructible/Power/VendingMachines/sale.rsi/broken-unshaded.png new file mode 100644 index 0000000000000000000000000000000000000000..86dde0af4eaf1a905decffa8bbc4f11999985660 GIT binary patch literal 5177 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Constructible/Power/VendingMachines/sale.rsi/broken.png b/Resources/Textures/Constructible/Power/VendingMachines/sale.rsi/broken.png index 50d487e689ed5bc925c911d79d2cc6dfa6a1b85a..5036439a630656835bc97507af30cb0c958eac87 100644 GIT binary patch literal 2444 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 OS6) literal 0 HcmV?d00001 diff --git a/Resources/Textures/Constructible/Power/VendingMachines/sale.rsi/normal.png b/Resources/Textures/Constructible/Power/VendingMachines/sale.rsi/normal.png deleted file mode 100644 index 01cec66b56e711b95dba6d79725304d3ead96f9f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2157 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 diff --git a/Resources/Textures/Constructible/Power/VendingMachines/sec.rsi/eject-unshaded.png b/Resources/Textures/Constructible/Power/VendingMachines/sec.rsi/eject-unshaded.png new file mode 100644 index 0000000000000000000000000000000000000000..de939af0da6f44c66d2e266ac63ecf536ac6a6d9 GIT binary patch literal 644 zcmV-~0(cA(6c-U3$E z9uDl^_dES}{p7hq2=C92ciwho*^}iYl`pLTrAer0V*`)NF^USH&R3cQ8#gP%*TDLR zI^O^K{b=8ByRz&FAwpFEb-uI$9H)&pAJ=^En*e}%?KJ?va@wQ)iF0=jFLBi z`^RZnR3iCG6)>y4tyR4Je2TrTRmzx9`O<~Zw4qTigsAgpngr{$6KrgL8g2)Ip2@SK z&R3cP{Lk6JGkJ1hLM7>Z#u8>2hSEf+dfcSI88e^Hd!}h3m&-{9>U28j^?Gn!H?pTd z9QlEhplOI{Q=ap?+;*%kPx&)Ja4^RCt{2n!Rh=Kp4iKG!7K%p_fi-f^2Fi_@Keg;3;zo9#SZD=;S4kp?^Sz zEbWk`QVED3~kNKTflZ`-=NH2#5+zRNH$z<|UQ53hPp=h_;I6Xa`2u59@o}+-b{+-yAZV2N5h~5FwB-l)$P`G6Cv$M0Y z3F^9TYFW=kQThpMV>+EirBaDa8~`*;L$O$duIr9A5&8+gj)Oue9e7>d`nCXAhn}J+ zc=7TTa=A?CjWwGs?0k9;0O)qRj&?$bspB>RMChAEP}4Nj>vh)+mv?KnDFEc==WNUU zwA*dRk5RAJ9T^s-?|BMX#nn{CbqZWXy`SUbV*r3*7&xlV;p5IvldrZO-NdSYs-H#DFB{El}Q3G=_{>1lL29jK~$-D9wW=b>-A4{$3yYAR!H*g9`z z|98i>Y|X%z5BIUMcwuYzDsUq7%@IH;#lpe@Ha9nIokJC&Tn0<%4acAixIGby(hpSx ztA8GtKgRsyG9K+!9P>ag11pOcFbuGjYlcrEePnUd1W-bl`ep#UqTg(`Y}Z+KP42%j z2_xo*D1F}|_~YAW0Ki*w`IqlB=zyX=B=OMq3;-b{au(Toz}3Ty_5M5RTV7uJo<)$& zN7->ENGU}=pGQ8Qx3vcykehzkeXt&E6n!%Q?CvO;Oqy?I6h#3c1YzFNvW>GHiJHA( z^$8*9cDs@FeQSXA`8fz(*FgxeWnvU)nil%y$RHn6d;`EJ&Nwp@I*R)0B@x82k_?Be;pnNK=clXMjC&BD5UZSh(KC@057ES z2Z%r#e}E{Y_XotyjqnG=iB$do5lG_?5QQ}U08vQq4~U!p+8+=Gsr&&Vkj5V%3TgZS zqLA7jzyoRh0lbjPA0Ps0`~jkn-X9P*V}F2GgJ^#MFQoGa@J3pH057EU2aMs!KU)7q UYi?ML>i_@%07*qoM6N<$g1{x}MF0Q* diff --git a/Resources/Textures/Constructible/Power/VendingMachines/sec.rsi/meta.json b/Resources/Textures/Constructible/Power/VendingMachines/sec.rsi/meta.json index 6b9dc19981..2798539692 100644 --- a/Resources/Textures/Constructible/Power/VendingMachines/sec.rsi/meta.json +++ b/Resources/Textures/Constructible/Power/VendingMachines/sec.rsi/meta.json @@ -1 +1,52 @@ -{"version":1,"size":{"x":32,"y":32},"states":[{"name":"normal","directions":1,"delays":[[1.0]]},{"name":"broken","directions":1,"delays":[[1.0]]},{"name":"deny","directions":1,"delays":[[0.1,0.1,0.1,0.1,0.1,0.1]]},{"name":"off","directions":1,"delays":[[1.0]]},{"name":"panel","directions":1,"delays":[[1.0]]},{"name":"eject","directions":1,"delays":[[0.1,0.4,0.1]]}]} \ No newline at end of file +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from https://github.com/discordia-space/CEV-Eris/commit/e107a20eb3e8def075a7d967dbf91426accabcbe", + "states": [ + { + "name": "normal-unshaded", + "directions": 1 + }, + { + "name": "broken", + "directions": 1 + }, + { + "name": "deny-unshaded", + "directions": 1, + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "off", + "directions": 1 + }, + { + "name": "panel", + "directions": 1 + }, + { + "name": "eject-unshaded", + "directions": 1, + "delays": [ + [ + 0.1, + 0.4, + 0.1 + ] + ] + } + ] +} diff --git a/Resources/Textures/Constructible/Power/VendingMachines/sec.rsi/normal-unshaded.png b/Resources/Textures/Constructible/Power/VendingMachines/sec.rsi/normal-unshaded.png new file mode 100644 index 0000000000000000000000000000000000000000..1299157d198d74961bbbce95ee125bf968c461e2 GIT binary patch literal 387 zcmV-}0et?6P)Nkl{^2;C~=GxP%p-7Gi=bu07(6dWCdLW2nDM{qidi$jJM zTSW9$Cy9fkN!qkYqaeclAiQ_U-Fuh!?*5=qC=`Fp#;T9!7oEVi&D_C+@VUA?TN!hn z%{-Ib{vcri?5dR*7p0UZxo()L7QX*_8B)q%>RDXhzSHh~q*f+#0|4WZk8YTZM^Q4} zh+5-3KhgOtCEfvOnwHs)%ogZ|ISU;3;|yP4QrAi;gU6e_py8B*W$`mBkn0fICN&n@ z@hcSo@ZNT2Pe}E^W&iGe!H?5$%7K*fXB7~_XZz?dHhuuW?Qa2~3qSJb);7Bnrk+K! zJE7gvQsd{UKv7!t3cDvmTJ_4(IhjJVZqjvysL&yF`vYpH$1@wUN)rliKnOo^&qGa^ h7bb;5p-}u=z5tTefBd?BS$F^d002ovPDHLkV1m6cubcn? literal 0 HcmV?d00001 diff --git a/Resources/Textures/Constructible/Power/VendingMachines/sec.rsi/normal.png b/Resources/Textures/Constructible/Power/VendingMachines/sec.rsi/normal.png deleted file mode 100644 index 39350f52693086944ec4ae6bbda9bbd66e6423c8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 789 zcmV+w1M2*VP)Px%&q+i!N72T1;WjSHP1iv4pUtQ9IG=^#A~d zVc?>X#{0wHC^ub2*PjCbV4QWJ#1b&hW@Jii_G%t||AIH;AiEcdM9}Sap(x7KLQD=g z>VPQmlvsi-%=dYm{OsDsyaFHJ-NtTVY@6qKm;!_lH{+cb_-(|hT&3x$HE-Yv<`0FPjO=v08p#m1OO;nXV#zE zPzCl5&T-L5WAES`Wu}H5E8PqBch+(D!3p+v);(=(3V2mN>GP569-oY&!~}qHb8Q;A z_g8SKB&=1N*nU`GEd^f_ip8SqIa>XM4tPbcX&u{lPHTd*F!>=9VQvzBJ3R&fyk_Gc zb6XywfJB>=rvu?|*mo4p=YYSP8DIasPT8JGNc+ni&nY1x1lepB*=*J}KQ{+xb&@2B zos0+}uq=y3H4m0$fe^wRzm^=JKIBEO0~Fh>DdmYJN(9M6{hrE~om z@j0+6@VlX>0?(g5LvnKiUq789xw(N-sRUV;eJ7-8n!+`la47(+Rt4wZ@ju5OwZm+s TSvd$V00000NkvXXu0mjfD)n%8 diff --git a/Resources/Textures/Constructible/Power/VendingMachines/seeds.rsi/eject-unshaded.png b/Resources/Textures/Constructible/Power/VendingMachines/seeds.rsi/eject-unshaded.png new file mode 100644 index 0000000000000000000000000000000000000000..67483d624e6e8cfec7b67fe4f0512caa3d95bd4b GIT binary patch literal 2220 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Constructible/Power/VendingMachines/seeds.rsi/eject.png b/Resources/Textures/Constructible/Power/VendingMachines/seeds.rsi/eject.png deleted file mode 100644 index 717c131e38d3bbad31200560ff8d868813f6a0ce..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2555 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 XN*p56NF?n900000NkvXXu0mjfA|xJ> diff --git a/Resources/Textures/Constructible/Power/VendingMachines/shoes.rsi/meta.json b/Resources/Textures/Constructible/Power/VendingMachines/shoes.rsi/meta.json index 69873a4421..aec9da4eaa 100644 --- a/Resources/Textures/Constructible/Power/VendingMachines/shoes.rsi/meta.json +++ b/Resources/Textures/Constructible/Power/VendingMachines/shoes.rsi/meta.json @@ -1 +1,31 @@ -{"version": 1, "size": {"x": 32, "y": 32}, "states": [{"name": "broken", "directions": 1, "delays": [[1.0]]}, {"name": "normal", "directions": 1, "delays": [[3.0, 0.2, 0.3, 0.1]]}, {"name": "off", "directions": 1, "delays": [[1.0]]}]} \ No newline at end of file +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from https://github.com/vgstation-coders/vgstation13/commit/a7290010020e541ed6b57817a07023ca6bef26fe", + "states": [ + { + "name": "broken", + "directions": 1 + }, + { + "name": "normal-unshaded", + "directions": 1, + "delays": [ + [ + 3.0, + 0.2, + 0.3, + 0.1 + ] + ] + }, + { + "name": "off", + "directions": 1 + } + ] +} diff --git a/Resources/Textures/Constructible/Power/VendingMachines/shoes.rsi/normal-unshaded.png b/Resources/Textures/Constructible/Power/VendingMachines/shoes.rsi/normal-unshaded.png new file mode 100644 index 0000000000000000000000000000000000000000..1ad15d7ffad8e93cc43e61ab374e790c13752d64 GIT binary patch literal 282 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 JPDHLkV1kBo+MfUb diff --git a/Resources/Textures/Constructible/Power/VendingMachines/snack.rsi/deny-unshaded.png b/Resources/Textures/Constructible/Power/VendingMachines/snack.rsi/deny-unshaded.png new file mode 100644 index 0000000000000000000000000000000000000000..5d00b8caff83b15938305d3a93e0d9b77245702b GIT binary patch literal 877 zcmV-z1CsoSP)3`mwLyufCB=(S!P<*;He*Ul*bFy7Ki9L?|XphQDm*AuD+Ykf`A z$Y@6)Zr`84m4}lF^&PYhY`@wEcgTTIun&%)8vt;k^e6mdu{PcvTL1vQnd4Q>O;OP< z6C-7)?{qp12R)76B!Zj`Q^;BuduE+y5&&>8YY6~gV^I+%UUci%$6H#-7u1qlC0=5* zBP{hbO(VT`SCcb)GpPF1NZt5-hz!3=M^9)9!@gwzfRmf1aJ^eabygbgeTtx5Rk5@2 z7^=!VNu_%#^r<%#?yfid7T-R)$-D+w(Kk~A415C63s6CR-aq?uZGmVFSb;lAvV*s( z?{qp9PtAxz8$4hj0Gaz5P+MIEb$^3?t_{&*RIaK30PlrgaJ%yL>nv-46@4=`fEs|a zu5`Q!^x*uOrI?;+O#sx^cw>!TZUZ(y(+^o@fE9hF8PF35Aff=>fgr*k!WbM1Lu;zQ z%FCSqqH}UQEHl80KGRviN)ciSZ+&V8#1|kVMTlhvSkX6=0o0Y?uIzpw8vy$8^rH)I zS1v}1D}mR3)cd~T`Dx%($uuI$0GE}Z6@4=+L23Z-_;YN(4Cq+yLB+RT^v!B=Wc_y# zLU7cmsu@zH-R%uS$63s%z*eCxBhr#D79F1-VS}{ReQF$(GI6lf8JT3GqaSK zeUo#ETX~M1`qXLAO6O;bo4wa={dohBZ2BhqDcGf-FazQv*`85M+B1qxy^&-Fl4^a4 zL?V$$Boc{4vUm~RAHW-G=i0~tG8%Fq6r9%o&sXLQz(2NDAGq6<3jnxy{IJl2or?wF z58#XN{s7(x?+@V3g763MM0kGyZ-n;;@J4ul0B?l%2k=ICe*kZU_XqGse1AZyNVPw} zE`;_6*ukRn2be`ze}G*G?+@UOu>JtM5ZWIgk?`jao?)wKFw&@;00000NkvXXu0mjf D%>R*R literal 0 HcmV?d00001 diff --git a/Resources/Textures/Constructible/Power/VendingMachines/snack.rsi/deny.png b/Resources/Textures/Constructible/Power/VendingMachines/snack.rsi/deny.png deleted file mode 100644 index cc277a5521c3fd6272f4c227f39884a9c03290eb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1191 zcmV;Y1X%ltP)Px(VM#vTd{L!+zys zcV}kz&Yc^w|CgD$_sspDIdkURJ2U?hGN8jz70c9KD0W9eC3@^+^4qc*uPtj3O5Q&+ zV#r<=f2mNGMTlYmtaiX^EcpOrErJbCJ|mQ<|KRI}>}Bz1oR&5~>~TkxPzMf0LY&OP zXC;5}5y;iqwZiyaXdMg9IWI63W>0v=xM!01a|QrlrDr?-K#*GJs#II@c>eZs&wc>B zJKM1B`JL`{*LY>>jNywYl)u;Kz{AUIlg89+#e3pc;3eO!C`EJjQ~8q z{yIm-(>9)m9{}KT;<)9@FJLt=Y2Zo)^1EFwpd45ZgmaFsqXtA-c2|VzJJR)IN7H`* zY^g2-;GQ*WxO%ED)$iTe#_>xJ(q7%9J-iA0y*?k`ynUSwcmJh1x@HEHMQvR9)z06) zMff8S1YrNrE%*aLT-Bxc13`ZH=yM)<@j3do90tT@KtB9NGC(r`A8)Qm?AcRo`}!OJ zd^;Hh;B+Ly>G$`gEJW6TeE5yj0A15yvH;aOSIybaw1s#EJhb{JKApUvXL#ZKZkLN^ zUn}S2;Bw8eH3Lwwxt*;~KY`<^_Eg&^#Ea4Wj`*GMym^DhdS|L%WDUrN-$)J648Y6v zcKQd-vA3?An+fX}u(j2bHafEj?mLz`6qy0}@C(g=a{~iJOQ3IHkl>{t{y>mxueMP2 z&W}KRPM!~u8ITXZ&{?3z`^$p1z3+VxUsXpEHb+mvQG2QgiJS%U;TO6Nm|uYO6d{or zkPpAm40x>OBGdp}XlHvu|}9P9nG-923w-xI>doa{Z+ltM?n^U&J0L8(J@{_|I7#t zrL_QzME$xQDYOol&7XA|G~lOh7?}pG0IYVvYApEx zD60>U1ts+XGEsa4a&=m*50C-n^#Nu>d3}J{SOoe2bD_LGz-%b54=@{xLLXozl-CEC z4dwL#WfZ53TF3`22iW|+FbPr}9I+k@MxM<%6tkwsZ4dwL#WjPv!S$%*kD60>U1?BYtWi_H@ySx*~rymVc}Bd?^~q|g-i%2%jq(SoX;j!TnNUiN#ZwqdhSiXPu&Z_kNd*;XQ?)|oYUaj~1&$*rA=fqhY1)%7l z*Nrbsd}i_2{xm8qJ?eTfd*bIG$SHPhL3>!l;&ZqN9l@oDRQqZ&T5-TU&`7`VlxJoa$> zeDasj&E$Y-yJb<&@nQ-27_1i9@>c=GRhVg-su(h>5$_f4u%&{@@M4jI!Fh z+ZX(8RSw`VICNRxFXmin&(7}$Z~IBz-uLkn&zyT!&Nsd(D#tGZy11UV_K)eedg+q2 zT8p3k7C8LbsW10W-9$}`UYgXN#8=rX~{m-Y@o4Wo@k`##FkhMvD<+U599&N}+!sh+{rx%kY5mNuBl1A2oa&g5 YSUfwhM#{Mym~R+7UHx3vIVCg!0AysK6#xJL literal 0 HcmV?d00001 diff --git a/Resources/Textures/Constructible/Power/VendingMachines/snack.rsi/eject.png b/Resources/Textures/Constructible/Power/VendingMachines/snack.rsi/eject.png deleted file mode 100644 index 056bb7f1e0a079ed8bec035f2152c341de7f094e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1156 zcmeAS@N?(olHy`uVBq!ia0vp^2|(6H;Lx~K6ba&O5#cTeNvkmCAKAsua(X-^14-8>bgs4XU^+2Qzg%=n6y)EpGQ&V<(PN#zRqHQ zUpL=;XZ5GuzwM^q|GfVC^JrJjUrfF;gPwY)mTLt*RXOMXYiroS*V$GvqVn@*2XuY! zuG_j=tI22*!&wg|6J^c|Jx^8ceEbo-j*C~mCRX#F{x8+(snUv{GZvh@$|d8cYLU0_ zd3vp6lS#5A3!}`A(7mEx{8Yta(qnu-Wfl4DO|!eGKbxT;bYXgjWMNeE>a&~vRDOKk z`oWGt>7vGT_FX^zJP_UY<73*>_79WyDT`;AGr2Ris4<<_C9U(wlnXQ zFKWc^tL^PA|Cd%@J^%IXZw<3bbf?#^d;C2Y-N>9)>r`g6OMgNx=R))U zOE=qQ)V+Tu@usx)Hp`wnamPQLko>mgYO$^OT*hr*+qfLo3k~zOIjnzu+waiB#>w5MzU}$$_-(D5mU!_S z7Maz?>Wb#!igDMszhyisJYlluiL+uafELPq@HkzW!Dw-Q;>9wf z|D)g2AGGdXKY87(CztP-LJU@G$QNpTT%E9>P zhVJ|?(`!%vXWw&iL*rfTv?;G|TTgv(_t=~HFAhda8Lm^aG`W2&x_*9GmHd10zng3q z;WQccI+3@86@lo}cC`zO~Kh>6hm0T{lEtMT(e9^vy_qTl8vm%;H7) z)|~6tzkI-8%+sbk&ECQA=p%2%_4z)18~5M8xn!5jFRc|Xrpq=xyYKLnT|;dD#DxnY z;-~)auDdBWVZF=!67Ivr!X+WwnG7cOS*|+~bUbnW>u5b^(N`}erlu~K|FxAX$Vj>F z*8KI-AK5e9%8q5a2`!NHY)DgKoF!P_kak3Vfg~^kDF0(P+hOlu{D}WT&kttOxfb8p zU)-A?pIPs;wBQZ@g}wIi)9n*?7QW#RIQsVQ&#B+kL%2ZJ|6y#}|C9gX!-?y*T6clU O7zR&QKbLh*2~7Zh#Wmdk diff --git a/Resources/Textures/Constructible/Power/VendingMachines/snack.rsi/meta.json b/Resources/Textures/Constructible/Power/VendingMachines/snack.rsi/meta.json index 4db277b7bd..cd0be6613e 100644 --- a/Resources/Textures/Constructible/Power/VendingMachines/snack.rsi/meta.json +++ b/Resources/Textures/Constructible/Power/VendingMachines/snack.rsi/meta.json @@ -1 +1,58 @@ -{"version":1,"size":{"x":32,"y":32},"states":[{"name":"normal","directions":1,"delays":[[0.8,0.8,0.8]]},{"name":"broken","directions":1,"delays":[[1.0]]},{"name":"deny","directions":1,"delays":[[0.1,0.1,0.1]]},{"name":"off","directions":1,"delays":[[1.0]]},{"name":"panel","directions":1,"delays":[[1.0]]},{"name":"eject","directions":1,"delays":[[0.1,0.1,0.8,0.1,0.1]]}]} \ No newline at end of file +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from https://github.com/discordia-space/CEV-Eris/commit/e107a20eb3e8def075a7d967dbf91426accabcbe", + "states": [ + { + "name": "normal-unshaded", + "directions": 1, + "delays": [ + [ + 0.8, + 0.8, + 0.8 + ] + ] + }, + { + "name": "broken", + "directions": 1 + }, + { + "name": "deny-unshaded", + "directions": 1, + "delays": [ + [ + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "off", + "directions": 1 + }, + { + "name": "panel", + "directions": 1 + }, + { + "name": "eject-unshaded", + "directions": 1, + "delays": [ + [ + 0.1, + 0.1, + 0.8, + 0.1, + 0.1 + ] + ] + } + ] +} diff --git a/Resources/Textures/Constructible/Power/VendingMachines/snack.rsi/normal-unshaded.png b/Resources/Textures/Constructible/Power/VendingMachines/snack.rsi/normal-unshaded.png new file mode 100644 index 0000000000000000000000000000000000000000..10aa4ddb02fe562a972f3ba91889a2a3999b3cce GIT binary patch literal 784 zcmV+r1MmEaP)1v;sWmwW22wnT4ODV4wNi*!6%T@1QHZ}F#Y+*b^dMG55Jd2zH?bfn3gS^j zFiNplP>L6kqUnznGE=jX$!xX`FxoaM;p9J7& zuo8fcjg3sa=*u2AP172_x7s>;&}S7p5V!P&4ya6f8Gl>F=XX)54`TC zE&h$?XW;avY0{qeQr-k*>x-Ac$6s^5H$%^gdYZovGm=+wZ2b=`%i=__s-@tTey_jD zhS%7IU&|@|c^y!A;`X1fin5kngLgvT_O6{TUhII~)Sq(|==C>Qr9R1ji7(_jPU;Jn z!G#PyU%b?Foz|ao0?M^-xqk(x^yhUz;Y@bPx(3`s;mRCt{2nq6oVR}{y8`CN%KkcR|C(1pYV8fz6JYDEw+jo7kCVN)XjEnY8u z&2#zf^fONWJJs?<$mBN+K=rXMDsSgjb}v8W3jM$03S8Ow^CB=e!1BeQ^!|3+K=0+0|CPzs2k2_aEM{eBOV?!#m7x zm;pKAT>9?h@#J2JN17ji#?C4DG(T0v+4wX+fB*O^tF~{Yb^STO-V6}UZy11|))d6{ z^7OXjtu6rmcp3)adML#8Bgb_MJ8OVwepAa}ya1KDXN}lTwuR^&*sv#`D;?9#4DTqv zVE_u&Y-8iPFL15hrnmh}v=}XQMel^?!2eX1yY+rMYk+8e!vK6&o=02zE%ue=^EPH3 z0XEip5=J*x!Y3E?Lpw7-G{0d0Znd`)&VttV4*U=N_%uJychyjI@E;($CXa@l86cY9 zun0CaUmMf5@9@#+Q*|h2bKxpn$kU6EovVOoe!~nHU4YCKAv-fbG{0d6d{%NFN&xP2 zZlIjX@|irYS`FUwZ29vAmv+Fni{28>>fx8zId*1%Xnw;0@K+$QzXX~K=TH;8OV==y zO&<*si9~b<+_UEbp!IZ`x=1JaQ+^NFU$B^+(*`X2TiYApP+{~D)%`&s+RGqk2Fv*V z)lEy^17z{1&4Bv;k`c#dKW(2GEQ{_8LM(sZ3o`gq24FZ@;{7`H`+03|G*yRx&$s$7 zzzKfCA0zQWHr3T}xv6E0-3m`NCmI@3lE>T5a?{WmC-@DE;DVeAPBFmcrWRIss>k#v zb80mCcp#cT?GzY3fY#H=i3amkeY{ga7Ju3dh&xf=UqahZHx=2X0Cb0arX3k?9T3f* zav8MXr)gMO2A$-eR7e^Tr}Y6cp{zbY7AF0lp-cdrcED*&`T!`a50C{V^#L-GnF8rL zoz@4)fb#kP(NJC=AQ}@uA0QUW>jOkXd3}IrObC5|NGPul5Dn$^0ivP2K0q{-*9VA( z^7;VLP+lJ(8tUr<1Vc%EfJ`W@50C+6^#QV=tUf>%l-CD{hO+tqSx{OZAOlM312T|^ Ycea{mQK>WZ_W%F@07*qoM6N<$f`DiTH2?qr diff --git a/Resources/Textures/Constructible/Power/VendingMachines/sovietsoda.rsi/deny-unshaded.png b/Resources/Textures/Constructible/Power/VendingMachines/sovietsoda.rsi/deny-unshaded.png new file mode 100644 index 0000000000000000000000000000000000000000..155d490ff6b0e684c5504e5ceb514d184e664b0e GIT binary patch literal 348 zcmV-i0i*tjP)&0#gI%^5FI54_LgfEae(OM&Klg?#xUnd$T^b%9U_0KiTJnX&Kh u@5WbM0ZseKqcnX2P5TKUgb+f=D{uvPbMadl2bg3400001KIqEP)Px%;7LS5RA_FsKxnKLR`na_=A=6JM|0-{QRm>`Z62?BPV%E8mwxH6%zrusF28mu~ zR4=cC&kO)!D${sZb88XbJ@DnQH6FiZ5;QI#&f zR0ceKAII5x#$|Y8rhBOmX_s|WR$=m`rvUv0h$Hm8q_1HpEIxA;7|feN0ih#G?n@UA zc;{cKGJ9!^igfY08IV7j#=9-tel>-SnJy})Uyx4a&@vn7H|tUdB0Bkk8ZgkOTX$jE zHohls;?O?E!yngR*)|f9B--sGJc=E-#?F1{0+}vwD&_lF`P>>n=8k3C0DwdL*!92N zKJp#6TZrRx^B$_#r^FtNnJ=sX0Pvu14sQCM2Qjy^Mk^kT54=$&NsPHHV`v3p{07*qoM6N<$f+$UQ2mk;8 diff --git a/Resources/Textures/Constructible/Power/VendingMachines/sovietsoda.rsi/eject-unshaded.png b/Resources/Textures/Constructible/Power/VendingMachines/sovietsoda.rsi/eject-unshaded.png new file mode 100644 index 0000000000000000000000000000000000000000..27d8062b02806797c4cef4dcfc6b2ea567c4a4cb GIT binary patch literal 498 zcmeAS@N?(olHy`uVBq!ia0vp^2|( zSZq~^xa2*nLhbus2hGg>-?6j3iyHs90_|X!k(L?Py#7}2ZjS?LKeO`MPX0Wt_3&#} z^sB4eIy#=5YJQom6fWnp|NFL&-vnDZe>PelSRJD2V=a6A)4mN0-tI^-jjv>Hd3nRy z`q8ATHA`g+?%kbGsQdo)kHY&uucm#fykl%|`sc*HhLa9^p1Z!U7TPpRzM^$rIpfOk z+d->D()ccEzw$cLQZsGge;fJCCl-Cb|8001=679emaWGnww>@3FLw#+a z|GK%lFK=&qvqr8fwe-oR+a6yGP8aRFq_radwvy5%sjoG+r(Ka# zw(=hRA$L^f$j;rte*EYGv-Q2=l~vn>e%ikN8M`$2@j69d5V4sS}%JKX)r5TdzOuEc)+{8X>{ gh)JxV_%yi4|Mge1wBp1^oFFqjUHx3vIVCg!01DXW-2eap literal 0 HcmV?d00001 diff --git a/Resources/Textures/Constructible/Power/VendingMachines/sovietsoda.rsi/eject.png b/Resources/Textures/Constructible/Power/VendingMachines/sovietsoda.rsi/eject.png deleted file mode 100644 index ca286a53d80f8b4552bf6891d04d2bbba2fd8758..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 993 zcmeAS@N?(olHy`uVBq!ia0vp^2|(Ph>FHmeZa=HpU(T;Gdh?_ziL+GX+J?!m3-=#249>Y=zgUR>v`DF; zXY3x{UkgPQ#1n+(%u!njRsHFWpwHOnrQ2=eOc&F>CDEn>*TFC^X+%? zJm~+O%k}*FY554o*V3t5>U*~{aU|C+&Y5yetoEsq2t(Mp|9Kue%J=iiwwlTuIdlKb zuZ6`8I(Fuvhwg-MGF-3iw%Qs%2mXMWwGeFT zT5D( z(@)i&|G(ayynWZ6<3ZA2VgBeZQ;QoUc8AHbGi=zg_07%m&!;ne&Yjk!VSD%3VV~sH zLegK9pEEG*_?&iq^M5Oqh>Ka1G8%ynwG+;3|9;Z%!ji}K+atBAjvd%>W5N104D|;S zjrZC6elIc7y}{(FH-K)ZqYik{zdc7c+w zcdu~-_pXUw6Bf88d>x)A<**6-mLaGddvL9PFP$rsxpJ6KKa6+QCg#){px zi2;?{US^+VEbJ)0X!dHp2P@0gSt@Oij%6`7oH+F%;{}_^P z$UE@-X6{I=XE1!juh90F@yG`I1_|;cGtM$zdH+24x3Hg(Zau@--#OEuY|Z l2`KzS*pC~Zvc&i7RYy#$422WQ%mvv4FO#m^0(YpWu diff --git a/Resources/Textures/Constructible/Power/VendingMachines/sovietsoda.rsi/meta.json b/Resources/Textures/Constructible/Power/VendingMachines/sovietsoda.rsi/meta.json index 51ef3f6e2c..f8c1c9f822 100644 --- a/Resources/Textures/Constructible/Power/VendingMachines/sovietsoda.rsi/meta.json +++ b/Resources/Textures/Constructible/Power/VendingMachines/sovietsoda.rsi/meta.json @@ -1 +1,50 @@ -{"version":1,"size":{"x":32,"y":32},"states":[{"name":"normal","directions":1,"delays":[[1.0]]},{"name":"broken","directions":1,"delays":[[1.0]]},{"name":"deny","directions":1,"delays":[[0.4,0.4]]},{"name":"off","directions":1,"delays":[[1.0]]},{"name":"panel","directions":1,"delays":[[1.0]]},{"name":"eject","directions":1,"delays":[[0.1,0.1,0.8,0.1,0.1]]}]} \ No newline at end of file +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from https://github.com/discordia-space/CEV-Eris/commit/e107a20eb3e8def075a7d967dbf91426accabcbe", + "states": [ + { + "name": "normal-unshaded", + "directions": 1 + }, + { + "name": "broken", + "directions": 1 + }, + { + "name": "deny-unshaded", + "directions": 1, + "delays": [ + [ + 0.4, + 0.4 + ] + ] + }, + { + "name": "off", + "directions": 1 + }, + { + "name": "panel", + "directions": 1 + }, + { + "name": "eject-unshaded", + "directions": 1, + "delays": [ + [ + 0.1, + 0.1, + 0.8, + 0.1, + 0.1 + ] + ] + } + ] +} diff --git a/Resources/Textures/Constructible/Power/VendingMachines/sovietsoda.rsi/normal-unshaded.png b/Resources/Textures/Constructible/Power/VendingMachines/sovietsoda.rsi/normal-unshaded.png new file mode 100644 index 0000000000000000000000000000000000000000..781ae3dfd167241ec7e6ac13ceae74a751e04c0e GIT binary patch literal 298 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=ffJkDe}$Ar*6y6C_v{Cy4Zv9Pscs zcsq3Nf6a{!7HeeI%laIN*thSy#^GQ07W06>nZ)Z4CD>*hUU&HE#H$Lk9j7r*a7@@} zdgsFa)h2;DhmWhXbd)h@vMIOog~|vN1$8`pujMP!e0|3L!vV~~%PTn!$TZE-n~)jA za8JZbgK_P9+fxD&IlWgWo?wXgllYKhVRLYI`TKwIk$Ru^TXalLcp)filb?3{|Nb9u zBoAkY8@Dx|_cu1#KRIOwP@vgvw(;RM-s2KMetAmPGdfSPiqE%AP5=UnAAd}^>JPUi pM_ipO#B^A=r|p0S*n<<87zDMdBVSE0Jr49dgQu&X%Q~loCIGW8cf9}r literal 0 HcmV?d00001 diff --git a/Resources/Textures/Constructible/Power/VendingMachines/sovietsoda.rsi/normal.png b/Resources/Textures/Constructible/Power/VendingMachines/sovietsoda.rsi/normal.png deleted file mode 100644 index 5eab060bc760c2447b0f6b2c0fd4c6844dd0b5a1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 710 zcmV;%0y+JOP)Px%fJsC_R9J=8RzYYJK@@$plB-dI;6>UHkcFruLOtYG&8e^w(cZ*EJoX^QQx9H* z-U>N*w0IDtRG}f@p>!!0+=3Jn0)>FY6oPD_rfu}7mU>8L`Ma6sP3R^r~SW>$#8~qu2NFT!@4@>ECFgD z3OTw*XNM)Ab7FEjdKHlgm?%>soIV!;WfJZ`y#nC3|Bnh&eJO!fyN>vm(JDZNR=aLa zfTDK(*Qp$5k77tvchFO;D|3K4UtM&uy66G`#%G)UCon$S^w;SgYC{E<07apc^Nk*_ zSOI6;9N-@`whAa@hE<@^(ZMJJ_dZ>~@ro5N{O;!A&>kT-C2C9n2u45(xCKtBBy{6iCKp4o@`c;*THr z!}IVxKZVV`Z9G4`gofwgdh8Y|l`WKhehcVM=57PHIQV$5IUw$?;duan&Asiwyi(bc z>g~D?+-LiEWa+Cyn*#uFcljVNf1@BPq823r+MY0uU}qysy71br>jZLOWCCHss*Dfs znJk+}Kv@MMt4*swAeGEu;!pp|oKDA=MXmyhg}EX&s_X2YX*-Yk7fS$u54DedVdApZ zwvvFTfF6L2>N=+FJZp#&oS3?!b*v>o8&ap!fipOr2~_P@Bm%;DDw#1hMzJtg^vClI sd7~T{1)S4=PCyp5$X#)id;G8Q7Xu1DK?@a~wg3PC07*qoM6N<$f||xiQUCw| diff --git a/Resources/Textures/Constructible/Power/VendingMachines/suits.rsi/meta.json b/Resources/Textures/Constructible/Power/VendingMachines/suits.rsi/meta.json index a435b611e6..66964fb02a 100644 --- a/Resources/Textures/Constructible/Power/VendingMachines/suits.rsi/meta.json +++ b/Resources/Textures/Constructible/Power/VendingMachines/suits.rsi/meta.json @@ -1 +1,31 @@ -{"version": 1, "size": {"x": 32, "y": 32}, "states": [{"name": "broken", "directions": 1, "delays": [[1.0]]}, {"name": "normal", "directions": 1, "delays": [[1.9, 0.1, 0.2, 0.05]]}, {"name": "off", "directions": 1, "delays": [[1.0]]}]} \ No newline at end of file +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from https://github.com/vgstation-coders/vgstation13/commit/a7290010020e541ed6b57817a07023ca6bef26fe", + "states": [ + { + "name": "broken", + "directions": 1 + }, + { + "name": "normal-unshaded", + "directions": 1, + "delays": [ + [ + 1.9, + 0.1, + 0.2, + 0.05 + ] + ] + }, + { + "name": "off", + "directions": 1 + } + ] +} diff --git a/Resources/Textures/Constructible/Power/VendingMachines/suits.rsi/normal-unshaded.png b/Resources/Textures/Constructible/Power/VendingMachines/suits.rsi/normal-unshaded.png new file mode 100644 index 0000000000000000000000000000000000000000..5229d2b9e8b7365e45242ff3366c49f1e3c77424 GIT binary patch literal 337 zcmV-X0j~auP)$a%Et{v%gjM&6XADO^|9qf4ad|9}97O(!NTOGZEu006e7JwaxcTQM=l zuJ2londOvHPATQ%IDWRTpPnMk=xZc6=OuHjsusY^atJ}(T|`7wRaF0uba$5!Lf4}* zo5x7-b|YX1)dIvA^)>uk+hl}gC=V-tBe{P*puA(|ZU1d)~WLC&BZ@kKEboc{3NGcwu+Xeys?1 z$7fC+00000fKAaK&_aK}$zuO^cA-CDBzU_Kumk!7S^@M2e7NlkK!3pQ=nuFc`}z6Vn9o8BeBUqIu04V@O)ZMuto%1}BOk|cdOJ2Hf6W`FJP!bA zn!<4$2r@B3uiDfz#Q&h%tp2h81oxzU&dR3u5#YZC-P<^TJegYB;z z(N71veLk#pH*B}tUYjV22J!bgAW0HV5}Tqn!hswf*|+||2||{R!M?mL_icpz2Pq* zgs3FJQE~uKU*4#8>Kr_u&!qdPP?tBV9hKkMM(AmCz|fIWF*FBE%}-8()LbAj=1vd* zITt+4@4Bv$g9v%wz5|h|`8y+^Y0Z}#A)Q?z0IXIkEqefnbh>ZUaxEA>c~>B z%g(p)H#*>WJbwPyIn0!3I@Hv0z?A&8DNqzet@3iY#7PKzB^*p#E*IVQ&dRU#Gshruip*FVMFF z%)#H-7|I)59lXB2q9_V-=cnYK{4Fi(16Uux`hZ@rK43zy1LkhP++ck`-;G%xa0k{0 zus(qG0c5Z~fb{{a4|vWT!1{m|us(qG0avg-fb{|0V0}PCJ=O<+^#QC8pn~-Q6Z5k^ nfMUe@fEmI10K@$My*}U{nGjPIN>!`y00000NkvXXu0mjfSbTq4 diff --git a/Resources/Textures/Constructible/Power/VendingMachines/theater.rsi/deny-unshaded.png b/Resources/Textures/Constructible/Power/VendingMachines/theater.rsi/deny-unshaded.png new file mode 100644 index 0000000000000000000000000000000000000000..66e29f2bf019fda6d4b17ae1248855f0433c2012 GIT binary patch literal 652 zcmV;70(1R|P)y@&O+->mt^Q+SCc9Lr; zFM=uqO#NgTkP2dLCGw!k08>9%1}H(S$v3SC^)8_6*U5m=GX*UFC-Z^?mPP1v@vAki z7k;%Gt5sPBXX80Q*H2ml(xg)`oqofs0p`;g+TD)8&w{iDnE1(SKwdDTXpB)bM!VZd z($Gc*==iN=z$hALR^hZ9pxp&b{8lqSt-Pw-Hq?Ht3`jqeP{?($;V(S_+x$aa^apm1 z^cxwDak%{f?iJwnCpTw(Qs3jMKM+u0KcDA@yFb7NJAXD9CV)EtZo&j`2jDc^{Q;~v zbw1AxcYgp2&YaJ4!`&ZX8>jmNwt>_A0o$O|tLCgskUYP=th}TV#9sGoio@F@el?GK>BtNs8Rc-J35jaU5vHt?oDAQ0Fx mPMppL7zr7Ga6TW{1^xh*e^J=mUv;Vg0000Px&Wl2OqRCt{2n!jrrVI0PvNOcfeMd(ln;Rsx^6e$vLks_4P{0rGcu;84vLxy(D zEL0FWxn<~*me3MP79n&9T@sq>q@|yqh{})RQ&nKcaOscWmzt_#Ao)wN2E(b?MKmEE%f; z=pKM>mc9Vtli=PR*YT(}y<@&wtI{VH;C$);$0=_~@&B!*^JtES;o^jIdK2fNPexSg zhh7%aGE__F(Z9MzD_5ZY11IYi4htJNS+`J2=ZSqqp-MmWlitLcSvy;~0{U0i01!Ed zFO4_&`s*c{PoH~z@v?~i>BR*;zMrD{;&-Gz(?-axJODKI>)s&j?Jc4mU$;L1n*eV9 z_r>!SSX6&^X9qwAz%u}2s(z#c{NgU{ZU+EREmeqDLZk!Y=nHWGFl#%v@~*i1oYQ}XwdI0e1iyH2^yjt5LaKA1A>DHiiceh zQ4WZ!&*K2%{dpC*uVm(HLtA>>*|?ld;jpmb9Ut6|(HsqNK6P*wqNh`zd57XoNWoXN zRGC|sMLU33U+5g*$8SNu{TlmqZ(T0`{UdY^h@&rj4xkOD-R+>=?aXXSWH^9FUz!8j z-41aU4(`ZgIe=APssn;EFKIh!*+p1(k+*9t`dkk1Z%V?%0pRS%`NKdSKjGmi}AX}fw0o76kgZ?E;QxD57dRAN% znfj5>16sag^@9T@@y^lFTt9K22gueBEr9o3%K?M_B`mv$Z=X(?24LAm?~28F7NAm} z$pM4gF$OX1EW!aY^{EahXHzq?FVByYUR%bQTbF+5-5~df8Q{4a)TzHz5G$fPAD|Lr z^8u<@`X5JE1<*YJ-7I|pjLiqA!pMApN{r11sKVHMfGUj52dKi>e1Iy9&IhQ#=zM?* zjL!$iCK34nnHZT5P)TC)0kTL`K0pSE%?F5rs{mn>9w{I2YV$ie1Iy9%m=Jc$Um^|d+O4uMvDLd N002ovPDHLkV1mG0vtIxJ diff --git a/Resources/Textures/Constructible/Power/VendingMachines/theater.rsi/eject-unshaded.png b/Resources/Textures/Constructible/Power/VendingMachines/theater.rsi/eject-unshaded.png new file mode 100644 index 0000000000000000000000000000000000000000..865de78e60202f24c6f16ef5244787c9b5ffbd22 GIT binary patch literal 735 zcmV<50wDc~P))E(RG?^=W-9_@^4Q;z(NlnA^iZISr~HU6L6*dT z(Wygh3)wof05j30X^9dgDkqcg0~nSJlJD7fv`+RNkp?4=9MEKBN~Jz`dR^mHK5Y*4ON#4@bb4KpB#F_8G{G`Pgs#7} zfE1UHEF-3IB$6Z%cat~b+o#t~a&n*bBa^5+{<;^_?EZm>h|W*Xh=^!*|3LlWK&%$a zmOi)LZg0FcjU(~l>EG5k6QS#`(LMk9{l|@CJrZ0;pzr#bJ3xx-p1+)2ZJei}M?hIZ z&^M-`tHrX_9}d>%Qale=5g3BLaR(?yY(;_zR}mP3exVyN840?0Rz$eYLVVV@iWF1+ zE3<)0SA6K3#no&;&kCe*b>!hb>*rnrRMah~Zol)>vvpoff1jLw2m7vHcwnd36(@)9 zHeOSW=nn_9S}a@BI1yfX_*$RO4f+F^L4N=<=nr59{Q=CNKY$tZ z2Y|4#iYl)9e4i=QAHZFoZzWvQI(1RVDDL|FAmOf$=hklo-1YI?`T&5sc?K{=fBX?$ R|HJ?Q002ovPDHLkV1n|%V_yIO literal 0 HcmV?d00001 diff --git a/Resources/Textures/Constructible/Power/VendingMachines/theater.rsi/eject.png b/Resources/Textures/Constructible/Power/VendingMachines/theater.rsi/eject.png deleted file mode 100644 index d40c01396f226ea3b0bf698c6d034e768ddd66bf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 921 zcmeAS@N?(olHy`uVBq!ia0vp^2|(lJDDY)m|&UR&i8gkWb?rbC!^c+ zG+DgbblNT`Mn5_lz5Rm9gM++T?O$3{=9iRDdLv%)o?S7*?&aja_a@&v`90U+(DAdU z;%|QQTibN<&h))YO`m-}bl>CdO{c%+ne0)w%0BSa_}@`2?Rj-1_iB7t;x#Vz1_?d} zLm7soN%@D^&%50YO;$@!+qlg&UaDbrEB~C(rfFJ#_Q&Tw`0>y#GG^2Hlz01Of`w;) z5x(qnt?lb-UZ4E;53bH$DgU76_`&7RtmnM9co8mrDS71vSNo51Pu}VOvMz3K=gYUU z3>yBA9{rMv->-9_`oFftG|g=f3%^U##p z8vg6=^^`EXrX}3`x;0(nQJcvB*IRdc*A`xsj7Y0}%f+zh`u>8Sva)Qe`dUP*^L{5hvTyU#k0yYIG< z?Ut#(+(ZTDO;PD&KJfH^-ocx<%q;f+#d24i+r(oi#xUX2ojX%Dz0zhD$Xjp2utNLT z@ncK=RxES|I!J55^>;~TdoM~#J=n2!fyig2FYM~-QIFl1FK>Ni9ew-Q_bE5Oux(Z^ zWnS>d_5gRT@lU2l$4~yUxp(+M0F$YTksz6di5#Jqm> zb6N5S9-TO~Ix{|Oa?RmoLeI;89 z_$RF6J9j#@N$$0AiidL2fH{>07^v|ibF+1=;63`odg|@$pM>g0uNPJ@#IQ)+x z38dsVb4Ox5gCVh!%JmFafri%~(z+Ne>$}G;euH2ApO)-r7~tfV#&mRu(XvJ8JfiE#sHF; z962}XO`KS$5;;;7JF;W0dXwWtyug=22vS57;o!4D?OX^^KKn$ZoJk>sd{0j0)7?ocF{4OT`|+5=X0-+Y zfZ1dU005iS8p1e|MV32wuIsv$Zz*T;X7^JY*9my%_t&?THg>|A1Bx8)e32|G{U%@s zD3CEMvfK&dsO&59Hdu2&6H#-5f;9(_h#L7mM@$?rs!S^XDh-1wzKvW@15Sk!XEg;F z`Y+J!pG~Iaxd7igqZ;Tu&00000NkvXXu0mjf?KiY= literal 0 HcmV?d00001 diff --git a/Resources/Textures/Constructible/Power/VendingMachines/theater.rsi/normal.png b/Resources/Textures/Constructible/Power/VendingMachines/theater.rsi/normal.png deleted file mode 100644 index 83be99ca3ba34d58f2c8e20b5dbaa5ffca5142a6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 623 zcmV-#0+9WQP)Px%DM>^@R9J=Wm$7TxKorJ*5p@PbE90#YiWViCC?Vh_gO@`7g>1%wVY@A}XF_9`q`N#NA;K>P?H{sF!TH{qV z<8%F5wFItL8Jv5vr1HPLMvK8>ZVs-QGhSv7J~c3=Kv#ynMvHVZCHC7!0st2~0q@$c zxY!BkHCkFb3WNgr-~z)@0zh~FP^&~O3P4eIv2qbyyz8JUV1u;}3>I_3y%LRzy|x5B}YP4!iL%uP)Vr4O^Vd2K%PYW^|~-7(i8jbLN(N`fC!RKrlqI5e^}}Z z8&Lp?`OnLLa@?1Fq4V?mW)v`y8IBT$qomN3Hm1OElxV9!?T8yyK;8Meb{vEeK^Qst zTT6j_Q!)hyxcXBq!SfgO5g07yPRDX#3xMU^;7lN2UNL}QVXxTO4lhmw;Nhz`OK)9F zC4w-Lsdy9taUO_sWBt=pr{KxiS;>#-JYXasbM3<{y(I`EzI?iLA`pa;RIF;xI4Lmu zamUO-PMe=cDbQ(ph26i-ALRf5 diff --git a/Resources/Textures/Constructible/Power/VendingMachines/theater.rsi/overlay.png b/Resources/Textures/Constructible/Power/VendingMachines/theater.rsi/screen.png similarity index 100% rename from Resources/Textures/Constructible/Power/VendingMachines/theater.rsi/overlay.png rename to Resources/Textures/Constructible/Power/VendingMachines/theater.rsi/screen.png diff --git a/Resources/Textures/Constructible/Power/VendingMachines/vendomat.rsi/deny-unshaded.png b/Resources/Textures/Constructible/Power/VendingMachines/vendomat.rsi/deny-unshaded.png new file mode 100644 index 0000000000000000000000000000000000000000..fec5ee5813c5eddfcf21426195d53b6f2b0bb923 GIT binary patch literal 6639 zcmV zaB^>EX>4U6ba`-PAZ2)IW&i+q+O3-DaRWJwh5s{(4WW6H;qa{53^x4zK({orb^?&`i^A?{UuB+<} z!zIhB-5(LLi?qs*|{9_zo^Gui!D_>25Embti_*A>lwZNpFbsjKK-2=Myu zNq)y=W%eeHJ3s> zo4Raez2m`(IPLmc;5YK;c^}tr<~JSXXlSjo)vAulhpY_}pW5lJi=KL{*QOgwbY_^y zt1->kbuHOwvS~~7PJZ|K1#LQjuq|pq9jvs&3^M!x= z`!LX)0&}g8bd?qBGJ-FbA)1r_JcUB^JZ0*ae6`vy$McUU)}leb#GKe*IqDvwdVRx| zU3#{MS3K%Ylh(1H10W*i_AEwQG;joMy$z(&L_~?_*z62Xw@F9d4#7~uI zql-R<7-Nb#mSmGlK7|xhN;#Emvc-*gl|zm><(x}l(&7qZ6`n6#sHWQLs;{BOnrg14 z0iWiYZ=uDOT5hGAZaXeO_0VHaJ@+#707}CRKf;J3jXcT(Ytv3Q{R}hCH1jN1t({tZ z)Y`M=e%G2lwPu#0j9JMs#*0?VJ(KiO!B}tg_Y{ zR_R4KU5m!hpc~rwsjs@bY3{Aw6w>{tdNZ#yr$lvsp*bb0yVKlHy}i&{FU#H9r693F zWQvEhm>&;}R7~QDkt>d8GC-blyEtM|F14FF2jZ5`C3aMp{JIy*v|h~vkJ;*oSU%5$ zP?);}??+1`y#1;@Z>-BKFDdSDedLgekJ|U#I%8s-lMPjQC<}nfbeGFmwA@&inP7TE zq@D73#&(Vm8zFX0n*$j;`?YgFpgebZl@?ki9+o-sMxi0e+xv?&DxAy3&^Ew{2 z+FayXa*q2MJ*a8)TCN|JO*PNFW~?iR-C_>4S8h7HZlb1jo15IqX-rUtuUB3>ZwM9t zO=t5^f1@+c*8W6izNx>_*^$)W=xiGGH#+lLeW^1UOwVR>j5GLI-E6tm82Xs0MPH^0 zIEk4`ouRB5CoZk?h?e1eZfje_35zPrNZsRUib%e(yOP`%N<(YB3D&*1b>68!LAT=T z{RoI(9$b$xIghFLw~!7l)zygq=2Ho^JG53Cua*oywL|6-XCB zLAF}~X({&Uj=J0e(#Ifvcl>Znl}G%R&w-Yz0X%rp**t; zwfAD5gvi;Qn79ecOsXz#uRo(py~fZN=<>q|ec3v*2s>#(5csVgJJLS#p|TL;su)uQ z2czn=&=yT?kuV#@;>xTxVsQw2jH$3DSFmGW2)|~l^k&77s3qFrtEe{4(xCw*4fY(4 zxf~2@3t=kOtb^5u3MlOyN&U zt(QB?bVWXOEg{9S?n4t6Fh+(X%q%Mt_kbHapq`T{ zFi%s9!-!b7ahR(c%X_Q5e05)Xa?Ag&JNfk0-H#K1ucp9@+eCs?Lr?}V=N9ppM}N1q zds*CxB1U|yj}_uWb~Jc}2ikWlx-RwH!np&!-vpiTsVzAr#_CH&`x8q>6|k`FB=XD^ z!nGk6G~O50;;kd5YjUi(6K^Xfjvi)G(6{O!m=RFG+&b>N#2_${0Wc?Ef;ljR#{PiYBRghRM!+Ut^i7($u1v0}8z6&+KX zL?m@$xIKaSJ(M?)m+jpnS#2m|M*?Pn^6x-?t5x+%tyds#7(avf4#Rka6JW|Ma4n4e z0%BJD0UYWP9UI0s5Z|V_1Mw4v_ny?lrrw+FJ&2z%ycVght9fs2Cy0fK2z>j-GE4yW z5GHx8#2Yo%YMOU;gqib>j5QE@fKDNA0mr$L{RZs}oW|>s&_yB7z}=%+HW^4h;E=se z&`5{{_7>^_1tBDkKDuuu)U{m$j>q9Al(h5;*6i}Ld~JeXfJMkoVnYFH*GJ8!1KzQ5 zydk7@ZXu9H+p5`>BjSc2R9KU$1$lLzjb=60m!@G|1EXalF*XsE8QZNai@>FSfUVlN zB}iw;U@>wh-uvqb{6-HVueHgvJShVa(YmpOyg}Tu3U<|t$} zZ7BFfeJZjg70tfu)?E=6qANxV$erH|M5w4Rkl|-U;A47Qir@UTim5blW#;5^zBQPR zA)obQ1O<^SB)HwDfo@wz!d2Jp++1eOts{+g`n8&6Q#h}oAxh+nyc5X8p(K*#(;ZBR z2{4IlQ1&o|BpkMliK(8V?p0I_0%iMHWfjE)+a<0EJ&Q~0MFs@lC3IM$E5v7ldq8sJ z%Y!tcbb0N4X7=i-5~D>@{ovh7~xtqw!2> znwE(oIM9WIZ9fk9T zkTy5FmaS~JyQ7OFDwrn7Ken)!F^Hq>I%G|LgWO{7v!*GoLflMTcw{ePt@ahx)dG8U zT*{5?XN2Otz^UgED}v;2)=-g zRT^soa*mc;q@vJafmb0s^+gQEi7nNeY^tuklk4^b7g%&Jz|s$a4O`tz-AW`vET@>jD(4?mMos3iq=hE28p%Wz*9(INIr?j)rDOua%o72 z!G6)n1W91l0w=xGF9eQLcbELOYF0mvwBrbJgUb3t_>aOQ1sCSDqLGVeX5###P>H@% zt>yOnaTk7`qmOzOeo#C4U=`Mahr%ZDisZ*+D$xcgy_Hhjh(-rpf>;D2sdpyff0zVT z*euRKQn{a0N?o{A75m#vYDW(8cybJkfr9js1aWm}_jS5KHc6I1N2KkvCkvi_! z@iS&g81IY4DM6oMPP2G|5!!>ZDfmGw32&C_AS$>}7P>T#8u890N_g*e5!8g<)e6lO zf9OXZprdD0)m$-94#EMvHa96Jplm=)j?01*IdYRqC((C0!bVF&+2osT%!iM_9&?oZ z708KqC$AHt>Bxtf)6234<}4tAJ6wpf$2G*F8Yvh88qJY-Td^R>-3B`!k!@iCg#edF z8-_@S7h8PJtYs~Q_15i3!FpBqlEeVeH37E#2L&o z4~6ry7!$4^++$RRxg~aq4@}8?%jUDXgP@0-=a8{02^&~(T?0tjNbJzcq9LVY`GPC+ z65@pZ)fogn#sJZeK<_>V2w4edHlofT@J$3@o&?ZL^~>_bQHfL+P^0Rxm(+zX89a@X z#MrSPJk}xt@(`?%Ur0zbH~~vqPCkzbCF~ItVFIy{uVq{atU{Oz79^zTh^GWoA#2JZGq#J$L_~0EG5hnnRhHCo2?;Gx9#vG-o$s#$cBt`5%wmS(o) zk`p{TE$>7yPmZ@_;TQ))F&4{ zq~X9|UCJxMTY~f(u*eQ~KT0JrRZML2@siBHzkR{RckQ;E)Oa-+Lg|C$@~wFP7b0)NEUEV(zd@6?WT!e6=<_0GTibT1P4U~oOAe9GlsEb60NyqE}r zv1Uo8>7|9$Pzcgc*xi93A^U~Ss-PpO-&XVTwTS;>d^2ktB7r#=pCe=-*O6bvJ`|9M<;@AV*#>kBgf(#?vRN^U~ zfp@-Y4?oXcVGBLkvx1Q8lnTO*Vi-Dnz=8`YcGyjt$)9FEw$^q-Np5gi?MBnKD(NV# zy74&c#_?7+*6#fsJi1fSipJB}DC+WnJ$prGA#+H=ez~z)NUL;iSBYF-O5}=-t!mHn z4Y^L-b5UpnUazffWO2{3#U^|tOM^^uYZ4!Y;0TzA2!EFd-O+1+4!W>t47x$)2&YEs zE_jbgrcxjwx;ax}Cbuk7{eZ=d9w2Dg)rAh|oNgTU2ZbGK1R42-c|uL=;UxqF+w7&* zB^3)qMr=lAp`GN9d|ye^V@Sn-Kov~IomerUdaV4mNXUcHrMlxu?GQc_oF5x$;-0e9 zzYK0yy@fy9_xBk>Y(< zv`f#jY=0gvUD4J4h^zgv#JCzD^(gPI!(fwiirifG#9q{*G|QaGiKHzl=Cs%;5f|Ll zewtIUW!K~Cr5^X-P84|x4#Xy4{=#FAt<*;sVglqPT^xnA%ZsZwED>CnU7m__(`PH` zHDL3?=`rRgtS=H|$ZsUg^6a`U-hsq~x-So0h#ZaB0giAo0%APM($Ffk?E>F5kV?v^ zo=R}JH<6>z&Y|n8DeU7#@#3MFp~NmF!IA=Q7xB2Z8PmLr{(2j#q{8c~av54#?v|_4 z&%$7OyN#NB*N9KbZX^mJ?yj#;ScPii6PJHG5DAaO>t1lZLuzJ=8KVOdSydCs8HwD| zWzNqg{?v{F_kEX30N>)20Nj!}XqZ2gjYOzQ;<>7JC)KvEWkXy-6C}!7)as?G4Z)lc z_G7o;&eD%Nughh*xC`=dp=X^uPoVT0T|Ft~R}6(+(Yk4CE9GIuk1M;oc)trdd!k5@ zjr0&#=MniKKr4xK0d3FynKuKWDID7>ryyA=-~>s}G5KX68dhUU-|1Ux&u0rHSIm2t z>tum4Zw^+h!yvoLcN& zd?4iIv5zy9KOPiO^XGw(baKdbAVlH`FL&ob9*=xnPJ^hIXGQK0ggl%FdH;YM7=q7^8P@|({Yj&u>CUHb*AJR zutU1t{CV&Fkq7ndnTH=oO2+PJUyhWhyE7%X6D2wB<0Sv!Fo}9RP4e$w)%*HBxy&XG z(C~Vp;r68ALL85djt;ts}g+WSgsuZii=;Qh^i# z(_1X$EW1R%&j)y6)Gg_K+DFZo#<_jUQzc^^1KAkjJLB&h|tL0gwjdkBIzO{?hZ~bCOuvF|R4H%a%ePPjc0hAgdI+q~+RKJR^(cYJDasfP~NCYz2_z_p=G z^26HRuC!DC0&w+@Ea8{prux15@Kt+jJ*swh3zt=&DZ{O~CFSW4?X9F--Jxewf?Xk* zUpBbJXI)xc>aNGNI$W!8vK^bmv#%Rm>P3g^uEBL}Z(W;Pt6KV^y|o&3=h38FkL%YK zm#q2H;u24^n_TKmm+QAC*GrR8U$%ICkGn$B=LPMd`Yg5984%9)N18pL*M6xO+q1dF zwv&JM{wMoWA3MxvBPx>W6{$W1*QF-h z78o|kfJ`NIW(>!Fd?kg5f72LKXW04AjWGo!`jf^O%>Qp1V+y+PCyg=n;yBR1YK*Bo z|E4jf^7xy^n0n~V{)fhx>fvK!?5kJx?}E?I*rUELeg9thR^OMtf3JM2?@QmmSH9Kv zrSIP>-|G9)_wSW&^*P1*^twyu>T~VY+0CTp)W_nR`*^Qa=k_ zFDi3iR7=%-U77o*)zYS(SNyS*=vP(vM`2DqROTK|`@9-v)#YB6<EX>4Tx0C=2zkv&MmKpe$iQ>8^J4t5Yx z$WWauh>GYYRV;#q(pG5I!Q|2}Xws0RxHt-~1qVMCs}3&Cx;nTDg5U>;lcSTOi}v_(bA4rW+RV2J!T!rE}gV4zrS^5T6r|8FWG7N3P2*zi}=)Ebz>* zkx9)Hhl#~v2g@DIN`^{2MI2F7jq-)8%L?Z$&T6H`TKD8H4CS?zG}mbkA&w;^kc0>s zHIz|-g($5WDJD|1AM@}JI{qZNWO9|k$gzMbR7j2={11M2YZfLa+@w$p=zg*7j}aiS z3pDGt{e5iP%@e@?3|wh#f3*S3e3D*oYmp0Osl^iq}6h}`(_`600006 zVoOIv0RI600RN!9r;`8x010qNS#tmYE+YT{E+YYWr9XB6000McNliru)a&$47WNX&hZyvBdMGN{=I%W^=YFs5ejm@y zxu3hw`JV4NpL0J73dEV-0mz6KkynQLS&6R}>)hSnBNTjkDr%~~Rrpn?@Nful2&nKV zS_IpU9VIP-R^cm!8jpKC0DwlXUkLa{Y7qeNQP&Oiw-UeT5)cK>`z)*Q)tv^;EX)ac zfv(m7*ElQi)l!2yFI-_}0cW2+R7B05Y<$&7r|aiB^4ji9#&;Z}4UI7M+6uz$S-dGy zYm5dDeo9+qUn71zp8SrDTycCu1SFEn+p4IMW2*1LeFe1ubp9n!4!+md{O3>CpsTga z4EVp2{*In)v*Qa!piT55kz7V}ZA*9t@Zbx}06m=njvTLNnk|^mEbQ0xes>z2`s+fasQ#8o+}uECW352GcLR855TQy!b{lK$;fN zhDO->w?1~))4@OxDQ%U#8{fw+cIH^wVyHgw9xm4x06=JL4Sn$hLSt)xf3IGeNA=Qt z-Y(Eo`&zlG$IC8&JosK;vvTtCPbD;4qm*?H(9;>XTy7j{OC$D#A>5wD*$)R1ZqGtb zXYlrX6F%+F0RRS*8R0d67hmW(U`1nq)(8L?udl=S007hh08Twy2jG@^4&cETwhL^= zUMe6A+4!mq5hE(Bz;|whWJy!evnLB*HS^Hhqqj<4ZFTqe;Kt}pDYGR5-xLAUQ_+%2 z%Lsiq&IyxI@R&*M53t2S zh}s`uRXAUV9ReHz95q-lsQm$?+aR?+z!pn@+8;o^1b8kX>?)+nQiIg~0CEBVdVc^p z0o48gasu+DsrCKz^kP=|$>TUa7U{8r59%;N=vS(NM1IP)W_6Lv? tKPx&QAtEWRCt{2n$1g8Q5c6GQ-;7z9|%eyIyMf02pK5YNG6CI5vklnNc0Cpen5m! z7PKft!(FSyA_6T!f*1zO@&g)7%Y}L!9mUX1q>BjJO$$S@nLFNl=bUrzb>>+OXU;jl z!+YO*zV0uJ1YB-tjwLEjmDj(?_Bfbi_XzFE}BHr3zT19?Ey`YVu%zRzF!?^iCh z75eoI1pxMD(jE2&(A83nzcq+9*g$x8fza|cAT|T6=nKn$=;}J0KF*Dfj`(uG-}(z} zumOK-kZ@b!Ub&zQu&OUK1D=My>HZfe+lI%lpbQ9Y@0N?q04w^!GQeA0Xlk$k8v^W}t6* z_y6qqX|m_1_qFl&_E3`dj@!}X%atsBpTCp~H~%m&o}099LzAG#Q_RWARVJUu7_Qpl z%I6adS8WkpUFXBq622bWiE`WQ`ffW>bAVNSq5FVEEe2W<0R08|^fv?K190)>3Q!!^ zM&v%gioUQ_U}N%)$>EAcwtmt8r26DiMTLImM#yMIvqw|WPfwP<;Q#!$??KUCQ54^W9?{Q;^-`>k*$0Co?+Zqhygj`atq!jb*}l{nTPpbAI( z161I6e}HUU;SZ3BEBpa6ag9Gf7LNA^$i@}^0GT-6A0V4U>klxBEBpa6alAi3HoAwQ zB40UUGZUOTf5~*G|9{f1tq8CdnRDb}$npLF**MxCpn}YekkN{E`vYX*Dt~|sT;> tfvfxhGH{JQKo*Ym2dKi){(uY$_zTM$9raH}e!c(z002ovPDHLkV1jNQvWx%# diff --git a/Resources/Textures/Constructible/Power/VendingMachines/vendomat.rsi/eject-unshaded.png b/Resources/Textures/Constructible/Power/VendingMachines/vendomat.rsi/eject-unshaded.png new file mode 100644 index 0000000000000000000000000000000000000000..c090eec02b8f9ae352c145bf13b7565eb9bc718d GIT binary patch literal 9248 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 QdjJ3c07*qoM6N<$f{q_>u>b%7 delta 835 zcmZ4Iag%L=ay2Z2hf?G>C zT}~Wu2s3ir)57so)oGEvf>6Ix^`{zhF<_K3zl0^Xh*e z-}K9Sol~x5XDGMX>c05jWWP|6>?;h35VVQ!kgxbTYtc=zEVUQUTj=hN2%gNeVpVQ| z(!PD4L>v51F1cuOLH+NV^$OvSTH{WOgIEnGe`c!lX5{vWgq&ypJBN*7%bh*hx)xs_ zb(YG;fBh`QaN&Oa-978yTzrvp&Puy8wa!ht!t7V~SNmgcKl$5}MD``pdk3&KmujU@e<>%Q{7sos)Te{$# z$oAjAzD;L-IPboSn-#}*m(K5D%TC9BJ+R=lv@N55a{MN_?ko9+ABWcm@E_TB`KexY z!UUj$0)k^RuSPVSl`OY4c=5|Mnmfu<=X2c)mhDk8dm5P6RWHpq;b?cdIwvzK`B`PxM(^mD{}r=< zl*)Cpit@)g^ZnoLxU+l1#C7%0U&+dp)Gl`X5v|19sm0KybxQITlLq^PQ>WiMeBEcI z_xz#bwe#5ro}H0C{cM-&i(i(!8YP0KMeSa^7B@`nnXZ&GJuUY8yalhMr5QdHJaD|{ zU!6Pm?H%bI`NfgRQPRql;)m3ZC7-+Yk)K(c8OU-oUl8GQ&R>4z?ChqgjE;Ni881ml zKRDdu;$;6?C*%FE?*}!WMD2U=yoM>pY>`0C^>Dt%9_gtyx902jK4WgVxRe8$9Ds?! zL|&l>Bv#X4FpFQn?K9({3_Ayjv+Nv;e-a^CCnyZkViWPUZ`!^2`g8p?*xa+Kca_*J ml!%a2=q+K_U_+Stad!PnmSSa|a3^&JAn zaB^>EX>4U6ba`-PAZ2)IW&i+q+O3#baw9tqMgO^qUIGcu%i$Q&J9x|QgUr-eR&}}j zq_Ci*H~_f71!%MW`R_LW;U(2t6Jjo@ret}A8mctD6nnl->1;SYkC$9O@%%Dw?mq}a z9_i1=w66J$@%UJf!!_Pt$4wsBKIPiT*_Wfeo~+;JrR24dmvh`*&!%1rT6!|)`jc^O zdo%0pIb@tMBl~$Vvb^*5_>}V`fBrT8GN0l(i(d=hqp!zj`PF~s?z%4=c>nh1KYP>6 zKiqL{bTccx`RN*W@on7SkC7LRoZL^AXN~-@%|5@L{I~Zkd#}^F7LvhT=`!kO%JGef z9e4U;S>m1fi+s<=yYem^GeB)(YB#p?P@UlM?Sh-Gx$V{=ha0FEWJyMf4DrWU@mZ=2 zuMh-%yDiy(!vqoW1LQoza@WNj=T<$B!wM%)$4qf-2F9;%^FHvm@0X4C)-ZR@mb2f=u_xnN+k{oJBQ_lPZj;OuQQObzzT7nkR? z0WRX~h%(NDfKARvmz>Qa**W}Jz^9?P_#hnwTr^Q8T1xOf0ZtJ;n>E=Tb0x|-47~tE z^og`7nkax3LJWy~D}+!p(Z>*DOfkn2Yi!ATUMQP46fIMXR&AQ+aDxZNGQ2XY^A zGkEvAxXD+@8HMiOK+Y(1Pssg>+ZU+KcF?Uq0MabPr!b@^{g|*ylhU*w^LNsF6}RsGf&$6NGbEA-H((r zM6m26%a*Od-*(Nb6WTSpUS{)i5n!8QDs_vEW#r6< zYfWzP22LS2{!(Q|R|P zAvtq)Dx#Nkci(N1u^;{T(Z9VYEvrbRKphj^or!QaGBT-_c$_oF_`J&}UCl$;oNA;` z$ULqMBXC57mL&GzVYuj5?yKc$)yJJQOn!rb__$l&jW;h6Mv_jjXrw--h-J6cVRA&J;VMV$*d6DH zD#ECQ6PC23A$75 zZRUhzoNIH;X>o*%Q9XE!x%;31#16Q``Sx*^bYeyAm_lT4R!Cirv$q$Dh9R(m77q#! zZlqL2jO}Z-rp&rs_jU|$tfQ|r*>>UfHdokahu521nAjjTiqo9xiC9>SXG=m>W(gOe!^@5{FJjokQ2uZ1OFNwFLK(tzEII&}g+0-ufZ!{5$ zQZ99dg+Gd7fiDt89Ifp38n$@WL3BY&hDNQ9+hh2Q&)Dl2M(aATLoAHZc{HeU2KBJV zjq3Wodp}%HR4xjx;CiYsYMlB|#baKkiTb@$iSfl+5M)go_W}H?!$RpK3LfahSLOn+^)@?Y^iHq2@$&FojqA#AJ*}1)f^*Is>F-~4ts`oA+9{9T zls;e}p{;Feo}xBJR%$pzTL#k;O^7xk3EI(IqyS+Ol^qMUCx+`*239E3C;5Y0i0LrH**&wy1ypWv?OrVTG|Md=}PF#8IKK)W8Sk{Mh=R;g$y zjDjgeQSR7t5pD@blmg z%e|1C99wS_SxxRP4>)08&o0>&eaWUB9T>L{o2BYTrw7aCaguIG*2!I~SWDt$tc;{Arr5=K5Dj`^&(`C2e!lujYT-{m{vS zQS$}>00D$)LqkwWLqi~Na&Km7Y-Iodc$|HaJxIeq9K~N#r9~P@OD@is&X) zEP{p7R%q412R|084ld5RI=Bjg;0K74qm!bGl=#1-&?3fz<9@um z_qclp2#pF;&8~4k)hr_wkBQmbsu*}h0K*7k79ok5dLq4;f#>+ThmWs!QJ&>}?$6Py z5?HilAoqfC;;zg^i4US{}$+3 zb9-y;wA000JJOGiWi{{a60 z|De66lK=n!32;bRa{vG?BLDy{BLR4&KXw2B00(qQO+^Rf2OS7IJJR^~!T)ACVrA-QxXn+ftfNpajBA+X}-a=)tC86Ye z4J({M;*yCoSs}Rj$Xe4KJ%=TR^7OihYcAf4+z+k~GH%!xqYcu!bN(@a3G8Y3%$tShK TJNh^v00000NkvXXu0mjfcx3!B literal 0 HcmV?d00001 diff --git a/Resources/Textures/Constructible/Power/VendingMachines/vendomat.rsi/normal.png b/Resources/Textures/Constructible/Power/VendingMachines/vendomat.rsi/normal.png deleted file mode 100644 index 5063d3c1e13a1d35f4ab9d97619999928a141ec6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 559 zcmV+~0?_@5P)Px$=}AOER9J=WmQN^yVI0RlB#|2>Qrf0jN-I;;jApgmwEQVKNRDn&F3P`haoo*8 z%0bF#?Y36_h4L2S!fV;2IH+-wa+w30Yz6Q(Od2gHpLkLnC!Qw zar5hks%ygX7570a%j+?2o^v!HonCyYVlCIS*;4=UREE=*qX8hLh}=Y?w*V|n3}6`w zBCm8IonEl`!3#|QU}SteBcBkr33{>-TT>q&(sa4E+@HUQwQuEOg9r~;sK^%^jytr6A*dal)M zplZNrbL3SV{=(ld0ll+<*7P(R0GOMZRUEAnaCN(xnwi$Tr!E6qfzY>q!tV^`WMJoH xU)Y$Y+d#fLLa_^!hRAH7wwG!GB2D~SyaAvJt-?pUK$-vm002ovPDHLkV1nnZ`xO8H diff --git a/Resources/Textures/Constructible/Power/VendingMachines/vox.rsi/meta.json b/Resources/Textures/Constructible/Power/VendingMachines/vox.rsi/meta.json index 8288f2c29d..92aee55bb4 100644 --- a/Resources/Textures/Constructible/Power/VendingMachines/vox.rsi/meta.json +++ b/Resources/Textures/Constructible/Power/VendingMachines/vox.rsi/meta.json @@ -1 +1,23 @@ -{"version": 1, "size": {"x": 32, "y": 32}, "states": [{"name": "broken", "directions": 1, "delays": [[1.0]]}, {"name": "normal", "directions": 1, "delays": [[1.0]]}, {"name": "off", "directions": 1, "delays": [[1.0]]}]} \ No newline at end of file +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from https://github.com/vgstation-coders/vgstation13/commit/a7290010020e541ed6b57817a07023ca6bef26fe", + "states": [ + { + "name": "broken", + "directions": 1 + }, + { + "name": "normal-unshaded", + "directions": 1 + }, + { + "name": "off", + "directions": 1 + } + ] +} diff --git a/Resources/Textures/Constructible/Power/VendingMachines/vox.rsi/normal-unshaded.png b/Resources/Textures/Constructible/Power/VendingMachines/vox.rsi/normal-unshaded.png new file mode 100644 index 0000000000000000000000000000000000000000..34b18a86aa7b13532d9803a8f29dbd4da8cefb76 GIT binary patch literal 3583 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 FV1iHL(#QY+ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Constructible/Power/VendingMachines/vox.rsi/normal.png b/Resources/Textures/Constructible/Power/VendingMachines/vox.rsi/normal.png deleted file mode 100644 index 8bdb138db0c0262f036ef2400b4a07baaf37cc4f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 819 zcmV-31I+x1P)6ukNyYZr6=)Vr5<_^ zE1o=5Dzvl^2(6`fXd-Qzq?_hCY_pThew6A1%g+1mJMZ)C%)7HQJ`{*XqjlA@ z^FT70^Z^7^^tKz?*hg~M>q&%33N0nxTmZGP$=(G z>x%&3&ladgLIevXBAu66Ti-DI|GM4~Jg}-O$-!X?0v&!%j%ya5AeY-RZsczAJo>_x z9Bf7a;N-a0B0?6VLM#>|9*;Z5xvqgU2M(!DcX$!!IQb>Me-8-OdF*Bq0H z8hChj!t`Y-MN-D0vX5;I2y(ey*x9zk$+imZgxJ=A9o&%0n~!#IT>}6K+WZ>?r1-j4 zhc@evn~K-8Al2%zX}_EQY93763TO^iJu@VKFxX*| xg)~1y(IHaFlzA=?SX^4RkONqZ|8*p9#$RnBBqJ*`$qxVk002ovPDHLkV1mx^iX8v| diff --git a/Resources/Textures/Constructible/Power/VendingMachines/wallmed.rsi/deny-unshaded.png b/Resources/Textures/Constructible/Power/VendingMachines/wallmed.rsi/deny-unshaded.png new file mode 100644 index 0000000000000000000000000000000000000000..e2042da994bfaf92375eb0d6c70537b1fa921e97 GIT binary patch literal 737 zcmV<70v`Q|P)jO`o%004lpoJbaKnx+k1wyG-8XOpj!|3kVGqtWQ#GON`} z`my9I<%xj#7GlY|%P^ z|Gvf^SW13u(f$YMYoklgk4;mJr7j#KRw zfG%+d@Y|b4+tbd^4MzcmGj$ZOeIjJ$zWyH1@6I=`B_~2k*Qo=vx4W-Rum{>M!aqFCOi|ea)aeWp1;{@{a$lqzbQskGJ4*&oF000000Du7#&9MKwxD3AX zbo2ZaeLkN2`1#^r1jU|C?V3M+eRK2Q--k8G56?F}7_#2@@#`D;M>1Og+Z)~Ymyk=o z$pY{@?}g;2XAk5-(Nyb`6dfMQ%IYAyi9i#5Idg&5DMDc&g|q< z0LIV(3KzQrm_G_YHxxkOD1gFI0EMFf00h#WPbZ)I1CT$kd;kCd00000000b_Xofw- z^Xtji%{TYN5c1>Zn|o#u`Em0_1>irnZ9Spl-=JVUw2<-+8M*C&+WALK2K{e7J@url zzi}E*4$UpU^JrM#w@A@`a%gV(M-_nPe7xq9OLNQ@7l8JByx;cry`Qoj=aw%n0L}UM z>7;hE<>CD4eVt|nGGwj;Xy@m~R0kMBzTaLojsjxmbAt#Wjsgnip9pi#xtaUwM)SM# z&FhpW!qkrfpv&LW+uPmOhUfqpQ@s`decIO|P%`cLbn>}B0Qm#U2LJ#70GRR#Nv%2w TU& zF^d{O6o6ks3J-FSKn~Ja1ab%#2CINSBUq4f8o zg9Hp{XDYpo=f-(D>&wi1U$v~ue7pGe>Fn&A5di=I0D$CpqBwS0^g*-P+`4}>8fn_c zZ{UBXIfMCp?tE;k)zUPL-^i~D01=T&rLyyw#bTjt7Qc~S9ROus9RB0`$p8WQ2la-$ zoBiB*+|B7rkr&UM+B_%&ob*rD+w+g^zfXsdy5Be6GC+R6#T}T6-#6a=103t3Q}_Eu z9RT^XSG2#(beOu|H|hXLnL)iFu>kN(aAN`B7gYdcSytA0IB|RR zS#Dhq?)ULKpbCIbA2JzEdh+($R}m5U@#Sj$S+!bSZ%?OFO|$q7{i*;MPI`~T?`xMb zob;sI?XLH=+igv=_znHe@2oYO&BAxmitzbP9DZ9r0000000000000CF^8+OASB(aK ze{;V5gI~WN?dp{9P9A>$e)Stc&ef?UvFWef-OJ?l-^CjE-TgrqhO92Wc6X0|Pl64A z&5J(vmk^6T$N?KB)e0T38ufW+~g0fO%Zz+n&oi9-M+4gruj1VG}bdI2%k$EWURet^XN%ny*b zpZNjs0{{R300000002PTFh4-ze${AT8SB^MxAh0NVhDb}{@~UO!td9w3V{5wZL12E z`~(H7qJ=V-ZHw&=wD#{+8T7CE^s*~u^A~5aa%gP+gGk>E0bwLdn3$^id^Kc8ML zdI7%uOc0@jUO>X+AB2gBjO8I4O|H+@+hsloGw%g}E%`frd9i(fkPHwpregtMkLg%I zjP>y$`LitZ-X`+{B<^Q^fW-aG4}c#400000lHw0K|00`GB5a2M0000b=L=R%rkL literal 0 HcmV?d00001 diff --git a/Resources/Textures/Constructible/Power/VendingMachines/wallmed.rsi/normal.png b/Resources/Textures/Constructible/Power/VendingMachines/wallmed.rsi/normal.png deleted file mode 100644 index 418fb06850d830fc567dd9e8635d79bda3a572f2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 286 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=ffJr=Bj3Ar*6y6C_v{Cp0iBb7uX2 zJjuYsB>$-FSu1%p(VYpg>)n zUr$|In>*dU?#~P}K8wm?qqd{ZUhU*j&-Y7v@&0{#cWXbP0l+XkKDg18> diff --git a/Resources/Textures/Constructible/Power/VendingMachines/youtool.rsi/deny-unshaded.png b/Resources/Textures/Constructible/Power/VendingMachines/youtool.rsi/deny-unshaded.png new file mode 100644 index 0000000000000000000000000000000000000000..10df5c2f12d7528668a606ec2208e5b4b7fb3f09 GIT binary patch literal 17038 zcmV)0K+eC3P) zaB^>EX>4U6ba`-PAZ2)IW&i+q+O555l3lm5rTHJDctb$z0EUCstY(nI&u?J|B}!Mi znN?PlNg^Xo>;`aOjl%)D^S}O|>;C6|{wJhT&E-;?bu-Ve+;fkE-!%XI`u-n$e*b;H z?B`qj`7d90`PVlhUrPKx{rtfB`TXGP<FmO7Z)8`1!NzKR+<+x7YdkH?E({{#^X;f6kS`*oEt*=;BEs`S;)W-6?(l4*sqD zHzw|t{QF8t`F%b8=lHolhVCB*aEyN*KmY5=(x1cO{xTKzw{iOUdMJPUdivw`@h?vl z;?GCopWo20`@O`UzkVCPdw09{d~Y{0an!T@ywtB(e81y^li~bE!}zE2Z{hd#{nPoU z`QaC{wt3a*{NxWkL`M9E9CjGthV%Zv!r~EgJhAfs7*|a1Yc18-<6_VQgU>(V#_Cc} zJ2mEJF>{G8$3LDWy!&?DkDE2_yaS(%fr~N6fBnb({R{tJ|M|;>?p2tFpursDjTO%o z6<<7tW={X*Q%p#>KVw?n_y+g=&;R|GCN?pH#Y5K=KlMv zg`ZiAZ=&?M`sb|ioA>K>aARFj2dda!>)03|tS+jjsBXM?aR#UXvySKe(yYAMM`r75(+lt*$>mKv+ zf_COvccy#li0AIjoh#G0821U$ua;J|7H+)b;dbe)J?n9KQ#>g9HB$Oi}ayqWMCXV-ho&q?IiZFapTC0SXF zjP<=QPoBdB%N;Y)xz}Mjn7$c!!K#@aOf18+^NM>#W4w8ndaCXeEzLf7^;ysqdh$0$ z`pr1GUP5cMlj592Uu62C^|EdXb6sNBuQ|e=dj&plQ#lzx<9YYIt6azHa@|(XsOIl5 z8zJsapp8Wgq*yZdAVHbpLNw(!axtDV^t)Y4(*I|24F5>Pq5i0}BK(d3o~QJ2*Ks>( z7)QxGY)G{hn|;mJH#uDQT6sj`fjENH{MnP|J>EL8?*}2+Zwx=%f9`jak-i1Z!5!2crUVAJX_J*6vRAfvbkd<-V>2dT8+6z zbR=lBb<63ogho8s|9Pr^pXt=O;oQTKWjyxmeXdUMlH8hRJH+YSWNcnUc42G?=2$nO zp{Gh=6s9Ed3W>>L^c`76lGMK62SAE1d3qw0L4o(C;NZLKf4iys+g(ZS{U&y;plAw# z{Hd)Ag@8Oleje*9BYJZK5G=O`JkybbFa;mpG@B@Eeye;pIpkPJPAhVg@3ai#pX)o`nAIZM|pVuF_P#cSN(`!cVmDVSYm@a zmQ(sj^{!SEp`_R$5npoT7|4@xKuYeG=gU-HfLv>t+my90iX-+Kml5eT%}K@-hMOde z9|�tT82P?Zc?weGZgIThl)Rpo`M7n>ofL{? z@4}OVk3W&+xP(x{8`GwYBd3zk_-x1qif##Xz1;T&70BQ73qr+T5Ir>weC;mu9t5I# z89v*)Mqq2A&m?3u$>iEPQo8^?paf4aV<4S=Vl(|!H*-Xr^0q>VAY`v6fK=Qsk94Qy zIgKX@!fb3wjU$6IQM_y12PJ2hmE|+RaEoByF&aITeS^XEQ|svwHWt4Ga-`_ zzdxZ@CcxlkgvD45n^pJbA$hV=VukkZxdo8nHIeQOoXcd!;}rjbbTgiVfh71admGB< zEtlg)P}UJc#R4&cB>84U*nxEi@KReqR+s_4!5?Cxk*T{i#&Rvx0Yn2@Uht@rvtTJ2 zrrXM!TqPQr;1_BI_~oTx%ECD9s|e)Nvp+(;A7YCe9N(ztgY>WlC~zbh$OUB9u)StL zij+nukkWk-OGvJhI#~>jgQR0$v`uw4z#At3j-?T1AjuubNnv$THiG`w&LolFMT zH&TW7SKg$J5Ey|ea@Wt8^w{9(eA7AaH=(OA=HDPs@O!|2oe9?LhKak?mUjj-uibcU>>%(y0bK@{2$&2(E-euhvCIn3&5qdA?-9N| zz{YS}%iLm??yTgetR{((&Vlt}-v~X@XCHC~=~fcb0dD5%&=pVQ%cy-u1ZhT@lJq<( z)6cA+kE90RbIV)a1+Bq@!9W$#@Sr?=%%GCbD8y7cLuZje$a^4VsKOv=fS+PzZMMXL0O~j6BHW;859kX~u2_P${Gh43IVrlmUrP#xW2cRS^R! zPqY}{7|2!xKq9;_84)y{nl*^=PR76rRNSRK8vwxDmKC!NlVa`!AEbk54AnDGiwQ-` zBRX;#==J3A=txf}F>d@P*5N>1jW>i|n_rea@K^z!b^h^{e!Y?V+bhLBh~3q0Vgv0MOYRY~gp|-{ zpcO87jTbRwNp2n_@&!G~gv&aW8OSuy0Vo1&nUu5P&^VeSR3ooH&f_OG~1ddCn1&G5SX{0zG#O^hb2)K=v zL--MEUfdJhL0U5#JbVBaRY!vbNMi;3ZG;el0J+-Z^K%+W9<=>v;)C-*!XzxC4>gAy4qZWxmNY*q{SmGNMooW>mu5u~^Q@4Jj;JIFh*&s!c{w?DF=)Q5A%@;Ssph?DX-0N z;DJMk5QvP~6`-NFPy`ItFh@35lm(`<<3pGx943<%M1}W3zrlj5=G*Yd;wf*aZej9uWR~kbZI~x~Km!sXz1$1-zsm_m50HBZ#phXc?eGYV)k#7cak+Aw)Y zy@6b6JPrAMVmJgOuM&6w*>w+;i)9!Lu9?A#2@4?F;@tv(O)AM{HDtst9Uez~Lf*BL zKg9HsW(>IOOGNJh_lWc|N)~A?NxKkP*|;b3{;V2!)-&1<`UhFM@0r0?N&X~Q(cu%s zA^4Pu0wuW?;R_%mKX5OXhh2J8y!n(3LL=3c=a$+f_@R`pasn(e$Vx-?dyHX*x1*#= zlUTXoVI^_?_+15z3^guP2!S+slz?JK4{-A=SyLcP!U+B1_4sHMCR}AfUc)TM#j`Xb z4dXp4x;SMRE=#-icO$E>Hp1miqrjGe)hBxM$` z&WMi1xN9V{;n&EUNr+Wu9C^H?*HpoTe~ClJgs}1q2U!5H!=hKhkp!1WhW-GjUU)}G zG~&>RJ?4k$3w$zn0*A-ONucQ>6VULb=rR>F19U=&#)H9D&5AeKz9O^+VkoUOp%0AY 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Constructible/Power/VendingMachines/youtool.rsi/eject.png b/Resources/Textures/Constructible/Power/VendingMachines/youtool.rsi/eject.png index ef706dfbbe7d366e30b03e9d42ee6589495366d4..f9555b79ab1e0f338378f638d19dec95274206a8 100644 GIT binary patch literal 12327 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 z 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 H7zO_qT?h)+ delta 1160 zcmV;31b6$VV4De$BYyw^b5ch_0Itp)=>Px(RY^oaRCt{2nq6pHWf;eQa|R+3q!)g$ zjm|Vs<3-QLgj@_$3%Tev1_Nmk1aX!iNW2qNIyT%&2VQu$;7#cCLO~kDjZ#}7Fi!4* zlbT#uWL>(Mt>OnFxe1n0FOv7|Nqat%oRe1HKa_KF&U4QH;eUCb_j#Z5_J05iyhLP6 zi-xUkdq%n1;5PLGZta8OKWIgsNpJGT`!7J_m!2G-4R28U;faqn_~){dvqAEkj>ud( zyfr#8;x@RJh$SakE6&TKp06;KYdB^>ko=Ez&9cv-0?=;<`i;k}Zp4z4Js}Y9i6tk| z^A*p}`OR-ykbguK?iQmHBk1{xJZ5ttS4&}#{FWJDL^c8b?HR05NRFPfe6LII>}T={`t;tTLiPY5aX9-0JwSM zJ6lJ`FU`miDIR=k*Iy?Hg5Nd(q7}6xA6i&sXkk&>Uw^%I1b|Yh#5Xey&S?*99q%{4 zs~TX3@^8PQJ@cIWJv~a8Or5(yv-9PXCFSAJIk7(5ySV1xF;qebD)iC4H|@=U2z z;^DH!_4z-!QSL4Xe)78t!13d;)^U#0G}G?x*)wf6D=TXNG6j2?0e)bi{HyvF7nk<9Dq~r{v}iJ(0G|dBEizN0cPJ>=X&*b$3`efe$xyn zR~zX03VOamCcVi|pMNIF1hEmzS1yuCZ^~x?W`EO%IW%5oHr-4?JztR{>VzQqZChc{ zLPC2(VuY~)5%yvp8ZkXq^V|vt!S7fE#Y>IbQ=$kJ2IpJXo6ZU>T^rc-9z9=kqUsC3 zr_bS)l{Hyy#nBALRP^!%*bjbBjnLG|FSgJ59{zw?6Fae1XLGASh-_|^Oxg=maQwb} z4u2O5k+%Lj`RH$wsd`|a!(RApGeAUA%s;a#y7OKpy@^=DwlUDrRA}$|!j}BT>t6XC zr+^j>lT6jyDzXuy6Y=KtLPRRR@||N>G)e*@bLQ2GF+59kg`AAhh9 zpaRfu2l@@A4={U3=>v8^=>wELKwEL08sh>X|MDFD188+^Z~ozIKEO}@eWVZYhkwuO1N`RS^ZEe4`TrC8fNuDeKETdc=>vKUr4QJH a_!m8}F{`uU$mjq7002ovPDHLkU;% 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 eSp6OUbNmK1hlk^?hnH~x0000 Date: Thu, 13 Aug 2020 14:40:27 +0200 Subject: [PATCH 12/48] Fix namespaces and optimize imports (#1651) * Fix namespaces and optimize imports * Cleanup fixes * Merge conflict fixes * Merge conflict fixes * Merge conflict fixes --- .../ComponentManagerGetAllComponents.cs | 3 +- Content.Client/Atmos/GasTileOverlay.cs | 14 +--- Content.Client/Chat/ChatBox.cs | 3 +- Content.Client/ClientContentIoC.cs | 2 - .../Command/CommunicationsConsoleMenu.cs | 1 - Content.Client/Commands/DebugAiCommand.cs | 3 - Content.Client/Commands/DebugCommands.cs | 5 +- .../Commands/DebugPathfindingCommand.cs | 2 - Content.Client/EntryPoint.cs | 2 + .../Components/Actor/CharacterInterface.cs | 1 - .../Atmos/GasAnalyzerBoundUserInterface.cs | 3 - .../Components/Atmos/GasAnalyzerComponent.cs | 7 +- .../Components/Atmos/GasAnalyzerMenu.cs | 10 +-- .../Cargo/CargoOrderDatabaseComponent.cs | 6 +- .../Cargo/GalacticMarketComponent.cs | 4 +- .../ChemMasterBoundUserInterface.cs | 7 +- .../Chemistry/ChemMaster/ChemMasterWindow.cs | 7 +- .../Components/Chemistry/InjectorComponent.cs | 7 +- .../ReagentDispenserBoundUserInterface.cs | 6 +- .../ReagentDispenserWindow.cs | 7 +- .../Components/DamageableComponent.cs | 4 +- .../DisposalUnitBoundUserInterface.cs | 1 - .../Components/Disposal/DisposalUnitWindow.cs | 3 +- .../GravityGeneratorBoundUserInterface.cs | 1 - .../HUD/Inventory/ClientInventoryComponent.cs | 6 +- .../HumanInventoryInterfaceController.cs | 8 +- .../Inventory/InventoryInterfaceController.cs | 2 +- .../IconSmoothing/IconSmoothComponent.cs | 1 - .../Instruments/InstrumentComponent.cs | 6 +- .../Interactable/MultiToolComponent.cs | 4 +- .../Components/Items/ItemStatusComponent.cs | 2 +- .../Kitchen/MicrowaveBoundUserInterface.cs | 17 ++-- .../Components/Kitchen/MicrowaveVisualizer.cs | 1 - .../MagicMirrorBoundUserInterface.cs | 1 - .../Components/Mobs/CameraRecoilComponent.cs | 1 - .../Mobs/ClientOverlayEffectsComponent.cs | 3 - .../Components/Mobs/CombatModeComponent.cs | 5 +- .../Components/Mobs/DamageStateVisualizer.cs | 3 +- .../Components/Observer/GhostComponent.cs | 1 - .../Paper/PaperBoundUserInterface.cs | 2 +- .../Components/Paper/PaperWindow.cs | 2 +- .../Pointing/RoguePointingArrowVisualizer.cs | 1 - .../Components/Power/ApcBoundUserInterface.cs | 1 - .../SolarControlConsoleBoundUserInterface.cs | 2 - .../Components/RadiatingLightComponent.cs | 1 - .../Components/Sound/LoopingSoundComponent.cs | 2 - .../Storage/ClientStorageComponent.cs | 4 +- .../Trigger/TimerTriggerVisualizer.cs | 4 +- .../GameObjects/Components/Wires/WiresMenu.cs | 1 - .../EntitySystems/CharacterInterfaceSystem.cs | 2 - .../EntitySystems/ClientInventorySystem.cs | 3 +- .../EntitySystems/CombatModeSystem.cs | 9 -- .../EntitySystems/ConstructionSystem.cs | 3 +- .../EntitySystems/DragDropSystem.cs | 4 +- .../EntitySystems/ExamineSystem.cs | 4 +- .../EntitySystems/GasTileOverlaySystem.cs | 6 -- .../GameObjects/EntitySystems/MoverSystem.cs | 1 - .../EntitySystems/StatusEffectsSystem.cs | 1 - .../GameObjects/EntitySystems/VerbSystem.cs | 2 +- Content.Client/GlobalVerbs/ExamineVerb.cs | 2 +- .../GlobalVerbs/ViewVariablesVerb.cs | 2 +- .../Graphics/Overlays/FlashOverlay.cs | 6 +- .../BodyScannerBoundUserInterface.cs | 10 +-- .../BodyScanner/BodyScannerDisplay.cs | 18 ++-- .../GenericSurgeryBoundUserInterface.cs | 11 +-- .../Surgery/GenericSurgeryWindow.cs | 11 ++- Content.Client/Instruments/InstrumentMenu.cs | 1 - Content.Client/Jobs/ClownSpecial.cs | 2 +- Content.Client/Parallax/ParallaxGenerator.cs | 1 - Content.Client/Sandbox/SandboxManager.cs | 1 - Content.Client/ScreenshotHook.cs | 1 - Content.Client/State/GameScreen.cs | 7 -- Content.Client/State/GameScreenBase.cs | 3 +- Content.Client/State/LobbyState.cs | 2 - .../UserInterface/Cargo/CargoConsoleMenu.cs | 8 +- .../Cargo/CargoConsoleOrderMenu.cs | 6 +- .../Cargo/GalacticBankSelectionMenu.cs | 2 - .../UserInterface/CharacterSetupGui.cs | 2 +- .../UserInterface/CooldownGraphic.cs | 11 ++- Content.Client/UserInterface/GameHud.cs | 2 - Content.Client/UserInterface/GhostGui.cs | 1 - .../UserInterface/HumanoidProfileEditor.cs | 5 +- .../UserInterface/IItemSlotManager.cs | 3 +- .../UserInterface/ItemSlotButton.cs | 1 - .../UserInterface/ItemSlotManager.cs | 7 +- Content.Client/UserInterface/LateJoinGui.cs | 11 ++- .../LobbyCharacterPreviewPanel.cs | 4 +- .../UserInterface/RoundEndSummaryWindow.cs | 15 +--- .../Tests/AI/AiControllerTest.cs | 22 ++--- Content.IntegrationTests/Tests/BuckleTest.cs | 2 +- .../Tests/ContainerOcclusionTest.cs | 1 - .../Tests/Disposal/DisposalUnitTest.cs | 1 - .../Tests/DoAfter/DoAfterServerTest.cs | 7 +- Content.IntegrationTests/Tests/EntityTest.cs | 21 ++--- .../Tests/GravityGridTest.cs | 2 - .../Tests/HumanInventoryUniformSlotsTest.cs | 3 +- ...stgresPreferencesDbContextModelSnapshot.cs | 3 +- .../Sqlite/20200118020532_initial.Designer.cs | 5 +- .../Sqlite/20200118020532_initial.cs | 2 +- .../Sqlite/20200118195640_jobs.Designer.cs | 5 +- .../Migrations/Sqlite/20200118195640_jobs.cs | 2 +- ...19103426_preferenceUnavailable.Designer.cs | 5 +- .../20200119103426_preferenceUnavailable.cs | 2 +- ...SqlitePreferencesDbContextModelSnapshot.cs | 5 +- .../Combat/Melee/SwingMeleeWeaponOperator.cs | 2 - .../Combat/Melee/UnarmedCombatOperator.cs | 2 - .../Inventory/CloseStorageOperator.cs | 1 - .../Operators/Inventory/DropEntityOperator.cs | 2 - .../Inventory/DropHandItemsOperator.cs | 1 - .../Inventory/EquipEntityOperator.cs | 1 - .../Inventory/OpenStorageOperator.cs | 1 - .../Inventory/PickupEntityOperator.cs | 2 +- .../Inventory/UseItemInHandsOperator.cs | 2 +- .../Movement/MoveToEntityOperator.cs | 1 - .../Actions/Clothing/Gloves/PickUpGloves.cs | 2 - .../Actions/Clothing/Head/EquipHead.cs | 2 - .../Actions/Clothing/Head/PickUpHead.cs | 2 - .../OuterClothing/EquipOuterClothing.cs | 2 - .../OuterClothing/PickUpOuterClothing.cs | 2 - .../Actions/Clothing/Shoes/EquipShoes.cs | 2 - .../Actions/Clothing/Shoes/PickUpShoes.cs | 2 - .../Combat/Melee/MeleeWeaponAttackEntity.cs | 1 - .../Actions/Combat/Melee/PickUpMeleeWeapon.cs | 1 - .../Combat/Melee/UnarmedAttackEntity.cs | 1 - .../AI/Utility/Actions/IAiUtility.cs | 2 - .../AI/Utility/Actions/Idle/WanderAndWait.cs | 8 +- .../AI/Utility/Actions/UtilityAction.cs | 1 - .../AI/Utility/AiLogic/UtilityAI.cs | 8 +- .../AI/Utility/BehaviorSets/BehaviorSet.cs | 1 - .../Utility/BehaviorSets/HungerBehaviorSet.cs | 2 - .../Clothing/ClothingInInventoryCon.cs | 2 +- .../Considerations/Combat/TargetHealthCon.cs | 4 +- .../Considerations/Combat/TargetIsCritCon.cs | 2 +- .../Considerations/Combat/TargetIsDeadCon.cs | 2 +- .../Containers/TargetAccessibleCon.cs | 3 - .../Considerations/Hands/FreeHandCon.cs | 1 - .../Inventory/CanPutTargetInInventoryCon.cs | 2 +- .../Inventory/TargetInOurInventoryCon.cs | 3 +- .../Clothing/Gloves/EquipAnyGlovesExp.cs | 2 +- .../Gloves/PickUpAnyNearbyGlovesExp.cs | 3 +- .../Clothing/Head/EquipAnyHeadExp.cs | 2 +- .../Clothing/Head/PickUpAnyNearbyHeadExp.cs | 3 +- .../OuterClothing/EquipAnyOuterClothingExp.cs | 2 +- .../PickUpAnyNearbyOuterClothingExp.cs | 3 +- .../Clothing/Shoes/EquipAnyShoesExp.cs | 2 +- .../Clothing/Shoes/PickUpAnyNearbyShoesExp.cs | 3 +- .../Combat/Melee/EquipMeleeExp.cs | 1 - .../Melee/MeleeAttackNearbyPlayerExp.cs | 2 +- .../Melee/MeleeAttackNearbySpeciesExp.cs | 2 - .../Melee/UnarmedAttackNearbyPlayerExp.cs | 4 +- Content.Server/AI/WorldState/Blackboard.cs | 2 - Content.Server/AI/WorldState/StateData.cs | 2 - .../States/Clothing/EquippedClothingState.cs | 2 +- .../States/Clothing/NearbyClothingState.cs | 3 +- .../States/Hands/AnyFreeHandState.cs | 1 - .../AI/WorldState/States/Hands/FreeHands.cs | 1 - .../WorldState/States/Hands/HandItemsState.cs | 1 - .../States/Inventory/EquippedEntityState.cs | 1 - .../States/Inventory/InventoryState.cs | 1 - .../Inventory/LastOpenedStorageState.cs | 3 +- .../States/Mobs/NearbyPlayersState.cs | 2 +- .../States/Mobs/NearbySpeciesState.cs | 2 +- .../States/Nutrition/NearbyDrinkState.cs | 1 - .../States/Nutrition/NearbyFoodState.cs | 1 - .../States/Nutrition/ThirstyState.cs | 1 - Content.Server/Administration/AGhost.cs | 5 +- Content.Server/Administration/ControlMob.cs | 1 - .../DeleteEntitiesWithComponent.cs | 7 +- .../Atmos/Reactions/PhoronFireReaction.cs | 1 - Content.Server/Atmos/TileAtmosInfo.cs | 2 - Content.Server/Cargo/CargoOrderDataManager.cs | 5 +- Content.Server/Cargo/CargoOrderDatabase.cs | 6 +- .../Cargo/ICargoOrderDataManager.cs | 3 +- Content.Server/Chat/ChatCommands.cs | 10 +-- Content.Server/Chat/ChatManager.cs | 10 +-- .../Chemistry/Metabolism/DefaultDrink.cs | 3 +- .../Chemistry/Metabolism/DefaultFood.cs | 1 - .../ExplosionReactionEffect.cs | 2 +- Content.Server/Chemistry/ReactionPrototype.cs | 2 +- Content.Server/EntryPoint.cs | 5 +- Content.Server/Explosions/ExplosionHelper.cs | 2 +- .../Access/AccessReaderComponent.cs | 2 +- .../Access/IdCardConsoleComponent.cs | 1 + .../Access/PresetIdCardComponent.cs | 2 +- .../Components/Atmos/AirtightComponent.cs | 2 - .../Components/Atmos/BarotraumaComponent.cs | 3 +- .../Components/Atmos/GasAnalyzerComponent.cs | 4 +- .../Components/Buckle/BuckleComponent.cs | 2 +- .../Cargo/GalacticMarketComponent.cs | 5 -- .../Chemistry/ChemMasterComponent.cs | 22 ++--- .../Chemistry/ReagentDispenserComponent.cs | 15 ++-- .../Components/Chemistry/SolutionComponent.cs | 17 ++-- .../TransformableContainerComponent.cs | 2 +- .../Components/Chemistry/VaporComponent.cs | 16 +--- .../Command/CommunicationsConsoleComponent.cs | 2 +- .../Construction/ConstructionComponent.cs | 3 +- .../Components/Conveyor/ConveyorComponent.cs | 1 + .../Components/Damage/BreakableComponent.cs | 6 +- .../DamageOnHighSpeedImpactComponent.cs | 4 +- .../Damage/DamageOnToolInteractComponent.cs | 11 +-- .../Components/Damage/DamageThreshold.cs | 5 +- .../Components/Damage/DamageableComponent.cs | 6 +- .../Damage/DestructibleComponent.cs | 8 +- .../Components/Damage/ResistanceSet.cs | 6 +- .../Components/Disposal/DisposalCommands.cs | 1 - .../Disposal/DisposalHolderComponent.cs | 2 + .../Disposal/DisposalTubeComponent.cs | 4 +- .../Disposal/DisposalUnitComponent.cs | 4 +- .../Components/DoAfterComponent.cs | 30 +++---- .../Components/Doors/ServerDoorComponent.cs | 11 +-- .../Explosion/ExplosiveComponent.cs | 2 +- .../Explosion/FlashExplosiveComponent.cs | 2 +- .../Components/Fluids/CanSpillComponent.cs | 4 +- .../Components/Fluids/PuddleComponent.cs | 5 +- .../Components/Fluids/SpillHelper.cs | 1 - .../Components/Fluids/SprayComponent.cs | 10 +-- .../Components/GUI/HandsComponent.cs | 9 +- .../GUI/HumanInventoryControllerComponent.cs | 3 +- .../Components/GUI/IInventoryController.cs | 2 +- .../Components/GUI/InventoryComponent.cs | 14 ++-- .../Gravity/GravityGeneratorComponent.cs | 2 +- .../Components/Healing/HealingComponent.cs | 7 +- .../Interactable/HandheldLightComponent.cs | 5 +- .../Interactable/WelderComponent.cs | 4 +- .../Items/Clothing/ClothingComponent.cs | 7 +- .../Components/Items/DiceComponent.cs | 3 +- .../Components/Items/RCDComponent.cs | 1 - .../Storage/CursedEntityStorageComponent.cs | 4 - .../Items/Storage/EntityStorageComponent.cs | 5 +- .../Items/Storage/Fill/CustodialClosetFill.cs | 1 - .../Items/Storage/Fill/MedkitFillComponent.cs | 2 - .../Storage/Fill/ToolLockerFillComponent.cs | 1 - .../Fill/ToolboxElectricalFillComponent.cs | 1 - .../Fill/ToolboxEmergencyFillComponent.cs | 1 - .../Storage/Fill/ToolboxGoldFillComponent.cs | 1 - .../Fill/UtilityBeltClothingFillComponent.cs | 1 - .../Components/Items/Storage/ItemComponent.cs | 6 +- .../Storage/SecureEntityStorageComponent.cs | 2 +- .../Items/Storage/ServerStorageComponent.cs | 2 +- .../Components/Kitchen/MicrowaveComponent.cs | 54 ++++++------ .../Components/ListeningComponent.cs | 10 +-- .../Markers/ConditionalSpawnerComponent.cs | 2 +- .../Components/Markers/SpawnPointComponent.cs | 2 +- .../Markers/TrashSpawnerComponent.cs | 9 +- .../Components/Markers/WarpPointComponent.cs | 3 +- .../Medical/MedicalScannerComponent.cs | 9 +- .../Metabolism/BloodstreamComponent.cs | 2 +- .../Mining/AsteroidRockComponent.cs | 5 +- .../Components/Mobs/DamageStates.cs | 5 +- .../DamageThresholdTemplates.cs | 5 +- .../DamageThresholdTemplates/HumanTemplate.cs | 6 +- .../Mobs/HeatResistanceComponent.cs | 4 +- .../Components/Mobs/MindComponent.cs | 5 +- .../Mobs/ServerOverlayEffectsComponent.cs | 4 - .../Components/Mobs/SpeciesComponent.cs | 13 +-- .../Components/Mobs/StunnableComponent.cs | 5 +- .../Components/Movement/NoSlipComponent.cs | 2 +- .../Movement/ServerPortalComponent.cs | 1 - .../NodeContainer/NodeContainerComponent.cs | 4 +- .../NodeGroups/ApcNetNodeGroup.cs | 8 +- .../NodeGroups/BaseNetConnectorNodeGroup.cs | 6 +- .../NodeContainer/NodeGroups/INodeGroup.cs | 4 +- .../NodeGroups/NodeGroupFactory.cs | 6 +- .../NodeGroups/PowerNetNodeGroup.cs | 8 +- .../NodeContainer/Nodes/AdjacentNode.cs | 4 +- .../Components/NodeContainer/Nodes/Node.cs | 10 +-- .../Components/Nutrition/DrinkComponent.cs | 3 +- .../Components/Nutrition/FoodComponent.cs | 1 + .../Nutrition/FoodContainerComponent.cs | 1 + .../Components/Nutrition/HungerComponent.cs | 6 +- .../Components/Nutrition/ThirstComponent.cs | 8 +- .../Components/PDA/PDAComponent.cs | 3 +- .../Components/Paper/PaperComponent.cs | 5 +- .../Components/Paper/WriteComponent.cs | 3 +- .../Pointing/RoguePointingArrowComponent.cs | 1 - .../Power/ApcNetComponents/ApcComponent.cs | 10 +-- .../PowerProviderComponent.cs | 8 +- .../PowerReceiverComponent.cs | 13 ++- .../PowerReceiverUsers/BaseCharger.cs | 6 +- .../PowerReceiverUsers/LightBulbComponent.cs | 2 +- .../PowerCellChargerComponent.cs | 2 +- .../PoweredLightComponent.cs | 8 +- .../WeaponCapacitorChargerComponent.cs | 2 +- .../Power/BaseNetConnectorComponent.cs | 4 +- .../Components/Power/BatteryComponent.cs | 4 +- .../PowerNetComponents/IPowerNetManager.cs | 4 +- .../PowerConsumerComponent.cs | 4 +- .../Power/PowerNetComponents/SmesComponent.cs | 7 +- .../SolarControlConsoleComponent.cs | 6 +- .../PowerNetComponents/SolarPanelComponent.cs | 5 +- .../Components/Power/WirePlacerComponent.cs | 2 +- .../Projectiles/FlashProjectileComponent.cs | 2 - .../Projectiles/HitscanComponent.cs | 19 ++--- .../Projectiles/ProjectileComponent.cs | 3 +- .../Projectiles/ThrownItemComponent.cs | 5 +- .../GameObjects/Components/RadioComponent.cs | 10 +-- .../Components/Recycling/RecyclerComponent.cs | 2 + .../Components/Research/LatheComponent.cs | 4 +- .../Research/ResearchClientComponent.cs | 2 +- .../Research/ResearchServerComponent.cs | 4 +- .../Rotatable/FlippableComponent.cs | 2 +- .../Rotatable/RotatableComponent.cs | 2 +- .../Sound/FootstepModifierComponent.cs | 1 - .../Components/Stack/StackComponent.cs | 1 - .../Components/Strap/StrapComponent.cs | 2 +- .../Temperature/TemperatureComponent.cs | 5 +- .../Components/Timing/UseDelayComponent.cs | 8 +- .../OnUseTimerTriggerComponent.cs | 6 +- .../VendingMachineComponent.cs | 3 +- .../Components/Weapon/FlashableComponent.cs | 5 -- .../Components/Weapon/Melee/FlashComponent.cs | 3 +- .../Weapon/Melee/MeleeWeaponComponent.cs | 3 + .../Weapon/Melee/StunbatonComponent.cs | 4 +- .../Ranged/Ammunition/AmmoBoxComponent.cs | 3 +- .../Weapon/Ranged/Ammunition/AmmoComponent.cs | 4 +- .../Ammunition/RangedMagazineComponent.cs | 1 + .../Ranged/Ammunition/SpeedLoaderComponent.cs | 1 + .../Barrels/BoltActionBarrelComponent.cs | 2 +- .../Ranged/Barrels/RevolverBarrelComponent.cs | 2 +- .../Barrels/ServerBatteryBarrelComponent.cs | 3 +- .../Barrels/ServerMagazineBarrelComponent.cs | 3 +- .../Barrels/ServerRangedBarrelComponent.cs | 6 +- .../Ranged/ServerRangedWeaponComponent.cs | 2 + .../GameObjects/Components/WiresComponent.cs | 4 +- .../GameObjects/EntitySystems/AI/AiSystem.cs | 3 +- .../Accessible/AiReachableSystem.cs | 30 ++++--- .../Pathfinding/Accessible/BFSPathfinder.cs | 13 ++- .../Accessible/PathfindingRegion.cs | 19 ++--- .../Pathfinders/AStarPathfindingJob.cs | 6 +- .../Pathfinders/JpsPathfindingJob.cs | 4 +- .../Pathfinders/PathfindingComparer.cs | 1 - .../AI/Pathfinding/PathfindingChunk.cs | 11 +-- .../AI/Pathfinding/PathfindingHelpers.cs | 28 +++---- .../AI/Pathfinding/PathfindingNode.cs | 35 ++++---- .../AI/Pathfinding/PathfindingSystem.cs | 18 ++-- .../AI/Steering/AiSteeringSystem.cs | 3 - .../GameObjects/EntitySystems/ActSystem.cs | 2 +- .../EntitySystems/AtmosphereSystem.cs | 8 +- .../EntitySystems/BaseChargerSystem.cs | 4 +- .../EntitySystems/BloodstreamSystem.cs | 2 +- .../EntitySystems/ChemistrySystem.cs | 2 +- .../EntitySystems/Click/ExamineSystem.cs | 1 - .../EntitySystems/CombatModeSystem.cs | 14 +--- .../EntitySystems/ConstructionSystem.cs | 7 +- .../EntitySystems/DoAfter/DoAfter.cs | 37 ++++---- .../EntitySystems/DoAfter/DoAfterEventArgs.cs | 3 +- .../EntitySystems/DoAfter/DoAfterSystem.cs | 20 ++--- .../GameObjects/EntitySystems/DoorSystem.cs | 3 +- .../EntitySystems/GasAnalyzerSystem.cs | 5 -- .../EntitySystems/GasTileOverlaySystem.cs | 4 - .../EntitySystems/GravitySystem.cs | 4 +- .../EntitySystems/HandHeldLightSystem.cs | 2 +- .../GameObjects/EntitySystems/HandsSystem.cs | 20 ++--- .../GameObjects/EntitySystems/HungerSystem.cs | 2 +- .../EntitySystems/JobQueues/IJob.cs | 2 - .../GameObjects/EntitySystems/LatheSystem.cs | 2 +- .../EntitySystems/MedicalScannerSystem.cs | 2 +- .../EntitySystems/MeleeWeaponSystem.cs | 2 +- .../EntitySystems/MicrowaveSystem.cs | 2 +- .../GameObjects/EntitySystems/MoverSystem.cs | 2 +- .../GameObjects/EntitySystems/PortalSystem.cs | 2 +- .../EntitySystems/PowerApcSystem.cs | 10 +-- .../EntitySystems/PowerSmesSystem.cs | 5 +- .../PowerSolarControlConsoleSystem.cs | 2 +- .../EntitySystems/PowerSolarSystem.cs | 12 +-- .../EntitySystems/ProjectileSystem.cs | 2 +- .../GameObjects/EntitySystems/PuddleSystem.cs | 3 +- .../GameObjects/EntitySystems/RadioSystem.cs | 4 +- .../EntitySystems/ResearchSystem.cs | 2 +- .../EntitySystems/RoundEndSystem.cs | 2 +- .../EntitySystems/StomachSystem.cs | 2 +- .../EntitySystems/StorageSystem.cs | 2 +- .../GameObjects/EntitySystems/StunSystem.cs | 2 +- .../EntitySystems/TemperatureSystem.cs | 4 +- .../GameObjects/EntitySystems/ThirstSystem.cs | 2 +- .../EntitySystems/TriggerSystem.cs | 2 +- .../GameObjects/EntitySystems/VaporSystem.cs | 1 - .../GameObjects/EntitySystems/VerbSystem.cs | 6 +- .../GameObjects/EntitySystems/WelderSystem.cs | 2 +- .../EntitySystems/WireHackingSystem.cs | 2 +- Content.Server/GameTicking/GamePreset.cs | 2 +- .../GamePresets/PresetSuspicion.cs | 6 +- .../GameTicking/GameRules/RuleDeathMatch.cs | 2 +- .../GameTicking/GameRules/RuleSuspicion.cs | 7 -- .../GameTicking/GameTicker.JobController.cs | 2 +- Content.Server/GameTicking/GameTicker.cs | 7 +- .../GameTicking/GameTickerCommands.cs | 8 +- Content.Server/GlobalVerbs/ControlMobVerb.cs | 2 +- Content.Server/GlobalVerbs/PointingVerb.cs | 2 +- Content.Server/GlobalVerbs/PullingVerb.cs | 2 +- Content.Server/GlobalVerbs/RejuvenateVerb.cs | 4 +- .../Health/BodySystem/BodyManagerComponent.cs | 84 ++++++++++--------- .../Health/BodySystem/BodyPart/BodyPart.cs | 55 ++++++------ .../BodyPart/DroppedBodyPartComponent.cs | 21 ++--- .../BodySystem/BodyPreset/BodyPreset.cs | 8 +- .../BodyScanner/BodyScannerComponent.cs | 12 +-- .../BodySystem/BodyTemplate/BodyTemplate.cs | 17 ++-- .../Health/BodySystem/IBodyPartContainer.cs | 7 +- .../Mechanism/DroppedMechanismComponent.cs | 26 +++--- .../Health/BodySystem/Mechanism/Mechanism.cs | 36 ++++---- .../BodySystem/Surgery/Surgeon/ISurgeon.cs | 19 ++--- .../Surgery/Surgeon/SurgeryToolComponent.cs | 15 ++-- .../SurgeryData/BiologicalSurgeryData.cs | 34 ++++---- .../Surgery/SurgeryData/ISurgeryData.cs | 32 ++++--- .../Interfaces/Chemistry/IReactionEffect.cs | 2 +- .../Components/Damage/IDamageableComponent.cs | 6 +- .../Components/Interaction/IBodyPartAdded.cs | 2 +- .../Components/Items/IHandsComponent.cs | 2 +- .../GameObjects/IOnDamageBehavior.cs | 7 +- .../Interfaces/GameObjects/ISuicideAct.cs | 3 - Content.Server/Interfaces/IAccess.cs | 2 +- .../Interfaces/IGasReactionEffect.cs | 1 - Content.Server/Interfaces/IListen.cs | 3 - .../Interfaces/PDA/IPDAUplinkManager.cs | 2 - Content.Server/Jobs/ClownSpecial.cs | 1 + Content.Server/MoMMILink.cs | 2 - Content.Server/Mobs/Commands.cs | 3 +- Content.Server/Mobs/Roles/Job.cs | 4 +- .../Mobs/Roles/SuspicionInnocentRole.cs | 4 +- .../Mobs/Roles/SuspicionTraitorRole.cs | 4 +- Content.Server/Mobs/StandingStateHelper.cs | 1 - Content.Server/Observer/Ghost.cs | 11 +-- Content.Server/PDA/PDAUplinkManager.cs | 3 +- Content.Server/Placement/SpawnHelpers.cs | 2 - Content.Server/Sandbox/SandboxManager.cs | 3 +- Content.Server/ServerContentIoC.cs | 4 +- Content.Server/Throw/ThrowHelper.cs | 2 +- Content.Shared/Atmos/GasPrototype.cs | 4 +- Content.Shared/Audio/AudioHelpers.cs | 6 -- .../Chemistry/DefaultMetabolizable.cs | 1 - Content.Shared/Chemistry/ReagentPrototype.cs | 1 - Content.Shared/Chemistry/ReagentUnit.cs | 4 +- Content.Shared/Chemistry/Solution.cs | 12 ++- Content.Shared/EntryPoint.cs | 16 ++-- .../Cargo/SharedCargoConsoleComponent.cs | 7 +- .../SharedCargoOrderDatabaseComponent.cs | 6 +- .../Cargo/SharedGalacticMarketComponent.cs | 8 +- .../ChemMaster/SharedChemMasterComponent.cs | 2 +- .../ReagentDispenserInventoryPrototype.cs | 2 +- .../SharedReagentDispenserComponent.cs | 2 +- .../Chemistry/SharedSolutionComponent.cs | 6 -- .../Components/Damage/DamageableComponent.cs | 2 +- .../Instruments/SharedInstrumentComponent.cs | 1 - .../Inventory/InventoryTemplates.cs | 4 +- .../Inventory/SharedInventoryComponent.cs | 2 +- .../Mobs/SharedOverlayEffectsComponent.cs | 7 -- .../Movement/SharedSlipperyComponent.cs | 3 +- .../Components/PDA/SharedPDAComponent.cs | 3 - .../Pointing/SharedPointingArrowComponent.cs | 4 +- .../GameObjects/Components/Power/SharedApc.cs | 1 - .../SharedSolarControlConsoleComponent.cs | 2 +- .../Components/SharedDoAfterComponent.cs | 2 - .../Components/SharedGasAnalyzerComponent.cs | 6 +- .../Components/SharedPaperComponent.cs | 1 - .../Components/Trigger/TriggerVisuals.cs | 2 +- .../Ranged/SharedRangedBarrelComponent.cs | 1 - Content.Shared/GameObjects/DrawDepth.cs | 2 +- .../VerbSystemMessages.cs | 2 +- .../EntitySystems/ExamineSystemShared.cs | 2 +- .../EntitySystems/SharedCombatModeSystem.cs | 5 -- .../EntitySystems/SharedConstructionSystem.cs | 1 - .../SharedGasTileOverlaySystem.cs | 1 - .../GameObjects/Verbs/GlobalVerb.cs | 2 +- Content.Shared/GameObjects/Verbs/Verb.cs | 4 +- .../GameObjects/Verbs/VerbCategories.cs | 2 +- .../GameObjects/Verbs/VerbCategoryData.cs | 2 +- Content.Shared/GameObjects/Verbs/VerbData.cs | 2 +- .../GameObjects/Verbs/VerbUtility.cs | 2 +- .../GameObjects/Verbs/VerbVisibility.cs | 2 +- .../BodyPart/BodyPartProperties/ArmLength.cs | 8 +- .../BodySystem/BodyPart/BodyPartPrototype.cs | 19 ++--- .../BodyPreset/BodyPresetPrototype.cs | 7 +- .../BodyScanner/BodyScannerSharedValues.cs | 16 +--- .../BodyTemplate/BodyTemplatePrototype.cs | 11 ++- .../Health/BodySystem/BodysystemValues.cs | 2 +- .../Mechanism/MechanismPrototype.cs | 8 +- .../Surgery/GenericSurgeryUIMessages.cs | 8 +- .../AbstractDamageContainer.cs | 8 +- .../BiologicalDamageContainer.cs | 7 +- .../Interfaces/Chemistry/IMetabolizable.cs | 3 +- Content.Shared/Interfaces/IModuleManager.cs | 8 +- Content.Shared/Kitchen/RecipeManager.cs | 3 +- .../Kitchen/SharedMicrowaveComponent.cs | 3 +- Content.Shared/Maps/ContentTileDefinition.cs | 5 +- Content.Shared/Physics/CollisionGroup.cs | 2 +- Content.Shared/Physics/VaporController.cs | 3 - .../Preferences/HumanoidCharacterProfile.cs | 3 - .../Prototypes/Cargo/CargoOrderData.cs | 8 +- .../Prototypes/Cargo/CargoProductPrototype.cs | 4 +- .../Kitchen/MicrowaveMealRecipePrototype.cs | 5 +- .../PDA/UplinkStoreListingPrototype.cs | 1 - Content.Shared/Roles/AntagPrototype.cs | 5 +- Content.Shared/Roles/JobPrototype.cs | 3 +- Content.Shared/Roles/JobSpecial.cs | 2 +- Content.Shared/Roles/StartingGearPrototype.cs | 2 +- Content.Shared/SharedGameTicker.cs | 1 - Content.Shared/Utility/TemperatureHelpers.cs | 3 - Content.Tests/Shared/BodyTemplateTest.cs | 8 +- .../Shared/Chemistry/ReagentUnit_Tests.cs | 4 +- .../Gamestates/ComponentStateNullTest.cs | 2 +- 500 files changed, 1044 insertions(+), 1557 deletions(-) diff --git a/Content.Benchmarks/ComponentManagerGetAllComponents.cs b/Content.Benchmarks/ComponentManagerGetAllComponents.cs index 3b1c3e1c6d..db49d0974e 100644 --- a/Content.Benchmarks/ComponentManagerGetAllComponents.cs +++ b/Content.Benchmarks/ComponentManagerGetAllComponents.cs @@ -1,5 +1,4 @@ -using System; -using System.Collections.Generic; +using System.Collections.Generic; using BenchmarkDotNet.Attributes; using Moq; using Robust.Shared.Exceptions; diff --git a/Content.Client/Atmos/GasTileOverlay.cs b/Content.Client/Atmos/GasTileOverlay.cs index ec0cb330fa..8f852d0ed1 100644 --- a/Content.Client/Atmos/GasTileOverlay.cs +++ b/Content.Client/Atmos/GasTileOverlay.cs @@ -1,25 +1,13 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using Content.Client.GameObjects.EntitySystems; -using Content.Client.Utility; -using JetBrains.Annotations; -using Robust.Client.Graphics; +using Content.Client.GameObjects.EntitySystems; using Robust.Client.Graphics.ClientEye; using Robust.Client.Graphics.Drawing; using Robust.Client.Graphics.Overlays; using Robust.Client.Interfaces.Graphics; using Robust.Client.Interfaces.Graphics.ClientEye; -using Robust.Client.Interfaces.ResourceManagement; using Robust.Shared.GameObjects.Systems; using Robust.Shared.Interfaces.Map; -using Robust.Shared.Interfaces.Resources; using Robust.Shared.IoC; -using Robust.Shared.Log; -using Robust.Shared.Map; using Robust.Shared.Maths; -using Robust.Shared.Timing; -using Robust.Shared.Utility; namespace Content.Client.Atmos { diff --git a/Content.Client/Chat/ChatBox.cs b/Content.Client/Chat/ChatBox.cs index 7f3e1aa3ec..eb37c86703 100644 --- a/Content.Client/Chat/ChatBox.cs +++ b/Content.Client/Chat/ChatBox.cs @@ -1,5 +1,4 @@ -using System.Collections.Generic; -using Content.Shared.Chat; +using Content.Shared.Chat; using Robust.Client.Console; using Robust.Client.Graphics.Drawing; using Robust.Client.UserInterface; diff --git a/Content.Client/ClientContentIoC.cs b/Content.Client/ClientContentIoC.cs index 96c9e5a7c6..9fe86a4b73 100644 --- a/Content.Client/ClientContentIoC.cs +++ b/Content.Client/ClientContentIoC.cs @@ -8,9 +8,7 @@ using Content.Client.Sandbox; using Content.Client.UserInterface; using Content.Client.UserInterface.Stylesheets; using Content.Client.Utility; -using Content.Shared.Chemistry; using Content.Shared.Interfaces; -using Content.Shared.Interfaces.Chemistry; using Robust.Shared.IoC; namespace Content.Client diff --git a/Content.Client/Command/CommunicationsConsoleMenu.cs b/Content.Client/Command/CommunicationsConsoleMenu.cs index 0a6804264c..a04bb56edb 100644 --- a/Content.Client/Command/CommunicationsConsoleMenu.cs +++ b/Content.Client/Command/CommunicationsConsoleMenu.cs @@ -5,7 +5,6 @@ using Robust.Client.UserInterface.Controls; using Robust.Client.UserInterface.CustomControls; using Robust.Shared.IoC; using Robust.Shared.Localization; -using Robust.Shared.Log; using Robust.Shared.Maths; using Timer = Robust.Shared.Timers.Timer; diff --git a/Content.Client/Commands/DebugAiCommand.cs b/Content.Client/Commands/DebugAiCommand.cs index f5c3088215..065da01bab 100644 --- a/Content.Client/Commands/DebugAiCommand.cs +++ b/Content.Client/Commands/DebugAiCommand.cs @@ -1,10 +1,7 @@ using Content.Client.GameObjects.EntitySystems.AI; using JetBrains.Annotations; using Robust.Client.Interfaces.Console; -using Robust.Client.Player; using Robust.Shared.GameObjects.Systems; -using Robust.Shared.Interfaces.GameObjects; -using Robust.Shared.IoC; namespace Content.Client.Commands { diff --git a/Content.Client/Commands/DebugCommands.cs b/Content.Client/Commands/DebugCommands.cs index 510e1e25a8..8ba7a3a975 100644 --- a/Content.Client/Commands/DebugCommands.cs +++ b/Content.Client/Commands/DebugCommands.cs @@ -1,15 +1,12 @@ using Content.Client.GameObjects.Components; using Content.Client.GameObjects.EntitySystems; using Content.Client.Interfaces; -using Content.Shared.GameObjects.Components.Markers; -using Robust.Client.Console.Commands; +using Content.Shared.GameObjects; using Robust.Client.Interfaces.Console; using Robust.Client.Interfaces.GameObjects.Components; -using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Systems; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.IoC; -using DrawDepth = Content.Shared.GameObjects.DrawDepth; namespace Content.Client.Commands { diff --git a/Content.Client/Commands/DebugPathfindingCommand.cs b/Content.Client/Commands/DebugPathfindingCommand.cs index f181823141..9c79bec8e7 100644 --- a/Content.Client/Commands/DebugPathfindingCommand.cs +++ b/Content.Client/Commands/DebugPathfindingCommand.cs @@ -2,8 +2,6 @@ using Content.Client.GameObjects.EntitySystems.AI; using JetBrains.Annotations; using Robust.Client.Interfaces.Console; using Robust.Shared.GameObjects.Systems; -using Robust.Shared.Interfaces.GameObjects; -using Robust.Shared.IoC; namespace Content.Client.Commands { diff --git a/Content.Client/EntryPoint.cs b/Content.Client/EntryPoint.cs index 837e79a79d..9a3065d77c 100644 --- a/Content.Client/EntryPoint.cs +++ b/Content.Client/EntryPoint.cs @@ -12,6 +12,8 @@ using Content.Client.UserInterface.Stylesheets; using Content.Shared.GameObjects.Components; using Content.Shared.GameObjects.Components.Cargo; using Content.Shared.GameObjects.Components.Chemistry; +using Content.Shared.GameObjects.Components.Chemistry.ChemMaster; +using Content.Shared.GameObjects.Components.Chemistry.ReagentDispenser; using Content.Shared.GameObjects.Components.Gravity; using Content.Shared.GameObjects.Components.Markers; using Content.Shared.GameObjects.Components.Research; diff --git a/Content.Client/GameObjects/Components/Actor/CharacterInterface.cs b/Content.Client/GameObjects/Components/Actor/CharacterInterface.cs index e248993a75..c2b66a9b07 100644 --- a/Content.Client/GameObjects/Components/Actor/CharacterInterface.cs +++ b/Content.Client/GameObjects/Components/Actor/CharacterInterface.cs @@ -9,7 +9,6 @@ using Robust.Client.UserInterface.Controls; using Robust.Client.UserInterface.CustomControls; using Robust.Shared.GameObjects; using Robust.Shared.Interfaces.GameObjects; -using Robust.Shared.Interfaces.Network; using Robust.Shared.IoC; namespace Content.Client.GameObjects.Components.Actor diff --git a/Content.Client/GameObjects/Components/Atmos/GasAnalyzerBoundUserInterface.cs b/Content.Client/GameObjects/Components/Atmos/GasAnalyzerBoundUserInterface.cs index c4907bc31d..810d57182e 100644 --- a/Content.Client/GameObjects/Components/Atmos/GasAnalyzerBoundUserInterface.cs +++ b/Content.Client/GameObjects/Components/Atmos/GasAnalyzerBoundUserInterface.cs @@ -1,8 +1,5 @@ using Robust.Client.GameObjects.Components.UserInterface; using Robust.Shared.GameObjects.Components.UserInterface; -using System; -using System.Collections.Generic; -using System.Text; using static Content.Shared.GameObjects.Components.SharedGasAnalyzerComponent; namespace Content.Client.GameObjects.Components.Atmos diff --git a/Content.Client/GameObjects/Components/Atmos/GasAnalyzerComponent.cs b/Content.Client/GameObjects/Components/Atmos/GasAnalyzerComponent.cs index e8b9a29700..c39e425fe7 100644 --- a/Content.Client/GameObjects/Components/Atmos/GasAnalyzerComponent.cs +++ b/Content.Client/GameObjects/Components/Atmos/GasAnalyzerComponent.cs @@ -1,6 +1,6 @@ -using Content.Client.UserInterface.Stylesheets; +using System; +using Content.Client.UserInterface.Stylesheets; using Content.Client.Utility; -using Content.Shared.GameObjects; using Content.Shared.GameObjects.Components; using Robust.Client.UserInterface; using Robust.Client.UserInterface.Controls; @@ -8,9 +8,6 @@ using Robust.Shared.GameObjects; using Robust.Shared.Localization; using Robust.Shared.Timing; using Robust.Shared.ViewVariables; -using System; -using System.Collections.Generic; -using System.Text; namespace Content.Client.GameObjects.Components.Atmos { diff --git a/Content.Client/GameObjects/Components/Atmos/GasAnalyzerMenu.cs b/Content.Client/GameObjects/Components/Atmos/GasAnalyzerMenu.cs index 1e06c0a9fe..b7f7bbb39e 100644 --- a/Content.Client/GameObjects/Components/Atmos/GasAnalyzerMenu.cs +++ b/Content.Client/GameObjects/Components/Atmos/GasAnalyzerMenu.cs @@ -1,19 +1,11 @@ -using System; -using Content.Client.Animations; -using Content.Client.GameObjects.EntitySystems; -using Content.Client.UserInterface.Stylesheets; +using Content.Client.UserInterface.Stylesheets; using Content.Client.Utility; -using Content.Shared.GameObjects.Components; using Content.Shared.Utility; -using Robust.Client.Animations; -using Robust.Client.Graphics; using Robust.Client.Graphics.Drawing; using Robust.Client.Interfaces.ResourceManagement; using Robust.Client.UserInterface; using Robust.Client.UserInterface.Controls; using Robust.Client.UserInterface.CustomControls; -using Robust.Shared.Animations; -using Robust.Shared.Input; using Robust.Shared.IoC; using Robust.Shared.Localization; using Robust.Shared.Maths; diff --git a/Content.Client/GameObjects/Components/Cargo/CargoOrderDatabaseComponent.cs b/Content.Client/GameObjects/Components/Cargo/CargoOrderDatabaseComponent.cs index 18b729b8ca..c29e62464b 100644 --- a/Content.Client/GameObjects/Components/Cargo/CargoOrderDatabaseComponent.cs +++ b/Content.Client/GameObjects/Components/Cargo/CargoOrderDatabaseComponent.cs @@ -1,8 +1,8 @@ -using Content.Shared.GameObjects.Components.Cargo; +using System; +using System.Collections.Generic; +using Content.Shared.GameObjects.Components.Cargo; using Content.Shared.Prototypes.Cargo; using Robust.Shared.GameObjects; -using System; -using System.Collections.Generic; namespace Content.Client.GameObjects.Components.Cargo { diff --git a/Content.Client/GameObjects/Components/Cargo/GalacticMarketComponent.cs b/Content.Client/GameObjects/Components/Cargo/GalacticMarketComponent.cs index bb29dfd1d4..1311900514 100644 --- a/Content.Client/GameObjects/Components/Cargo/GalacticMarketComponent.cs +++ b/Content.Client/GameObjects/Components/Cargo/GalacticMarketComponent.cs @@ -1,9 +1,9 @@ -using Content.Shared.GameObjects.Components.Cargo; +using System; +using Content.Shared.GameObjects.Components.Cargo; using Content.Shared.Prototypes.Cargo; using Robust.Shared.GameObjects; using Robust.Shared.IoC; using Robust.Shared.Prototypes; -using System; namespace Content.Client.GameObjects.Components.Cargo { diff --git a/Content.Client/GameObjects/Components/Chemistry/ChemMaster/ChemMasterBoundUserInterface.cs b/Content.Client/GameObjects/Components/Chemistry/ChemMaster/ChemMasterBoundUserInterface.cs index 27ab3de256..1af6a39bb5 100644 --- a/Content.Client/GameObjects/Components/Chemistry/ChemMaster/ChemMasterBoundUserInterface.cs +++ b/Content.Client/GameObjects/Components/Chemistry/ChemMaster/ChemMasterBoundUserInterface.cs @@ -1,13 +1,12 @@ #nullable enable -using Content.Client.GameObjects.Components.Chemistry.ChemMaster; -using Content.Shared.GameObjects.Components.Chemistry; +using Content.Shared.GameObjects.Components.Chemistry.ReagentDispenser; using JetBrains.Annotations; using Robust.Client.GameObjects.Components.UserInterface; using Robust.Shared.GameObjects.Components.UserInterface; using Robust.Shared.Localization; -using static Content.Shared.GameObjects.Components.Chemistry.SharedChemMasterComponent; +using static Content.Shared.GameObjects.Components.Chemistry.ChemMaster.SharedChemMasterComponent; -namespace Content.Client.GameObjects.Components.Chemistry +namespace Content.Client.GameObjects.Components.Chemistry.ChemMaster { ///

/// Initializes a and updates it when new server messages are received. diff --git a/Content.Client/GameObjects/Components/Chemistry/ChemMaster/ChemMasterWindow.cs b/Content.Client/GameObjects/Components/Chemistry/ChemMaster/ChemMasterWindow.cs index 3a2dece8e9..08ec838c88 100644 --- a/Content.Client/GameObjects/Components/Chemistry/ChemMaster/ChemMasterWindow.cs +++ b/Content.Client/GameObjects/Components/Chemistry/ChemMaster/ChemMasterWindow.cs @@ -1,10 +1,8 @@ using System; -using System.Collections.Generic; using System.Linq; -using Content.Client.UserInterface; using Content.Client.UserInterface.Stylesheets; using Content.Shared.Chemistry; -using Content.Shared.GameObjects.Components.Chemistry; +using Content.Shared.GameObjects.Components.Chemistry.ChemMaster; using Robust.Client.Graphics.Drawing; using Robust.Client.UserInterface; using Robust.Client.UserInterface.Controls; @@ -12,10 +10,9 @@ using Robust.Client.UserInterface.CustomControls; using Robust.Shared.GameObjects.Components.UserInterface; using Robust.Shared.IoC; using Robust.Shared.Localization; -using Robust.Shared.Log; using Robust.Shared.Maths; using Robust.Shared.Prototypes; -using static Content.Shared.GameObjects.Components.Chemistry.SharedChemMasterComponent; +using static Content.Shared.GameObjects.Components.Chemistry.ChemMaster.SharedChemMasterComponent; namespace Content.Client.GameObjects.Components.Chemistry.ChemMaster { diff --git a/Content.Client/GameObjects/Components/Chemistry/InjectorComponent.cs b/Content.Client/GameObjects/Components/Chemistry/InjectorComponent.cs index 6556989340..fe1e71bbe5 100644 --- a/Content.Client/GameObjects/Components/Chemistry/InjectorComponent.cs +++ b/Content.Client/GameObjects/Components/Chemistry/InjectorComponent.cs @@ -1,14 +1,13 @@ -using Content.Client.UserInterface; -using Content.Client.UserInterface.Stylesheets; +using Content.Client.UserInterface.Stylesheets; using Content.Client.Utility; -using Robust.Shared.Timing; +using Content.Shared.Chemistry; using Content.Shared.GameObjects.Components.Chemistry; using Robust.Client.UserInterface; using Robust.Client.UserInterface.Controls; using Robust.Shared.GameObjects; using Robust.Shared.Localization; +using Robust.Shared.Timing; using Robust.Shared.ViewVariables; -using Content.Shared.Chemistry; namespace Content.Client.GameObjects.Components.Chemistry { diff --git a/Content.Client/GameObjects/Components/Chemistry/ReagentDispenser/ReagentDispenserBoundUserInterface.cs b/Content.Client/GameObjects/Components/Chemistry/ReagentDispenser/ReagentDispenserBoundUserInterface.cs index 1aabef19dc..ccf3a0f3b9 100644 --- a/Content.Client/GameObjects/Components/Chemistry/ReagentDispenser/ReagentDispenserBoundUserInterface.cs +++ b/Content.Client/GameObjects/Components/Chemistry/ReagentDispenser/ReagentDispenserBoundUserInterface.cs @@ -1,15 +1,15 @@ using System.Collections.Generic; using System.Linq; -using Content.Shared.GameObjects.Components.Chemistry; +using Content.Shared.GameObjects.Components.Chemistry.ReagentDispenser; using JetBrains.Annotations; using Robust.Client.GameObjects.Components.UserInterface; using Robust.Client.UserInterface.Controls; using Robust.Shared.GameObjects.Components.UserInterface; using Robust.Shared.IoC; using Robust.Shared.Localization; -using static Content.Shared.GameObjects.Components.Chemistry.SharedReagentDispenserComponent; +using static Content.Shared.GameObjects.Components.Chemistry.ReagentDispenser.SharedReagentDispenserComponent; -namespace Content.Client.GameObjects.Components.Chemistry +namespace Content.Client.GameObjects.Components.Chemistry.ReagentDispenser { /// /// Initializes a and updates it when new server messages are received. diff --git a/Content.Client/GameObjects/Components/Chemistry/ReagentDispenser/ReagentDispenserWindow.cs b/Content.Client/GameObjects/Components/Chemistry/ReagentDispenser/ReagentDispenserWindow.cs index 66b5fd693f..0389b9aa35 100644 --- a/Content.Client/GameObjects/Components/Chemistry/ReagentDispenser/ReagentDispenserWindow.cs +++ b/Content.Client/GameObjects/Components/Chemistry/ReagentDispenser/ReagentDispenserWindow.cs @@ -1,8 +1,7 @@ using System.Collections.Generic; -using Content.Client.UserInterface; using Content.Client.UserInterface.Stylesheets; using Content.Shared.Chemistry; -using Content.Shared.GameObjects.Components.Chemistry; +using Content.Shared.GameObjects.Components.Chemistry.ReagentDispenser; using Robust.Client.Graphics.Drawing; using Robust.Client.UserInterface; using Robust.Client.UserInterface.Controls; @@ -12,9 +11,9 @@ using Robust.Shared.IoC; using Robust.Shared.Localization; using Robust.Shared.Maths; using Robust.Shared.Prototypes; -using static Content.Shared.GameObjects.Components.Chemistry.SharedReagentDispenserComponent; +using static Content.Shared.GameObjects.Components.Chemistry.ReagentDispenser.SharedReagentDispenserComponent; -namespace Content.Client.GameObjects.Components.Chemistry +namespace Content.Client.GameObjects.Components.Chemistry.ReagentDispenser { /// /// Client-side UI used to control a diff --git a/Content.Client/GameObjects/Components/DamageableComponent.cs b/Content.Client/GameObjects/Components/DamageableComponent.cs index e19de318d3..2e42501894 100644 --- a/Content.Client/GameObjects/Components/DamageableComponent.cs +++ b/Content.Client/GameObjects/Components/DamageableComponent.cs @@ -1,8 +1,8 @@ using System.Collections.Generic; -using Content.Shared.GameObjects; +using Content.Shared.GameObjects.Components.Damage; using Robust.Shared.GameObjects; -namespace Content.Client.GameObjects +namespace Content.Client.GameObjects.Components { /// /// Fuck I really hate doing this diff --git a/Content.Client/GameObjects/Components/Disposal/DisposalUnitBoundUserInterface.cs b/Content.Client/GameObjects/Components/Disposal/DisposalUnitBoundUserInterface.cs index bb46144185..b2e9ab7fb9 100644 --- a/Content.Client/GameObjects/Components/Disposal/DisposalUnitBoundUserInterface.cs +++ b/Content.Client/GameObjects/Components/Disposal/DisposalUnitBoundUserInterface.cs @@ -2,7 +2,6 @@ using JetBrains.Annotations; using Robust.Client.GameObjects.Components.UserInterface; using Robust.Shared.GameObjects.Components.UserInterface; -using Robust.Shared.Localization; using static Content.Shared.GameObjects.Components.Disposal.SharedDisposalUnitComponent; namespace Content.Client.GameObjects.Components.Disposal diff --git a/Content.Client/GameObjects/Components/Disposal/DisposalUnitWindow.cs b/Content.Client/GameObjects/Components/Disposal/DisposalUnitWindow.cs index 2aa013469d..62e6bd1a24 100644 --- a/Content.Client/GameObjects/Components/Disposal/DisposalUnitWindow.cs +++ b/Content.Client/GameObjects/Components/Disposal/DisposalUnitWindow.cs @@ -1,5 +1,4 @@ -using System.Runtime.CompilerServices; -using Content.Shared.GameObjects.Components.Disposal; +using Content.Shared.GameObjects.Components.Disposal; using Robust.Client.Graphics.Drawing; using Robust.Client.UserInterface; using Robust.Client.UserInterface.Controls; diff --git a/Content.Client/GameObjects/Components/Gravity/GravityGeneratorBoundUserInterface.cs b/Content.Client/GameObjects/Components/Gravity/GravityGeneratorBoundUserInterface.cs index 450e73c288..0ed0ad0a68 100644 --- a/Content.Client/GameObjects/Components/Gravity/GravityGeneratorBoundUserInterface.cs +++ b/Content.Client/GameObjects/Components/Gravity/GravityGeneratorBoundUserInterface.cs @@ -1,4 +1,3 @@ -using System; using Content.Shared.GameObjects.Components.Gravity; using Robust.Client.GameObjects.Components.UserInterface; using Robust.Client.UserInterface.Controls; diff --git a/Content.Client/GameObjects/Components/HUD/Inventory/ClientInventoryComponent.cs b/Content.Client/GameObjects/Components/HUD/Inventory/ClientInventoryComponent.cs index 041f763cac..26b1086f0a 100644 --- a/Content.Client/GameObjects/Components/HUD/Inventory/ClientInventoryComponent.cs +++ b/Content.Client/GameObjects/Components/HUD/Inventory/ClientInventoryComponent.cs @@ -1,7 +1,7 @@ using System.Collections.Generic; using System.Linq; using Content.Client.GameObjects.Components.Clothing; -using Content.Shared.GameObjects; +using Content.Shared.GameObjects.Components.Inventory; using Content.Shared.Preferences.Appearance; using Robust.Client.GameObjects; using Robust.Client.Interfaces.GameObjects.Components; @@ -10,9 +10,9 @@ using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.IoC; using Robust.Shared.ViewVariables; using static Content.Shared.GameObjects.Components.Inventory.EquipmentSlotDefines; -using static Content.Shared.GameObjects.SharedInventoryComponent.ClientInventoryMessage; +using static Content.Shared.GameObjects.Components.Inventory.SharedInventoryComponent.ClientInventoryMessage; -namespace Content.Client.GameObjects +namespace Content.Client.GameObjects.Components.HUD.Inventory { /// /// A character UI which shows items the user has equipped within his inventory diff --git a/Content.Client/GameObjects/Components/HUD/Inventory/HumanInventoryInterfaceController.cs b/Content.Client/GameObjects/Components/HUD/Inventory/HumanInventoryInterfaceController.cs index 01d94b822b..d08d3e1211 100644 --- a/Content.Client/GameObjects/Components/HUD/Inventory/HumanInventoryInterfaceController.cs +++ b/Content.Client/GameObjects/Components/HUD/Inventory/HumanInventoryInterfaceController.cs @@ -1,4 +1,6 @@ -using Content.Client.Utility; +using System.Collections.Generic; +using Content.Client.UserInterface; +using Content.Client.Utility; using JetBrains.Annotations; using Robust.Client.Interfaces.ResourceManagement; using Robust.Client.UserInterface; @@ -9,10 +11,8 @@ using Robust.Shared.IoC; using Robust.Shared.Localization; using Robust.Shared.Maths; using static Content.Shared.GameObjects.Components.Inventory.EquipmentSlotDefines; -using Content.Client.UserInterface; -using System.Collections.Generic; -namespace Content.Client.GameObjects +namespace Content.Client.GameObjects.Components.HUD.Inventory { // Dynamically instantiated by ClientInventoryComponent. [UsedImplicitly] diff --git a/Content.Client/GameObjects/Components/HUD/Inventory/InventoryInterfaceController.cs b/Content.Client/GameObjects/Components/HUD/Inventory/InventoryInterfaceController.cs index 091ca4d097..12cf3375c2 100644 --- a/Content.Client/GameObjects/Components/HUD/Inventory/InventoryInterfaceController.cs +++ b/Content.Client/GameObjects/Components/HUD/Inventory/InventoryInterfaceController.cs @@ -8,7 +8,7 @@ using Robust.Shared.Input; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.IoC; -namespace Content.Client.GameObjects +namespace Content.Client.GameObjects.Components.HUD.Inventory { public abstract class InventoryInterfaceController : IDisposable { diff --git a/Content.Client/GameObjects/Components/IconSmoothing/IconSmoothComponent.cs b/Content.Client/GameObjects/Components/IconSmoothing/IconSmoothComponent.cs index 54d2a99397..7515d40d51 100644 --- a/Content.Client/GameObjects/Components/IconSmoothing/IconSmoothComponent.cs +++ b/Content.Client/GameObjects/Components/IconSmoothing/IconSmoothComponent.cs @@ -1,6 +1,5 @@ using System; using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; using Content.Client.GameObjects.EntitySystems; using JetBrains.Annotations; using Robust.Client.Interfaces.GameObjects.Components; diff --git a/Content.Client/GameObjects/Components/Instruments/InstrumentComponent.cs b/Content.Client/GameObjects/Components/Instruments/InstrumentComponent.cs index 69d364fd5f..eeae34cbde 100644 --- a/Content.Client/GameObjects/Components/Instruments/InstrumentComponent.cs +++ b/Content.Client/GameObjects/Components/Instruments/InstrumentComponent.cs @@ -4,16 +4,16 @@ using System.Collections.Generic; using System.Linq; using Content.Shared.GameObjects.Components.Instruments; using Content.Shared.Physics; -using Robust.Shared.GameObjects; using Robust.Client.Audio.Midi; +using Robust.Shared.Audio.Midi; +using Robust.Shared.GameObjects; using Robust.Shared.Interfaces.Network; using Robust.Shared.Interfaces.Timing; using Robust.Shared.IoC; using Robust.Shared.Players; using Robust.Shared.Serialization; +using Robust.Shared.Timers; using Robust.Shared.ViewVariables; -using MidiEvent = Robust.Shared.Audio.Midi.MidiEvent; -using Timer = Robust.Shared.Timers.Timer; namespace Content.Client.GameObjects.Components.Instruments { diff --git a/Content.Client/GameObjects/Components/Interactable/MultiToolComponent.cs b/Content.Client/GameObjects/Components/Interactable/MultiToolComponent.cs index 5eb67e8113..70de623621 100644 --- a/Content.Client/GameObjects/Components/Interactable/MultiToolComponent.cs +++ b/Content.Client/GameObjects/Components/Interactable/MultiToolComponent.cs @@ -1,12 +1,10 @@ -using System; -using Content.Client.UserInterface.Stylesheets; +using Content.Client.UserInterface.Stylesheets; using Content.Client.Utility; using Content.Shared.GameObjects; using Content.Shared.GameObjects.Components.Interactable; using Robust.Client.UserInterface; using Robust.Client.UserInterface.Controls; using Robust.Shared.GameObjects; -using Robust.Shared.Localization; using Robust.Shared.Serialization; using Robust.Shared.Timing; using Robust.Shared.ViewVariables; diff --git a/Content.Client/GameObjects/Components/Items/ItemStatusComponent.cs b/Content.Client/GameObjects/Components/Items/ItemStatusComponent.cs index 7d4562ce02..0a21bd8e43 100644 --- a/Content.Client/GameObjects/Components/Items/ItemStatusComponent.cs +++ b/Content.Client/GameObjects/Components/Items/ItemStatusComponent.cs @@ -1,6 +1,6 @@ using Robust.Shared.GameObjects; -namespace Content.Client.GameObjects +namespace Content.Client.GameObjects.Components.Items { [RegisterComponent] public class ItemStatusComponent : Component diff --git a/Content.Client/GameObjects/Components/Kitchen/MicrowaveBoundUserInterface.cs b/Content.Client/GameObjects/Components/Kitchen/MicrowaveBoundUserInterface.cs index 4fb4c8ce9f..174b21e5b6 100644 --- a/Content.Client/GameObjects/Components/Kitchen/MicrowaveBoundUserInterface.cs +++ b/Content.Client/GameObjects/Components/Kitchen/MicrowaveBoundUserInterface.cs @@ -1,21 +1,20 @@ using System; -using Robust.Client.GameObjects.Components.UserInterface; -using Content.Shared.Kitchen; -using Robust.Shared.GameObjects.Components.UserInterface; -using Robust.Shared.IoC; -using Robust.Shared.Prototypes; -using Content.Shared.Chemistry; -using Robust.Shared.GameObjects; using System.Collections.Generic; -using Robust.Shared.Interfaces.GameObjects; +using Content.Shared.Chemistry; +using Content.Shared.Kitchen; using Robust.Client.GameObjects; +using Robust.Client.GameObjects.Components.UserInterface; using Robust.Client.Graphics.Drawing; using Robust.Client.UserInterface; using Robust.Client.UserInterface.Controls; using Robust.Client.UserInterface.CustomControls; +using Robust.Shared.GameObjects; +using Robust.Shared.GameObjects.Components.UserInterface; +using Robust.Shared.Interfaces.GameObjects; +using Robust.Shared.IoC; using Robust.Shared.Localization; using Robust.Shared.Maths; - +using Robust.Shared.Prototypes; namespace Content.Client.GameObjects.Components.Kitchen { diff --git a/Content.Client/GameObjects/Components/Kitchen/MicrowaveVisualizer.cs b/Content.Client/GameObjects/Components/Kitchen/MicrowaveVisualizer.cs index 63ecab02cc..ab90668e24 100644 --- a/Content.Client/GameObjects/Components/Kitchen/MicrowaveVisualizer.cs +++ b/Content.Client/GameObjects/Components/Kitchen/MicrowaveVisualizer.cs @@ -7,7 +7,6 @@ using Robust.Client.Interfaces.GameObjects.Components; using Robust.Shared.Audio; using Robust.Shared.Log; - namespace Content.Client.GameObjects.Components.Kitchen { public sealed class MicrowaveVisualizer : AppearanceVisualizer diff --git a/Content.Client/GameObjects/Components/MagicMirrorBoundUserInterface.cs b/Content.Client/GameObjects/Components/MagicMirrorBoundUserInterface.cs index f44166c11f..aea3434e61 100644 --- a/Content.Client/GameObjects/Components/MagicMirrorBoundUserInterface.cs +++ b/Content.Client/GameObjects/Components/MagicMirrorBoundUserInterface.cs @@ -1,6 +1,5 @@ using System; using System.Linq; -using Content.Client.UserInterface; using Content.Client.UserInterface.Stylesheets; using Content.Shared.Preferences.Appearance; using JetBrains.Annotations; diff --git a/Content.Client/GameObjects/Components/Mobs/CameraRecoilComponent.cs b/Content.Client/GameObjects/Components/Mobs/CameraRecoilComponent.cs index 9486ba6e83..68288ff66a 100644 --- a/Content.Client/GameObjects/Components/Mobs/CameraRecoilComponent.cs +++ b/Content.Client/GameObjects/Components/Mobs/CameraRecoilComponent.cs @@ -2,7 +2,6 @@ using Content.Shared.GameObjects.Components.Mobs; using Robust.Client.GameObjects; using Robust.Shared.GameObjects; -using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Interfaces.Network; using Robust.Shared.Log; using Robust.Shared.Maths; diff --git a/Content.Client/GameObjects/Components/Mobs/ClientOverlayEffectsComponent.cs b/Content.Client/GameObjects/Components/Mobs/ClientOverlayEffectsComponent.cs index 46d5eb5872..c294fa68cd 100644 --- a/Content.Client/GameObjects/Components/Mobs/ClientOverlayEffectsComponent.cs +++ b/Content.Client/GameObjects/Components/Mobs/ClientOverlayEffectsComponent.cs @@ -1,13 +1,11 @@ using System; using System.Collections.Generic; using System.Linq; -using System.Reflection; using Content.Shared.GameObjects.Components.Mobs; using Content.Shared.Interfaces; using Robust.Client.GameObjects; using Robust.Client.Graphics.Overlays; using Robust.Client.Interfaces.Graphics.Overlays; -using Robust.Client.Player; using Robust.Shared.GameObjects; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Interfaces.Network; @@ -15,7 +13,6 @@ using Robust.Shared.Interfaces.Reflection; using Robust.Shared.IoC; using Robust.Shared.Log; using Robust.Shared.Players; -using Robust.Shared.Utility; using Robust.Shared.ViewVariables; namespace Content.Client.GameObjects.Components.Mobs diff --git a/Content.Client/GameObjects/Components/Mobs/CombatModeComponent.cs b/Content.Client/GameObjects/Components/Mobs/CombatModeComponent.cs index 4e08edbd12..bcedfa8487 100644 --- a/Content.Client/GameObjects/Components/Mobs/CombatModeComponent.cs +++ b/Content.Client/GameObjects/Components/Mobs/CombatModeComponent.cs @@ -1,13 +1,10 @@ -using System; -using Content.Client.UserInterface; +using Content.Client.UserInterface; using Content.Shared.GameObjects.Components.Mobs; using Robust.Client.GameObjects; using Robust.Client.Player; using Robust.Shared.GameObjects; using Robust.Shared.Interfaces.GameObjects; -using Robust.Shared.Interfaces.Network; using Robust.Shared.IoC; -using Robust.Shared.Players; namespace Content.Client.GameObjects.Components.Mobs { diff --git a/Content.Client/GameObjects/Components/Mobs/DamageStateVisualizer.cs b/Content.Client/GameObjects/Components/Mobs/DamageStateVisualizer.cs index 556e066e1f..83a3e4f70c 100644 --- a/Content.Client/GameObjects/Components/Mobs/DamageStateVisualizer.cs +++ b/Content.Client/GameObjects/Components/Mobs/DamageStateVisualizer.cs @@ -1,12 +1,11 @@ using System.Collections.Generic; +using Content.Shared.GameObjects; using Content.Shared.GameObjects.Components.Mobs; using JetBrains.Annotations; using Robust.Client.GameObjects; using Robust.Client.Interfaces.GameObjects.Components; -using Robust.Shared.GameObjects; using Robust.Shared.Utility; using YamlDotNet.RepresentationModel; -using DrawDepth = Content.Shared.GameObjects.DrawDepth; namespace Content.Client.GameObjects.Components.Mobs { diff --git a/Content.Client/GameObjects/Components/Observer/GhostComponent.cs b/Content.Client/GameObjects/Components/Observer/GhostComponent.cs index 611476f9be..e0f2407a89 100644 --- a/Content.Client/GameObjects/Components/Observer/GhostComponent.cs +++ b/Content.Client/GameObjects/Components/Observer/GhostComponent.cs @@ -4,7 +4,6 @@ using Robust.Client.GameObjects; using Robust.Client.Player; using Robust.Shared.GameObjects; using Robust.Shared.Interfaces.GameObjects; -using Robust.Shared.Interfaces.Network; using Robust.Shared.IoC; using Robust.Shared.ViewVariables; diff --git a/Content.Client/GameObjects/Components/Paper/PaperBoundUserInterface.cs b/Content.Client/GameObjects/Components/Paper/PaperBoundUserInterface.cs index b064d7519c..87a609f89c 100644 --- a/Content.Client/GameObjects/Components/Paper/PaperBoundUserInterface.cs +++ b/Content.Client/GameObjects/Components/Paper/PaperBoundUserInterface.cs @@ -3,7 +3,7 @@ using Robust.Client.GameObjects.Components.UserInterface; using Robust.Client.UserInterface.Controls; using Robust.Shared.GameObjects.Components.UserInterface; -namespace Content.Client.GameObjects.Components +namespace Content.Client.GameObjects.Components.Paper { public class PaperBoundUserInterface : BoundUserInterface { diff --git a/Content.Client/GameObjects/Components/Paper/PaperWindow.cs b/Content.Client/GameObjects/Components/Paper/PaperWindow.cs index 2762625832..d2ac5dde08 100644 --- a/Content.Client/GameObjects/Components/Paper/PaperWindow.cs +++ b/Content.Client/GameObjects/Components/Paper/PaperWindow.cs @@ -4,7 +4,7 @@ using Robust.Client.UserInterface.CustomControls; using Robust.Shared.Maths; using Robust.Shared.Utility; -namespace Content.Client.GameObjects.Components +namespace Content.Client.GameObjects.Components.Paper { public class PaperWindow : SS14Window { diff --git a/Content.Client/GameObjects/Components/Pointing/RoguePointingArrowVisualizer.cs b/Content.Client/GameObjects/Components/Pointing/RoguePointingArrowVisualizer.cs index 97de9d0b9f..325147b76a 100644 --- a/Content.Client/GameObjects/Components/Pointing/RoguePointingArrowVisualizer.cs +++ b/Content.Client/GameObjects/Components/Pointing/RoguePointingArrowVisualizer.cs @@ -1,5 +1,4 @@ using System; -using Content.Shared.GameObjects.Components.Mobs; using Content.Shared.GameObjects.Components.Pointing; using JetBrains.Annotations; using Robust.Client.Animations; diff --git a/Content.Client/GameObjects/Components/Power/ApcBoundUserInterface.cs b/Content.Client/GameObjects/Components/Power/ApcBoundUserInterface.cs index d240cc0c6c..616997820e 100644 --- a/Content.Client/GameObjects/Components/Power/ApcBoundUserInterface.cs +++ b/Content.Client/GameObjects/Components/Power/ApcBoundUserInterface.cs @@ -1,5 +1,4 @@ using System; -using Content.Client.UserInterface; using Content.Client.UserInterface.Stylesheets; using Content.Shared.GameObjects.Components.Power; using Robust.Client.GameObjects.Components.UserInterface; diff --git a/Content.Client/GameObjects/Components/Power/SolarControlConsoleBoundUserInterface.cs b/Content.Client/GameObjects/Components/Power/SolarControlConsoleBoundUserInterface.cs index 88ce121443..17ce456aff 100644 --- a/Content.Client/GameObjects/Components/Power/SolarControlConsoleBoundUserInterface.cs +++ b/Content.Client/GameObjects/Components/Power/SolarControlConsoleBoundUserInterface.cs @@ -1,6 +1,4 @@ using System; -using Content.Client.UserInterface; -using Content.Client.UserInterface.Stylesheets; using Content.Shared.GameObjects.Components.Power; using Robust.Client.GameObjects.Components.UserInterface; using Robust.Client.Graphics.Drawing; diff --git a/Content.Client/GameObjects/Components/RadiatingLightComponent.cs b/Content.Client/GameObjects/Components/RadiatingLightComponent.cs index 76b57f2fb4..9cfa272136 100644 --- a/Content.Client/GameObjects/Components/RadiatingLightComponent.cs +++ b/Content.Client/GameObjects/Components/RadiatingLightComponent.cs @@ -4,7 +4,6 @@ using Robust.Client.GameObjects; using Robust.Client.GameObjects.Components.Animations; using Robust.Shared.Animations; using Robust.Shared.GameObjects; -using Robust.Shared.Maths; namespace Content.Client.GameObjects.Components { diff --git a/Content.Client/GameObjects/Components/Sound/LoopingSoundComponent.cs b/Content.Client/GameObjects/Components/Sound/LoopingSoundComponent.cs index 6c6473a3f1..f521c0c3a7 100644 --- a/Content.Client/GameObjects/Components/Sound/LoopingSoundComponent.cs +++ b/Content.Client/GameObjects/Components/Sound/LoopingSoundComponent.cs @@ -4,14 +4,12 @@ using Content.Shared.Physics; using Robust.Client.GameObjects.EntitySystems; using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Systems; -using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Interfaces.Network; using Robust.Shared.Interfaces.Random; using Robust.Shared.IoC; using Robust.Shared.Players; using Robust.Shared.Serialization; using Robust.Shared.Timers; -using Robust.Shared.Utility; namespace Content.Client.GameObjects.Components.Sound { diff --git a/Content.Client/GameObjects/Components/Storage/ClientStorageComponent.cs b/Content.Client/GameObjects/Components/Storage/ClientStorageComponent.cs index affff8473d..4c5d5dce36 100644 --- a/Content.Client/GameObjects/Components/Storage/ClientStorageComponent.cs +++ b/Content.Client/GameObjects/Components/Storage/ClientStorageComponent.cs @@ -1,14 +1,14 @@ using System; using System.Collections.Generic; using Content.Client.GameObjects.Components.Items; -using Content.Shared.GameObjects.Components.Storage; using Content.Client.Interfaces.GameObjects.Components.Interaction; +using Content.Shared.GameObjects.Components.Storage; using Robust.Client.Graphics.Drawing; using Robust.Client.Interfaces.GameObjects.Components; +using Robust.Client.Player; using Robust.Client.UserInterface; using Robust.Client.UserInterface.Controls; using Robust.Client.UserInterface.CustomControls; -using Robust.Client.Player; using Robust.Shared.GameObjects; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Interfaces.Network; diff --git a/Content.Client/GameObjects/Components/Trigger/TimerTriggerVisualizer.cs b/Content.Client/GameObjects/Components/Trigger/TimerTriggerVisualizer.cs index 76bce4a420..b31af5f4b7 100644 --- a/Content.Client/GameObjects/Components/Trigger/TimerTriggerVisualizer.cs +++ b/Content.Client/GameObjects/Components/Trigger/TimerTriggerVisualizer.cs @@ -1,5 +1,5 @@ using System; -using Content.Shared.GameObjects.Components.Triggers; +using Content.Shared.GameObjects.Components.Trigger; using Robust.Client.Animations; using Robust.Client.GameObjects; using Robust.Client.GameObjects.Components.Animations; @@ -8,7 +8,7 @@ using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Utility; using YamlDotNet.RepresentationModel; -namespace Content.Client.GameObjects.Components.Doors +namespace Content.Client.GameObjects.Components.Trigger { public class TimerTriggerVisualizer : AppearanceVisualizer { diff --git a/Content.Client/GameObjects/Components/Wires/WiresMenu.cs b/Content.Client/GameObjects/Components/Wires/WiresMenu.cs index 53e1a32064..a3fcda4861 100644 --- a/Content.Client/GameObjects/Components/Wires/WiresMenu.cs +++ b/Content.Client/GameObjects/Components/Wires/WiresMenu.cs @@ -5,7 +5,6 @@ using Content.Client.UserInterface.Stylesheets; using Content.Client.Utility; using Content.Shared.GameObjects.Components; using Robust.Client.Animations; -using Robust.Client.Graphics; using Robust.Client.Graphics.Drawing; using Robust.Client.Interfaces.ResourceManagement; using Robust.Client.UserInterface; diff --git a/Content.Client/GameObjects/EntitySystems/CharacterInterfaceSystem.cs b/Content.Client/GameObjects/EntitySystems/CharacterInterfaceSystem.cs index 9b66217612..a46f038e67 100644 --- a/Content.Client/GameObjects/EntitySystems/CharacterInterfaceSystem.cs +++ b/Content.Client/GameObjects/EntitySystems/CharacterInterfaceSystem.cs @@ -1,11 +1,9 @@ using Content.Client.GameObjects.Components.Actor; using Content.Client.UserInterface; using Content.Shared.Input; -using Robust.Client.GameObjects.EntitySystems; using Robust.Client.Player; using Robust.Client.UserInterface.CustomControls; using Robust.Shared.GameObjects.Systems; -using Robust.Shared.Input; using Robust.Shared.Input.Binding; using Robust.Shared.IoC; diff --git a/Content.Client/GameObjects/EntitySystems/ClientInventorySystem.cs b/Content.Client/GameObjects/EntitySystems/ClientInventorySystem.cs index ccfb3ac7d0..80cd1fbb0f 100644 --- a/Content.Client/GameObjects/EntitySystems/ClientInventorySystem.cs +++ b/Content.Client/GameObjects/EntitySystems/ClientInventorySystem.cs @@ -1,10 +1,9 @@ +using Content.Client.GameObjects.Components.HUD.Inventory; using Content.Client.UserInterface; using Content.Shared.Input; -using Robust.Client.GameObjects.EntitySystems; using Robust.Client.Player; using Robust.Client.UserInterface.CustomControls; using Robust.Shared.GameObjects.Systems; -using Robust.Shared.Input; using Robust.Shared.Input.Binding; using Robust.Shared.IoC; diff --git a/Content.Client/GameObjects/EntitySystems/CombatModeSystem.cs b/Content.Client/GameObjects/EntitySystems/CombatModeSystem.cs index 1ea36b6ae0..9daa25095b 100644 --- a/Content.Client/GameObjects/EntitySystems/CombatModeSystem.cs +++ b/Content.Client/GameObjects/EntitySystems/CombatModeSystem.cs @@ -1,25 +1,16 @@ using Content.Client.GameObjects.Components.Mobs; using Content.Client.UserInterface; -using Content.Client.Utility; using Content.Shared.GameObjects.Components.Mobs; using Content.Shared.GameObjects.EntitySystemMessages; using Content.Shared.GameObjects.EntitySystems; using Content.Shared.Input; using JetBrains.Annotations; using Robust.Client.GameObjects; -using Robust.Client.GameObjects.EntitySystems; -using Robust.Client.Graphics.Drawing; -using Robust.Client.Graphics.Overlays; -using Robust.Client.Interfaces.Graphics.Overlays; -using Robust.Client.Interfaces.Input; using Robust.Client.Player; -using Robust.Shared.Input; using Robust.Shared.Input.Binding; using Robust.Shared.Interfaces.Timing; using Robust.Shared.IoC; -using Robust.Shared.Maths; using Robust.Shared.Players; -using static Content.Client.StaticIoC; namespace Content.Client.GameObjects.EntitySystems { diff --git a/Content.Client/GameObjects/EntitySystems/ConstructionSystem.cs b/Content.Client/GameObjects/EntitySystems/ConstructionSystem.cs index 700393b9c5..09a4beea42 100644 --- a/Content.Client/GameObjects/EntitySystems/ConstructionSystem.cs +++ b/Content.Client/GameObjects/EntitySystems/ConstructionSystem.cs @@ -3,6 +3,7 @@ using Content.Client.Construction; using Content.Client.GameObjects.Components.Construction; using Content.Client.UserInterface; using Content.Shared.Construction; +using Content.Shared.GameObjects.EntitySystems; using Content.Shared.Input; using JetBrains.Annotations; using Robust.Client.GameObjects; @@ -21,7 +22,7 @@ namespace Content.Client.GameObjects.EntitySystems /// The client-side implementation of the construction system, which is used for constructing entities in game. /// [UsedImplicitly] - public class ConstructionSystem : Shared.GameObjects.EntitySystems.SharedConstructionSystem + public class ConstructionSystem : SharedConstructionSystem { #pragma warning disable 649 [Dependency] private readonly IGameHud _gameHud; diff --git a/Content.Client/GameObjects/EntitySystems/DragDropSystem.cs b/Content.Client/GameObjects/EntitySystems/DragDropSystem.cs index fe8eae8959..66a5f1592c 100644 --- a/Content.Client/GameObjects/EntitySystems/DragDropSystem.cs +++ b/Content.Client/GameObjects/EntitySystems/DragDropSystem.cs @@ -95,8 +95,8 @@ namespace Content.Client.GameObjects.EntitySystems _dropTargetInRangeShader = _prototypeManager.Index(ShaderDropTargetInRange).Instance(); _dropTargetOutOfRangeShader = _prototypeManager.Index(ShaderDropTargetOutOfRange).Instance(); - _interactionSystem = EntitySystem.Get(); - _inputSystem = EntitySystem.Get(); + _interactionSystem = Get(); + _inputSystem = Get(); // needs to fire on mouseup and mousedown so we can detect a drag / drop CommandBinds.Builder .Bind(EngineKeyFunctions.Use, new PointerInputCmdHandler(OnUse, false)) diff --git a/Content.Client/GameObjects/EntitySystems/ExamineSystem.cs b/Content.Client/GameObjects/EntitySystems/ExamineSystem.cs index 79d297bd34..86f0f9e52d 100644 --- a/Content.Client/GameObjects/EntitySystems/ExamineSystem.cs +++ b/Content.Client/GameObjects/EntitySystems/ExamineSystem.cs @@ -5,7 +5,6 @@ using Content.Shared.GameObjects.EntitySystemMessages; using Content.Shared.GameObjects.EntitySystems; using Content.Shared.Input; using JetBrains.Annotations; -using Robust.Client.GameObjects.EntitySystems; using Robust.Client.Interfaces.GameObjects.Components; using Robust.Client.Interfaces.Input; using Robust.Client.Interfaces.UserInterface; @@ -13,7 +12,6 @@ using Robust.Client.Player; using Robust.Client.UserInterface; using Robust.Client.UserInterface.Controls; using Robust.Shared.GameObjects; -using Robust.Shared.Input; using Robust.Shared.Input.Binding; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.IoC; @@ -109,7 +107,7 @@ namespace Content.Client.GameObjects.EntitySystems FormattedMessage message; if (entity.Uid.IsClientSide()) { - message = ExamineSystem.GetExamineText(entity, _playerManager.LocalPlayer.ControlledEntity); + message = GetExamineText(entity, _playerManager.LocalPlayer.ControlledEntity); } else { diff --git a/Content.Client/GameObjects/EntitySystems/GasTileOverlaySystem.cs b/Content.Client/GameObjects/EntitySystems/GasTileOverlaySystem.cs index 1e2f0220af..a3eeadd0d3 100644 --- a/Content.Client/GameObjects/EntitySystems/GasTileOverlaySystem.cs +++ b/Content.Client/GameObjects/EntitySystems/GasTileOverlaySystem.cs @@ -1,22 +1,16 @@ using System; using System.Collections.Generic; -using System.Linq; -using Content.Client.Atmos; -using Content.Client.Utility; using Content.Shared.Atmos; using Content.Shared.GameObjects.EntitySystems; using JetBrains.Annotations; using Robust.Client.Graphics; -using Robust.Client.Interfaces.Graphics.Overlays; using Robust.Client.Interfaces.ResourceManagement; using Robust.Client.ResourceManagement; using Robust.Client.Utility; using Robust.Shared.GameObjects; using Robust.Shared.IoC; -using Robust.Shared.Log; using Robust.Shared.Map; using Robust.Shared.Maths; -using Robust.Shared.Prototypes; using Robust.Shared.Utility; namespace Content.Client.GameObjects.EntitySystems diff --git a/Content.Client/GameObjects/EntitySystems/MoverSystem.cs b/Content.Client/GameObjects/EntitySystems/MoverSystem.cs index e0d161b649..b16cea1672 100644 --- a/Content.Client/GameObjects/EntitySystems/MoverSystem.cs +++ b/Content.Client/GameObjects/EntitySystems/MoverSystem.cs @@ -1,7 +1,6 @@ #nullable enable using Content.Shared.GameObjects.Components.Movement; using Content.Shared.GameObjects.EntitySystems; -using Content.Shared.Physics; using JetBrains.Annotations; using Robust.Client.Physics; using Robust.Client.Player; diff --git a/Content.Client/GameObjects/EntitySystems/StatusEffectsSystem.cs b/Content.Client/GameObjects/EntitySystems/StatusEffectsSystem.cs index 65476ce25e..a0fd868b2c 100644 --- a/Content.Client/GameObjects/EntitySystems/StatusEffectsSystem.cs +++ b/Content.Client/GameObjects/EntitySystems/StatusEffectsSystem.cs @@ -1,5 +1,4 @@ using Content.Client.GameObjects.Components.Mobs; -using Content.Shared.GameObjects.Components.Mobs; using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Systems; using Robust.Shared.Interfaces.Timing; diff --git a/Content.Client/GameObjects/EntitySystems/VerbSystem.cs b/Content.Client/GameObjects/EntitySystems/VerbSystem.cs index 6c5fc11445..9d73013321 100644 --- a/Content.Client/GameObjects/EntitySystems/VerbSystem.cs +++ b/Content.Client/GameObjects/EntitySystems/VerbSystem.cs @@ -6,8 +6,8 @@ using System.Threading; using Content.Client.State; using Content.Client.UserInterface; using Content.Client.Utility; -using Content.Shared.GameObjects; using Content.Shared.GameObjects.EntitySystemMessages; +using Content.Shared.GameObjects.Verbs; using Content.Shared.Input; using JetBrains.Annotations; using Robust.Client.GameObjects.EntitySystems; diff --git a/Content.Client/GlobalVerbs/ExamineVerb.cs b/Content.Client/GlobalVerbs/ExamineVerb.cs index 33b8f38027..13e6198490 100644 --- a/Content.Client/GlobalVerbs/ExamineVerb.cs +++ b/Content.Client/GlobalVerbs/ExamineVerb.cs @@ -1,5 +1,5 @@ using Content.Client.GameObjects.EntitySystems; -using Content.Shared.GameObjects; +using Content.Shared.GameObjects.Verbs; using Robust.Shared.GameObjects.Systems; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Localization; diff --git a/Content.Client/GlobalVerbs/ViewVariablesVerb.cs b/Content.Client/GlobalVerbs/ViewVariablesVerb.cs index acaa118f09..93e2f1f39a 100644 --- a/Content.Client/GlobalVerbs/ViewVariablesVerb.cs +++ b/Content.Client/GlobalVerbs/ViewVariablesVerb.cs @@ -1,4 +1,4 @@ -using Content.Shared.GameObjects; +using Content.Shared.GameObjects.Verbs; using Robust.Client.Console; using Robust.Client.ViewVariables; using Robust.Shared.Interfaces.GameObjects; diff --git a/Content.Client/Graphics/Overlays/FlashOverlay.cs b/Content.Client/Graphics/Overlays/FlashOverlay.cs index 2d76466b32..cf56eb796e 100644 --- a/Content.Client/Graphics/Overlays/FlashOverlay.cs +++ b/Content.Client/Graphics/Overlays/FlashOverlay.cs @@ -1,20 +1,16 @@ -using System.Net.Mime; -using Content.Shared.GameObjects.Components.Mobs; +using Content.Shared.GameObjects.Components.Mobs; using Content.Shared.Interfaces; using Robust.Client.Graphics; using Robust.Client.Graphics.Drawing; using Robust.Client.Graphics.Overlays; using Robust.Client.Graphics.Shaders; using Robust.Client.Interfaces.Graphics; -using Robust.Client.Interfaces.Graphics.ClientEye; using Robust.Shared.Interfaces.Timing; using Robust.Shared.IoC; using Robust.Shared.Maths; using Robust.Shared.Prototypes; -using Robust.Shared.Timing; using SixLabors.ImageSharp; using SixLabors.ImageSharp.PixelFormats; -using Color = Robust.Shared.Maths.Color; namespace Content.Client.Graphics.Overlays { diff --git a/Content.Client/Health/BodySystem/BodyScanner/BodyScannerBoundUserInterface.cs b/Content.Client/Health/BodySystem/BodyScanner/BodyScannerBoundUserInterface.cs index 382712cf84..5bf9bec18b 100644 --- a/Content.Client/Health/BodySystem/BodyScanner/BodyScannerBoundUserInterface.cs +++ b/Content.Client/Health/BodySystem/BodyScanner/BodyScannerBoundUserInterface.cs @@ -1,12 +1,10 @@ -using Content.Client.UserInterface; -using Content.Shared.BodySystem; +using System.Collections.Generic; +using Content.Shared.Health.BodySystem.BodyScanner; using Robust.Client.GameObjects.Components.UserInterface; -using Robust.Client.UserInterface.Controls; using Robust.Shared.GameObjects.Components.UserInterface; using Robust.Shared.ViewVariables; -using System.Collections.Generic; -namespace Content.Client.BodySystem +namespace Content.Client.Health.BodySystem.BodyScanner { public class BodyScannerBoundUserInterface : BoundUserInterface { @@ -40,7 +38,7 @@ namespace Content.Client.BodySystem _template = scannerState.Template; _parts = scannerState.Parts; - + _display.UpdateDisplay(_template, _parts); } diff --git a/Content.Client/Health/BodySystem/BodyScanner/BodyScannerDisplay.cs b/Content.Client/Health/BodySystem/BodyScanner/BodyScannerDisplay.cs index 8df49bc53e..d997c73216 100644 --- a/Content.Client/Health/BodySystem/BodyScanner/BodyScannerDisplay.cs +++ b/Content.Client/Health/BodySystem/BodyScanner/BodyScannerDisplay.cs @@ -1,20 +1,14 @@ -using Content.Client.BodySystem; -using Content.Shared.BodySystem; -using Robust.Client.Graphics.Drawing; -using Robust.Client.Interfaces.ResourceManagement; +using System.Collections.Generic; +using System.Globalization; +using Content.Shared.Health.BodySystem.BodyScanner; using Robust.Client.UserInterface.Controls; using Robust.Client.UserInterface.CustomControls; -using Robust.Client.Utility; using Robust.Shared.IoC; using Robust.Shared.Localization; using Robust.Shared.Maths; -using Robust.Shared.Utility; -using System; -using System.Collections.Generic; -using System.Globalization; using static Robust.Client.UserInterface.Controls.ItemList; -namespace Content.Client.UserInterface +namespace Content.Client.Health.BodySystem.BodyScanner { public sealed class BodyScannerDisplay : SS14Window { @@ -33,7 +27,7 @@ namespace Content.Client.UserInterface private BodyScannerTemplateData _template; private Dictionary _parts; - private List _slots; + private List _slots; private BodyScannerBodyPartData _currentBodyPart; @@ -100,7 +94,7 @@ namespace Content.Client.UserInterface public void UpdateDisplay(BodyScannerTemplateData template, Dictionary parts) { - _template = template; + _template = template; _parts = parts; _slots = new List(); BodyPartList.Clear(); diff --git a/Content.Client/Health/BodySystem/Surgery/GenericSurgeryBoundUserInterface.cs b/Content.Client/Health/BodySystem/Surgery/GenericSurgeryBoundUserInterface.cs index 1079a939ce..04c0246e83 100644 --- a/Content.Client/Health/BodySystem/Surgery/GenericSurgeryBoundUserInterface.cs +++ b/Content.Client/Health/BodySystem/Surgery/GenericSurgeryBoundUserInterface.cs @@ -1,15 +1,8 @@ -using System; -using System.Collections.Generic; +using Content.Shared.Health.BodySystem.Surgery; using Robust.Client.GameObjects.Components.UserInterface; using Robust.Shared.GameObjects.Components.UserInterface; -using Robust.Shared.IoC; -using Robust.Shared.Prototypes; -using Robust.Shared.GameObjects; -using Robust.Shared.Interfaces.Network; -using Robust.Shared.Players; -using Content.Shared.BodySystem; -namespace Content.Client.BodySystem +namespace Content.Client.Health.BodySystem.Surgery { //TODO : Make window close if target or surgery tool gets too far away from user. diff --git a/Content.Client/Health/BodySystem/Surgery/GenericSurgeryWindow.cs b/Content.Client/Health/BodySystem/Surgery/GenericSurgeryWindow.cs index f83ae9163f..baae1b145c 100644 --- a/Content.Client/Health/BodySystem/Surgery/GenericSurgeryWindow.cs +++ b/Content.Client/Health/BodySystem/Surgery/GenericSurgeryWindow.cs @@ -1,14 +1,13 @@ -using Robust.Client.UserInterface; +using System; +using System.Collections.Generic; +using System.Globalization; +using Robust.Client.UserInterface; using Robust.Client.UserInterface.Controls; using Robust.Client.UserInterface.CustomControls; using Robust.Shared.Localization; using Robust.Shared.Maths; -using System; -using System.Collections.Generic; -using System.Globalization; -using System.Text; -namespace Content.Client.BodySystem +namespace Content.Client.Health.BodySystem.Surgery { public class GenericSurgeryWindow : SS14Window { diff --git a/Content.Client/Instruments/InstrumentMenu.cs b/Content.Client/Instruments/InstrumentMenu.cs index 50f480143d..3acacb3f34 100644 --- a/Content.Client/Instruments/InstrumentMenu.cs +++ b/Content.Client/Instruments/InstrumentMenu.cs @@ -1,4 +1,3 @@ -using System.Threading.Tasks; using Content.Client.GameObjects.Components.Instruments; using Content.Client.UserInterface.Stylesheets; using Content.Shared.GameObjects.EntitySystems; diff --git a/Content.Client/Jobs/ClownSpecial.cs b/Content.Client/Jobs/ClownSpecial.cs index 8c4af7de1d..e5cd37f1e1 100644 --- a/Content.Client/Jobs/ClownSpecial.cs +++ b/Content.Client/Jobs/ClownSpecial.cs @@ -1,4 +1,4 @@ -using Content.Server.Jobs; +using Content.Shared.Roles; using JetBrains.Annotations; namespace Content.Client.Jobs diff --git a/Content.Client/Parallax/ParallaxGenerator.cs b/Content.Client/Parallax/ParallaxGenerator.cs index b9e532a8a2..ab358c2b41 100644 --- a/Content.Client/Parallax/ParallaxGenerator.cs +++ b/Content.Client/Parallax/ParallaxGenerator.cs @@ -9,7 +9,6 @@ using Robust.Shared.Maths; using Robust.Shared.Noise; using Robust.Shared.Random; using SixLabors.ImageSharp; -using SixLabors.ImageSharp.Advanced; using SixLabors.ImageSharp.PixelFormats; using Color = Robust.Shared.Maths.Color; diff --git a/Content.Client/Sandbox/SandboxManager.cs b/Content.Client/Sandbox/SandboxManager.cs index d1e7de9694..5e5cda1aa0 100644 --- a/Content.Client/Sandbox/SandboxManager.cs +++ b/Content.Client/Sandbox/SandboxManager.cs @@ -7,7 +7,6 @@ using Robust.Client.Interfaces.Placement; using Robust.Client.Interfaces.ResourceManagement; using Robust.Client.UserInterface.Controls; using Robust.Client.UserInterface.CustomControls; -using Robust.Shared.Input; using Robust.Shared.Input.Binding; using Robust.Shared.Interfaces.Map; using Robust.Shared.Interfaces.Network; diff --git a/Content.Client/ScreenshotHook.cs b/Content.Client/ScreenshotHook.cs index f3a7565bed..238288ab5f 100644 --- a/Content.Client/ScreenshotHook.cs +++ b/Content.Client/ScreenshotHook.cs @@ -4,7 +4,6 @@ using System.Threading.Tasks; using Content.Shared.Input; using Robust.Client.Interfaces.Graphics; using Robust.Client.Interfaces.Input; -using Robust.Shared.Input; using Robust.Shared.Input.Binding; using Robust.Shared.Interfaces.Resources; using Robust.Shared.IoC; diff --git a/Content.Client/State/GameScreen.cs b/Content.Client/State/GameScreen.cs index 5449ed7e3b..98425026b5 100644 --- a/Content.Client/State/GameScreen.cs +++ b/Content.Client/State/GameScreen.cs @@ -1,20 +1,13 @@ -using System.Collections.Generic; -using System.Collections.Immutable; using Content.Client.Chat; using Content.Client.Interfaces.Chat; using Content.Client.UserInterface; using Content.Shared.Input; -using Robust.Client.Console; using Robust.Client.Interfaces.Input; -using Robust.Client.Interfaces.State; using Robust.Client.Interfaces.UserInterface; using Robust.Client.UserInterface.Controls; -using Robust.Shared.Input; using Robust.Shared.Input.Binding; -using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.IoC; using Robust.Shared.Localization; -using Robust.Shared.Map; using Robust.Shared.ViewVariables; namespace Content.Client.State diff --git a/Content.Client/State/GameScreenBase.cs b/Content.Client/State/GameScreenBase.cs index d16119a4a2..1372dacce5 100644 --- a/Content.Client/State/GameScreenBase.cs +++ b/Content.Client/State/GameScreenBase.cs @@ -5,11 +5,10 @@ using Content.Client.GameObjects.Components; using Content.Shared.GameObjects.EntitySystems; using Robust.Client.GameObjects.EntitySystems; using Robust.Client.Interfaces.GameObjects; -using Robust.Client.Interfaces.GameObjects.Components; using Robust.Client.Interfaces.Graphics.ClientEye; using Robust.Client.Interfaces.Input; -using Robust.Client.Interfaces.UserInterface; using Robust.Client.Interfaces.State; +using Robust.Client.Interfaces.UserInterface; using Robust.Client.Player; using Robust.Shared.GameObjects; using Robust.Shared.Input; diff --git a/Content.Client/State/LobbyState.cs b/Content.Client/State/LobbyState.cs index 5f4b6853e0..23f1d28d83 100644 --- a/Content.Client/State/LobbyState.cs +++ b/Content.Client/State/LobbyState.cs @@ -9,10 +9,8 @@ using Robust.Client.Interfaces; using Robust.Client.Interfaces.Input; using Robust.Client.Interfaces.ResourceManagement; using Robust.Client.Interfaces.UserInterface; -using Robust.Client.UserInterface.CustomControls; using Robust.Client.Player; using Robust.Client.UserInterface.Controls; -using Robust.Shared.Input; using Robust.Shared.Input.Binding; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.IoC; diff --git a/Content.Client/UserInterface/Cargo/CargoConsoleMenu.cs b/Content.Client/UserInterface/Cargo/CargoConsoleMenu.cs index 3626f72faa..f5f05f50c0 100644 --- a/Content.Client/UserInterface/Cargo/CargoConsoleMenu.cs +++ b/Content.Client/UserInterface/Cargo/CargoConsoleMenu.cs @@ -1,4 +1,7 @@ -using Content.Client.GameObjects.Components.Cargo; +using System; +using System.Collections.Generic; +using Content.Client.GameObjects.Components.Cargo; +using Content.Client.UserInterface.Stylesheets; using Content.Shared.Prototypes.Cargo; using Robust.Client.Graphics.Drawing; using Robust.Client.UserInterface.Controls; @@ -7,9 +10,6 @@ using Robust.Client.Utility; using Robust.Shared.IoC; using Robust.Shared.Localization; using Robust.Shared.Maths; -using System; -using System.Collections.Generic; -using Content.Client.UserInterface.Stylesheets; namespace Content.Client.UserInterface.Cargo { diff --git a/Content.Client/UserInterface/Cargo/CargoConsoleOrderMenu.cs b/Content.Client/UserInterface/Cargo/CargoConsoleOrderMenu.cs index a831c90ccc..5c2b4460f0 100644 --- a/Content.Client/UserInterface/Cargo/CargoConsoleOrderMenu.cs +++ b/Content.Client/UserInterface/Cargo/CargoConsoleOrderMenu.cs @@ -1,10 +1,8 @@ -using Robust.Client.UserInterface.Controls; +using System.Collections.Generic; +using Robust.Client.UserInterface.Controls; using Robust.Client.UserInterface.CustomControls; using Robust.Shared.IoC; using Robust.Shared.Localization; -using Robust.Shared.Maths; -using System; -using System.Collections.Generic; namespace Content.Client.UserInterface.Cargo { diff --git a/Content.Client/UserInterface/Cargo/GalacticBankSelectionMenu.cs b/Content.Client/UserInterface/Cargo/GalacticBankSelectionMenu.cs index cc4dfb1e83..25c90ee7f8 100644 --- a/Content.Client/UserInterface/Cargo/GalacticBankSelectionMenu.cs +++ b/Content.Client/UserInterface/Cargo/GalacticBankSelectionMenu.cs @@ -5,8 +5,6 @@ using Robust.Client.UserInterface.CustomControls; using Robust.Shared.IoC; using Robust.Shared.Localization; using Robust.Shared.Maths; -using System; -using static Robust.Client.UserInterface.Controls.ItemList; namespace Content.Client.UserInterface.Cargo { diff --git a/Content.Client/UserInterface/CharacterSetupGui.cs b/Content.Client/UserInterface/CharacterSetupGui.cs index 4b6f9f4049..5ca0d6d564 100644 --- a/Content.Client/UserInterface/CharacterSetupGui.cs +++ b/Content.Client/UserInterface/CharacterSetupGui.cs @@ -3,8 +3,8 @@ using Content.Client.GameObjects.Components.Mobs; using Content.Client.Interfaces; using Content.Client.UserInterface.Stylesheets; using Content.Client.Utility; -using Content.Shared.Jobs; using Content.Shared.Preferences; +using Content.Shared.Roles; using Robust.Client.GameObjects; using Robust.Client.Graphics.Drawing; using Robust.Client.Interfaces.ResourceManagement; diff --git a/Content.Client/UserInterface/CooldownGraphic.cs b/Content.Client/UserInterface/CooldownGraphic.cs index fb440af952..777ec9e1d9 100644 --- a/Content.Client/UserInterface/CooldownGraphic.cs +++ b/Content.Client/UserInterface/CooldownGraphic.cs @@ -1,13 +1,12 @@ -using Robust.Client.Graphics.Drawing; -using Robust.Client.Interfaces.GameObjects.Components; -using Robust.Client.Interfaces.Graphics; -using Robust.Shared.Maths; -using System; +using System; +using Robust.Client.Graphics.Drawing; using Robust.Client.Graphics.Shaders; +using Robust.Client.UserInterface; using Robust.Shared.IoC; +using Robust.Shared.Maths; using Robust.Shared.Prototypes; -namespace Robust.Client.UserInterface.Controls +namespace Content.Client.UserInterface { public class CooldownGraphic : Control diff --git a/Content.Client/UserInterface/GameHud.cs b/Content.Client/UserInterface/GameHud.cs index 318e1c051f..fa2c6cf000 100644 --- a/Content.Client/UserInterface/GameHud.cs +++ b/Content.Client/UserInterface/GameHud.cs @@ -8,12 +8,10 @@ using Robust.Client.Interfaces.Input; using Robust.Client.Interfaces.ResourceManagement; using Robust.Client.UserInterface; using Robust.Client.UserInterface.Controls; -using Robust.Shared.Input; using Robust.Shared.Input.Binding; using Robust.Shared.IoC; using Robust.Shared.Localization; using Robust.Shared.Maths; -using static Robust.Client.UserInterface.Control; namespace Content.Client.UserInterface { diff --git a/Content.Client/UserInterface/GhostGui.cs b/Content.Client/UserInterface/GhostGui.cs index 959b3beff6..5ac6e1a7cc 100644 --- a/Content.Client/UserInterface/GhostGui.cs +++ b/Content.Client/UserInterface/GhostGui.cs @@ -1,4 +1,3 @@ -using System.Data; using Content.Client.GameObjects.Components.Observer; using Robust.Client.UserInterface; using Robust.Client.UserInterface.Controls; diff --git a/Content.Client/UserInterface/HumanoidProfileEditor.cs b/Content.Client/UserInterface/HumanoidProfileEditor.cs index 8bcc069762..625cffd16e 100644 --- a/Content.Client/UserInterface/HumanoidProfileEditor.cs +++ b/Content.Client/UserInterface/HumanoidProfileEditor.cs @@ -3,11 +3,9 @@ using System.Collections.Generic; using System.Linq; using Content.Client.GameObjects.Components; using Content.Client.Interfaces; -using Content.Client.Utility; using Content.Shared; -using Content.Shared.Jobs; -using Content.Shared.Antags; using Content.Shared.Preferences; +using Content.Shared.Roles; using Robust.Client.Graphics.Drawing; using Robust.Client.UserInterface; using Robust.Client.UserInterface.Controls; @@ -18,7 +16,6 @@ using Robust.Shared.Localization; using Robust.Shared.Maths; using Robust.Shared.Prototypes; using Robust.Shared.Utility; -using static Content.Client.StaticIoC; namespace Content.Client.UserInterface { diff --git a/Content.Client/UserInterface/IItemSlotManager.cs b/Content.Client/UserInterface/IItemSlotManager.cs index 9c23325976..f6f34c7903 100644 --- a/Content.Client/UserInterface/IItemSlotManager.cs +++ b/Content.Client/UserInterface/IItemSlotManager.cs @@ -1,5 +1,4 @@ -using Content.Client.GameObjects; -using Robust.Client.UserInterface; +using Robust.Client.UserInterface; using Robust.Shared.Interfaces.GameObjects; namespace Content.Client.UserInterface diff --git a/Content.Client/UserInterface/ItemSlotButton.cs b/Content.Client/UserInterface/ItemSlotButton.cs index 1438b48c88..24ed144d4c 100644 --- a/Content.Client/UserInterface/ItemSlotButton.cs +++ b/Content.Client/UserInterface/ItemSlotButton.cs @@ -1,5 +1,4 @@ using System; -using Content.Shared.GameObjects.Components.Items; using Robust.Client.Graphics; using Robust.Client.UserInterface; using Robust.Client.UserInterface.Controls; diff --git a/Content.Client/UserInterface/ItemSlotManager.cs b/Content.Client/UserInterface/ItemSlotManager.cs index 2186d4e4ee..d7d4c1e78d 100644 --- a/Content.Client/UserInterface/ItemSlotManager.cs +++ b/Content.Client/UserInterface/ItemSlotManager.cs @@ -1,17 +1,12 @@ -using System; -using Content.Client.GameObjects; -using Content.Client.GameObjects.Components.Storage; +using Content.Client.GameObjects.Components.Storage; using Content.Client.GameObjects.EntitySystems; -using Content.Client.Utility; using Content.Shared.GameObjects.Components.Items; using Content.Shared.Input; using Robust.Client.GameObjects; using Robust.Client.GameObjects.EntitySystems; -using Robust.Client.Graphics; using Robust.Client.Interfaces.GameObjects.Components; using Robust.Client.Interfaces.Graphics.ClientEye; using Robust.Client.Interfaces.Input; -using Robust.Client.Interfaces.ResourceManagement; using Robust.Client.Player; using Robust.Client.UserInterface; using Robust.Shared.Input; diff --git a/Content.Client/UserInterface/LateJoinGui.cs b/Content.Client/UserInterface/LateJoinGui.cs index 02edca1d92..30f662ae80 100644 --- a/Content.Client/UserInterface/LateJoinGui.cs +++ b/Content.Client/UserInterface/LateJoinGui.cs @@ -1,19 +1,18 @@ +using System; +using System.Linq; +using Content.Shared.Roles; using Robust.Client.Console; using Robust.Client.UserInterface.Controls; +using Robust.Client.UserInterface.CustomControls; using Robust.Client.Utility; -using Content.Shared.Jobs; using Robust.Shared.IoC; using Robust.Shared.Localization; using Robust.Shared.Log; using Robust.Shared.Maths; using Robust.Shared.Prototypes; using Robust.Shared.Utility; -using System; -using System.Collections.Generic; -using System.Linq; - -namespace Robust.Client.UserInterface.CustomControls +namespace Content.Client.UserInterface { public sealed class LateJoinGui : SS14Window { diff --git a/Content.Client/UserInterface/LobbyCharacterPreviewPanel.cs b/Content.Client/UserInterface/LobbyCharacterPreviewPanel.cs index c5df73e001..b4dcdca7fb 100644 --- a/Content.Client/UserInterface/LobbyCharacterPreviewPanel.cs +++ b/Content.Client/UserInterface/LobbyCharacterPreviewPanel.cs @@ -1,10 +1,10 @@ using System.Linq; -using Content.Client.GameObjects; +using Content.Client.GameObjects.Components.HUD.Inventory; using Content.Client.GameObjects.Components.Mobs; using Content.Client.Interfaces; using Content.Shared; -using Content.Shared.Jobs; using Content.Shared.Preferences; +using Content.Shared.Roles; using Robust.Client.Interfaces.GameObjects.Components; using Robust.Client.UserInterface; using Robust.Client.UserInterface.Controls; diff --git a/Content.Client/UserInterface/RoundEndSummaryWindow.cs b/Content.Client/UserInterface/RoundEndSummaryWindow.cs index 5e8600b188..5f2d736d9c 100644 --- a/Content.Client/UserInterface/RoundEndSummaryWindow.cs +++ b/Content.Client/UserInterface/RoundEndSummaryWindow.cs @@ -1,19 +1,12 @@ -using Robust.Client.Graphics; -using Robust.Client.Interfaces.Input; -using Robust.Client.Interfaces.ResourceManagement; -using Robust.Client.ResourceManagement; +using System; +using System.Collections.Generic; +using System.Linq; +using Content.Client.Utility; using Robust.Client.UserInterface.Controls; using Robust.Client.UserInterface.CustomControls; -using Robust.Shared.IoC; using Robust.Shared.Localization; using Robust.Shared.Maths; -using Content.Client.Utility; -using Robust.Client.Player; -using System.Linq; -using System.Collections.Generic; -using static Robust.Client.UserInterface.Controls.ItemList; using static Content.Shared.SharedGameTicker; -using System; namespace Content.Client.UserInterface { diff --git a/Content.IntegrationTests/Tests/AI/AiControllerTest.cs b/Content.IntegrationTests/Tests/AI/AiControllerTest.cs index 7c2b1b3371..12517b2092 100644 --- a/Content.IntegrationTests/Tests/AI/AiControllerTest.cs +++ b/Content.IntegrationTests/Tests/AI/AiControllerTest.cs @@ -1,23 +1,19 @@ -using NUnit.Framework; -using Robust.Shared.GameObjects; -using Robust.Shared.Interfaces.GameObjects; -using Robust.Shared.Interfaces.Map; -using Robust.Shared.Map; -using Robust.Shared.Prototypes; -using System; +using System; using System.Collections.Generic; using System.Threading.Tasks; using Content.Server.GameObjects.Components.Movement; -using Content.Shared.VendingMachines; +using NUnit.Framework; using Robust.Server.AI; -using Robust.Shared.Log; -using Robust.Server.Interfaces.Maps; -using Robust.Server.Interfaces.Timing; +using Robust.Shared.GameObjects; +using Robust.Shared.Interfaces.GameObjects; +using Robust.Shared.Interfaces.Map; using Robust.Shared.Interfaces.Reflection; using Robust.Shared.IoC; +using Robust.Shared.Map; using Robust.Shared.Maths; +using Robust.Shared.Prototypes; -namespace Content.IntegrationTests.Tests +namespace Content.IntegrationTests.Tests.AI { [TestFixture] [TestOf(typeof(AiControllerTest))] @@ -47,7 +43,7 @@ namespace Content.IntegrationTests.Tests Assert.That(attrib != null, $"No AiLogicProcessorAttribute found on {processor.Name}"); processorNames.Add(attrib.SerializeName); } - + foreach (var entity in prototypeManager.EnumeratePrototypes()) { var comps = entity.Components; diff --git a/Content.IntegrationTests/Tests/BuckleTest.cs b/Content.IntegrationTests/Tests/BuckleTest.cs index 34049ade76..e2ada13caa 100644 --- a/Content.IntegrationTests/Tests/BuckleTest.cs +++ b/Content.IntegrationTests/Tests/BuckleTest.cs @@ -1,5 +1,6 @@ using System.Threading.Tasks; using Content.Server.GameObjects.Components.Buckle; +using Content.Server.GameObjects.Components.Strap; using Content.Shared.GameObjects.Components.Buckle; using Content.Shared.GameObjects.EntitySystems; using NUnit.Framework; @@ -7,7 +8,6 @@ using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Interfaces.Map; using Robust.Shared.IoC; using Robust.Shared.Map; -using StrapComponent = Content.Server.GameObjects.Components.Strap.StrapComponent; namespace Content.IntegrationTests.Tests { diff --git a/Content.IntegrationTests/Tests/ContainerOcclusionTest.cs b/Content.IntegrationTests/Tests/ContainerOcclusionTest.cs index c3b84b42b5..3ab0b0c837 100644 --- a/Content.IntegrationTests/Tests/ContainerOcclusionTest.cs +++ b/Content.IntegrationTests/Tests/ContainerOcclusionTest.cs @@ -1,6 +1,5 @@ using System.Linq; using System.Threading.Tasks; -using Content.Server.GameObjects.Components; using Content.Server.GameObjects.Components.Items.Storage; using NUnit.Framework; using Robust.Client.GameObjects; diff --git a/Content.IntegrationTests/Tests/Disposal/DisposalUnitTest.cs b/Content.IntegrationTests/Tests/Disposal/DisposalUnitTest.cs index b8d887ead5..15b2167631 100644 --- a/Content.IntegrationTests/Tests/Disposal/DisposalUnitTest.cs +++ b/Content.IntegrationTests/Tests/Disposal/DisposalUnitTest.cs @@ -5,7 +5,6 @@ using Content.Server.GameObjects.Components; using Content.Server.GameObjects.Components.Disposal; using Content.Server.GameObjects.Components.Power.ApcNetComponents; using NUnit.Framework; -using Robust.Shared.GameObjects.Components; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Interfaces.Map; using Robust.Shared.IoC; diff --git a/Content.IntegrationTests/Tests/DoAfter/DoAfterServerTest.cs b/Content.IntegrationTests/Tests/DoAfter/DoAfterServerTest.cs index 7ddb2ef944..5c6fdcfe38 100644 --- a/Content.IntegrationTests/Tests/DoAfter/DoAfterServerTest.cs +++ b/Content.IntegrationTests/Tests/DoAfter/DoAfterServerTest.cs @@ -1,7 +1,7 @@ using System.Threading; using System.Threading.Tasks; using Content.Server.GameObjects.Components; -using Content.Server.GameObjects.EntitySystems; +using Content.Server.GameObjects.EntitySystems.DoAfter; using NUnit.Framework; using Robust.Shared.GameObjects.Systems; using Robust.Shared.Interfaces.GameObjects; @@ -9,7 +9,6 @@ using Robust.Shared.Interfaces.Map; using Robust.Shared.Interfaces.Timing; using Robust.Shared.IoC; using Robust.Shared.Map; -using Robust.Shared.Maths; namespace Content.IntegrationTests.Tests.DoAfter { @@ -35,7 +34,7 @@ namespace Content.IntegrationTests.Tests.DoAfter var args = new DoAfterEventArgs(mob, tickTime / 2, cancelToken.Token); task = EntitySystem.Get().DoAfter(args); }); - + await server.WaitRunTicks(1); Assert.That(task.Result == DoAfterStatus.Finished); } @@ -63,4 +62,4 @@ namespace Content.IntegrationTests.Tests.DoAfter Assert.That(task.Result == DoAfterStatus.Cancelled, $"Result was {task.Result}"); } } -} \ No newline at end of file +} diff --git a/Content.IntegrationTests/Tests/EntityTest.cs b/Content.IntegrationTests/Tests/EntityTest.cs index 288105ab42..4df604e4ad 100644 --- a/Content.IntegrationTests/Tests/EntityTest.cs +++ b/Content.IntegrationTests/Tests/EntityTest.cs @@ -1,20 +1,21 @@ -using NUnit.Framework; +using System; +using System.Collections.Generic; +using System.Threading.Tasks; +using NUnit.Framework; +using Robust.Server.Interfaces.Maps; +using Robust.Server.Interfaces.Timing; using Robust.Shared.GameObjects; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Interfaces.Map; -using Robust.Shared.Map; -using Robust.Shared.Prototypes; -using System; -using System.Collections.Generic; -using System.Threading.Tasks; using Robust.Shared.Log; -using Robust.Server.Interfaces.Maps; -using Robust.Server.Interfaces.Timing; +using Robust.Shared.Map; +using Robust.Shared.Maths; +using Robust.Shared.Prototypes; namespace Content.IntegrationTests.Tests { [TestFixture] - [TestOf(typeof(Robust.Shared.GameObjects.Entity))] + [TestOf(typeof(Entity))] public class EntityTest : ContentIntegrationTest { [Test] @@ -41,7 +42,7 @@ namespace Content.IntegrationTests.Tests server.Assert(() => { - var testLocation = new GridCoordinates(new Robust.Shared.Maths.Vector2(0, 0), grid); + var testLocation = new GridCoordinates(new Vector2(0, 0), grid); //Generate list of non-abstract prototypes to test foreach (var prototype in prototypeMan.EnumeratePrototypes()) diff --git a/Content.IntegrationTests/Tests/GravityGridTest.cs b/Content.IntegrationTests/Tests/GravityGridTest.cs index dcf9b23d3f..82c694b26a 100644 --- a/Content.IntegrationTests/Tests/GravityGridTest.cs +++ b/Content.IntegrationTests/Tests/GravityGridTest.cs @@ -1,8 +1,6 @@ using System.Threading.Tasks; -using Content.Client.GameObjects.Components.Gravity; using Content.Server.GameObjects.Components.Gravity; using Content.Server.GameObjects.Components.Power.ApcNetComponents; -using Content.Server.GameObjects.Components.Power; using NUnit.Framework; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Interfaces.Map; diff --git a/Content.IntegrationTests/Tests/HumanInventoryUniformSlotsTest.cs b/Content.IntegrationTests/Tests/HumanInventoryUniformSlotsTest.cs index 2281118b12..3f2b1ca4f8 100644 --- a/Content.IntegrationTests/Tests/HumanInventoryUniformSlotsTest.cs +++ b/Content.IntegrationTests/Tests/HumanInventoryUniformSlotsTest.cs @@ -1,11 +1,10 @@ using System.Threading.Tasks; -using Content.Server.GameObjects; +using Content.Server.GameObjects.Components.GUI; using NUnit.Framework; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Interfaces.Map; using Robust.Shared.IoC; using Robust.Shared.Map; -using Robust.Shared.Maths; using static Content.Shared.GameObjects.Components.Inventory.EquipmentSlotDefines; namespace Content.IntegrationTests.Tests diff --git a/Content.Server.Database/Migrations/Postgres/PostgresPreferencesDbContextModelSnapshot.cs b/Content.Server.Database/Migrations/Postgres/PostgresPreferencesDbContextModelSnapshot.cs index 0343886635..9429c9c003 100644 --- a/Content.Server.Database/Migrations/Postgres/PostgresPreferencesDbContextModelSnapshot.cs +++ b/Content.Server.Database/Migrations/Postgres/PostgresPreferencesDbContextModelSnapshot.cs @@ -1,8 +1,7 @@ // -using Content.Server.Database; + using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; namespace Content.Server.Database.Migrations.Postgres diff --git a/Content.Server.Database/Migrations/Sqlite/20200118020532_initial.Designer.cs b/Content.Server.Database/Migrations/Sqlite/20200118020532_initial.Designer.cs index 001d5c6a29..a0cfca0af8 100644 --- a/Content.Server.Database/Migrations/Sqlite/20200118020532_initial.Designer.cs +++ b/Content.Server.Database/Migrations/Sqlite/20200118020532_initial.Designer.cs @@ -1,11 +1,10 @@ // -using Content.Server.Database; + using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Infrastructure; using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -namespace Content.Server.Database.Migrations +namespace Content.Server.Database.Migrations.Sqlite { [DbContext(typeof(SqlitePreferencesDbContext))] [Migration("20200118020532_initial")] diff --git a/Content.Server.Database/Migrations/Sqlite/20200118020532_initial.cs b/Content.Server.Database/Migrations/Sqlite/20200118020532_initial.cs index 69fdb24764..9fdf32e225 100644 --- a/Content.Server.Database/Migrations/Sqlite/20200118020532_initial.cs +++ b/Content.Server.Database/Migrations/Sqlite/20200118020532_initial.cs @@ -1,6 +1,6 @@ using Microsoft.EntityFrameworkCore.Migrations; -namespace Content.Server.Database.Migrations +namespace Content.Server.Database.Migrations.Sqlite { public partial class initial : Migration { diff --git a/Content.Server.Database/Migrations/Sqlite/20200118195640_jobs.Designer.cs b/Content.Server.Database/Migrations/Sqlite/20200118195640_jobs.Designer.cs index 24a875c25c..c7235a5ef9 100644 --- a/Content.Server.Database/Migrations/Sqlite/20200118195640_jobs.Designer.cs +++ b/Content.Server.Database/Migrations/Sqlite/20200118195640_jobs.Designer.cs @@ -1,11 +1,10 @@ // -using Content.Server.Database; + using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Infrastructure; using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -namespace Content.Server.Database.Migrations +namespace Content.Server.Database.Migrations.Sqlite { [DbContext(typeof(SqlitePreferencesDbContext))] [Migration("20200118195640_jobs")] diff --git a/Content.Server.Database/Migrations/Sqlite/20200118195640_jobs.cs b/Content.Server.Database/Migrations/Sqlite/20200118195640_jobs.cs index 09a47891ba..44b8beb651 100644 --- a/Content.Server.Database/Migrations/Sqlite/20200118195640_jobs.cs +++ b/Content.Server.Database/Migrations/Sqlite/20200118195640_jobs.cs @@ -1,6 +1,6 @@ using Microsoft.EntityFrameworkCore.Migrations; -namespace Content.Server.Database.Migrations +namespace Content.Server.Database.Migrations.Sqlite { public partial class jobs : Migration { diff --git a/Content.Server.Database/Migrations/Sqlite/20200119103426_preferenceUnavailable.Designer.cs b/Content.Server.Database/Migrations/Sqlite/20200119103426_preferenceUnavailable.Designer.cs index c0aab2caeb..4b13876840 100644 --- a/Content.Server.Database/Migrations/Sqlite/20200119103426_preferenceUnavailable.Designer.cs +++ b/Content.Server.Database/Migrations/Sqlite/20200119103426_preferenceUnavailable.Designer.cs @@ -1,11 +1,10 @@ // -using Content.Server.Database; + using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Infrastructure; using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -namespace Content.Server.Database.Migrations +namespace Content.Server.Database.Migrations.Sqlite { [DbContext(typeof(SqlitePreferencesDbContext))] [Migration("20200119103426_preferenceUnavailable")] diff --git a/Content.Server.Database/Migrations/Sqlite/20200119103426_preferenceUnavailable.cs b/Content.Server.Database/Migrations/Sqlite/20200119103426_preferenceUnavailable.cs index 453b1cff60..e5091391f2 100644 --- a/Content.Server.Database/Migrations/Sqlite/20200119103426_preferenceUnavailable.cs +++ b/Content.Server.Database/Migrations/Sqlite/20200119103426_preferenceUnavailable.cs @@ -1,6 +1,6 @@ using Microsoft.EntityFrameworkCore.Migrations; -namespace Content.Server.Database.Migrations +namespace Content.Server.Database.Migrations.Sqlite { public partial class preferenceUnavailable : Migration { diff --git a/Content.Server.Database/Migrations/Sqlite/SqlitePreferencesDbContextModelSnapshot.cs b/Content.Server.Database/Migrations/Sqlite/SqlitePreferencesDbContextModelSnapshot.cs index 60b7c39f14..5715275f50 100644 --- a/Content.Server.Database/Migrations/Sqlite/SqlitePreferencesDbContextModelSnapshot.cs +++ b/Content.Server.Database/Migrations/Sqlite/SqlitePreferencesDbContextModelSnapshot.cs @@ -1,10 +1,9 @@ // -using Content.Server.Database; + using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -namespace Content.Server.Database.Migrations +namespace Content.Server.Database.Migrations.Sqlite { [DbContext(typeof(SqlitePreferencesDbContext))] partial class SqlitePreferencesDbContextModelSnapshot : ModelSnapshot diff --git a/Content.Server/AI/Operators/Combat/Melee/SwingMeleeWeaponOperator.cs b/Content.Server/AI/Operators/Combat/Melee/SwingMeleeWeaponOperator.cs index 9f47dff826..d9c6ce5383 100644 --- a/Content.Server/AI/Operators/Combat/Melee/SwingMeleeWeaponOperator.cs +++ b/Content.Server/AI/Operators/Combat/Melee/SwingMeleeWeaponOperator.cs @@ -1,8 +1,6 @@ -using Content.Server.GameObjects; using Content.Server.GameObjects.Components.GUI; using Content.Server.GameObjects.Components.Mobs; using Content.Server.GameObjects.Components.Weapon.Melee; -using Content.Server.GameObjects.EntitySystems; using Content.Server.GameObjects.EntitySystems.Click; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.IoC; diff --git a/Content.Server/AI/Operators/Combat/Melee/UnarmedCombatOperator.cs b/Content.Server/AI/Operators/Combat/Melee/UnarmedCombatOperator.cs index a0bade8ae3..0a6b6697fe 100644 --- a/Content.Server/AI/Operators/Combat/Melee/UnarmedCombatOperator.cs +++ b/Content.Server/AI/Operators/Combat/Melee/UnarmedCombatOperator.cs @@ -1,7 +1,5 @@ -using Content.Server.GameObjects; using Content.Server.GameObjects.Components.Mobs; using Content.Server.GameObjects.Components.Weapon.Melee; -using Content.Server.GameObjects.EntitySystems; using Content.Server.GameObjects.EntitySystems.Click; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.IoC; diff --git a/Content.Server/AI/Operators/Inventory/CloseStorageOperator.cs b/Content.Server/AI/Operators/Inventory/CloseStorageOperator.cs index 7876711556..8753fb6115 100644 --- a/Content.Server/AI/Operators/Inventory/CloseStorageOperator.cs +++ b/Content.Server/AI/Operators/Inventory/CloseStorageOperator.cs @@ -1,6 +1,5 @@ using Content.Server.AI.Utility; using Content.Server.AI.WorldState.States.Inventory; -using Content.Server.GameObjects.Components; using Content.Server.GameObjects.Components.Items.Storage; using Content.Server.Utility; using Content.Shared.Interfaces.GameObjects.Components; diff --git a/Content.Server/AI/Operators/Inventory/DropEntityOperator.cs b/Content.Server/AI/Operators/Inventory/DropEntityOperator.cs index 1e2450d791..94778ff169 100644 --- a/Content.Server/AI/Operators/Inventory/DropEntityOperator.cs +++ b/Content.Server/AI/Operators/Inventory/DropEntityOperator.cs @@ -1,7 +1,5 @@ -using Content.Server.GameObjects; using Content.Server.GameObjects.Components.GUI; using Robust.Shared.Interfaces.GameObjects; -using Robust.Shared.Log; namespace Content.Server.AI.Operators.Inventory { diff --git a/Content.Server/AI/Operators/Inventory/DropHandItemsOperator.cs b/Content.Server/AI/Operators/Inventory/DropHandItemsOperator.cs index dd3c45bd46..65b0ef9f03 100644 --- a/Content.Server/AI/Operators/Inventory/DropHandItemsOperator.cs +++ b/Content.Server/AI/Operators/Inventory/DropHandItemsOperator.cs @@ -1,4 +1,3 @@ -using Content.Server.GameObjects; using Content.Server.GameObjects.Components.GUI; using Robust.Shared.Interfaces.GameObjects; diff --git a/Content.Server/AI/Operators/Inventory/EquipEntityOperator.cs b/Content.Server/AI/Operators/Inventory/EquipEntityOperator.cs index 64eafaffd2..9e1348c5a1 100644 --- a/Content.Server/AI/Operators/Inventory/EquipEntityOperator.cs +++ b/Content.Server/AI/Operators/Inventory/EquipEntityOperator.cs @@ -1,4 +1,3 @@ -using Content.Server.GameObjects; using Content.Server.GameObjects.Components.GUI; using Robust.Shared.Interfaces.GameObjects; diff --git a/Content.Server/AI/Operators/Inventory/OpenStorageOperator.cs b/Content.Server/AI/Operators/Inventory/OpenStorageOperator.cs index b27b58c3ea..07eeb3e911 100644 --- a/Content.Server/AI/Operators/Inventory/OpenStorageOperator.cs +++ b/Content.Server/AI/Operators/Inventory/OpenStorageOperator.cs @@ -1,6 +1,5 @@ using Content.Server.AI.Utility; using Content.Server.AI.WorldState.States.Inventory; -using Content.Server.GameObjects.Components; using Content.Server.GameObjects.Components.Items.Storage; using Content.Server.Utility; using Content.Shared.Interfaces.GameObjects.Components; diff --git a/Content.Server/AI/Operators/Inventory/PickupEntityOperator.cs b/Content.Server/AI/Operators/Inventory/PickupEntityOperator.cs index 69061a6382..6b5b438663 100644 --- a/Content.Server/AI/Operators/Inventory/PickupEntityOperator.cs +++ b/Content.Server/AI/Operators/Inventory/PickupEntityOperator.cs @@ -1,5 +1,5 @@ -using Content.Server.GameObjects.Components; using Content.Server.GameObjects.Components.GUI; +using Content.Server.GameObjects.Components.Items.Storage; using Content.Server.GameObjects.EntitySystems.Click; using Content.Server.Utility; using Robust.Shared.Containers; diff --git a/Content.Server/AI/Operators/Inventory/UseItemInHandsOperator.cs b/Content.Server/AI/Operators/Inventory/UseItemInHandsOperator.cs index e8e667270f..130b139ad0 100644 --- a/Content.Server/AI/Operators/Inventory/UseItemInHandsOperator.cs +++ b/Content.Server/AI/Operators/Inventory/UseItemInHandsOperator.cs @@ -1,5 +1,5 @@ -using Content.Server.GameObjects.Components; using Content.Server.GameObjects.Components.GUI; +using Content.Server.GameObjects.Components.Items.Storage; using Robust.Shared.Interfaces.GameObjects; namespace Content.Server.AI.Operators.Inventory diff --git a/Content.Server/AI/Operators/Movement/MoveToEntityOperator.cs b/Content.Server/AI/Operators/Movement/MoveToEntityOperator.cs index ed4a10e692..dd1d2120c8 100644 --- a/Content.Server/AI/Operators/Movement/MoveToEntityOperator.cs +++ b/Content.Server/AI/Operators/Movement/MoveToEntityOperator.cs @@ -1,5 +1,4 @@ using System; -using System.IO; using Content.Server.GameObjects.EntitySystems.AI.Steering; using Robust.Shared.GameObjects.Systems; using Robust.Shared.Interfaces.GameObjects; diff --git a/Content.Server/AI/Utility/Actions/Clothing/Gloves/PickUpGloves.cs b/Content.Server/AI/Utility/Actions/Clothing/Gloves/PickUpGloves.cs index 85df65dbfc..3558bca497 100644 --- a/Content.Server/AI/Utility/Actions/Clothing/Gloves/PickUpGloves.cs +++ b/Content.Server/AI/Utility/Actions/Clothing/Gloves/PickUpGloves.cs @@ -2,13 +2,11 @@ using System; using System.Collections.Generic; using Content.Server.AI.Operators.Sequences; using Content.Server.AI.Utility.Considerations; -using Content.Server.AI.Utility.Considerations.Clothing; using Content.Server.AI.Utility.Considerations.Containers; using Content.Server.AI.Utility.Considerations.Inventory; using Content.Server.AI.Utility.Considerations.Movement; using Content.Server.AI.WorldState; using Content.Server.AI.WorldState.States; -using Content.Shared.GameObjects.Components.Inventory; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.IoC; diff --git a/Content.Server/AI/Utility/Actions/Clothing/Head/EquipHead.cs b/Content.Server/AI/Utility/Actions/Clothing/Head/EquipHead.cs index 7bffe3d92d..8e37b88f5d 100644 --- a/Content.Server/AI/Utility/Actions/Clothing/Head/EquipHead.cs +++ b/Content.Server/AI/Utility/Actions/Clothing/Head/EquipHead.cs @@ -3,11 +3,9 @@ using System.Collections.Generic; using Content.Server.AI.Operators; using Content.Server.AI.Operators.Inventory; using Content.Server.AI.Utility.Considerations; -using Content.Server.AI.Utility.Considerations.Clothing; using Content.Server.AI.Utility.Considerations.Inventory; using Content.Server.AI.WorldState; using Content.Server.AI.WorldState.States; -using Content.Shared.GameObjects.Components.Inventory; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.IoC; diff --git a/Content.Server/AI/Utility/Actions/Clothing/Head/PickUpHead.cs b/Content.Server/AI/Utility/Actions/Clothing/Head/PickUpHead.cs index ba91121254..ca0ee164d6 100644 --- a/Content.Server/AI/Utility/Actions/Clothing/Head/PickUpHead.cs +++ b/Content.Server/AI/Utility/Actions/Clothing/Head/PickUpHead.cs @@ -2,13 +2,11 @@ using System; using System.Collections.Generic; using Content.Server.AI.Operators.Sequences; using Content.Server.AI.Utility.Considerations; -using Content.Server.AI.Utility.Considerations.Clothing; using Content.Server.AI.Utility.Considerations.Containers; using Content.Server.AI.Utility.Considerations.Inventory; using Content.Server.AI.Utility.Considerations.Movement; using Content.Server.AI.WorldState; using Content.Server.AI.WorldState.States; -using Content.Shared.GameObjects.Components.Inventory; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.IoC; diff --git a/Content.Server/AI/Utility/Actions/Clothing/OuterClothing/EquipOuterClothing.cs b/Content.Server/AI/Utility/Actions/Clothing/OuterClothing/EquipOuterClothing.cs index 9955cc49aa..53e83765a1 100644 --- a/Content.Server/AI/Utility/Actions/Clothing/OuterClothing/EquipOuterClothing.cs +++ b/Content.Server/AI/Utility/Actions/Clothing/OuterClothing/EquipOuterClothing.cs @@ -3,11 +3,9 @@ using System.Collections.Generic; using Content.Server.AI.Operators; using Content.Server.AI.Operators.Inventory; using Content.Server.AI.Utility.Considerations; -using Content.Server.AI.Utility.Considerations.Clothing; using Content.Server.AI.Utility.Considerations.Inventory; using Content.Server.AI.WorldState; using Content.Server.AI.WorldState.States; -using Content.Shared.GameObjects.Components.Inventory; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.IoC; diff --git a/Content.Server/AI/Utility/Actions/Clothing/OuterClothing/PickUpOuterClothing.cs b/Content.Server/AI/Utility/Actions/Clothing/OuterClothing/PickUpOuterClothing.cs index 22730f3659..75e72dfbd9 100644 --- a/Content.Server/AI/Utility/Actions/Clothing/OuterClothing/PickUpOuterClothing.cs +++ b/Content.Server/AI/Utility/Actions/Clothing/OuterClothing/PickUpOuterClothing.cs @@ -2,13 +2,11 @@ using System; using System.Collections.Generic; using Content.Server.AI.Operators.Sequences; using Content.Server.AI.Utility.Considerations; -using Content.Server.AI.Utility.Considerations.Clothing; using Content.Server.AI.Utility.Considerations.Containers; using Content.Server.AI.Utility.Considerations.Inventory; using Content.Server.AI.Utility.Considerations.Movement; using Content.Server.AI.WorldState; using Content.Server.AI.WorldState.States; -using Content.Shared.GameObjects.Components.Inventory; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.IoC; diff --git a/Content.Server/AI/Utility/Actions/Clothing/Shoes/EquipShoes.cs b/Content.Server/AI/Utility/Actions/Clothing/Shoes/EquipShoes.cs index 218e218c35..07f0da5f8b 100644 --- a/Content.Server/AI/Utility/Actions/Clothing/Shoes/EquipShoes.cs +++ b/Content.Server/AI/Utility/Actions/Clothing/Shoes/EquipShoes.cs @@ -3,11 +3,9 @@ using System.Collections.Generic; using Content.Server.AI.Operators; using Content.Server.AI.Operators.Inventory; using Content.Server.AI.Utility.Considerations; -using Content.Server.AI.Utility.Considerations.Clothing; using Content.Server.AI.Utility.Considerations.Inventory; using Content.Server.AI.WorldState; using Content.Server.AI.WorldState.States; -using Content.Shared.GameObjects.Components.Inventory; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.IoC; diff --git a/Content.Server/AI/Utility/Actions/Clothing/Shoes/PickUpShoes.cs b/Content.Server/AI/Utility/Actions/Clothing/Shoes/PickUpShoes.cs index 00cd4b1cd9..39559bedb6 100644 --- a/Content.Server/AI/Utility/Actions/Clothing/Shoes/PickUpShoes.cs +++ b/Content.Server/AI/Utility/Actions/Clothing/Shoes/PickUpShoes.cs @@ -2,13 +2,11 @@ using System; using System.Collections.Generic; using Content.Server.AI.Operators.Sequences; using Content.Server.AI.Utility.Considerations; -using Content.Server.AI.Utility.Considerations.Clothing; using Content.Server.AI.Utility.Considerations.Containers; using Content.Server.AI.Utility.Considerations.Inventory; using Content.Server.AI.Utility.Considerations.Movement; using Content.Server.AI.WorldState; using Content.Server.AI.WorldState.States; -using Content.Shared.GameObjects.Components.Inventory; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.IoC; diff --git a/Content.Server/AI/Utility/Actions/Combat/Melee/MeleeWeaponAttackEntity.cs b/Content.Server/AI/Utility/Actions/Combat/Melee/MeleeWeaponAttackEntity.cs index 28335ace75..e0df81467c 100644 --- a/Content.Server/AI/Utility/Actions/Combat/Melee/MeleeWeaponAttackEntity.cs +++ b/Content.Server/AI/Utility/Actions/Combat/Melee/MeleeWeaponAttackEntity.cs @@ -1,7 +1,6 @@ using System; using System.Collections.Generic; using Content.Server.AI.Operators; -using Content.Server.AI.Operators.Combat; using Content.Server.AI.Operators.Combat.Melee; using Content.Server.AI.Operators.Movement; using Content.Server.AI.Utility.Considerations; diff --git a/Content.Server/AI/Utility/Actions/Combat/Melee/PickUpMeleeWeapon.cs b/Content.Server/AI/Utility/Actions/Combat/Melee/PickUpMeleeWeapon.cs index 708afc240e..fed29d402a 100644 --- a/Content.Server/AI/Utility/Actions/Combat/Melee/PickUpMeleeWeapon.cs +++ b/Content.Server/AI/Utility/Actions/Combat/Melee/PickUpMeleeWeapon.cs @@ -4,7 +4,6 @@ using Content.Server.AI.Operators.Sequences; using Content.Server.AI.Utility.Considerations; using Content.Server.AI.Utility.Considerations.Combat.Melee; using Content.Server.AI.Utility.Considerations.Containers; -using Content.Server.AI.Utility.Considerations.Hands; using Content.Server.AI.Utility.Considerations.Movement; using Content.Server.AI.WorldState; using Content.Server.AI.WorldState.States; diff --git a/Content.Server/AI/Utility/Actions/Combat/Melee/UnarmedAttackEntity.cs b/Content.Server/AI/Utility/Actions/Combat/Melee/UnarmedAttackEntity.cs index 5735b884e7..62c15cffd7 100644 --- a/Content.Server/AI/Utility/Actions/Combat/Melee/UnarmedAttackEntity.cs +++ b/Content.Server/AI/Utility/Actions/Combat/Melee/UnarmedAttackEntity.cs @@ -5,7 +5,6 @@ using Content.Server.AI.Operators.Combat.Melee; using Content.Server.AI.Operators.Movement; using Content.Server.AI.Utility.Considerations; using Content.Server.AI.Utility.Considerations.Combat; -using Content.Server.AI.Utility.Considerations.Combat.Melee; using Content.Server.AI.Utility.Considerations.Containers; using Content.Server.AI.Utility.Considerations.Movement; using Content.Server.AI.WorldState; diff --git a/Content.Server/AI/Utility/Actions/IAiUtility.cs b/Content.Server/AI/Utility/Actions/IAiUtility.cs index 679d410cb7..6eef451235 100644 --- a/Content.Server/AI/Utility/Actions/IAiUtility.cs +++ b/Content.Server/AI/Utility/Actions/IAiUtility.cs @@ -1,5 +1,3 @@ -using Content.Server.AI.Utility.AiLogic; - namespace Content.Server.AI.Utility.Actions { public interface IAiUtility diff --git a/Content.Server/AI/Utility/Actions/Idle/WanderAndWait.cs b/Content.Server/AI/Utility/Actions/Idle/WanderAndWait.cs index ce68e46d78..5cb13cea2c 100644 --- a/Content.Server/AI/Utility/Actions/Idle/WanderAndWait.cs +++ b/Content.Server/AI/Utility/Actions/Idle/WanderAndWait.cs @@ -5,17 +5,15 @@ using Content.Server.AI.Operators.Generic; using Content.Server.AI.Operators.Movement; using Content.Server.AI.Utility.Considerations; using Content.Server.AI.Utility.Considerations.ActionBlocker; -using Content.Server.AI.Utility.Considerations.Containers; using Content.Server.AI.WorldState; +using Content.Server.GameObjects.EntitySystems.AI.Pathfinding; using Content.Server.GameObjects.EntitySystems.AI.Pathfinding.Accessible; -using Content.Server.GameObjects.EntitySystems.Pathfinding; using Robust.Shared.GameObjects.Systems; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Interfaces.Map; using Robust.Shared.Interfaces.Random; using Robust.Shared.IoC; using Robust.Shared.Map; -using Robust.Shared.Maths; using Robust.Shared.Random; namespace Content.Server.AI.Utility.Actions.Idle @@ -50,7 +48,7 @@ namespace Content.Server.AI.Utility.Actions.Idle new WaitOperator(waitTime), }); } - + protected override IReadOnlyCollection> GetConsiderations(Blackboard context) { var considerationsManager = IoCManager.Resolve(); @@ -75,7 +73,7 @@ namespace Content.Server.AI.Utility.Actions.Idle { return default; } - + var reachableNodes = new List(); foreach (var region in reachableRegions) diff --git a/Content.Server/AI/Utility/Actions/UtilityAction.cs b/Content.Server/AI/Utility/Actions/UtilityAction.cs index f00ee01ddf..f8be97abaa 100644 --- a/Content.Server/AI/Utility/Actions/UtilityAction.cs +++ b/Content.Server/AI/Utility/Actions/UtilityAction.cs @@ -1,7 +1,6 @@ using System; using System.Collections.Generic; using Content.Server.AI.Operators; -using Content.Server.AI.Utility.Considerations; using Content.Server.AI.WorldState; using Content.Server.AI.WorldState.States.Utility; using Robust.Shared.Interfaces.GameObjects; diff --git a/Content.Server/AI/Utility/AiLogic/UtilityAI.cs b/Content.Server/AI/Utility/AiLogic/UtilityAI.cs index 791727b637..005a30a9bc 100644 --- a/Content.Server/AI/Utility/AiLogic/UtilityAI.cs +++ b/Content.Server/AI/Utility/AiLogic/UtilityAI.cs @@ -2,12 +2,12 @@ using System; using System.Collections.Generic; using System.Threading; using Content.Server.AI.Operators; -using Content.Server.AI.Operators.Generic; using Content.Server.AI.Utility.Actions; using Content.Server.AI.Utility.BehaviorSets; using Content.Server.AI.WorldState; using Content.Server.AI.WorldState.States.Utility; -using Content.Server.GameObjects; +using Content.Server.GameObjects.Components.Damage; +using Content.Server.GameObjects.Components.Mobs; using Content.Server.GameObjects.EntitySystems.AI.LoadBalancer; using Content.Server.GameObjects.EntitySystems.JobQueues; using Robust.Server.AI; @@ -148,7 +148,7 @@ namespace Content.Server.AI.Utility.AiLogic _isDead = false; } } - + private void ReceivedAction() { switch (_actionRequest.Exception) @@ -167,7 +167,7 @@ namespace Content.Server.AI.Utility.AiLogic { return; } - + var currentOp = CurrentAction?.ActionOperators.Peek(); if (currentOp != null && currentOp.HasStartup) { diff --git a/Content.Server/AI/Utility/BehaviorSets/BehaviorSet.cs b/Content.Server/AI/Utility/BehaviorSets/BehaviorSet.cs index 0651885c7e..d5f221a5cd 100644 --- a/Content.Server/AI/Utility/BehaviorSets/BehaviorSet.cs +++ b/Content.Server/AI/Utility/BehaviorSets/BehaviorSet.cs @@ -1,4 +1,3 @@ -using System.Collections; using System.Collections.Generic; using Content.Server.AI.Utility.Actions; using Robust.Shared.Interfaces.GameObjects; diff --git a/Content.Server/AI/Utility/BehaviorSets/HungerBehaviorSet.cs b/Content.Server/AI/Utility/BehaviorSets/HungerBehaviorSet.cs index a9c6117af1..b91b504418 100644 --- a/Content.Server/AI/Utility/BehaviorSets/HungerBehaviorSet.cs +++ b/Content.Server/AI/Utility/BehaviorSets/HungerBehaviorSet.cs @@ -1,6 +1,4 @@ -using System.Collections.Generic; using Content.Server.AI.Utility.Actions; -using Content.Server.AI.Utility.Actions.Nutrition; using Content.Server.AI.Utility.ExpandableActions.Nutrition; using Robust.Shared.Interfaces.GameObjects; diff --git a/Content.Server/AI/Utility/Considerations/Clothing/ClothingInInventoryCon.cs b/Content.Server/AI/Utility/Considerations/Clothing/ClothingInInventoryCon.cs index 5a0dce18f6..961139a648 100644 --- a/Content.Server/AI/Utility/Considerations/Clothing/ClothingInInventoryCon.cs +++ b/Content.Server/AI/Utility/Considerations/Clothing/ClothingInInventoryCon.cs @@ -1,7 +1,7 @@ using Content.Server.AI.WorldState; using Content.Server.AI.WorldState.States.Clothing; using Content.Server.AI.WorldState.States.Inventory; -using Content.Server.GameObjects; +using Content.Server.GameObjects.Components.Items.Clothing; using Content.Shared.GameObjects.Components.Inventory; namespace Content.Server.AI.Utility.Considerations.Clothing diff --git a/Content.Server/AI/Utility/Considerations/Combat/TargetHealthCon.cs b/Content.Server/AI/Utility/Considerations/Combat/TargetHealthCon.cs index 96db4f5f35..8e70bb9200 100644 --- a/Content.Server/AI/Utility/Considerations/Combat/TargetHealthCon.cs +++ b/Content.Server/AI/Utility/Considerations/Combat/TargetHealthCon.cs @@ -1,7 +1,7 @@ using Content.Server.AI.WorldState; using Content.Server.AI.WorldState.States; -using Content.Server.GameObjects; -using Content.Shared.GameObjects; +using Content.Server.GameObjects.Components.Damage; +using Content.Shared.GameObjects.Components.Damage; namespace Content.Server.AI.Utility.Considerations.Combat { diff --git a/Content.Server/AI/Utility/Considerations/Combat/TargetIsCritCon.cs b/Content.Server/AI/Utility/Considerations/Combat/TargetIsCritCon.cs index 0fd1990748..97ed516326 100644 --- a/Content.Server/AI/Utility/Considerations/Combat/TargetIsCritCon.cs +++ b/Content.Server/AI/Utility/Considerations/Combat/TargetIsCritCon.cs @@ -1,6 +1,6 @@ using Content.Server.AI.WorldState; using Content.Server.AI.WorldState.States; -using Content.Server.GameObjects; +using Content.Server.GameObjects.Components.Mobs; namespace Content.Server.AI.Utility.Considerations.Combat { diff --git a/Content.Server/AI/Utility/Considerations/Combat/TargetIsDeadCon.cs b/Content.Server/AI/Utility/Considerations/Combat/TargetIsDeadCon.cs index 8cdf0b520b..e973538e79 100644 --- a/Content.Server/AI/Utility/Considerations/Combat/TargetIsDeadCon.cs +++ b/Content.Server/AI/Utility/Considerations/Combat/TargetIsDeadCon.cs @@ -1,6 +1,6 @@ using Content.Server.AI.WorldState; using Content.Server.AI.WorldState.States; -using Content.Server.GameObjects; +using Content.Server.GameObjects.Components.Mobs; namespace Content.Server.AI.Utility.Considerations.Combat { diff --git a/Content.Server/AI/Utility/Considerations/Containers/TargetAccessibleCon.cs b/Content.Server/AI/Utility/Considerations/Containers/TargetAccessibleCon.cs index 5c017aaa5e..d8e9557966 100644 --- a/Content.Server/AI/Utility/Considerations/Containers/TargetAccessibleCon.cs +++ b/Content.Server/AI/Utility/Considerations/Containers/TargetAccessibleCon.cs @@ -1,9 +1,6 @@ using Content.Server.AI.WorldState; using Content.Server.AI.WorldState.States; -using Content.Server.GameObjects.Components; using Content.Server.GameObjects.Components.Items.Storage; -using Content.Server.GameObjects.Components.Movement; -using Content.Server.GameObjects.EntitySystems.AI.Pathfinding; using Content.Server.GameObjects.EntitySystems.AI.Pathfinding.Accessible; using Content.Shared.GameObjects.EntitySystems; using Robust.Shared.Containers; diff --git a/Content.Server/AI/Utility/Considerations/Hands/FreeHandCon.cs b/Content.Server/AI/Utility/Considerations/Hands/FreeHandCon.cs index b379f46e18..67363574e9 100644 --- a/Content.Server/AI/Utility/Considerations/Hands/FreeHandCon.cs +++ b/Content.Server/AI/Utility/Considerations/Hands/FreeHandCon.cs @@ -1,6 +1,5 @@ using Content.Server.AI.WorldState; using Content.Server.AI.WorldState.States; -using Content.Server.GameObjects; using Content.Server.GameObjects.Components.GUI; namespace Content.Server.AI.Utility.Considerations.Hands diff --git a/Content.Server/AI/Utility/Considerations/Inventory/CanPutTargetInInventoryCon.cs b/Content.Server/AI/Utility/Considerations/Inventory/CanPutTargetInInventoryCon.cs index 706054cb10..c16ca7d86a 100644 --- a/Content.Server/AI/Utility/Considerations/Inventory/CanPutTargetInInventoryCon.cs +++ b/Content.Server/AI/Utility/Considerations/Inventory/CanPutTargetInInventoryCon.cs @@ -2,7 +2,7 @@ using Content.Server.AI.WorldState; using Content.Server.AI.WorldState.States; using Content.Server.AI.WorldState.States.Hands; using Content.Server.AI.WorldState.States.Inventory; -using Content.Server.GameObjects.Components; +using Content.Server.GameObjects.Components.Items.Storage; namespace Content.Server.AI.Utility.Considerations.Inventory { diff --git a/Content.Server/AI/Utility/Considerations/Inventory/TargetInOurInventoryCon.cs b/Content.Server/AI/Utility/Considerations/Inventory/TargetInOurInventoryCon.cs index 100f111a7e..ba00f6303d 100644 --- a/Content.Server/AI/Utility/Considerations/Inventory/TargetInOurInventoryCon.cs +++ b/Content.Server/AI/Utility/Considerations/Inventory/TargetInOurInventoryCon.cs @@ -1,8 +1,7 @@ using Content.Server.AI.WorldState; using Content.Server.AI.WorldState.States; using Content.Server.AI.WorldState.States.Inventory; -using Content.Server.GameObjects; -using Content.Server.GameObjects.Components; +using Content.Server.GameObjects.Components.Items.Storage; namespace Content.Server.AI.Utility.Considerations.Inventory { diff --git a/Content.Server/AI/Utility/ExpandableActions/Clothing/Gloves/EquipAnyGlovesExp.cs b/Content.Server/AI/Utility/ExpandableActions/Clothing/Gloves/EquipAnyGlovesExp.cs index a022113f1b..f828ab89b8 100644 --- a/Content.Server/AI/Utility/ExpandableActions/Clothing/Gloves/EquipAnyGlovesExp.cs +++ b/Content.Server/AI/Utility/ExpandableActions/Clothing/Gloves/EquipAnyGlovesExp.cs @@ -7,7 +7,7 @@ using Content.Server.AI.Utility.Considerations.Clothing; using Content.Server.AI.WorldState; using Content.Server.AI.WorldState.States; using Content.Server.AI.WorldState.States.Inventory; -using Content.Server.GameObjects; +using Content.Server.GameObjects.Components.Items.Clothing; using Content.Shared.GameObjects.Components.Inventory; using Robust.Shared.IoC; diff --git a/Content.Server/AI/Utility/ExpandableActions/Clothing/Gloves/PickUpAnyNearbyGlovesExp.cs b/Content.Server/AI/Utility/ExpandableActions/Clothing/Gloves/PickUpAnyNearbyGlovesExp.cs index 50d584aa69..6128442684 100644 --- a/Content.Server/AI/Utility/ExpandableActions/Clothing/Gloves/PickUpAnyNearbyGlovesExp.cs +++ b/Content.Server/AI/Utility/ExpandableActions/Clothing/Gloves/PickUpAnyNearbyGlovesExp.cs @@ -4,11 +4,10 @@ using Content.Server.AI.Utility.Actions; using Content.Server.AI.Utility.Actions.Clothing.Gloves; using Content.Server.AI.Utility.Considerations; using Content.Server.AI.Utility.Considerations.Clothing; -using Content.Server.AI.Utility.Considerations.Inventory; using Content.Server.AI.WorldState; using Content.Server.AI.WorldState.States; using Content.Server.AI.WorldState.States.Clothing; -using Content.Server.GameObjects; +using Content.Server.GameObjects.Components.Items.Clothing; using Content.Shared.GameObjects.Components.Inventory; using Robust.Shared.IoC; diff --git a/Content.Server/AI/Utility/ExpandableActions/Clothing/Head/EquipAnyHeadExp.cs b/Content.Server/AI/Utility/ExpandableActions/Clothing/Head/EquipAnyHeadExp.cs index a98faf0804..2f05138436 100644 --- a/Content.Server/AI/Utility/ExpandableActions/Clothing/Head/EquipAnyHeadExp.cs +++ b/Content.Server/AI/Utility/ExpandableActions/Clothing/Head/EquipAnyHeadExp.cs @@ -7,7 +7,7 @@ using Content.Server.AI.Utility.Considerations.Clothing; using Content.Server.AI.WorldState; using Content.Server.AI.WorldState.States; using Content.Server.AI.WorldState.States.Inventory; -using Content.Server.GameObjects; +using Content.Server.GameObjects.Components.Items.Clothing; using Content.Shared.GameObjects.Components.Inventory; using Robust.Shared.IoC; diff --git a/Content.Server/AI/Utility/ExpandableActions/Clothing/Head/PickUpAnyNearbyHeadExp.cs b/Content.Server/AI/Utility/ExpandableActions/Clothing/Head/PickUpAnyNearbyHeadExp.cs index f1e3d0e14f..a5642f0944 100644 --- a/Content.Server/AI/Utility/ExpandableActions/Clothing/Head/PickUpAnyNearbyHeadExp.cs +++ b/Content.Server/AI/Utility/ExpandableActions/Clothing/Head/PickUpAnyNearbyHeadExp.cs @@ -4,11 +4,10 @@ using Content.Server.AI.Utility.Actions; using Content.Server.AI.Utility.Actions.Clothing.Head; using Content.Server.AI.Utility.Considerations; using Content.Server.AI.Utility.Considerations.Clothing; -using Content.Server.AI.Utility.Considerations.Inventory; using Content.Server.AI.WorldState; using Content.Server.AI.WorldState.States; using Content.Server.AI.WorldState.States.Clothing; -using Content.Server.GameObjects; +using Content.Server.GameObjects.Components.Items.Clothing; using Content.Shared.GameObjects.Components.Inventory; using Robust.Shared.IoC; diff --git a/Content.Server/AI/Utility/ExpandableActions/Clothing/OuterClothing/EquipAnyOuterClothingExp.cs b/Content.Server/AI/Utility/ExpandableActions/Clothing/OuterClothing/EquipAnyOuterClothingExp.cs index 548a08f774..31aaa0ae94 100644 --- a/Content.Server/AI/Utility/ExpandableActions/Clothing/OuterClothing/EquipAnyOuterClothingExp.cs +++ b/Content.Server/AI/Utility/ExpandableActions/Clothing/OuterClothing/EquipAnyOuterClothingExp.cs @@ -7,7 +7,7 @@ using Content.Server.AI.Utility.Considerations.Clothing; using Content.Server.AI.WorldState; using Content.Server.AI.WorldState.States; using Content.Server.AI.WorldState.States.Inventory; -using Content.Server.GameObjects; +using Content.Server.GameObjects.Components.Items.Clothing; using Content.Shared.GameObjects.Components.Inventory; using Robust.Shared.IoC; diff --git a/Content.Server/AI/Utility/ExpandableActions/Clothing/OuterClothing/PickUpAnyNearbyOuterClothingExp.cs b/Content.Server/AI/Utility/ExpandableActions/Clothing/OuterClothing/PickUpAnyNearbyOuterClothingExp.cs index 29ec45a582..f216285e72 100644 --- a/Content.Server/AI/Utility/ExpandableActions/Clothing/OuterClothing/PickUpAnyNearbyOuterClothingExp.cs +++ b/Content.Server/AI/Utility/ExpandableActions/Clothing/OuterClothing/PickUpAnyNearbyOuterClothingExp.cs @@ -4,11 +4,10 @@ using Content.Server.AI.Utility.Actions; using Content.Server.AI.Utility.Actions.Clothing.OuterClothing; using Content.Server.AI.Utility.Considerations; using Content.Server.AI.Utility.Considerations.Clothing; -using Content.Server.AI.Utility.Considerations.Inventory; using Content.Server.AI.WorldState; using Content.Server.AI.WorldState.States; using Content.Server.AI.WorldState.States.Clothing; -using Content.Server.GameObjects; +using Content.Server.GameObjects.Components.Items.Clothing; using Content.Shared.GameObjects.Components.Inventory; using Robust.Shared.IoC; diff --git a/Content.Server/AI/Utility/ExpandableActions/Clothing/Shoes/EquipAnyShoesExp.cs b/Content.Server/AI/Utility/ExpandableActions/Clothing/Shoes/EquipAnyShoesExp.cs index f02f7abe0f..ab0a5a2a7b 100644 --- a/Content.Server/AI/Utility/ExpandableActions/Clothing/Shoes/EquipAnyShoesExp.cs +++ b/Content.Server/AI/Utility/ExpandableActions/Clothing/Shoes/EquipAnyShoesExp.cs @@ -7,7 +7,7 @@ using Content.Server.AI.Utility.Considerations.Clothing; using Content.Server.AI.WorldState; using Content.Server.AI.WorldState.States; using Content.Server.AI.WorldState.States.Inventory; -using Content.Server.GameObjects; +using Content.Server.GameObjects.Components.Items.Clothing; using Content.Shared.GameObjects.Components.Inventory; using Robust.Shared.IoC; diff --git a/Content.Server/AI/Utility/ExpandableActions/Clothing/Shoes/PickUpAnyNearbyShoesExp.cs b/Content.Server/AI/Utility/ExpandableActions/Clothing/Shoes/PickUpAnyNearbyShoesExp.cs index 8a1fa9429e..0e25c67fb7 100644 --- a/Content.Server/AI/Utility/ExpandableActions/Clothing/Shoes/PickUpAnyNearbyShoesExp.cs +++ b/Content.Server/AI/Utility/ExpandableActions/Clothing/Shoes/PickUpAnyNearbyShoesExp.cs @@ -4,11 +4,10 @@ using Content.Server.AI.Utility.Actions; using Content.Server.AI.Utility.Actions.Clothing.Shoes; using Content.Server.AI.Utility.Considerations; using Content.Server.AI.Utility.Considerations.Clothing; -using Content.Server.AI.Utility.Considerations.Inventory; using Content.Server.AI.WorldState; using Content.Server.AI.WorldState.States; using Content.Server.AI.WorldState.States.Clothing; -using Content.Server.GameObjects; +using Content.Server.GameObjects.Components.Items.Clothing; using Content.Shared.GameObjects.Components.Inventory; using Robust.Shared.IoC; diff --git a/Content.Server/AI/Utility/ExpandableActions/Combat/Melee/EquipMeleeExp.cs b/Content.Server/AI/Utility/ExpandableActions/Combat/Melee/EquipMeleeExp.cs index 1d993bec7b..996ff8c1ec 100644 --- a/Content.Server/AI/Utility/ExpandableActions/Combat/Melee/EquipMeleeExp.cs +++ b/Content.Server/AI/Utility/ExpandableActions/Combat/Melee/EquipMeleeExp.cs @@ -4,7 +4,6 @@ using Content.Server.AI.Utility.Actions; using Content.Server.AI.Utility.Actions.Combat.Melee; using Content.Server.AI.Utility.Considerations; using Content.Server.AI.Utility.Considerations.Combat.Melee; -using Content.Server.AI.Utility.Considerations.Inventory; using Content.Server.AI.WorldState; using Content.Server.AI.WorldState.States; using Content.Server.AI.WorldState.States.Inventory; diff --git a/Content.Server/AI/Utility/ExpandableActions/Combat/Melee/MeleeAttackNearbyPlayerExp.cs b/Content.Server/AI/Utility/ExpandableActions/Combat/Melee/MeleeAttackNearbyPlayerExp.cs index a1ee5543bf..b54aed6274 100644 --- a/Content.Server/AI/Utility/ExpandableActions/Combat/Melee/MeleeAttackNearbyPlayerExp.cs +++ b/Content.Server/AI/Utility/ExpandableActions/Combat/Melee/MeleeAttackNearbyPlayerExp.cs @@ -7,7 +7,7 @@ using Content.Server.AI.Utility.Considerations.Combat.Melee; using Content.Server.AI.Utils; using Content.Server.AI.WorldState; using Content.Server.AI.WorldState.States; -using Content.Server.GameObjects; +using Content.Server.GameObjects.Components.Mobs; using Content.Server.GameObjects.Components.Movement; using Robust.Server.GameObjects; using Robust.Shared.IoC; diff --git a/Content.Server/AI/Utility/ExpandableActions/Combat/Melee/MeleeAttackNearbySpeciesExp.cs b/Content.Server/AI/Utility/ExpandableActions/Combat/Melee/MeleeAttackNearbySpeciesExp.cs index b78bb2812c..29937b0270 100644 --- a/Content.Server/AI/Utility/ExpandableActions/Combat/Melee/MeleeAttackNearbySpeciesExp.cs +++ b/Content.Server/AI/Utility/ExpandableActions/Combat/Melee/MeleeAttackNearbySpeciesExp.cs @@ -1,11 +1,9 @@ -using System; using System.Collections.Generic; using Content.Server.AI.Utility.Actions; using Content.Server.AI.Utility.Actions.Combat.Melee; using Content.Server.AI.WorldState; using Content.Server.AI.WorldState.States; using Content.Server.AI.WorldState.States.Mobs; -using Content.Server.GameObjects.Components.Movement; namespace Content.Server.AI.Utility.ExpandableActions.Combat.Melee { diff --git a/Content.Server/AI/Utility/ExpandableActions/Combat/Melee/UnarmedAttackNearbyPlayerExp.cs b/Content.Server/AI/Utility/ExpandableActions/Combat/Melee/UnarmedAttackNearbyPlayerExp.cs index 0fc6d162b7..74696e13e5 100644 --- a/Content.Server/AI/Utility/ExpandableActions/Combat/Melee/UnarmedAttackNearbyPlayerExp.cs +++ b/Content.Server/AI/Utility/ExpandableActions/Combat/Melee/UnarmedAttackNearbyPlayerExp.cs @@ -7,7 +7,7 @@ using Content.Server.AI.Utility.Considerations.Combat.Melee; using Content.Server.AI.Utils; using Content.Server.AI.WorldState; using Content.Server.AI.WorldState.States; -using Content.Server.GameObjects; +using Content.Server.GameObjects.Components.Mobs; using Content.Server.GameObjects.Components.Movement; using Robust.Server.GameObjects; using Robust.Shared.IoC; @@ -47,4 +47,4 @@ namespace Content.Server.AI.Utility.ExpandableActions.Combat.Melee } } } -} \ No newline at end of file +} diff --git a/Content.Server/AI/WorldState/Blackboard.cs b/Content.Server/AI/WorldState/Blackboard.cs index 3b1d5176e8..833e0a3bf5 100644 --- a/Content.Server/AI/WorldState/Blackboard.cs +++ b/Content.Server/AI/WorldState/Blackboard.cs @@ -1,9 +1,7 @@ using System; using System.Collections.Generic; using Robust.Shared.Interfaces.GameObjects; -using Robust.Shared.Interfaces.Reflection; using Robust.Shared.IoC; -using Robust.Shared.Utility; namespace Content.Server.AI.WorldState { diff --git a/Content.Server/AI/WorldState/StateData.cs b/Content.Server/AI/WorldState/StateData.cs index ba4dfad8fe..684f8e250e 100644 --- a/Content.Server/AI/WorldState/StateData.cs +++ b/Content.Server/AI/WorldState/StateData.cs @@ -1,6 +1,4 @@ using System; -using System.Collections.Generic; -using Content.Server.Interfaces.GameTicking; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Interfaces.Timing; using Robust.Shared.IoC; diff --git a/Content.Server/AI/WorldState/States/Clothing/EquippedClothingState.cs b/Content.Server/AI/WorldState/States/Clothing/EquippedClothingState.cs index 2e91376bab..694697a49b 100644 --- a/Content.Server/AI/WorldState/States/Clothing/EquippedClothingState.cs +++ b/Content.Server/AI/WorldState/States/Clothing/EquippedClothingState.cs @@ -1,5 +1,5 @@ using System.Collections.Generic; -using Content.Server.GameObjects; +using Content.Server.GameObjects.Components.GUI; using Content.Shared.GameObjects.Components.Inventory; using JetBrains.Annotations; using Robust.Shared.Interfaces.GameObjects; diff --git a/Content.Server/AI/WorldState/States/Clothing/NearbyClothingState.cs b/Content.Server/AI/WorldState/States/Clothing/NearbyClothingState.cs index 4d231273fa..c8a654a01c 100644 --- a/Content.Server/AI/WorldState/States/Clothing/NearbyClothingState.cs +++ b/Content.Server/AI/WorldState/States/Clothing/NearbyClothingState.cs @@ -1,7 +1,6 @@ using System.Collections.Generic; using Content.Server.AI.Utils; -using Content.Server.GameObjects; -using Content.Server.GameObjects.Components; +using Content.Server.GameObjects.Components.Items.Clothing; using Content.Server.GameObjects.Components.Items.Storage; using Content.Server.GameObjects.Components.Movement; using JetBrains.Annotations; diff --git a/Content.Server/AI/WorldState/States/Hands/AnyFreeHandState.cs b/Content.Server/AI/WorldState/States/Hands/AnyFreeHandState.cs index 5fcec1f468..fdf61ebb9a 100644 --- a/Content.Server/AI/WorldState/States/Hands/AnyFreeHandState.cs +++ b/Content.Server/AI/WorldState/States/Hands/AnyFreeHandState.cs @@ -1,4 +1,3 @@ -using Content.Server.GameObjects; using Content.Server.GameObjects.Components.GUI; using JetBrains.Annotations; diff --git a/Content.Server/AI/WorldState/States/Hands/FreeHands.cs b/Content.Server/AI/WorldState/States/Hands/FreeHands.cs index 92c846f672..3a8f2e0807 100644 --- a/Content.Server/AI/WorldState/States/Hands/FreeHands.cs +++ b/Content.Server/AI/WorldState/States/Hands/FreeHands.cs @@ -1,5 +1,4 @@ using System.Collections.Generic; -using Content.Server.GameObjects; using Content.Server.GameObjects.Components.GUI; using JetBrains.Annotations; diff --git a/Content.Server/AI/WorldState/States/Hands/HandItemsState.cs b/Content.Server/AI/WorldState/States/Hands/HandItemsState.cs index ea53b121a9..41bb9b5081 100644 --- a/Content.Server/AI/WorldState/States/Hands/HandItemsState.cs +++ b/Content.Server/AI/WorldState/States/Hands/HandItemsState.cs @@ -1,5 +1,4 @@ using System.Collections.Generic; -using Content.Server.GameObjects; using Content.Server.GameObjects.Components.GUI; using JetBrains.Annotations; using Robust.Shared.Interfaces.GameObjects; diff --git a/Content.Server/AI/WorldState/States/Inventory/EquippedEntityState.cs b/Content.Server/AI/WorldState/States/Inventory/EquippedEntityState.cs index f7784368b7..88426963ba 100644 --- a/Content.Server/AI/WorldState/States/Inventory/EquippedEntityState.cs +++ b/Content.Server/AI/WorldState/States/Inventory/EquippedEntityState.cs @@ -1,4 +1,3 @@ -using Content.Server.GameObjects; using Content.Server.GameObjects.Components.GUI; using JetBrains.Annotations; using Robust.Shared.Interfaces.GameObjects; diff --git a/Content.Server/AI/WorldState/States/Inventory/InventoryState.cs b/Content.Server/AI/WorldState/States/Inventory/InventoryState.cs index 26ce5f30af..3f570d58bd 100644 --- a/Content.Server/AI/WorldState/States/Inventory/InventoryState.cs +++ b/Content.Server/AI/WorldState/States/Inventory/InventoryState.cs @@ -1,5 +1,4 @@ using System.Collections.Generic; -using Content.Server.GameObjects; using Content.Server.GameObjects.Components.GUI; using JetBrains.Annotations; using Robust.Shared.Interfaces.GameObjects; diff --git a/Content.Server/AI/WorldState/States/Inventory/LastOpenedStorageState.cs b/Content.Server/AI/WorldState/States/Inventory/LastOpenedStorageState.cs index 973faf3115..0df276ee3a 100644 --- a/Content.Server/AI/WorldState/States/Inventory/LastOpenedStorageState.cs +++ b/Content.Server/AI/WorldState/States/Inventory/LastOpenedStorageState.cs @@ -1,7 +1,6 @@ -using Content.Server.GameObjects.Components; using Content.Server.GameObjects.Components.Items.Storage; using Robust.Shared.Interfaces.GameObjects; -using Logger = Robust.Shared.Log.Logger; +using Robust.Shared.Log; namespace Content.Server.AI.WorldState.States.Inventory { diff --git a/Content.Server/AI/WorldState/States/Mobs/NearbyPlayersState.cs b/Content.Server/AI/WorldState/States/Mobs/NearbyPlayersState.cs index 802ef04258..f1c7bbae1a 100644 --- a/Content.Server/AI/WorldState/States/Mobs/NearbyPlayersState.cs +++ b/Content.Server/AI/WorldState/States/Mobs/NearbyPlayersState.cs @@ -1,5 +1,5 @@ using System.Collections.Generic; -using Content.Server.GameObjects; +using Content.Server.GameObjects.Components.Mobs; using Content.Server.GameObjects.Components.Movement; using JetBrains.Annotations; using Robust.Server.Interfaces.Player; diff --git a/Content.Server/AI/WorldState/States/Mobs/NearbySpeciesState.cs b/Content.Server/AI/WorldState/States/Mobs/NearbySpeciesState.cs index 68ac8fd355..a72786d326 100644 --- a/Content.Server/AI/WorldState/States/Mobs/NearbySpeciesState.cs +++ b/Content.Server/AI/WorldState/States/Mobs/NearbySpeciesState.cs @@ -1,6 +1,6 @@ using System.Collections.Generic; using Content.Server.AI.Utils; -using Content.Server.GameObjects; +using Content.Server.GameObjects.Components.Mobs; using Content.Server.GameObjects.Components.Movement; using JetBrains.Annotations; using Robust.Shared.Interfaces.GameObjects; diff --git a/Content.Server/AI/WorldState/States/Nutrition/NearbyDrinkState.cs b/Content.Server/AI/WorldState/States/Nutrition/NearbyDrinkState.cs index a2be3e46f2..15cd69cda2 100644 --- a/Content.Server/AI/WorldState/States/Nutrition/NearbyDrinkState.cs +++ b/Content.Server/AI/WorldState/States/Nutrition/NearbyDrinkState.cs @@ -1,6 +1,5 @@ using System.Collections.Generic; using Content.Server.AI.Utils; -using Content.Server.GameObjects.Components; using Content.Server.GameObjects.Components.Items.Storage; using Content.Server.GameObjects.Components.Movement; using Content.Server.GameObjects.Components.Nutrition; diff --git a/Content.Server/AI/WorldState/States/Nutrition/NearbyFoodState.cs b/Content.Server/AI/WorldState/States/Nutrition/NearbyFoodState.cs index 168f9c0897..ba44a9d9c5 100644 --- a/Content.Server/AI/WorldState/States/Nutrition/NearbyFoodState.cs +++ b/Content.Server/AI/WorldState/States/Nutrition/NearbyFoodState.cs @@ -1,6 +1,5 @@ using System.Collections.Generic; using Content.Server.AI.Utils; -using Content.Server.GameObjects.Components; using Content.Server.GameObjects.Components.Items.Storage; using Content.Server.GameObjects.Components.Movement; using Content.Server.GameObjects.Components.Nutrition; diff --git a/Content.Server/AI/WorldState/States/Nutrition/ThirstyState.cs b/Content.Server/AI/WorldState/States/Nutrition/ThirstyState.cs index 65877facf2..e8a13e9e17 100644 --- a/Content.Server/AI/WorldState/States/Nutrition/ThirstyState.cs +++ b/Content.Server/AI/WorldState/States/Nutrition/ThirstyState.cs @@ -2,7 +2,6 @@ using System; using Content.Server.GameObjects.Components.Nutrition; using Content.Shared.GameObjects.Components.Nutrition; using JetBrains.Annotations; -using ThirstComponent = Content.Server.GameObjects.Components.Nutrition.ThirstComponent; namespace Content.Server.AI.WorldState.States.Nutrition { diff --git a/Content.Server/Administration/AGhost.cs b/Content.Server/Administration/AGhost.cs index b84847c642..dfe516576b 100644 --- a/Content.Server/Administration/AGhost.cs +++ b/Content.Server/Administration/AGhost.cs @@ -1,12 +1,9 @@ -using System.Timers; -using Content.Server.GameObjects.Components.Observer; +using Content.Server.GameObjects.Components.Observer; using Content.Server.Players; using Robust.Server.Interfaces.Console; using Robust.Server.Interfaces.Player; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.IoC; -using Robust.Shared.Map; -using Timer = Robust.Shared.Timers.Timer; namespace Content.Server.Administration { diff --git a/Content.Server/Administration/ControlMob.cs b/Content.Server/Administration/ControlMob.cs index 8b08f3d99e..317f2d77ee 100644 --- a/Content.Server/Administration/ControlMob.cs +++ b/Content.Server/Administration/ControlMob.cs @@ -1,6 +1,5 @@ using Content.Server.GameObjects.Components.Mobs; using Content.Server.GameObjects.Components.Observer; -using Content.Server.Mobs; using Content.Server.Players; using Robust.Server.Interfaces.Console; using Robust.Server.Interfaces.Player; diff --git a/Content.Server/Administration/DeleteEntitiesWithComponent.cs b/Content.Server/Administration/DeleteEntitiesWithComponent.cs index b476ba3a0d..6abf5a6f08 100644 --- a/Content.Server/Administration/DeleteEntitiesWithComponent.cs +++ b/Content.Server/Administration/DeleteEntitiesWithComponent.cs @@ -1,12 +1,11 @@ -using Robust.Server.Interfaces.Console; +using System; +using System.Collections.Generic; +using Robust.Server.Interfaces.Console; using Robust.Server.Interfaces.Player; using Robust.Shared.GameObjects; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.IoC; using Robust.Shared.Localization; -using System; -using System.Collections.Generic; -using System.Text; namespace Content.Server.Administration { diff --git a/Content.Server/Atmos/Reactions/PhoronFireReaction.cs b/Content.Server/Atmos/Reactions/PhoronFireReaction.cs index 4b9d05e90f..46e8ceec2b 100644 --- a/Content.Server/Atmos/Reactions/PhoronFireReaction.cs +++ b/Content.Server/Atmos/Reactions/PhoronFireReaction.cs @@ -3,7 +3,6 @@ using System; using Content.Server.Interfaces; using Content.Shared.Atmos; using JetBrains.Annotations; -using Robust.Shared.Log; using Robust.Shared.Serialization; namespace Content.Server.Atmos.Reactions diff --git a/Content.Server/Atmos/TileAtmosInfo.cs b/Content.Server/Atmos/TileAtmosInfo.cs index b8bdb70a68..43ed5f129d 100644 --- a/Content.Server/Atmos/TileAtmosInfo.cs +++ b/Content.Server/Atmos/TileAtmosInfo.cs @@ -1,6 +1,4 @@ using System; -using System.Collections.Generic; -using System.Runtime.InteropServices; using Robust.Shared.Maths; using Robust.Shared.ViewVariables; diff --git a/Content.Server/Cargo/CargoOrderDataManager.cs b/Content.Server/Cargo/CargoOrderDataManager.cs index 35fed56a01..fe169ab26d 100644 --- a/Content.Server/Cargo/CargoOrderDataManager.cs +++ b/Content.Server/Cargo/CargoOrderDataManager.cs @@ -1,7 +1,6 @@ -using Content.Server.GameObjects.Components.Cargo; +using System.Collections.Generic; +using Content.Server.GameObjects.Components.Cargo; using Content.Shared.Prototypes.Cargo; -using System; -using System.Collections.Generic; namespace Content.Server.Cargo { diff --git a/Content.Server/Cargo/CargoOrderDatabase.cs b/Content.Server/Cargo/CargoOrderDatabase.cs index 3762822ef5..924a424071 100644 --- a/Content.Server/Cargo/CargoOrderDatabase.cs +++ b/Content.Server/Cargo/CargoOrderDatabase.cs @@ -1,7 +1,7 @@ -using Content.Shared.Prototypes.Cargo; -using Robust.Shared.Localization; -using System.Collections.Generic; +using System.Collections.Generic; using System.Linq; +using Content.Shared.Prototypes.Cargo; +using Robust.Shared.Localization; namespace Content.Server.Cargo { diff --git a/Content.Server/Cargo/ICargoOrderDataManager.cs b/Content.Server/Cargo/ICargoOrderDataManager.cs index 2eefea9f9d..118a4e1f9d 100644 --- a/Content.Server/Cargo/ICargoOrderDataManager.cs +++ b/Content.Server/Cargo/ICargoOrderDataManager.cs @@ -1,5 +1,4 @@ -using System; -using System.Collections.Generic; +using System.Collections.Generic; using Content.Server.GameObjects.Components.Cargo; using Content.Shared.Prototypes.Cargo; diff --git a/Content.Server/Chat/ChatCommands.cs b/Content.Server/Chat/ChatCommands.cs index eed35957da..9d3ff7c995 100644 --- a/Content.Server/Chat/ChatCommands.cs +++ b/Content.Server/Chat/ChatCommands.cs @@ -1,18 +1,18 @@ -using Content.Server.GameObjects; +using System.Linq; +using Content.Server.GameObjects.Components.Damage; +using Content.Server.GameObjects.Components.GUI; +using Content.Server.GameObjects.Components.Items.Storage; using Content.Server.GameObjects.Components.Observer; using Content.Server.Interfaces.Chat; using Content.Server.Interfaces.GameObjects; using Content.Server.Players; -using Content.Shared.GameObjects; +using Content.Shared.GameObjects.Components.Damage; using Robust.Server.Interfaces.Console; using Robust.Server.Interfaces.Player; using Robust.Shared.Enums; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.IoC; using Robust.Shared.Localization; -using System.Linq; -using Content.Server.GameObjects.Components; -using Content.Server.GameObjects.Components.GUI; namespace Content.Server.Chat { diff --git a/Content.Server/Chat/ChatManager.cs b/Content.Server/Chat/ChatManager.cs index 6f79bb9d29..bb33c2c6ca 100644 --- a/Content.Server/Chat/ChatManager.cs +++ b/Content.Server/Chat/ChatManager.cs @@ -1,5 +1,6 @@ using System.Linq; using Content.Server.GameObjects.Components.Observer; +using Content.Server.GameObjects.EntitySystems; using Content.Server.Interfaces; using Content.Server.Interfaces.Chat; using Content.Shared.Chat; @@ -10,15 +11,6 @@ using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Interfaces.Network; using Robust.Shared.IoC; using Robust.Shared.Localization; -using Robust.Shared.Log; -using Microsoft.EntityFrameworkCore.Metadata.Builders; -using System; -using Content.Server.GameObjects.Components; -using System.Collections.Generic; -using Content.Server.GameObjects.Components.Interactable; -using Content.Server.GameObjects.EntitySystems; -using Microsoft.CodeAnalysis.CSharp.Syntax; -using Robust.Shared.Interfaces.Map; namespace Content.Server.Chat { diff --git a/Content.Server/Chemistry/Metabolism/DefaultDrink.cs b/Content.Server/Chemistry/Metabolism/DefaultDrink.cs index 232ea1e108..d604f46fa8 100644 --- a/Content.Server/Chemistry/Metabolism/DefaultDrink.cs +++ b/Content.Server/Chemistry/Metabolism/DefaultDrink.cs @@ -1,5 +1,4 @@ -using System; -using Content.Server.GameObjects.Components.Nutrition; +using Content.Server.GameObjects.Components.Nutrition; using Content.Shared.Chemistry; using Content.Shared.Interfaces.Chemistry; using Robust.Shared.Interfaces.GameObjects; diff --git a/Content.Server/Chemistry/Metabolism/DefaultFood.cs b/Content.Server/Chemistry/Metabolism/DefaultFood.cs index bbf83bc5d8..e240b661b1 100644 --- a/Content.Server/Chemistry/Metabolism/DefaultFood.cs +++ b/Content.Server/Chemistry/Metabolism/DefaultFood.cs @@ -3,7 +3,6 @@ using Content.Shared.Chemistry; using Content.Shared.Interfaces.Chemistry; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Interfaces.Serialization; -using Robust.Shared.IoC; using Robust.Shared.Serialization; namespace Content.Server.Chemistry.Metabolism diff --git a/Content.Server/Chemistry/ReactionEffects/ExplosionReactionEffect.cs b/Content.Server/Chemistry/ReactionEffects/ExplosionReactionEffect.cs index 89f26f2413..3e46751ab2 100644 --- a/Content.Server/Chemistry/ReactionEffects/ExplosionReactionEffect.cs +++ b/Content.Server/Chemistry/ReactionEffects/ExplosionReactionEffect.cs @@ -1,7 +1,7 @@ using System; using Content.Server.Explosions; using Content.Server.GameObjects.Components.Chemistry; -using Content.Shared.Interfaces; +using Content.Server.Interfaces.Chemistry; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Serialization; diff --git a/Content.Server/Chemistry/ReactionPrototype.cs b/Content.Server/Chemistry/ReactionPrototype.cs index 36e2304b16..3cfef8c4d9 100644 --- a/Content.Server/Chemistry/ReactionPrototype.cs +++ b/Content.Server/Chemistry/ReactionPrototype.cs @@ -1,6 +1,6 @@ using System.Collections.Generic; +using Content.Server.Interfaces.Chemistry; using Content.Shared.Chemistry; -using Content.Shared.Interfaces; using Robust.Shared.Interfaces.Serialization; using Robust.Shared.Prototypes; using Robust.Shared.Serialization; diff --git a/Content.Server/EntryPoint.cs b/Content.Server/EntryPoint.cs index 0f9a6bd624..e83771204d 100644 --- a/Content.Server/EntryPoint.cs +++ b/Content.Server/EntryPoint.cs @@ -1,8 +1,7 @@ using Content.Server.AI.Utility.Considerations; - using Content.Server.GameObjects.Components.NodeContainer.NodeGroups; -using Content.Server.GameObjects.Components.NodeContainer.Nodes; +using Content.Server.AI.WorldState; +using Content.Server.GameObjects.Components.NodeContainer.NodeGroups; using Content.Server.Interfaces; -using Content.Server.AI.WorldState; using Content.Server.Interfaces.Chat; using Content.Server.Interfaces.GameTicking; using Content.Server.Interfaces.PDA; diff --git a/Content.Server/Explosions/ExplosionHelper.cs b/Content.Server/Explosions/ExplosionHelper.cs index 4ca487317d..277713bf28 100644 --- a/Content.Server/Explosions/ExplosionHelper.cs +++ b/Content.Server/Explosions/ExplosionHelper.cs @@ -1,7 +1,7 @@ using System; using System.Linq; using Content.Server.GameObjects.Components.Mobs; -using Content.Server.Interfaces.GameObjects.Components.Interaction; +using Content.Server.GameObjects.EntitySystems; using Content.Shared.Maps; using Robust.Server.GameObjects.EntitySystems; using Robust.Server.Interfaces.GameObjects; diff --git a/Content.Server/GameObjects/Components/Access/AccessReaderComponent.cs b/Content.Server/GameObjects/Components/Access/AccessReaderComponent.cs index 194c4e9b65..4ebfcd20bd 100644 --- a/Content.Server/GameObjects/Components/Access/AccessReaderComponent.cs +++ b/Content.Server/GameObjects/Components/Access/AccessReaderComponent.cs @@ -2,9 +2,9 @@ using System; using System.Collections.Generic; using System.Linq; +using Content.Server.GameObjects.Components.GUI; using Content.Server.GameObjects.Components.Items.Storage; using Content.Server.Interfaces; -using Content.Server.Interfaces.GameObjects; using Content.Server.Interfaces.GameObjects.Components.Items; using Content.Shared.GameObjects.Components.Inventory; using JetBrains.Annotations; diff --git a/Content.Server/GameObjects/Components/Access/IdCardConsoleComponent.cs b/Content.Server/GameObjects/Components/Access/IdCardConsoleComponent.cs index 9a799c7716..841b4dd176 100644 --- a/Content.Server/GameObjects/Components/Access/IdCardConsoleComponent.cs +++ b/Content.Server/GameObjects/Components/Access/IdCardConsoleComponent.cs @@ -1,5 +1,6 @@ using System.Collections.Generic; using System.Linq; +using Content.Server.GameObjects.Components.Items.Storage; using Content.Server.Interfaces; using Content.Server.Interfaces.GameObjects.Components.Items; using Content.Shared.Access; diff --git a/Content.Server/GameObjects/Components/Access/PresetIdCardComponent.cs b/Content.Server/GameObjects/Components/Access/PresetIdCardComponent.cs index 67c6d08a76..fef2f41022 100644 --- a/Content.Server/GameObjects/Components/Access/PresetIdCardComponent.cs +++ b/Content.Server/GameObjects/Components/Access/PresetIdCardComponent.cs @@ -1,5 +1,5 @@ #nullable enable -using Content.Shared.Jobs; +using Content.Shared.Roles; using Robust.Server.Interfaces.GameObjects; using Robust.Shared.GameObjects; using Robust.Shared.IoC; diff --git a/Content.Server/GameObjects/Components/Atmos/AirtightComponent.cs b/Content.Server/GameObjects/Components/Atmos/AirtightComponent.cs index 649d3dd34e..478dd540cb 100644 --- a/Content.Server/GameObjects/Components/Atmos/AirtightComponent.cs +++ b/Content.Server/GameObjects/Components/Atmos/AirtightComponent.cs @@ -1,11 +1,9 @@ using System; -using Content.Server.Atmos; using Content.Server.GameObjects.EntitySystems; using Robust.Server.Interfaces.GameObjects; using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Components.Transform; using Robust.Shared.GameObjects.Systems; -using Robust.Shared.IoC; using Robust.Shared.Map; using Robust.Shared.Serialization; using Robust.Shared.ViewVariables; diff --git a/Content.Server/GameObjects/Components/Atmos/BarotraumaComponent.cs b/Content.Server/GameObjects/Components/Atmos/BarotraumaComponent.cs index cd2066d99c..4beaa374b1 100644 --- a/Content.Server/GameObjects/Components/Atmos/BarotraumaComponent.cs +++ b/Content.Server/GameObjects/Components/Atmos/BarotraumaComponent.cs @@ -1,10 +1,11 @@ using System; using System.Runtime.CompilerServices; +using Content.Server.GameObjects.Components.Damage; using Content.Server.GameObjects.Components.Mobs; using Content.Server.GameObjects.EntitySystems; using Content.Server.Interfaces.GameObjects; using Content.Shared.Atmos; -using Content.Shared.GameObjects; +using Content.Shared.GameObjects.Components.Damage; using Content.Shared.GameObjects.Components.Mobs; using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Systems; diff --git a/Content.Server/GameObjects/Components/Atmos/GasAnalyzerComponent.cs b/Content.Server/GameObjects/Components/Atmos/GasAnalyzerComponent.cs index 777d238060..066bc0940a 100644 --- a/Content.Server/GameObjects/Components/Atmos/GasAnalyzerComponent.cs +++ b/Content.Server/GameObjects/Components/Atmos/GasAnalyzerComponent.cs @@ -1,8 +1,8 @@ #nullable enable +using System.Collections.Generic; using Content.Server.GameObjects.EntitySystems; using Content.Server.Interfaces; using Content.Server.Interfaces.GameObjects.Components.Items; -using Content.Server.Utility; using Content.Shared.Atmos; using Content.Shared.GameObjects.Components; using Content.Shared.GameObjects.EntitySystems; @@ -16,8 +16,6 @@ using Robust.Shared.Interfaces.Map; using Robust.Shared.IoC; using Robust.Shared.Localization; using Robust.Shared.Map; -using Robust.Shared.Maths; -using System.Collections.Generic; namespace Content.Server.GameObjects.Components.Atmos { diff --git a/Content.Server/GameObjects/Components/Buckle/BuckleComponent.cs b/Content.Server/GameObjects/Components/Buckle/BuckleComponent.cs index 87bf2ca6ab..5c9870c53f 100644 --- a/Content.Server/GameObjects/Components/Buckle/BuckleComponent.cs +++ b/Content.Server/GameObjects/Components/Buckle/BuckleComponent.cs @@ -7,11 +7,11 @@ using Content.Server.GameObjects.Components.Strap; using Content.Server.Interfaces; using Content.Server.Mobs; using Content.Server.Utility; -using Content.Shared.GameObjects; using Content.Shared.GameObjects.Components.Buckle; using Content.Shared.GameObjects.Components.Mobs; using Content.Shared.GameObjects.Components.Strap; using Content.Shared.GameObjects.EntitySystems; +using Content.Shared.GameObjects.Verbs; using Content.Shared.Interfaces.GameObjects.Components; using Robust.Server.GameObjects; using Robust.Server.GameObjects.EntitySystemMessages; diff --git a/Content.Server/GameObjects/Components/Cargo/GalacticMarketComponent.cs b/Content.Server/GameObjects/Components/Cargo/GalacticMarketComponent.cs index 5f4ff15e26..2bbbcc2618 100644 --- a/Content.Server/GameObjects/Components/Cargo/GalacticMarketComponent.cs +++ b/Content.Server/GameObjects/Components/Cargo/GalacticMarketComponent.cs @@ -1,10 +1,5 @@ using Content.Shared.GameObjects.Components.Cargo; using Robust.Shared.GameObjects; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; namespace Content.Server.GameObjects.Components.Cargo { diff --git a/Content.Server/GameObjects/Components/Chemistry/ChemMasterComponent.cs b/Content.Server/GameObjects/Components/Chemistry/ChemMasterComponent.cs index 4f20a0c4e9..68551cc0e2 100644 --- a/Content.Server/GameObjects/Components/Chemistry/ChemMasterComponent.cs +++ b/Content.Server/GameObjects/Components/Chemistry/ChemMasterComponent.cs @@ -1,30 +1,30 @@ using System; using System.Linq; using Content.Server.GameObjects.Components.GUI; -using Content.Server.Interfaces.GameObjects.Components.Interaction; +using Content.Server.GameObjects.Components.Items.Storage; +using Content.Server.GameObjects.Components.Power.ApcNetComponents; +using Content.Server.GameObjects.EntitySystems; using Content.Server.Interfaces; -using Content.Server.Interfaces.GameObjects; +using Content.Server.Interfaces.GameObjects.Components.Items; using Content.Shared.Chemistry; -using Content.Shared.GameObjects.Components.Chemistry; +using Content.Shared.GameObjects.Components.Chemistry.ChemMaster; using Content.Shared.GameObjects.EntitySystems; +using Content.Shared.Interfaces.GameObjects.Components; using Robust.Server.GameObjects.Components.Container; using Robust.Server.GameObjects.Components.UserInterface; +using Robust.Server.GameObjects.EntitySystems; using Robust.Server.Interfaces.GameObjects; using Robust.Shared.Audio; using Robust.Shared.GameObjects; +using Robust.Shared.GameObjects.Systems; using Robust.Shared.Interfaces.GameObjects; +using Robust.Shared.Interfaces.Random; using Robust.Shared.IoC; using Robust.Shared.Localization; -using Robust.Shared.Serialization; -using Robust.Shared.ViewVariables; -using Robust.Server.GameObjects.EntitySystems; -using Robust.Shared.GameObjects.Systems; -using Content.Server.GameObjects.Components.Power.ApcNetComponents; -using Content.Server.Interfaces.GameObjects.Components.Items; -using Content.Shared.Interfaces.GameObjects.Components; -using Robust.Shared.Interfaces.Random; using Robust.Shared.Maths; using Robust.Shared.Random; +using Robust.Shared.Serialization; +using Robust.Shared.ViewVariables; namespace Content.Server.GameObjects.Components.Chemistry { diff --git a/Content.Server/GameObjects/Components/Chemistry/ReagentDispenserComponent.cs b/Content.Server/GameObjects/Components/Chemistry/ReagentDispenserComponent.cs index a9c384dafb..ea864a4b40 100644 --- a/Content.Server/GameObjects/Components/Chemistry/ReagentDispenserComponent.cs +++ b/Content.Server/GameObjects/Components/Chemistry/ReagentDispenserComponent.cs @@ -1,27 +1,28 @@ using System; using System.Linq; using Content.Server.GameObjects.Components.GUI; -using Content.Server.Interfaces.GameObjects.Components.Interaction; +using Content.Server.GameObjects.Components.Items.Storage; +using Content.Server.GameObjects.Components.Power.ApcNetComponents; +using Content.Server.GameObjects.EntitySystems; using Content.Server.Interfaces; +using Content.Server.Interfaces.GameObjects.Components.Items; using Content.Shared.Chemistry; -using Content.Shared.GameObjects.Components.Chemistry; +using Content.Shared.GameObjects.Components.Chemistry.ReagentDispenser; using Content.Shared.GameObjects.EntitySystems; +using Content.Shared.Interfaces.GameObjects.Components; using Robust.Server.GameObjects.Components.Container; using Robust.Server.GameObjects.Components.UserInterface; +using Robust.Server.GameObjects.EntitySystems; using Robust.Server.Interfaces.GameObjects; using Robust.Shared.Audio; using Robust.Shared.GameObjects; +using Robust.Shared.GameObjects.Systems; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.IoC; using Robust.Shared.Localization; using Robust.Shared.Prototypes; using Robust.Shared.Serialization; using Robust.Shared.ViewVariables; -using Robust.Server.GameObjects.EntitySystems; -using Robust.Shared.GameObjects.Systems; -using Content.Server.GameObjects.Components.Power.ApcNetComponents; -using Content.Shared.Interfaces.GameObjects.Components; -using Content.Server.Interfaces.GameObjects.Components.Items; namespace Content.Server.GameObjects.Components.Chemistry { diff --git a/Content.Server/GameObjects/Components/Chemistry/SolutionComponent.cs b/Content.Server/GameObjects/Components/Chemistry/SolutionComponent.cs index ed4d9df3f6..5218f996ce 100644 --- a/Content.Server/GameObjects/Components/Chemistry/SolutionComponent.cs +++ b/Content.Server/GameObjects/Components/Chemistry/SolutionComponent.cs @@ -1,12 +1,17 @@ -using Content.Server.Chemistry; -using Content.Server.Interfaces.GameObjects.Components.Interaction; +using System.Collections.Generic; +using System.Linq; +using Content.Server.Chemistry; +using Content.Server.GameObjects.Components.GUI; +using Content.Server.GameObjects.EntitySystems; using Content.Shared.Chemistry; -using Content.Shared.GameObjects; using Content.Shared.GameObjects.Components.Chemistry; +using Content.Shared.GameObjects.EntitySystems; +using Content.Shared.GameObjects.Verbs; using Content.Shared.Utility; using Robust.Server.GameObjects; using Robust.Server.GameObjects.EntitySystems; using Robust.Shared.GameObjects; +using Robust.Shared.GameObjects.Systems; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.IoC; using Robust.Shared.Localization; @@ -15,12 +20,6 @@ using Robust.Shared.Prototypes; using Robust.Shared.Serialization; using Robust.Shared.Utility; using Robust.Shared.ViewVariables; -using System.Collections.Generic; -using System.Linq; -using Content.Server.GameObjects.Components.GUI; -using Content.Shared.GameObjects.EntitySystems; -using Robust.Shared.GameObjects.Systems; -using Content.Server.GameObjects.EntitySystems.Click; namespace Content.Server.GameObjects.Components.Chemistry { diff --git a/Content.Server/GameObjects/Components/Chemistry/TransformableContainerComponent.cs b/Content.Server/GameObjects/Components/Chemistry/TransformableContainerComponent.cs index 048eb685a1..94d18c734e 100644 --- a/Content.Server/GameObjects/Components/Chemistry/TransformableContainerComponent.cs +++ b/Content.Server/GameObjects/Components/Chemistry/TransformableContainerComponent.cs @@ -1,4 +1,4 @@ -using Content.Server.Interfaces.GameObjects.Components.Interaction; +using Content.Server.GameObjects.EntitySystems; using Content.Shared.Chemistry; using Robust.Server.GameObjects; using Robust.Shared.GameObjects; diff --git a/Content.Server/GameObjects/Components/Chemistry/VaporComponent.cs b/Content.Server/GameObjects/Components/Chemistry/VaporComponent.cs index dd5fea942b..cc477cd8e9 100644 --- a/Content.Server/GameObjects/Components/Chemistry/VaporComponent.cs +++ b/Content.Server/GameObjects/Components/Chemistry/VaporComponent.cs @@ -1,27 +1,15 @@ -using Content.Server.GameObjects.Components.Fluids; +using System.Linq; +using Content.Server.GameObjects.Components.Fluids; using Content.Shared.Chemistry; using Content.Shared.Physics; -using Microsoft.CodeAnalysis.CSharp.Syntax; -using Microsoft.EntityFrameworkCore.Update.Internal; -using Robust.Server.GameObjects; using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Components; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Interfaces.Map; using Robust.Shared.IoC; -using Robust.Shared.Map; using Robust.Shared.Maths; -using Robust.Shared.Physics; using Robust.Shared.Serialization; -using Robust.Shared.Timers; using Robust.Shared.ViewVariables; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Reflection; -using System.Text; -using System.Threading; -using Timer = Robust.Shared.Timers.Timer; namespace Content.Server.GameObjects.Components.Chemistry { diff --git a/Content.Server/GameObjects/Components/Command/CommunicationsConsoleComponent.cs b/Content.Server/GameObjects/Components/Command/CommunicationsConsoleComponent.cs index 53b2fa5675..d982b1fb06 100644 --- a/Content.Server/GameObjects/Components/Command/CommunicationsConsoleComponent.cs +++ b/Content.Server/GameObjects/Components/Command/CommunicationsConsoleComponent.cs @@ -1,5 +1,5 @@ using Content.Server.GameObjects.Components.Power.ApcNetComponents; -using Content.Server.Interfaces.GameObjects.Components.Interaction; +using Content.Server.GameObjects.EntitySystems; using Content.Shared.GameObjects.Components.Command; using Content.Shared.Interfaces.GameObjects.Components; using Robust.Server.GameObjects.Components.UserInterface; diff --git a/Content.Server/GameObjects/Components/Construction/ConstructionComponent.cs b/Content.Server/GameObjects/Components/Construction/ConstructionComponent.cs index 49cd4cbeb8..8e5ca778a1 100644 --- a/Content.Server/GameObjects/Components/Construction/ConstructionComponent.cs +++ b/Content.Server/GameObjects/Components/Construction/ConstructionComponent.cs @@ -1,5 +1,4 @@ -using Content.Server.GameObjects.EntitySystems.Click; -using Content.Shared.Construction; +using Content.Shared.Construction; using Content.Shared.GameObjects.EntitySystems; using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Systems; diff --git a/Content.Server/GameObjects/Components/Conveyor/ConveyorComponent.cs b/Content.Server/GameObjects/Components/Conveyor/ConveyorComponent.cs index 13314712cb..6d6a192359 100644 --- a/Content.Server/GameObjects/Components/Conveyor/ConveyorComponent.cs +++ b/Content.Server/GameObjects/Components/Conveyor/ConveyorComponent.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Linq; using Content.Server.GameObjects.Components.Interactable; +using Content.Server.GameObjects.Components.Items.Storage; using Content.Server.GameObjects.Components.Power.ApcNetComponents; using Content.Server.GameObjects.EntitySystems; using Content.Shared.GameObjects.Components.Conveyor; diff --git a/Content.Server/GameObjects/Components/Damage/BreakableComponent.cs b/Content.Server/GameObjects/Components/Damage/BreakableComponent.cs index 226abbc3ab..0a9e53e03a 100644 --- a/Content.Server/GameObjects/Components/Damage/BreakableComponent.cs +++ b/Content.Server/GameObjects/Components/Damage/BreakableComponent.cs @@ -1,7 +1,7 @@ using System.Collections.Generic; -using Content.Server.Interfaces.GameObjects.Components.Interaction; -using Content.Server.Interfaces; -using Content.Shared.GameObjects; +using Content.Server.GameObjects.EntitySystems; +using Content.Server.Interfaces.GameObjects; +using Content.Shared.GameObjects.Components.Damage; using Robust.Shared.GameObjects; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Interfaces.Random; diff --git a/Content.Server/GameObjects/Components/Damage/DamageOnHighSpeedImpactComponent.cs b/Content.Server/GameObjects/Components/Damage/DamageOnHighSpeedImpactComponent.cs index 2d5fc7cfdc..4e5b4169b2 100644 --- a/Content.Server/GameObjects/Components/Damage/DamageOnHighSpeedImpactComponent.cs +++ b/Content.Server/GameObjects/Components/Damage/DamageOnHighSpeedImpactComponent.cs @@ -1,9 +1,7 @@ using Content.Server.GameObjects.Components.Mobs; -using Content.Server.Interfaces.GameObjects; using Content.Shared.Audio; -using Content.Shared.GameObjects; +using Content.Shared.GameObjects.Components.Damage; using Robust.Server.GameObjects.EntitySystems; -using Robust.Shared.Audio; using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Components; using Robust.Shared.GameObjects.Systems; diff --git a/Content.Server/GameObjects/Components/Damage/DamageOnToolInteractComponent.cs b/Content.Server/GameObjects/Components/Damage/DamageOnToolInteractComponent.cs index fb3a546d7e..836dd9d000 100644 --- a/Content.Server/GameObjects/Components/Damage/DamageOnToolInteractComponent.cs +++ b/Content.Server/GameObjects/Components/Damage/DamageOnToolInteractComponent.cs @@ -1,9 +1,10 @@ -using Content.Server.GameObjects.Components.Interactable; +using System.Collections.Generic; +using Content.Server.GameObjects.Components.Interactable; +using Content.Shared.GameObjects.Components.Damage; using Content.Shared.GameObjects.Components.Interactable; +using Content.Shared.Interfaces.GameObjects.Components; using Robust.Shared.GameObjects; using Robust.Shared.Serialization; -using System.Collections.Generic; -using Content.Shared.Interfaces.GameObjects.Components; namespace Content.Server.GameObjects.Components.Damage { @@ -56,9 +57,9 @@ namespace Content.Server.GameObjects.Components.Damage { if (eventArgs.Target.TryGetComponent(out var damageable)) { - if(tool.HasQuality(ToolQuality.Welding)) damageable.TakeDamage(Shared.GameObjects.DamageType.Heat, Damage, eventArgs.Using, eventArgs.User); + if(tool.HasQuality(ToolQuality.Welding)) damageable.TakeDamage(DamageType.Heat, Damage, eventArgs.Using, eventArgs.User); else - damageable.TakeDamage(Shared.GameObjects.DamageType.Brute, Damage, eventArgs.Using, eventArgs.User); + damageable.TakeDamage(DamageType.Brute, Damage, eventArgs.Using, eventArgs.User); return true; } return false; diff --git a/Content.Server/GameObjects/Components/Damage/DamageThreshold.cs b/Content.Server/GameObjects/Components/Damage/DamageThreshold.cs index 8cf06a9103..1efd2ba7a4 100644 --- a/Content.Server/GameObjects/Components/Damage/DamageThreshold.cs +++ b/Content.Server/GameObjects/Components/Damage/DamageThreshold.cs @@ -1,9 +1,8 @@ using System; -using Content.Shared.GameObjects; -using JetBrains.Annotations; +using Content.Shared.GameObjects.Components.Damage; using Robust.Shared.Interfaces.GameObjects; -namespace Content.Server.GameObjects +namespace Content.Server.GameObjects.Components.Damage { /// /// Triggers an event when values rise above or drop below this threshold diff --git a/Content.Server/GameObjects/Components/Damage/DamageableComponent.cs b/Content.Server/GameObjects/Components/Damage/DamageableComponent.cs index dd378cfdee..613355bce2 100644 --- a/Content.Server/GameObjects/Components/Damage/DamageableComponent.cs +++ b/Content.Server/GameObjects/Components/Damage/DamageableComponent.cs @@ -1,15 +1,15 @@ using System; using System.Collections.Generic; using System.Linq; -using Content.Server.Interfaces; using Content.Server.Interfaces.GameObjects; -using Content.Shared.GameObjects; +using Content.Server.Interfaces.GameObjects.Components.Damage; +using Content.Shared.GameObjects.Components.Damage; using Robust.Shared.GameObjects; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Serialization; using Robust.Shared.ViewVariables; -namespace Content.Server.GameObjects +namespace Content.Server.GameObjects.Components.Damage { //TODO: add support for component add/remove diff --git a/Content.Server/GameObjects/Components/Damage/DestructibleComponent.cs b/Content.Server/GameObjects/Components/Damage/DestructibleComponent.cs index 4a34bc35a0..86a7abb03f 100644 --- a/Content.Server/GameObjects/Components/Damage/DestructibleComponent.cs +++ b/Content.Server/GameObjects/Components/Damage/DestructibleComponent.cs @@ -1,7 +1,7 @@ using System.Collections.Generic; -using Content.Server.Interfaces.GameObjects.Components.Interaction; -using Content.Server.Interfaces; -using Content.Shared.GameObjects; +using Content.Server.GameObjects.EntitySystems; +using Content.Server.Interfaces.GameObjects; +using Content.Shared.GameObjects.Components.Damage; using Robust.Server.GameObjects.EntitySystems; using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Systems; @@ -12,7 +12,7 @@ using Robust.Shared.Random; using Robust.Shared.Serialization; using Robust.Shared.ViewVariables; -namespace Content.Server.GameObjects.Components.Destructible +namespace Content.Server.GameObjects.Components.Damage { /// /// Deletes the entity once a certain damage threshold has been reached. diff --git a/Content.Server/GameObjects/Components/Damage/ResistanceSet.cs b/Content.Server/GameObjects/Components/Damage/ResistanceSet.cs index 982e614a15..e9a5e941a1 100644 --- a/Content.Server/GameObjects/Components/Damage/ResistanceSet.cs +++ b/Content.Server/GameObjects/Components/Damage/ResistanceSet.cs @@ -1,11 +1,11 @@ using System; using System.Collections.Generic; -using Content.Shared.GameObjects; +using Content.Shared.GameObjects.Components.Damage; using Robust.Shared.Interfaces.Serialization; using Robust.Shared.Serialization; using Robust.Shared.ViewVariables; -namespace Content.Server.GameObjects +namespace Content.Server.GameObjects.Components.Damage { /// /// Resistance set used by damageable objects. @@ -35,7 +35,7 @@ namespace Content.Server.GameObjects { _resistances[damageType] = resistanceSetting; }); - } + } } /// diff --git a/Content.Server/GameObjects/Components/Disposal/DisposalCommands.cs b/Content.Server/GameObjects/Components/Disposal/DisposalCommands.cs index 51020360a7..5401182b5b 100644 --- a/Content.Server/GameObjects/Components/Disposal/DisposalCommands.cs +++ b/Content.Server/GameObjects/Components/Disposal/DisposalCommands.cs @@ -1,5 +1,4 @@ #nullable enable -using Content.Server.Interfaces; using Robust.Server.Interfaces.Console; using Robust.Server.Interfaces.Player; using Robust.Shared.GameObjects; diff --git a/Content.Server/GameObjects/Components/Disposal/DisposalHolderComponent.cs b/Content.Server/GameObjects/Components/Disposal/DisposalHolderComponent.cs index 8099c291a0..f74eecb284 100644 --- a/Content.Server/GameObjects/Components/Disposal/DisposalHolderComponent.cs +++ b/Content.Server/GameObjects/Components/Disposal/DisposalHolderComponent.cs @@ -1,5 +1,7 @@ #nullable enable using System.Linq; +using Content.Server.GameObjects.Components.Items.Storage; +using Content.Server.GameObjects.Components.Mobs; using Robust.Server.GameObjects.Components.Container; using Robust.Shared.Containers; using Robust.Shared.GameObjects; diff --git a/Content.Server/GameObjects/Components/Disposal/DisposalTubeComponent.cs b/Content.Server/GameObjects/Components/Disposal/DisposalTubeComponent.cs index ed953b4e70..9f9d0efe21 100644 --- a/Content.Server/GameObjects/Components/Disposal/DisposalTubeComponent.cs +++ b/Content.Server/GameObjects/Components/Disposal/DisposalTubeComponent.cs @@ -1,9 +1,9 @@ #nullable enable using System; using System.Linq; -using Content.Server.Interfaces.GameObjects.Components.Interaction; -using Content.Shared.GameObjects; +using Content.Server.GameObjects.EntitySystems; using Content.Shared.GameObjects.Components.Disposal; +using Content.Shared.GameObjects.Verbs; using Content.Shared.Interfaces; using Robust.Server.Console; using Robust.Server.GameObjects; diff --git a/Content.Server/GameObjects/Components/Disposal/DisposalUnitComponent.cs b/Content.Server/GameObjects/Components/Disposal/DisposalUnitComponent.cs index ffc177fd15..bc4d887457 100644 --- a/Content.Server/GameObjects/Components/Disposal/DisposalUnitComponent.cs +++ b/Content.Server/GameObjects/Components/Disposal/DisposalUnitComponent.cs @@ -4,12 +4,14 @@ using System.Collections.Generic; using System.Linq; using System.Threading; using Content.Server.GameObjects.Components.GUI; +using Content.Server.GameObjects.Components.Items.Storage; +using Content.Server.GameObjects.Components.Mobs; using Content.Server.GameObjects.Components.Power.ApcNetComponents; using Content.Server.Interfaces; using Content.Server.Interfaces.GameObjects.Components.Items; -using Content.Shared.GameObjects; using Content.Shared.GameObjects.Components.Disposal; using Content.Shared.GameObjects.EntitySystems; +using Content.Shared.GameObjects.Verbs; using Content.Shared.Interfaces.GameObjects.Components; using Robust.Server.GameObjects; using Robust.Server.GameObjects.Components.Container; diff --git a/Content.Server/GameObjects/Components/DoAfterComponent.cs b/Content.Server/GameObjects/Components/DoAfterComponent.cs index 4222363af8..d77fc080d0 100644 --- a/Content.Server/GameObjects/Components/DoAfterComponent.cs +++ b/Content.Server/GameObjects/Components/DoAfterComponent.cs @@ -1,6 +1,6 @@ #nullable enable using System.Collections.Generic; -using Content.Server.GameObjects.EntitySystems; +using Content.Server.GameObjects.EntitySystems.DoAfter; using Content.Shared.GameObjects.Components; using Robust.Server.GameObjects; using Robust.Server.Interfaces.GameObjects; @@ -38,20 +38,20 @@ namespace Content.Server.GameObjects.Components { return; } - + foreach (var (doAfter, id) in _doAfters) { // THE ALMIGHTY PYRAMID var message = new DoAfterMessage( - id, + id, doAfter.UserGrid, doAfter.TargetGrid, - doAfter.StartTime, - doAfter.EventArgs.Delay, - doAfter.EventArgs.BreakOnUserMove, + doAfter.StartTime, + doAfter.EventArgs.Delay, + doAfter.EventArgs.BreakOnUserMove, doAfter.EventArgs.BreakOnTargetMove, doAfter.EventArgs.Target?.Uid ?? EntityUid.Invalid); - + SendNetworkMessage(message, connectedClient); } } @@ -59,7 +59,7 @@ namespace Content.Server.GameObjects.Components private bool TryGetConnectedClient(out INetChannel? connectedClient) { connectedClient = null; - + if (!Owner.TryGetComponent(out IActorComponent actorComponent)) { return false; @@ -81,15 +81,15 @@ namespace Content.Server.GameObjects.Components if (TryGetConnectedClient(out var connectedClient)) { var message = new DoAfterMessage( - _runningIndex, + _runningIndex, doAfter.UserGrid, doAfter.TargetGrid, - doAfter.StartTime, - doAfter.EventArgs.Delay, - doAfter.EventArgs.BreakOnUserMove, + doAfter.StartTime, + doAfter.EventArgs.Delay, + doAfter.EventArgs.BreakOnUserMove, doAfter.EventArgs.BreakOnTargetMove, doAfter.EventArgs.Target?.Uid ?? EntityUid.Invalid); - + SendNetworkMessage(message, connectedClient); } @@ -108,7 +108,7 @@ namespace Content.Server.GameObjects.Components var message = new CancelledDoAfterMessage(index); SendNetworkMessage(message, connectedClient); } - + _doAfters.Remove(doAfter); } @@ -127,4 +127,4 @@ namespace Content.Server.GameObjects.Components _doAfters.Remove(doAfter); } } -} \ No newline at end of file +} diff --git a/Content.Server/GameObjects/Components/Doors/ServerDoorComponent.cs b/Content.Server/GameObjects/Components/Doors/ServerDoorComponent.cs index 8b1ab391c7..bcd49e5c89 100644 --- a/Content.Server/GameObjects/Components/Doors/ServerDoorComponent.cs +++ b/Content.Server/GameObjects/Components/Doors/ServerDoorComponent.cs @@ -1,10 +1,12 @@ using System; using System.Linq; +using System.Threading; using Content.Server.GameObjects.Components.Access; using Content.Server.GameObjects.Components.Atmos; +using Content.Server.GameObjects.Components.Damage; using Content.Server.GameObjects.Components.GUI; using Content.Server.GameObjects.Components.Mobs; -using Content.Server.Interfaces.GameObjects; +using Content.Shared.GameObjects.Components.Damage; using Content.Shared.GameObjects.Components.Doors; using Content.Shared.GameObjects.Components.Movement; using Content.Shared.Interfaces.GameObjects.Components; @@ -17,11 +19,10 @@ using Robust.Shared.GameObjects.Systems; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Maths; using Robust.Shared.Serialization; -using Robust.Shared.Timers; using Robust.Shared.ViewVariables; -using CancellationTokenSource = System.Threading.CancellationTokenSource; +using Timer = Robust.Shared.Timers.Timer; -namespace Content.Server.GameObjects +namespace Content.Server.GameObjects.Components.Doors { [RegisterComponent] [ComponentReference(typeof(IActivate))] @@ -237,7 +238,7 @@ namespace Content.Server.GameObjects if (percentage < 0.1f) continue; - damage.TakeDamage(Shared.GameObjects.DamageType.Brute, DoorCrushDamage); + damage.TakeDamage(DamageType.Brute, DoorCrushDamage); stun.Paralyze(DoorStunTime); hitSomeone = true; } diff --git a/Content.Server/GameObjects/Components/Explosion/ExplosiveComponent.cs b/Content.Server/GameObjects/Components/Explosion/ExplosiveComponent.cs index 96b7f19202..f23c611e24 100644 --- a/Content.Server/GameObjects/Components/Explosion/ExplosiveComponent.cs +++ b/Content.Server/GameObjects/Components/Explosion/ExplosiveComponent.cs @@ -1,5 +1,5 @@ using Content.Server.Explosions; -using Content.Server.Interfaces.GameObjects.Components.Interaction; +using Content.Server.GameObjects.EntitySystems; using Robust.Shared.GameObjects; using Robust.Shared.Serialization; diff --git a/Content.Server/GameObjects/Components/Explosion/FlashExplosiveComponent.cs b/Content.Server/GameObjects/Components/Explosion/FlashExplosiveComponent.cs index 4aec5f7fbc..a547e5f0b3 100644 --- a/Content.Server/GameObjects/Components/Explosion/FlashExplosiveComponent.cs +++ b/Content.Server/GameObjects/Components/Explosion/FlashExplosiveComponent.cs @@ -1,6 +1,6 @@ using Content.Server.GameObjects.Components.Items.Storage; using Content.Server.GameObjects.Components.Weapon; -using Content.Server.Interfaces.GameObjects.Components.Interaction; +using Content.Server.GameObjects.EntitySystems; using Robust.Server.GameObjects.EntitySystems; using Robust.Shared.Containers; using Robust.Shared.GameObjects; diff --git a/Content.Server/GameObjects/Components/Fluids/CanSpillComponent.cs b/Content.Server/GameObjects/Components/Fluids/CanSpillComponent.cs index e52172a4cd..24b56c876f 100644 --- a/Content.Server/GameObjects/Components/Fluids/CanSpillComponent.cs +++ b/Content.Server/GameObjects/Components/Fluids/CanSpillComponent.cs @@ -1,9 +1,7 @@ -using System; using Content.Server.GameObjects.Components.Chemistry; -using Content.Server.GameObjects.EntitySystems; using Content.Shared.Chemistry; -using Content.Shared.GameObjects; using Content.Shared.GameObjects.EntitySystems; +using Content.Shared.GameObjects.Verbs; using Robust.Shared.GameObjects; using Robust.Shared.Interfaces.GameObjects; diff --git a/Content.Server/GameObjects/Components/Fluids/PuddleComponent.cs b/Content.Server/GameObjects/Components/Fluids/PuddleComponent.cs index 8b89efc673..598ee20754 100644 --- a/Content.Server/GameObjects/Components/Fluids/PuddleComponent.cs +++ b/Content.Server/GameObjects/Components/Fluids/PuddleComponent.cs @@ -2,10 +2,10 @@ using System.Collections.Generic; using System.Linq; using System.Threading; -using Content.Server.GameObjects.Components.Movement; using Content.Server.GameObjects.Components.Chemistry; -using Content.Server.GameObjects.EntitySystems.Click; +using Content.Server.GameObjects.Components.Movement; using Content.Shared.Chemistry; +using Content.Shared.GameObjects.EntitySystems; using Content.Shared.Physics; using Robust.Server.GameObjects; using Robust.Server.GameObjects.EntitySystems; @@ -24,7 +24,6 @@ using Robust.Shared.Serialization; using Robust.Shared.Utility; using Robust.Shared.ViewVariables; using Timer = Robust.Shared.Timers.Timer; -using Content.Shared.GameObjects.EntitySystems; namespace Content.Server.GameObjects.Components.Fluids { diff --git a/Content.Server/GameObjects/Components/Fluids/SpillHelper.cs b/Content.Server/GameObjects/Components/Fluids/SpillHelper.cs index 493da11ffa..5b85924b8d 100644 --- a/Content.Server/GameObjects/Components/Fluids/SpillHelper.cs +++ b/Content.Server/GameObjects/Components/Fluids/SpillHelper.cs @@ -1,7 +1,6 @@ #nullable enable using Content.Shared.Chemistry; using Robust.Server.Interfaces.GameObjects; - using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Interfaces.Map; using Robust.Shared.IoC; diff --git a/Content.Server/GameObjects/Components/Fluids/SprayComponent.cs b/Content.Server/GameObjects/Components/Fluids/SprayComponent.cs index 11c450f391..ffb9cbdaa0 100644 --- a/Content.Server/GameObjects/Components/Fluids/SprayComponent.cs +++ b/Content.Server/GameObjects/Components/Fluids/SprayComponent.cs @@ -1,21 +1,13 @@ -using System; -using System.Collections.Generic; -using Content.Server.GameObjects.Components.Chemistry; +using Content.Server.GameObjects.Components.Chemistry; using Content.Server.Interfaces; using Content.Shared.Chemistry; using Content.Shared.Interfaces.GameObjects.Components; -using Microsoft.EntityFrameworkCore.Update.Internal; using Robust.Server.GameObjects.EntitySystems; using Robust.Server.Interfaces.GameObjects; using Robust.Shared.GameObjects; -using Robust.Shared.GameObjects.Components; using Robust.Shared.GameObjects.Systems; -using Robust.Shared.Interfaces.GameObjects; -using Robust.Shared.Interfaces.Map; using Robust.Shared.IoC; using Robust.Shared.Localization; -using Robust.Shared.Map; -using Robust.Shared.Maths; using Robust.Shared.Serialization; using Robust.Shared.ViewVariables; diff --git a/Content.Server/GameObjects/Components/GUI/HandsComponent.cs b/Content.Server/GameObjects/Components/GUI/HandsComponent.cs index c25fc442d2..0ea707e19c 100644 --- a/Content.Server/GameObjects/Components/GUI/HandsComponent.cs +++ b/Content.Server/GameObjects/Components/GUI/HandsComponent.cs @@ -3,14 +3,15 @@ using System; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; using System.Linq; +using Content.Server.GameObjects.Components.Items.Storage; using Content.Server.GameObjects.Components.Mobs; using Content.Server.GameObjects.Components.Movement; -using Content.Server.Interfaces.GameObjects.Components.Items; -using Content.Shared.GameObjects.Components.Items; using Content.Server.GameObjects.EntitySystems.Click; using Content.Server.Interfaces.GameObjects.Components.Interaction; -using Content.Shared.BodySystem; +using Content.Server.Interfaces.GameObjects.Components.Items; +using Content.Shared.GameObjects.Components.Items; using Content.Shared.GameObjects.Components.Mobs; +using Content.Shared.Health.BodySystem; using Content.Shared.Physics; using Robust.Server.GameObjects; using Robust.Server.GameObjects.Components.Container; @@ -202,7 +203,7 @@ namespace Content.Server.GameObjects.Components.GUI if (!interactionSystem.TryDroppedInteraction(Owner, item.Owner)) return false; } - + interactionSystem.DroppedInteraction(Owner, item.Owner); return true; } diff --git a/Content.Server/GameObjects/Components/GUI/HumanInventoryControllerComponent.cs b/Content.Server/GameObjects/Components/GUI/HumanInventoryControllerComponent.cs index 0bfe3b1c04..80eb1e9d75 100644 --- a/Content.Server/GameObjects/Components/GUI/HumanInventoryControllerComponent.cs +++ b/Content.Server/GameObjects/Components/GUI/HumanInventoryControllerComponent.cs @@ -1,4 +1,3 @@ -using Content.Server.GameObjects.Components; using Content.Server.GameObjects.Components.Items.Storage; using Robust.Server.GameObjects.Components.Container; using Robust.Shared.GameObjects; @@ -7,7 +6,7 @@ using Robust.Shared.Localization; using Robust.Shared.Timers; using static Content.Shared.GameObjects.Components.Inventory.EquipmentSlotDefines; -namespace Content.Server.GameObjects +namespace Content.Server.GameObjects.Components.GUI { // Handles the special behavior of pockets/ID card slot and their relation to uniforms. [RegisterComponent] diff --git a/Content.Server/GameObjects/Components/GUI/IInventoryController.cs b/Content.Server/GameObjects/Components/GUI/IInventoryController.cs index af6ddc9725..e3071e2d6a 100644 --- a/Content.Server/GameObjects/Components/GUI/IInventoryController.cs +++ b/Content.Server/GameObjects/Components/GUI/IInventoryController.cs @@ -1,7 +1,7 @@ using Robust.Shared.Interfaces.GameObjects; using static Content.Shared.GameObjects.Components.Inventory.EquipmentSlotDefines; -namespace Content.Server.GameObjects +namespace Content.Server.GameObjects.Components.GUI { /// /// Allows for overriding inventory-related behavior on an entity. diff --git a/Content.Server/GameObjects/Components/GUI/InventoryComponent.cs b/Content.Server/GameObjects/Components/GUI/InventoryComponent.cs index 5a9ed13f6a..aa9f03ac10 100644 --- a/Content.Server/GameObjects/Components/GUI/InventoryComponent.cs +++ b/Content.Server/GameObjects/Components/GUI/InventoryComponent.cs @@ -1,15 +1,13 @@ using System; using System.Collections.Generic; using System.Linq; -using Content.Server.GameObjects.Components; -using Content.Server.GameObjects.Components.GUI; -using Content.Shared.GameObjects.Components.Inventory; +using Content.Server.GameObjects.Components.Items.Clothing; using Content.Server.GameObjects.Components.Items.Storage; +using Content.Server.GameObjects.EntitySystems; using Content.Server.GameObjects.EntitySystems.Click; -using Content.Server.Interfaces.GameObjects.Components.Interaction; using Content.Server.Interfaces; using Content.Server.Interfaces.GameObjects; -using Content.Shared.GameObjects; +using Content.Shared.GameObjects.Components.Inventory; using Content.Shared.GameObjects.EntitySystems; using Robust.Server.GameObjects.Components.Container; using Robust.Shared.GameObjects; @@ -22,9 +20,9 @@ using Robust.Shared.Map; using Robust.Shared.Players; using Robust.Shared.ViewVariables; using static Content.Shared.GameObjects.Components.Inventory.EquipmentSlotDefines; -using static Content.Shared.GameObjects.SharedInventoryComponent.ClientInventoryMessage; +using static Content.Shared.GameObjects.Components.Inventory.SharedInventoryComponent.ClientInventoryMessage; -namespace Content.Server.GameObjects +namespace Content.Server.GameObjects.Components.GUI { [RegisterComponent] public class InventoryComponent : SharedInventoryComponent, IExAct, IEffectBlocker, IPressureProtection @@ -101,7 +99,7 @@ namespace Content.Server.GameObjects bool IEffectBlocker.CanSlip() { if(Owner.TryGetComponent(out InventoryComponent inventoryComponent) && - inventoryComponent.TryGetSlotItem(EquipmentSlotDefines.Slots.SHOES, out ItemComponent shoes) + inventoryComponent.TryGetSlotItem(Slots.SHOES, out ItemComponent shoes) ) { return EffectBlockerSystem.CanSlip(shoes.Owner); diff --git a/Content.Server/GameObjects/Components/Gravity/GravityGeneratorComponent.cs b/Content.Server/GameObjects/Components/Gravity/GravityGeneratorComponent.cs index 4db51104f3..637933dd06 100644 --- a/Content.Server/GameObjects/Components/Gravity/GravityGeneratorComponent.cs +++ b/Content.Server/GameObjects/Components/Gravity/GravityGeneratorComponent.cs @@ -1,7 +1,7 @@ using Content.Server.GameObjects.Components.Damage; using Content.Server.GameObjects.Components.Interactable; using Content.Server.GameObjects.Components.Power.ApcNetComponents; -using Content.Server.Interfaces.GameObjects.Components.Interaction; +using Content.Server.GameObjects.EntitySystems; using Content.Server.Interfaces; using Content.Shared.GameObjects.Components.Gravity; using Content.Shared.GameObjects.Components.Interactable; diff --git a/Content.Server/GameObjects/Components/Healing/HealingComponent.cs b/Content.Server/GameObjects/Components/Healing/HealingComponent.cs index d9beaa3916..65bbf4154a 100644 --- a/Content.Server/GameObjects/Components/Healing/HealingComponent.cs +++ b/Content.Server/GameObjects/Components/Healing/HealingComponent.cs @@ -1,11 +1,12 @@ -using Content.Server.GameObjects.Components.Stack; +using Content.Server.GameObjects.Components.Damage; +using Content.Server.GameObjects.Components.Stack; using Content.Server.Utility; -using Content.Shared.GameObjects; +using Content.Shared.GameObjects.Components.Damage; using Content.Shared.Interfaces.GameObjects.Components; using Robust.Shared.GameObjects; using Robust.Shared.Serialization; -namespace Content.Server.GameObjects.Components.Weapon.Melee +namespace Content.Server.GameObjects.Components.Healing { [RegisterComponent] public class HealingComponent : Component, IAfterInteract, IUse diff --git a/Content.Server/GameObjects/Components/Interactable/HandheldLightComponent.cs b/Content.Server/GameObjects/Components/Interactable/HandheldLightComponent.cs index 143b3e340c..f8b7bf1d47 100644 --- a/Content.Server/GameObjects/Components/Interactable/HandheldLightComponent.cs +++ b/Content.Server/GameObjects/Components/Interactable/HandheldLightComponent.cs @@ -1,10 +1,11 @@ using Content.Server.GameObjects.Components.GUI; +using Content.Server.GameObjects.Components.Items.Clothing; +using Content.Server.GameObjects.Components.Items.Storage; using Content.Server.GameObjects.Components.Power; -using Content.Server.GameObjects.EntitySystems.Click; using Content.Server.Interfaces.GameObjects.Components.Items; -using Content.Shared.GameObjects; using Content.Shared.GameObjects.Components; using Content.Shared.GameObjects.EntitySystems; +using Content.Shared.GameObjects.Verbs; using Content.Shared.Interfaces; using Content.Shared.Interfaces.GameObjects.Components; using Robust.Server.GameObjects; diff --git a/Content.Server/GameObjects/Components/Interactable/WelderComponent.cs b/Content.Server/GameObjects/Components/Interactable/WelderComponent.cs index fdaa204f91..ae8ce17a3d 100644 --- a/Content.Server/GameObjects/Components/Interactable/WelderComponent.cs +++ b/Content.Server/GameObjects/Components/Interactable/WelderComponent.cs @@ -2,9 +2,8 @@ using System; using Content.Server.Atmos; using Content.Server.GameObjects.Components.Chemistry; +using Content.Server.GameObjects.Components.Items.Storage; using Content.Server.GameObjects.EntitySystems; -using Content.Server.GameObjects.EntitySystems.Click; -using Content.Server.Interfaces.GameObjects.Components.Interaction; using Content.Server.Interfaces; using Content.Server.Interfaces.Chat; using Content.Server.Interfaces.GameObjects; @@ -21,7 +20,6 @@ using Robust.Shared.Utility; using Robust.Shared.ViewVariables; using Robust.Shared.Serialization; using Content.Shared.GameObjects.EntitySystems; -using Robust.Shared.GameObjects.Systems; namespace Content.Server.GameObjects.Components.Interactable { diff --git a/Content.Server/GameObjects/Components/Items/Clothing/ClothingComponent.cs b/Content.Server/GameObjects/Components/Items/Clothing/ClothingComponent.cs index 290b25279a..a94c5982bc 100644 --- a/Content.Server/GameObjects/Components/Items/Clothing/ClothingComponent.cs +++ b/Content.Server/GameObjects/Components/Items/Clothing/ClothingComponent.cs @@ -1,19 +1,18 @@ using System; using System.Collections.Generic; -using Content.Server.GameObjects.Components; using Content.Server.GameObjects.Components.GUI; using Content.Server.GameObjects.Components.Items.Storage; using Content.Server.Interfaces; using Content.Shared.GameObjects; using Content.Shared.GameObjects.Components.Items; using Content.Shared.Interfaces.GameObjects.Components; -using Robust.Shared.IoC; using Robust.Shared.GameObjects; +using Robust.Shared.Interfaces.GameObjects; +using Robust.Shared.IoC; using Robust.Shared.Serialization; using static Content.Shared.GameObjects.Components.Inventory.EquipmentSlotDefines; -using Robust.Shared.Interfaces.GameObjects; -namespace Content.Server.GameObjects +namespace Content.Server.GameObjects.Components.Items.Clothing { [RegisterComponent] [ComponentReference(typeof(ItemComponent))] diff --git a/Content.Server/GameObjects/Components/Items/DiceComponent.cs b/Content.Server/GameObjects/Components/Items/DiceComponent.cs index f916f15464..227c0e3c4e 100644 --- a/Content.Server/GameObjects/Components/Items/DiceComponent.cs +++ b/Content.Server/GameObjects/Components/Items/DiceComponent.cs @@ -1,5 +1,4 @@ -using Content.Server.GameObjects.EntitySystems.Click; -using Content.Shared.Audio; +using Content.Shared.Audio; using Content.Shared.GameObjects.EntitySystems; using Content.Shared.Interfaces.GameObjects.Components; using Robust.Server.GameObjects; diff --git a/Content.Server/GameObjects/Components/Items/RCDComponent.cs b/Content.Server/GameObjects/Components/Items/RCDComponent.cs index 59dbc706c8..382360ccd4 100644 --- a/Content.Server/GameObjects/Components/Items/RCDComponent.cs +++ b/Content.Server/GameObjects/Components/Items/RCDComponent.cs @@ -1,5 +1,4 @@ using System; -using Content.Server.GameObjects.EntitySystems.Click; using Content.Server.Interfaces; using Content.Server.Utility; using Content.Shared.GameObjects.EntitySystems; diff --git a/Content.Server/GameObjects/Components/Items/Storage/CursedEntityStorageComponent.cs b/Content.Server/GameObjects/Components/Items/Storage/CursedEntityStorageComponent.cs index 7f2c5ab711..f3068de5ce 100644 --- a/Content.Server/GameObjects/Components/Items/Storage/CursedEntityStorageComponent.cs +++ b/Content.Server/GameObjects/Components/Items/Storage/CursedEntityStorageComponent.cs @@ -1,16 +1,12 @@ using System.Linq; -using Content.Server.Interfaces.GameObjects.Components.Interaction; using Content.Shared.Audio; -using Content.Shared.GameObjects.EntitySystems; using Content.Shared.Interfaces.GameObjects.Components; -using Microsoft.EntityFrameworkCore.Internal; using Robust.Server.GameObjects.EntitySystems; using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Systems; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Interfaces.Random; using Robust.Shared.IoC; -using Robust.Shared.Log; using Robust.Shared.Random; namespace Content.Server.GameObjects.Components.Items.Storage diff --git a/Content.Server/GameObjects/Components/Items/Storage/EntityStorageComponent.cs b/Content.Server/GameObjects/Components/Items/Storage/EntityStorageComponent.cs index 5a22ddd354..79bd216244 100644 --- a/Content.Server/GameObjects/Components/Items/Storage/EntityStorageComponent.cs +++ b/Content.Server/GameObjects/Components/Items/Storage/EntityStorageComponent.cs @@ -2,11 +2,12 @@ using System.Linq; using Content.Server.GameObjects.Components.GUI; using Content.Server.GameObjects.Components.Interactable; -using Content.Server.Interfaces.GameObjects.Components.Interaction; -using Content.Shared.GameObjects; +using Content.Server.GameObjects.Components.Mobs; +using Content.Server.GameObjects.EntitySystems; using Content.Shared.GameObjects.Components.Interactable; using Content.Shared.GameObjects.Components.Storage; using Content.Shared.GameObjects.EntitySystems; +using Content.Shared.GameObjects.Verbs; using Content.Shared.Interfaces; using Content.Shared.Interfaces.GameObjects.Components; using Content.Shared.Physics; diff --git a/Content.Server/GameObjects/Components/Items/Storage/Fill/CustodialClosetFill.cs b/Content.Server/GameObjects/Components/Items/Storage/Fill/CustodialClosetFill.cs index a8a65b3fb8..db89fb1798 100644 --- a/Content.Server/GameObjects/Components/Items/Storage/Fill/CustodialClosetFill.cs +++ b/Content.Server/GameObjects/Components/Items/Storage/Fill/CustodialClosetFill.cs @@ -2,7 +2,6 @@ using Robust.Server.Interfaces.GameObjects; using Robust.Shared.GameObjects; using Robust.Shared.Interfaces.Random; using Robust.Shared.IoC; -using Robust.Shared.Random; namespace Content.Server.GameObjects.Components.Items.Storage.Fill { diff --git a/Content.Server/GameObjects/Components/Items/Storage/Fill/MedkitFillComponent.cs b/Content.Server/GameObjects/Components/Items/Storage/Fill/MedkitFillComponent.cs index 50221e238f..713154661c 100644 --- a/Content.Server/GameObjects/Components/Items/Storage/Fill/MedkitFillComponent.cs +++ b/Content.Server/GameObjects/Components/Items/Storage/Fill/MedkitFillComponent.cs @@ -1,9 +1,7 @@ using Robust.Server.Interfaces.GameObjects; using Robust.Shared.GameObjects; using Robust.Shared.Interfaces.GameObjects; -using Robust.Shared.Interfaces.Random; using Robust.Shared.IoC; -using Robust.Shared.Map; namespace Content.Server.GameObjects.Components.Items.Storage.Fill { diff --git a/Content.Server/GameObjects/Components/Items/Storage/Fill/ToolLockerFillComponent.cs b/Content.Server/GameObjects/Components/Items/Storage/Fill/ToolLockerFillComponent.cs index 0a49b6fdbd..c3b1feca9f 100644 --- a/Content.Server/GameObjects/Components/Items/Storage/Fill/ToolLockerFillComponent.cs +++ b/Content.Server/GameObjects/Components/Items/Storage/Fill/ToolLockerFillComponent.cs @@ -1,6 +1,5 @@ using Robust.Server.Interfaces.GameObjects; using Robust.Shared.GameObjects; -using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Interfaces.Random; using Robust.Shared.IoC; using Robust.Shared.Random; diff --git a/Content.Server/GameObjects/Components/Items/Storage/Fill/ToolboxElectricalFillComponent.cs b/Content.Server/GameObjects/Components/Items/Storage/Fill/ToolboxElectricalFillComponent.cs index bd48fd78c9..ca3516f5fd 100644 --- a/Content.Server/GameObjects/Components/Items/Storage/Fill/ToolboxElectricalFillComponent.cs +++ b/Content.Server/GameObjects/Components/Items/Storage/Fill/ToolboxElectricalFillComponent.cs @@ -3,7 +3,6 @@ using Robust.Shared.GameObjects; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Interfaces.Random; using Robust.Shared.IoC; -using Robust.Shared.Map; using Robust.Shared.Random; namespace Content.Server.GameObjects.Components.Items.Storage.Fill diff --git a/Content.Server/GameObjects/Components/Items/Storage/Fill/ToolboxEmergencyFillComponent.cs b/Content.Server/GameObjects/Components/Items/Storage/Fill/ToolboxEmergencyFillComponent.cs index 349ccb01b9..31af8f5f8d 100644 --- a/Content.Server/GameObjects/Components/Items/Storage/Fill/ToolboxEmergencyFillComponent.cs +++ b/Content.Server/GameObjects/Components/Items/Storage/Fill/ToolboxEmergencyFillComponent.cs @@ -3,7 +3,6 @@ using Robust.Shared.GameObjects; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Interfaces.Random; using Robust.Shared.IoC; -using Robust.Shared.Map; using Robust.Shared.Random; namespace Content.Server.GameObjects.Components.Items.Storage.Fill diff --git a/Content.Server/GameObjects/Components/Items/Storage/Fill/ToolboxGoldFillComponent.cs b/Content.Server/GameObjects/Components/Items/Storage/Fill/ToolboxGoldFillComponent.cs index 595babd5ca..8f6dfdf5ee 100644 --- a/Content.Server/GameObjects/Components/Items/Storage/Fill/ToolboxGoldFillComponent.cs +++ b/Content.Server/GameObjects/Components/Items/Storage/Fill/ToolboxGoldFillComponent.cs @@ -3,7 +3,6 @@ using Robust.Shared.GameObjects; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Interfaces.Random; using Robust.Shared.IoC; -using Robust.Shared.Map; using Robust.Shared.Random; namespace Content.Server.GameObjects.Components.Items.Storage.Fill diff --git a/Content.Server/GameObjects/Components/Items/Storage/Fill/UtilityBeltClothingFillComponent.cs b/Content.Server/GameObjects/Components/Items/Storage/Fill/UtilityBeltClothingFillComponent.cs index b99f03464c..876d5c9a84 100644 --- a/Content.Server/GameObjects/Components/Items/Storage/Fill/UtilityBeltClothingFillComponent.cs +++ b/Content.Server/GameObjects/Components/Items/Storage/Fill/UtilityBeltClothingFillComponent.cs @@ -1,7 +1,6 @@ using Robust.Server.Interfaces.GameObjects; using Robust.Shared.GameObjects; using Robust.Shared.Interfaces.GameObjects; -using Robust.Shared.Interfaces.Random; using Robust.Shared.IoC; namespace Content.Server.GameObjects.Components.Items.Storage.Fill diff --git a/Content.Server/GameObjects/Components/Items/Storage/ItemComponent.cs b/Content.Server/GameObjects/Components/Items/Storage/ItemComponent.cs index a9ca9e4c78..daf1f94d07 100644 --- a/Content.Server/GameObjects/Components/Items/Storage/ItemComponent.cs +++ b/Content.Server/GameObjects/Components/Items/Storage/ItemComponent.cs @@ -1,12 +1,12 @@ using Content.Server.GameObjects.Components.GUI; -using Content.Server.GameObjects.Components.Items.Storage; -using Content.Server.Interfaces.GameObjects.Components.Interaction; +using Content.Server.GameObjects.EntitySystems; using Content.Server.Interfaces.GameObjects.Components.Items; using Content.Server.Throw; using Content.Server.Utility; using Content.Shared.GameObjects; using Content.Shared.GameObjects.Components.Items; using Content.Shared.GameObjects.EntitySystems; +using Content.Shared.GameObjects.Verbs; using Content.Shared.Interfaces.GameObjects.Components; using Robust.Server.Interfaces.GameObjects; using Robust.Shared.Containers; @@ -18,7 +18,7 @@ using Robust.Shared.Interfaces.Random; using Robust.Shared.IoC; using Robust.Shared.Serialization; -namespace Content.Server.GameObjects.Components +namespace Content.Server.GameObjects.Components.Items.Storage { [RegisterComponent] [ComponentReference(typeof(StorableComponent))] diff --git a/Content.Server/GameObjects/Components/Items/Storage/SecureEntityStorageComponent.cs b/Content.Server/GameObjects/Components/Items/Storage/SecureEntityStorageComponent.cs index b2436cd3d2..dcdab4725b 100644 --- a/Content.Server/GameObjects/Components/Items/Storage/SecureEntityStorageComponent.cs +++ b/Content.Server/GameObjects/Components/Items/Storage/SecureEntityStorageComponent.cs @@ -1,8 +1,8 @@ using Content.Server.GameObjects.Components.Access; using Content.Server.Interfaces; -using Content.Shared.GameObjects; using Content.Shared.GameObjects.Components.Storage; using Content.Shared.GameObjects.EntitySystems; +using Content.Shared.GameObjects.Verbs; using Content.Shared.Interfaces; using Content.Shared.Interfaces.GameObjects.Components; using Robust.Server.GameObjects; diff --git a/Content.Server/GameObjects/Components/Items/Storage/ServerStorageComponent.cs b/Content.Server/GameObjects/Components/Items/Storage/ServerStorageComponent.cs index dc0c325a25..5359953f39 100644 --- a/Content.Server/GameObjects/Components/Items/Storage/ServerStorageComponent.cs +++ b/Content.Server/GameObjects/Components/Items/Storage/ServerStorageComponent.cs @@ -3,7 +3,7 @@ using System; using System.Collections.Generic; using System.Linq; using Content.Server.GameObjects.Components.GUI; -using Content.Server.Interfaces.GameObjects.Components.Interaction; +using Content.Server.GameObjects.EntitySystems; using Content.Server.Interfaces.GameObjects.Components.Items; using Content.Server.Utility; using Content.Shared.GameObjects.Components.Storage; diff --git a/Content.Server/GameObjects/Components/Kitchen/MicrowaveComponent.cs b/Content.Server/GameObjects/Components/Kitchen/MicrowaveComponent.cs index 4acc5f5954..51b79141f9 100644 --- a/Content.Server/GameObjects/Components/Kitchen/MicrowaveComponent.cs +++ b/Content.Server/GameObjects/Components/Kitchen/MicrowaveComponent.cs @@ -1,34 +1,36 @@ -using System.Collections.Generic; +using System; +using System.Collections.Generic; using System.Linq; -using Content.Server.BodySystem; -using Content.Server.Interfaces.GameObjects.Components.Interaction; -using Robust.Shared.GameObjects; -using Robust.Shared.IoC; -using Robust.Shared.ViewVariables; using Content.Server.GameObjects.Components.Chemistry; using Content.Server.GameObjects.Components.GUI; -using Content.Shared.Chemistry; -using Robust.Shared.Serialization; -using Robust.Shared.Interfaces.GameObjects; -using Content.Shared.Prototypes.Kitchen; -using Content.Shared.Kitchen; -using Robust.Shared.Timers; -using Robust.Server.GameObjects; -using Content.Shared.GameObjects.Components.Power; -using Robust.Server.GameObjects.EntitySystems; -using Robust.Server.GameObjects.Components.Container; -using Robust.Server.GameObjects.Components.UserInterface; -using Robust.Server.Interfaces.GameObjects; -using Robust.Shared.Localization; -using Content.Server.Interfaces; -using Robust.Shared.Audio; -using Content.Server.Interfaces.GameObjects; -using Content.Server.Interfaces.Chat; -using Content.Shared.BodySystem; -using Robust.Shared.GameObjects.Systems; +using Content.Server.GameObjects.Components.Items.Storage; using Content.Server.GameObjects.Components.Power.ApcNetComponents; +using Content.Server.GameObjects.EntitySystems; +using Content.Server.Health.BodySystem; +using Content.Server.Interfaces; +using Content.Server.Interfaces.Chat; +using Content.Server.Interfaces.GameObjects; +using Content.Shared.Chemistry; +using Content.Shared.GameObjects.Components.Power; +using Content.Shared.Health.BodySystem; using Content.Shared.Interfaces; using Content.Shared.Interfaces.GameObjects.Components; +using Content.Shared.Kitchen; +using Content.Shared.Prototypes.Kitchen; +using Robust.Server.GameObjects; +using Robust.Server.GameObjects.Components.Container; +using Robust.Server.GameObjects.Components.UserInterface; +using Robust.Server.GameObjects.EntitySystems; +using Robust.Server.Interfaces.GameObjects; +using Robust.Shared.Audio; +using Robust.Shared.GameObjects; +using Robust.Shared.GameObjects.Systems; +using Robust.Shared.Interfaces.GameObjects; +using Robust.Shared.IoC; +using Robust.Shared.Localization; +using Robust.Shared.Serialization; +using Robust.Shared.Timers; +using Robust.Shared.ViewVariables; namespace Content.Server.GameObjects.Components.Kitchen { @@ -311,7 +313,7 @@ namespace Content.Server.GameObjects.Components.Kitchen (_currentCookTimerTime == (uint)recipeToCook.CookTime); SetAppearance(MicrowaveVisualState.Cooking); _audioSystem.PlayFromEntity(_startCookingSound, Owner, AudioParams.Default); - Timer.Spawn((int)(_currentCookTimerTime * _cookTimeMultiplier), (System.Action)(() => + Timer.Spawn((int)(_currentCookTimerTime * _cookTimeMultiplier), (Action)(() => { if (_lostPower) { diff --git a/Content.Server/GameObjects/Components/ListeningComponent.cs b/Content.Server/GameObjects/Components/ListeningComponent.cs index 655e594bef..90bfb36ea1 100644 --- a/Content.Server/GameObjects/Components/ListeningComponent.cs +++ b/Content.Server/GameObjects/Components/ListeningComponent.cs @@ -1,14 +1,6 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Content.Server.GameObjects.Components.Interactable; -using Content.Server.GameObjects.EntitySystems; -using Content.Server.Interfaces; +using Content.Server.Interfaces; using Robust.Shared.GameObjects; -using Robust.Shared.GameObjects.Components; using Robust.Shared.Interfaces.GameObjects; -using Robust.Shared.IoC; namespace Content.Server.GameObjects.Components { diff --git a/Content.Server/GameObjects/Components/Markers/ConditionalSpawnerComponent.cs b/Content.Server/GameObjects/Components/Markers/ConditionalSpawnerComponent.cs index 820803140a..7521a25650 100644 --- a/Content.Server/GameObjects/Components/Markers/ConditionalSpawnerComponent.cs +++ b/Content.Server/GameObjects/Components/Markers/ConditionalSpawnerComponent.cs @@ -8,10 +8,10 @@ using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Interfaces.Random; using Robust.Shared.Interfaces.Reflection; using Robust.Shared.IoC; +using Robust.Shared.Log; using Robust.Shared.Random; using Robust.Shared.Serialization; using Robust.Shared.ViewVariables; -using Logger = Robust.Shared.Log.Logger; namespace Content.Server.GameObjects.Components.Markers { diff --git a/Content.Server/GameObjects/Components/Markers/SpawnPointComponent.cs b/Content.Server/GameObjects/Components/Markers/SpawnPointComponent.cs index 77b01c34a1..c1eed02761 100644 --- a/Content.Server/GameObjects/Components/Markers/SpawnPointComponent.cs +++ b/Content.Server/GameObjects/Components/Markers/SpawnPointComponent.cs @@ -1,5 +1,5 @@ using Content.Shared.GameObjects.Components.Markers; -using Content.Shared.Jobs; +using Content.Shared.Roles; using Robust.Shared.GameObjects; using Robust.Shared.IoC; using Robust.Shared.Prototypes; diff --git a/Content.Server/GameObjects/Components/Markers/TrashSpawnerComponent.cs b/Content.Server/GameObjects/Components/Markers/TrashSpawnerComponent.cs index 24403ad67c..0476fb8b99 100644 --- a/Content.Server/GameObjects/Components/Markers/TrashSpawnerComponent.cs +++ b/Content.Server/GameObjects/Components/Markers/TrashSpawnerComponent.cs @@ -1,18 +1,13 @@ -using System; -using Content.Server.GameObjects.Components.Markers; using System.Collections.Generic; -using Content.Server.GameTicking; -using Content.Server.Interfaces.GameTicking; -using Robust.Server.Interfaces.GameObjects; using Robust.Shared.GameObjects; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Interfaces.Random; -using Robust.Shared.Maths; using Robust.Shared.IoC; +using Robust.Shared.Log; +using Robust.Shared.Maths; using Robust.Shared.Random; using Robust.Shared.Serialization; using Robust.Shared.ViewVariables; -using Logger = Robust.Shared.Log.Logger; namespace Content.Server.GameObjects.Components.Markers { diff --git a/Content.Server/GameObjects/Components/Markers/WarpPointComponent.cs b/Content.Server/GameObjects/Components/Markers/WarpPointComponent.cs index 6301aa67dd..f67e91ab82 100644 --- a/Content.Server/GameObjects/Components/Markers/WarpPointComponent.cs +++ b/Content.Server/GameObjects/Components/Markers/WarpPointComponent.cs @@ -1,5 +1,4 @@ -using Content.Server.GameObjects.EntitySystems.Click; -using Content.Shared.GameObjects.EntitySystems; +using Content.Shared.GameObjects.EntitySystems; using Robust.Shared.GameObjects; using Robust.Shared.Localization; using Robust.Shared.Serialization; diff --git a/Content.Server/GameObjects/Components/Medical/MedicalScannerComponent.cs b/Content.Server/GameObjects/Components/Medical/MedicalScannerComponent.cs index 7f80981f17..c6a051b2c4 100644 --- a/Content.Server/GameObjects/Components/Medical/MedicalScannerComponent.cs +++ b/Content.Server/GameObjects/Components/Medical/MedicalScannerComponent.cs @@ -1,8 +1,13 @@ using System; using System.Collections.Generic; -using Content.Shared.GameObjects; +using Content.Server.GameObjects.Components.Damage; +using Content.Server.GameObjects.Components.Mobs; +using Content.Server.GameObjects.Components.Power.ApcNetComponents; +using Content.Shared.GameObjects.Components.Damage; using Content.Shared.GameObjects.Components.Medical; using Content.Shared.GameObjects.EntitySystems; +using Content.Shared.GameObjects.Verbs; +using Content.Shared.Interfaces.GameObjects.Components; using Robust.Server.GameObjects; using Robust.Server.GameObjects.Components.Container; using Robust.Server.GameObjects.Components.UserInterface; @@ -11,8 +16,6 @@ using Robust.Shared.GameObjects; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Maths; using Robust.Shared.Utility; -using Content.Server.GameObjects.Components.Power.ApcNetComponents; -using Content.Shared.Interfaces.GameObjects.Components; namespace Content.Server.GameObjects.Components.Medical { diff --git a/Content.Server/GameObjects/Components/Metabolism/BloodstreamComponent.cs b/Content.Server/GameObjects/Components/Metabolism/BloodstreamComponent.cs index f1f9656f4f..e428c72f17 100644 --- a/Content.Server/GameObjects/Components/Metabolism/BloodstreamComponent.cs +++ b/Content.Server/GameObjects/Components/Metabolism/BloodstreamComponent.cs @@ -1,6 +1,6 @@ using System.Linq; using Content.Server.GameObjects.Components.Chemistry; -using Content.Server.Interfaces.GameObjects.Components.Interaction; +using Content.Server.GameObjects.EntitySystems; using Content.Shared.Chemistry; using Robust.Shared.GameObjects; using Robust.Shared.IoC; diff --git a/Content.Server/GameObjects/Components/Mining/AsteroidRockComponent.cs b/Content.Server/GameObjects/Components/Mining/AsteroidRockComponent.cs index f390604b38..a7fee5d76b 100644 --- a/Content.Server/GameObjects/Components/Mining/AsteroidRockComponent.cs +++ b/Content.Server/GameObjects/Components/Mining/AsteroidRockComponent.cs @@ -1,5 +1,6 @@ -using Content.Server.GameObjects.Components.Weapon.Melee; -using Content.Shared.GameObjects; +using Content.Server.GameObjects.Components.Damage; +using Content.Server.GameObjects.Components.Weapon.Melee; +using Content.Shared.GameObjects.Components.Damage; using Content.Shared.Interfaces.GameObjects.Components; using Robust.Server.GameObjects; using Robust.Server.GameObjects.EntitySystems; diff --git a/Content.Server/GameObjects/Components/Mobs/DamageStates.cs b/Content.Server/GameObjects/Components/Mobs/DamageStates.cs index 69e354e7bc..89aea5beb8 100644 --- a/Content.Server/GameObjects/Components/Mobs/DamageStates.cs +++ b/Content.Server/GameObjects/Components/Mobs/DamageStates.cs @@ -1,12 +1,11 @@ -using Content.Server.GameObjects.Components.Mobs; -using Content.Server.Mobs; +using Content.Server.Mobs; using Content.Shared.GameObjects.Components.Mobs; using Content.Shared.GameObjects.EntitySystems; using Robust.Server.GameObjects; using Robust.Shared.GameObjects.Components; using Robust.Shared.Interfaces.GameObjects; -namespace Content.Server.GameObjects +namespace Content.Server.GameObjects.Components.Mobs { /// /// Defines the blocking effect of each damage state, and what effects to apply upon entering or exiting the state diff --git a/Content.Server/GameObjects/Components/Mobs/DamageThresholdTemplates/DamageThresholdTemplates.cs b/Content.Server/GameObjects/Components/Mobs/DamageThresholdTemplates/DamageThresholdTemplates.cs index ce50ed1eef..80295df021 100644 --- a/Content.Server/GameObjects/Components/Mobs/DamageThresholdTemplates/DamageThresholdTemplates.cs +++ b/Content.Server/GameObjects/Components/Mobs/DamageThresholdTemplates/DamageThresholdTemplates.cs @@ -1,7 +1,8 @@ using System.Collections.Generic; -using Content.Shared.GameObjects; +using Content.Server.GameObjects.Components.Damage; +using Content.Shared.GameObjects.Components.Damage; -namespace Content.Server.GameObjects +namespace Content.Server.GameObjects.Components.Mobs.DamageThresholdTemplates { /// /// Defines the threshold values for each damage state for any kind of species diff --git a/Content.Server/GameObjects/Components/Mobs/DamageThresholdTemplates/HumanTemplate.cs b/Content.Server/GameObjects/Components/Mobs/DamageThresholdTemplates/HumanTemplate.cs index c5ec0e5f8e..8045758b89 100644 --- a/Content.Server/GameObjects/Components/Mobs/DamageThresholdTemplates/HumanTemplate.cs +++ b/Content.Server/GameObjects/Components/Mobs/DamageThresholdTemplates/HumanTemplate.cs @@ -1,11 +1,11 @@ using System; using System.Collections.Generic; -using Content.Server.GameObjects.Components.Mobs; -using Content.Shared.GameObjects; +using Content.Server.GameObjects.Components.Damage; +using Content.Shared.GameObjects.Components.Damage; using Content.Shared.GameObjects.Components.Mobs; using JetBrains.Annotations; -namespace Content.Server.GameObjects +namespace Content.Server.GameObjects.Components.Mobs.DamageThresholdTemplates { [UsedImplicitly] public class Human : DamageTemplates diff --git a/Content.Server/GameObjects/Components/Mobs/HeatResistanceComponent.cs b/Content.Server/GameObjects/Components/Mobs/HeatResistanceComponent.cs index 8d3283fe25..7d21ba3124 100644 --- a/Content.Server/GameObjects/Components/Mobs/HeatResistanceComponent.cs +++ b/Content.Server/GameObjects/Components/Mobs/HeatResistanceComponent.cs @@ -1,8 +1,10 @@ using System; +using Content.Server.GameObjects.Components.GUI; +using Content.Server.GameObjects.Components.Items.Clothing; using Content.Shared.GameObjects.Components.Inventory; using Robust.Shared.GameObjects; -namespace Content.Server.GameObjects +namespace Content.Server.GameObjects.Components.Mobs { [RegisterComponent] public class HeatResistanceComponent : Component diff --git a/Content.Server/GameObjects/Components/Mobs/MindComponent.cs b/Content.Server/GameObjects/Components/Mobs/MindComponent.cs index 1528b37615..20271f0b23 100644 --- a/Content.Server/GameObjects/Components/Mobs/MindComponent.cs +++ b/Content.Server/GameObjects/Components/Mobs/MindComponent.cs @@ -1,19 +1,18 @@ #nullable enable using Content.Server.GameObjects.Components.Observer; -using Content.Server.GameObjects.EntitySystems.Click; using Content.Server.Interfaces.GameTicking; using Content.Server.Mobs; +using Content.Shared.GameObjects.EntitySystems; using Robust.Shared.GameObjects; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Interfaces.Map; using Robust.Shared.IoC; -using Robust.Shared.Map; using Robust.Shared.Localization; +using Robust.Shared.Map; using Robust.Shared.Serialization; using Robust.Shared.Timers; using Robust.Shared.Utility; using Robust.Shared.ViewVariables; -using Content.Shared.GameObjects.EntitySystems; namespace Content.Server.GameObjects.Components.Mobs { diff --git a/Content.Server/GameObjects/Components/Mobs/ServerOverlayEffectsComponent.cs b/Content.Server/GameObjects/Components/Mobs/ServerOverlayEffectsComponent.cs index edc74e61cd..20a284d90b 100644 --- a/Content.Server/GameObjects/Components/Mobs/ServerOverlayEffectsComponent.cs +++ b/Content.Server/GameObjects/Components/Mobs/ServerOverlayEffectsComponent.cs @@ -1,14 +1,10 @@ using System; using System.Collections.Generic; -using System.Linq; using Content.Shared.GameObjects.Components.Mobs; using Robust.Server.Interfaces.GameObjects; -using Robust.Server.Player; -using Robust.Shared.Enums; using Robust.Shared.GameObjects; using Robust.Shared.Interfaces.Network; using Robust.Shared.Players; -using Robust.Shared.Timers; using Robust.Shared.ViewVariables; namespace Content.Server.GameObjects.Components.Mobs diff --git a/Content.Server/GameObjects/Components/Mobs/SpeciesComponent.cs b/Content.Server/GameObjects/Components/Mobs/SpeciesComponent.cs index ed64d334b6..61e1f671fe 100644 --- a/Content.Server/GameObjects/Components/Mobs/SpeciesComponent.cs +++ b/Content.Server/GameObjects/Components/Mobs/SpeciesComponent.cs @@ -1,10 +1,11 @@ using System; using System.Collections.Generic; -using Content.Server.GameObjects.Components.Mobs; -using Content.Server.Interfaces.GameObjects.Components.Interaction; -using Content.Server.Interfaces; +using Content.Server.GameObjects.Components.Damage; +using Content.Server.GameObjects.Components.Mobs.DamageThresholdTemplates; +using Content.Server.GameObjects.EntitySystems; +using Content.Server.Interfaces.GameObjects; using Content.Server.Observer; -using Content.Shared.GameObjects; +using Content.Shared.GameObjects.Components.Damage; using Content.Shared.GameObjects.Components.Mobs; using Content.Shared.GameObjects.Components.Movement; using Content.Shared.GameObjects.EntitySystems; @@ -15,7 +16,7 @@ using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Players; using Robust.Shared.Serialization; -namespace Content.Server.GameObjects +namespace Content.Server.GameObjects.Components.Mobs { [RegisterComponent] [ComponentReference(typeof(SharedSpeciesComponent))] @@ -50,7 +51,7 @@ namespace Content.Server.GameObjects serializer.DataField(ref templatename, "Template", "Human"); - var type = typeof(SpeciesComponent).Assembly.GetType("Content.Server.GameObjects." + templatename); + var type = typeof(SpeciesComponent).Assembly.GetType("Content.Server.GameObjects.Components.Mobs.DamageThresholdTemplates." + templatename); DamageTemplate = (DamageTemplates) Activator.CreateInstance(type); serializer.DataFieldCached(ref _heatResistance, "HeatResistance", 323); } diff --git a/Content.Server/GameObjects/Components/Mobs/StunnableComponent.cs b/Content.Server/GameObjects/Components/Mobs/StunnableComponent.cs index 16000c292b..1a29536a5f 100644 --- a/Content.Server/GameObjects/Components/Mobs/StunnableComponent.cs +++ b/Content.Server/GameObjects/Components/Mobs/StunnableComponent.cs @@ -1,11 +1,10 @@ using Content.Server.Mobs; using Content.Shared.GameObjects.Components.Mobs; +using Content.Shared.GameObjects.Components.Movement; using Robust.Shared.GameObjects; using Robust.Shared.Interfaces.Timing; using Robust.Shared.IoC; -using Robust.Shared.ViewVariables; -using Timer = Robust.Shared.Timers.Timer; -using Content.Shared.GameObjects.Components.Movement; +using Robust.Shared.Timers; namespace Content.Server.GameObjects.Components.Mobs { diff --git a/Content.Server/GameObjects/Components/Movement/NoSlipComponent.cs b/Content.Server/GameObjects/Components/Movement/NoSlipComponent.cs index 5812dce344..c541377f4b 100644 --- a/Content.Server/GameObjects/Components/Movement/NoSlipComponent.cs +++ b/Content.Server/GameObjects/Components/Movement/NoSlipComponent.cs @@ -1,5 +1,5 @@ -using Robust.Shared.GameObjects; using Content.Shared.GameObjects.EntitySystems; +using Robust.Shared.GameObjects; namespace Content.Server.GameObjects.Components.Movement { diff --git a/Content.Server/GameObjects/Components/Movement/ServerPortalComponent.cs b/Content.Server/GameObjects/Components/Movement/ServerPortalComponent.cs index 87495abe8e..1c5abcdfe0 100644 --- a/Content.Server/GameObjects/Components/Movement/ServerPortalComponent.cs +++ b/Content.Server/GameObjects/Components/Movement/ServerPortalComponent.cs @@ -12,7 +12,6 @@ using Robust.Shared.IoC; using Robust.Shared.Serialization; using Robust.Shared.Timers; using Robust.Shared.ViewVariables; -using Robust.Shared.Utility; namespace Content.Server.GameObjects.Components.Movement { diff --git a/Content.Server/GameObjects/Components/NodeContainer/NodeContainerComponent.cs b/Content.Server/GameObjects/Components/NodeContainer/NodeContainerComponent.cs index 100e1d67ed..23a2d1be45 100644 --- a/Content.Server/GameObjects/Components/NodeContainer/NodeContainerComponent.cs +++ b/Content.Server/GameObjects/Components/NodeContainer/NodeContainerComponent.cs @@ -1,8 +1,8 @@ -using Content.Server.GameObjects.Components.NodeContainer.Nodes; +using System.Collections.Generic; +using Content.Server.GameObjects.Components.NodeContainer.Nodes; using Robust.Shared.GameObjects; using Robust.Shared.Serialization; using Robust.Shared.ViewVariables; -using System.Collections.Generic; namespace Content.Server.GameObjects.Components.NodeContainer { diff --git a/Content.Server/GameObjects/Components/NodeContainer/NodeGroups/ApcNetNodeGroup.cs b/Content.Server/GameObjects/Components/NodeContainer/NodeGroups/ApcNetNodeGroup.cs index 310fa35dba..ff80b1a74f 100644 --- a/Content.Server/GameObjects/Components/NodeContainer/NodeGroups/ApcNetNodeGroup.cs +++ b/Content.Server/GameObjects/Components/NodeContainer/NodeGroups/ApcNetNodeGroup.cs @@ -1,9 +1,9 @@ -using Content.Server.GameObjects.Components.Power; -using Content.Server.GameObjects.Components.Power.ApcNetComponents; -using Robust.Shared.ViewVariables; -using System.Collections.Generic; +using System.Collections.Generic; using System.Diagnostics; using System.Linq; +using Content.Server.GameObjects.Components.Power; +using Content.Server.GameObjects.Components.Power.ApcNetComponents; +using Robust.Shared.ViewVariables; namespace Content.Server.GameObjects.Components.NodeContainer.NodeGroups { diff --git a/Content.Server/GameObjects/Components/NodeContainer/NodeGroups/BaseNetConnectorNodeGroup.cs b/Content.Server/GameObjects/Components/NodeContainer/NodeGroups/BaseNetConnectorNodeGroup.cs index 789d9ce466..58a07022e7 100644 --- a/Content.Server/GameObjects/Components/NodeContainer/NodeGroups/BaseNetConnectorNodeGroup.cs +++ b/Content.Server/GameObjects/Components/NodeContainer/NodeGroups/BaseNetConnectorNodeGroup.cs @@ -1,7 +1,7 @@ -using Content.Server.GameObjects.Components.Power; -using Content.Server.GameObjects.Components.NodeContainer.Nodes; -using System.Collections.Generic; +using System.Collections.Generic; using System.Linq; +using Content.Server.GameObjects.Components.NodeContainer.Nodes; +using Content.Server.GameObjects.Components.Power; namespace Content.Server.GameObjects.Components.NodeContainer.NodeGroups { diff --git a/Content.Server/GameObjects/Components/NodeContainer/NodeGroups/INodeGroup.cs b/Content.Server/GameObjects/Components/NodeContainer/NodeGroups/INodeGroup.cs index 940025d002..b019cbf4ea 100644 --- a/Content.Server/GameObjects/Components/NodeContainer/NodeGroups/INodeGroup.cs +++ b/Content.Server/GameObjects/Components/NodeContainer/NodeGroups/INodeGroup.cs @@ -1,7 +1,7 @@ -using Content.Server.GameObjects.Components.NodeContainer.Nodes; +using System.Collections.Generic; +using Content.Server.GameObjects.Components.NodeContainer.Nodes; using Robust.Shared.IoC; using Robust.Shared.ViewVariables; -using System.Collections.Generic; namespace Content.Server.GameObjects.Components.NodeContainer.NodeGroups { diff --git a/Content.Server/GameObjects/Components/NodeContainer/NodeGroups/NodeGroupFactory.cs b/Content.Server/GameObjects/Components/NodeContainer/NodeGroups/NodeGroupFactory.cs index 49cda47a7f..7c8963544c 100644 --- a/Content.Server/GameObjects/Components/NodeContainer/NodeGroups/NodeGroupFactory.cs +++ b/Content.Server/GameObjects/Components/NodeContainer/NodeGroups/NodeGroupFactory.cs @@ -1,8 +1,8 @@ -using Robust.Shared.Interfaces.Reflection; -using Robust.Shared.IoC; -using System; +using System; using System.Collections.Generic; using System.Reflection; +using Robust.Shared.Interfaces.Reflection; +using Robust.Shared.IoC; namespace Content.Server.GameObjects.Components.NodeContainer.NodeGroups { diff --git a/Content.Server/GameObjects/Components/NodeContainer/NodeGroups/PowerNetNodeGroup.cs b/Content.Server/GameObjects/Components/NodeContainer/NodeGroups/PowerNetNodeGroup.cs index 8ebcc7794b..69c39b1ec9 100644 --- a/Content.Server/GameObjects/Components/NodeContainer/NodeGroups/PowerNetNodeGroup.cs +++ b/Content.Server/GameObjects/Components/NodeContainer/NodeGroups/PowerNetNodeGroup.cs @@ -1,9 +1,9 @@ -using Content.Server.GameObjects.Components.Power.PowerNetComponents; -using Robust.Shared.IoC; -using Robust.Shared.ViewVariables; -using System; +using System; using System.Collections.Generic; using System.Diagnostics; +using Content.Server.GameObjects.Components.Power.PowerNetComponents; +using Robust.Shared.IoC; +using Robust.Shared.ViewVariables; namespace Content.Server.GameObjects.Components.NodeContainer.NodeGroups { diff --git a/Content.Server/GameObjects/Components/NodeContainer/Nodes/AdjacentNode.cs b/Content.Server/GameObjects/Components/NodeContainer/Nodes/AdjacentNode.cs index 097bf8ca74..3bb66265ea 100644 --- a/Content.Server/GameObjects/Components/NodeContainer/Nodes/AdjacentNode.cs +++ b/Content.Server/GameObjects/Components/NodeContainer/Nodes/AdjacentNode.cs @@ -1,6 +1,6 @@ -using Robust.Shared.GameObjects.Components.Transform; -using System.Collections.Generic; +using System.Collections.Generic; using System.Linq; +using Robust.Shared.GameObjects.Components.Transform; namespace Content.Server.GameObjects.Components.NodeContainer.Nodes { diff --git a/Content.Server/GameObjects/Components/NodeContainer/Nodes/Node.cs b/Content.Server/GameObjects/Components/NodeContainer/Nodes/Node.cs index 98374bc2af..291d681df4 100644 --- a/Content.Server/GameObjects/Components/NodeContainer/Nodes/Node.cs +++ b/Content.Server/GameObjects/Components/NodeContainer/Nodes/Node.cs @@ -1,13 +1,13 @@ -using Content.Server.GameObjects.Components.NodeContainer.NodeGroups; -using Robust.Shared.Interfaces.GameObjects; -using Robust.Shared.IoC; -using Robust.Shared.ViewVariables; -using System.Collections.Generic; +using System.Collections.Generic; using System.Diagnostics; using System.Linq; +using Content.Server.GameObjects.Components.NodeContainer.NodeGroups; using Robust.Shared.GameObjects.Components; +using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Interfaces.Serialization; +using Robust.Shared.IoC; using Robust.Shared.Serialization; +using Robust.Shared.ViewVariables; namespace Content.Server.GameObjects.Components.NodeContainer.Nodes { diff --git a/Content.Server/GameObjects/Components/Nutrition/DrinkComponent.cs b/Content.Server/GameObjects/Components/Nutrition/DrinkComponent.cs index 49e2b8b03b..482d460886 100644 --- a/Content.Server/GameObjects/Components/Nutrition/DrinkComponent.cs +++ b/Content.Server/GameObjects/Components/Nutrition/DrinkComponent.cs @@ -1,7 +1,6 @@ using Content.Server.GameObjects.Components.Chemistry; using Content.Server.GameObjects.Components.Fluids; -using Content.Server.GameObjects.EntitySystems.Click; -using Content.Server.Interfaces.GameObjects.Components.Interaction; +using Content.Server.GameObjects.EntitySystems; using Content.Shared.Audio; using Content.Shared.Chemistry; using Content.Shared.GameObjects.Components.Nutrition; diff --git a/Content.Server/GameObjects/Components/Nutrition/FoodComponent.cs b/Content.Server/GameObjects/Components/Nutrition/FoodComponent.cs index 9d6681c776..3354839430 100644 --- a/Content.Server/GameObjects/Components/Nutrition/FoodComponent.cs +++ b/Content.Server/GameObjects/Components/Nutrition/FoodComponent.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using Content.Server.GameObjects.Components.Chemistry; using Content.Server.GameObjects.Components.GUI; +using Content.Server.GameObjects.Components.Items.Storage; using Content.Server.GameObjects.Components.Utensil; using Content.Server.Utility; using Content.Shared.Chemistry; diff --git a/Content.Server/GameObjects/Components/Nutrition/FoodContainerComponent.cs b/Content.Server/GameObjects/Components/Nutrition/FoodContainerComponent.cs index c7735cc2b4..7769fbba05 100644 --- a/Content.Server/GameObjects/Components/Nutrition/FoodContainerComponent.cs +++ b/Content.Server/GameObjects/Components/Nutrition/FoodContainerComponent.cs @@ -1,6 +1,7 @@ using System.Collections.Generic; using System.Linq; using Content.Server.GameObjects.Components.GUI; +using Content.Server.GameObjects.Components.Items.Storage; using Content.Shared.GameObjects.Components.Nutrition; using Content.Shared.Interfaces.GameObjects.Components; using Robust.Server.GameObjects; diff --git a/Content.Server/GameObjects/Components/Nutrition/HungerComponent.cs b/Content.Server/GameObjects/Components/Nutrition/HungerComponent.cs index 4fb6b6d2f3..47643417bb 100644 --- a/Content.Server/GameObjects/Components/Nutrition/HungerComponent.cs +++ b/Content.Server/GameObjects/Components/Nutrition/HungerComponent.cs @@ -1,8 +1,8 @@ using System; using System.Collections.Generic; +using Content.Server.GameObjects.Components.Damage; using Content.Server.GameObjects.Components.Mobs; -using Content.Server.GameObjects.Components.Movement; -using Content.Shared.GameObjects; +using Content.Shared.GameObjects.Components.Damage; using Content.Shared.GameObjects.Components.Mobs; using Content.Shared.GameObjects.Components.Movement; using Content.Shared.GameObjects.Components.Nutrition; @@ -40,7 +40,7 @@ namespace Content.Server.GameObjects.Components.Nutrition [ViewVariables(VVAccess.ReadOnly)] public override HungerThreshold CurrentHungerThreshold => _currentHungerThreshold; private HungerThreshold _currentHungerThreshold; - + private HungerThreshold _lastHungerThreshold; [ViewVariables(VVAccess.ReadWrite)] diff --git a/Content.Server/GameObjects/Components/Nutrition/ThirstComponent.cs b/Content.Server/GameObjects/Components/Nutrition/ThirstComponent.cs index 12b7d7ae9f..94f7b5e022 100644 --- a/Content.Server/GameObjects/Components/Nutrition/ThirstComponent.cs +++ b/Content.Server/GameObjects/Components/Nutrition/ThirstComponent.cs @@ -1,8 +1,8 @@ using System; using System.Collections.Generic; +using Content.Server.GameObjects.Components.Damage; using Content.Server.GameObjects.Components.Mobs; -using Content.Server.GameObjects.Components.Movement; -using Content.Shared.GameObjects; +using Content.Shared.GameObjects.Components.Damage; using Content.Shared.GameObjects.Components.Mobs; using Content.Shared.GameObjects.Components.Movement; using Content.Shared.GameObjects.Components.Nutrition; @@ -40,7 +40,7 @@ namespace Content.Server.GameObjects.Components.Nutrition [ViewVariables(VVAccess.ReadOnly)] public override ThirstThreshold CurrentThirstThreshold => _currentThirstThreshold; private ThirstThreshold _currentThirstThreshold; - + private ThirstThreshold _lastThirstThreshold; [ViewVariables(VVAccess.ReadWrite)] @@ -72,7 +72,7 @@ namespace Content.Server.GameObjects.Components.Nutrition "/Textures/Interface/StatusEffects/Thirst/Parched.png", "/Textures/Interface/StatusEffects/Thirst/Dead.png", }; - + public override void ExposeData(ObjectSerializer serializer) { base.ExposeData(serializer); diff --git a/Content.Server/GameObjects/Components/PDA/PDAComponent.cs b/Content.Server/GameObjects/Components/PDA/PDAComponent.cs index 3edd592e37..b3edacdfac 100644 --- a/Content.Server/GameObjects/Components/PDA/PDAComponent.cs +++ b/Content.Server/GameObjects/Components/PDA/PDAComponent.cs @@ -5,11 +5,12 @@ using System.Collections.Generic; using System.Linq; using Content.Server.GameObjects.Components.Access; using Content.Server.GameObjects.Components.GUI; +using Content.Server.GameObjects.Components.Items.Storage; using Content.Server.Interfaces; using Content.Server.Interfaces.PDA; -using Content.Shared.GameObjects; using Content.Shared.GameObjects.Components.PDA; using Content.Shared.GameObjects.EntitySystems; +using Content.Shared.GameObjects.Verbs; using Content.Shared.Interfaces.GameObjects.Components; using Robust.Server.GameObjects; using Robust.Server.GameObjects.Components.Container; diff --git a/Content.Server/GameObjects/Components/Paper/PaperComponent.cs b/Content.Server/GameObjects/Components/Paper/PaperComponent.cs index 025df877c9..0f2b48b905 100644 --- a/Content.Server/GameObjects/Components/Paper/PaperComponent.cs +++ b/Content.Server/GameObjects/Components/Paper/PaperComponent.cs @@ -1,5 +1,4 @@ -using Content.Server.GameObjects.EntitySystems.Click; -using Content.Shared.GameObjects.Components; +using Content.Shared.GameObjects.Components; using Content.Shared.GameObjects.EntitySystems; using Content.Shared.Interfaces.GameObjects.Components; using Robust.Server.GameObjects; @@ -8,7 +7,7 @@ using Robust.Server.Interfaces.GameObjects; using Robust.Shared.GameObjects; using Robust.Shared.Utility; -namespace Content.Server.GameObjects.Components.Interactable +namespace Content.Server.GameObjects.Components.Paper { [RegisterComponent] public class PaperComponent : SharedPaperComponent, IExamine, IInteractUsing, IUse diff --git a/Content.Server/GameObjects/Components/Paper/WriteComponent.cs b/Content.Server/GameObjects/Components/Paper/WriteComponent.cs index d154a388fc..1385fd4e97 100644 --- a/Content.Server/GameObjects/Components/Paper/WriteComponent.cs +++ b/Content.Server/GameObjects/Components/Paper/WriteComponent.cs @@ -1,7 +1,6 @@ -using Content.Shared.GameObjects.Components; using Robust.Shared.GameObjects; -namespace Content.Server.GameObjects.Components.Interactable +namespace Content.Server.GameObjects.Components.Paper { [RegisterComponent] public class WriteComponent : Component diff --git a/Content.Server/GameObjects/Components/Pointing/RoguePointingArrowComponent.cs b/Content.Server/GameObjects/Components/Pointing/RoguePointingArrowComponent.cs index 5865bb1f82..35706da030 100644 --- a/Content.Server/GameObjects/Components/Pointing/RoguePointingArrowComponent.cs +++ b/Content.Server/GameObjects/Components/Pointing/RoguePointingArrowComponent.cs @@ -1,5 +1,4 @@ #nullable enable -using System; using System.Linq; using Content.Server.Explosions; using Content.Shared.GameObjects.Components.Pointing; diff --git a/Content.Server/GameObjects/Components/Power/ApcNetComponents/ApcComponent.cs b/Content.Server/GameObjects/Components/Power/ApcNetComponents/ApcComponent.cs index 78efb7927c..f55ded352a 100644 --- a/Content.Server/GameObjects/Components/Power/ApcNetComponents/ApcComponent.cs +++ b/Content.Server/GameObjects/Components/Power/ApcNetComponents/ApcComponent.cs @@ -1,6 +1,8 @@ -using Content.Server.GameObjects.Components.Power.PowerNetComponents; +using System; using Content.Server.GameObjects.Components.NodeContainer.NodeGroups; +using Content.Server.GameObjects.Components.Power.PowerNetComponents; using Content.Shared.GameObjects.Components.Power; +using Content.Shared.Interfaces.GameObjects.Components; using Robust.Server.GameObjects; using Robust.Server.GameObjects.Components.UserInterface; using Robust.Server.GameObjects.EntitySystems; @@ -8,11 +10,9 @@ using Robust.Server.Interfaces.GameObjects; using Robust.Shared.Audio; using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Systems; -using Robust.Shared.ViewVariables; -using System; -using Content.Shared.Interfaces.GameObjects.Components; -using Robust.Shared.IoC; using Robust.Shared.Interfaces.Timing; +using Robust.Shared.IoC; +using Robust.Shared.ViewVariables; namespace Content.Server.GameObjects.Components.Power.ApcNetComponents { diff --git a/Content.Server/GameObjects/Components/Power/ApcNetComponents/PowerProviderComponent.cs b/Content.Server/GameObjects/Components/Power/ApcNetComponents/PowerProviderComponent.cs index 69cf10e6f9..5541a2a875 100644 --- a/Content.Server/GameObjects/Components/Power/ApcNetComponents/PowerProviderComponent.cs +++ b/Content.Server/GameObjects/Components/Power/ApcNetComponents/PowerProviderComponent.cs @@ -1,13 +1,13 @@ -using Content.Server.GameObjects.Components.NodeContainer.NodeGroups; +using System; +using System.Collections.Generic; +using System.Linq; +using Content.Server.GameObjects.Components.NodeContainer.NodeGroups; using Robust.Server.Interfaces.GameObjects; using Robust.Shared.GameObjects; using Robust.Shared.Interfaces.Map; using Robust.Shared.IoC; using Robust.Shared.Serialization; using Robust.Shared.ViewVariables; -using System; -using System.Collections.Generic; -using System.Linq; namespace Content.Server.GameObjects.Components.Power.ApcNetComponents { diff --git a/Content.Server/GameObjects/Components/Power/ApcNetComponents/PowerReceiverComponent.cs b/Content.Server/GameObjects/Components/Power/ApcNetComponents/PowerReceiverComponent.cs index bcc67552e2..01f6dbd787 100644 --- a/Content.Server/GameObjects/Components/Power/ApcNetComponents/PowerReceiverComponent.cs +++ b/Content.Server/GameObjects/Components/Power/ApcNetComponents/PowerReceiverComponent.cs @@ -1,18 +1,17 @@ -using Content.Server.GameObjects.Components.NodeContainer.NodeGroups; +using System; +using Content.Server.GameObjects.Components.NodeContainer.NodeGroups; using Content.Shared.GameObjects.Components.Power; +using Content.Shared.GameObjects.EntitySystems; using Robust.Server.GameObjects; using Robust.Server.Interfaces.GameObjects; using Robust.Shared.GameObjects; +using Robust.Shared.GameObjects.Components; using Robust.Shared.Interfaces.Map; using Robust.Shared.IoC; -using Robust.Shared.Serialization; -using Robust.Shared.ViewVariables; -using System; -using Content.Server.GameObjects.EntitySystems.Click; -using Robust.Shared.GameObjects.Components; using Robust.Shared.Localization; +using Robust.Shared.Serialization; using Robust.Shared.Utility; -using Content.Shared.GameObjects.EntitySystems; +using Robust.Shared.ViewVariables; namespace Content.Server.GameObjects.Components.Power.ApcNetComponents { diff --git a/Content.Server/GameObjects/Components/Power/ApcNetComponents/PowerReceiverUsers/BaseCharger.cs b/Content.Server/GameObjects/Components/Power/ApcNetComponents/PowerReceiverUsers/BaseCharger.cs index 70be130114..0bfc844474 100644 --- a/Content.Server/GameObjects/Components/Power/ApcNetComponents/PowerReceiverUsers/BaseCharger.cs +++ b/Content.Server/GameObjects/Components/Power/ApcNetComponents/PowerReceiverUsers/BaseCharger.cs @@ -1,10 +1,10 @@ using System; using Content.Server.GameObjects.Components.GUI; -using Content.Server.GameObjects.Components.Power.ApcNetComponents; +using Content.Server.GameObjects.Components.Items.Storage; using Content.Server.GameObjects.Components.Weapon.Ranged.Barrels; -using Content.Shared.GameObjects; using Content.Shared.GameObjects.Components.Power; using Content.Shared.GameObjects.EntitySystems; +using Content.Shared.GameObjects.Verbs; using Content.Shared.Interfaces; using Content.Shared.Interfaces.GameObjects.Components; using Robust.Server.GameObjects; @@ -16,7 +16,7 @@ using Robust.Shared.Localization; using Robust.Shared.Serialization; using Robust.Shared.ViewVariables; -namespace Content.Server.GameObjects.Components.Power.Chargers +namespace Content.Server.GameObjects.Components.Power.ApcNetComponents.PowerReceiverUsers { [ComponentReference(typeof(IActivate))] [ComponentReference(typeof(IInteractUsing))] diff --git a/Content.Server/GameObjects/Components/Power/ApcNetComponents/PowerReceiverUsers/LightBulbComponent.cs b/Content.Server/GameObjects/Components/Power/ApcNetComponents/PowerReceiverUsers/LightBulbComponent.cs index d704c5b545..b33be166af 100644 --- a/Content.Server/GameObjects/Components/Power/ApcNetComponents/PowerReceiverUsers/LightBulbComponent.cs +++ b/Content.Server/GameObjects/Components/Power/ApcNetComponents/PowerReceiverUsers/LightBulbComponent.cs @@ -13,7 +13,7 @@ using Robust.Shared.Random; using Robust.Shared.Serialization; using Robust.Shared.ViewVariables; -namespace Content.Server.GameObjects.Components.Power +namespace Content.Server.GameObjects.Components.Power.ApcNetComponents.PowerReceiverUsers { public enum LightBulbState { diff --git a/Content.Server/GameObjects/Components/Power/ApcNetComponents/PowerReceiverUsers/PowerCellChargerComponent.cs b/Content.Server/GameObjects/Components/Power/ApcNetComponents/PowerReceiverUsers/PowerCellChargerComponent.cs index efec4b9ca2..8c71ff18c0 100644 --- a/Content.Server/GameObjects/Components/Power/ApcNetComponents/PowerReceiverUsers/PowerCellChargerComponent.cs +++ b/Content.Server/GameObjects/Components/Power/ApcNetComponents/PowerReceiverUsers/PowerCellChargerComponent.cs @@ -2,7 +2,7 @@ using Robust.Shared.GameObjects; using Robust.Shared.Interfaces.GameObjects; -namespace Content.Server.GameObjects.Components.Power.Chargers +namespace Content.Server.GameObjects.Components.Power.ApcNetComponents.PowerReceiverUsers { /// /// Recharges an entity with a . diff --git a/Content.Server/GameObjects/Components/Power/ApcNetComponents/PowerReceiverUsers/PoweredLightComponent.cs b/Content.Server/GameObjects/Components/Power/ApcNetComponents/PowerReceiverUsers/PoweredLightComponent.cs index 2c50fde2c2..a8d60ea43d 100644 --- a/Content.Server/GameObjects/Components/Power/ApcNetComponents/PowerReceiverUsers/PoweredLightComponent.cs +++ b/Content.Server/GameObjects/Components/Power/ApcNetComponents/PowerReceiverUsers/PoweredLightComponent.cs @@ -1,9 +1,11 @@ using System; +using Content.Server.GameObjects.Components.Damage; using Content.Server.GameObjects.Components.GUI; -using Content.Server.GameObjects.Components.Power.ApcNetComponents; +using Content.Server.GameObjects.Components.Items.Storage; +using Content.Server.GameObjects.Components.Mobs; using Content.Server.GameObjects.EntitySystems; using Content.Server.Interfaces; -using Content.Shared.GameObjects; +using Content.Shared.GameObjects.Components.Damage; using Content.Shared.Interfaces.GameObjects.Components; using Robust.Server.GameObjects; using Robust.Server.GameObjects.Components.Container; @@ -18,7 +20,7 @@ using Robust.Shared.IoC; using Robust.Shared.Serialization; using Robust.Shared.ViewVariables; -namespace Content.Server.GameObjects.Components.Power +namespace Content.Server.GameObjects.Components.Power.ApcNetComponents.PowerReceiverUsers { /// /// Component that represents a wall light. It has a light bulb that can be replaced when broken. diff --git a/Content.Server/GameObjects/Components/Power/ApcNetComponents/PowerReceiverUsers/WeaponCapacitorChargerComponent.cs b/Content.Server/GameObjects/Components/Power/ApcNetComponents/PowerReceiverUsers/WeaponCapacitorChargerComponent.cs index 6ca31fef73..e54cf3578f 100644 --- a/Content.Server/GameObjects/Components/Power/ApcNetComponents/PowerReceiverUsers/WeaponCapacitorChargerComponent.cs +++ b/Content.Server/GameObjects/Components/Power/ApcNetComponents/PowerReceiverUsers/WeaponCapacitorChargerComponent.cs @@ -3,7 +3,7 @@ using Content.Shared.Interfaces.GameObjects.Components; using Robust.Shared.GameObjects; using Robust.Shared.Interfaces.GameObjects; -namespace Content.Server.GameObjects.Components.Power.Chargers +namespace Content.Server.GameObjects.Components.Power.ApcNetComponents.PowerReceiverUsers { /// /// Recharges the battery in a . diff --git a/Content.Server/GameObjects/Components/Power/BaseNetConnectorComponent.cs b/Content.Server/GameObjects/Components/Power/BaseNetConnectorComponent.cs index d6d4362da0..fc2148f85f 100644 --- a/Content.Server/GameObjects/Components/Power/BaseNetConnectorComponent.cs +++ b/Content.Server/GameObjects/Components/Power/BaseNetConnectorComponent.cs @@ -1,9 +1,9 @@ -using Content.Server.GameObjects.Components.NodeContainer; +using System.Linq; +using Content.Server.GameObjects.Components.NodeContainer; using Content.Server.GameObjects.Components.NodeContainer.NodeGroups; using Robust.Shared.GameObjects; using Robust.Shared.Serialization; using Robust.Shared.ViewVariables; -using System.Linq; namespace Content.Server.GameObjects.Components.Power { diff --git a/Content.Server/GameObjects/Components/Power/BatteryComponent.cs b/Content.Server/GameObjects/Components/Power/BatteryComponent.cs index 2b52388c18..77ce70f0d4 100644 --- a/Content.Server/GameObjects/Components/Power/BatteryComponent.cs +++ b/Content.Server/GameObjects/Components/Power/BatteryComponent.cs @@ -1,8 +1,8 @@ -using Robust.Shared.GameObjects; +using System; +using Robust.Shared.GameObjects; using Robust.Shared.Maths; using Robust.Shared.Serialization; using Robust.Shared.ViewVariables; -using System; namespace Content.Server.GameObjects.Components.Power { diff --git a/Content.Server/GameObjects/Components/Power/PowerNetComponents/IPowerNetManager.cs b/Content.Server/GameObjects/Components/Power/PowerNetComponents/IPowerNetManager.cs index 125695e582..18ad79003a 100644 --- a/Content.Server/GameObjects/Components/Power/PowerNetComponents/IPowerNetManager.cs +++ b/Content.Server/GameObjects/Components/Power/PowerNetComponents/IPowerNetManager.cs @@ -1,5 +1,5 @@ -using Content.Server.GameObjects.Components.NodeContainer.NodeGroups; -using System.Collections.Generic; +using System.Collections.Generic; +using Content.Server.GameObjects.Components.NodeContainer.NodeGroups; namespace Content.Server.GameObjects.Components.Power.PowerNetComponents { diff --git a/Content.Server/GameObjects/Components/Power/PowerNetComponents/PowerConsumerComponent.cs b/Content.Server/GameObjects/Components/Power/PowerNetComponents/PowerConsumerComponent.cs index 15d31d9d05..28e37ad789 100644 --- a/Content.Server/GameObjects/Components/Power/PowerNetComponents/PowerConsumerComponent.cs +++ b/Content.Server/GameObjects/Components/Power/PowerNetComponents/PowerConsumerComponent.cs @@ -1,8 +1,8 @@ -using Content.Server.GameObjects.Components.NodeContainer.NodeGroups; +using System.Diagnostics; +using Content.Server.GameObjects.Components.NodeContainer.NodeGroups; using Robust.Shared.GameObjects; using Robust.Shared.Serialization; using Robust.Shared.ViewVariables; -using System.Diagnostics; namespace Content.Server.GameObjects.Components.Power.PowerNetComponents { diff --git a/Content.Server/GameObjects/Components/Power/PowerNetComponents/SmesComponent.cs b/Content.Server/GameObjects/Components/Power/PowerNetComponents/SmesComponent.cs index 4bd35df847..666befcf28 100644 --- a/Content.Server/GameObjects/Components/Power/PowerNetComponents/SmesComponent.cs +++ b/Content.Server/GameObjects/Components/Power/PowerNetComponents/SmesComponent.cs @@ -1,13 +1,12 @@ -using Content.Server.GameObjects.Components.Power.PowerNetComponents; +using System; using Content.Shared.GameObjects.Components.Power; using Content.Shared.Utility; using Robust.Server.GameObjects; using Robust.Shared.GameObjects; using Robust.Shared.Interfaces.Timing; using Robust.Shared.IoC; -using System; -namespace Content.Server.GameObjects.Components.Power +namespace Content.Server.GameObjects.Components.Power.PowerNetComponents { /// /// Handles the "user-facing" side of the actual SMES object. @@ -60,7 +59,7 @@ namespace Content.Server.GameObjects.Components.Power _lastChargeState = newChargeState; _lastChargeStateChange = _gameTiming.CurTime; _appearance.SetData(SmesVisuals.LastChargeState, newChargeState); - } + } } private int GetNewChargeLevel() diff --git a/Content.Server/GameObjects/Components/Power/PowerNetComponents/SolarControlConsoleComponent.cs b/Content.Server/GameObjects/Components/Power/PowerNetComponents/SolarControlConsoleComponent.cs index 19ed2c9629..6c6d63203c 100644 --- a/Content.Server/GameObjects/Components/Power/PowerNetComponents/SolarControlConsoleComponent.cs +++ b/Content.Server/GameObjects/Components/Power/PowerNetComponents/SolarControlConsoleComponent.cs @@ -1,5 +1,5 @@ -using Content.Server.Interfaces.GameObjects.Components.Interaction; -using Content.Server.GameObjects.Components.Power.ApcNetComponents; +using Content.Server.GameObjects.Components.Power.ApcNetComponents; +using Content.Server.GameObjects.EntitySystems; using Content.Shared.GameObjects.Components.Power; using Content.Shared.Interfaces.GameObjects.Components; using Robust.Server.GameObjects.Components.UserInterface; @@ -8,7 +8,7 @@ using Robust.Shared.GameObjects; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.IoC; -namespace Content.Server.GameObjects.Components.Power +namespace Content.Server.GameObjects.Components.Power.PowerNetComponents { [RegisterComponent] [ComponentReference(typeof(IActivate))] diff --git a/Content.Server/GameObjects/Components/Power/PowerNetComponents/SolarPanelComponent.cs b/Content.Server/GameObjects/Components/Power/PowerNetComponents/SolarPanelComponent.cs index 04d8982e78..a86dff1b87 100644 --- a/Content.Server/GameObjects/Components/Power/PowerNetComponents/SolarPanelComponent.cs +++ b/Content.Server/GameObjects/Components/Power/PowerNetComponents/SolarPanelComponent.cs @@ -1,13 +1,12 @@ using System; -using Content.Server.Interfaces.GameObjects.Components.Interaction; -using Content.Server.GameObjects.Components.Power.PowerNetComponents; +using Content.Server.GameObjects.EntitySystems; using Robust.Server.GameObjects; using Robust.Shared.GameObjects; using Robust.Shared.Interfaces.Timing; using Robust.Shared.Serialization; using Robust.Shared.ViewVariables; -namespace Content.Server.GameObjects.Components.Power +namespace Content.Server.GameObjects.Components.Power.PowerNetComponents { /// diff --git a/Content.Server/GameObjects/Components/Power/WirePlacerComponent.cs b/Content.Server/GameObjects/Components/Power/WirePlacerComponent.cs index 3b009891af..81333b2e07 100644 --- a/Content.Server/GameObjects/Components/Power/WirePlacerComponent.cs +++ b/Content.Server/GameObjects/Components/Power/WirePlacerComponent.cs @@ -1,5 +1,6 @@ using Content.Server.GameObjects.Components.Stack; using Content.Server.Utility; +using Content.Shared.Interfaces.GameObjects.Components; using Robust.Server.Interfaces.GameObjects; using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Components.Transform; @@ -7,7 +8,6 @@ using Robust.Shared.Interfaces.Map; using Robust.Shared.IoC; using Robust.Shared.Serialization; using Robust.Shared.ViewVariables; -using Content.Shared.Interfaces.GameObjects.Components; namespace Content.Server.GameObjects.Components.Power { diff --git a/Content.Server/GameObjects/Components/Projectiles/FlashProjectileComponent.cs b/Content.Server/GameObjects/Components/Projectiles/FlashProjectileComponent.cs index 756a37a44f..d4e8dab9eb 100644 --- a/Content.Server/GameObjects/Components/Projectiles/FlashProjectileComponent.cs +++ b/Content.Server/GameObjects/Components/Projectiles/FlashProjectileComponent.cs @@ -1,10 +1,8 @@ using System; -using System.Collections.Generic; using Content.Server.GameObjects.Components.Weapon; using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Components; using Robust.Shared.Interfaces.GameObjects; -using Robust.Shared.Physics; using Robust.Shared.Serialization; namespace Content.Server.GameObjects.Components.Projectiles diff --git a/Content.Server/GameObjects/Components/Projectiles/HitscanComponent.cs b/Content.Server/GameObjects/Components/Projectiles/HitscanComponent.cs index b845614bdd..4d0bde9372 100644 --- a/Content.Server/GameObjects/Components/Projectiles/HitscanComponent.cs +++ b/Content.Server/GameObjects/Components/Projectiles/HitscanComponent.cs @@ -1,19 +1,18 @@ using System; -using Content.Shared.GameObjects; +using Content.Shared.GameObjects.Components.Damage; using Content.Shared.Physics; using Robust.Server.GameObjects.EntitySystems; using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.EntitySystemMessages; using Robust.Shared.GameObjects.Systems; using Robust.Shared.Interfaces.GameObjects; -using Robust.Shared.Interfaces.Serialization; using Robust.Shared.Interfaces.Timing; using Robust.Shared.IoC; using Robust.Shared.Map; using Robust.Shared.Maths; using Robust.Shared.Physics; using Robust.Shared.Serialization; -using Timer = Robust.Shared.Timers.Timer; +using Robust.Shared.Timers; namespace Content.Server.GameObjects.Components.Projectiles { @@ -26,7 +25,7 @@ namespace Content.Server.GameObjects.Components.Projectiles public override string Name => "Hitscan"; public CollisionGroup CollisionMask => (CollisionGroup) _collisionMask; private int _collisionMask; - + public float Damage { get => _damage; @@ -92,7 +91,7 @@ namespace Content.Server.GameObjects.Components.Projectiles var offset = angle.ToVec().Normalized / 2; EntitySystem.Get().PlayAtCoords(_soundHitWall, user.Transform.GridPosition.Translated(offset)); } - + Timer.Spawn((int) _deathTime.TotalMilliseconds, () => { if (!Owner.Deleted) @@ -101,16 +100,16 @@ namespace Content.Server.GameObjects.Components.Projectiles } }); } - + private EffectSystemMessage MuzzleFlash(GridCoordinates grid, Angle angle) { if (_muzzleFlash == null) { return null; } - + var offset = angle.ToVec().Normalized / 2; - + var message = new EffectSystemMessage { EffectSprite = _muzzleFlash, @@ -123,7 +122,7 @@ namespace Content.Server.GameObjects.Components.Projectiles ColorDelta = new Vector4(0, 0, 0, -1500f), Shaded = false }; - + return message; } @@ -144,7 +143,7 @@ namespace Content.Server.GameObjects.Components.Projectiles Shaded = false }; - + return message; } diff --git a/Content.Server/GameObjects/Components/Projectiles/ProjectileComponent.cs b/Content.Server/GameObjects/Components/Projectiles/ProjectileComponent.cs index 9ae3d114ec..00613c2b96 100644 --- a/Content.Server/GameObjects/Components/Projectiles/ProjectileComponent.cs +++ b/Content.Server/GameObjects/Components/Projectiles/ProjectileComponent.cs @@ -1,6 +1,7 @@ using System.Collections.Generic; +using Content.Server.GameObjects.Components.Damage; using Content.Server.GameObjects.Components.Mobs; -using Content.Shared.GameObjects; +using Content.Shared.GameObjects.Components.Damage; using Content.Shared.GameObjects.Components.Projectiles; using Robust.Server.GameObjects.EntitySystems; using Robust.Shared.GameObjects; diff --git a/Content.Server/GameObjects/Components/Projectiles/ThrownItemComponent.cs b/Content.Server/GameObjects/Components/Projectiles/ThrownItemComponent.cs index d1b9a4d2c0..2ae7c7f5c9 100644 --- a/Content.Server/GameObjects/Components/Projectiles/ThrownItemComponent.cs +++ b/Content.Server/GameObjects/Components/Projectiles/ThrownItemComponent.cs @@ -1,6 +1,7 @@ -using Content.Server.GameObjects.Components.Projectiles; +using Content.Server.GameObjects.Components.Damage; using Content.Server.GameObjects.EntitySystems.Click; using Content.Shared.GameObjects; +using Content.Shared.GameObjects.Components.Damage; using Content.Shared.Physics; using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Components; @@ -11,7 +12,7 @@ using Robust.Shared.IoC; using Robust.Shared.Maths; using Robust.Shared.Timers; -namespace Content.Server.GameObjects.Components +namespace Content.Server.GameObjects.Components.Projectiles { [RegisterComponent] internal class ThrownItemComponent : ProjectileComponent, ICollideBehavior diff --git a/Content.Server/GameObjects/Components/RadioComponent.cs b/Content.Server/GameObjects/Components/RadioComponent.cs index e5e7661a5b..daef1622b0 100644 --- a/Content.Server/GameObjects/Components/RadioComponent.cs +++ b/Content.Server/GameObjects/Components/RadioComponent.cs @@ -1,19 +1,13 @@ -using System; -using System.Collections.Generic; -using System.Text; -using Content.Server.GameObjects.EntitySystems; +using Content.Server.GameObjects.EntitySystems; using Content.Server.Interfaces; using Content.Server.Interfaces.Chat; -using Content.Server.Interfaces.GameObjects.Components.Interaction; using Content.Shared.Interfaces.GameObjects.Components; using Robust.Shared.GameObjects; -using Robust.Shared.GameObjects.Components; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.IoC; -using Robust.Shared.Localization; using Robust.Shared.ViewVariables; -namespace Content.Server.GameObjects.Components.Interactable +namespace Content.Server.GameObjects.Components { [RegisterComponent] class RadioComponent : Component, IUse, IListen diff --git a/Content.Server/GameObjects/Components/Recycling/RecyclerComponent.cs b/Content.Server/GameObjects/Components/Recycling/RecyclerComponent.cs index 45b428d216..8b2f31c6c4 100644 --- a/Content.Server/GameObjects/Components/Recycling/RecyclerComponent.cs +++ b/Content.Server/GameObjects/Components/Recycling/RecyclerComponent.cs @@ -1,5 +1,7 @@ using System.Diagnostics.CodeAnalysis; using Content.Server.GameObjects.Components.Conveyor; +using Content.Server.GameObjects.Components.Items.Storage; +using Content.Server.GameObjects.Components.Mobs; using Content.Server.GameObjects.Components.Power.ApcNetComponents; using Content.Server.GameObjects.EntitySystems; using Content.Shared.Construction; diff --git a/Content.Server/GameObjects/Components/Research/LatheComponent.cs b/Content.Server/GameObjects/Components/Research/LatheComponent.cs index 486b1af9b6..e848cb66ee 100644 --- a/Content.Server/GameObjects/Components/Research/LatheComponent.cs +++ b/Content.Server/GameObjects/Components/Research/LatheComponent.cs @@ -1,10 +1,12 @@ using System; using System.Collections.Generic; using System.Linq; +using Content.Server.GameObjects.Components.Power.ApcNetComponents; using Content.Server.GameObjects.Components.Stack; using Content.Shared.GameObjects.Components.Materials; using Content.Shared.GameObjects.Components.Power; using Content.Shared.GameObjects.Components.Research; +using Content.Shared.Interfaces.GameObjects.Components; using Content.Shared.Research; using Robust.Server.GameObjects; using Robust.Server.GameObjects.Components.UserInterface; @@ -13,8 +15,6 @@ using Robust.Server.Interfaces.Player; using Robust.Shared.GameObjects; using Robust.Shared.Timers; using Robust.Shared.ViewVariables; -using Content.Server.GameObjects.Components.Power.ApcNetComponents; -using Content.Shared.Interfaces.GameObjects.Components; namespace Content.Server.GameObjects.Components.Research { diff --git a/Content.Server/GameObjects/Components/Research/ResearchClientComponent.cs b/Content.Server/GameObjects/Components/Research/ResearchClientComponent.cs index f901b5ae64..b57d249d3b 100644 --- a/Content.Server/GameObjects/Components/Research/ResearchClientComponent.cs +++ b/Content.Server/GameObjects/Components/Research/ResearchClientComponent.cs @@ -1,4 +1,4 @@ -using Content.Server.Interfaces.GameObjects.Components.Interaction; +using Content.Server.GameObjects.EntitySystems; using Content.Shared.GameObjects.Components.Research; using Content.Shared.Interfaces.GameObjects.Components; using Robust.Server.GameObjects.Components.UserInterface; diff --git a/Content.Server/GameObjects/Components/Research/ResearchServerComponent.cs b/Content.Server/GameObjects/Components/Research/ResearchServerComponent.cs index e636a0d3d2..cf3811f8f2 100644 --- a/Content.Server/GameObjects/Components/Research/ResearchServerComponent.cs +++ b/Content.Server/GameObjects/Components/Research/ResearchServerComponent.cs @@ -1,11 +1,11 @@ using System.Collections.Generic; -using Content.Server.Interfaces.GameObjects.Components.Interaction; +using Content.Server.GameObjects.Components.Power.ApcNetComponents; +using Content.Server.GameObjects.EntitySystems; using Content.Shared.Research; using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Systems; using Robust.Shared.Serialization; using Robust.Shared.ViewVariables; -using Content.Server.GameObjects.Components.Power.ApcNetComponents; namespace Content.Server.GameObjects.Components.Research { diff --git a/Content.Server/GameObjects/Components/Rotatable/FlippableComponent.cs b/Content.Server/GameObjects/Components/Rotatable/FlippableComponent.cs index 6ee4765153..c986fe04dd 100644 --- a/Content.Server/GameObjects/Components/Rotatable/FlippableComponent.cs +++ b/Content.Server/GameObjects/Components/Rotatable/FlippableComponent.cs @@ -1,7 +1,7 @@ #nullable enable using Content.Server.Interfaces; -using Content.Shared.GameObjects; using Content.Shared.GameObjects.EntitySystems; +using Content.Shared.GameObjects.Verbs; using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Components; using Robust.Shared.Interfaces.GameObjects; diff --git a/Content.Server/GameObjects/Components/Rotatable/RotatableComponent.cs b/Content.Server/GameObjects/Components/Rotatable/RotatableComponent.cs index 074da1aecb..73194471c8 100644 --- a/Content.Server/GameObjects/Components/Rotatable/RotatableComponent.cs +++ b/Content.Server/GameObjects/Components/Rotatable/RotatableComponent.cs @@ -1,6 +1,6 @@ using Content.Server.Interfaces; -using Content.Shared.GameObjects; using Content.Shared.GameObjects.EntitySystems; +using Content.Shared.GameObjects.Verbs; using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Components; using Robust.Shared.Interfaces.GameObjects; diff --git a/Content.Server/GameObjects/Components/Sound/FootstepModifierComponent.cs b/Content.Server/GameObjects/Components/Sound/FootstepModifierComponent.cs index 812a08fec5..56e8eb19ce 100644 --- a/Content.Server/GameObjects/Components/Sound/FootstepModifierComponent.cs +++ b/Content.Server/GameObjects/Components/Sound/FootstepModifierComponent.cs @@ -3,7 +3,6 @@ using Robust.Server.GameObjects.EntitySystems; using Robust.Shared.Audio; using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Systems; -using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Interfaces.Random; using Robust.Shared.IoC; using Robust.Shared.Prototypes; diff --git a/Content.Server/GameObjects/Components/Stack/StackComponent.cs b/Content.Server/GameObjects/Components/Stack/StackComponent.cs index 53020796c5..aedff7d2df 100644 --- a/Content.Server/GameObjects/Components/Stack/StackComponent.cs +++ b/Content.Server/GameObjects/Components/Stack/StackComponent.cs @@ -1,5 +1,4 @@ using System; -using Content.Server.GameObjects.EntitySystems.Click; using Content.Shared.GameObjects.Components; using Content.Shared.GameObjects.EntitySystems; using Content.Shared.Interfaces; diff --git a/Content.Server/GameObjects/Components/Strap/StrapComponent.cs b/Content.Server/GameObjects/Components/Strap/StrapComponent.cs index 773d8f1aff..420837f29e 100644 --- a/Content.Server/GameObjects/Components/Strap/StrapComponent.cs +++ b/Content.Server/GameObjects/Components/Strap/StrapComponent.cs @@ -1,8 +1,8 @@ using System.Collections.Generic; using Content.Server.GameObjects.Components.Buckle; -using Content.Shared.GameObjects; using Content.Shared.GameObjects.Components.Strap; using Content.Shared.GameObjects.EntitySystems; +using Content.Shared.GameObjects.Verbs; using Content.Shared.Interfaces.GameObjects.Components; using Robust.Server.GameObjects; using Robust.Shared.GameObjects; diff --git a/Content.Server/GameObjects/Components/Temperature/TemperatureComponent.cs b/Content.Server/GameObjects/Components/Temperature/TemperatureComponent.cs index 9987f29093..4e7e901ff2 100644 --- a/Content.Server/GameObjects/Components/Temperature/TemperatureComponent.cs +++ b/Content.Server/GameObjects/Components/Temperature/TemperatureComponent.cs @@ -1,12 +1,13 @@ using System; -using Content.Shared.GameObjects; +using Content.Server.GameObjects.Components.Damage; +using Content.Shared.GameObjects.Components.Damage; using Content.Shared.Maths; using Robust.Shared.GameObjects; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Serialization; using Robust.Shared.ViewVariables; -namespace Content.Server.GameObjects +namespace Content.Server.GameObjects.Components.Temperature { public interface ITemperatureComponent : IComponent { diff --git a/Content.Server/GameObjects/Components/Timing/UseDelayComponent.cs b/Content.Server/GameObjects/Components/Timing/UseDelayComponent.cs index 66d79c8d5a..a5bdbcb6aa 100644 --- a/Content.Server/GameObjects/Components/Timing/UseDelayComponent.cs +++ b/Content.Server/GameObjects/Components/Timing/UseDelayComponent.cs @@ -1,11 +1,11 @@ using System; -using CancellationTokenSource = System.Threading.CancellationTokenSource; +using System.Threading; using Content.Shared.GameObjects.Components.Items; using Robust.Shared.GameObjects; -using Robust.Shared.Serialization; -using Robust.Shared.Timers; -using Robust.Shared.IoC; using Robust.Shared.Interfaces.Timing; +using Robust.Shared.IoC; +using Robust.Shared.Serialization; +using Timer = Robust.Shared.Timers.Timer; namespace Content.Server.GameObjects.Components.Timing { diff --git a/Content.Server/GameObjects/Components/Trigger/TimerTrigger/OnUseTimerTriggerComponent.cs b/Content.Server/GameObjects/Components/Trigger/TimerTrigger/OnUseTimerTriggerComponent.cs index d65a7bdaae..406e7d0535 100644 --- a/Content.Server/GameObjects/Components/Trigger/TimerTrigger/OnUseTimerTriggerComponent.cs +++ b/Content.Server/GameObjects/Components/Trigger/TimerTrigger/OnUseTimerTriggerComponent.cs @@ -1,6 +1,6 @@ using System; -using Content.Server.Interfaces.GameObjects.Components.Interaction; -using Content.Shared.GameObjects.Components.Triggers; +using Content.Server.GameObjects.EntitySystems; +using Content.Shared.GameObjects.Components.Trigger; using Content.Shared.Interfaces.GameObjects.Components; using Robust.Server.GameObjects; using Robust.Shared.GameObjects; @@ -8,7 +8,7 @@ using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.IoC; using Robust.Shared.Serialization; -namespace Content.Server.GameObjects.Components.Triggers +namespace Content.Server.GameObjects.Components.Trigger.TimerTrigger { [RegisterComponent] public class OnUseTimerTriggerComponent : Component, IUse diff --git a/Content.Server/GameObjects/Components/VendingMachines/VendingMachineComponent.cs b/Content.Server/GameObjects/Components/VendingMachines/VendingMachineComponent.cs index 58e408e3eb..6929d9f981 100644 --- a/Content.Server/GameObjects/Components/VendingMachines/VendingMachineComponent.cs +++ b/Content.Server/GameObjects/Components/VendingMachines/VendingMachineComponent.cs @@ -2,8 +2,7 @@ using System.Collections.Generic; using System.Linq; using Content.Server.GameObjects.Components.Power.ApcNetComponents; -using Content.Server.GameObjects.EntitySystems.Click; -using Content.Server.Interfaces.GameObjects.Components.Interaction; +using Content.Server.GameObjects.EntitySystems; using Content.Shared.GameObjects.Components.VendingMachines; using Content.Shared.GameObjects.EntitySystems; using Content.Shared.Interfaces.GameObjects.Components; diff --git a/Content.Server/GameObjects/Components/Weapon/FlashableComponent.cs b/Content.Server/GameObjects/Components/Weapon/FlashableComponent.cs index 11499017b3..d94e9b87ae 100644 --- a/Content.Server/GameObjects/Components/Weapon/FlashableComponent.cs +++ b/Content.Server/GameObjects/Components/Weapon/FlashableComponent.cs @@ -1,16 +1,11 @@ using System; -using System.Linq; using Content.Server.Utility; using Content.Shared.GameObjects.Components.Weapons; -using Content.Shared.GameObjects.EntitySystems; -using Content.Shared.Physics; using Robust.Server.GameObjects.EntitySystems; using Robust.Shared.GameObjects; using Robust.Shared.Interfaces.GameObjects; -using Robust.Shared.Interfaces.Physics; using Robust.Shared.Interfaces.Timing; using Robust.Shared.IoC; -using Robust.Shared.Maths; namespace Content.Server.GameObjects.Components.Weapon { diff --git a/Content.Server/GameObjects/Components/Weapon/Melee/FlashComponent.cs b/Content.Server/GameObjects/Components/Weapon/Melee/FlashComponent.cs index ab46cf1139..9d12014cda 100644 --- a/Content.Server/GameObjects/Components/Weapon/Melee/FlashComponent.cs +++ b/Content.Server/GameObjects/Components/Weapon/Melee/FlashComponent.cs @@ -1,6 +1,5 @@ using System.Collections.Generic; using Content.Server.GameObjects.Components.Mobs; -using Content.Server.GameObjects.EntitySystems.Click; using Content.Shared.GameObjects.Components.Mobs; using Content.Shared.GameObjects.EntitySystems; using Content.Shared.Interfaces; @@ -14,9 +13,9 @@ using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.IoC; using Robust.Shared.Localization; using Robust.Shared.Serialization; +using Robust.Shared.Timers; using Robust.Shared.Utility; using Robust.Shared.ViewVariables; -using Timer = Robust.Shared.Timers.Timer; namespace Content.Server.GameObjects.Components.Weapon.Melee { diff --git a/Content.Server/GameObjects/Components/Weapon/Melee/MeleeWeaponComponent.cs b/Content.Server/GameObjects/Components/Weapon/Melee/MeleeWeaponComponent.cs index 2a9a7f639a..e0dc32b98f 100644 --- a/Content.Server/GameObjects/Components/Weapon/Melee/MeleeWeaponComponent.cs +++ b/Content.Server/GameObjects/Components/Weapon/Melee/MeleeWeaponComponent.cs @@ -1,8 +1,11 @@ using System; using System.Collections.Generic; using System.Linq; +using Content.Server.GameObjects.Components.Damage; +using Content.Server.GameObjects.EntitySystems; using Content.Server.Interfaces.GameObjects.Components.Interaction; using Content.Shared.GameObjects; +using Content.Shared.GameObjects.Components.Damage; using Content.Shared.GameObjects.Components.Items; using Robust.Server.GameObjects.EntitySystems; using Robust.Shared.GameObjects; diff --git a/Content.Server/GameObjects/Components/Weapon/Melee/StunbatonComponent.cs b/Content.Server/GameObjects/Components/Weapon/Melee/StunbatonComponent.cs index 952593c3e2..4d52c9382e 100644 --- a/Content.Server/GameObjects/Components/Weapon/Melee/StunbatonComponent.cs +++ b/Content.Server/GameObjects/Components/Weapon/Melee/StunbatonComponent.cs @@ -1,12 +1,12 @@ using System.Collections.Generic; using Content.Server.GameObjects.Components.GUI; +using Content.Server.GameObjects.Components.Items.Storage; using Content.Server.GameObjects.Components.Mobs; using Content.Server.GameObjects.Components.Power; -using Content.Server.GameObjects.EntitySystems.Click; using Content.Server.Interfaces.GameObjects.Components.Items; using Content.Shared.Audio; -using Content.Shared.GameObjects; using Content.Shared.GameObjects.EntitySystems; +using Content.Shared.GameObjects.Verbs; using Content.Shared.Interfaces; using Content.Shared.Interfaces.GameObjects.Components; using Robust.Server.GameObjects; diff --git a/Content.Server/GameObjects/Components/Weapon/Ranged/Ammunition/AmmoBoxComponent.cs b/Content.Server/GameObjects/Components/Weapon/Ranged/Ammunition/AmmoBoxComponent.cs index f39e8101bd..14d433e616 100644 --- a/Content.Server/GameObjects/Components/Weapon/Ranged/Ammunition/AmmoBoxComponent.cs +++ b/Content.Server/GameObjects/Components/Weapon/Ranged/Ammunition/AmmoBoxComponent.cs @@ -1,10 +1,11 @@ using System; using System.Collections.Generic; using Content.Server.GameObjects.Components.GUI; +using Content.Server.GameObjects.Components.Items.Storage; using Content.Server.GameObjects.Components.Weapon.Ranged.Barrels; -using Content.Shared.GameObjects; using Content.Shared.GameObjects.Components.Weapons.Ranged.Barrels; using Content.Shared.GameObjects.EntitySystems; +using Content.Shared.GameObjects.Verbs; using Content.Shared.Interfaces; using Content.Shared.Interfaces.GameObjects.Components; using Robust.Server.GameObjects; diff --git a/Content.Server/GameObjects/Components/Weapon/Ranged/Ammunition/AmmoComponent.cs b/Content.Server/GameObjects/Components/Weapon/Ranged/Ammunition/AmmoComponent.cs index 2939c6a6a3..e293e690d5 100644 --- a/Content.Server/GameObjects/Components/Weapon/Ranged/Ammunition/AmmoComponent.cs +++ b/Content.Server/GameObjects/Components/Weapon/Ranged/Ammunition/AmmoComponent.cs @@ -1,5 +1,4 @@ using System; -using System.Timers; using Content.Shared.GameObjects.Components.Weapons.Ranged.Barrels; using Robust.Server.GameObjects; using Robust.Server.GameObjects.EntitySystems; @@ -9,12 +8,11 @@ using Robust.Shared.GameObjects.Systems; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Interfaces.Timing; using Robust.Shared.IoC; +using Robust.Shared.Log; using Robust.Shared.Map; using Robust.Shared.Maths; using Robust.Shared.Serialization; using Robust.Shared.Utility; -using Logger = Robust.Shared.Log.Logger; -using Timer = Robust.Shared.Timers.Timer; namespace Content.Server.GameObjects.Components.Weapon.Ranged.Ammunition { diff --git a/Content.Server/GameObjects/Components/Weapon/Ranged/Ammunition/RangedMagazineComponent.cs b/Content.Server/GameObjects/Components/Weapon/Ranged/Ammunition/RangedMagazineComponent.cs index c299fcfcbe..594d1d6689 100644 --- a/Content.Server/GameObjects/Components/Weapon/Ranged/Ammunition/RangedMagazineComponent.cs +++ b/Content.Server/GameObjects/Components/Weapon/Ranged/Ammunition/RangedMagazineComponent.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using Content.Server.GameObjects.Components.GUI; +using Content.Server.GameObjects.Components.Items.Storage; using Content.Server.GameObjects.Components.Weapon.Ranged.Barrels; using Content.Shared.GameObjects.Components.Weapons.Ranged.Barrels; using Content.Shared.Interfaces; diff --git a/Content.Server/GameObjects/Components/Weapon/Ranged/Ammunition/SpeedLoaderComponent.cs b/Content.Server/GameObjects/Components/Weapon/Ranged/Ammunition/SpeedLoaderComponent.cs index 3e8e86e2e7..25696a9e0d 100644 --- a/Content.Server/GameObjects/Components/Weapon/Ranged/Ammunition/SpeedLoaderComponent.cs +++ b/Content.Server/GameObjects/Components/Weapon/Ranged/Ammunition/SpeedLoaderComponent.cs @@ -1,5 +1,6 @@ using System.Collections.Generic; using Content.Server.GameObjects.Components.GUI; +using Content.Server.GameObjects.Components.Items.Storage; using Content.Server.GameObjects.Components.Weapon.Ranged.Barrels; using Content.Shared.GameObjects.Components.Weapons.Ranged.Barrels; using Content.Shared.Interfaces; diff --git a/Content.Server/GameObjects/Components/Weapon/Ranged/Barrels/BoltActionBarrelComponent.cs b/Content.Server/GameObjects/Components/Weapon/Ranged/Barrels/BoltActionBarrelComponent.cs index 2d584cc840..75130f5246 100644 --- a/Content.Server/GameObjects/Components/Weapon/Ranged/Barrels/BoltActionBarrelComponent.cs +++ b/Content.Server/GameObjects/Components/Weapon/Ranged/Barrels/BoltActionBarrelComponent.cs @@ -1,8 +1,8 @@ using System.Collections.Generic; using Content.Server.GameObjects.Components.Weapon.Ranged.Ammunition; -using Content.Shared.GameObjects; using Content.Shared.GameObjects.Components.Weapons.Ranged.Barrels; using Content.Shared.GameObjects.EntitySystems; +using Content.Shared.GameObjects.Verbs; using Content.Shared.Interfaces; using Content.Shared.Interfaces.GameObjects.Components; using Robust.Server.GameObjects; diff --git a/Content.Server/GameObjects/Components/Weapon/Ranged/Barrels/RevolverBarrelComponent.cs b/Content.Server/GameObjects/Components/Weapon/Ranged/Barrels/RevolverBarrelComponent.cs index ee28884cdc..fe8488952c 100644 --- a/Content.Server/GameObjects/Components/Weapon/Ranged/Barrels/RevolverBarrelComponent.cs +++ b/Content.Server/GameObjects/Components/Weapon/Ranged/Barrels/RevolverBarrelComponent.cs @@ -1,8 +1,8 @@ using System; using Content.Server.GameObjects.Components.Weapon.Ranged.Ammunition; -using Content.Shared.GameObjects; using Content.Shared.GameObjects.Components.Weapons.Ranged.Barrels; using Content.Shared.GameObjects.EntitySystems; +using Content.Shared.GameObjects.Verbs; using Content.Shared.Interfaces; using Content.Shared.Interfaces.GameObjects.Components; using Robust.Server.GameObjects; diff --git a/Content.Server/GameObjects/Components/Weapon/Ranged/Barrels/ServerBatteryBarrelComponent.cs b/Content.Server/GameObjects/Components/Weapon/Ranged/Barrels/ServerBatteryBarrelComponent.cs index 88a887b6de..bdb9b88761 100644 --- a/Content.Server/GameObjects/Components/Weapon/Ranged/Barrels/ServerBatteryBarrelComponent.cs +++ b/Content.Server/GameObjects/Components/Weapon/Ranged/Barrels/ServerBatteryBarrelComponent.cs @@ -1,9 +1,10 @@ using System; using System.Collections.Generic; using Content.Server.GameObjects.Components.GUI; +using Content.Server.GameObjects.Components.Items.Storage; using Content.Server.GameObjects.Components.Power; using Content.Server.GameObjects.Components.Projectiles; -using Content.Shared.GameObjects; +using Content.Shared.GameObjects.Components.Damage; using Content.Shared.GameObjects.Components.Weapons.Ranged.Barrels; using Content.Shared.Interfaces.GameObjects.Components; using Robust.Server.GameObjects; diff --git a/Content.Server/GameObjects/Components/Weapon/Ranged/Barrels/ServerMagazineBarrelComponent.cs b/Content.Server/GameObjects/Components/Weapon/Ranged/Barrels/ServerMagazineBarrelComponent.cs index ff56ec7f76..3623c4b5db 100644 --- a/Content.Server/GameObjects/Components/Weapon/Ranged/Barrels/ServerMagazineBarrelComponent.cs +++ b/Content.Server/GameObjects/Components/Weapon/Ranged/Barrels/ServerMagazineBarrelComponent.cs @@ -1,12 +1,13 @@ using System; using System.Collections.Generic; using Content.Server.GameObjects.Components.GUI; +using Content.Server.GameObjects.Components.Items.Storage; using Content.Server.GameObjects.Components.Weapon.Ranged.Ammunition; -using Content.Server.GameObjects.EntitySystems.Click; using Content.Shared.GameObjects; using Content.Shared.GameObjects.Components.Weapons.Ranged; using Content.Shared.GameObjects.Components.Weapons.Ranged.Barrels; using Content.Shared.GameObjects.EntitySystems; +using Content.Shared.GameObjects.Verbs; using Content.Shared.Interfaces; using Content.Shared.Interfaces.GameObjects.Components; using Robust.Server.GameObjects; diff --git a/Content.Server/GameObjects/Components/Weapon/Ranged/Barrels/ServerRangedBarrelComponent.cs b/Content.Server/GameObjects/Components/Weapon/Ranged/Barrels/ServerRangedBarrelComponent.cs index 74e0cd5c4d..62ba32be5e 100644 --- a/Content.Server/GameObjects/Components/Weapon/Ranged/Barrels/ServerRangedBarrelComponent.cs +++ b/Content.Server/GameObjects/Components/Weapon/Ranged/Barrels/ServerRangedBarrelComponent.cs @@ -1,12 +1,14 @@ using System; using System.Collections.Generic; using System.Linq; +using Content.Server.GameObjects.Components.Damage; using Content.Server.GameObjects.Components.Mobs; using Content.Server.GameObjects.Components.Projectiles; using Content.Server.GameObjects.Components.Weapon.Ranged.Ammunition; -using Content.Server.GameObjects.EntitySystems.Click; +using Content.Server.Interfaces; using Content.Shared.Audio; using Content.Shared.GameObjects.Components.Weapons.Ranged; +using Content.Shared.GameObjects.EntitySystems; using Content.Shared.Interfaces.GameObjects.Components; using Content.Shared.Physics; using Robust.Server.GameObjects.EntitySystems; @@ -27,8 +29,6 @@ using Robust.Shared.Prototypes; using Robust.Shared.Random; using Robust.Shared.Serialization; using Robust.Shared.Utility; -using Content.Server.Interfaces; -using Content.Shared.GameObjects.EntitySystems; namespace Content.Server.GameObjects.Components.Weapon.Ranged.Barrels { diff --git a/Content.Server/GameObjects/Components/Weapon/Ranged/ServerRangedWeaponComponent.cs b/Content.Server/GameObjects/Components/Weapon/Ranged/ServerRangedWeaponComponent.cs index a2e0ea57c4..e87bacbe71 100644 --- a/Content.Server/GameObjects/Components/Weapon/Ranged/ServerRangedWeaponComponent.cs +++ b/Content.Server/GameObjects/Components/Weapon/Ranged/ServerRangedWeaponComponent.cs @@ -1,8 +1,10 @@ using System; +using Content.Server.GameObjects.Components.Damage; using Content.Server.GameObjects.Components.GUI; using Content.Server.GameObjects.Components.Mobs; using Content.Server.GameObjects.Components.Weapon.Ranged.Barrels; using Content.Shared.GameObjects; +using Content.Shared.GameObjects.Components.Damage; using Content.Shared.GameObjects.Components.Weapons.Ranged; using Content.Shared.GameObjects.EntitySystems; using Content.Shared.Interfaces; diff --git a/Content.Server/GameObjects/Components/WiresComponent.cs b/Content.Server/GameObjects/Components/WiresComponent.cs index f39d297b6d..cc9b0aba06 100644 --- a/Content.Server/GameObjects/Components/WiresComponent.cs +++ b/Content.Server/GameObjects/Components/WiresComponent.cs @@ -4,10 +4,8 @@ using System.Collections.Generic; using System.Linq; using Content.Server.GameObjects.Components.Interactable; using Content.Server.GameObjects.Components.VendingMachines; -using Content.Server.GameObjects.EntitySystems.Click; -using Content.Server.Interfaces.GameObjects.Components.Interaction; +using Content.Server.GameObjects.EntitySystems; using Content.Server.Interfaces; -using Content.Server.Interfaces.GameObjects; using Content.Server.Interfaces.GameObjects.Components.Items; using Content.Shared.GameObjects.Components; using Content.Shared.GameObjects.Components.Interactable; diff --git a/Content.Server/GameObjects/EntitySystems/AI/AiSystem.cs b/Content.Server/GameObjects/EntitySystems/AI/AiSystem.cs index dbca826f84..01139bf7af 100644 --- a/Content.Server/GameObjects/EntitySystems/AI/AiSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/AI/AiSystem.cs @@ -1,6 +1,5 @@ using System; using System.Collections.Generic; -using Content.Server.AI.Utility.AiLogic; using Content.Server.GameObjects.Components.Movement; using Content.Shared.GameObjects.Components.Movement; using JetBrains.Annotations; @@ -106,7 +105,7 @@ namespace Content.Server.GameObjects.EntitySystems.AI var processorId = args[0]; var entId = new EntityUid(int.Parse(args[1])); var ent = IoCManager.Resolve().GetEntity(entId); - var aiSystem = EntitySystem.Get(); + var aiSystem = Get(); if (!aiSystem.ProcessorTypeExists(processorId)) { diff --git a/Content.Server/GameObjects/EntitySystems/AI/Pathfinding/Accessible/AiReachableSystem.cs b/Content.Server/GameObjects/EntitySystems/AI/Pathfinding/Accessible/AiReachableSystem.cs index 8ad08996c8..3531dcdde1 100644 --- a/Content.Server/GameObjects/EntitySystems/AI/Pathfinding/Accessible/AiReachableSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/AI/Pathfinding/Accessible/AiReachableSystem.cs @@ -1,9 +1,7 @@ using System; using System.Collections.Generic; -using System.Linq; using Content.Server.GameObjects.Components.Access; using Content.Server.GameObjects.EntitySystems.AI.Pathfinding.Pathfinders; -using Content.Server.GameObjects.EntitySystems.Pathfinding; using Content.Shared.AI; using JetBrains.Annotations; using Robust.Server.GameObjects; @@ -75,7 +73,7 @@ namespace Content.Server.GameObjects.EntitySystems.AI.Pathfinding.Accessible // Plus this way we can check if everything is equal except for vision so an entity with a lower vision radius can use an entity with a higher vision radius' cached result private Dictionary Regions)>> _cachedAccessible = new Dictionary)>>(); - + private readonly List _queuedCacheDeletions = new List(); #if DEBUG @@ -91,7 +89,7 @@ namespace Content.Server.GameObjects.EntitySystems.AI.Pathfinding.Accessible #endif _mapmanager.OnGridRemoved += GridRemoved; } - + private void GridRemoved(GridId gridId) { _regions.Remove(gridId); @@ -457,7 +455,7 @@ namespace Content.Server.GameObjects.EntitySystems.AI.Pathfinding.Accessible /// This is already calculated in advance so may as well re-use it /// private PathfindingRegion CalculateNode( - PathfindingNode node, + PathfindingNode node, Dictionary existingRegions, HashSet chunkRegions, int x, int y) @@ -497,15 +495,15 @@ namespace Content.Server.GameObjects.EntitySystems.AI.Pathfinding.Accessible !leftRegion.IsDoor) { // We'll try and connect the left node's region to the bottom region if they're separate (yay merge) - if (bottomNeighbor != null && + if (bottomNeighbor != null && existingRegions.TryGetValue(bottomNeighbor, out bottomRegion) && - bottomRegion != leftRegion && + bottomRegion != leftRegion && !bottomRegion.IsDoor) { bottomRegion.Add(node); existingRegions.Add(node, bottomRegion); MergeInto(leftRegion, bottomRegion, existingRegions); - + // Cleanup leftRegion // MergeInto will remove it from the overall region chunk cache while we need to remove it from // our short-term ones (chunkRegions and existingRegions) @@ -515,7 +513,7 @@ namespace Content.Server.GameObjects.EntitySystems.AI.Pathfinding.Accessible { existingRegions[leftNode] = bottomRegion; } - + return bottomRegion; } @@ -549,7 +547,7 @@ namespace Content.Server.GameObjects.EntitySystems.AI.Pathfinding.Accessible /// /// /// - private void MergeInto(PathfindingRegion source, PathfindingRegion target, Dictionary existingRegions = null) + private void MergeInto(PathfindingRegion source, PathfindingRegion target, Dictionary existingRegions = null) { DebugTools.AssertNotNull(source); DebugTools.AssertNotNull(target); @@ -586,7 +584,7 @@ namespace Content.Server.GameObjects.EntitySystems.AI.Pathfinding.Accessible private void ClearCache(PathfindingRegion region) { DebugTools.Assert(region.Deleted); - + // Need to forcibly clear cache for ourself and anything that includes us foreach (var (_, cachedRegions) in _cachedAccessible) { @@ -599,7 +597,7 @@ namespace Content.Server.GameObjects.EntitySystems.AI.Pathfinding.Accessible // We could just have GetVisionAccessible remove us if it can tell we're deleted but that // seems like it could be unreliable var regionsToClear = new List(); - + foreach (var (otherRegion, cache) in cachedRegions) { if (cache.Regions.Contains(region)) @@ -613,9 +611,9 @@ namespace Content.Server.GameObjects.EntitySystems.AI.Pathfinding.Accessible cachedRegions.Remove(otherRegion); } } - + #if DEBUG - if (_regions.TryGetValue(region.ParentChunk.GridId, out var chunks) && + if (_regions.TryGetValue(region.ParentChunk.GridId, out var chunks) && chunks.TryGetValue(region.ParentChunk, out var regions)) { DebugTools.Assert(!regions.Contains(region)); @@ -642,7 +640,7 @@ namespace Content.Server.GameObjects.EntitySystems.AI.Pathfinding.Accessible _queuedCacheDeletions.Add(region); region.Shutdown(); } - + _regions[chunk.GridId].Remove(chunk); } @@ -673,7 +671,7 @@ namespace Content.Server.GameObjects.EntitySystems.AI.Pathfinding.Accessible { DebugTools.Assert(!region.Deleted); } - + DebugTools.Assert(chunkRegions.Count < Math.Pow(PathfindingChunk.ChunkSize, 2)); SendRegionsDebugMessage(chunk.GridId); #endif diff --git a/Content.Server/GameObjects/EntitySystems/AI/Pathfinding/Accessible/BFSPathfinder.cs b/Content.Server/GameObjects/EntitySystems/AI/Pathfinding/Accessible/BFSPathfinder.cs index ddb5628a02..28e01bd0c8 100644 --- a/Content.Server/GameObjects/EntitySystems/AI/Pathfinding/Accessible/BFSPathfinder.cs +++ b/Content.Server/GameObjects/EntitySystems/AI/Pathfinding/Accessible/BFSPathfinder.cs @@ -1,6 +1,5 @@ using System.Collections.Generic; using Content.Server.GameObjects.EntitySystems.AI.Pathfinding.Pathfinders; -using Content.Server.GameObjects.EntitySystems.Pathfinding; using Robust.Shared.GameObjects.Systems; using Robust.Shared.Map; @@ -36,7 +35,7 @@ namespace Content.Server.GameObjects.EntitySystems.AI.Pathfinding.Accessible { startNode = pathfindingSystem.GetNode(pathfindingArgs.End); } - + PathfindingNode currentNode; openTiles.Enqueue(startNode); @@ -49,13 +48,13 @@ namespace Content.Server.GameObjects.EntitySystems.AI.Pathfinding.Accessible // No distances stored so can just check closed tiles here if (closedTiles.Contains(neighbor.TileRef)) continue; closedTiles.Add(currentNode.TileRef); - + // So currently tileCost gets the octile distance between the 2 so we'll also use that for our range check var tileCost = PathfindingHelpers.GetTileCost(pathfindingArgs, startNode, neighbor); var direction = PathfindingHelpers.RelativeDirection(neighbor, currentNode); - - if (tileCost == null || - tileCost > pathfindingArgs.Proximity || + + if (tileCost == null || + tileCost > pathfindingArgs.Proximity || !PathfindingHelpers.DirectionTraversable(pathfindingArgs.CollisionMask, pathfindingArgs.Access, currentNode, direction)) { continue; @@ -67,4 +66,4 @@ namespace Content.Server.GameObjects.EntitySystems.AI.Pathfinding.Accessible } } } -} \ No newline at end of file +} diff --git a/Content.Server/GameObjects/EntitySystems/AI/Pathfinding/Accessible/PathfindingRegion.cs b/Content.Server/GameObjects/EntitySystems/AI/Pathfinding/Accessible/PathfindingRegion.cs index 5de05ee925..d3e7fba401 100644 --- a/Content.Server/GameObjects/EntitySystems/AI/Pathfinding/Accessible/PathfindingRegion.cs +++ b/Content.Server/GameObjects/EntitySystems/AI/Pathfinding/Accessible/PathfindingRegion.cs @@ -1,8 +1,5 @@ using System; using System.Collections.Generic; -using System.Diagnostics; -using Content.Server.GameObjects.EntitySystems.Pathfinding; -using Robust.Shared.Utility; namespace Content.Server.GameObjects.EntitySystems.AI.Pathfinding.Accessible { @@ -16,7 +13,7 @@ namespace Content.Server.GameObjects.EntitySystems.AI.Pathfinding.Accessible /// Bottom-left reference node of the region /// public PathfindingNode OriginNode { get; } - + // The shape may be anything within the bounds of a chunk, this is just a quick way to do a bounds-check /// @@ -49,13 +46,13 @@ namespace Content.Server.GameObjects.EntitySystems.AI.Pathfinding.Accessible { // Tell our neighbors we no longer exist ;-/ var neighbors = new List(Neighbors); - + for (var i = 0; i < neighbors.Count; i++) { var neighbor = neighbors[i]; neighbor.Neighbors.Remove(this); } - + _nodes.Clear(); Neighbors.Clear(); @@ -81,7 +78,7 @@ namespace Content.Server.GameObjects.EntitySystems.AI.Pathfinding.Accessible { xDistance = Math.Abs(xDistance + otherRegion.Width); } - + if (yDistance > 0) { yDistance -= Height; @@ -90,7 +87,7 @@ namespace Content.Server.GameObjects.EntitySystems.AI.Pathfinding.Accessible { yDistance = Math.Abs(yDistance + otherRegion.Height); } - + return PathfindingHelpers.OctileDistance(xDistance, yDistance); } @@ -121,10 +118,10 @@ namespace Content.Server.GameObjects.EntitySystems.AI.Pathfinding.Accessible { Height = yHeight; } - + _nodes.Add(node); } - + // HashSet wasn't working correctly so uhh we got this. public bool Equals(PathfindingRegion other) { @@ -141,4 +138,4 @@ namespace Content.Server.GameObjects.EntitySystems.AI.Pathfinding.Accessible return OriginNode.GetHashCode(); } } -} \ No newline at end of file +} diff --git a/Content.Server/GameObjects/EntitySystems/AI/Pathfinding/Pathfinders/AStarPathfindingJob.cs b/Content.Server/GameObjects/EntitySystems/AI/Pathfinding/Pathfinders/AStarPathfindingJob.cs index 0f9f4deacc..f7aa32d3e2 100644 --- a/Content.Server/GameObjects/EntitySystems/AI/Pathfinding/Pathfinders/AStarPathfindingJob.cs +++ b/Content.Server/GameObjects/EntitySystems/AI/Pathfinding/Pathfinders/AStarPathfindingJob.cs @@ -1,10 +1,8 @@ using System; -using System.Collections; using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; using Content.Server.GameObjects.EntitySystems.JobQueues; -using Content.Server.GameObjects.EntitySystems.Pathfinding; using Content.Shared.AI; using Robust.Shared.Map; using Robust.Shared.Utility; @@ -55,7 +53,7 @@ namespace Content.Server.GameObjects.EntitySystems.AI.Pathfinding.Pathfinders costSoFar[_startNode] = 0.0f; var routeFound = false; var count = 0; - + while (frontier.Count > 0) { // Handle whether we need to pause if we've taken too long @@ -69,7 +67,7 @@ namespace Content.Server.GameObjects.EntitySystems.AI.Pathfinding.Pathfinders return null; } } - + // Actual pathfinding here (_, currentNode) = frontier.Take(); if (currentNode.Equals(_endNode)) diff --git a/Content.Server/GameObjects/EntitySystems/AI/Pathfinding/Pathfinders/JpsPathfindingJob.cs b/Content.Server/GameObjects/EntitySystems/AI/Pathfinding/Pathfinders/JpsPathfindingJob.cs index 0d47f0671b..db3639e513 100644 --- a/Content.Server/GameObjects/EntitySystems/AI/Pathfinding/Pathfinders/JpsPathfindingJob.cs +++ b/Content.Server/GameObjects/EntitySystems/AI/Pathfinding/Pathfinders/JpsPathfindingJob.cs @@ -1,10 +1,8 @@ using System; using System.Collections.Generic; -using System.Linq; using System.Threading; using System.Threading.Tasks; using Content.Server.GameObjects.EntitySystems.JobQueues; -using Content.Server.GameObjects.EntitySystems.Pathfinding; using Content.Shared.AI; using Robust.Shared.Log; using Robust.Shared.Map; @@ -284,7 +282,7 @@ namespace Content.Server.GameObjects.EntitySystems.AI.Pathfinding.Pathfinders // If we're going diagonally need to check all cardinals. // I tried just casting direction ints and offsets to make it smaller but brain no worky. // From NorthEast we check (Closed / Open) S - SE, W - NW - + PathfindingNode openNeighborOne = null; PathfindingNode closedNeighborOne = null; PathfindingNode openNeighborTwo = null; diff --git a/Content.Server/GameObjects/EntitySystems/AI/Pathfinding/Pathfinders/PathfindingComparer.cs b/Content.Server/GameObjects/EntitySystems/AI/Pathfinding/Pathfinders/PathfindingComparer.cs index 7188542f5e..f338cc9154 100644 --- a/Content.Server/GameObjects/EntitySystems/AI/Pathfinding/Pathfinders/PathfindingComparer.cs +++ b/Content.Server/GameObjects/EntitySystems/AI/Pathfinding/Pathfinders/PathfindingComparer.cs @@ -1,6 +1,5 @@ using System; using System.Collections.Generic; -using Content.Server.GameObjects.EntitySystems.Pathfinding; namespace Content.Server.GameObjects.EntitySystems.AI.Pathfinding.Pathfinders { diff --git a/Content.Server/GameObjects/EntitySystems/AI/Pathfinding/PathfindingChunk.cs b/Content.Server/GameObjects/EntitySystems/AI/Pathfinding/PathfindingChunk.cs index ebb2b3657f..89e909c1e6 100644 --- a/Content.Server/GameObjects/EntitySystems/AI/Pathfinding/PathfindingChunk.cs +++ b/Content.Server/GameObjects/EntitySystems/AI/Pathfinding/PathfindingChunk.cs @@ -1,12 +1,9 @@ using System; using System.Collections.Generic; -using System.IO; using System.Linq; -using Content.Server.GameObjects.EntitySystems.Pathfinding; using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Systems; using Robust.Shared.Interfaces.GameObjects; -using Robust.Shared.Interfaces.Map; using Robust.Shared.Interfaces.Timing; using Robust.Shared.IoC; using Robust.Shared.Map; @@ -23,7 +20,7 @@ namespace Content.Server.GameObjects.EntitySystems.AI.Pathfinding Chunk = chunk; } } - + public class PathfindingChunk { public TimeSpan LastUpdate { get; private set; } @@ -53,7 +50,7 @@ namespace Content.Server.GameObjects.EntitySystems.AI.Pathfinding CreateNode(tileRef); } } - + Dirty(); } @@ -71,7 +68,7 @@ namespace Content.Server.GameObjects.EntitySystems.AI.Pathfinding { var pathfindingSystem = EntitySystem.Get(); var chunkGrid = pathfindingSystem.Graph[GridId]; - + for (var x = -1; x <= 1; x++) { for (var y = -1; y <= 1; y++) @@ -159,7 +156,7 @@ namespace Content.Server.GameObjects.EntitySystems.AI.Pathfinding } yield break; - + } // South edge if (node.TileRef.Y == _indices.Y) diff --git a/Content.Server/GameObjects/EntitySystems/AI/Pathfinding/PathfindingHelpers.cs b/Content.Server/GameObjects/EntitySystems/AI/Pathfinding/PathfindingHelpers.cs index cabe4e92e5..3abd8e1966 100644 --- a/Content.Server/GameObjects/EntitySystems/AI/Pathfinding/PathfindingHelpers.cs +++ b/Content.Server/GameObjects/EntitySystems/AI/Pathfinding/PathfindingHelpers.cs @@ -1,9 +1,7 @@ using System; using System.Collections.Generic; -using Content.Server.GameObjects.Components.Access; using Content.Server.GameObjects.EntitySystems.AI.Pathfinding.Accessible; using Content.Server.GameObjects.EntitySystems.AI.Pathfinding.Pathfinders; -using Content.Server.GameObjects.EntitySystems.Pathfinding; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Interfaces.Map; using Robust.Shared.IoC; @@ -38,40 +36,40 @@ namespace Content.Server.GameObjects.EntitySystems.AI.Pathfinding // If it's a diagonal we need to check NSEW to see if we can get to it and stop corner cutting, NE needs N and E etc. // Given there's different collision layers stored for each node in the graph it's probably not worth it to cache this // Also this will help with corner-cutting - + PathfindingNode northNeighbor = null; PathfindingNode southNeighbor = null; PathfindingNode eastNeighbor = null; PathfindingNode westNeighbor = null; foreach (var neighbor in currentNode.GetNeighbors()) { - if (neighbor.TileRef.X == currentNode.TileRef.X && + if (neighbor.TileRef.X == currentNode.TileRef.X && neighbor.TileRef.Y == currentNode.TileRef.Y + 1) { northNeighbor = neighbor; continue; - } - - if (neighbor.TileRef.X == currentNode.TileRef.X + 1 && + } + + if (neighbor.TileRef.X == currentNode.TileRef.X + 1 && neighbor.TileRef.Y == currentNode.TileRef.Y) { eastNeighbor = neighbor; continue; } - - if (neighbor.TileRef.X == currentNode.TileRef.X && + + if (neighbor.TileRef.X == currentNode.TileRef.X && neighbor.TileRef.Y == currentNode.TileRef.Y - 1) { southNeighbor = neighbor; continue; - } - - if (neighbor.TileRef.X == currentNode.TileRef.X - 1 && + } + + if (neighbor.TileRef.X == currentNode.TileRef.X - 1 && neighbor.TileRef.Y == currentNode.TileRef.Y) { westNeighbor = neighbor; continue; - } + } } switch (direction) @@ -130,7 +128,7 @@ namespace Content.Server.GameObjects.EntitySystems.AI.Pathfinding return true; } - + public static Queue ReconstructPath(Dictionary cameFrom, PathfindingNode current) { var running = new Stack(); @@ -244,7 +242,7 @@ namespace Content.Server.GameObjects.EntitySystems.AI.Pathfinding return 1.4f * dstX + (dstY - dstX); } - + public static float OctileDistance(TileRef endTile, TileRef startTile) { // "Fast Euclidean" / octile. diff --git a/Content.Server/GameObjects/EntitySystems/AI/Pathfinding/PathfindingNode.cs b/Content.Server/GameObjects/EntitySystems/AI/Pathfinding/PathfindingNode.cs index c35bf9a0f3..a5047294cd 100644 --- a/Content.Server/GameObjects/EntitySystems/AI/Pathfinding/PathfindingNode.cs +++ b/Content.Server/GameObjects/EntitySystems/AI/Pathfinding/PathfindingNode.cs @@ -3,16 +3,13 @@ using System.Collections.Generic; using System.Linq; using Content.Server.GameObjects.Components.Access; using Content.Server.GameObjects.Components.Doors; -using Content.Server.GameObjects.EntitySystems.AI.Pathfinding; -using Robust.Server.GameObjects; -using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Components; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Map; using Robust.Shared.Maths; using Robust.Shared.Utility; -namespace Content.Server.GameObjects.EntitySystems.Pathfinding +namespace Content.Server.GameObjects.EntitySystems.AI.Pathfinding { public class PathfindingNode { @@ -20,7 +17,7 @@ namespace Content.Server.GameObjects.EntitySystems.Pathfinding private readonly PathfindingChunk _parentChunk; public TileRef TileRef { get; private set; } - + /// /// Whenever there's a change in the collision layers we update the mask as the graph has more reads than writes /// @@ -46,7 +43,7 @@ namespace Content.Server.GameObjects.EntitySystems.Pathfinding public static bool IsRelevant(IEntity entity, ICollidableComponent collidableComponent) { - if (entity.Transform.GridID == GridId.Invalid || + if (entity.Transform.GridID == GridId.Invalid || (PathfindingSystem.TrackedCollisionLayers & collidableComponent.CollisionLayer) == 0) { return false; @@ -66,7 +63,7 @@ namespace Content.Server.GameObjects.EntitySystems.Pathfinding { neighborChunks = ParentChunk.RelevantChunks(this).ToList(); } - + for (var x = -1; x <= 1; x++) { for (var y = -1; y <= 1; y++) @@ -112,7 +109,7 @@ namespace Content.Server.GameObjects.EntitySystems.Pathfinding { return ParentChunk.Nodes[chunkXOffset + 1, chunkYOffset]; } - + neighborMapIndices = new MapIndices(TileRef.X + 1, TileRef.Y); foreach (var neighbor in ParentChunk.GetNeighbors()) { @@ -129,7 +126,7 @@ namespace Content.Server.GameObjects.EntitySystems.Pathfinding { return ParentChunk.Nodes[chunkXOffset + 1, chunkYOffset + 1]; } - + neighborMapIndices = new MapIndices(TileRef.X + 1, TileRef.Y + 1); foreach (var neighbor in ParentChunk.GetNeighbors()) { @@ -146,7 +143,7 @@ namespace Content.Server.GameObjects.EntitySystems.Pathfinding { return ParentChunk.Nodes[chunkXOffset, chunkYOffset + 1]; } - + neighborMapIndices = new MapIndices(TileRef.X, TileRef.Y + 1); foreach (var neighbor in ParentChunk.GetNeighbors()) { @@ -163,7 +160,7 @@ namespace Content.Server.GameObjects.EntitySystems.Pathfinding { return ParentChunk.Nodes[chunkXOffset - 1, chunkYOffset + 1]; } - + neighborMapIndices = new MapIndices(TileRef.X - 1, TileRef.Y + 1); foreach (var neighbor in ParentChunk.GetNeighbors()) { @@ -180,7 +177,7 @@ namespace Content.Server.GameObjects.EntitySystems.Pathfinding { return ParentChunk.Nodes[chunkXOffset - 1, chunkYOffset]; } - + neighborMapIndices = new MapIndices(TileRef.X - 1, TileRef.Y); foreach (var neighbor in ParentChunk.GetNeighbors()) { @@ -197,7 +194,7 @@ namespace Content.Server.GameObjects.EntitySystems.Pathfinding { return ParentChunk.Nodes[chunkXOffset - 1, chunkYOffset - 1]; } - + neighborMapIndices = new MapIndices(TileRef.X - 1, TileRef.Y - 1); foreach (var neighbor in ParentChunk.GetNeighbors()) { @@ -214,7 +211,7 @@ namespace Content.Server.GameObjects.EntitySystems.Pathfinding { return ParentChunk.Nodes[chunkXOffset, chunkYOffset - 1]; } - + neighborMapIndices = new MapIndices(TileRef.X, TileRef.Y - 1); foreach (var neighbor in ParentChunk.GetNeighbors()) { @@ -231,7 +228,7 @@ namespace Content.Server.GameObjects.EntitySystems.Pathfinding { return ParentChunk.Nodes[chunkXOffset + 1, chunkYOffset - 1]; } - + neighborMapIndices = new MapIndices(TileRef.X + 1, TileRef.Y - 1); foreach (var neighbor in ParentChunk.GetNeighbors()) { @@ -276,9 +273,9 @@ namespace Content.Server.GameObjects.EntitySystems.Pathfinding } return; } - + DebugTools.Assert((PathfindingSystem.TrackedCollisionLayers & collidableComponent.CollisionLayer) != 0); - + if (!collidableComponent.Anchored) { _physicsLayers.Add(entity, collidableComponent.CollisionLayer); @@ -304,12 +301,12 @@ namespace Content.Server.GameObjects.EntitySystems.Pathfinding if (_physicsLayers.ContainsKey(entity)) { _physicsLayers.Remove(entity); - } + } else if (_accessReaders.ContainsKey(entity)) { _accessReaders.Remove(entity); ParentChunk.Dirty(); - } + } else if (_blockedCollidables.ContainsKey(entity)) { _blockedCollidables.Remove(entity); diff --git a/Content.Server/GameObjects/EntitySystems/AI/Pathfinding/PathfindingSystem.cs b/Content.Server/GameObjects/EntitySystems/AI/Pathfinding/PathfindingSystem.cs index 05069f27fd..ff672ee634 100644 --- a/Content.Server/GameObjects/EntitySystems/AI/Pathfinding/PathfindingSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/AI/Pathfinding/PathfindingSystem.cs @@ -1,15 +1,11 @@ using System; using System.Collections.Generic; -using System.IO; using System.Threading; using Content.Server.GameObjects.Components.Access; -using Content.Server.GameObjects.Components.GUI; using Content.Server.GameObjects.EntitySystems.AI.Pathfinding.Pathfinders; using Content.Server.GameObjects.EntitySystems.JobQueues; using Content.Server.GameObjects.EntitySystems.JobQueues.Queues; -using Content.Server.GameObjects.EntitySystems.Pathfinding; using Content.Shared.Physics; -using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Components; using Robust.Shared.GameObjects.Components.Transform; using Robust.Shared.GameObjects.Systems; @@ -275,9 +271,9 @@ namespace Content.Server.GameObjects.EntitySystems.AI.Pathfinding /// private void HandleEntityAdd(IEntity entity) { - if (entity.Deleted || + if (entity.Deleted || _lastKnownPositions.ContainsKey(entity) || - !entity.TryGetComponent(out ICollidableComponent collidableComponent) || + !entity.TryGetComponent(out ICollidableComponent collidableComponent) || !PathfindingNode.IsRelevant(entity, collidableComponent)) { return; @@ -315,23 +311,23 @@ namespace Content.Server.GameObjects.EntitySystems.AI.Pathfinding private void HandleEntityMove(MoveEvent moveEvent) { // If we've moved to space or the likes then remove us. - if (moveEvent.Sender.Deleted || + if (moveEvent.Sender.Deleted || !moveEvent.Sender.TryGetComponent(out ICollidableComponent collidableComponent) || !PathfindingNode.IsRelevant(moveEvent.Sender, collidableComponent)) { HandleEntityRemove(moveEvent.Sender); return; } - + // Memory leak protection until grid parenting confirmed fix / you REALLY need the performance var gridBounds = _mapManager.GetGrid(moveEvent.Sender.Transform.GridID).WorldBounds; - + if (!gridBounds.Contains(moveEvent.Sender.Transform.WorldPosition)) { HandleEntityRemove(moveEvent.Sender); return; } - + // If we move from space to a grid we may need to start tracking it. if (!_lastKnownPositions.TryGetValue(moveEvent.Sender, out var oldNode)) { @@ -342,7 +338,7 @@ namespace Content.Server.GameObjects.EntitySystems.AI.Pathfinding // The pathfinding graph is tile-based so first we'll check if they're on a different tile and if we need to update. // If you get entities bigger than 1 tile wide you'll need some other system so god help you. var newTile = _mapManager.GetGrid(moveEvent.NewPosition.GridID).GetTileRef(moveEvent.NewPosition); - + if (oldNode == null || oldNode.TileRef == newTile) { return; diff --git a/Content.Server/GameObjects/EntitySystems/AI/Steering/AiSteeringSystem.cs b/Content.Server/GameObjects/EntitySystems/AI/Steering/AiSteeringSystem.cs index c6296a98cc..ea9ca44ec1 100644 --- a/Content.Server/GameObjects/EntitySystems/AI/Steering/AiSteeringSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/AI/Steering/AiSteeringSystem.cs @@ -8,14 +8,11 @@ using Content.Server.GameObjects.EntitySystems.AI.Pathfinding; using Content.Server.GameObjects.EntitySystems.AI.Pathfinding.Pathfinders; using Content.Server.GameObjects.EntitySystems.JobQueues; using Content.Shared.GameObjects.EntitySystems; -using Robust.Server.GameObjects; using Robust.Server.Interfaces.Timing; -using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Components; using Robust.Shared.GameObjects.Systems; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Interfaces.Map; -using Robust.Shared.Interfaces.Timing; using Robust.Shared.IoC; using Robust.Shared.Map; using Robust.Shared.Maths; diff --git a/Content.Server/GameObjects/EntitySystems/ActSystem.cs b/Content.Server/GameObjects/EntitySystems/ActSystem.cs index 4fd95bb847..56be8389ea 100644 --- a/Content.Server/GameObjects/EntitySystems/ActSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/ActSystem.cs @@ -5,7 +5,7 @@ using Robust.Shared.GameObjects.Systems; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Map; -namespace Content.Server.Interfaces.GameObjects.Components.Interaction +namespace Content.Server.GameObjects.EntitySystems { /// /// This interface gives components behavior on getting destoyed. diff --git a/Content.Server/GameObjects/EntitySystems/AtmosphereSystem.cs b/Content.Server/GameObjects/EntitySystems/AtmosphereSystem.cs index 4faabfe44b..71acf54c52 100644 --- a/Content.Server/GameObjects/EntitySystems/AtmosphereSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/AtmosphereSystem.cs @@ -2,7 +2,6 @@ using System; using System.Collections.Generic; using Content.Server.Atmos; -using Content.Server.GameObjects.Components.Atmos; using JetBrains.Annotations; using Robust.Server.Interfaces.Timing; using Robust.Shared.GameObjects; @@ -10,6 +9,7 @@ using Robust.Shared.GameObjects.Components.Map; using Robust.Shared.GameObjects.Systems; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Interfaces.Map; +using Robust.Shared.IoC; using Robust.Shared.Map; namespace Content.Server.GameObjects.EntitySystems @@ -18,9 +18,9 @@ namespace Content.Server.GameObjects.EntitySystems public class AtmosphereSystem : EntitySystem { #pragma warning disable 649 - [Robust.Shared.IoC.Dependency] private readonly IMapManager _mapManager = default!; - [Robust.Shared.IoC.Dependency] private readonly IEntityManager _entityManager = default!; - [Robust.Shared.IoC.Dependency] private readonly IPauseManager _pauseManager = default!; + [Dependency] private readonly IMapManager _mapManager = default!; + [Dependency] private readonly IEntityManager _entityManager = default!; + [Dependency] private readonly IPauseManager _pauseManager = default!; #pragma warning restore 649 public override void Initialize() diff --git a/Content.Server/GameObjects/EntitySystems/BaseChargerSystem.cs b/Content.Server/GameObjects/EntitySystems/BaseChargerSystem.cs index 2d763020b4..d206e07461 100644 --- a/Content.Server/GameObjects/EntitySystems/BaseChargerSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/BaseChargerSystem.cs @@ -1,8 +1,8 @@ -using Content.Server.GameObjects.Components.Power.Chargers; +using Content.Server.GameObjects.Components.Power.ApcNetComponents.PowerReceiverUsers; using JetBrains.Annotations; using Robust.Shared.GameObjects.Systems; -namespace Content.Server.Interfaces.GameObjects.Components.Interaction +namespace Content.Server.GameObjects.EntitySystems { [UsedImplicitly] internal sealed class BaseChargerSystem : EntitySystem diff --git a/Content.Server/GameObjects/EntitySystems/BloodstreamSystem.cs b/Content.Server/GameObjects/EntitySystems/BloodstreamSystem.cs index 5a1587b626..fc6a69f325 100644 --- a/Content.Server/GameObjects/EntitySystems/BloodstreamSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/BloodstreamSystem.cs @@ -2,7 +2,7 @@ using JetBrains.Annotations; using Robust.Shared.GameObjects.Systems; -namespace Content.Server.Interfaces.GameObjects.Components.Interaction +namespace Content.Server.GameObjects.EntitySystems { /// /// Triggers metabolism updates for diff --git a/Content.Server/GameObjects/EntitySystems/ChemistrySystem.cs b/Content.Server/GameObjects/EntitySystems/ChemistrySystem.cs index 39cca2be0e..69bd555460 100644 --- a/Content.Server/GameObjects/EntitySystems/ChemistrySystem.cs +++ b/Content.Server/GameObjects/EntitySystems/ChemistrySystem.cs @@ -4,7 +4,7 @@ using JetBrains.Annotations; using Robust.Shared.GameObjects.Systems; using Robust.Shared.Interfaces.GameObjects; -namespace Content.Server.Interfaces.GameObjects.Components.Interaction +namespace Content.Server.GameObjects.EntitySystems { /// /// This interface gives components behavior on whether entities solution (implying SolutionComponent is in place) is changed diff --git a/Content.Server/GameObjects/EntitySystems/Click/ExamineSystem.cs b/Content.Server/GameObjects/EntitySystems/Click/ExamineSystem.cs index cec72d8508..53fa77c516 100644 --- a/Content.Server/GameObjects/EntitySystems/Click/ExamineSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/Click/ExamineSystem.cs @@ -4,7 +4,6 @@ using Robust.Server.Interfaces.Player; using Robust.Shared.GameObjects; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.IoC; -using Robust.Shared.Maths; using Robust.Shared.Utility; namespace Content.Server.GameObjects.EntitySystems.Click diff --git a/Content.Server/GameObjects/EntitySystems/CombatModeSystem.cs b/Content.Server/GameObjects/EntitySystems/CombatModeSystem.cs index f8fd65915e..12e4963718 100644 --- a/Content.Server/GameObjects/EntitySystems/CombatModeSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/CombatModeSystem.cs @@ -1,17 +1,7 @@ -using Content.Server.GameObjects.Components.Mobs; -using Content.Shared.GameObjects.EntitySystems; -using Content.Shared.Input; +using Content.Shared.GameObjects.EntitySystems; using JetBrains.Annotations; -using Robust.Server.GameObjects.EntitySystems; -using Robust.Server.Interfaces.Player; -using Robust.Shared.Input; -using Robust.Shared.Interfaces.Random; -using Robust.Shared.IoC; -using Robust.Shared.Log; -using Robust.Shared.Players; -using Robust.Shared.Random; -namespace Content.Server.Interfaces.GameObjects.Components.Interaction +namespace Content.Server.GameObjects.EntitySystems { [UsedImplicitly] public sealed class CombatModeSystem : SharedCombatModeSystem diff --git a/Content.Server/GameObjects/EntitySystems/ConstructionSystem.cs b/Content.Server/GameObjects/EntitySystems/ConstructionSystem.cs index 8b7c7ddeb5..b054fd5401 100644 --- a/Content.Server/GameObjects/EntitySystems/ConstructionSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/ConstructionSystem.cs @@ -1,15 +1,16 @@ using System; using System.Collections.Generic; -using Content.Server.GameObjects.Components; using Content.Server.GameObjects.Components.Construction; using Content.Server.GameObjects.Components.GUI; using Content.Server.GameObjects.Components.Interactable; +using Content.Server.GameObjects.Components.Items.Storage; using Content.Server.GameObjects.Components.Stack; using Content.Server.GameObjects.EntitySystems.Click; using Content.Server.Utility; using Content.Shared.Construction; using Content.Shared.GameObjects.Components; using Content.Shared.GameObjects.Components.Interactable; +using Content.Shared.GameObjects.EntitySystems; using Content.Shared.Interfaces.GameObjects.Components; using JetBrains.Annotations; using Robust.Server.GameObjects; @@ -32,7 +33,7 @@ namespace Content.Server.GameObjects.EntitySystems /// The server-side implementation of the construction system, which is used for constructing entities in game. /// [UsedImplicitly] - internal class ConstructionSystem : Shared.GameObjects.EntitySystems.SharedConstructionSystem + internal class ConstructionSystem : SharedConstructionSystem { #pragma warning disable 649 [Dependency] private readonly IPrototypeManager _prototypeManager; @@ -337,7 +338,7 @@ namespace Content.Server.GameObjects.EntitySystems } // OK WE'RE GOOD CONSTRUCTION STARTED. - EntitySystem.Get().PlayFromEntity("/Audio/Items/deconstruct.ogg", placingEnt); + Get().PlayFromEntity("/Audio/Items/deconstruct.ogg", placingEnt); if (prototype.Stages.Count == 2) { // Exactly 2 stages, so don't make an intermediate frame. diff --git a/Content.Server/GameObjects/EntitySystems/DoAfter/DoAfter.cs b/Content.Server/GameObjects/EntitySystems/DoAfter/DoAfter.cs index 63eb8ee378..2a409d0bfe 100644 --- a/Content.Server/GameObjects/EntitySystems/DoAfter/DoAfter.cs +++ b/Content.Server/GameObjects/EntitySystems/DoAfter/DoAfter.cs @@ -1,39 +1,40 @@ #nullable enable using System; using System.Threading.Tasks; -using Content.Server.GameObjects.Components; +using Content.Server.GameObjects.Components.Damage; using Content.Server.GameObjects.Components.GUI; +using Content.Server.GameObjects.Components.Items.Storage; using Content.Server.GameObjects.Components.Mobs; using Robust.Shared.Interfaces.Timing; using Robust.Shared.IoC; using Robust.Shared.Map; -namespace Content.Server.GameObjects.EntitySystems +namespace Content.Server.GameObjects.EntitySystems.DoAfter { public sealed class DoAfter { public Task AsTask { get; } - + private TaskCompletionSource Tcs { get;} - + public DoAfterEventArgs EventArgs; - + public TimeSpan StartTime { get; } - + public float Elapsed { get; set; } - + public GridCoordinates UserGrid { get; } - + public GridCoordinates TargetGrid { get; } private bool _tookDamage; public DoAfterStatus Status => AsTask.IsCompletedSuccessfully ? AsTask.Result : DoAfterStatus.Running; - + // NeedHand private string? _activeHand; private ItemComponent? _activeItem; - + public DoAfter(DoAfterEventArgs eventArgs) { EventArgs = eventArgs; @@ -57,7 +58,7 @@ namespace Content.Server.GameObjects.EntitySystems _activeHand = handsComponent.ActiveHand; _activeItem = handsComponent.GetActiveHand; } - + Tcs = new TaskCompletionSource(); AsTask = Tcs.Task; } @@ -79,15 +80,15 @@ namespace Content.Server.GameObjects.EntitySystems default: throw new ArgumentOutOfRangeException(); } - + Elapsed += frameTime; - + if (IsFinished()) { Tcs.SetResult(DoAfterStatus.Finished); return; } - + if (IsCancelled()) { Tcs.SetResult(DoAfterStatus.Cancelled); @@ -101,13 +102,13 @@ namespace Content.Server.GameObjects.EntitySystems { return true; } - + // TODO :Handle inertia in space. if (EventArgs.BreakOnUserMove && EventArgs.User.Transform.GridPosition != UserGrid) { return true; } - + if (EventArgs.BreakOnTargetMove && EventArgs.Target!.Transform.GridPosition != TargetGrid) { return true; @@ -129,7 +130,7 @@ namespace Content.Server.GameObjects.EntitySystems { return true; } - + if (EventArgs.NeedHand) { if (!EventArgs.User.TryGetComponent(out HandsComponent handsComponent)) @@ -169,4 +170,4 @@ namespace Content.Server.GameObjects.EntitySystems return true; } } -} \ No newline at end of file +} diff --git a/Content.Server/GameObjects/EntitySystems/DoAfter/DoAfterEventArgs.cs b/Content.Server/GameObjects/EntitySystems/DoAfter/DoAfterEventArgs.cs index 8aca9fdc83..7906c616eb 100644 --- a/Content.Server/GameObjects/EntitySystems/DoAfter/DoAfterEventArgs.cs +++ b/Content.Server/GameObjects/EntitySystems/DoAfter/DoAfterEventArgs.cs @@ -2,9 +2,10 @@ using System; using System.Threading; using Robust.Shared.Interfaces.GameObjects; + // ReSharper disable UnassignedReadonlyField -namespace Content.Server.GameObjects.EntitySystems +namespace Content.Server.GameObjects.EntitySystems.DoAfter { public sealed class DoAfterEventArgs { diff --git a/Content.Server/GameObjects/EntitySystems/DoAfter/DoAfterSystem.cs b/Content.Server/GameObjects/EntitySystems/DoAfter/DoAfterSystem.cs index 8aa394b25a..1c01a789a0 100644 --- a/Content.Server/GameObjects/EntitySystems/DoAfter/DoAfterSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/DoAfter/DoAfterSystem.cs @@ -3,13 +3,13 @@ using System; using System.Collections.Generic; using System.Threading.Tasks; using Content.Server.GameObjects.Components; +using Content.Server.GameObjects.Components.Damage; using JetBrains.Annotations; using Robust.Server.Interfaces.Timing; -using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Systems; using Robust.Shared.IoC; -namespace Content.Server.GameObjects.EntitySystems +namespace Content.Server.GameObjects.EntitySystems.DoAfter { [UsedImplicitly] public sealed class DoAfterSystem : EntitySystem @@ -19,18 +19,18 @@ namespace Content.Server.GameObjects.EntitySystems public override void Update(float frameTime) { base.Update(frameTime); - + foreach (var comp in ComponentManager.EntityQuery()) { if (_pauseManager.IsGridPaused(comp.Owner.Transform.GridID)) continue; - + var cancelled = new List(0); var finished = new List(0); foreach (var doAfter in comp.DoAfters) { doAfter.Run(frameTime); - + switch (doAfter.Status) { case DoAfterStatus.Running: @@ -59,7 +59,7 @@ namespace Content.Server.GameObjects.EntitySystems finished.Clear(); } } - + /// /// Tasks that are delayed until the specified time has passed /// These can be potentially cancelled by the user moving or when other things happen. @@ -74,7 +74,7 @@ namespace Content.Server.GameObjects.EntitySystems var doAfterComponent = eventArgs.User.GetComponent(); doAfterComponent.Add(doAfter); DamageableComponent? damageableComponent = null; - + // TODO: If the component's deleted this may not get unsubscribed? if (eventArgs.BreakOnDamage && eventArgs.User.TryGetComponent(out damageableComponent)) { @@ -82,12 +82,12 @@ namespace Content.Server.GameObjects.EntitySystems } await doAfter.AsTask; - + if (damageableComponent != null) { damageableComponent.Damaged -= doAfter.HandleDamage; } - + return doAfter.Status; } } @@ -98,4 +98,4 @@ namespace Content.Server.GameObjects.EntitySystems Cancelled, Finished, } -} \ No newline at end of file +} diff --git a/Content.Server/GameObjects/EntitySystems/DoorSystem.cs b/Content.Server/GameObjects/EntitySystems/DoorSystem.cs index d9c6a782d8..fb5d0fe432 100644 --- a/Content.Server/GameObjects/EntitySystems/DoorSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/DoorSystem.cs @@ -1,4 +1,5 @@ -using Robust.Shared.GameObjects.Systems; +using Content.Server.GameObjects.Components.Doors; +using Robust.Shared.GameObjects.Systems; namespace Content.Server.GameObjects.EntitySystems { diff --git a/Content.Server/GameObjects/EntitySystems/GasAnalyzerSystem.cs b/Content.Server/GameObjects/EntitySystems/GasAnalyzerSystem.cs index 79e50ced63..1f536cf500 100644 --- a/Content.Server/GameObjects/EntitySystems/GasAnalyzerSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/GasAnalyzerSystem.cs @@ -1,10 +1,5 @@ using Content.Server.GameObjects.Components.Atmos; -using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Systems; -using Robust.Shared.Interfaces.GameObjects; -using System; -using System.Collections.Generic; -using System.Text; namespace Content.Server.GameObjects.EntitySystems { diff --git a/Content.Server/GameObjects/EntitySystems/GasTileOverlaySystem.cs b/Content.Server/GameObjects/EntitySystems/GasTileOverlaySystem.cs index 6fb9879bd7..493ef068ed 100644 --- a/Content.Server/GameObjects/EntitySystems/GasTileOverlaySystem.cs +++ b/Content.Server/GameObjects/EntitySystems/GasTileOverlaySystem.cs @@ -2,7 +2,6 @@ using System.Collections.Generic; using System.Linq; using System.Runtime.CompilerServices; -using Content.Server.Atmos; using Content.Server.GameObjects.Components.Atmos; using Content.Shared.Atmos; using Content.Shared.GameObjects.EntitySystems; @@ -10,13 +9,10 @@ using JetBrains.Annotations; using Robust.Server.Interfaces.Player; using Robust.Server.Player; using Robust.Shared.Enums; -using Robust.Shared.GameObjects.Systems; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Interfaces.Map; -using Robust.Shared.Interfaces.Network; using Robust.Shared.IoC; using Robust.Shared.Map; -using Robust.Shared.Utility; namespace Content.Server.GameObjects.EntitySystems { diff --git a/Content.Server/GameObjects/EntitySystems/GravitySystem.cs b/Content.Server/GameObjects/EntitySystems/GravitySystem.cs index eac786be6c..84a265b70c 100644 --- a/Content.Server/GameObjects/EntitySystems/GravitySystem.cs +++ b/Content.Server/GameObjects/EntitySystems/GravitySystem.cs @@ -13,7 +13,7 @@ using Robust.Shared.Map; using Robust.Shared.Maths; using Robust.Shared.Random; -namespace Content.Server.Interfaces.GameObjects.Components.Interaction +namespace Content.Server.GameObjects.EntitySystems { [UsedImplicitly] internal sealed class GravitySystem : EntitySystem @@ -82,7 +82,7 @@ namespace Content.Server.Interfaces.GameObjects.Components.Interaction { if (player.AttachedEntity == null || player.AttachedEntity.Transform.GridID != gridId) continue; - EntitySystem.Get().PlayFromEntity("/Audio/Effects/alert.ogg", player.AttachedEntity); + Get().PlayFromEntity("/Audio/Effects/alert.ogg", player.AttachedEntity); } } diff --git a/Content.Server/GameObjects/EntitySystems/HandHeldLightSystem.cs b/Content.Server/GameObjects/EntitySystems/HandHeldLightSystem.cs index 0ffd887de5..abb68219e7 100644 --- a/Content.Server/GameObjects/EntitySystems/HandHeldLightSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/HandHeldLightSystem.cs @@ -2,7 +2,7 @@ using Content.Server.GameObjects.Components.Interactable; using JetBrains.Annotations; using Robust.Shared.GameObjects.Systems; -namespace Content.Server.Interfaces.GameObjects.Components.Interaction +namespace Content.Server.GameObjects.EntitySystems { [UsedImplicitly] internal sealed class HandHeldLightSystem : EntitySystem diff --git a/Content.Server/GameObjects/EntitySystems/HandsSystem.cs b/Content.Server/GameObjects/EntitySystems/HandsSystem.cs index 5d2101367a..8243fca463 100644 --- a/Content.Server/GameObjects/EntitySystems/HandsSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/HandsSystem.cs @@ -1,8 +1,14 @@ -using System.Linq; +using System; +using System.Linq; +using Content.Server.GameObjects.Components.GUI; +using Content.Server.GameObjects.Components.Items.Storage; using Content.Server.GameObjects.Components.Stack; +using Content.Server.GameObjects.EntitySystems.Click; using Content.Server.Interfaces; +using Content.Server.Interfaces.GameObjects.Components.Items; using Content.Server.Throw; using Content.Shared.GameObjects.Components.Inventory; +using Content.Shared.GameObjects.EntitySystems; using Content.Shared.Input; using JetBrains.Annotations; using Robust.Server.GameObjects.EntitySystemMessages; @@ -15,18 +21,8 @@ using Robust.Shared.IoC; using Robust.Shared.Localization; using Robust.Shared.Map; using Robust.Shared.Players; -using System; -using Content.Server.GameObjects.Components.GUI; -using Content.Server.Interfaces.GameObjects.Components.Items; -using Content.Shared.GameObjects.EntitySystems; -using Content.Server.GameObjects; -using Content.Server.GameObjects.Components; -using Content.Server.GameObjects.Components.Items.Storage; -using Content.Server.GameObjects.EntitySystems.Click; -using Content.Shared.Interfaces; -using Robust.Shared.Maths; -namespace Content.Server.Interfaces.GameObjects.Components.Interaction +namespace Content.Server.GameObjects.EntitySystems { [UsedImplicitly] internal sealed class HandsSystem : EntitySystem diff --git a/Content.Server/GameObjects/EntitySystems/HungerSystem.cs b/Content.Server/GameObjects/EntitySystems/HungerSystem.cs index 4cc7972528..cddc2b76dd 100644 --- a/Content.Server/GameObjects/EntitySystems/HungerSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/HungerSystem.cs @@ -2,7 +2,7 @@ using Content.Server.GameObjects.Components.Nutrition; using JetBrains.Annotations; using Robust.Shared.GameObjects.Systems; -namespace Content.Server.Interfaces.GameObjects.Components.Interaction +namespace Content.Server.GameObjects.EntitySystems { [UsedImplicitly] internal sealed class HungerSystem : EntitySystem diff --git a/Content.Server/GameObjects/EntitySystems/JobQueues/IJob.cs b/Content.Server/GameObjects/EntitySystems/JobQueues/IJob.cs index e23429ae14..6ecb5826bc 100644 --- a/Content.Server/GameObjects/EntitySystems/JobQueues/IJob.cs +++ b/Content.Server/GameObjects/EntitySystems/JobQueues/IJob.cs @@ -1,5 +1,3 @@ -using System.Collections; - namespace Content.Server.GameObjects.EntitySystems.JobQueues { public interface IJob diff --git a/Content.Server/GameObjects/EntitySystems/LatheSystem.cs b/Content.Server/GameObjects/EntitySystems/LatheSystem.cs index 7c4c96d9a1..777c22c82c 100644 --- a/Content.Server/GameObjects/EntitySystems/LatheSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/LatheSystem.cs @@ -2,7 +2,7 @@ using Content.Server.GameObjects.Components.Research; using JetBrains.Annotations; using Robust.Shared.GameObjects.Systems; -namespace Content.Server.Interfaces.GameObjects.Components.Interaction +namespace Content.Server.GameObjects.EntitySystems { [UsedImplicitly] internal sealed class LatheSystem : EntitySystem diff --git a/Content.Server/GameObjects/EntitySystems/MedicalScannerSystem.cs b/Content.Server/GameObjects/EntitySystems/MedicalScannerSystem.cs index 9e84644d4f..3180063247 100644 --- a/Content.Server/GameObjects/EntitySystems/MedicalScannerSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/MedicalScannerSystem.cs @@ -2,7 +2,7 @@ using Content.Server.GameObjects.Components.Medical; using JetBrains.Annotations; using Robust.Shared.GameObjects.Systems; -namespace Content.Server.Interfaces.GameObjects.Components.Interaction +namespace Content.Server.GameObjects.EntitySystems { [UsedImplicitly] internal sealed class MedicalScannerSystem : EntitySystem diff --git a/Content.Server/GameObjects/EntitySystems/MeleeWeaponSystem.cs b/Content.Server/GameObjects/EntitySystems/MeleeWeaponSystem.cs index 9dfd278add..82ba72537a 100644 --- a/Content.Server/GameObjects/EntitySystems/MeleeWeaponSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/MeleeWeaponSystem.cs @@ -5,7 +5,7 @@ using Robust.Shared.GameObjects.Systems; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Maths; -namespace Content.Server.Interfaces.GameObjects.Components.Interaction +namespace Content.Server.GameObjects.EntitySystems { public sealed class MeleeWeaponSystem : EntitySystem { diff --git a/Content.Server/GameObjects/EntitySystems/MicrowaveSystem.cs b/Content.Server/GameObjects/EntitySystems/MicrowaveSystem.cs index 3231d4db5e..a1ccba35ed 100644 --- a/Content.Server/GameObjects/EntitySystems/MicrowaveSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/MicrowaveSystem.cs @@ -2,7 +2,7 @@ using Content.Server.GameObjects.Components.Kitchen; using JetBrains.Annotations; using Robust.Shared.GameObjects.Systems; -namespace Content.Server.Interfaces.GameObjects.Components.Interaction +namespace Content.Server.GameObjects.EntitySystems { [UsedImplicitly] internal sealed class MicrowaveSystem : EntitySystem diff --git a/Content.Server/GameObjects/EntitySystems/MoverSystem.cs b/Content.Server/GameObjects/EntitySystems/MoverSystem.cs index 6caaf9523b..35c99acd98 100644 --- a/Content.Server/GameObjects/EntitySystems/MoverSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/MoverSystem.cs @@ -1,6 +1,6 @@ #nullable enable -using Content.Server.GameObjects; using Content.Server.GameObjects.Components; +using Content.Server.GameObjects.Components.GUI; using Content.Server.GameObjects.Components.Items.Storage; using Content.Server.GameObjects.Components.Mobs; using Content.Server.GameObjects.Components.Movement; diff --git a/Content.Server/GameObjects/EntitySystems/PortalSystem.cs b/Content.Server/GameObjects/EntitySystems/PortalSystem.cs index fc16603c09..08e06fe150 100644 --- a/Content.Server/GameObjects/EntitySystems/PortalSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/PortalSystem.cs @@ -2,7 +2,7 @@ using Content.Server.GameObjects.Components.Movement; using JetBrains.Annotations; using Robust.Shared.GameObjects.Systems; -namespace Content.Server.Interfaces.GameObjects.Components.Interaction +namespace Content.Server.GameObjects.EntitySystems { [UsedImplicitly] internal sealed class PortalSystem : EntitySystem diff --git a/Content.Server/GameObjects/EntitySystems/PowerApcSystem.cs b/Content.Server/GameObjects/EntitySystems/PowerApcSystem.cs index 2bdb58b2a2..2e9253ad04 100644 --- a/Content.Server/GameObjects/EntitySystems/PowerApcSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/PowerApcSystem.cs @@ -1,12 +1,12 @@ -using Content.Server.GameObjects.Components.Power.ApcNetComponents; +using System.Collections.Generic; using Content.Server.GameObjects.Components.NodeContainer.NodeGroups; -using Robust.Shared.GameObjects.Systems; -using System.Collections.Generic; +using Content.Server.GameObjects.Components.Power.ApcNetComponents; using JetBrains.Annotations; -using Robust.Shared.IoC; using Robust.Server.Interfaces.Timing; +using Robust.Shared.GameObjects.Systems; +using Robust.Shared.IoC; -namespace Content.Server.Interfaces.GameObjects.Components.Interaction +namespace Content.Server.GameObjects.EntitySystems { [UsedImplicitly] internal sealed class PowerApcSystem : EntitySystem diff --git a/Content.Server/GameObjects/EntitySystems/PowerSmesSystem.cs b/Content.Server/GameObjects/EntitySystems/PowerSmesSystem.cs index 3f75198dbe..f6bc4cdeeb 100644 --- a/Content.Server/GameObjects/EntitySystems/PowerSmesSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/PowerSmesSystem.cs @@ -1,9 +1,8 @@ -using Content.Server.GameObjects.Components.Power; +using Content.Server.GameObjects.Components.Power.PowerNetComponents; using JetBrains.Annotations; -using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Systems; -namespace Content.Server.Interfaces.GameObjects.Components.Interaction +namespace Content.Server.GameObjects.EntitySystems { [UsedImplicitly] internal class PowerSmesSystem : EntitySystem diff --git a/Content.Server/GameObjects/EntitySystems/PowerSolarControlConsoleSystem.cs b/Content.Server/GameObjects/EntitySystems/PowerSolarControlConsoleSystem.cs index d2fb4e4255..68820fbd1b 100644 --- a/Content.Server/GameObjects/EntitySystems/PowerSolarControlConsoleSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/PowerSolarControlConsoleSystem.cs @@ -1,4 +1,4 @@ -using Content.Server.GameObjects.Components.Power; +using Content.Server.GameObjects.Components.Power.PowerNetComponents; using JetBrains.Annotations; using Robust.Shared.GameObjects.Systems; diff --git a/Content.Server/GameObjects/EntitySystems/PowerSolarSystem.cs b/Content.Server/GameObjects/EntitySystems/PowerSolarSystem.cs index 4a5244302c..d2a437b40a 100644 --- a/Content.Server/GameObjects/EntitySystems/PowerSolarSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/PowerSolarSystem.cs @@ -1,6 +1,8 @@ -using Content.Server.GameObjects.Components.Power; -using JetBrains.Annotations; +using System; +using System.Linq; +using Content.Server.GameObjects.Components.Power.PowerNetComponents; using Content.Shared.Physics; +using JetBrains.Annotations; using Robust.Shared.GameObjects.Systems; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Interfaces.Physics; @@ -8,10 +10,8 @@ using Robust.Shared.Interfaces.Random; using Robust.Shared.Interfaces.Timing; using Robust.Shared.IoC; using Robust.Shared.Maths; -using System; -using System.Linq; -namespace Content.Server.Interfaces.GameObjects.Components.Interaction +namespace Content.Server.GameObjects.EntitySystems { /// /// Responsible for maintaining the solar-panel sun angle and updating coverage. @@ -90,7 +90,7 @@ namespace Content.Server.Interfaces.GameObjects.Components.Interaction { // There's supposed to be rotational logic here, but that implies putting it somewhere. panel.Owner.Transform.WorldRotation = TargetPanelRotation; - + if (panel.TimeOfNextCoverageUpdate < _gameTiming.CurTime) { // Setup the next coverage check. diff --git a/Content.Server/GameObjects/EntitySystems/ProjectileSystem.cs b/Content.Server/GameObjects/EntitySystems/ProjectileSystem.cs index 86d9151657..7838ef62e0 100644 --- a/Content.Server/GameObjects/EntitySystems/ProjectileSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/ProjectileSystem.cs @@ -2,7 +2,7 @@ using Content.Server.GameObjects.Components.Projectiles; using JetBrains.Annotations; using Robust.Shared.GameObjects.Systems; -namespace Content.Server.Interfaces.GameObjects.Components.Interaction +namespace Content.Server.GameObjects.EntitySystems { [UsedImplicitly] internal sealed class ProjectileSystem : EntitySystem diff --git a/Content.Server/GameObjects/EntitySystems/PuddleSystem.cs b/Content.Server/GameObjects/EntitySystems/PuddleSystem.cs index 866ad39de9..f36783a983 100644 --- a/Content.Server/GameObjects/EntitySystems/PuddleSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/PuddleSystem.cs @@ -1,13 +1,12 @@ using Content.Server.GameObjects.Components.Fluids; using JetBrains.Annotations; -using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Components.Transform; using Robust.Shared.GameObjects.Systems; using Robust.Shared.Interfaces.Map; using Robust.Shared.IoC; using Robust.Shared.Map; -namespace Content.Server.Interfaces.GameObjects.Components.Interaction +namespace Content.Server.GameObjects.EntitySystems { [UsedImplicitly] internal sealed class PuddleSystem : EntitySystem diff --git a/Content.Server/GameObjects/EntitySystems/RadioSystem.cs b/Content.Server/GameObjects/EntitySystems/RadioSystem.cs index 59f2e27c2f..ce6be94145 100644 --- a/Content.Server/GameObjects/EntitySystems/RadioSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/RadioSystem.cs @@ -1,7 +1,7 @@ -using Content.Server.GameObjects.Components.Interactable; +using System.Collections.Generic; +using Content.Server.GameObjects.Components; using Robust.Shared.GameObjects.Systems; using Robust.Shared.Interfaces.GameObjects; -using System.Collections.Generic; namespace Content.Server.GameObjects.EntitySystems { diff --git a/Content.Server/GameObjects/EntitySystems/ResearchSystem.cs b/Content.Server/GameObjects/EntitySystems/ResearchSystem.cs index e67bd34895..6e4734139b 100644 --- a/Content.Server/GameObjects/EntitySystems/ResearchSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/ResearchSystem.cs @@ -4,7 +4,7 @@ using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Systems; using Robust.Shared.Interfaces.GameObjects; -namespace Content.Server.Interfaces.GameObjects.Components.Interaction +namespace Content.Server.GameObjects.EntitySystems { public class ResearchSystem : EntitySystem { diff --git a/Content.Server/GameObjects/EntitySystems/RoundEndSystem.cs b/Content.Server/GameObjects/EntitySystems/RoundEndSystem.cs index 485ccb6b6f..9077e94184 100644 --- a/Content.Server/GameObjects/EntitySystems/RoundEndSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/RoundEndSystem.cs @@ -6,7 +6,7 @@ using Robust.Shared.Interfaces.Timing; using Robust.Shared.IoC; using Timer = Robust.Shared.Timers.Timer; -namespace Content.Server.Interfaces.GameObjects.Components.Interaction +namespace Content.Server.GameObjects.EntitySystems { public class RoundEndSystem : EntitySystem { diff --git a/Content.Server/GameObjects/EntitySystems/StomachSystem.cs b/Content.Server/GameObjects/EntitySystems/StomachSystem.cs index a6b6cad130..ffc16af206 100644 --- a/Content.Server/GameObjects/EntitySystems/StomachSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/StomachSystem.cs @@ -2,7 +2,7 @@ using JetBrains.Annotations; using Robust.Shared.GameObjects.Systems; -namespace Content.Server.Interfaces.GameObjects.Components.Interaction +namespace Content.Server.GameObjects.EntitySystems { /// /// Triggers digestion updates on diff --git a/Content.Server/GameObjects/EntitySystems/StorageSystem.cs b/Content.Server/GameObjects/EntitySystems/StorageSystem.cs index e33b958a93..b3f49605cb 100644 --- a/Content.Server/GameObjects/EntitySystems/StorageSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/StorageSystem.cs @@ -6,7 +6,7 @@ using Robust.Server.GameObjects.EntitySystemMessages; using Robust.Server.Interfaces.Player; using Robust.Shared.GameObjects.Systems; -namespace Content.Server.Interfaces.GameObjects.Components.Interaction +namespace Content.Server.GameObjects.EntitySystems { [UsedImplicitly] internal sealed class StorageSystem : EntitySystem diff --git a/Content.Server/GameObjects/EntitySystems/StunSystem.cs b/Content.Server/GameObjects/EntitySystems/StunSystem.cs index 8278b73b29..6e3a4459ba 100644 --- a/Content.Server/GameObjects/EntitySystems/StunSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/StunSystem.cs @@ -2,7 +2,7 @@ using Content.Server.GameObjects.Components.Mobs; using JetBrains.Annotations; using Robust.Shared.GameObjects.Systems; -namespace Content.Server.Interfaces.GameObjects.Components.Interaction +namespace Content.Server.GameObjects.EntitySystems { [UsedImplicitly] internal sealed class StunSystem : EntitySystem diff --git a/Content.Server/GameObjects/EntitySystems/TemperatureSystem.cs b/Content.Server/GameObjects/EntitySystems/TemperatureSystem.cs index 27652ad9f1..f03b240a0b 100644 --- a/Content.Server/GameObjects/EntitySystems/TemperatureSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/TemperatureSystem.cs @@ -1,8 +1,8 @@ -using Content.Server.GameObjects; +using Content.Server.GameObjects.Components.Temperature; using JetBrains.Annotations; using Robust.Shared.GameObjects.Systems; -namespace Content.Server.Interfaces.GameObjects.Components.Interaction +namespace Content.Server.GameObjects.EntitySystems { [UsedImplicitly] internal sealed class TemperatureSystem : EntitySystem diff --git a/Content.Server/GameObjects/EntitySystems/ThirstSystem.cs b/Content.Server/GameObjects/EntitySystems/ThirstSystem.cs index dfc2294909..b6047a273c 100644 --- a/Content.Server/GameObjects/EntitySystems/ThirstSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/ThirstSystem.cs @@ -2,7 +2,7 @@ using Content.Server.GameObjects.Components.Nutrition; using JetBrains.Annotations; using Robust.Shared.GameObjects.Systems; -namespace Content.Server.Interfaces.GameObjects.Components.Interaction +namespace Content.Server.GameObjects.EntitySystems { [UsedImplicitly] internal sealed class ThirstSystem : EntitySystem diff --git a/Content.Server/GameObjects/EntitySystems/TriggerSystem.cs b/Content.Server/GameObjects/EntitySystems/TriggerSystem.cs index 5a8bba0802..4519a54b7b 100644 --- a/Content.Server/GameObjects/EntitySystems/TriggerSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/TriggerSystem.cs @@ -5,7 +5,7 @@ using Robust.Shared.GameObjects.Systems; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Timers; -namespace Content.Server.Interfaces.GameObjects.Components.Interaction +namespace Content.Server.GameObjects.EntitySystems { /// /// This interface gives components behavior when being "triggered" by timer or other conditions diff --git a/Content.Server/GameObjects/EntitySystems/VaporSystem.cs b/Content.Server/GameObjects/EntitySystems/VaporSystem.cs index 65823a8bb0..c3e3b2ec5b 100644 --- a/Content.Server/GameObjects/EntitySystems/VaporSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/VaporSystem.cs @@ -1,5 +1,4 @@ using Content.Server.GameObjects.Components.Chemistry; -using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Systems; namespace Content.Server.GameObjects.EntitySystems diff --git a/Content.Server/GameObjects/EntitySystems/VerbSystem.cs b/Content.Server/GameObjects/EntitySystems/VerbSystem.cs index f2bac2c718..b0720ccfb3 100644 --- a/Content.Server/GameObjects/EntitySystems/VerbSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/VerbSystem.cs @@ -1,15 +1,15 @@ using System.Collections.Generic; using System.Reflection; -using Content.Shared.GameObjects; +using Content.Shared.GameObjects.Verbs; using Robust.Server.Interfaces.Player; using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Systems; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.IoC; +using Robust.Shared.Log; using static Content.Shared.GameObjects.EntitySystemMessages.VerbSystemMessages; -using Logger = Robust.Shared.Log.Logger; -namespace Content.Server.Interfaces.GameObjects.Components.Interaction +namespace Content.Server.GameObjects.EntitySystems { public class VerbSystem : EntitySystem { diff --git a/Content.Server/GameObjects/EntitySystems/WelderSystem.cs b/Content.Server/GameObjects/EntitySystems/WelderSystem.cs index e35cb6144a..411e3546fc 100644 --- a/Content.Server/GameObjects/EntitySystems/WelderSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/WelderSystem.cs @@ -3,7 +3,7 @@ using System.Linq; using Content.Server.GameObjects.Components.Interactable; using Robust.Shared.GameObjects.Systems; -namespace Content.Server.Interfaces.GameObjects.Components.Interaction +namespace Content.Server.GameObjects.EntitySystems { /// /// Despite the name, it's only really used for the welder logic in tools. Go figure. diff --git a/Content.Server/GameObjects/EntitySystems/WireHackingSystem.cs b/Content.Server/GameObjects/EntitySystems/WireHackingSystem.cs index a8da8aff92..f13ae1c0a4 100644 --- a/Content.Server/GameObjects/EntitySystems/WireHackingSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/WireHackingSystem.cs @@ -3,7 +3,7 @@ using Robust.Shared.GameObjects.Systems; using Robust.Shared.ViewVariables; using static Content.Shared.GameObjects.Components.SharedWiresComponent; -namespace Content.Server.Interfaces.GameObjects.Components.Interaction +namespace Content.Server.GameObjects.EntitySystems { public class WireHackingSystem : EntitySystem { diff --git a/Content.Server/GameTicking/GamePreset.cs b/Content.Server/GameTicking/GamePreset.cs index 0f9642184a..0e7ce86795 100644 --- a/Content.Server/GameTicking/GamePreset.cs +++ b/Content.Server/GameTicking/GamePreset.cs @@ -1,6 +1,6 @@ using System.Collections.Generic; -using Robust.Server.Interfaces.Player; using Content.Shared.Preferences; +using Robust.Server.Interfaces.Player; namespace Content.Server.GameTicking { diff --git a/Content.Server/GameTicking/GamePresets/PresetSuspicion.cs b/Content.Server/GameTicking/GamePresets/PresetSuspicion.cs index 9d162705eb..50365c6569 100644 --- a/Content.Server/GameTicking/GamePresets/PresetSuspicion.cs +++ b/Content.Server/GameTicking/GamePresets/PresetSuspicion.cs @@ -1,21 +1,17 @@ using Content.Server.GameTicking.GameRules; -using Content.Server.Interfaces; using Content.Server.Interfaces.Chat; using Content.Server.Interfaces.GameTicking; using Content.Server.Mobs.Roles; using Content.Server.Players; -using Content.Shared.Antags; using Robust.Server.Interfaces.Player; using Robust.Shared.Interfaces.Random; using Robust.Shared.IoC; using Robust.Shared.Prototypes; using Robust.Shared.Random; -using System; using System.Collections.Generic; using System.Linq; +using Content.Shared.Roles; using Robust.Shared.Log; -using System.Threading.Tasks; -using Content.Shared.Preferences; using Robust.Shared.Maths; diff --git a/Content.Server/GameTicking/GameRules/RuleDeathMatch.cs b/Content.Server/GameTicking/GameRules/RuleDeathMatch.cs index ee841b599d..05b84f8a1b 100644 --- a/Content.Server/GameTicking/GameRules/RuleDeathMatch.cs +++ b/Content.Server/GameTicking/GameRules/RuleDeathMatch.cs @@ -1,6 +1,6 @@ using System; using System.Threading; -using Content.Server.GameObjects; +using Content.Server.GameObjects.Components.Mobs; using Content.Server.Interfaces.Chat; using Content.Server.Interfaces.GameTicking; using Robust.Server.Interfaces.Player; diff --git a/Content.Server/GameTicking/GameRules/RuleSuspicion.cs b/Content.Server/GameTicking/GameRules/RuleSuspicion.cs index 50f236072d..34ddc50f78 100644 --- a/Content.Server/GameTicking/GameRules/RuleSuspicion.cs +++ b/Content.Server/GameTicking/GameRules/RuleSuspicion.cs @@ -1,21 +1,14 @@ using System; -using System.Linq; using System.Threading; -using Content.Server.GameObjects; using Content.Server.GameObjects.Components.Mobs; -using Content.Server.GameObjects.Components.Observer; using Content.Server.Interfaces.Chat; using Content.Server.Interfaces.GameTicking; using Content.Server.Mobs.Roles; using Content.Server.Players; -using NFluidsynth; using Robust.Server.Interfaces.Player; -using Robust.Server.Player; -using Robust.Shared.Enums; using Robust.Shared.GameObjects; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.IoC; -using Logger = Robust.Shared.Log.Logger; using Timer = Robust.Shared.Timers.Timer; namespace Content.Server.GameTicking.GameRules diff --git a/Content.Server/GameTicking/GameTicker.JobController.cs b/Content.Server/GameTicking/GameTicker.JobController.cs index fd72fe545a..271939e076 100644 --- a/Content.Server/GameTicking/GameTicker.JobController.cs +++ b/Content.Server/GameTicking/GameTicker.JobController.cs @@ -2,8 +2,8 @@ using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; -using Content.Shared.Jobs; using Content.Shared.Preferences; +using Content.Shared.Roles; using Robust.Server.Interfaces.Player; using Robust.Shared.Localization; using Robust.Shared.Random; diff --git a/Content.Server/GameTicking/GameTicker.cs b/Content.Server/GameTicking/GameTicker.cs index 8065da1507..b02df83377 100644 --- a/Content.Server/GameTicking/GameTicker.cs +++ b/Content.Server/GameTicking/GameTicker.cs @@ -3,15 +3,14 @@ using System.Collections.Generic; using System.Linq; using System.Threading; using System.Threading.Tasks; -using Content.Server.GameObjects; -using Content.Server.GameObjects.Components; using Content.Server.GameObjects.Components.Access; using Content.Server.GameObjects.Components.GUI; +using Content.Server.GameObjects.Components.Items.Storage; using Content.Server.GameObjects.Components.Markers; using Content.Server.GameObjects.Components.Mobs; using Content.Server.GameObjects.Components.Observer; using Content.Server.GameObjects.Components.PDA; -using Content.Server.Interfaces.GameObjects.Components.Interaction; +using Content.Server.GameObjects.EntitySystems; using Content.Server.GameObjects.EntitySystems.AI.Pathfinding; using Content.Server.GameObjects.EntitySystems.AI.Pathfinding.Accessible; using Content.Server.GameTicking.GamePresets; @@ -24,8 +23,8 @@ using Content.Server.Players; using Content.Shared; using Content.Shared.Chat; using Content.Shared.GameObjects.Components.PDA; -using Content.Shared.Jobs; using Content.Shared.Preferences; +using Content.Shared.Roles; using Prometheus; using Robust.Server.Interfaces; using Robust.Server.Interfaces.Maps; diff --git a/Content.Server/GameTicking/GameTickerCommands.cs b/Content.Server/GameTicking/GameTickerCommands.cs index c2878dbd40..1d37695a78 100644 --- a/Content.Server/GameTicking/GameTickerCommands.cs +++ b/Content.Server/GameTicking/GameTickerCommands.cs @@ -1,12 +1,14 @@ using System; using System.Collections.Generic; using System.Linq; -using Content.Server.BodySystem; +using Content.Server.Health.BodySystem; +using Content.Server.Health.BodySystem.BodyPart; using Content.Server.Interfaces.GameTicking; using Content.Server.Players; -using Content.Shared.BodySystem; -using Content.Shared.Jobs; +using Content.Shared.Health.BodySystem; +using Content.Shared.Health.BodySystem.BodyPart; using Content.Shared.Maps; +using Content.Shared.Roles; using Robust.Server.Interfaces.Console; using Robust.Server.Interfaces.Player; using Robust.Shared.GameObjects.Components.Transform; diff --git a/Content.Server/GlobalVerbs/ControlMobVerb.cs b/Content.Server/GlobalVerbs/ControlMobVerb.cs index 91786471fe..2b69c30c46 100644 --- a/Content.Server/GlobalVerbs/ControlMobVerb.cs +++ b/Content.Server/GlobalVerbs/ControlMobVerb.cs @@ -1,7 +1,7 @@ using Content.Server.GameObjects.Components.Mobs; using Content.Server.GameObjects.Components.Observer; using Content.Server.Players; -using Content.Shared.GameObjects; +using Content.Shared.GameObjects.Verbs; using Robust.Server.Console; using Robust.Server.Interfaces.GameObjects; using Robust.Shared.Interfaces.GameObjects; diff --git a/Content.Server/GlobalVerbs/PointingVerb.cs b/Content.Server/GlobalVerbs/PointingVerb.cs index b15ef785ad..d2952b60d6 100644 --- a/Content.Server/GlobalVerbs/PointingVerb.cs +++ b/Content.Server/GlobalVerbs/PointingVerb.cs @@ -1,6 +1,6 @@ using Content.Server.GameObjects.Components.Pointing; using Content.Server.GameObjects.EntitySystems; -using Content.Shared.GameObjects; +using Content.Shared.GameObjects.Verbs; using Robust.Server.Interfaces.GameObjects; using Robust.Shared.GameObjects.Systems; using Robust.Shared.Interfaces.GameObjects; diff --git a/Content.Server/GlobalVerbs/PullingVerb.cs b/Content.Server/GlobalVerbs/PullingVerb.cs index 00f96df0a4..0b864eb075 100644 --- a/Content.Server/GlobalVerbs/PullingVerb.cs +++ b/Content.Server/GlobalVerbs/PullingVerb.cs @@ -1,8 +1,8 @@ using Content.Server.GameObjects.Components.GUI; using Content.Server.GameObjects.Components.Movement; -using Content.Shared.GameObjects; using Content.Shared.GameObjects.Components.Items; using Content.Shared.GameObjects.EntitySystems; +using Content.Shared.GameObjects.Verbs; using Content.Shared.Physics; using Robust.Server.Interfaces.GameObjects; using Robust.Shared.GameObjects.Components; diff --git a/Content.Server/GlobalVerbs/RejuvenateVerb.cs b/Content.Server/GlobalVerbs/RejuvenateVerb.cs index 3c2c69da6f..11b11e8c2a 100644 --- a/Content.Server/GlobalVerbs/RejuvenateVerb.cs +++ b/Content.Server/GlobalVerbs/RejuvenateVerb.cs @@ -1,7 +1,7 @@ -using Content.Server.GameObjects; +using Content.Server.GameObjects.Components.Damage; using Content.Server.GameObjects.Components.Mobs; using Content.Server.GameObjects.Components.Nutrition; -using Content.Shared.GameObjects; +using Content.Shared.GameObjects.Verbs; using Robust.Server.Console; using Robust.Server.Interfaces.GameObjects; using Robust.Shared.Interfaces.GameObjects; diff --git a/Content.Server/Health/BodySystem/BodyManagerComponent.cs b/Content.Server/Health/BodySystem/BodyManagerComponent.cs index 4533870859..c60ed9091c 100644 --- a/Content.Server/Health/BodySystem/BodyManagerComponent.cs +++ b/Content.Server/Health/BodySystem/BodyManagerComponent.cs @@ -1,16 +1,22 @@ -using Robust.Shared.GameObjects; +using System; +using System.Collections.Generic; +using System.Linq; +using Content.Server.Health.BodySystem.BodyPart; +using Content.Server.Health.BodySystem.BodyPreset; +using Content.Server.Health.BodySystem.BodyTemplate; +using Content.Server.Interfaces.GameObjects.Components.Interaction; +using Content.Shared.Health.BodySystem; +using Content.Shared.Health.BodySystem.BodyPart; +using Content.Shared.Health.BodySystem.BodyPreset; +using Content.Shared.Health.BodySystem.BodyTemplate; +using Robust.Shared.GameObjects; +using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.IoC; using Robust.Shared.Prototypes; using Robust.Shared.Serialization; -using System; -using System.Collections.Generic; -using Content.Shared.BodySystem; using Robust.Shared.ViewVariables; -using Robust.Shared.Interfaces.GameObjects; -using System.Linq; -using Content.Server.Interfaces.GameObjects.Components.Interaction; -namespace Content.Server.BodySystem { +namespace Content.Server.Health.BodySystem { /// /// Component representing a collection of BodyParts attached to each other. @@ -24,23 +30,23 @@ namespace Content.Server.BodySystem { #pragma warning restore [ViewVariables] - private BodyTemplate _template; + private BodyTemplate.BodyTemplate _template; [ViewVariables] private string _presetName; [ViewVariables] - private Dictionary _partDictionary = new Dictionary(); + private Dictionary _partDictionary = new Dictionary(); /// /// The that this BodyManagerComponent is adhering to. /// - public BodyTemplate Template => _template; + public BodyTemplate.BodyTemplate Template => _template; /// /// Maps slot name to the object filling it (if there is one). /// - public Dictionary PartDictionary => _partDictionary; + public Dictionary PartDictionary => _partDictionary; /// /// List of all occupied slots in this body, taken from the values of _parts. @@ -67,7 +73,7 @@ namespace Content.Server.BodySystem { /// /// List of all BodyParts in this body, taken from the keys of _parts. /// - public IEnumerable Parts { + public IEnumerable Parts { get { return _partDictionary.Values; } @@ -77,14 +83,14 @@ namespace Content.Server.BodySystem { /// Recursive search that returns whether a given is connected to the center . /// Not efficient (O(n^2)), but most bodies don't have a ton of BodyParts. /// - public bool ConnectedToCenterPart(BodyPart target) { + public bool ConnectedToCenterPart(BodyPart.BodyPart target) { List searchedSlots = new List { }; if (TryGetSlotName(target, out string result)) return false; return ConnectedToCenterPartRecursion(searchedSlots, result); } private bool ConnectedToCenterPartRecursion(List searchedSlots, string slotName) { - TryGetBodyPart(slotName, out BodyPart part); + TryGetBodyPart(slotName, out BodyPart.BodyPart part); if (part != null && part == GetCenterBodyPart()) return true; searchedSlots.Add(slotName); @@ -101,8 +107,8 @@ namespace Content.Server.BodySystem { /// /// Returns the central of this body based on the . For humans, this is the torso. Returns null if not found. /// - public BodyPart GetCenterBodyPart() { - _partDictionary.TryGetValue(_template.CenterSlot, out BodyPart center); + public BodyPart.BodyPart GetCenterBodyPart() { + _partDictionary.TryGetValue(_template.CenterSlot, out BodyPart.BodyPart center); return center; } @@ -119,7 +125,7 @@ namespace Content.Server.BodySystem { /// Grabs the in the given slotName if there is one. Returns true if a is found, /// false otherwise. If false, result will be null. /// - public bool TryGetBodyPart(string slotName, out BodyPart result) { + public bool TryGetBodyPart(string slotName, out BodyPart.BodyPart result) { return _partDictionary.TryGetValue(slotName, out result); } @@ -127,7 +133,7 @@ namespace Content.Server.BodySystem { /// Grabs the slotName that the given resides in. Returns true if the is /// part of this body and a slot is found, false otherwise. If false, result will be null. /// - public bool TryGetSlotName(BodyPart part, out string result) { + public bool TryGetSlotName(BodyPart.BodyPart part, out string result) { result = _partDictionary.FirstOrDefault(x => x.Value == part).Key; //We enforce that there is only one of each value in the dictionary, so we can iterate through the dictionary values to get the key from there. return result == null; } @@ -150,15 +156,15 @@ namespace Content.Server.BodySystem { /// /// Grabs all occupied slots connected to the given slot, regardless of whether the target slot is occupied. Returns true if successful, false if there was an error or no connected BodyParts were found. /// - public bool TryGetBodyPartConnections(string slotName, out List result) + public bool TryGetBodyPartConnections(string slotName, out List result) { result = null; if (!_template.Connections.TryGetValue(slotName, out List connections)) return false; - List toReturn = new List(); + List toReturn = new List(); foreach (string connection in connections) { - if (TryGetBodyPart(connection, out BodyPart bodyPartResult)) + if (TryGetBodyPart(connection, out BodyPart.BodyPart bodyPartResult)) { toReturn.Add(bodyPartResult); } @@ -192,7 +198,7 @@ namespace Content.Server.BodySystem { throw new InvalidOperationException("No BodyTemplatePrototype was found with the name " + template + " while loading a BodyTemplate!"); //Should never happen unless you fuck up the prototype. } - _template = new BodyTemplate(templateData); + _template = new BodyTemplate.BodyTemplate(templateData); }, () => _template.Name); @@ -206,7 +212,7 @@ namespace Content.Server.BodySystem { throw new InvalidOperationException("No BodyPresetPrototype was found with the name " + preset + " while loading a BodyPreset!"); //Should never happen unless you fuck up the prototype. } - LoadBodyPreset(new BodyPreset(presetData)); + LoadBodyPreset(new BodyPreset.BodyPreset(presetData)); }, () => _presetName); } @@ -214,7 +220,7 @@ namespace Content.Server.BodySystem { /// /// Loads the given - forcefully changes all limbs found in both the preset and this template! /// - public void LoadBodyPreset(BodyPreset preset) + public void LoadBodyPreset(BodyPreset.BodyPreset preset) { _presetName = preset.Name; @@ -232,7 +238,7 @@ namespace Content.Server.BodySystem { BodyPartRemoved(removedPart, slotName); } - var addedPart = new BodyPart(newPartData); + var addedPart = new BodyPart.BodyPart(newPartData); _partDictionary.Add(slotName, addedPart); //Add a new BodyPart with the BodyPartPrototype as a baseline to our BodyComponent. BodyPartAdded(addedPart, slotName); } @@ -243,7 +249,7 @@ namespace Content.Server.BodySystem { /// if there is a slot for them in both . /// public void ChangeBodyTemplate(BodyTemplatePrototype newTemplate) { - foreach (KeyValuePair part in _partDictionary) { + foreach (KeyValuePair part in _partDictionary) { //TODO: Make this work. } } @@ -251,8 +257,8 @@ namespace Content.Server.BodySystem { /// /// Grabs all BodyParts of the given type in this body. /// - public List GetBodyPartsOfType(BodyPartType type) { - List toReturn = new List(); + public List GetBodyPartsOfType(BodyPartType type) { + List toReturn = new List(); foreach (var (slotName, bodyPart) in _partDictionary) { if (bodyPart.PartType == type) toReturn.Add(bodyPart); @@ -265,11 +271,11 @@ namespace Content.Server.BodySystem { /// /// Installs the given into the given slot. Returns true if successful, false otherwise. /// - public bool InstallBodyPart(BodyPart part, string slotName) + public bool InstallBodyPart(BodyPart.BodyPart part, string slotName) { if (!SlotExists(slotName)) //Make sure the given slot exists return false; - if (TryGetBodyPart(slotName, out BodyPart result)) //And that nothing is in it + if (TryGetBodyPart(slotName, out BodyPart.BodyPart result)) //And that nothing is in it return false; _partDictionary.Add(slotName, part); BodyPartAdded(part, slotName); @@ -293,7 +299,7 @@ namespace Content.Server.BodySystem { /// Disconnects the given reference, potentially dropping other BodyParts /// if they were hanging off it. Returns the IEntity representing the dropped BodyPart. /// - public IEntity DropBodyPart(BodyPart part) + public IEntity DropBodyPart(BodyPart.BodyPart part) { if (!_partDictionary.ContainsValue(part)) return null; @@ -305,7 +311,7 @@ namespace Content.Server.BodySystem { { foreach (string connectionName in connections) //This loop is an unoptimized travesty. TODO: optimize to be less shit { - if (TryGetBodyPart(connectionName, out BodyPart result) && !ConnectedToCenterPart(result)) + if (TryGetBodyPart(connectionName, out BodyPart.BodyPart result) && !ConnectedToCenterPart(result)) { DisconnectBodyPartByName(connectionName, true); } @@ -321,7 +327,7 @@ namespace Content.Server.BodySystem { /// /// Disconnects the given reference, potentially dropping other BodyParts if they were hanging off it. /// - public void DisconnectBodyPart(BodyPart part, bool dropEntity) { + public void DisconnectBodyPart(BodyPart.BodyPart part, bool dropEntity) { if (!_partDictionary.ContainsValue(part)) return; if (part != null) { @@ -335,7 +341,7 @@ namespace Content.Server.BodySystem { { foreach (string connectionName in connections) //This loop is an unoptimized travesty. TODO: optimize to be less shit { - if (TryGetBodyPart(connectionName, out BodyPart result) && !ConnectedToCenterPart(result)) { + if (TryGetBodyPart(connectionName, out BodyPart.BodyPart result) && !ConnectedToCenterPart(result)) { DisconnectBodyPartByName(connectionName, dropEntity); } } @@ -351,7 +357,7 @@ namespace Content.Server.BodySystem { /// Internal string version of DisconnectBodyPart for performance purposes. Yes, it is actually more performant. /// private void DisconnectBodyPartByName(string name, bool dropEntity) { - if (!TryGetBodyPart(name, out BodyPart part)) + if (!TryGetBodyPart(name, out BodyPart.BodyPart part)) return; if (part != null) { if (_partDictionary.Remove(name, out var partRemoved)) @@ -361,7 +367,7 @@ namespace Content.Server.BodySystem { if (TryGetBodyPartConnections(name, out List connections)) { foreach (string connectionName in connections) { - if (TryGetBodyPart(connectionName, out BodyPart result) && !ConnectedToCenterPart(result)) { + if (TryGetBodyPart(connectionName, out BodyPart.BodyPart result) && !ConnectedToCenterPart(result)) { DisconnectBodyPartByName(connectionName, dropEntity); } } @@ -373,7 +379,7 @@ namespace Content.Server.BodySystem { } } - private void BodyPartAdded(BodyPart part, string slotName) + private void BodyPartAdded(BodyPart.BodyPart part, string slotName) { var argsAdded = new BodyPartAddedEventArgs(part, slotName); @@ -383,7 +389,7 @@ namespace Content.Server.BodySystem { } } - private void BodyPartRemoved(BodyPart part, string slotName) + private void BodyPartRemoved(BodyPart.BodyPart part, string slotName) { var args = new BodyPartRemovedEventArgs(part, slotName); diff --git a/Content.Server/Health/BodySystem/BodyPart/BodyPart.cs b/Content.Server/Health/BodySystem/BodyPart/BodyPart.cs index 32e4db2681..92addbbebd 100644 --- a/Content.Server/Health/BodySystem/BodyPart/BodyPart.cs +++ b/Content.Server/Health/BodySystem/BodyPart/BodyPart.cs @@ -1,16 +1,19 @@ -using Content.Shared.BodySystem; +using System; +using System.Collections.Generic; +using Content.Server.Health.BodySystem.Mechanism; +using Content.Server.Health.BodySystem.Surgery.Surgeon; +using Content.Server.Health.BodySystem.Surgery.SurgeryData; +using Content.Shared.Health.BodySystem; +using Content.Shared.Health.BodySystem.BodyPart; +using Content.Shared.Health.BodySystem.Mechanism; +using Content.Shared.Health.DamageContainer; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Interfaces.Serialization; using Robust.Shared.IoC; using Robust.Shared.Prototypes; -using Robust.Shared.Serialization; using Robust.Shared.ViewVariables; -using System; -using System.Collections.Generic; - - -namespace Content.Server.BodySystem +namespace Content.Server.Health.BodySystem.BodyPart { @@ -25,7 +28,7 @@ namespace Content.Server.BodySystem private ISurgeryData _surgeryData; [ViewVariables] - private List _mechanisms = new List(); + private List _mechanisms = new List(); [ViewVariables] private int _sizeUsed = 0; @@ -44,55 +47,55 @@ namespace Content.Server.BodySystem /// /// Path to the RSI that represents this BodyPart. - /// + /// [ViewVariables] public string RSIPath { get; set; } /// /// RSI state that represents this BodyPart. - /// + /// [ViewVariables] public string RSIState { get; set; } /// - /// that this BodyPart is considered to be. For example, BodyPartType.Arm. + /// that this BodyPart is considered to be. For example, BodyPartType.Arm. /// [ViewVariables] public BodyPartType PartType { get; set; } /// /// Max HP of this BodyPart. - /// + /// [ViewVariables] public int MaxDurability { get; set; } /// /// Current HP of this BodyPart based on sum of all damage types. - /// + /// [ViewVariables] public int CurrentDurability => MaxDurability - CurrentDamages.Damage; /// /// Current damage dealt to this BodyPart. - /// + /// [ViewVariables] public AbstractDamageContainer CurrentDamages { get; set; } /// /// At what HP this BodyPartis completely destroyed. - /// + /// [ViewVariables] public int DestroyThreshold { get; set; } /// /// Armor of this BodyPart against attacks. - /// + /// [ViewVariables] public float Resistance { get; set; } /// /// Determines many things: how many mechanisms can be fit inside this BodyPart, whether a body can fit through tiny crevices, etc. - /// + /// [ViewVariables] public int Size { get; set; } @@ -112,7 +115,7 @@ namespace Content.Server.BodySystem /// List of all Mechanisms currently inside this BodyPart. /// [ViewVariables] - public List Mechanisms => _mechanisms; + public List Mechanisms => _mechanisms; public BodyPart() { } @@ -139,7 +142,7 @@ namespace Content.Server.BodySystem /// /// Returns whether the given can be installed on this BodyPart. /// - public bool CanInstallMechanism(Mechanism mechanism) + public bool CanInstallMechanism(Mechanism.Mechanism mechanism) { if (_sizeUsed + mechanism.Size > Size) return false; //No space @@ -149,7 +152,7 @@ namespace Content.Server.BodySystem /// /// Attempts to add a . Returns true if successful, false if there was an error (e.g. not enough room in BodyPart). Call InstallDroppedMechanism instead if you want to easily install an IEntity with a DroppedMechanismComponent. /// - public bool TryInstallMechanism(Mechanism mechanism) + public bool TryInstallMechanism(Mechanism.Mechanism mechanism) { if (CanInstallMechanism(mechanism)) { @@ -173,8 +176,8 @@ namespace Content.Server.BodySystem /// /// Tries to remove the given reference from this BodyPart. Returns null if there was an error in spawning the entity or removing the mechanism, otherwise returns a reference to the on the newly spawned entity. - /// - public DroppedMechanismComponent DropMechanism(IEntity dropLocation, Mechanism mechanismTarget) + /// + public DroppedMechanismComponent DropMechanism(IEntity dropLocation, Mechanism.Mechanism mechanismTarget) { if (!_mechanisms.Contains(mechanismTarget)) return null; @@ -189,8 +192,8 @@ namespace Content.Server.BodySystem /// /// Tries to destroy the given in the given BodyPart. Returns false if there was an error, true otherwise. Does NOT spawn a dropped entity. - /// - public bool DestroyMechanism(BodyPart bodyPartTarget, Mechanism mechanismTarget) + /// + public bool DestroyMechanism(BodyPart bodyPartTarget, Mechanism.Mechanism mechanismTarget) { if (!_mechanisms.Contains(mechanismTarget)) return false; @@ -225,7 +228,7 @@ namespace Content.Server.BodySystem /// /// Loads the given - current data on this will be overwritten! - /// + /// public virtual void LoadFromPrototype(BodyPartPrototype data) { Name = data.Name; @@ -249,7 +252,7 @@ namespace Content.Server.BodySystem { throw new InvalidOperationException("No MechanismPrototype was found with the name " + mechanismPrototypeID + " while loading a BodyPartPrototype!"); } - _mechanisms.Add(new Mechanism(mechanismData)); + _mechanisms.Add(new Mechanism.Mechanism(mechanismData)); } } diff --git a/Content.Server/Health/BodySystem/BodyPart/DroppedBodyPartComponent.cs b/Content.Server/Health/BodySystem/BodyPart/DroppedBodyPartComponent.cs index 2f520c4449..a49ba2c656 100644 --- a/Content.Server/Health/BodySystem/BodyPart/DroppedBodyPartComponent.cs +++ b/Content.Server/Health/BodySystem/BodyPart/DroppedBodyPartComponent.cs @@ -1,19 +1,20 @@ -using Robust.Shared.GameObjects; -using Robust.Shared.IoC; -using System.Collections.Generic; -using Content.Shared.BodySystem; -using Robust.Shared.ViewVariables; +using System.Collections.Generic; using System.Globalization; +using System.Linq; +using Content.Shared.Health.BodySystem; +using Content.Shared.Health.BodySystem.Surgery; +using Content.Shared.Interfaces; +using Content.Shared.Interfaces.GameObjects.Components; using Robust.Server.GameObjects; -using Robust.Shared.Interfaces.GameObjects; using Robust.Server.GameObjects.Components.UserInterface; using Robust.Server.Interfaces.Player; -using Content.Shared.Interfaces; -using System.Linq; -using Content.Shared.Interfaces.GameObjects.Components; +using Robust.Shared.GameObjects; +using Robust.Shared.Interfaces.GameObjects; +using Robust.Shared.IoC; using Robust.Shared.Localization; +using Robust.Shared.ViewVariables; -namespace Content.Server.BodySystem +namespace Content.Server.Health.BodySystem.BodyPart { /// diff --git a/Content.Server/Health/BodySystem/BodyPreset/BodyPreset.cs b/Content.Server/Health/BodySystem/BodyPreset/BodyPreset.cs index cf342504c8..83bd17a1b8 100644 --- a/Content.Server/Health/BodySystem/BodyPreset/BodyPreset.cs +++ b/Content.Server/Health/BodySystem/BodyPreset/BodyPreset.cs @@ -1,8 +1,10 @@ using System.Collections.Generic; -using Content.Shared.BodySystem; +using Content.Server.Health.BodySystem.BodyPart; +using Content.Shared.Health.BodySystem.BodyPart; +using Content.Shared.Health.BodySystem.BodyPreset; using Robust.Shared.ViewVariables; -namespace Content.Server.BodySystem { +namespace Content.Server.Health.BodySystem.BodyPreset { /// /// Stores data on what BodyPartPrototypes should fill a BodyTemplate. Used for loading complete body presets, like a "basic human" with all human limbs. @@ -16,7 +18,7 @@ namespace Content.Server.BodySystem { /// /// Maps a template slot to the ID of the that should fill it. E.g. "right arm" : "BodyPart.arm.basic_human". - /// + /// [ViewVariables] public Dictionary PartIDs => _partIDs; diff --git a/Content.Server/Health/BodySystem/BodyScanner/BodyScannerComponent.cs b/Content.Server/Health/BodySystem/BodyScanner/BodyScannerComponent.cs index 2274cf790d..ee0f7a34c6 100644 --- a/Content.Server/Health/BodySystem/BodyScanner/BodyScannerComponent.cs +++ b/Content.Server/Health/BodySystem/BodyScanner/BodyScannerComponent.cs @@ -1,11 +1,11 @@ -using Robust.Server.GameObjects.Components.UserInterface; +using System.Collections.Generic; +using Content.Shared.Health.BodySystem.BodyScanner; +using Content.Shared.Interfaces.GameObjects.Components; +using Robust.Server.GameObjects.Components.UserInterface; using Robust.Server.Interfaces.GameObjects; using Robust.Shared.GameObjects; -using System.Collections.Generic; -using Content.Shared.BodySystem; -using Content.Shared.Interfaces.GameObjects.Components; -namespace Content.Server.BodySystem +namespace Content.Server.Health.BodySystem.BodyScanner { [RegisterComponent] [ComponentReference(typeof(IActivate))] @@ -45,7 +45,7 @@ namespace Content.Server.BodySystem /// /// Copy BodyTemplate and BodyPart data into a common data class that the client can read. /// - private BodyScannerInterfaceState PrepareBodyScannerInterfaceState(BodyTemplate template, Dictionary bodyParts) + private BodyScannerInterfaceState PrepareBodyScannerInterfaceState(BodyTemplate.BodyTemplate template, Dictionary bodyParts) { Dictionary partsData = new Dictionary(); foreach (var(slotname, bpart) in bodyParts) { diff --git a/Content.Server/Health/BodySystem/BodyTemplate/BodyTemplate.cs b/Content.Server/Health/BodySystem/BodyTemplate/BodyTemplate.cs index 30f85eb7c2..a5a7498543 100644 --- a/Content.Server/Health/BodySystem/BodyTemplate/BodyTemplate.cs +++ b/Content.Server/Health/BodySystem/BodyTemplate/BodyTemplate.cs @@ -1,14 +1,15 @@ using System; using System.Collections.Generic; -using Content.Shared.BodySystem; +using Content.Shared.Health.BodySystem; +using Content.Shared.Health.BodySystem.BodyTemplate; using Robust.Shared.ViewVariables; -namespace Content.Server.BodySystem { +namespace Content.Server.Health.BodySystem.BodyTemplate { /// /// This class is a data capsule representing the standard format of a . For instance, the "humanoid" BodyTemplate /// defines two arms, each connected to a torso and so on. Capable of loading data from a . - /// + /// public class BodyTemplate { [ViewVariables] @@ -16,13 +17,13 @@ namespace Content.Server.BodySystem { /// /// The name of the center BodyPart. For humans, this is set to "torso". Used in many calculations. - /// + /// [ViewVariables] public string CenterSlot { get; set; } /// /// Maps all parts on this template to its BodyPartType. For instance, "right arm" is mapped to "BodyPartType.arm" on the humanoid template. - /// + /// [ViewVariables] public Dictionary Slots { get; set; } @@ -30,7 +31,7 @@ namespace Content.Server.BodySystem { /// Maps limb name to the list of their connections to other limbs. For instance, on the humanoid template "torso" is mapped to a list containing "right arm", "left arm", /// "left leg", and "right leg". This is mapped both ways during runtime, but in the prototype only one way has to be defined, i.e., "torso" to "left arm" will automatically /// map "left arm" to "torso". - /// + /// [ViewVariables] public Dictionary> Connections { get; set; } @@ -54,7 +55,7 @@ namespace Content.Server.BodySystem { /// /// Returns whether the given slot exists in this BodyTemplate. - /// + /// public bool SlotExists(string slotName) { foreach (string slot in Slots.Keys) @@ -67,7 +68,7 @@ namespace Content.Server.BodySystem { /// /// Returns an integer unique to this BodyTemplate's layout. It does not matter in which order the Connections or Slots are defined. - /// + /// public override int GetHashCode() { int slotsHash = 0; diff --git a/Content.Server/Health/BodySystem/IBodyPartContainer.cs b/Content.Server/Health/BodySystem/IBodyPartContainer.cs index b78c925c00..c23b8ec1f5 100644 --- a/Content.Server/Health/BodySystem/IBodyPartContainer.cs +++ b/Content.Server/Health/BodySystem/IBodyPartContainer.cs @@ -1,9 +1,6 @@ -using Robust.Shared.Interfaces.GameObjects; -using System; -using System.Collections.Generic; -using System.Text; +using Content.Server.Health.BodySystem.Surgery.SurgeryData; -namespace Content.Server.BodySystem +namespace Content.Server.Health.BodySystem { /// diff --git a/Content.Server/Health/BodySystem/Mechanism/DroppedMechanismComponent.cs b/Content.Server/Health/BodySystem/Mechanism/DroppedMechanismComponent.cs index 4a9faafe83..788082c0d9 100644 --- a/Content.Server/Health/BodySystem/Mechanism/DroppedMechanismComponent.cs +++ b/Content.Server/Health/BodySystem/Mechanism/DroppedMechanismComponent.cs @@ -1,22 +1,24 @@ -using Robust.Shared.GameObjects; -using Robust.Shared.IoC; -using Robust.Shared.Prototypes; -using Robust.Shared.Serialization; -using System; +using System; using System.Collections.Generic; -using Content.Shared.BodySystem; -using Robust.Shared.ViewVariables; using System.Globalization; -using Robust.Server.GameObjects; -using Robust.Shared.Log; +using Content.Server.Health.BodySystem.BodyPart; +using Content.Shared.Health.BodySystem.Mechanism; +using Content.Shared.Health.BodySystem.Surgery; using Content.Shared.Interfaces; +using Content.Shared.Interfaces.GameObjects.Components; +using Robust.Server.GameObjects; using Robust.Server.GameObjects.Components.UserInterface; using Robust.Server.Interfaces.Player; +using Robust.Shared.GameObjects; using Robust.Shared.Interfaces.GameObjects; -using Content.Shared.Interfaces.GameObjects.Components; +using Robust.Shared.IoC; using Robust.Shared.Localization; +using Robust.Shared.Log; +using Robust.Shared.Prototypes; +using Robust.Shared.Serialization; +using Robust.Shared.ViewVariables; -namespace Content.Server.BodySystem { +namespace Content.Server.Health.BodySystem.Mechanism { /// /// Component representing a dropped, tangible entity. @@ -138,7 +140,7 @@ namespace Content.Server.BodySystem { { _sharedNotifyManager.PopupMessage(_bodyManagerComponentCache.Owner, _performerCache, Loc.GetString("You see no useful way to use the {0} anymore.", Owner.Name)); } - BodyPart target = targetObject as BodyPart; + BodyPart.BodyPart target = targetObject as BodyPart.BodyPart; if (!target.TryInstallDroppedMechanism(this)) { _sharedNotifyManager.PopupMessage(_bodyManagerComponentCache.Owner, _performerCache, Loc.GetString("You can't fit it in!")); diff --git a/Content.Server/Health/BodySystem/Mechanism/Mechanism.cs b/Content.Server/Health/BodySystem/Mechanism/Mechanism.cs index 0cceeb4a87..1ea508a782 100644 --- a/Content.Server/Health/BodySystem/Mechanism/Mechanism.cs +++ b/Content.Server/Health/BodySystem/Mechanism/Mechanism.cs @@ -1,15 +1,9 @@ -using System; -using System.Collections.Generic; -using Content.Shared.BodySystem; -using Robust.Shared.Prototypes; -using Robust.Shared.Serialization; +using Content.Server.Health.BodySystem.BodyPart; +using Content.Shared.Health.BodySystem; +using Content.Shared.Health.BodySystem.Mechanism; using Robust.Shared.ViewVariables; -using YamlDotNet.RepresentationModel; - - - -namespace Content.Server.BodySystem { +namespace Content.Server.Health.BodySystem.Mechanism { /// /// Data class representing a persistent item inside a . This includes livers, eyes, cameras, brains, explosive implants, binary communicators, and other things. @@ -21,55 +15,55 @@ namespace Content.Server.BodySystem { /// /// Professional description of the Mechanism. - /// + /// [ViewVariables] public string Description { get; set; } /// - /// The message to display upon examining a mob with this Mechanism installed. If the string is empty (""), no message will be displayed. - /// + /// The message to display upon examining a mob with this Mechanism installed. If the string is empty (""), no message will be displayed. + /// [ViewVariables] public string ExamineMessage { get; set; } /// /// Path to the RSI that represents this Mechanism. - /// + /// [ViewVariables] public string RSIPath { get; set; } /// /// RSI state that represents this Mechanism. - /// + ///
[ViewVariables] public string RSIState { get; set; } /// /// Max HP of this Mechanism. - /// + /// [ViewVariables] public int MaxDurability { get; set; } /// /// Current HP of this Mechanism. - /// + /// [ViewVariables] public int CurrentDurability { get; set; } /// /// At what HP this Mechanism is completely destroyed. - /// + /// [ViewVariables] public int DestroyThreshold { get; set; } /// /// Armor of this Mechanism against attacks. - /// + /// [ViewVariables] public int Resistance { get; set; } /// /// Determines a handful of things - mostly whether this Mechanism can fit into a BodyPart. - /// + /// [ViewVariables] public int Size { get; set; } @@ -91,7 +85,7 @@ namespace Content.Server.BodySystem { /// /// Loads the given - current data on this Mechanism will be overwritten! - /// + /// public void LoadFromPrototype(MechanismPrototype data) { Name = data.Name; diff --git a/Content.Server/Health/BodySystem/Surgery/Surgeon/ISurgeon.cs b/Content.Server/Health/BodySystem/Surgery/Surgeon/ISurgeon.cs index 75078e0834..6d586b01e5 100644 --- a/Content.Server/Health/BodySystem/Surgery/Surgeon/ISurgeon.cs +++ b/Content.Server/Health/BodySystem/Surgery/Surgeon/ISurgeon.cs @@ -1,30 +1,29 @@ -using Content.Shared.BodySystem; +using System.Collections.Generic; +using Content.Server.Health.BodySystem.Surgery.SurgeryData; using Robust.Shared.Interfaces.GameObjects; -using System; -using System.Collections.Generic; -namespace Content.Server.BodySystem +namespace Content.Server.Health.BodySystem.Surgery.Surgeon { /// /// Interface representing an entity capable of performing surgery (performing operations on an class). /// For an example see , which inherits from this class. - /// + /// public interface ISurgeon { /// /// How long it takes to perform a single surgery step (in seconds). - /// + /// public float BaseOperationTime { get; set; } - - public delegate void MechanismRequestCallback(Mechanism target, IBodyPartContainer container, ISurgeon surgeon, IEntity performer); + + public delegate void MechanismRequestCallback(Mechanism.Mechanism target, IBodyPartContainer container, ISurgeon surgeon, IEntity performer); /// /// When performing a surgery, the may sometimes require selecting from a set of Mechanisms to operate on. /// This function is called in that scenario, and it is expected that you call the callback with one mechanism from the provided list. - /// - public void RequestMechanism(List options, MechanismRequestCallback callback); + /// + public void RequestMechanism(List options, MechanismRequestCallback callback); } } diff --git a/Content.Server/Health/BodySystem/Surgery/Surgeon/SurgeryToolComponent.cs b/Content.Server/Health/BodySystem/Surgery/Surgeon/SurgeryToolComponent.cs index f180c5501a..42e9e3f2ca 100644 --- a/Content.Server/Health/BodySystem/Surgery/Surgeon/SurgeryToolComponent.cs +++ b/Content.Server/Health/BodySystem/Surgery/Surgeon/SurgeryToolComponent.cs @@ -1,7 +1,10 @@ using System; using System.Collections.Generic; -using Content.Shared.BodySystem; +using Content.Server.Health.BodySystem.BodyPart; +using Content.Server.Health.BodySystem.Mechanism; using Content.Shared.GameObjects; +using Content.Shared.Health.BodySystem; +using Content.Shared.Health.BodySystem.Surgery; using Content.Shared.Interfaces; using Content.Shared.Interfaces.GameObjects.Components; using Robust.Server.GameObjects; @@ -14,7 +17,7 @@ using Robust.Shared.Localization; using Robust.Shared.Log; using Robust.Shared.Serialization; -namespace Content.Server.BodySystem +namespace Content.Server.Health.BodySystem.Surgery.Surgeon { //TODO: add checks to close UI if user walks too far away from tool or target. @@ -106,10 +109,10 @@ namespace Content.Server.BodySystem } } - public void RequestMechanism(List options, ISurgeon.MechanismRequestCallback callback) + public void RequestMechanism(List options, ISurgeon.MechanismRequestCallback callback) { var toSend = new Dictionary (); - foreach (Mechanism mechanism in options) + foreach (Mechanism.Mechanism mechanism in options) { _optionsCache.Add(_idHash, mechanism); toSend.Add(mechanism.Name, _idHash++); @@ -181,7 +184,7 @@ namespace Content.Server.BodySystem { SendNoUsefulWayToUseAnymorePopup(); } - BodyPart target = targetObject as BodyPart; + BodyPart.BodyPart target = targetObject as BodyPart.BodyPart; if (!target.AttemptSurgery(_surgeryType, _bodyManagerComponentCache, this, _performerCache)) { SendNoUsefulWayToUseAnymorePopup(); @@ -198,7 +201,7 @@ namespace Content.Server.BodySystem { SendNoUsefulWayToUseAnymorePopup(); } - Mechanism target = targetObject as Mechanism; + Mechanism.Mechanism target = targetObject as Mechanism.Mechanism; CloseSurgeryUI(_performerCache.GetComponent().playerSession); _callbackCache(target, _bodyManagerComponentCache, this, _performerCache); } diff --git a/Content.Server/Health/BodySystem/Surgery/SurgeryData/BiologicalSurgeryData.cs b/Content.Server/Health/BodySystem/Surgery/SurgeryData/BiologicalSurgeryData.cs index b0123f17bd..bb3917a7dc 100644 --- a/Content.Server/Health/BodySystem/Surgery/SurgeryData/BiologicalSurgeryData.cs +++ b/Content.Server/Health/BodySystem/Surgery/SurgeryData/BiologicalSurgeryData.cs @@ -1,32 +1,26 @@ -using System; -using System.Collections.Generic; +using System.Collections.Generic; using System.Linq; -using Content.Shared.BodySystem; +using Content.Server.Health.BodySystem.Surgery.Surgeon; +using Content.Shared.Health.BodySystem; using Content.Shared.Interfaces; using Robust.Shared.Interfaces.GameObjects; -using Robust.Shared.Interfaces.Serialization; -using Robust.Shared.IoC; using Robust.Shared.Localization; -using Robust.Shared.Prototypes; -using Robust.Shared.Serialization; -using Robust.Shared.ViewVariables; -using YamlDotNet.RepresentationModel; -namespace Content.Server.BodySystem +namespace Content.Server.Health.BodySystem.Surgery.SurgeryData { /// /// Data class representing the surgery state of a biological entity. - /// + /// public class BiologicalSurgeryData : ISurgeryData { protected bool _skinOpened = false; protected bool _vesselsClamped = false; protected bool _skinRetracted = false; - protected List _disconnectedOrgans = new List(); + protected List _disconnectedOrgans = new List(); - public BiologicalSurgeryData(BodyPart parent) : base(parent) { } + public BiologicalSurgeryData(BodyPart.BodyPart parent) : base(parent) { } public override SurgeryAction GetSurgeryStep(SurgeryType toolType) { @@ -79,7 +73,7 @@ namespace Content.Server.BodySystem else if (_skinOpened && _vesselsClamped && _skinRetracted) //Case: skin is fully open. { toReturn += Loc.GetString("There is an incision on {0:their} {1}.\n", target, _parent.Name); - foreach (Mechanism mechanism in _disconnectedOrgans) + foreach (Mechanism.Mechanism mechanism in _disconnectedOrgans) { toReturn += Loc.GetString("{0:their} {1} is loose.\n", target, mechanism.Name); } @@ -87,12 +81,12 @@ namespace Content.Server.BodySystem return toReturn; } - public override bool CanInstallMechanism(Mechanism toBeInstalled) + public override bool CanInstallMechanism(Mechanism.Mechanism toBeInstalled) { return _skinOpened && _vesselsClamped && _skinRetracted; } - public override bool CanAttachBodyPart(BodyPart toBeConnected) + public override bool CanAttachBodyPart(BodyPart.BodyPart toBeConnected) { return true; //TODO: if a bodypart is disconnected, you should have to do some surgery to allow another bodypart to be attached. @@ -141,8 +135,8 @@ namespace Content.Server.BodySystem { if (_parent.Mechanisms.Count <= 0) return; - List toSend = new List(); - foreach (Mechanism mechanism in _parent.Mechanisms) + List toSend = new List(); + foreach (Mechanism.Mechanism mechanism in _parent.Mechanisms) { if (!_disconnectedOrgans.Contains(mechanism)) toSend.Add(mechanism); @@ -150,7 +144,7 @@ namespace Content.Server.BodySystem if (toSend.Count > 0) surgeon.RequestMechanism(toSend, LoosenOrganSurgeryCallback); } - public void LoosenOrganSurgeryCallback(Mechanism target, IBodyPartContainer container, ISurgeon surgeon, IEntity performer) + public void LoosenOrganSurgeryCallback(Mechanism.Mechanism target, IBodyPartContainer container, ISurgeon surgeon, IEntity performer) { if (target != null && _parent.Mechanisms.Contains(target)) { @@ -172,7 +166,7 @@ namespace Content.Server.BodySystem } - public void RemoveOrganSurgeryCallback(Mechanism target, IBodyPartContainer container, ISurgeon surgeon, IEntity performer) + public void RemoveOrganSurgeryCallback(Mechanism.Mechanism target, IBodyPartContainer container, ISurgeon surgeon, IEntity performer) { if (target != null && _parent.Mechanisms.Contains(target)) { diff --git a/Content.Server/Health/BodySystem/Surgery/SurgeryData/ISurgeryData.cs b/Content.Server/Health/BodySystem/Surgery/SurgeryData/ISurgeryData.cs index 38f6f6c854..47a0aba4c1 100644 --- a/Content.Server/Health/BodySystem/Surgery/SurgeryData/ISurgeryData.cs +++ b/Content.Server/Health/BodySystem/Surgery/SurgeryData/ISurgeryData.cs @@ -1,58 +1,54 @@ -using System; -using System.Collections.Generic; -using Content.Shared.BodySystem; +using Content.Server.Health.BodySystem.BodyPart; +using Content.Server.Health.BodySystem.Mechanism; +using Content.Server.Health.BodySystem.Surgery.Surgeon; +using Content.Shared.Health.BodySystem; using Robust.Shared.Interfaces.GameObjects; -using Robust.Shared.Interfaces.Serialization; -using Robust.Shared.Prototypes; -using Robust.Shared.Serialization; -using Robust.Shared.ViewVariables; -using YamlDotNet.RepresentationModel; -namespace Content.Server.BodySystem +namespace Content.Server.Health.BodySystem.Surgery.SurgeryData { /// /// This data class represents the state of a in regards to everything surgery related - whether there's an incision on it, whether the bone is broken, etc. - /// + /// public abstract class ISurgeryData { /// /// The this surgeryData is attached to. The ISurgeryData class should not exist without a that it /// represents, and will throw errors if it is null. - /// - protected BodyPart _parent; + /// + protected BodyPart.BodyPart _parent; /// /// The of the parent . - /// + /// protected BodyPartType _parentType => _parent.PartType; public delegate void SurgeryAction(IBodyPartContainer container, ISurgeon surgeon, IEntity performer); - public ISurgeryData(BodyPart parent) + public ISurgeryData(BodyPart.BodyPart parent) { _parent = parent; } /// - /// Returns the description of this current to be shown upon observing the given entity. + /// Returns the description of this current to be shown upon observing the given entity. /// public abstract string GetDescription(IEntity target); /// - /// Returns whether a can be installed into the this ISurgeryData represents. + /// Returns whether a can be installed into the this ISurgeryData represents. /// - public abstract bool CanInstallMechanism(Mechanism toBeInstalled); + public abstract bool CanInstallMechanism(Mechanism.Mechanism toBeInstalled); /// /// Returns whether the given can be connected to the this ISurgeryData represents. /// - public abstract bool CanAttachBodyPart(BodyPart toBeConnected); + public abstract bool CanAttachBodyPart(BodyPart.BodyPart toBeConnected); /// /// Gets the delegate corresponding to the surgery step using the given . Returns null if no surgery step can be performed. diff --git a/Content.Server/Interfaces/Chemistry/IReactionEffect.cs b/Content.Server/Interfaces/Chemistry/IReactionEffect.cs index 4bd2eb30f0..36209aef3c 100644 --- a/Content.Server/Interfaces/Chemistry/IReactionEffect.cs +++ b/Content.Server/Interfaces/Chemistry/IReactionEffect.cs @@ -1,7 +1,7 @@ using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Interfaces.Serialization; -namespace Content.Shared.Interfaces +namespace Content.Server.Interfaces.Chemistry { /// /// Chemical reaction effect on the world such as an explosion, EMP, or fire. diff --git a/Content.Server/Interfaces/GameObjects/Components/Damage/IDamageableComponent.cs b/Content.Server/Interfaces/GameObjects/Components/Damage/IDamageableComponent.cs index e45685a46b..ad88349bdd 100644 --- a/Content.Server/Interfaces/GameObjects/Components/Damage/IDamageableComponent.cs +++ b/Content.Server/Interfaces/GameObjects/Components/Damage/IDamageableComponent.cs @@ -1,9 +1,9 @@ using System; -using Content.Server.GameObjects; -using Content.Shared.GameObjects; +using Content.Server.GameObjects.Components.Damage; +using Content.Shared.GameObjects.Components.Damage; using Robust.Shared.Interfaces.GameObjects; -namespace Content.Server.Interfaces.GameObjects +namespace Content.Server.Interfaces.GameObjects.Components.Damage { public interface IDamageableComponent : IComponent { diff --git a/Content.Server/Interfaces/GameObjects/Components/Interaction/IBodyPartAdded.cs b/Content.Server/Interfaces/GameObjects/Components/Interaction/IBodyPartAdded.cs index 2a2a9b4ce8..0cca658e90 100644 --- a/Content.Server/Interfaces/GameObjects/Components/Interaction/IBodyPartAdded.cs +++ b/Content.Server/Interfaces/GameObjects/Components/Interaction/IBodyPartAdded.cs @@ -1,5 +1,5 @@ using System; -using Content.Server.BodySystem; +using Content.Server.Health.BodySystem.BodyPart; namespace Content.Server.Interfaces.GameObjects.Components.Interaction { diff --git a/Content.Server/Interfaces/GameObjects/Components/Items/IHandsComponent.cs b/Content.Server/Interfaces/GameObjects/Components/Items/IHandsComponent.cs index 83d1b509a7..d631716cc9 100644 --- a/Content.Server/Interfaces/GameObjects/Components/Items/IHandsComponent.cs +++ b/Content.Server/Interfaces/GameObjects/Components/Items/IHandsComponent.cs @@ -1,6 +1,6 @@ using System; using System.Collections.Generic; -using Content.Server.GameObjects.Components; +using Content.Server.GameObjects.Components.Items.Storage; using Content.Shared.GameObjects.Components.Items; using Content.Shared.GameObjects.EntitySystems; using Robust.Server.GameObjects.Components.Container; diff --git a/Content.Server/Interfaces/GameObjects/IOnDamageBehavior.cs b/Content.Server/Interfaces/GameObjects/IOnDamageBehavior.cs index fdd8b7bb93..911d30b031 100644 --- a/Content.Server/Interfaces/GameObjects/IOnDamageBehavior.cs +++ b/Content.Server/Interfaces/GameObjects/IOnDamageBehavior.cs @@ -1,8 +1,7 @@ -using System; -using System.Collections.Generic; -using Content.Server.GameObjects; +using System.Collections.Generic; +using Content.Server.GameObjects.Components.Damage; -namespace Content.Server.Interfaces +namespace Content.Server.Interfaces.GameObjects { /// /// Any component/entity that has behaviour linked to taking damage should implement this interface. diff --git a/Content.Server/Interfaces/GameObjects/ISuicideAct.cs b/Content.Server/Interfaces/GameObjects/ISuicideAct.cs index 8d09775b86..fb6ed4ade5 100644 --- a/Content.Server/Interfaces/GameObjects/ISuicideAct.cs +++ b/Content.Server/Interfaces/GameObjects/ISuicideAct.cs @@ -1,8 +1,5 @@ using Content.Server.Interfaces.Chat; using Robust.Shared.Interfaces.GameObjects; -using System; -using System.Collections.Generic; -using System.Text; namespace Content.Server.Interfaces.GameObjects { diff --git a/Content.Server/Interfaces/IAccess.cs b/Content.Server/Interfaces/IAccess.cs index f271990545..bec7cef9b7 100644 --- a/Content.Server/Interfaces/IAccess.cs +++ b/Content.Server/Interfaces/IAccess.cs @@ -1,7 +1,7 @@ #nullable enable using System; -using Content.Server.GameObjects.Components.Access; using System.Collections.Generic; +using Content.Server.GameObjects.Components.Access; namespace Content.Server.Interfaces { diff --git a/Content.Server/Interfaces/IGasReactionEffect.cs b/Content.Server/Interfaces/IGasReactionEffect.cs index 27958cc3cc..95148d570c 100644 --- a/Content.Server/Interfaces/IGasReactionEffect.cs +++ b/Content.Server/Interfaces/IGasReactionEffect.cs @@ -2,7 +2,6 @@ using Content.Server.Atmos; using Content.Server.Atmos.Reactions; using Robust.Shared.Interfaces.Serialization; -using Robust.Shared.Map; namespace Content.Server.Interfaces { diff --git a/Content.Server/Interfaces/IListen.cs b/Content.Server/Interfaces/IListen.cs index c778c0adee..840ceac8e9 100644 --- a/Content.Server/Interfaces/IListen.cs +++ b/Content.Server/Interfaces/IListen.cs @@ -1,7 +1,4 @@ using Robust.Shared.Interfaces.GameObjects; -using System; -using System.Collections.Generic; -using System.Text; namespace Content.Server.Interfaces { diff --git a/Content.Server/Interfaces/PDA/IPDAUplinkManager.cs b/Content.Server/Interfaces/PDA/IPDAUplinkManager.cs index 34bc3d3c71..3ba9bdf5c8 100644 --- a/Content.Server/Interfaces/PDA/IPDAUplinkManager.cs +++ b/Content.Server/Interfaces/PDA/IPDAUplinkManager.cs @@ -1,7 +1,5 @@ -using System; using System.Collections.Generic; using Content.Shared.GameObjects.Components.PDA; -using Content.Shared.Prototypes.PDA; namespace Content.Server.Interfaces.PDA { diff --git a/Content.Server/Jobs/ClownSpecial.cs b/Content.Server/Jobs/ClownSpecial.cs index 72dc3000f5..29e64304e2 100644 --- a/Content.Server/Jobs/ClownSpecial.cs +++ b/Content.Server/Jobs/ClownSpecial.cs @@ -1,4 +1,5 @@ using Content.Server.GameObjects.Components.Mobs; +using Content.Shared.Roles; using JetBrains.Annotations; using Robust.Shared.Interfaces.GameObjects; diff --git a/Content.Server/MoMMILink.cs b/Content.Server/MoMMILink.cs index 0ae57f928d..318d98151a 100644 --- a/Content.Server/MoMMILink.cs +++ b/Content.Server/MoMMILink.cs @@ -1,5 +1,4 @@ using System; -using System.IO; using System.Net; using System.Net.Http; using System.Text; @@ -14,7 +13,6 @@ using Robust.Shared.Asynchronous; using Robust.Shared.Interfaces.Configuration; using Robust.Shared.IoC; using Robust.Shared.Log; -using Robust.Shared.Utility; namespace Content.Server { diff --git a/Content.Server/Mobs/Commands.cs b/Content.Server/Mobs/Commands.cs index a31eac223c..a759d8d5b4 100644 --- a/Content.Server/Mobs/Commands.cs +++ b/Content.Server/Mobs/Commands.cs @@ -2,10 +2,9 @@ using Content.Server.GameObjects.Components.Mobs; using Content.Server.Mobs.Roles; using Content.Server.Players; -using Content.Shared.Jobs; +using Content.Shared.Roles; using Robust.Server.Interfaces.Console; using Robust.Server.Interfaces.Player; -using Robust.Shared.Interfaces.Reflection; using Robust.Shared.IoC; using Robust.Shared.Network; using Robust.Shared.Prototypes; diff --git a/Content.Server/Mobs/Roles/Job.cs b/Content.Server/Mobs/Roles/Job.cs index 33db5a65dc..064bb3d769 100644 --- a/Content.Server/Mobs/Roles/Job.cs +++ b/Content.Server/Mobs/Roles/Job.cs @@ -1,7 +1,5 @@ -using System; -using System.Collections.Generic; using Content.Server.Interfaces.Chat; -using Content.Shared.Jobs; +using Content.Shared.Roles; using Robust.Shared.IoC; namespace Content.Server.Mobs.Roles diff --git a/Content.Server/Mobs/Roles/SuspicionInnocentRole.cs b/Content.Server/Mobs/Roles/SuspicionInnocentRole.cs index 4c2f16f6a9..e8ab7a96be 100644 --- a/Content.Server/Mobs/Roles/SuspicionInnocentRole.cs +++ b/Content.Server/Mobs/Roles/SuspicionInnocentRole.cs @@ -1,8 +1,6 @@ -using Content.Server.GameObjects; using Content.Server.Interfaces.Chat; +using Content.Shared.Roles; using Robust.Shared.IoC; -using Robust.Shared.Utility; -using Content.Shared.Antags; namespace Content.Server.Mobs.Roles { diff --git a/Content.Server/Mobs/Roles/SuspicionTraitorRole.cs b/Content.Server/Mobs/Roles/SuspicionTraitorRole.cs index 5d19854454..753f5424e1 100644 --- a/Content.Server/Mobs/Roles/SuspicionTraitorRole.cs +++ b/Content.Server/Mobs/Roles/SuspicionTraitorRole.cs @@ -1,8 +1,6 @@ -using Content.Server.GameObjects; using Content.Server.Interfaces.Chat; +using Content.Shared.Roles; using Robust.Shared.IoC; -using Robust.Shared.Utility; -using Content.Shared.Antags; namespace Content.Server.Mobs.Roles { diff --git a/Content.Server/Mobs/StandingStateHelper.cs b/Content.Server/Mobs/StandingStateHelper.cs index 6a43352fa8..1f6f692a0f 100644 --- a/Content.Server/Mobs/StandingStateHelper.cs +++ b/Content.Server/Mobs/StandingStateHelper.cs @@ -1,4 +1,3 @@ -using Content.Server.Interfaces.GameObjects; using Content.Server.Interfaces.GameObjects.Components.Items; using Content.Shared.Audio; using Content.Shared.GameObjects.Components.Mobs; diff --git a/Content.Server/Observer/Ghost.cs b/Content.Server/Observer/Ghost.cs index a2a2dda05f..493ac615b9 100644 --- a/Content.Server/Observer/Ghost.cs +++ b/Content.Server/Observer/Ghost.cs @@ -1,18 +1,13 @@ -using Content.Server.GameObjects; +using Content.Server.GameObjects.Components.Damage; +using Content.Server.GameObjects.Components.Mobs; using Content.Server.GameObjects.Components.Observer; -using Content.Server.GameObjects.EntitySystems; using Content.Server.Interfaces.GameTicking; using Content.Server.Players; -using Content.Shared.Atmos; -using Content.Shared.GameObjects; +using Content.Shared.GameObjects.Components.Damage; using Robust.Server.Interfaces.Console; -using Robust.Server.Interfaces.Placement; using Robust.Server.Interfaces.Player; -using Robust.Shared.GameObjects.Systems; using Robust.Shared.Interfaces.GameObjects; -using Robust.Shared.Interfaces.Map; using Robust.Shared.IoC; -using Robust.Shared.Map; namespace Content.Server.Observer { diff --git a/Content.Server/PDA/PDAUplinkManager.cs b/Content.Server/PDA/PDAUplinkManager.cs index 53b9aa2e05..0d93c95dc5 100644 --- a/Content.Server/PDA/PDAUplinkManager.cs +++ b/Content.Server/PDA/PDAUplinkManager.cs @@ -1,8 +1,7 @@ using System.Collections.Generic; using System.Linq; -using Content.Server.GameObjects; -using Content.Server.GameObjects.Components; using Content.Server.GameObjects.Components.GUI; +using Content.Server.GameObjects.Components.Items.Storage; using Content.Server.GameObjects.Components.Mobs; using Content.Server.Interfaces.PDA; using Content.Shared.GameObjects.Components.PDA; diff --git a/Content.Server/Placement/SpawnHelpers.cs b/Content.Server/Placement/SpawnHelpers.cs index e47d770aed..a6675fa712 100644 --- a/Content.Server/Placement/SpawnHelpers.cs +++ b/Content.Server/Placement/SpawnHelpers.cs @@ -1,8 +1,6 @@ using Robust.Server.Interfaces.GameObjects; -using Robust.Shared.Interfaces.GameObjects.Components; using Robust.Shared.IoC; using Robust.Shared.Map; -using Robust.Shared.Maths; namespace Content.Server.Placement { diff --git a/Content.Server/Sandbox/SandboxManager.cs b/Content.Server/Sandbox/SandboxManager.cs index e695a517c3..3492db968c 100644 --- a/Content.Server/Sandbox/SandboxManager.cs +++ b/Content.Server/Sandbox/SandboxManager.cs @@ -1,6 +1,5 @@ -using Content.Server.GameObjects; -using Content.Server.GameObjects.Components; using Content.Server.GameObjects.Components.GUI; +using Content.Server.GameObjects.Components.Items.Storage; using Content.Server.GameTicking; using Content.Server.Interfaces.GameTicking; using Content.Shared.Sandbox; diff --git a/Content.Server/ServerContentIoC.cs b/Content.Server/ServerContentIoC.cs index dded203861..c9d618b004 100644 --- a/Content.Server/ServerContentIoC.cs +++ b/Content.Server/ServerContentIoC.cs @@ -2,6 +2,8 @@ using Content.Server.AI.Utility.Considerations; using Content.Server.AI.WorldState; using Content.Server.Cargo; using Content.Server.Chat; +using Content.Server.GameObjects.Components.NodeContainer.NodeGroups; +using Content.Server.GameObjects.Components.Power.PowerNetComponents; using Content.Server.GameTicking; using Content.Server.Interfaces; using Content.Server.Interfaces.Chat; @@ -14,8 +16,6 @@ using Content.Server.Utility; using Content.Shared.Interfaces; using Content.Shared.Kitchen; using Robust.Shared.IoC; -using Content.Server.GameObjects.Components.NodeContainer.NodeGroups; -using Content.Server.GameObjects.Components.Power.PowerNetComponents; namespace Content.Server { diff --git a/Content.Server/Throw/ThrowHelper.cs b/Content.Server/Throw/ThrowHelper.cs index b0ebd1133b..6b62531a7f 100644 --- a/Content.Server/Throw/ThrowHelper.cs +++ b/Content.Server/Throw/ThrowHelper.cs @@ -1,5 +1,5 @@ using System; -using Content.Server.GameObjects.Components; +using Content.Server.GameObjects.Components.Projectiles; using Content.Shared.GameObjects.EntitySystems; using Content.Shared.Physics; using Robust.Shared.GameObjects.Components; diff --git a/Content.Shared/Atmos/GasPrototype.cs b/Content.Shared/Atmos/GasPrototype.cs index 8237d54b4c..8a71811760 100644 --- a/Content.Shared/Atmos/GasPrototype.cs +++ b/Content.Shared/Atmos/GasPrototype.cs @@ -1,7 +1,5 @@ -using Robust.Shared.Interfaces.Serialization; -using Robust.Shared.Prototypes; +using Robust.Shared.Prototypes; using Robust.Shared.Serialization; -using System; using Robust.Shared.Utility; using YamlDotNet.RepresentationModel; diff --git a/Content.Shared/Audio/AudioHelpers.cs b/Content.Shared/Audio/AudioHelpers.cs index 4e2a68b0fb..e996954be6 100644 --- a/Content.Shared/Audio/AudioHelpers.cs +++ b/Content.Shared/Audio/AudioHelpers.cs @@ -1,12 +1,6 @@ -using System; -using Content.Shared.GameObjects.Components.Sound; using Robust.Shared.Audio; -using Robust.Shared.GameObjects; -using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Interfaces.Random; using Robust.Shared.IoC; -using Robust.Shared.Log; -using Robust.Shared.Map; using Robust.Shared.Prototypes; using Robust.Shared.Random; diff --git a/Content.Shared/Chemistry/DefaultMetabolizable.cs b/Content.Shared/Chemistry/DefaultMetabolizable.cs index 20de8420c0..7f8a72983a 100644 --- a/Content.Shared/Chemistry/DefaultMetabolizable.cs +++ b/Content.Shared/Chemistry/DefaultMetabolizable.cs @@ -1,7 +1,6 @@ using Content.Shared.Interfaces.Chemistry; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Interfaces.Serialization; -using Robust.Shared.IoC; using Robust.Shared.Serialization; namespace Content.Shared.Chemistry diff --git a/Content.Shared/Chemistry/ReagentPrototype.cs b/Content.Shared/Chemistry/ReagentPrototype.cs index 1280c7781e..1f476c47fc 100644 --- a/Content.Shared/Chemistry/ReagentPrototype.cs +++ b/Content.Shared/Chemistry/ReagentPrototype.cs @@ -5,7 +5,6 @@ using Robust.Shared.IoC; using Robust.Shared.Maths; using Robust.Shared.Prototypes; using Robust.Shared.Serialization; -using Robust.Shared.Utility; using YamlDotNet.RepresentationModel; namespace Content.Shared.Chemistry diff --git a/Content.Shared/Chemistry/ReagentUnit.cs b/Content.Shared/Chemistry/ReagentUnit.cs index 42ed972187..ec2d6adb60 100644 --- a/Content.Shared/Chemistry/ReagentUnit.cs +++ b/Content.Shared/Chemistry/ReagentUnit.cs @@ -1,7 +1,7 @@ -using Robust.Shared.Interfaces.Serialization; -using System; +using System; using System.Globalization; using System.Linq; +using Robust.Shared.Interfaces.Serialization; namespace Content.Shared.Chemistry { diff --git a/Content.Shared/Chemistry/Solution.cs b/Content.Shared/Chemistry/Solution.cs index ff2e15ec64..9db9a0a101 100644 --- a/Content.Shared/Chemistry/Solution.cs +++ b/Content.Shared/Chemistry/Solution.cs @@ -1,13 +1,11 @@ -using Content.Shared.Interfaces.Chemistry; -using Robust.Shared.Interfaces.Serialization; -using Robust.Shared.IoC; -using Robust.Shared.Serialization; -using Robust.Shared.Utility; -using Robust.Shared.ViewVariables; -using System; +using System; using System.Collections; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; +using Robust.Shared.Interfaces.Serialization; +using Robust.Shared.Serialization; +using Robust.Shared.Utility; +using Robust.Shared.ViewVariables; namespace Content.Shared.Chemistry { diff --git a/Content.Shared/EntryPoint.cs b/Content.Shared/EntryPoint.cs index 6d7472d02a..25976f6379 100644 --- a/Content.Shared/EntryPoint.cs +++ b/Content.Shared/EntryPoint.cs @@ -1,15 +1,15 @@ using System; - using System.Collections.Generic; - using System.Globalization; - using Content.Shared.Maps; - using Robust.Shared.ContentPack; - using Robust.Shared.Interfaces.Map; - using Robust.Shared.IoC; - using Robust.Shared.Localization; +using System.Collections.Generic; +using System.Globalization; +using Content.Shared.Maps; +using Robust.Shared.ContentPack; +using Robust.Shared.Interfaces.Map; +using Robust.Shared.IoC; +using Robust.Shared.Localization; using Robust.Shared.Localization.Macros; using Robust.Shared.Prototypes; - namespace Content.Shared +namespace Content.Shared { public class EntryPoint : GameShared { diff --git a/Content.Shared/GameObjects/Components/Cargo/SharedCargoConsoleComponent.cs b/Content.Shared/GameObjects/Components/Cargo/SharedCargoConsoleComponent.cs index a2221bfb32..66f5041184 100644 --- a/Content.Shared/GameObjects/Components/Cargo/SharedCargoConsoleComponent.cs +++ b/Content.Shared/GameObjects/Components/Cargo/SharedCargoConsoleComponent.cs @@ -1,14 +1,9 @@ -using Content.Shared.Prototypes.Cargo; +using System; using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Components.UserInterface; using Robust.Shared.IoC; using Robust.Shared.Prototypes; using Robust.Shared.Serialization; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; namespace Content.Shared.GameObjects.Components.Cargo { diff --git a/Content.Shared/GameObjects/Components/Cargo/SharedCargoOrderDatabaseComponent.cs b/Content.Shared/GameObjects/Components/Cargo/SharedCargoOrderDatabaseComponent.cs index cd7debb0ab..78cbe28efd 100644 --- a/Content.Shared/GameObjects/Components/Cargo/SharedCargoOrderDatabaseComponent.cs +++ b/Content.Shared/GameObjects/Components/Cargo/SharedCargoOrderDatabaseComponent.cs @@ -1,8 +1,8 @@ -using Content.Shared.Prototypes.Cargo; +using System; +using System.Collections.Generic; +using Content.Shared.Prototypes.Cargo; using Robust.Shared.GameObjects; using Robust.Shared.Serialization; -using System; -using System.Collections.Generic; namespace Content.Shared.GameObjects.Components.Cargo { diff --git a/Content.Shared/GameObjects/Components/Cargo/SharedGalacticMarketComponent.cs b/Content.Shared/GameObjects/Components/Cargo/SharedGalacticMarketComponent.cs index 51cdcf2893..7636ee47ad 100644 --- a/Content.Shared/GameObjects/Components/Cargo/SharedGalacticMarketComponent.cs +++ b/Content.Shared/GameObjects/Components/Cargo/SharedGalacticMarketComponent.cs @@ -1,11 +1,11 @@ -using Content.Shared.Prototypes.Cargo; +using System; +using System.Collections; +using System.Collections.Generic; +using Content.Shared.Prototypes.Cargo; using Robust.Shared.GameObjects; using Robust.Shared.IoC; using Robust.Shared.Prototypes; using Robust.Shared.Serialization; -using System; -using System.Collections; -using System.Collections.Generic; namespace Content.Shared.GameObjects.Components.Cargo { diff --git a/Content.Shared/GameObjects/Components/Chemistry/ChemMaster/SharedChemMasterComponent.cs b/Content.Shared/GameObjects/Components/Chemistry/ChemMaster/SharedChemMasterComponent.cs index 8a4f630fb0..43d1584381 100644 --- a/Content.Shared/GameObjects/Components/Chemistry/ChemMaster/SharedChemMasterComponent.cs +++ b/Content.Shared/GameObjects/Components/Chemistry/ChemMaster/SharedChemMasterComponent.cs @@ -6,7 +6,7 @@ using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Components.UserInterface; using Robust.Shared.Serialization; -namespace Content.Shared.GameObjects.Components.Chemistry +namespace Content.Shared.GameObjects.Components.Chemistry.ChemMaster { /// diff --git a/Content.Shared/GameObjects/Components/Chemistry/ReagentDispenser/ReagentDispenserInventoryPrototype.cs b/Content.Shared/GameObjects/Components/Chemistry/ReagentDispenser/ReagentDispenserInventoryPrototype.cs index 1c5cb64af0..aa95bfe187 100644 --- a/Content.Shared/GameObjects/Components/Chemistry/ReagentDispenser/ReagentDispenserInventoryPrototype.cs +++ b/Content.Shared/GameObjects/Components/Chemistry/ReagentDispenser/ReagentDispenserInventoryPrototype.cs @@ -4,7 +4,7 @@ using Robust.Shared.Prototypes; using Robust.Shared.Serialization; using YamlDotNet.RepresentationModel; -namespace Content.Shared.GameObjects.Components.Chemistry +namespace Content.Shared.GameObjects.Components.Chemistry.ReagentDispenser { /// /// Is simply a list of reagents defined in yaml. This can then be set as a diff --git a/Content.Shared/GameObjects/Components/Chemistry/ReagentDispenser/SharedReagentDispenserComponent.cs b/Content.Shared/GameObjects/Components/Chemistry/ReagentDispenser/SharedReagentDispenserComponent.cs index b2d094a5d0..d7ff2d7521 100644 --- a/Content.Shared/GameObjects/Components/Chemistry/ReagentDispenser/SharedReagentDispenserComponent.cs +++ b/Content.Shared/GameObjects/Components/Chemistry/ReagentDispenser/SharedReagentDispenserComponent.cs @@ -5,7 +5,7 @@ using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Components.UserInterface; using Robust.Shared.Serialization; -namespace Content.Shared.GameObjects.Components.Chemistry +namespace Content.Shared.GameObjects.Components.Chemistry.ReagentDispenser { /// diff --git a/Content.Shared/GameObjects/Components/Chemistry/SharedSolutionComponent.cs b/Content.Shared/GameObjects/Components/Chemistry/SharedSolutionComponent.cs index 232bea635e..93fa5d5aab 100644 --- a/Content.Shared/GameObjects/Components/Chemistry/SharedSolutionComponent.cs +++ b/Content.Shared/GameObjects/Components/Chemistry/SharedSolutionComponent.cs @@ -1,12 +1,6 @@ using System; -using System.Collections.Generic; -using Content.Shared.Chemistry; using Robust.Shared.GameObjects; -using Robust.Shared.IoC; -using Robust.Shared.Maths; -using Robust.Shared.Prototypes; using Robust.Shared.Serialization; -using Robust.Shared.ViewVariables; namespace Content.Shared.GameObjects.Components.Chemistry { diff --git a/Content.Shared/GameObjects/Components/Damage/DamageableComponent.cs b/Content.Shared/GameObjects/Components/Damage/DamageableComponent.cs index 656efbaf82..13cf0b0e93 100644 --- a/Content.Shared/GameObjects/Components/Damage/DamageableComponent.cs +++ b/Content.Shared/GameObjects/Components/Damage/DamageableComponent.cs @@ -3,7 +3,7 @@ using System.Collections.Generic; using Robust.Shared.GameObjects; using Robust.Shared.Serialization; -namespace Content.Shared.GameObjects +namespace Content.Shared.GameObjects.Components.Damage { public abstract class SharedDamageableComponent : Component { diff --git a/Content.Shared/GameObjects/Components/Instruments/SharedInstrumentComponent.cs b/Content.Shared/GameObjects/Components/Instruments/SharedInstrumentComponent.cs index c431a25fc8..87c1fa35f3 100644 --- a/Content.Shared/GameObjects/Components/Instruments/SharedInstrumentComponent.cs +++ b/Content.Shared/GameObjects/Components/Instruments/SharedInstrumentComponent.cs @@ -1,5 +1,4 @@ using System; -using Content.Shared.BodySystem; using Robust.Shared.Audio.Midi; using Robust.Shared.GameObjects; using Robust.Shared.Serialization; diff --git a/Content.Shared/GameObjects/Components/Inventory/InventoryTemplates.cs b/Content.Shared/GameObjects/Components/Inventory/InventoryTemplates.cs index 0415814b41..457c0c19ef 100644 --- a/Content.Shared/GameObjects/Components/Inventory/InventoryTemplates.cs +++ b/Content.Shared/GameObjects/Components/Inventory/InventoryTemplates.cs @@ -2,7 +2,7 @@ using JetBrains.Annotations; using static Content.Shared.GameObjects.Components.Inventory.EquipmentSlotDefines; -namespace Content.Shared.GameObjects +namespace Content.Shared.GameObjects.Components.Inventory { public abstract class Inventory { @@ -47,7 +47,7 @@ namespace Content.Shared.GameObjects public override IReadOnlyList SlotMasks { get; } = new List() { Slots.EYES, Slots.HEAD, Slots.EARS, - Slots.OUTERCLOTHING, Slots.MASK, Slots.INNERCLOTHING, + Slots.OUTERCLOTHING, Slots.MASK, Slots.INNERCLOTHING, Slots.BACKPACK, Slots.BELT, Slots.GLOVES, Slots.NONE, Slots.SHOES, Slots.IDCARD, Slots.POCKET1, Slots.POCKET2, Slots.NECK diff --git a/Content.Shared/GameObjects/Components/Inventory/SharedInventoryComponent.cs b/Content.Shared/GameObjects/Components/Inventory/SharedInventoryComponent.cs index 032385d0d4..dfea45389e 100644 --- a/Content.Shared/GameObjects/Components/Inventory/SharedInventoryComponent.cs +++ b/Content.Shared/GameObjects/Components/Inventory/SharedInventoryComponent.cs @@ -8,7 +8,7 @@ using Robust.Shared.Utility; using Robust.Shared.ViewVariables; using static Content.Shared.GameObjects.Components.Inventory.EquipmentSlotDefines; -namespace Content.Shared.GameObjects +namespace Content.Shared.GameObjects.Components.Inventory { public abstract class SharedInventoryComponent : Component { diff --git a/Content.Shared/GameObjects/Components/Mobs/SharedOverlayEffectsComponent.cs b/Content.Shared/GameObjects/Components/Mobs/SharedOverlayEffectsComponent.cs index e487f8940c..865b3092e8 100644 --- a/Content.Shared/GameObjects/Components/Mobs/SharedOverlayEffectsComponent.cs +++ b/Content.Shared/GameObjects/Components/Mobs/SharedOverlayEffectsComponent.cs @@ -1,19 +1,12 @@ using System; using System.Collections.Generic; -using System.ComponentModel; using System.Linq; -using System.Runtime.Serialization; -using System.Threading; -using System.Timers; using JetBrains.Annotations; using Robust.Shared.GameObjects; using Robust.Shared.Interfaces.Timing; using Robust.Shared.IoC; -using Robust.Shared.Prototypes; using Robust.Shared.Serialization; using Robust.Shared.ViewVariables; -using YamlDotNet.RepresentationModel; -using Component = Robust.Shared.GameObjects.Component; namespace Content.Shared.GameObjects.Components.Mobs { diff --git a/Content.Shared/GameObjects/Components/Movement/SharedSlipperyComponent.cs b/Content.Shared/GameObjects/Components/Movement/SharedSlipperyComponent.cs index 510216449c..4181a2e36d 100644 --- a/Content.Shared/GameObjects/Components/Movement/SharedSlipperyComponent.cs +++ b/Content.Shared/GameObjects/Components/Movement/SharedSlipperyComponent.cs @@ -1,5 +1,4 @@ -using System; -using System.Collections.Generic; +using System.Collections.Generic; using Content.Shared.GameObjects.Components.Mobs; using Content.Shared.GameObjects.EntitySystems; using Content.Shared.Physics; diff --git a/Content.Shared/GameObjects/Components/PDA/SharedPDAComponent.cs b/Content.Shared/GameObjects/Components/PDA/SharedPDAComponent.cs index 567f7f8b2c..8e24cbcd95 100644 --- a/Content.Shared/GameObjects/Components/PDA/SharedPDAComponent.cs +++ b/Content.Shared/GameObjects/Components/PDA/SharedPDAComponent.cs @@ -1,9 +1,6 @@ using System; -using System.Collections.Generic; -using JetBrains.Annotations; using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Components.UserInterface; -using Robust.Shared.Maths; using Robust.Shared.Serialization; namespace Content.Shared.GameObjects.Components.PDA diff --git a/Content.Shared/GameObjects/Components/Pointing/SharedPointingArrowComponent.cs b/Content.Shared/GameObjects/Components/Pointing/SharedPointingArrowComponent.cs index 05e14bb666..4bca8f7007 100644 --- a/Content.Shared/GameObjects/Components/Pointing/SharedPointingArrowComponent.cs +++ b/Content.Shared/GameObjects/Components/Pointing/SharedPointingArrowComponent.cs @@ -1,6 +1,4 @@ -using System; -using Robust.Shared.GameObjects; -using Robust.Shared.Serialization; +using Robust.Shared.GameObjects; namespace Content.Shared.GameObjects.Components.Pointing { diff --git a/Content.Shared/GameObjects/Components/Power/SharedApc.cs b/Content.Shared/GameObjects/Components/Power/SharedApc.cs index e68c031aa3..0169ca2d72 100644 --- a/Content.Shared/GameObjects/Components/Power/SharedApc.cs +++ b/Content.Shared/GameObjects/Components/Power/SharedApc.cs @@ -1,5 +1,4 @@ using System; -using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Components.UserInterface; using Robust.Shared.Serialization; diff --git a/Content.Shared/GameObjects/Components/Power/SharedSolarControlConsoleComponent.cs b/Content.Shared/GameObjects/Components/Power/SharedSolarControlConsoleComponent.cs index a42e68287a..54ce97e831 100644 --- a/Content.Shared/GameObjects/Components/Power/SharedSolarControlConsoleComponent.cs +++ b/Content.Shared/GameObjects/Components/Power/SharedSolarControlConsoleComponent.cs @@ -1,8 +1,8 @@ using System; using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Components.UserInterface; -using Robust.Shared.Serialization; using Robust.Shared.Maths; +using Robust.Shared.Serialization; namespace Content.Shared.GameObjects.Components.Power { diff --git a/Content.Shared/GameObjects/Components/SharedDoAfterComponent.cs b/Content.Shared/GameObjects/Components/SharedDoAfterComponent.cs index b84d238700..9cea4de79d 100644 --- a/Content.Shared/GameObjects/Components/SharedDoAfterComponent.cs +++ b/Content.Shared/GameObjects/Components/SharedDoAfterComponent.cs @@ -1,7 +1,5 @@ using System; -using System.Collections.Generic; using Robust.Shared.GameObjects; -using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Map; using Robust.Shared.Serialization; diff --git a/Content.Shared/GameObjects/Components/SharedGasAnalyzerComponent.cs b/Content.Shared/GameObjects/Components/SharedGasAnalyzerComponent.cs index d5ab8162ad..641ab79ac8 100644 --- a/Content.Shared/GameObjects/Components/SharedGasAnalyzerComponent.cs +++ b/Content.Shared/GameObjects/Components/SharedGasAnalyzerComponent.cs @@ -1,10 +1,8 @@ -using Robust.Shared.GameObjects; +using System; +using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Components.UserInterface; using Robust.Shared.Localization; using Robust.Shared.Serialization; -using System; -using System.Collections.Generic; -using System.Text; namespace Content.Shared.GameObjects.Components { diff --git a/Content.Shared/GameObjects/Components/SharedPaperComponent.cs b/Content.Shared/GameObjects/Components/SharedPaperComponent.cs index 71b4317d9c..ea8ab84577 100644 --- a/Content.Shared/GameObjects/Components/SharedPaperComponent.cs +++ b/Content.Shared/GameObjects/Components/SharedPaperComponent.cs @@ -1,5 +1,4 @@ using System; -using System.Net.Mime; using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Components.UserInterface; using Robust.Shared.Serialization; diff --git a/Content.Shared/GameObjects/Components/Trigger/TriggerVisuals.cs b/Content.Shared/GameObjects/Components/Trigger/TriggerVisuals.cs index a8d90904fe..d64a3bcdaa 100644 --- a/Content.Shared/GameObjects/Components/Trigger/TriggerVisuals.cs +++ b/Content.Shared/GameObjects/Components/Trigger/TriggerVisuals.cs @@ -1,7 +1,7 @@ using System; using Robust.Shared.Serialization; -namespace Content.Shared.GameObjects.Components.Triggers +namespace Content.Shared.GameObjects.Components.Trigger { [NetSerializable] [Serializable] diff --git a/Content.Shared/GameObjects/Components/Weapons/Ranged/SharedRangedBarrelComponent.cs b/Content.Shared/GameObjects/Components/Weapons/Ranged/SharedRangedBarrelComponent.cs index bbda3adeb6..5130abf347 100644 --- a/Content.Shared/GameObjects/Components/Weapons/Ranged/SharedRangedBarrelComponent.cs +++ b/Content.Shared/GameObjects/Components/Weapons/Ranged/SharedRangedBarrelComponent.cs @@ -1,6 +1,5 @@ using System; using Robust.Shared.GameObjects; -using Robust.Shared.Serialization; namespace Content.Shared.GameObjects.Components.Weapons.Ranged { diff --git a/Content.Shared/GameObjects/DrawDepth.cs b/Content.Shared/GameObjects/DrawDepth.cs index 5d9524ea3d..9f445d2e48 100644 --- a/Content.Shared/GameObjects/DrawDepth.cs +++ b/Content.Shared/GameObjects/DrawDepth.cs @@ -1,5 +1,5 @@ -using DrawDepthTag = Robust.Shared.GameObjects.DrawDepth; using Robust.Shared.Serialization; +using DrawDepthTag = Robust.Shared.GameObjects.DrawDepth; namespace Content.Shared.GameObjects { diff --git a/Content.Shared/GameObjects/EntitySystemMessages/VerbSystemMessages.cs b/Content.Shared/GameObjects/EntitySystemMessages/VerbSystemMessages.cs index 3c22097848..89e53b7db5 100644 --- a/Content.Shared/GameObjects/EntitySystemMessages/VerbSystemMessages.cs +++ b/Content.Shared/GameObjects/EntitySystemMessages/VerbSystemMessages.cs @@ -1,5 +1,5 @@ using System; -using System.Collections.Generic; +using Content.Shared.GameObjects.Verbs; using Robust.Shared.GameObjects; using Robust.Shared.Serialization; using Robust.Shared.Utility; diff --git a/Content.Shared/GameObjects/EntitySystems/ExamineSystemShared.cs b/Content.Shared/GameObjects/EntitySystems/ExamineSystemShared.cs index 10aba7551f..0e09c98af2 100644 --- a/Content.Shared/GameObjects/EntitySystems/ExamineSystemShared.cs +++ b/Content.Shared/GameObjects/EntitySystems/ExamineSystemShared.cs @@ -40,7 +40,7 @@ namespace Content.Shared.GameObjects.EntitySystems return false; } - return EntitySystem.Get() + return Get() .InRangeUnobstructed(examiner.Transform.MapPosition, examined.Transform.MapPosition, ExamineRange, predicate: entity => entity == examiner || entity == examined, ignoreInsideBlocker:true); } diff --git a/Content.Shared/GameObjects/EntitySystems/SharedCombatModeSystem.cs b/Content.Shared/GameObjects/EntitySystems/SharedCombatModeSystem.cs index 53833a14d0..0c17b7c518 100644 --- a/Content.Shared/GameObjects/EntitySystems/SharedCombatModeSystem.cs +++ b/Content.Shared/GameObjects/EntitySystems/SharedCombatModeSystem.cs @@ -1,12 +1,7 @@ using Content.Shared.GameObjects.Components.Mobs; using Content.Shared.GameObjects.EntitySystemMessages; -using Content.Shared.Interfaces; using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Systems; -using Robust.Shared.Interfaces.Random; -using Robust.Shared.IoC; -using Robust.Shared.Random; -using Logger = Robust.Shared.Log.Logger; namespace Content.Shared.GameObjects.EntitySystems { diff --git a/Content.Shared/GameObjects/EntitySystems/SharedConstructionSystem.cs b/Content.Shared/GameObjects/EntitySystems/SharedConstructionSystem.cs index 1a3ddb7f6e..eb046d4902 100644 --- a/Content.Shared/GameObjects/EntitySystems/SharedConstructionSystem.cs +++ b/Content.Shared/GameObjects/EntitySystems/SharedConstructionSystem.cs @@ -1,6 +1,5 @@ using System; using Content.Shared.Construction; -using JetBrains.Annotations; using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Systems; using Robust.Shared.IoC; diff --git a/Content.Shared/GameObjects/EntitySystems/SharedGasTileOverlaySystem.cs b/Content.Shared/GameObjects/EntitySystems/SharedGasTileOverlaySystem.cs index 111f81f10d..346f44d733 100644 --- a/Content.Shared/GameObjects/EntitySystems/SharedGasTileOverlaySystem.cs +++ b/Content.Shared/GameObjects/EntitySystems/SharedGasTileOverlaySystem.cs @@ -2,7 +2,6 @@ using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Systems; using Robust.Shared.Map; -using Robust.Shared.Maths; using Robust.Shared.Serialization; namespace Content.Shared.GameObjects.EntitySystems diff --git a/Content.Shared/GameObjects/Verbs/GlobalVerb.cs b/Content.Shared/GameObjects/Verbs/GlobalVerb.cs index e1b55f14a5..ad5ebed628 100644 --- a/Content.Shared/GameObjects/Verbs/GlobalVerb.cs +++ b/Content.Shared/GameObjects/Verbs/GlobalVerb.cs @@ -2,7 +2,7 @@ using JetBrains.Annotations; using Robust.Shared.Interfaces.GameObjects; -namespace Content.Shared.GameObjects +namespace Content.Shared.GameObjects.Verbs { /// /// A verb is an action in the right click menu of an entity. diff --git a/Content.Shared/GameObjects/Verbs/Verb.cs b/Content.Shared/GameObjects/Verbs/Verb.cs index a2381082c4..b4b1f27751 100644 --- a/Content.Shared/GameObjects/Verbs/Verb.cs +++ b/Content.Shared/GameObjects/Verbs/Verb.cs @@ -2,7 +2,7 @@ using JetBrains.Annotations; using Robust.Shared.Interfaces.GameObjects; -namespace Content.Shared.GameObjects +namespace Content.Shared.GameObjects.Verbs { /// /// A verb is an action in the right click menu of an entity. @@ -48,7 +48,7 @@ namespace Content.Shared.GameObjects /// /// - /// Sub class of that works on a specific type of component, + /// Sub class of that works on a specific type of component, /// to reduce casting boiler plate for implementations. /// /// The type of component that this verb will run on. diff --git a/Content.Shared/GameObjects/Verbs/VerbCategories.cs b/Content.Shared/GameObjects/Verbs/VerbCategories.cs index bd5c168eaa..4311a7366b 100644 --- a/Content.Shared/GameObjects/Verbs/VerbCategories.cs +++ b/Content.Shared/GameObjects/Verbs/VerbCategories.cs @@ -1,4 +1,4 @@ -namespace Content.Shared.GameObjects +namespace Content.Shared.GameObjects.Verbs { /// /// Standard verb categories. diff --git a/Content.Shared/GameObjects/Verbs/VerbCategoryData.cs b/Content.Shared/GameObjects/Verbs/VerbCategoryData.cs index 4e19f04047..ad555cd447 100644 --- a/Content.Shared/GameObjects/Verbs/VerbCategoryData.cs +++ b/Content.Shared/GameObjects/Verbs/VerbCategoryData.cs @@ -1,6 +1,6 @@ using Robust.Shared.Utility; -namespace Content.Shared.GameObjects +namespace Content.Shared.GameObjects.Verbs { /// /// Contains combined name and icon information for a verb category. diff --git a/Content.Shared/GameObjects/Verbs/VerbData.cs b/Content.Shared/GameObjects/Verbs/VerbData.cs index eeed3981b4..94f72e72f3 100644 --- a/Content.Shared/GameObjects/Verbs/VerbData.cs +++ b/Content.Shared/GameObjects/Verbs/VerbData.cs @@ -2,7 +2,7 @@ using JetBrains.Annotations; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Utility; -namespace Content.Shared.GameObjects +namespace Content.Shared.GameObjects.Verbs { /// /// Stores visual data for a verb. diff --git a/Content.Shared/GameObjects/Verbs/VerbUtility.cs b/Content.Shared/GameObjects/Verbs/VerbUtility.cs index 2c46838320..275a00330f 100644 --- a/Content.Shared/GameObjects/Verbs/VerbUtility.cs +++ b/Content.Shared/GameObjects/Verbs/VerbUtility.cs @@ -4,7 +4,7 @@ using System.Reflection; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Utility; -namespace Content.Shared.GameObjects +namespace Content.Shared.GameObjects.Verbs { public static class VerbUtility { diff --git a/Content.Shared/GameObjects/Verbs/VerbVisibility.cs b/Content.Shared/GameObjects/Verbs/VerbVisibility.cs index 05fcaa218b..dde0621f78 100644 --- a/Content.Shared/GameObjects/Verbs/VerbVisibility.cs +++ b/Content.Shared/GameObjects/Verbs/VerbVisibility.cs @@ -1,4 +1,4 @@ -namespace Content.Shared.GameObjects +namespace Content.Shared.GameObjects.Verbs { /// /// Possible states of visibility for the verb in the right click menu. diff --git a/Content.Shared/Health/BodySystem/BodyPart/BodyPartProperties/ArmLength.cs b/Content.Shared/Health/BodySystem/BodyPart/BodyPartProperties/ArmLength.cs index 5ae478412c..617bd45050 100644 --- a/Content.Shared/Health/BodySystem/BodyPart/BodyPartProperties/ArmLength.cs +++ b/Content.Shared/Health/BodySystem/BodyPart/BodyPartProperties/ArmLength.cs @@ -1,15 +1,13 @@ - - +using System; using Robust.Shared.Interfaces.Serialization; using Robust.Shared.Serialization; -using System; -namespace Content.Shared.BodySystem { +namespace Content.Shared.Health.BodySystem.BodyPart.BodyPartProperties { [NetSerializable, Serializable] class ArmLength : IExposeData { private float _length; - + public void ExposeData(ObjectSerializer serializer){ serializer.DataField(ref _length, "length", 2f); } diff --git a/Content.Shared/Health/BodySystem/BodyPart/BodyPartPrototype.cs b/Content.Shared/Health/BodySystem/BodyPart/BodyPartPrototype.cs index 4edc6a1d8d..d400501f6d 100644 --- a/Content.Shared/Health/BodySystem/BodyPart/BodyPartPrototype.cs +++ b/Content.Shared/Health/BodySystem/BodyPart/BodyPartPrototype.cs @@ -6,13 +6,12 @@ using Robust.Shared.Serialization; using Robust.Shared.ViewVariables; using YamlDotNet.RepresentationModel; - -namespace Content.Shared.BodySystem { +namespace Content.Shared.Health.BodySystem.BodyPart { /// /// Prototype for the BodyPart class. - /// + /// [Prototype("bodyPart")] [NetSerializable, Serializable] public class BodyPartPrototype : IPrototype, IIndexedPrototype { @@ -36,7 +35,7 @@ namespace Content.Shared.BodySystem { [ViewVariables] public string Name => _name; - + [ViewVariables] public string Plural => _plural; @@ -48,19 +47,19 @@ namespace Content.Shared.BodySystem { [ViewVariables] public BodyPartType PartType => _partType; - + [ViewVariables] public int Durability => _durability; - + [ViewVariables] - public int DestroyThreshold => _destroyThreshold; - + public int DestroyThreshold => _destroyThreshold; + [ViewVariables] public float Resistance => _resistance; - + [ViewVariables] public int Size => _size; - + [ViewVariables] public BodyPartCompatibility Compatibility => _compatibility; diff --git a/Content.Shared/Health/BodySystem/BodyPreset/BodyPresetPrototype.cs b/Content.Shared/Health/BodySystem/BodyPreset/BodyPresetPrototype.cs index 7020bdf84c..f36202a5a4 100644 --- a/Content.Shared/Health/BodySystem/BodyPreset/BodyPresetPrototype.cs +++ b/Content.Shared/Health/BodySystem/BodyPreset/BodyPresetPrototype.cs @@ -1,16 +1,15 @@ using System; using System.Collections.Generic; -using Robust.Shared.Interfaces.Serialization; using Robust.Shared.Prototypes; using Robust.Shared.Serialization; using Robust.Shared.ViewVariables; using YamlDotNet.RepresentationModel; -namespace Content.Shared.BodySystem { +namespace Content.Shared.Health.BodySystem.BodyPreset { /// /// Prototype for the BodyPreset class. - /// + /// [Prototype("bodyPreset")] [NetSerializable, Serializable] public class BodyPresetPrototype : IPrototype, IIndexedPrototype { @@ -23,7 +22,7 @@ namespace Content.Shared.BodySystem { [ViewVariables] public string Name => _name; - + [ViewVariables] public Dictionary PartIDs => _partIDs; diff --git a/Content.Shared/Health/BodySystem/BodyScanner/BodyScannerSharedValues.cs b/Content.Shared/Health/BodySystem/BodyScanner/BodyScannerSharedValues.cs index ef4611b5d9..0f9f83cf6c 100644 --- a/Content.Shared/Health/BodySystem/BodyScanner/BodyScannerSharedValues.cs +++ b/Content.Shared/Health/BodySystem/BodyScanner/BodyScannerSharedValues.cs @@ -1,17 +1,9 @@ -using Robust.Shared.GameObjects; -using Robust.Shared.GameObjects.Components.UserInterface; -using Robust.Shared.IoC; -using Robust.Shared.Prototypes; -using Robust.Shared.Serialization; -using System; +using System; using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; +using Robust.Shared.GameObjects.Components.UserInterface; +using Robust.Shared.Serialization; - - -namespace Content.Shared.BodySystem +namespace Content.Shared.Health.BodySystem.BodyScanner { diff --git a/Content.Shared/Health/BodySystem/BodyTemplate/BodyTemplatePrototype.cs b/Content.Shared/Health/BodySystem/BodyTemplate/BodyTemplatePrototype.cs index 11f7ad93f3..50ac37c065 100644 --- a/Content.Shared/Health/BodySystem/BodyTemplate/BodyTemplatePrototype.cs +++ b/Content.Shared/Health/BodySystem/BodyTemplate/BodyTemplatePrototype.cs @@ -1,16 +1,15 @@ using System; using System.Collections.Generic; -using Robust.Shared.Interfaces.Serialization; using Robust.Shared.Prototypes; using Robust.Shared.Serialization; using Robust.Shared.ViewVariables; using YamlDotNet.RepresentationModel; -namespace Content.Shared.BodySystem { +namespace Content.Shared.Health.BodySystem.BodyTemplate { /// /// Prototype for the BodyTemplate class. - /// + /// [Prototype("bodyTemplate")] [NetSerializable, Serializable] public class BodyTemplatePrototype : IPrototype, IIndexedPrototype { @@ -25,13 +24,13 @@ namespace Content.Shared.BodySystem { [ViewVariables] public string Name => _name; - + [ViewVariables] public string CenterSlot => _centerSlot; - + [ViewVariables] public Dictionary Slots => _slots; - + [ViewVariables] public Dictionary> Connections => _connections; diff --git a/Content.Shared/Health/BodySystem/BodysystemValues.cs b/Content.Shared/Health/BodySystem/BodysystemValues.cs index cb36135680..ce16122f8d 100644 --- a/Content.Shared/Health/BodySystem/BodysystemValues.cs +++ b/Content.Shared/Health/BodySystem/BodysystemValues.cs @@ -1,5 +1,5 @@  -namespace Content.Shared.BodySystem +namespace Content.Shared.Health.BodySystem { /// /// Used to determine whether a BodyPart can connect to another BodyPart. diff --git a/Content.Shared/Health/BodySystem/Mechanism/MechanismPrototype.cs b/Content.Shared/Health/BodySystem/Mechanism/MechanismPrototype.cs index aa9f2f0062..3a37046b20 100644 --- a/Content.Shared/Health/BodySystem/Mechanism/MechanismPrototype.cs +++ b/Content.Shared/Health/BodySystem/Mechanism/MechanismPrototype.cs @@ -1,19 +1,15 @@ using System; -using System.Collections.Generic; using Robust.Shared.Prototypes; using Robust.Shared.Serialization; using Robust.Shared.ViewVariables; using YamlDotNet.RepresentationModel; - - - -namespace Content.Shared.BodySystem +namespace Content.Shared.Health.BodySystem.Mechanism { /// /// Prototype for the Mechanism class. - /// + /// [Prototype("mechanism")] [NetSerializable, Serializable] public class MechanismPrototype : IPrototype, IIndexedPrototype diff --git a/Content.Shared/Health/BodySystem/Surgery/GenericSurgeryUIMessages.cs b/Content.Shared/Health/BodySystem/Surgery/GenericSurgeryUIMessages.cs index c1657e4ac1..eee26afde0 100644 --- a/Content.Shared/Health/BodySystem/Surgery/GenericSurgeryUIMessages.cs +++ b/Content.Shared/Health/BodySystem/Surgery/GenericSurgeryUIMessages.cs @@ -1,11 +1,9 @@ -using Robust.Shared.GameObjects; +using System; +using System.Collections.Generic; using Robust.Shared.GameObjects.Components.UserInterface; using Robust.Shared.Serialization; -using System; -using System.Collections.Generic; -using System.Text; -namespace Content.Shared.BodySystem +namespace Content.Shared.Health.BodySystem.Surgery { [Serializable, NetSerializable] diff --git a/Content.Shared/Health/DamageContainer/AbstractDamageContainer.cs b/Content.Shared/Health/DamageContainer/AbstractDamageContainer.cs index 80b258e284..fb146adf46 100644 --- a/Content.Shared/Health/DamageContainer/AbstractDamageContainer.cs +++ b/Content.Shared/Health/DamageContainer/AbstractDamageContainer.cs @@ -1,10 +1,10 @@ -using Robust.Shared.Serialization; -using Robust.Shared.ViewVariables; -using System; +using System; using System.Collections.Generic; using System.Linq; +using Robust.Shared.Serialization; +using Robust.Shared.ViewVariables; -namespace Content.Shared.BodySystem +namespace Content.Shared.Health.DamageContainer { public enum DamageClass { Brute, Burn, Toxin, Airloss } public enum DamageType { Blunt, Piercing, Heat, Disintegration, Cellular, DNA, Airloss } diff --git a/Content.Shared/Health/DamageContainer/BiologicalDamageContainer.cs b/Content.Shared/Health/DamageContainer/BiologicalDamageContainer.cs index 04741abb22..e2b26b04e5 100644 --- a/Content.Shared/Health/DamageContainer/BiologicalDamageContainer.cs +++ b/Content.Shared/Health/DamageContainer/BiologicalDamageContainer.cs @@ -1,9 +1,8 @@ -using Robust.Shared.Serialization; -using System; +using System; using System.Collections.Generic; -using System.Linq; +using Robust.Shared.Serialization; -namespace Content.Shared.BodySystem +namespace Content.Shared.Health.DamageContainer { [NetSerializable, Serializable] public class BiologicalDamageContainer : AbstractDamageContainer diff --git a/Content.Shared/Interfaces/Chemistry/IMetabolizable.cs b/Content.Shared/Interfaces/Chemistry/IMetabolizable.cs index 1973012d52..3cb72d5a9d 100644 --- a/Content.Shared/Interfaces/Chemistry/IMetabolizable.cs +++ b/Content.Shared/Interfaces/Chemistry/IMetabolizable.cs @@ -1,5 +1,4 @@ -using System.Collections.Generic; -using Content.Shared.Chemistry; +using Content.Shared.Chemistry; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Interfaces.Serialization; diff --git a/Content.Shared/Interfaces/IModuleManager.cs b/Content.Shared/Interfaces/IModuleManager.cs index f6e4ecc222..420c15dde0 100644 --- a/Content.Shared/Interfaces/IModuleManager.cs +++ b/Content.Shared/Interfaces/IModuleManager.cs @@ -1,10 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace Content.Shared.Interfaces +namespace Content.Shared.Interfaces { /// /// Provides a simple way to check whether calling code is being run by diff --git a/Content.Shared/Kitchen/RecipeManager.cs b/Content.Shared/Kitchen/RecipeManager.cs index c731d8994f..c5f7657a69 100644 --- a/Content.Shared/Kitchen/RecipeManager.cs +++ b/Content.Shared/Kitchen/RecipeManager.cs @@ -1,5 +1,4 @@ -using System; -using System.Collections.Generic; +using System.Collections.Generic; using Content.Shared.Prototypes.Kitchen; using Robust.Shared.IoC; using Robust.Shared.Prototypes; diff --git a/Content.Shared/Kitchen/SharedMicrowaveComponent.cs b/Content.Shared/Kitchen/SharedMicrowaveComponent.cs index ba8ae5c499..92e6e9324d 100644 --- a/Content.Shared/Kitchen/SharedMicrowaveComponent.cs +++ b/Content.Shared/Kitchen/SharedMicrowaveComponent.cs @@ -1,10 +1,9 @@ using System; -using System.Collections.Generic; using Content.Shared.Chemistry; using Content.Shared.GameObjects; using Robust.Shared.GameObjects; -using Robust.Shared.Serialization; using Robust.Shared.GameObjects.Components.UserInterface; +using Robust.Shared.Serialization; namespace Content.Shared.Kitchen { diff --git a/Content.Shared/Maps/ContentTileDefinition.cs b/Content.Shared/Maps/ContentTileDefinition.cs index c00e62fa87..1cf66f57eb 100644 --- a/Content.Shared/Maps/ContentTileDefinition.cs +++ b/Content.Shared/Maps/ContentTileDefinition.cs @@ -1,13 +1,10 @@ -using System; -using System.Collections.Generic; +using System.Collections.Generic; using System.Linq; using JetBrains.Annotations; using Robust.Shared.Interfaces.Map; using Robust.Shared.Prototypes; using Robust.Shared.Utility; using YamlDotNet.RepresentationModel; -using Robust.Shared.GameObjects; -using Robust.Shared.Serialization; namespace Content.Shared.Maps { diff --git a/Content.Shared/Physics/CollisionGroup.cs b/Content.Shared/Physics/CollisionGroup.cs index 688d4e7e0c..8ef86b5a6f 100644 --- a/Content.Shared/Physics/CollisionGroup.cs +++ b/Content.Shared/Physics/CollisionGroup.cs @@ -1,8 +1,8 @@ using System; using JetBrains.Annotations; using Robust.Shared.Map; -using RobustPhysics = Robust.Shared.Physics; using Robust.Shared.Serialization; +using RobustPhysics = Robust.Shared.Physics; namespace Content.Shared.Physics { diff --git a/Content.Shared/Physics/VaporController.cs b/Content.Shared/Physics/VaporController.cs index 190dd62b54..55a2f9d827 100644 --- a/Content.Shared/Physics/VaporController.cs +++ b/Content.Shared/Physics/VaporController.cs @@ -1,8 +1,5 @@ using Robust.Shared.Maths; using Robust.Shared.Physics; -using System; -using System.Collections.Generic; -using System.Text; namespace Content.Shared.Physics { diff --git a/Content.Shared/Preferences/HumanoidCharacterProfile.cs b/Content.Shared/Preferences/HumanoidCharacterProfile.cs index db068e358d..58633d2a2a 100644 --- a/Content.Shared/Preferences/HumanoidCharacterProfile.cs +++ b/Content.Shared/Preferences/HumanoidCharacterProfile.cs @@ -1,9 +1,6 @@ using System; using System.Collections.Generic; using System.Linq; -using Content.Shared.Antags; -using Robust.Shared.IoC; -using Robust.Shared.Prototypes; using Robust.Shared.Serialization; namespace Content.Shared.Preferences diff --git a/Content.Shared/Prototypes/Cargo/CargoOrderData.cs b/Content.Shared/Prototypes/Cargo/CargoOrderData.cs index 0882db8e0d..171ec99bd4 100644 --- a/Content.Shared/Prototypes/Cargo/CargoOrderData.cs +++ b/Content.Shared/Prototypes/Cargo/CargoOrderData.cs @@ -1,9 +1,5 @@ -using Robust.Shared.Serialization; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; +using System; +using Robust.Shared.Serialization; namespace Content.Shared.Prototypes.Cargo { diff --git a/Content.Shared/Prototypes/Cargo/CargoProductPrototype.cs b/Content.Shared/Prototypes/Cargo/CargoProductPrototype.cs index 57b1aedc76..3cfc1497f5 100644 --- a/Content.Shared/Prototypes/Cargo/CargoProductPrototype.cs +++ b/Content.Shared/Prototypes/Cargo/CargoProductPrototype.cs @@ -1,10 +1,10 @@ -using Robust.Shared.GameObjects; +using System; +using Robust.Shared.GameObjects; using Robust.Shared.IoC; using Robust.Shared.Prototypes; using Robust.Shared.Serialization; using Robust.Shared.Utility; using Robust.Shared.ViewVariables; -using System; using YamlDotNet.RepresentationModel; namespace Content.Shared.Prototypes.Cargo diff --git a/Content.Shared/Prototypes/Kitchen/MicrowaveMealRecipePrototype.cs b/Content.Shared/Prototypes/Kitchen/MicrowaveMealRecipePrototype.cs index 0d64a7d073..d0c6d44357 100644 --- a/Content.Shared/Prototypes/Kitchen/MicrowaveMealRecipePrototype.cs +++ b/Content.Shared/Prototypes/Kitchen/MicrowaveMealRecipePrototype.cs @@ -1,10 +1,7 @@ -using System; -using System.Collections.Generic; -using System.Linq; +using System.Collections.Generic; using Robust.Shared.Localization; using Robust.Shared.Prototypes; using Robust.Shared.Serialization; -using Robust.Shared.Utility; using YamlDotNet.RepresentationModel; namespace Content.Shared.Prototypes.Kitchen diff --git a/Content.Shared/Prototypes/PDA/UplinkStoreListingPrototype.cs b/Content.Shared/Prototypes/PDA/UplinkStoreListingPrototype.cs index a4af3f9540..a00d5ff666 100644 --- a/Content.Shared/Prototypes/PDA/UplinkStoreListingPrototype.cs +++ b/Content.Shared/Prototypes/PDA/UplinkStoreListingPrototype.cs @@ -1,5 +1,4 @@ using Content.Shared.GameObjects.Components.PDA; -using Robust.Shared.Maths; using Robust.Shared.Prototypes; using Robust.Shared.Serialization; using YamlDotNet.RepresentationModel; diff --git a/Content.Shared/Roles/AntagPrototype.cs b/Content.Shared/Roles/AntagPrototype.cs index a253d13a1a..caa0776fca 100644 --- a/Content.Shared/Roles/AntagPrototype.cs +++ b/Content.Shared/Roles/AntagPrototype.cs @@ -1,12 +1,9 @@ -using System; -using System.Collections.Generic; -using System.Linq; using Robust.Shared.Localization; using Robust.Shared.Prototypes; using Robust.Shared.Utility; using YamlDotNet.RepresentationModel; -namespace Content.Shared.Antags +namespace Content.Shared.Roles { /// /// Describes information for a single antag. diff --git a/Content.Shared/Roles/JobPrototype.cs b/Content.Shared/Roles/JobPrototype.cs index 298a33530a..63aea01f21 100644 --- a/Content.Shared/Roles/JobPrototype.cs +++ b/Content.Shared/Roles/JobPrototype.cs @@ -1,12 +1,11 @@ using System; using System.Collections.Generic; -using Content.Server.Jobs; using Robust.Shared.Localization; using Robust.Shared.Prototypes; using Robust.Shared.Serialization; using YamlDotNet.RepresentationModel; -namespace Content.Shared.Jobs +namespace Content.Shared.Roles { /// /// Describes information for a single job on the station. diff --git a/Content.Shared/Roles/JobSpecial.cs b/Content.Shared/Roles/JobSpecial.cs index 6b77fa5400..edc3f091de 100644 --- a/Content.Shared/Roles/JobSpecial.cs +++ b/Content.Shared/Roles/JobSpecial.cs @@ -2,7 +2,7 @@ using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Interfaces.Serialization; using Robust.Shared.Serialization; -namespace Content.Server.Jobs +namespace Content.Shared.Roles { /// /// Provides special hooks for when jobs get spawned in/equipped. diff --git a/Content.Shared/Roles/StartingGearPrototype.cs b/Content.Shared/Roles/StartingGearPrototype.cs index 154e0dbe3e..e8213cea74 100644 --- a/Content.Shared/Roles/StartingGearPrototype.cs +++ b/Content.Shared/Roles/StartingGearPrototype.cs @@ -7,7 +7,7 @@ using Robust.Shared.ViewVariables; using YamlDotNet.RepresentationModel; using static Content.Shared.GameObjects.Components.Inventory.EquipmentSlotDefines; -namespace Content.Shared.Jobs +namespace Content.Shared.Roles { [Prototype("startingGear")] public class StartingGearPrototype : IPrototype, IIndexedPrototype diff --git a/Content.Shared/SharedGameTicker.cs b/Content.Shared/SharedGameTicker.cs index 2fea6dd16b..cd16b79191 100644 --- a/Content.Shared/SharedGameTicker.cs +++ b/Content.Shared/SharedGameTicker.cs @@ -1,7 +1,6 @@ using System; using System.Collections.Generic; using Lidgren.Network; -using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Interfaces.Network; using Robust.Shared.Network; diff --git a/Content.Shared/Utility/TemperatureHelpers.cs b/Content.Shared/Utility/TemperatureHelpers.cs index 529c8d6746..1d4e61ca48 100644 --- a/Content.Shared/Utility/TemperatureHelpers.cs +++ b/Content.Shared/Utility/TemperatureHelpers.cs @@ -1,7 +1,4 @@ using Content.Shared.Maths; -using System; -using System.Collections.Generic; -using System.Text; namespace Content.Shared.Utility { diff --git a/Content.Tests/Shared/BodyTemplateTest.cs b/Content.Tests/Shared/BodyTemplateTest.cs index bb246529dd..87b3455989 100644 --- a/Content.Tests/Shared/BodyTemplateTest.cs +++ b/Content.Tests/Shared/BodyTemplateTest.cs @@ -1,10 +1,8 @@ - -using Content.Server.BodySystem; -using Content.Shared.BodySystem; +using System.Collections.Generic; +using Content.Server.Health.BodySystem.BodyTemplate; +using Content.Shared.Health.BodySystem; using NUnit.Framework; using Robust.UnitTesting; -using System; -using System.Collections.Generic; namespace Content.Tests.Shared { diff --git a/Content.Tests/Shared/Chemistry/ReagentUnit_Tests.cs b/Content.Tests/Shared/Chemistry/ReagentUnit_Tests.cs index e06290fb54..8e6e6ab591 100644 --- a/Content.Tests/Shared/Chemistry/ReagentUnit_Tests.cs +++ b/Content.Tests/Shared/Chemistry/ReagentUnit_Tests.cs @@ -1,6 +1,6 @@ -using Content.Shared.Chemistry; +using System; +using Content.Shared.Chemistry; using NUnit.Framework; -using System; namespace Content.Tests.Shared.Chemistry { diff --git a/Content.Tests/Shared/Gamestates/ComponentStateNullTest.cs b/Content.Tests/Shared/Gamestates/ComponentStateNullTest.cs index 5bf4709ff5..93bfa94513 100644 --- a/Content.Tests/Shared/Gamestates/ComponentStateNullTest.cs +++ b/Content.Tests/Shared/Gamestates/ComponentStateNullTest.cs @@ -8,7 +8,7 @@ using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Interfaces.Reflection; using Robust.Shared.Reflection; -namespace Content.Tests.Shared.GameStates +namespace Content.Tests.Shared.Gamestates { [TestFixture] public class ComponentStateNullTest From 83a7dfebef99b57b400836a8ac1218ff81676e64 Mon Sep 17 00:00:00 2001 From: ike709 Date: Thu, 13 Aug 2020 12:39:23 -0500 Subject: [PATCH 13/48] Improves the RCD (#1609) * Improves the RCD * oops * Unnecessary * Merge 2 checks * RCD whitelist and reorganization * Makes the RCD great again * Ignored components * loicense * Fix missing using --- Content.Client/IgnoredComponents.cs | 2 + .../Components/Items/RCD/RCDAmmoComponent.cs | 61 +++++ .../Components/Items/RCD/RCDComponent.cs | 241 ++++++++++++++++++ .../RCD/RCDDeconstructWhitelistComponent.cs | 10 + .../Components/Items/RCDComponent.cs | 150 ----------- Content.Shared/Maps/TurfHelpers.cs | 6 +- .../Constructible/Doors/airlock_base.yml | 1 + .../Entities/Constructible/Walls/low_wall.yml | 1 + .../Entities/Constructible/Walls/walls.yml | 1 + .../Entities/Constructible/Walls/windows.yml | 1 + .../Entities/Objects/Tools/tools.yml | 16 +- .../Textures/Objects/Tools/rcd.rsi/meta.json | 65 ++++- .../Textures/Objects/Tools/rcd.rsi/rcd.png | Bin 317 -> 638 bytes .../Objects/Tools/rcd.rsi/rcd_ammo.png | Bin 0 -> 331 bytes 14 files changed, 400 insertions(+), 155 deletions(-) create mode 100644 Content.Server/GameObjects/Components/Items/RCD/RCDAmmoComponent.cs create mode 100644 Content.Server/GameObjects/Components/Items/RCD/RCDComponent.cs create mode 100644 Content.Server/GameObjects/Components/Items/RCD/RCDDeconstructWhitelistComponent.cs delete mode 100644 Content.Server/GameObjects/Components/Items/RCDComponent.cs create mode 100644 Resources/Textures/Objects/Tools/rcd.rsi/rcd_ammo.png diff --git a/Content.Client/IgnoredComponents.cs b/Content.Client/IgnoredComponents.cs index c0915caf7b..5169e4a189 100644 --- a/Content.Client/IgnoredComponents.cs +++ b/Content.Client/IgnoredComponents.cs @@ -136,6 +136,8 @@ "TrashSpawner", "Pill", "RCD", + "RCDDeconstructWhitelist", + "RCDAmmo", "Pullable", "CursedEntityStorage", "Listening", diff --git a/Content.Server/GameObjects/Components/Items/RCD/RCDAmmoComponent.cs b/Content.Server/GameObjects/Components/Items/RCD/RCDAmmoComponent.cs new file mode 100644 index 0000000000..16d2e5557e --- /dev/null +++ b/Content.Server/GameObjects/Components/Items/RCD/RCDAmmoComponent.cs @@ -0,0 +1,61 @@ +using System; +using Content.Server.Interfaces; +using Content.Server.Interfaces.GameObjects.Components.Items; +using Content.Shared.GameObjects.EntitySystems; +using Content.Shared.Interfaces.GameObjects.Components; +using Robust.Shared.GameObjects; +using Robust.Shared.IoC; +using Robust.Shared.Localization; +using Robust.Shared.Serialization; +using Robust.Shared.Utility; +using Robust.Shared.ViewVariables; + +namespace Content.Server.GameObjects.Components.Items.RCD +{ + [RegisterComponent] + public class RCDAmmoComponent : Component, IAfterInteract, IExamine + { + +#pragma warning disable 649 + [Dependency] private IServerNotifyManager _serverNotifyManager; +#pragma warning restore 649 + public override string Name => "RCDAmmo"; + + //How much ammo we refill + [ViewVariables(VVAccess.ReadWrite)] private int refillAmmo = 5; + + public override void ExposeData(ObjectSerializer serializer) + { + base.ExposeData(serializer); + + serializer.DataField(ref refillAmmo, "refillAmmo", 5); + } + + public void Examine(FormattedMessage message, bool inDetailsRange) + { + message.AddMarkup(Loc.GetString("It holds {0} charges.", refillAmmo)); + } + + void IAfterInteract.AfterInteract(AfterInteractEventArgs eventArgs) + { + if (eventArgs.Target == null || !eventArgs.Target.TryGetComponent(out RCDComponent rcdComponent) || !eventArgs.User.TryGetComponent(out IHandsComponent hands)) + { + return; + } + + if (rcdComponent.maxAmmo - rcdComponent._ammo < refillAmmo) + { + _serverNotifyManager.PopupMessage(rcdComponent.Owner, eventArgs.User, "The RCD is full!"); + return; + } + + rcdComponent._ammo = Math.Min(rcdComponent.maxAmmo, rcdComponent._ammo + refillAmmo); + _serverNotifyManager.PopupMessage(rcdComponent.Owner, eventArgs.User, "You refill the RCD."); + + //Deleting a held item causes a lot of errors + hands.Drop(Owner, false); + Owner.Delete(); + + } + } +} diff --git a/Content.Server/GameObjects/Components/Items/RCD/RCDComponent.cs b/Content.Server/GameObjects/Components/Items/RCD/RCDComponent.cs new file mode 100644 index 0000000000..d479c31d02 --- /dev/null +++ b/Content.Server/GameObjects/Components/Items/RCD/RCDComponent.cs @@ -0,0 +1,241 @@ +using System; +using System.Threading; +using Content.Server.GameObjects.EntitySystems.DoAfter; +using Content.Server.Interfaces; +using Content.Server.Utility; +using Content.Shared.GameObjects.EntitySystems; +using Content.Shared.Interfaces.GameObjects.Components; +using Content.Shared.Maps; +using Robust.Server.GameObjects.EntitySystems; +using Robust.Server.Interfaces.GameObjects; +using Robust.Shared.GameObjects; +using Robust.Shared.GameObjects.Components.Transform; +using Robust.Shared.GameObjects.Systems; +using Robust.Shared.Interfaces.GameObjects; +using Robust.Shared.Interfaces.Map; +using Robust.Shared.IoC; +using Robust.Shared.Localization; +using Robust.Shared.Map; +using Robust.Shared.Serialization; +using Robust.Shared.Utility; +using Robust.Shared.ViewVariables; + +namespace Content.Server.GameObjects.Components.Items.RCD +{ + [RegisterComponent] + public class RCDComponent : Component, IAfterInteract, IUse, IExamine + { + +#pragma warning disable 649 + [Dependency] private readonly ITileDefinitionManager _tileDefinitionManager; + [Dependency] private readonly IEntitySystemManager _entitySystemManager; + [Dependency] private readonly IMapManager _mapManager; + [Dependency] private readonly IServerEntityManager _serverEntityManager; + [Dependency] private IServerNotifyManager _serverNotifyManager; +#pragma warning restore 649 + public override string Name => "RCD"; + private RcdMode _mode = 0; //What mode are we on? Can be floors, walls, deconstruct. + private readonly RcdMode[] _modes = (RcdMode[]) Enum.GetValues(typeof(RcdMode)); + [ViewVariables(VVAccess.ReadWrite)] public int maxAmmo; + public int _ammo; //How much "ammo" we have left. You can refill this with RCD ammo. + [ViewVariables(VVAccess.ReadWrite)] private float _delay; + private DoAfterSystem doAfterSystem; + + + ///Enum to store the different mode states for clarity. + private enum RcdMode + { + Floors, + Walls, + Airlock, + Deconstruct + } + + public override void ExposeData(ObjectSerializer serializer) + { + base.ExposeData(serializer); + + serializer.DataField(ref maxAmmo, "maxAmmo", 5); + serializer.DataField(ref _delay, "delay", 2f); + } + + public override void Initialize() + { + base.Initialize(); + _ammo = maxAmmo; + doAfterSystem = EntitySystem.Get(); + } + + /// + /// Method called when the RCD is clicked in-hand, this will cycle the RCD mode. + /// + + public bool UseEntity(UseEntityEventArgs eventArgs) + { + SwapMode(eventArgs); + return true; + } + + /// + ///Method to allow the user to swap the mode of the RCD by clicking it in hand, the actual in hand clicking bit is done over on UseEntity() + ///@param UseEntityEventArgs = The entity which triggered this method call, used to know where to play the "click" sound. + /// + + public void SwapMode(UseEntityEventArgs eventArgs) + { + _entitySystemManager.GetEntitySystem().PlayFromEntity("/Audio/Items/genhit.ogg", Owner); + int mode = (int) _mode; //Firstly, cast our RCDmode mode to an int (enums are backed by ints anyway by default) + mode = (++mode) % _modes.Length; //Then, do a rollover on the value so it doesnt hit an invalid state + _mode = (RcdMode) mode; //Finally, cast the newly acquired int mode to an RCDmode so we can use it. + _serverNotifyManager.PopupMessage(Owner, eventArgs.User, $"The RCD is now set to {this._mode} mode."); //Prints an overhead message above the RCD + } + + public void Examine(FormattedMessage message, bool inDetailsRange) + { + message.AddMarkup(Loc.GetString("It's currently on {0} mode, and holds {1} charges.",_mode.ToString(), this._ammo)); + } + + public async void AfterInteract(AfterInteractEventArgs eventArgs) + { + //No changing mode mid-RCD + var startingMode = _mode; + + var mapGrid = _mapManager.GetGrid(eventArgs.ClickLocation.GridID); + var tile = mapGrid.GetTileRef(eventArgs.ClickLocation); + var snapPos = mapGrid.SnapGridCellFor(eventArgs.ClickLocation, SnapGridOffset.Center); + + //Using an RCD isn't instantaneous + var cancelToken = new CancellationTokenSource(); + var doAfterEventArgs = new DoAfterEventArgs(eventArgs.User, _delay, cancelToken.Token, eventArgs.Target) + { + BreakOnDamage = true, + BreakOnStun = true, + NeedHand = true, + ExtraCheck = () => IsRCDStillValid(eventArgs, mapGrid, tile, snapPos, startingMode) //All of the sanity checks are here + }; + + var result = await doAfterSystem.DoAfter(doAfterEventArgs); + if (result == DoAfterStatus.Cancelled) + { + return; + } + + switch (_mode) + { + //Floor mode just needs the tile to be a space tile (subFloor) + case RcdMode.Floors: + mapGrid.SetTile(eventArgs.ClickLocation, new Tile(_tileDefinitionManager["floor_steel"].TileId)); + break; + //We don't want to place a space tile on something that's already a space tile. Let's do the inverse of the last check. + case RcdMode.Deconstruct: + if (!tile.IsBlockedTurf(true)) //Delete the turf + { + mapGrid.SetTile(snapPos, Tile.Empty); + } + else //Delete what the user targeted + { + eventArgs.Target.Delete(); + } + break; + //Walls are a special behaviour, and require us to build a new object with a transform rather than setting a grid tile, thus we early return to avoid the tile set code. + case RcdMode.Walls: + var ent = _serverEntityManager.SpawnEntity("solid_wall", mapGrid.GridTileToLocal(snapPos)); + ent.Transform.LocalRotation = Owner.Transform.LocalRotation; //Now apply icon smoothing. + break; + case RcdMode.Airlock: + var airlock = _serverEntityManager.SpawnEntity("Airlock", mapGrid.GridTileToLocal(snapPos)); + airlock.Transform.LocalRotation = Owner.Transform.LocalRotation; //Now apply icon smoothing. + break; + default: + return; //I don't know why this would happen, but sure I guess. Get out of here invalid state! + } + + _entitySystemManager.GetEntitySystem().PlayFromEntity("/Audio/Items/deconstruct.ogg", Owner); + _ammo--; + + } + + private bool IsRCDStillValid(AfterInteractEventArgs eventArgs, IMapGrid mapGrid, TileRef tile, MapIndices snapPos, RcdMode startingMode) + { + //Less expensive checks first. Failing those ones, we need to check that the tile isn't obstructed. + if (_ammo <= 0) + { + _serverNotifyManager.PopupMessage(Owner, eventArgs.User, $"The RCD is out of ammo!"); + return false; + } + + if (_mode != startingMode) + { + return false; + } + + var coordinates = mapGrid.GridTileToLocal(tile.GridIndices); + if (coordinates == GridCoordinates.InvalidGrid || !InteractionChecks.InRangeUnobstructed(eventArgs)) + { + return false; + } + + switch (_mode) + { + //Floor mode just needs the tile to be a space tile (subFloor) + case RcdMode.Floors: + if (!tile.Tile.IsEmpty) + { + _serverNotifyManager.PopupMessage(Owner, eventArgs.User, $"You can only build a floor on space!"); + return false; + } + + return true; + //We don't want to place a space tile on something that's already a space tile. Let's do the inverse of the last check. + case RcdMode.Deconstruct: + if (tile.Tile.IsEmpty) + { + return false; + } + + //They tried to decon a turf but the turf is blocked + if (eventArgs.Target == null && tile.IsBlockedTurf(true)) + { + _serverNotifyManager.PopupMessage(Owner, eventArgs.User, $"That tile is obstructed!"); + return false; + } + //They tried to decon a non-turf but it's not in the whitelist + if (eventArgs.Target != null && !eventArgs.Target.TryGetComponent(out RCDDeconstructWhitelist rcd_decon)) + { + _serverNotifyManager.PopupMessage(Owner, eventArgs.User, $"You can't deconstruct that!"); + return false; + } + + return true; + //Walls are a special behaviour, and require us to build a new object with a transform rather than setting a grid tile, thus we early return to avoid the tile set code. + case RcdMode.Walls: + if (tile.Tile.IsEmpty) + { + _serverNotifyManager.PopupMessage(Owner, eventArgs.User, $"Cannot build a wall on space!"); + return false; + } + + if (tile.IsBlockedTurf(true)) + { + _serverNotifyManager.PopupMessage(Owner, eventArgs.User, $"That tile is obstructed!"); + return false; + } + return true; + case RcdMode.Airlock: + if (tile.Tile.IsEmpty) + { + _serverNotifyManager.PopupMessage(Owner, eventArgs.User, $"Cannot build an airlock on space!"); + return false; + } + if (tile.IsBlockedTurf(true)) + { + _serverNotifyManager.PopupMessage(Owner, eventArgs.User, $"That tile is obstructed!"); + return false; + } + return true; + default: + return false; //I don't know why this would happen, but sure I guess. Get out of here invalid state! + } + } + } +} diff --git a/Content.Server/GameObjects/Components/Items/RCD/RCDDeconstructWhitelistComponent.cs b/Content.Server/GameObjects/Components/Items/RCD/RCDDeconstructWhitelistComponent.cs new file mode 100644 index 0000000000..7fb18a45cd --- /dev/null +++ b/Content.Server/GameObjects/Components/Items/RCD/RCDDeconstructWhitelistComponent.cs @@ -0,0 +1,10 @@ +using Robust.Shared.GameObjects; + +namespace Content.Server.GameObjects.Components.Items.RCD +{ + [RegisterComponent] + public class RCDDeconstructWhitelist : Component + { + public override string Name => "RCDDeconstructWhitelist"; + } +} diff --git a/Content.Server/GameObjects/Components/Items/RCDComponent.cs b/Content.Server/GameObjects/Components/Items/RCDComponent.cs deleted file mode 100644 index 382360ccd4..0000000000 --- a/Content.Server/GameObjects/Components/Items/RCDComponent.cs +++ /dev/null @@ -1,150 +0,0 @@ -using System; -using Content.Server.Interfaces; -using Content.Server.Utility; -using Content.Shared.GameObjects.EntitySystems; -using Content.Shared.Interfaces.GameObjects.Components; -using Content.Shared.Maps; -using Robust.Server.GameObjects.EntitySystems; -using Robust.Server.Interfaces.GameObjects; -using Robust.Shared.GameObjects; -using Robust.Shared.GameObjects.Components.Transform; -using Robust.Shared.Interfaces.GameObjects; -using Robust.Shared.Interfaces.Map; -using Robust.Shared.IoC; -using Robust.Shared.Localization; -using Robust.Shared.Map; -using Robust.Shared.Serialization; -using Robust.Shared.Utility; - -namespace Content.Server.GameObjects.Components.Items -{ - [RegisterComponent] - public class RCDComponent : Component, IAfterInteract, IUse, IExamine - { - -#pragma warning disable 649 - [Dependency] private readonly ITileDefinitionManager _tileDefinitionManager; - [Dependency] private readonly IEntitySystemManager _entitySystemManager; - [Dependency] private readonly IMapManager _mapManager; - [Dependency] private readonly IServerEntityManager _serverEntityManager; - [Dependency] private IServerNotifyManager _serverNotifyManager; -#pragma warning restore 649 - public override string Name => "RCD"; - private string _outputTile = "floor_steel"; - private RcdMode _mode = 0; //What mode are we on? Can be floors, walls, deconstruct. - private readonly RcdMode[] _modes = (RcdMode[]) Enum.GetValues(typeof(RcdMode)); - private int _ammo = 5; //How much "ammo" we have left. You can refille this with RCD ammo. - - ///Enum to store the different mode states for clarity. - private enum RcdMode - { - Floors, - Walls, - Deconstruct - } - - public override void ExposeData(ObjectSerializer serializer) - { - base.ExposeData(serializer); - serializer.DataField(ref _outputTile, "output", "floor_steel"); - } - - - /// - /// Method called when the RCD is clicked in-hand, this will swap the RCD's mode from "floors" to "walls". - /// - - public bool UseEntity(UseEntityEventArgs eventArgs) - { - SwapMode(eventArgs); - return true; - } - - /// - ///Method to allow the user to swap the mode of the RCD by clicking it in hand, the actual in hand clicking bit is done over on UseEntity() - ///@param UseEntityEventArgs = The entity which triggered this method call, used to know where to play the "click" sound. - /// - - public void SwapMode(UseEntityEventArgs eventArgs) - { - _entitySystemManager.GetEntitySystem().PlayFromEntity("/Audio/Items/genhit.ogg", Owner); - int mode = (int) this._mode; //Firstly, cast our RCDmode mode to an int (enums are backed by ints anyway by default) - mode = (++mode) % _modes.Length; //Then, do a rollover on the value so it doesnt hit an invalid state - this._mode = (RcdMode) mode; //Finally, cast the newly acquired int mode to an RCDmode so we can use it. - switch (this._mode) - { - case RcdMode.Floors: - _outputTile = "floor_steel"; - break; - case RcdMode.Walls: - _outputTile = "base_wall"; - break; - case RcdMode.Deconstruct: - _outputTile = "space"; - break; - } - _serverNotifyManager.PopupMessage(Owner, eventArgs.User, $"The RCD is now set to {this._mode} mode."); //Prints an overhead message above the RCD - } - - /// - ///Method called when the user examines this object, it'll simply add the mode that it's in to the object's description - ///@params message = The original message from examining, like ..() in BYOND's examine - /// - - public void Examine(FormattedMessage message, bool inDetailsRange) - { - message.AddMarkup(Loc.GetString("It's currently on {0} mode, and holds {1} charges.",_mode.ToString(), this._ammo)); - } - - /// - /// Method to handle clicking on a tile to then appropriately RCD it. This can have several behaviours depending on mode. - /// @param eventAargs = An action event telling us what tile was clicked on. We use this to exrapolate where to place the new tile / remove the old one etc. - /// - - public void AfterInteract(AfterInteractEventArgs eventArgs) - { - var mapGrid = _mapManager.GetGrid(eventArgs.ClickLocation.GridID); - var tile = mapGrid.GetTileRef(eventArgs.ClickLocation); - var coordinates = mapGrid.GridTileToLocal(tile.GridIndices); - //Less expensive checks first. Failing those ones, we need to check that the tile isn't obstructed. - if (_ammo <= 0 || coordinates == GridCoordinates.InvalidGrid || !InteractionChecks.InRangeUnobstructed(eventArgs)) - { - return; - } - - var targetTile = (ContentTileDefinition) _tileDefinitionManager[tile.Tile.TypeId]; - - var canPlaceTile = targetTile.IsSubFloor; //Boolean to check if we're able to build the desired tile. This defaults to checking for subfloors, but is overridden by "deconstruct" which sets it to the inverse. - - switch (this._mode) - { - //Floor mode just needs the tile to be a space tile (subFloor) - case RcdMode.Floors: - break; - //We don't want to place a space tile on something that's already a space tile. Let's do the inverse of the last check. - case RcdMode.Deconstruct: - canPlaceTile = !targetTile.IsSubFloor; - break; - //Walls are a special behaviour, and require us to build a new object with a transform rather than setting a grid tile, thus we early return to avoid the tile set code. - case RcdMode.Walls: - var snapPos = mapGrid.SnapGridCellFor(eventArgs.ClickLocation, SnapGridOffset.Center); - var ent = _serverEntityManager.SpawnEntity("solid_wall", mapGrid.GridTileToLocal(snapPos)); - ent.Transform.LocalRotation = Owner.Transform.LocalRotation; //Now apply icon smoothing. - _entitySystemManager.GetEntitySystem().PlayFromEntity("/Audio/Items/deconstruct.ogg", Owner); - _ammo--; - return; //Alright we're done here - default: - return; //I don't know why this would happen, but sure I guess. Get out of here invalid state! - } - - ITileDefinition desiredTile = null; - desiredTile = _tileDefinitionManager[_outputTile]; - if (canPlaceTile) //If desiredTile is null by this point, something has gone horribly wrong and you need to fix it. - { - mapGrid.SetTile(eventArgs.ClickLocation, new Tile(desiredTile.TileId)); - _entitySystemManager.GetEntitySystem().PlayFromEntity("/Audio/Items/deconstruct.ogg", Owner); - _ammo--; - } - } - } -} diff --git a/Content.Shared/Maps/TurfHelpers.cs b/Content.Shared/Maps/TurfHelpers.cs index aa60e7168c..b02472cfa5 100644 --- a/Content.Shared/Maps/TurfHelpers.cs +++ b/Content.Shared/Maps/TurfHelpers.cs @@ -83,13 +83,13 @@ namespace Content.Shared.Maps foreach (var body in query) { if (body.CanCollide && body.Hard && (body.CollisionLayer & (int) CollisionGroup.Impassable) != 0) - return false; + return true; if (filterMobs && (body.CollisionLayer & (int) CollisionGroup.MobMask) != 0) - return false; + return true; } - return true; + return false; } /// diff --git a/Resources/Prototypes/Entities/Constructible/Doors/airlock_base.yml b/Resources/Prototypes/Entities/Constructible/Doors/airlock_base.yml index 6e8200cf27..ad88ad239f 100644 --- a/Resources/Prototypes/Entities/Constructible/Doors/airlock_base.yml +++ b/Resources/Prototypes/Entities/Constructible/Doors/airlock_base.yml @@ -4,6 +4,7 @@ description: It opens, it closes, and maybe crushes you. components: - type: Clickable + - type: RCDDeconstructWhitelist - type: InteractionOutline - type: Sprite netsync: false diff --git a/Resources/Prototypes/Entities/Constructible/Walls/low_wall.yml b/Resources/Prototypes/Entities/Constructible/Walls/low_wall.yml index 36d945b8de..c381fae699 100644 --- a/Resources/Prototypes/Entities/Constructible/Walls/low_wall.yml +++ b/Resources/Prototypes/Entities/Constructible/Walls/low_wall.yml @@ -8,6 +8,7 @@ - Wall components: - type: Clickable + - type: RCDDeconstructWhitelist - type: InteractionOutline - type: Sprite netsync: false diff --git a/Resources/Prototypes/Entities/Constructible/Walls/walls.yml b/Resources/Prototypes/Entities/Constructible/Walls/walls.yml index 2ba3947118..7f82a01ce2 100644 --- a/Resources/Prototypes/Entities/Constructible/Walls/walls.yml +++ b/Resources/Prototypes/Entities/Constructible/Walls/walls.yml @@ -8,6 +8,7 @@ snap: - Wall components: + - type: RCDDeconstructWhitelist - type: Clickable - type: InteractionOutline - type: Sprite diff --git a/Resources/Prototypes/Entities/Constructible/Walls/windows.yml b/Resources/Prototypes/Entities/Constructible/Walls/windows.yml index dbb604d2ed..280139d3e6 100644 --- a/Resources/Prototypes/Entities/Constructible/Walls/windows.yml +++ b/Resources/Prototypes/Entities/Constructible/Walls/windows.yml @@ -8,6 +8,7 @@ - Window components: - type: Clickable + - type: RCDDeconstructWhitelist - type: InteractionOutline - type: Sprite color: "#DDDDDD" diff --git a/Resources/Prototypes/Entities/Objects/Tools/tools.yml b/Resources/Prototypes/Entities/Objects/Tools/tools.yml index ef5191d36c..51df8c6cac 100644 --- a/Resources/Prototypes/Entities/Objects/Tools/tools.yml +++ b/Resources/Prototypes/Entities/Objects/Tools/tools.yml @@ -249,7 +249,7 @@ name: RCD parent: BaseItem id: RCD - description: An advanced construction device which can place floors / walls down quickly. + description: An advanced construction device which can place/remove walls, floors, and airlocks quickly. components: - type: RCD - type: UseDelay @@ -262,3 +262,17 @@ state: rcd - type: Item sprite: Objects/Tools/rcd.rsi + +- type: entity + name: RCD Ammo + parent: BaseItem + id: RCDAmmo + description: Ammo cartridge for an RCD. + components: + - type: RCDAmmo + - type: Sprite + sprite: Objects/Tools/rcd.rsi + state: rcd_ammo + - type: Icon + sprite: Objects/Tools/rcd.rsi + state: rcd_ammo diff --git a/Resources/Textures/Objects/Tools/rcd.rsi/meta.json b/Resources/Textures/Objects/Tools/rcd.rsi/meta.json index 1cfaa7b48f..ace9e5c739 100644 --- a/Resources/Textures/Objects/Tools/rcd.rsi/meta.json +++ b/Resources/Textures/Objects/Tools/rcd.rsi/meta.json @@ -1 +1,64 @@ -{"version": 1, "size": {"x": 32, "y": 32}, "states": [{"name": "inhand-left", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "inhand-right", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "rcd", "directions": 1, "delays": [[1.0]]}]} \ No newline at end of file +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CC BY-SA 3.0", + "states": [ + { + "name": "inhand-left", + "directions": 4, + "delays": [ + [ + 1.0 + ], + [ + 1.0 + ], + [ + 1.0 + ], + [ + 1.0 + ] + ] + }, + { + "name": "inhand-right", + "directions": 4, + "delays": [ + [ + 1.0 + ], + [ + 1.0 + ], + [ + 1.0 + ], + [ + 1.0 + ] + ] + }, + { + "name": "rcd", + "directions": 1, + "delays": [ + [ + 1.0 + ] + ] + }, + { + "name": "rcd_ammo", + "directions": 1, + "delays": [ + [ + 1.0 + ] + ] + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Objects/Tools/rcd.rsi/rcd.png b/Resources/Textures/Objects/Tools/rcd.rsi/rcd.png index fe1b33a4cf3f221db7329025a82e60bb7eb24e95..cb62979010f4ddc12341edfdbc08a6cd69426857 100644 GIT binary patch delta 624 zcmV-$0+0Q@0{#S$8Gi-<0047(dh`GQ0!2wgK~#90?Upfb(@+$JKO+_t)hLFcX%Lv9 zEgcMMyOLt5f{9ElB~uo*`VX)~{06fiB$P1=EX`VQ8&(&AhsZ$!4^&yeksL*pSj_Nn z64!AOP#{Z=6kX>&C-2L-$Bre-vY4kX%yst#zye?a09;I42!BrWFgiX{ssLQ_%g9@n z^j`o@KEdN%SlfVZ?mhrZZ8$jA!&yS40syqWiP}5+0zk%t;*NljrbJlU91oiSFbpFE zc(gtKi`T9ScP6Rc(8F;MBOTB*4f}@*?g0RKRrGsmgI2Tf+l7HckyfvXdi+t;ojdTb zFdiat6_}dyuP18_S6-7}{6eYHv@d~l`^?!PicDsn@dFW+Jx?GKqrS-GK z(^uM`Ip8=>ym3>Me(2uj0q}hv-}iyR*lqw7TO*szBFi$eoVqsv(zH)RA_qzB?LzGk z^m5!{!!W`DgpA`jiEP1y8_}@NZxE?g)x*j@JbSK(Y3Gd7O#Y1AX0m6Rrqt6I5rAH{q*_%EH&c1Z!SV{+dXNn1OacBzbAKdT04xCJ4)6=+o!KM-?O&Y$0000< KMNUMnLSTZ!Ngq-G delta 301 zcmV+|0n+~d1ib=~8Gi!+002a!ipBr{07y_wR7JqRz_N}2si2^MU;x>p0RPMY^5x~T zhXBsQ!?TY7EiEltT3Ss_P1vIVnsfj^KR=n70A^+Yj{pF!002HdK1@tZn0f%Qg#dNB zGb{iA00DGTPE!Ct=GbNc005&&L_t(IjqT3e4uUWY1>lypY=4#&f5G>EQ@bI?5kRkv z=W0p6o)zGqw;*EE;0_>`wv`=0fn#LB!z>O$rG%X zr6^~_*y7QXh1EcHI>W)~oV+6hs^(qFd&~|}Qn>g(oh}MAuQB=q;HtNw0?#8#jLOQY zn3&K9@O{OwT_!PQ9M=KR-AZH&z}&Dk|HV82g+d3y+h<9L00000NkvXXu0mjfUowHD diff --git a/Resources/Textures/Objects/Tools/rcd.rsi/rcd_ammo.png b/Resources/Textures/Objects/Tools/rcd.rsi/rcd_ammo.png new file mode 100644 index 0000000000000000000000000000000000000000..5422d5b97644fca92247567d8658a5b0bddd26c9 GIT binary patch literal 331 zcmV-R0kr;!P)pcY)L?EG#Z8TO3&1%A`n6 z5ww_#i3IkCg=LDFkN;n0BZRB!=DOnpKmZ5;0pJG!c9_elyH>YdhbLJ|JTd~%%Pb5L z_qvGm-9&fnAQzq&Vh6dfT?yNj9MzQlBJF3?+U<&x$B%aa-tHc-vk3rN7t|5N#?b3q zm`!L}C@PXHWwUnLcKSzH&&T^gt|)Ou3BYFUsOMuffI5Qv(Ua`FKREF{ysgzQ)8CB% zAjwjiWkuutQ7uI9ClTztKN~@_thDXAt>SYLbdfp&I4q;s7~snl&@Z9R0GHJN{f+}b d00;n=(kJE;p|w>1)~x^l002ovPDHLkV1oarkK_OV literal 0 HcmV?d00001 From 5962280d361b9ea8762acf8ec44fb6a5006f7b63 Mon Sep 17 00:00:00 2001 From: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com> Date: Fri, 14 Aug 2020 06:52:17 +1000 Subject: [PATCH 14/48] Station events (#1518) * Station event system Adds 2 basic events: (Power) GridCheck and RadiationStorm (based on the goonstation version). The system itself to choose events is based on tgstation's implementation. This also adds the event command that can be run to force specific events. There's still some other TODO items for these to be complete, to my knowledge: 1. There's no worldspace DrawCircle method (though the radstorm could look a lot nicer with a shader). 2. The PlayGlobal power_off / power_on audio seems to cut out halfway-through 3. (I think this is a known issue) lights still emit light until you get closer in a gridcheck so PVS range might need bumping. * Invariants for event names * Fix random event shutdown * Mix stereo announcements to mono * Address feedback * Remove redundant client system and use the overlay component instead * Drop the server prefix * Fix radiation overlay enum * use entityquery instead * zum's feedback * Use EntityQuery Co-authored-by: Metal Gear Sloth --- .../StationEvents/RadiationPulseComponent.cs | 24 ++ .../StationEvents/RadiationPulseOverlay.cs | 152 +++++++++ .../StationEvents/StationEventsSystemTest.cs | 44 +++ Content.Server/Chat/ChatManager.cs | 9 + .../StationEvents/RadiationPulseComponent.cs | 62 ++++ .../StationEvents/RadiationPulseSystem.cs | 89 +++++ .../StationEvents/StationEventSystem.cs | 321 ++++++++++++++++++ Content.Server/GameTicking/GameTicker.cs | 8 +- .../Interfaces/Chat/IChatManager.cs | 6 + .../StationEvents/PowerGridCheck.cs | 89 +++++ .../StationEvents/RadiationStorm.cs | 131 +++++++ Content.Server/StationEvents/StationEvent.cs | 94 +++++ .../StationEvents/StationEventCommand.cs | 102 ++++++ .../Mobs/SharedOverlayEffectsComponent.cs | 3 +- .../Components/SharedRadiationStorm.cs | 38 +++ Content.Shared/GameObjects/ContentNetIDs.cs | 1 + Resources/Audio/Announcements/power_off.ogg | Bin 0 -> 79910 bytes Resources/Audio/Announcements/power_on.ogg | Bin 0 -> 49552 bytes Resources/Audio/Announcements/radiation.ogg | Bin 0 -> 61118 bytes Resources/Groups/groups.yml | 3 + Resources/Prototypes/Entities/radiation.yml | 7 + 21 files changed, 1178 insertions(+), 5 deletions(-) create mode 100644 Content.Client/GameObjects/Components/StationEvents/RadiationPulseComponent.cs create mode 100644 Content.Client/StationEvents/RadiationPulseOverlay.cs create mode 100644 Content.IntegrationTests/Tests/StationEvents/StationEventsSystemTest.cs create mode 100644 Content.Server/GameObjects/Components/StationEvents/RadiationPulseComponent.cs create mode 100644 Content.Server/GameObjects/EntitySystems/StationEvents/RadiationPulseSystem.cs create mode 100644 Content.Server/GameObjects/EntitySystems/StationEvents/StationEventSystem.cs create mode 100644 Content.Server/StationEvents/PowerGridCheck.cs create mode 100644 Content.Server/StationEvents/RadiationStorm.cs create mode 100644 Content.Server/StationEvents/StationEvent.cs create mode 100644 Content.Server/StationEvents/StationEventCommand.cs create mode 100644 Content.Shared/GameObjects/Components/SharedRadiationStorm.cs create mode 100644 Resources/Audio/Announcements/power_off.ogg create mode 100644 Resources/Audio/Announcements/power_on.ogg create mode 100644 Resources/Audio/Announcements/radiation.ogg create mode 100644 Resources/Prototypes/Entities/radiation.yml diff --git a/Content.Client/GameObjects/Components/StationEvents/RadiationPulseComponent.cs b/Content.Client/GameObjects/Components/StationEvents/RadiationPulseComponent.cs new file mode 100644 index 0000000000..23d57a957c --- /dev/null +++ b/Content.Client/GameObjects/Components/StationEvents/RadiationPulseComponent.cs @@ -0,0 +1,24 @@ +#nullable enable +using System; +using Content.Shared.GameObjects.Components; +using Robust.Shared.GameObjects; + +namespace Content.Client.GameObjects.Components.StationEvents +{ + [RegisterComponent] + public sealed class RadiationPulseComponent : SharedRadiationPulseComponent + { + public TimeSpan EndTime { get; private set; } + + public override void HandleComponentState(ComponentState? curState, ComponentState? nextState) + { + base.HandleComponentState(curState, nextState); + if (!(curState is RadiationPulseMessage state)) + { + return; + } + + EndTime = state.EndTime; + } + } +} \ No newline at end of file diff --git a/Content.Client/StationEvents/RadiationPulseOverlay.cs b/Content.Client/StationEvents/RadiationPulseOverlay.cs new file mode 100644 index 0000000000..2604419ed5 --- /dev/null +++ b/Content.Client/StationEvents/RadiationPulseOverlay.cs @@ -0,0 +1,152 @@ +#nullable enable +using System; +using System.Collections.Generic; +using System.Linq; +using Content.Client.GameObjects.Components.StationEvents; +using Content.Shared.GameObjects.Components.Mobs; +using JetBrains.Annotations; +using Robust.Client.Graphics.Drawing; +using Robust.Client.Graphics.Overlays; +using Robust.Client.Interfaces.Graphics.ClientEye; +using Robust.Client.Player; +using Robust.Shared.Interfaces.GameObjects; +using Robust.Shared.Interfaces.Map; +using Robust.Shared.Interfaces.Timing; +using Robust.Shared.IoC; +using Color = Robust.Shared.Maths.Color; + +namespace Content.Client.StationEvents +{ + [UsedImplicitly] + public sealed class RadiationPulseOverlay : Overlay + { + [Dependency] private readonly IComponentManager _componentManager = default!; + [Dependency] private readonly IGameTiming _gameTiming = default!; + [Dependency] private readonly IMapManager _mapManager = default!; + [Dependency] private readonly IPlayerManager _playerManager = default!; + [Dependency] private readonly IEyeManager _eyeManager = default!; + + /// + /// Current color of a pulse + /// + private readonly Dictionary _colors = new Dictionary(); + + /// + /// Whether our alpha is increasing or decreasing and at what time does it flip (or stop) + /// + private readonly Dictionary _transitions = + new Dictionary(); + + /// + /// How much the alpha changes per second for each pulse + /// + private readonly Dictionary _alphaRateOfChange = new Dictionary(); + + private TimeSpan _lastTick; + + // TODO: When worldHandle can do DrawCircle change this. + public override OverlaySpace Space => OverlaySpace.ScreenSpace; + + public RadiationPulseOverlay() : base(nameof(SharedOverlayID.RadiationPulseOverlay)) + { + IoCManager.InjectDependencies(this); + _lastTick = _gameTiming.CurTime; + } + + /// + /// Get the current color for the entity, + /// accounting for what its alpha should be and whether it should be transitioning in or out + /// + /// + /// frametime + /// + /// + private Color GetColor(IEntity entity, float elapsedTime, TimeSpan endTime) + { + var currentTime = _gameTiming.CurTime; + + // New pulse + if (!_colors.ContainsKey(entity)) + { + UpdateTransition(entity, currentTime, endTime); + } + + var currentColor = _colors[entity]; + var alphaChange = _alphaRateOfChange[entity] * elapsedTime; + + if (!_transitions[entity].EasingIn) + { + alphaChange *= -1; + } + + if (currentTime > _transitions[entity].TransitionTime) + { + UpdateTransition(entity, currentTime, endTime); + } + + _colors[entity] = _colors[entity].WithAlpha(currentColor.A + alphaChange); + return _colors[entity]; + } + + private void UpdateTransition(IEntity entity, TimeSpan currentTime, TimeSpan endTime) + { + bool easingIn; + TimeSpan transitionTime; + + if (!_transitions.TryGetValue(entity, out var transition)) + { + // Start as false because it will immediately be flipped + easingIn = false; + transitionTime = (endTime - currentTime) / 2 + currentTime; + } + else + { + easingIn = transition.EasingIn; + transitionTime = endTime; + } + + _transitions[entity] = (!easingIn, transitionTime); + _colors[entity] = Color.Green.WithAlpha(0.0f); + _alphaRateOfChange[entity] = 1.0f / (float) (transitionTime - currentTime).TotalSeconds; + } + + protected override void Draw(DrawingHandleBase handle, OverlaySpace currentSpace) + { + // PVS should control the overlay pretty well so the overlay doesn't get instantiated unless we're near one... + var playerEntity = _playerManager.LocalPlayer?.ControlledEntity; + + if (playerEntity == null) + { + return; + } + + var elapsedTime = (float) (_gameTiming.CurTime - _lastTick).TotalSeconds; + _lastTick = _gameTiming.CurTime; + + var radiationPulses = _componentManager + .EntityQuery() + .ToList(); + + var screenHandle = (DrawingHandleScreen) handle; + var viewport = _eyeManager.GetWorldViewport(); + + foreach (var grid in _mapManager.FindGridsIntersecting(playerEntity.Transform.MapID, viewport)) + { + foreach (var pulse in radiationPulses) + { + if (grid.Index != pulse.Owner.Transform.GridID) continue; + + // TODO: Check if viewport intersects circle + var circlePosition = _eyeManager.WorldToScreen(pulse.Owner.Transform.WorldPosition); + var comp = (RadiationPulseComponent) pulse; + + // change to worldhandle when implemented + screenHandle.DrawCircle( + circlePosition, + comp.Range * 64, + GetColor(pulse.Owner, elapsedTime, comp.EndTime)); + } + } + } + } +} \ No newline at end of file diff --git a/Content.IntegrationTests/Tests/StationEvents/StationEventsSystemTest.cs b/Content.IntegrationTests/Tests/StationEvents/StationEventsSystemTest.cs new file mode 100644 index 0000000000..2e115930ed --- /dev/null +++ b/Content.IntegrationTests/Tests/StationEvents/StationEventsSystemTest.cs @@ -0,0 +1,44 @@ +using System.Threading.Tasks; +using Content.Server.GameObjects.EntitySystems; +using Content.Server.GameObjects.EntitySystems.StationEvents; +using NUnit.Framework; +using Robust.Shared.GameObjects.Systems; +using Robust.Shared.Interfaces.Timing; +using Robust.Shared.IoC; + +namespace Content.IntegrationTests.Tests.StationEvents +{ + [TestFixture] + public class StationEventsSystemTest : ContentIntegrationTest + { + [Test] + public async Task Test() + { + var server = StartServerDummyTicker(); + + server.Assert(() => + { + // Idle each event once + var stationEventsSystem = EntitySystem.Get(); + var dummyFrameTime = (float) IoCManager.Resolve().TickPeriod.TotalSeconds; + + foreach (var stationEvent in stationEventsSystem.StationEvents) + { + stationEvent.Startup(); + stationEvent.Update(dummyFrameTime); + stationEvent.Shutdown(); + Assert.That(stationEvent.Occurrences == 1); + } + + stationEventsSystem.ResettingCleanup(); + + foreach (var stationEvent in stationEventsSystem.StationEvents) + { + Assert.That(stationEvent.Occurrences == 0); + } + }); + + await server.WaitIdleAsync(); + } + } +} \ No newline at end of file diff --git a/Content.Server/Chat/ChatManager.cs b/Content.Server/Chat/ChatManager.cs index bb33c2c6ca..1a035fbb5c 100644 --- a/Content.Server/Chat/ChatManager.cs +++ b/Content.Server/Chat/ChatManager.cs @@ -44,6 +44,15 @@ namespace Content.Server.Chat _netManager.ServerSendToAll(msg); } + public void DispatchStationAnnouncement(string message) + { + var msg = _netManager.CreateNetMessage(); + msg.Channel = ChatChannel.Radio; + msg.Message = message; + msg.MessageWrap = "Station: {0}"; + _netManager.ServerSendToAll(msg); + } + public void DispatchServerMessage(IPlayerSession player, string message) { var msg = _netManager.CreateNetMessage(); diff --git a/Content.Server/GameObjects/Components/StationEvents/RadiationPulseComponent.cs b/Content.Server/GameObjects/Components/StationEvents/RadiationPulseComponent.cs new file mode 100644 index 0000000000..c0fd604f92 --- /dev/null +++ b/Content.Server/GameObjects/Components/StationEvents/RadiationPulseComponent.cs @@ -0,0 +1,62 @@ +using System; +using Content.Shared.GameObjects.Components; +using Robust.Server.GameObjects.EntitySystems; +using Robust.Shared.GameObjects; +using Robust.Shared.GameObjects.Systems; +using Robust.Shared.Interfaces.Random; +using Robust.Shared.Interfaces.Timing; +using Robust.Shared.IoC; +using Robust.Shared.Random; +using Robust.Shared.Serialization; +using Robust.Shared.Timers; + +namespace Content.Server.GameObjects.Components.StationEvents +{ + [RegisterComponent] + public sealed class RadiationPulseComponent : SharedRadiationPulseComponent + { + private const float MinPulseLifespan = 0.8f; + private const float MaxPulseLifespan = 2.5f; + + public float DPS => _dps; + private float _dps; + + private TimeSpan _endTime; + + public override void ExposeData(ObjectSerializer serializer) + { + base.ExposeData(serializer); + serializer.DataField(ref _dps, "dps", 40.0f); + } + + public override void Initialize() + { + base.Initialize(); + + var currentTime = IoCManager.Resolve().CurTime; + var duration = + TimeSpan.FromSeconds( + IoCManager.Resolve().NextFloat() * (MaxPulseLifespan - MinPulseLifespan) + + MinPulseLifespan); + + _endTime = currentTime + duration; + + Timer.Spawn(duration, + () => + { + if (!Owner.Deleted) + { + Owner.Delete(); + } + }); + + EntitySystem.Get().PlayAtCoords("/Audio/Weapons/Guns/Gunshots/laser3.ogg", Owner.Transform.GridPosition); + Dirty(); + } + + public override ComponentState GetComponentState() + { + return new RadiationPulseMessage(_endTime); + } + } +} \ No newline at end of file diff --git a/Content.Server/GameObjects/EntitySystems/StationEvents/RadiationPulseSystem.cs b/Content.Server/GameObjects/EntitySystems/StationEvents/RadiationPulseSystem.cs new file mode 100644 index 0000000000..2e48bf7120 --- /dev/null +++ b/Content.Server/GameObjects/EntitySystems/StationEvents/RadiationPulseSystem.cs @@ -0,0 +1,89 @@ +using System.Collections.Generic; +using Content.Server.GameObjects.Components.Damage; +using Content.Server.GameObjects.Components.Mobs; +using Content.Server.GameObjects.Components.StationEvents; +using Content.Shared.GameObjects; +using Content.Shared.GameObjects.Components.Damage; +using JetBrains.Annotations; +using Robust.Shared.GameObjects; +using Robust.Shared.GameObjects.Systems; +using Robust.Shared.Interfaces.GameObjects; +using Robust.Shared.IoC; + +namespace Content.Server.GameObjects.EntitySystems.StationEvents +{ + [UsedImplicitly] + public sealed class RadiationPulseSystem : EntitySystem + { + // Rather than stuffing around with collidables and checking entities on initialize etc. we'll just tick over + // for each entity in range. Seemed easier than checking entities on spawn, then checking collidables, etc. + // Especially considering each pulse is a big chonker, + no circle hitboxes yet. + + private TypeEntityQuery _speciesQuery; + + /// + /// Damage works with ints so we'll just accumulate damage and once we hit this threshold we'll apply it. + /// + /// This also server to stop spamming the damagethreshold with 1 damage continuously. + private const int DamageThreshold = 10; + + private Dictionary _accumulatedDamage = new Dictionary(); + + public override void Initialize() + { + base.Initialize(); + _speciesQuery = new TypeEntityQuery(typeof(SpeciesComponent)); + } + + public override void Update(float frameTime) + { + base.Update(frameTime); + var anyPulses = false; + + foreach (var comp in ComponentManager.EntityQuery()) + { + anyPulses = true; + + foreach (var species in EntityManager.GetEntities(_speciesQuery)) + { + // Work out if we're in range and accumulate more damage + // If we've hit the DamageThreshold we'll also apply that damage to the mob + // If we're really lagging server can apply multiples of the DamageThreshold at once + if (species.Transform.MapID != comp.Owner.Transform.MapID) continue; + + if ((species.Transform.WorldPosition - comp.Owner.Transform.WorldPosition).Length > comp.Range) + { + continue; + } + + var totalDamage = frameTime * comp.DPS; + + if (!_accumulatedDamage.TryGetValue(species, out var accumulatedSpecies)) + { + _accumulatedDamage[species] = 0.0f; + } + + totalDamage += accumulatedSpecies; + _accumulatedDamage[species] = totalDamage; + + if (totalDamage < DamageThreshold) continue; + if (!species.TryGetComponent(out DamageableComponent damageableComponent)) continue; + + var damageMultiple = (int) (totalDamage / DamageThreshold); + _accumulatedDamage[species] = totalDamage % DamageThreshold; + + damageableComponent.TakeDamage(DamageType.Heat, damageMultiple * DamageThreshold, comp.Owner, comp.Owner); + } + } + + if (anyPulses) + { + return; + } + + // probably don't need to worry about clearing this at roundreset unless you have a radiation pulse at roundstart + // (which is currently not possible) + _accumulatedDamage.Clear(); + } + } +} \ No newline at end of file diff --git a/Content.Server/GameObjects/EntitySystems/StationEvents/StationEventSystem.cs b/Content.Server/GameObjects/EntitySystems/StationEvents/StationEventSystem.cs new file mode 100644 index 0000000000..1885b32231 --- /dev/null +++ b/Content.Server/GameObjects/EntitySystems/StationEvents/StationEventSystem.cs @@ -0,0 +1,321 @@ +using System; +using System.Collections.Generic; +using System.Text; +using Content.Server.StationEvents; +using JetBrains.Annotations; +using Robust.Server.Interfaces.Player; +using Robust.Shared.GameObjects.Systems; +using Robust.Shared.Interfaces.Random; +using Robust.Shared.Interfaces.Reflection; +using Robust.Shared.Interfaces.Timing; +using Robust.Shared.IoC; +using Robust.Shared.Localization; + +namespace Content.Server.GameObjects.EntitySystems.StationEvents +{ + [UsedImplicitly] + public sealed class StationEventSystem : EntitySystem + { + // Somewhat based off of TG's implementation of events + + public StationEvent CurrentEvent { get; private set; } + + public IReadOnlyCollection StationEvents => _stationEvents; + private List _stationEvents = new List(); + + private const float MinimumTimeUntilFirstEvent = 600; + + /// + /// How long until the next check for an event runs + /// + /// Default value is how long until first event is allowed + private float _timeUntilNextEvent = MinimumTimeUntilFirstEvent; + + /// + /// Whether random events can run + /// + /// If disabled while an event is running (even if admin run) it will disable it + public bool Enabled + { + get => _enabled; + set + { + if (_enabled == value) + { + return; + } + + _enabled = value; + CurrentEvent?.Shutdown(); + CurrentEvent = null; + } + } + + private bool _enabled = true; + + /// + /// Admins can get a list of all events available to run, regardless of whether their requirements have been met + /// + /// + public string GetEventNames() + { + StringBuilder result = new StringBuilder(); + + foreach (var stationEvent in _stationEvents) + { + result.Append(stationEvent.Name + "\n"); + } + + return result.ToString(); + } + + /// + /// Admins can forcibly run events by passing in the Name + /// + /// The exact string for Name, without localization + /// + public string RunEvent(string name) + { + // Could use a dictionary but it's such a minor thing, eh. + // Wasn't sure on whether to localize this given it's a command + var upperName = name.ToUpperInvariant(); + + foreach (var stationEvent in _stationEvents) + { + if (stationEvent.Name.ToUpperInvariant() != upperName) + { + continue; + } + + CurrentEvent?.Shutdown(); + CurrentEvent = stationEvent; + stationEvent.Startup(); + return Loc.GetString("Running event ") + stationEvent.Name; + } + + // I had string interpolation but lord it made it hard to read + return Loc.GetString("No event named ") + name; + } + + /// + /// Randomly run a valid event immediately, ignoring earlieststart + /// + /// + public string RunRandomEvent() + { + var availableEvents = AvailableEvents(true); + var randomEvent = FindEvent(availableEvents); + + if (randomEvent == null) + { + return Loc.GetString("No valid events available"); + } + + CurrentEvent?.Shutdown(); + CurrentEvent = randomEvent; + CurrentEvent.Startup(); + + return Loc.GetString("Running ") + randomEvent.Name; + } + + /// + /// Admins can stop the currently running event (if applicable) and reset the timer + /// + /// + public string StopEvent() + { + string resultText; + + if (CurrentEvent == null) + { + resultText = Loc.GetString("No event running currently"); + } + else + { + resultText = Loc.GetString("Stopped event ") + CurrentEvent.Name; + CurrentEvent.Shutdown(); + CurrentEvent = null; + } + + ResetTimer(); + return resultText; + } + + public override void Initialize() + { + base.Initialize(); + var reflectionManager = IoCManager.Resolve(); + var typeFactory = IoCManager.Resolve(); + + foreach (var type in reflectionManager.GetAllChildren(typeof(StationEvent))) + { + if (type.IsAbstract) continue; + + var stationEvent = (StationEvent) typeFactory.CreateInstance(type); + _stationEvents.Add(stationEvent); + } + } + + public override void Update(float frameTime) + { + base.Update(frameTime); + + if (!Enabled) + { + return; + } + + // Keep running the current event + if (CurrentEvent != null) + { + CurrentEvent.Update(frameTime); + + // Shutdown the event and set the timer for the next event + if (!CurrentEvent.Running) + { + CurrentEvent.Shutdown(); + CurrentEvent = null; + ResetTimer(); + } + + return; + } + + if (_timeUntilNextEvent > 0) + { + _timeUntilNextEvent -= frameTime; + return; + } + + // No point hammering this trying to find events if none are available + var stationEvent = FindEvent(AvailableEvents()); + if (stationEvent == null) + { + ResetTimer(); + } + else + { + CurrentEvent = stationEvent; + } + } + + /// + /// Reset the event timer once the event is done. + /// + private void ResetTimer() + { + var robustRandom = IoCManager.Resolve(); + // 5 - 15 minutes. TG does 3-10 but that's pretty frequent + _timeUntilNextEvent = robustRandom.Next(300, 900); + } + + /// + /// Pick a random event from the available events at this time, also considering their weightings. + /// + /// + private StationEvent FindEvent(List availableEvents) + { + if (availableEvents.Count == 0) + { + return null; + } + + var sumOfWeights = 0; + + foreach (var stationEvent in availableEvents) + { + sumOfWeights += (int) stationEvent.Weight; + } + + var robustRandom = IoCManager.Resolve(); + sumOfWeights = robustRandom.Next(sumOfWeights); + + foreach (var stationEvent in availableEvents) + { + sumOfWeights -= (int) stationEvent.Weight; + + if (sumOfWeights <= 0) + { + return stationEvent; + } + } + + return null; + } + + /// + /// Gets the events that have met their player count, time-until start, etc. + /// + /// + /// + private List AvailableEvents(bool ignoreEarliestStart = false) + { + TimeSpan currentTime; + var playerCount = IoCManager.Resolve().PlayerCount; + + // playerCount does a lock so we'll just keep the variable here + if (!ignoreEarliestStart) + { + currentTime = IoCManager.Resolve().CurTime; + } + else + { + currentTime = TimeSpan.Zero; + } + + var result = new List(); + + foreach (var stationEvent in _stationEvents) + { + if (CanRun(stationEvent, playerCount, currentTime)) + { + result.Add(stationEvent); + } + } + + return result; + } + + private bool CanRun(StationEvent stationEvent, int playerCount, TimeSpan currentTime) + { + if (stationEvent.MaxOccurrences.HasValue && stationEvent.Occurrences >= stationEvent.MaxOccurrences.Value) + { + return false; + } + + if (playerCount < stationEvent.MinimumPlayers) + { + return false; + } + + if (currentTime != TimeSpan.Zero && currentTime.TotalMinutes < stationEvent.EarliestStart) + { + return false; + } + + return true; + } + + public void ResettingCleanup() + { + if (CurrentEvent != null && CurrentEvent.Running) + { + CurrentEvent.Shutdown(); + CurrentEvent = null; + } + + foreach (var stationEvent in _stationEvents) + { + stationEvent.Occurrences = 0; + } + + _timeUntilNextEvent = MinimumTimeUntilFirstEvent; + } + + public override void Shutdown() + { + base.Shutdown(); + CurrentEvent?.Shutdown(); + } + } +} \ No newline at end of file diff --git a/Content.Server/GameTicking/GameTicker.cs b/Content.Server/GameTicking/GameTicker.cs index b02df83377..8c3ed03f1b 100644 --- a/Content.Server/GameTicking/GameTicker.cs +++ b/Content.Server/GameTicking/GameTicker.cs @@ -13,6 +13,7 @@ using Content.Server.GameObjects.Components.PDA; using Content.Server.GameObjects.EntitySystems; using Content.Server.GameObjects.EntitySystems.AI.Pathfinding; using Content.Server.GameObjects.EntitySystems.AI.Pathfinding.Accessible; +using Content.Server.GameObjects.EntitySystems.StationEvents; using Content.Server.GameTicking.GamePresets; using Content.Server.Interfaces; using Content.Server.Interfaces.Chat; @@ -619,15 +620,14 @@ namespace Content.Server.GameTicking _playerJoinLobby(player); } - - // Reset pathing system + EntitySystem.Get().ResettingCleanup(); EntitySystem.Get().ResettingCleanup(); + EntitySystem.Get().ResetLayouts(); + EntitySystem.Get().ResettingCleanup(); _spawnedPositions.Clear(); _manifest.Clear(); - - EntitySystem.Get().ResetLayouts(); } private void _preRoundSetup() diff --git a/Content.Server/Interfaces/Chat/IChatManager.cs b/Content.Server/Interfaces/Chat/IChatManager.cs index c3c9b6ceb3..e32c9bea8d 100644 --- a/Content.Server/Interfaces/Chat/IChatManager.cs +++ b/Content.Server/Interfaces/Chat/IChatManager.cs @@ -12,6 +12,12 @@ namespace Content.Server.Interfaces.Chat /// void DispatchServerAnnouncement(string message); + /// + /// Station announcement to every player + /// + /// + void DispatchStationAnnouncement(string message); + void DispatchServerMessage(IPlayerSession player, string message); void EntitySay(IEntity source, string message); diff --git a/Content.Server/StationEvents/PowerGridCheck.cs b/Content.Server/StationEvents/PowerGridCheck.cs new file mode 100644 index 0000000000..882fa61f7a --- /dev/null +++ b/Content.Server/StationEvents/PowerGridCheck.cs @@ -0,0 +1,89 @@ +using System; +using System.Collections.Generic; +using Content.Server.GameObjects.Components.Power; +using Content.Server.GameObjects.Components.Power.ApcNetComponents; +using Content.Server.GameObjects.Components.Power.PowerNetComponents; +using JetBrains.Annotations; +using Robust.Server.GameObjects.EntitySystems; +using Robust.Shared.GameObjects; +using Robust.Shared.GameObjects.Systems; +using Robust.Shared.Interfaces.GameObjects; +using Robust.Shared.Interfaces.Random; +using Robust.Shared.IoC; +using Robust.Shared.Localization; + +namespace Content.Server.StationEvents +{ + [UsedImplicitly] + public sealed class PowerGridCheck : StationEvent + { + public override string Name => "PowerGridCheck"; + + public override StationEventWeight Weight => StationEventWeight.Normal; + + public override int? MaxOccurrences => 3; + + protected override string StartAnnouncement => Loc.GetString( + "Abnormal activity detected in the station's powernet. As a precautionary measure, the station's power will be shut off for an indeterminate duration."); + + protected override string EndAnnouncement => Loc.GetString( + "Power has been restored to the station. We apologize for the inconvenience."); + + private float _elapsedTime; + private int _failDuration; + + private Dictionary _powered = new Dictionary(); + + private readonly List _toPowerDown = new List(); + + public override void Startup() + { + base.Startup(); + EntitySystem.Get().PlayGlobal("/Audio/Announcements/power_off.ogg"); + + _elapsedTime = 0.0f; + _failDuration = IoCManager.Resolve().Next(30, 120); + var componentManager = IoCManager.Resolve(); + + foreach (var component in componentManager.EntityQuery()) + { + component.PowerDisabled = true; + } + } + + public override void Shutdown() + { + base.Shutdown(); + EntitySystem.Get().PlayGlobal("/Audio/Announcements/power_on.ogg"); + + foreach (var (entity, powered) in _powered) + { + if (entity.Deleted) continue; + + if (entity.TryGetComponent(out PowerReceiverComponent powerReceiverComponent)) + { + powerReceiverComponent.PowerDisabled = powered; + } + } + + _powered.Clear(); + } + + public override void Update(float frameTime) + { + if (!Running) + { + return; + } + + _elapsedTime += frameTime; + + if (_elapsedTime < _failDuration) + { + return; + } + + Running = false; + } + } +} \ No newline at end of file diff --git a/Content.Server/StationEvents/RadiationStorm.cs b/Content.Server/StationEvents/RadiationStorm.cs new file mode 100644 index 0000000000..9163b097e3 --- /dev/null +++ b/Content.Server/StationEvents/RadiationStorm.cs @@ -0,0 +1,131 @@ +using Content.Server.GameObjects.Components.Mobs; +using Content.Shared.GameObjects.Components.Mobs; +using JetBrains.Annotations; +using Robust.Server.GameObjects.EntitySystems; +using Robust.Shared.GameObjects.Systems; +using Robust.Shared.Interfaces.GameObjects; +using Robust.Shared.Interfaces.Map; +using Robust.Shared.Interfaces.Random; +using Robust.Shared.IoC; +using Robust.Shared.Localization; +using Robust.Shared.Map; +using Robust.Shared.Random; + +namespace Content.Server.StationEvents +{ + [UsedImplicitly] + public sealed class RadiationStorm : StationEvent + { + // Based on Goonstation style radiation storm with some TG elements (announcer, etc.) + + [Dependency] private IEntityManager _entityManager = default!; + [Dependency] private IMapManager _mapManager = default!; + [Dependency] private IRobustRandom _robustRandom = default!; + + public override string Name => "RadiationStorm"; + + protected override string StartAnnouncement => Loc.GetString( + "High levels of radiation detected near the station. Evacuate any areas containing abnormal green energy fields."); + + protected override string EndAnnouncement => Loc.GetString( + "The radiation threat has passed. Please return to your workplaces."); + + /// + /// How long until the radiation storm starts + /// + private const float StartupTime = 10; + + /// + /// How long the radiation storm has been running for + /// + private float _timeElapsed; + + private int _pulsesRemaining; + private float _timeUntilPulse; + private const float MinPulseDelay = 0.2f; + private const float MaxPulseDelay = 0.8f; + + public override void Startup() + { + base.Startup(); + EntitySystem.Get().PlayGlobal("/Audio/Announcements/radiation.ogg"); + IoCManager.InjectDependencies(this); + + _timeElapsed = 0.0f; + _pulsesRemaining = _robustRandom.Next(30, 100); + + var componentManager = IoCManager.Resolve(); + + foreach (var overlay in componentManager.EntityQuery()) + { + overlay.AddOverlay(SharedOverlayID.RadiationPulseOverlay); + } + } + + public override void Shutdown() + { + base.Shutdown(); + + // IOC uninject? + _entityManager = null; + _mapManager = null; + _robustRandom = null; + + var componentManager = IoCManager.Resolve(); + + foreach (var overlay in componentManager.EntityQuery()) + { + overlay.RemoveOverlay(SharedOverlayID.RadiationPulseOverlay); + } + } + + public override void Update(float frameTime) + { + _timeElapsed += frameTime; + + if (_pulsesRemaining == 0) + { + Running = false; + } + + if (!Running) + { + return; + } + + if (_timeElapsed < StartupTime) + { + return; + } + + _timeUntilPulse -= frameTime; + + if (_timeUntilPulse <= 0.0f) + { + // TODO: Probably rate-limit this for small grids (e.g. no more than 25% covered) + foreach (var grid in _mapManager.GetAllGrids()) + { + if (grid.IsDefaultGrid) continue; + SpawnPulse(grid); + } + } + } + + private void SpawnPulse(IMapGrid mapGrid) + { + _entityManager.SpawnEntity("RadiationPulse", FindRandomGrid(mapGrid)); + _timeUntilPulse = _robustRandom.NextFloat() * (MaxPulseDelay - MinPulseDelay) + MinPulseDelay; + _pulsesRemaining -= 1; + } + + private GridCoordinates FindRandomGrid(IMapGrid mapGrid) + { + // TODO: Need to get valid tiles? (maybe just move right if the tile we chose is invalid?) + + var randomX = _robustRandom.Next((int) mapGrid.WorldBounds.Left, (int) mapGrid.WorldBounds.Right); + var randomY = _robustRandom.Next((int) mapGrid.WorldBounds.Bottom, (int) mapGrid.WorldBounds.Top); + + return mapGrid.GridTileToLocal(new MapIndices(randomX, randomY)); + } + } +} \ No newline at end of file diff --git a/Content.Server/StationEvents/StationEvent.cs b/Content.Server/StationEvents/StationEvent.cs new file mode 100644 index 0000000000..8d351aff8e --- /dev/null +++ b/Content.Server/StationEvents/StationEvent.cs @@ -0,0 +1,94 @@ +using Content.Server.Interfaces.Chat; +using Robust.Server.GameObjects; +using Robust.Shared.IoC; + +namespace Content.Server.StationEvents +{ + public abstract class StationEvent + { + /// + /// If the event has started and is currently running + /// + public bool Running { get; protected set; } + + /// + /// Human-readable name for the event + /// + public abstract string Name { get; } + + public virtual StationEventWeight Weight { get; } = StationEventWeight.Normal; + + /// + /// What should be said in chat when the event starts (if anything). + /// + protected virtual string StartAnnouncement { get; } = null; + + /// + /// What should be said in chat when the event end (if anything). + /// + protected virtual string EndAnnouncement { get; } = null; + + /// + /// In minutes, when is the first time this event can start + /// + /// + public virtual int EarliestStart { get; } = 20; + + /// + /// How many players need to be present on station for the event to run + /// + /// To avoid running deadly events with low-pop + public virtual int MinimumPlayers { get; } = 0; + + /// + /// How many times this event has run this round + /// + public int Occurrences { get; set; } = 0; + + /// + /// How many times this even can occur in a single round + /// + public virtual int? MaxOccurrences { get; } = null; + + /// + /// Called once when the station event starts + /// + public virtual void Startup() + { + Running = true; + Occurrences += 1; + if (StartAnnouncement != null) + { + var chatManager = IoCManager.Resolve(); + chatManager.DispatchStationAnnouncement(StartAnnouncement); + } + } + + /// + /// Called every tick when this event is active + /// + /// + public abstract void Update(float frameTime); + + /// + /// Called once when the station event ends + /// + public virtual void Shutdown() + { + if (EndAnnouncement != null) + { + var chatManager = IoCManager.Resolve(); + chatManager.DispatchStationAnnouncement(EndAnnouncement); + } + } + } + + public enum StationEventWeight + { + VeryLow = 0, + Low = 5, + Normal = 10, + High = 15, + VeryHigh = 20, + } +} \ No newline at end of file diff --git a/Content.Server/StationEvents/StationEventCommand.cs b/Content.Server/StationEvents/StationEventCommand.cs new file mode 100644 index 0000000000..39331c6d5b --- /dev/null +++ b/Content.Server/StationEvents/StationEventCommand.cs @@ -0,0 +1,102 @@ +#nullable enable +using Content.Server.GameObjects.EntitySystems; +using Content.Server.GameObjects.EntitySystems.StationEvents; +using JetBrains.Annotations; +using Robust.Server.Interfaces.Console; +using Robust.Server.Interfaces.Player; +using Robust.Shared.GameObjects.Systems; +using Robust.Shared.Localization; + +namespace Content.Client.Commands +{ + [UsedImplicitly] + public sealed class StationEventCommand : IClientCommand + { + public string Command => "events"; + public string Description => "Provides admin control to station events"; + public string Help => "events >\n" + + "list: return all event names that can be run\n " + + "pause: stop all random events from running\n" + + "resume: allow random events to run again\n" + + "random: choose a random event that is valid and run it\n" + + "run: start a particular event now; is case-insensitive and not localized"; + public void Execute(IConsoleShell shell, IPlayerSession? player, string[] args) + { + if (args.Length == 0) + { + shell.SendText(player, "Need more args"); + return; + } + + if (args[0] == "list") + { + var resultText = "Random\n" + EntitySystem.Get().GetEventNames(); + shell.SendText(player, resultText); + return; + } + + // Didn't use a "toggle" so it's explicit + if (args[0] == "pause") + { + var stationEventSystem = EntitySystem.Get(); + + if (!stationEventSystem.Enabled) + { + shell.SendText(player, Loc.GetString("Station events are already paused")); + return; + } + else + { + stationEventSystem.Enabled = false; + shell.SendText(player, Loc.GetString("Station events paused")); + return; + } + } + + if (args[0] == "resume") + { + var stationEventSystem = EntitySystem.Get(); + + if (stationEventSystem.Enabled) + { + shell.SendText(player, Loc.GetString("Station events are already running")); + return; + } + else + { + stationEventSystem.Enabled = true; + shell.SendText(player, Loc.GetString("Station events resumed")); + return; + } + } + + if (args[0] == "stop") + { + var resultText = EntitySystem.Get().StopEvent(); + shell.SendText(player, resultText); + return; + } + + if (args[0] == "run" && args.Length == 2) + { + var eventName = args[1]; + string resultText; + + if (eventName == "random") + { + resultText = EntitySystem.Get().RunRandomEvent(); + } + else + { + resultText = EntitySystem.Get().RunEvent(eventName); + } + + shell.SendText(player, resultText); + return; + } + + shell.SendText(player, Loc.GetString("Invalid events command")); + return; + } + } +} \ No newline at end of file diff --git a/Content.Shared/GameObjects/Components/Mobs/SharedOverlayEffectsComponent.cs b/Content.Shared/GameObjects/Components/Mobs/SharedOverlayEffectsComponent.cs index 865b3092e8..3ee301ab96 100644 --- a/Content.Shared/GameObjects/Components/Mobs/SharedOverlayEffectsComponent.cs +++ b/Content.Shared/GameObjects/Components/Mobs/SharedOverlayEffectsComponent.cs @@ -114,6 +114,7 @@ namespace Content.Shared.GameObjects.Components.Mobs { GradientCircleMaskOverlay, CircleMaskOverlay, - FlashOverlay + FlashOverlay, + RadiationPulseOverlay, } } diff --git a/Content.Shared/GameObjects/Components/SharedRadiationStorm.cs b/Content.Shared/GameObjects/Components/SharedRadiationStorm.cs new file mode 100644 index 0000000000..efa28f0919 --- /dev/null +++ b/Content.Shared/GameObjects/Components/SharedRadiationStorm.cs @@ -0,0 +1,38 @@ +using System; +using Robust.Shared.GameObjects; +using Robust.Shared.Serialization; + +namespace Content.Shared.GameObjects.Components +{ + public abstract class SharedRadiationPulseComponent : Component + { + public override string Name => "RadiationPulse"; + public override uint? NetID => ContentNetIDs.RADIATION_PULSE; + + /// + /// Radius of the pulse from its position + /// + public float Range => _range; + private float _range; + + public override void ExposeData(ObjectSerializer serializer) + { + base.ExposeData(serializer); + serializer.DataField(ref _range, "range", 5.0f); + } + } + + /// + /// For syncing the pulse's lifespan between client and server for the overlay + /// + [Serializable, NetSerializable] + public sealed class RadiationPulseMessage : ComponentState + { + public TimeSpan EndTime { get; } + + public RadiationPulseMessage(TimeSpan endTime) : base(ContentNetIDs.RADIATION_PULSE) + { + EndTime = endTime; + } + } +} \ No newline at end of file diff --git a/Content.Shared/GameObjects/ContentNetIDs.cs b/Content.Shared/GameObjects/ContentNetIDs.cs index 6a38d3e669..9ecd4a918b 100644 --- a/Content.Shared/GameObjects/ContentNetIDs.cs +++ b/Content.Shared/GameObjects/ContentNetIDs.cs @@ -63,6 +63,7 @@ public const uint DISPOSABLE = 1056; public const uint GAS_ANALYZER = 1057; public const uint DO_AFTER = 1058; + public const uint RADIATION_PULSE = 1059; // Net IDs for integration tests. public const uint PREDICTION_TEST = 10001; diff --git a/Resources/Audio/Announcements/power_off.ogg b/Resources/Audio/Announcements/power_off.ogg new file mode 100644 index 0000000000000000000000000000000000000000..7dcd968c7344d3bf53195ddbcc8f0c351a6f26ee GIT binary patch literal 79910 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Š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

!41UZ>v0mM@zkQY{ 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 literal 0 HcmV?d00001 diff --git a/Resources/Audio/Announcements/radiation.ogg b/Resources/Audio/Announcements/radiation.ogg new file mode 100644 index 0000000000000000000000000000000000000000..610f6cd8c043631fac9310e6e773c81597b01495 GIT binary patch literal 61118 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 LrG+W|PM@zHU<5zsiY6 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 Date: Fri, 14 Aug 2020 13:17:27 +0200 Subject: [PATCH 15/48] Optimizes EqualizePressureInZone to use ArrayPool --- Content.Server/Atmos/TileAtmosphere.cs | 143 ++++++++++++++++--------- 1 file changed, 92 insertions(+), 51 deletions(-) diff --git a/Content.Server/Atmos/TileAtmosphere.cs b/Content.Server/Atmos/TileAtmosphere.cs index 69d74ce995..6888dce918 100644 --- a/Content.Server/Atmos/TileAtmosphere.cs +++ b/Content.Server/Atmos/TileAtmosphere.cs @@ -1,4 +1,5 @@ using System; +using System.Buffers; using System.Collections.Generic; using System.Runtime.CompilerServices; using Content.Server.Atmos.Reactions; @@ -28,6 +29,9 @@ namespace Content.Server.Atmos [Robust.Shared.IoC.Dependency] private IEntityManager _entityManager = default!; [Robust.Shared.IoC.Dependency] private IMapManager _mapManager = default!; + + private static readonly TileAtmosphereComparer _comparer = new TileAtmosphereComparer(); + [ViewVariables] private int _archivedCycle = 0; @@ -193,6 +197,23 @@ namespace Content.Server.Atmos _soundCooldown = 0; } + private class TileAtmosphereComparer : IComparer + { + public int Compare(TileAtmosphere a, TileAtmosphere b) + { + if (a == null && b == null) + return 0; + + if (a == null) + return -1; + + if (b == null) + return 1; + + return a._tileAtmosInfo.MoleDelta.CompareTo(b._tileAtmosInfo.MoleDelta); + } + } + //[MethodImpl(MethodImplOptions.AggressiveInlining)] public void EqualizePressureInZone(int cycleNum) { @@ -221,7 +242,7 @@ namespace Content.Server.Atmos var queueCycle = ++_gridAtmosphereComponent.EqualizationQueueCycleControl; var totalMoles = 0f; - var tiles = new TileAtmosphere[Atmospherics.ZumosHardTileLimit]; + var tiles = ArrayPool.Shared.Rent(Atmospherics.ZumosHardTileLimit); tiles[0] = this; _tileAtmosInfo.LastQueueCycle = queueCycle; var tileCount = 1; @@ -269,11 +290,13 @@ namespace Content.Server.Atmos } //tiles = tiles.AsSpan().Slice(0, tileCount).ToArray(); // According to my benchmarks, this is much slower. - Array.Resize(ref tiles, tileCount); + //Array.Resize(ref tiles, tileCount); - var averageMoles = totalMoles / (tiles.Length); - var giverTiles = new List(); - var takerTiles = new List(); + var averageMoles = totalMoles / (tileCount); + var giverTiles = ArrayPool.Shared.Rent(tileCount); + var takerTiles = ArrayPool.Shared.Rent(tileCount); + var giverTilesLength = 0; + var takerTilesLength = 0; for (var i = 0; i < tileCount; i++) { @@ -282,25 +305,25 @@ namespace Content.Server.Atmos tile._tileAtmosInfo.MoleDelta -= averageMoles; if (tile._tileAtmosInfo.MoleDelta > 0) { - giverTiles.Add(tile); + giverTiles[giverTilesLength++] = tile; } else { - takerTiles.Add(tile); + takerTiles[takerTilesLength++] = tile; } } - var logN = MathF.Log2(tiles.Length); + var logN = MathF.Log2(tileCount); // Optimization - try to spread gases using an O(nlogn) algorithm that has a chance of not working first to avoid O(n^2) - if (giverTiles.Count > logN && takerTiles.Count > logN) + if (giverTilesLength > logN && takerTilesLength > logN) { // Even if it fails, it will speed up the next part. - Array.Sort(tiles, (a, b) - => a._tileAtmosInfo.MoleDelta.CompareTo(b._tileAtmosInfo.MoleDelta)); + Array.Sort(tiles, 0, tileCount, _comparer); - foreach (var tile in tiles) + for (var i = 0; i < tileCount; i++) { + var tile = tiles[i]; tile._tileAtmosInfo.FastDone = true; if (!(tile._tileAtmosInfo.MoleDelta > 0)) continue; Direction eligibleAdjBits = 0; @@ -317,47 +340,50 @@ namespace Content.Server.Atmos amtEligibleAdj++; } - if (amtEligibleAdj <= 0) continue; // Oof we've painted ourselves into a corner. Bad luck. Next part will handle this. + if (amtEligibleAdj <= 0) + continue; // Oof we've painted ourselves into a corner. Bad luck. Next part will handle this. var molesToMove = tile._tileAtmosInfo.MoleDelta / amtEligibleAdj; foreach (var direction in Cardinal) { - if((eligibleAdjBits & direction) == 0 || !tile._adjacentTiles.TryGetValue(direction, out var tile2)) continue; + if ((eligibleAdjBits & direction) == 0 || + !tile._adjacentTiles.TryGetValue(direction, out var tile2)) continue; tile.AdjustEqMovement(direction, molesToMove); tile._tileAtmosInfo.MoleDelta -= molesToMove; tile2._tileAtmosInfo.MoleDelta += molesToMove; } } - giverTiles.Clear(); - takerTiles.Clear(); + giverTilesLength = 0; + takerTilesLength = 0; - foreach (var tile in tiles) + for (var i = 0; i < tileCount; i++) { + var tile = tiles[i]; if (tile._tileAtmosInfo.MoleDelta > 0) { - giverTiles.Add(tile); + giverTiles[giverTilesLength++] = tile; } else { - takerTiles.Add(tile); + takerTiles[takerTilesLength++] = tile; } } // This is the part that can become O(n^2). - if (giverTiles.Count < takerTiles.Count) + if (giverTilesLength < takerTilesLength) { // as an optimization, we choose one of two methods based on which list is smaller. We really want to avoid O(n^2) if we can. - var queue = new List(takerTiles.Count); - foreach (var giver in giverTiles) + var queue = ArrayPool.Shared.Rent(tileCount); + for (var j = 0; j < giverTilesLength; j++) { - giver._tileAtmosInfo.CurrentTransferDirection = (Direction)(-1); + var giver = giverTiles[j]; + giver._tileAtmosInfo.CurrentTransferDirection = (Direction) (-1); giver._tileAtmosInfo.CurrentTransferAmount = 0; var queueCycleSlow = ++_gridAtmosphereComponent.EqualizationQueueCycleControl; - queue.Clear(); - queue.Add(giver); + var queueLength = 0; + queue[queueLength++] = giver; giver._tileAtmosInfo.LastSlowQueueCycle = queueCycleSlow; - var queueCount = queue.Count; - for (var i = 0; i < queueCount; i++) + for (var i = 0; i < queueLength; i++) { if (giver._tileAtmosInfo.MoleDelta <= 0) break; // We're done here now. Let's not do more work than needed. @@ -365,7 +391,7 @@ namespace Content.Server.Atmos var tile = queue[i]; foreach (var direction in Cardinal) { - if(!tile._adjacentTiles.TryGetValue(direction, out var tile2)) continue; + if (!tile._adjacentTiles.TryGetValue(direction, out var tile2)) continue; if (giver._tileAtmosInfo.MoleDelta <= 0) break; // We're done here now. Let's not do more work than needed. @@ -373,8 +399,7 @@ namespace Content.Server.Atmos continue; if (tile2._tileAtmosInfo.LastSlowQueueCycle == queueCycleSlow) continue; - queue.Add(tile2); - queueCount++; + queue[queueLength++] = tile2; tile2._tileAtmosInfo.LastSlowQueueCycle = queueCycleSlow; tile2._tileAtmosInfo.CurrentTransferDirection = direction.GetOpposite(); tile2._tileAtmosInfo.CurrentTransferAmount = 0; @@ -400,33 +425,38 @@ namespace Content.Server.Atmos } // Putting this loop here helps make it O(n^2) over O(n^3) - for (var i = queue.Count - 1; i >= 0; i--) + for (var i = queueLength - 1; i >= 0; i--) { var tile = queue[i]; if (tile._tileAtmosInfo.CurrentTransferAmount != 0 && - tile._tileAtmosInfo.CurrentTransferDirection != (Direction)(-1)) + tile._tileAtmosInfo.CurrentTransferDirection != (Direction) (-1)) { - tile.AdjustEqMovement(tile._tileAtmosInfo.CurrentTransferDirection, tile._tileAtmosInfo.CurrentTransferAmount); - if(tile._adjacentTiles.TryGetValue(tile._tileAtmosInfo.CurrentTransferDirection, out var adjacent)) - adjacent._tileAtmosInfo.CurrentTransferAmount += tile._tileAtmosInfo.CurrentTransferAmount; + tile.AdjustEqMovement(tile._tileAtmosInfo.CurrentTransferDirection, + tile._tileAtmosInfo.CurrentTransferAmount); + if (tile._adjacentTiles.TryGetValue(tile._tileAtmosInfo.CurrentTransferDirection, + out var adjacent)) + adjacent._tileAtmosInfo.CurrentTransferAmount += + tile._tileAtmosInfo.CurrentTransferAmount; tile._tileAtmosInfo.CurrentTransferAmount = 0; } } } + + ArrayPool.Shared.Return(queue, true); } else { - var queue = new List(giverTiles.Count); - foreach (var taker in takerTiles) + var queue = ArrayPool.Shared.Rent(tileCount); + for (var j = 0; j < takerTilesLength; j++) { + var taker = takerTiles[j]; taker._tileAtmosInfo.CurrentTransferDirection = Direction.Invalid; taker._tileAtmosInfo.CurrentTransferAmount = 0; var queueCycleSlow = ++_gridAtmosphereComponent.EqualizationQueueCycleControl; - queue.Clear(); - queue.Add(taker); + var queueLength = 0; + queue[queueLength++] = taker; taker._tileAtmosInfo.LastSlowQueueCycle = queueCycleSlow; - var queueCount = queue.Count; - for (int i = 0; i < queueCount; i++) + for (int i = 0; i < queueLength; i++) { if (taker._tileAtmosInfo.MoleDelta >= 0) break; // We're done here now. Let's not do more work than needed. @@ -434,16 +464,16 @@ namespace Content.Server.Atmos var tile = queue[i]; foreach (var direction in Cardinal) { - if(!tile._adjacentTiles.ContainsKey(direction)) continue; + if (!tile._adjacentTiles.ContainsKey(direction)) continue; var tile2 = tile._adjacentTiles[direction]; if (taker._tileAtmosInfo.MoleDelta >= 0) break; // We're done here now. Let's not do more work than needed. - if (tile2?._tileAtmosInfo == null || tile2._tileAtmosInfo.LastQueueCycle != queueCycle) continue; + if (tile2?._tileAtmosInfo == null || tile2._tileAtmosInfo.LastQueueCycle != queueCycle) + continue; if (tile2._tileAtmosInfo.LastSlowQueueCycle == queueCycleSlow) continue; - queue.Add(tile2); - queueCount++; + queue[queueLength++] = tile2; tile2._tileAtmosInfo.LastSlowQueueCycle = queueCycleSlow; tile2._tileAtmosInfo.CurrentTransferDirection = direction.GetOpposite(); tile2._tileAtmosInfo.CurrentTransferAmount = 0; @@ -469,27 +499,34 @@ namespace Content.Server.Atmos } } - for (var i = queue.Count - 1; i >= 0; i--) + for (var i = queueLength - 1; i >= 0; i--) { var tile = queue[i]; if (tile._tileAtmosInfo.CurrentTransferAmount == 0 || tile._tileAtmosInfo.CurrentTransferDirection == Direction.Invalid) continue; - tile.AdjustEqMovement(tile._tileAtmosInfo.CurrentTransferDirection, tile._tileAtmosInfo.CurrentTransferAmount); + tile.AdjustEqMovement(tile._tileAtmosInfo.CurrentTransferDirection, + tile._tileAtmosInfo.CurrentTransferAmount); - if(tile._adjacentTiles.TryGetValue(tile._tileAtmosInfo.CurrentTransferDirection, out var adjacent)) - adjacent._tileAtmosInfo.CurrentTransferAmount += tile._tileAtmosInfo.CurrentTransferAmount; + if (tile._adjacentTiles.TryGetValue(tile._tileAtmosInfo.CurrentTransferDirection, + out var adjacent)) + adjacent._tileAtmosInfo.CurrentTransferAmount += + tile._tileAtmosInfo.CurrentTransferAmount; tile._tileAtmosInfo.CurrentTransferAmount = 0; } } + + ArrayPool.Shared.Return(queue, true); } - foreach (var tile in tiles) + for (var i = 0; i < tileCount; i++) { + var tile = tiles[i]; tile.FinalizeEq(); } - foreach (var tile in tiles) + for (var i = 0; i < tileCount; i++) { + var tile = tiles[i]; foreach (var direction in Cardinal) { if (!tile._adjacentTiles.TryGetValue(direction, out var tile2)) continue; @@ -498,6 +535,10 @@ namespace Content.Server.Atmos break; } } + + ArrayPool.Shared.Return(tiles, true); + ArrayPool.Shared.Return(giverTiles, true); + ArrayPool.Shared.Return(takerTiles, true); } } From 47c32a1c6f686093ae18b1a1c837a78d983364fe Mon Sep 17 00:00:00 2001 From: Swept Date: Fri, 14 Aug 2020 05:53:02 -0700 Subject: [PATCH 16/48] Signs and plaques! (#1637) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * I think this is a good selection of signs * Added the rest of the directional signs * Map Changes * Fixed phoron plaque * PROPERLY maps the map :)) * there * Added a couple more signs * a TON of little map changes * Parents * Why doesn't this work * Ok Hugal * Add description and add original atmos plaque Co-authored-by: Víctor Aguilera Puerto --- Resources/Maps/saltern.yml | 5921 ++++++++++------- .../Entities/Constructible/Walls/signs.yml | 1037 +++ .../Constructible/Misc/decals.rsi/ai.png | Bin 0 -> 400 bytes .../Constructible/Misc/decals.rsi/anomaly.png | Bin 0 -> 399 bytes .../Constructible/Misc/decals.rsi/armory.png | Bin 0 -> 391 bytes .../Constructible/Misc/decals.rsi/ass.png | Bin 0 -> 385 bytes .../Constructible/Misc/decals.rsi/atmos.png | Bin 0 -> 486 bytes .../Misc/decals.rsi/atmos_air.png | Bin 0 -> 663 bytes .../Misc/decals.rsi/atmos_co2.png | Bin 0 -> 673 bytes .../Misc/decals.rsi/atmos_n2.png | Bin 0 -> 663 bytes .../Misc/decals.rsi/atmos_n2o.png | Bin 0 -> 672 bytes .../Misc/decals.rsi/atmos_o2.png | Bin 0 -> 667 bytes .../Misc/decals.rsi/atmos_phoron.png | Bin 0 -> 650 bytes .../Misc/decals.rsi/atmos_waste.png | Bin 0 -> 656 bytes .../Misc/decals.rsi/atmosplaque.png | Bin 0 -> 1148 bytes .../Constructible/Misc/decals.rsi/bar.png | Bin 0 -> 388 bytes .../Constructible/Misc/decals.rsi/biblio.png | Bin 0 -> 339 bytes .../Constructible/Misc/decals.rsi/bio.png | Bin 0 -> 681 bytes .../Misc/decals.rsi/biohazard.png | Bin 0 -> 1336 bytes .../Constructible/Misc/decals.rsi/bridge.png | Bin 0 -> 484 bytes .../Misc/decals.rsi/canisters.png | Bin 0 -> 1099 bytes .../Constructible/Misc/decals.rsi/cargo.png | Bin 0 -> 352 bytes .../Misc/decals.rsi/cargo_dock.png | Bin 0 -> 407 bytes .../Constructible/Misc/decals.rsi/chapel.png | Bin 0 -> 354 bytes .../Constructible/Misc/decals.rsi/chem.png | Bin 0 -> 431 bytes .../Misc/decals.rsi/chemistry1.png | Bin 0 -> 450 bytes .../Misc/decals.rsi/chemistry2.png | Bin 0 -> 401 bytes .../Constructible/Misc/decals.rsi/cloning.png | Bin 0 -> 418 bytes .../Misc/decals.rsi/commander.png | Bin 0 -> 370 bytes .../Misc/decals.rsi/conference_room.png | Bin 0 -> 356 bytes .../Misc/decals.rsi/corrosives.png | Bin 0 -> 1336 bytes .../Misc/decals.rsi/cryogenics.png | Bin 0 -> 1536 bytes .../Constructible/Misc/decals.rsi/danger.png | Bin 0 -> 1338 bytes .../Misc/decals.rsi/deathsposal.png | Bin 0 -> 461 bytes .../Misc/decals.rsi/direction_bridge.png | Bin 0 -> 436 bytes .../Misc/decals.rsi/direction_eng.png | Bin 0 -> 447 bytes .../Misc/decals.rsi/direction_evac.png | Bin 0 -> 402 bytes .../Misc/decals.rsi/direction_med.png | Bin 0 -> 421 bytes .../Misc/decals.rsi/direction_sci.png | Bin 0 -> 411 bytes .../Misc/decals.rsi/direction_sec.png | Bin 0 -> 372 bytes .../Misc/decals.rsi/direction_supply.png | Bin 0 -> 432 bytes .../Constructible/Misc/decals.rsi/dock.png | Bin 0 -> 432 bytes .../Constructible/Misc/decals.rsi/doors.png | Bin 0 -> 467 bytes .../Constructible/Misc/decals.rsi/drones.png | Bin 0 -> 405 bytes .../Misc/decals.rsi/electrical.png | Bin 0 -> 1153 bytes .../Constructible/Misc/decals.rsi/eng.png | Bin 0 -> 432 bytes .../Constructible/Misc/decals.rsi/engine.png | Bin 0 -> 471 bytes .../Constructible/Misc/decals.rsi/eva.png | Bin 0 -> 387 bytes .../Misc/decals.rsi/examroom.png | Bin 0 -> 494 bytes .../Misc/decals.rsi/explosives.png | Bin 0 -> 1609 bytes .../Constructible/Misc/decals.rsi/fire.png | Bin 0 -> 536 bytes .../Misc/decals.rsi/flammable.png | Bin 0 -> 1203 bytes .../Constructible/Misc/decals.rsi/gravi.png | Bin 0 -> 458 bytes .../Constructible/Misc/decals.rsi/hydro1.png | Bin 0 -> 428 bytes .../Constructible/Misc/decals.rsi/hydro2.png | Bin 0 -> 421 bytes .../Constructible/Misc/decals.rsi/hydro3.png | Bin 0 -> 448 bytes .../Misc/decals.rsi/interrogation.png | Bin 0 -> 395 bytes .../Constructible/Misc/decals.rsi/laser.png | Bin 0 -> 1341 bytes .../Misc/decals.rsi/magnetics.png | Bin 0 -> 1166 bytes .../Constructible/Misc/decals.rsi/mail.png | Bin 0 -> 346 bytes .../Constructible/Misc/decals.rsi/medbay.png | Bin 0 -> 313 bytes .../Constructible/Misc/decals.rsi/memetic.png | Bin 0 -> 1311 bytes .../Constructible/Misc/decals.rsi/meta.json | 893 +++ .../Misc/decals.rsi/miner_dock.png | Bin 0 -> 462 bytes .../Misc/decals.rsi/monkey_painting.png | Bin 0 -> 297 bytes .../Constructible/Misc/decals.rsi/morgue.png | Bin 0 -> 341 bytes .../Misc/decals.rsi/nosmoking.png | Bin 0 -> 345 bytes .../Misc/decals.rsi/nosmoking2.png | Bin 0 -> 546 bytes .../Constructible/Misc/decals.rsi/optical.png | Bin 0 -> 1313 bytes .../Misc/decals.rsi/oxidants.png | Bin 0 -> 1319 bytes .../Constructible/Misc/decals.rsi/pods.png | Bin 0 -> 423 bytes .../Constructible/Misc/decals.rsi/prison.png | Bin 0 -> 320 bytes .../Misc/decals.rsi/radiation.png | Bin 0 -> 1121 bytes .../Constructible/Misc/decals.rsi/rnd.png | Bin 0 -> 390 bytes .../Constructible/Misc/decals.rsi/robo.png | Bin 0 -> 413 bytes .../Constructible/Misc/decals.rsi/sci.png | Bin 0 -> 473 bytes .../Misc/decals.rsi/science1.png | Bin 0 -> 516 bytes .../Misc/decals.rsi/science2.png | Bin 0 -> 422 bytes .../Constructible/Misc/decals.rsi/secure.png | Bin 0 -> 1080 bytes .../Misc/decals.rsi/securearea.png | Bin 0 -> 447 bytes .../Constructible/Misc/decals.rsi/shield.png | Bin 0 -> 402 bytes .../Constructible/Misc/decals.rsi/shock.png | Bin 0 -> 536 bytes .../Misc/decals.rsi/something-old1.png | Bin 0 -> 382 bytes .../Misc/decals.rsi/something-old2.png | Bin 0 -> 439 bytes .../Constructible/Misc/decals.rsi/space.png | Bin 0 -> 515 bytes .../Constructible/Misc/decals.rsi/surgery.png | Bin 0 -> 428 bytes .../Misc/decals.rsi/telecoms.png | Bin 0 -> 466 bytes .../Misc/decals.rsi/toxin_res.png | Bin 0 -> 433 bytes .../Constructible/Misc/decals.rsi/toxins.png | Bin 0 -> 424 bytes .../Misc/decals.rsi/virology.png | Bin 0 -> 468 bytes .../Constructible/Misc/decals.rsi/xenobio.png | Bin 0 -> 609 bytes .../Misc/decals.rsi/xenobio2.png | Bin 0 -> 569 bytes .../Constructible/Misc/decals.rsi/xenolab.png | Bin 0 -> 408 bytes .../Misc/decals.rsi/zumosplaque.png | Bin 0 -> 1085 bytes 94 files changed, 5327 insertions(+), 2524 deletions(-) create mode 100644 Resources/Prototypes/Entities/Constructible/Walls/signs.yml create mode 100644 Resources/Textures/Constructible/Misc/decals.rsi/ai.png create mode 100644 Resources/Textures/Constructible/Misc/decals.rsi/anomaly.png create mode 100644 Resources/Textures/Constructible/Misc/decals.rsi/armory.png create mode 100644 Resources/Textures/Constructible/Misc/decals.rsi/ass.png create mode 100644 Resources/Textures/Constructible/Misc/decals.rsi/atmos.png create mode 100644 Resources/Textures/Constructible/Misc/decals.rsi/atmos_air.png create mode 100644 Resources/Textures/Constructible/Misc/decals.rsi/atmos_co2.png create mode 100644 Resources/Textures/Constructible/Misc/decals.rsi/atmos_n2.png create mode 100644 Resources/Textures/Constructible/Misc/decals.rsi/atmos_n2o.png create mode 100644 Resources/Textures/Constructible/Misc/decals.rsi/atmos_o2.png create mode 100644 Resources/Textures/Constructible/Misc/decals.rsi/atmos_phoron.png create mode 100644 Resources/Textures/Constructible/Misc/decals.rsi/atmos_waste.png create mode 100644 Resources/Textures/Constructible/Misc/decals.rsi/atmosplaque.png create mode 100644 Resources/Textures/Constructible/Misc/decals.rsi/bar.png create mode 100644 Resources/Textures/Constructible/Misc/decals.rsi/biblio.png create mode 100644 Resources/Textures/Constructible/Misc/decals.rsi/bio.png create mode 100644 Resources/Textures/Constructible/Misc/decals.rsi/biohazard.png create mode 100644 Resources/Textures/Constructible/Misc/decals.rsi/bridge.png create mode 100644 Resources/Textures/Constructible/Misc/decals.rsi/canisters.png create mode 100644 Resources/Textures/Constructible/Misc/decals.rsi/cargo.png create mode 100644 Resources/Textures/Constructible/Misc/decals.rsi/cargo_dock.png create mode 100644 Resources/Textures/Constructible/Misc/decals.rsi/chapel.png create mode 100644 Resources/Textures/Constructible/Misc/decals.rsi/chem.png create mode 100644 Resources/Textures/Constructible/Misc/decals.rsi/chemistry1.png create mode 100644 Resources/Textures/Constructible/Misc/decals.rsi/chemistry2.png create mode 100644 Resources/Textures/Constructible/Misc/decals.rsi/cloning.png create mode 100644 Resources/Textures/Constructible/Misc/decals.rsi/commander.png create mode 100644 Resources/Textures/Constructible/Misc/decals.rsi/conference_room.png create mode 100644 Resources/Textures/Constructible/Misc/decals.rsi/corrosives.png create mode 100644 Resources/Textures/Constructible/Misc/decals.rsi/cryogenics.png create mode 100644 Resources/Textures/Constructible/Misc/decals.rsi/danger.png create mode 100644 Resources/Textures/Constructible/Misc/decals.rsi/deathsposal.png create mode 100644 Resources/Textures/Constructible/Misc/decals.rsi/direction_bridge.png create mode 100644 Resources/Textures/Constructible/Misc/decals.rsi/direction_eng.png create mode 100644 Resources/Textures/Constructible/Misc/decals.rsi/direction_evac.png create mode 100644 Resources/Textures/Constructible/Misc/decals.rsi/direction_med.png create mode 100644 Resources/Textures/Constructible/Misc/decals.rsi/direction_sci.png create mode 100644 Resources/Textures/Constructible/Misc/decals.rsi/direction_sec.png create mode 100644 Resources/Textures/Constructible/Misc/decals.rsi/direction_supply.png create mode 100644 Resources/Textures/Constructible/Misc/decals.rsi/dock.png create mode 100644 Resources/Textures/Constructible/Misc/decals.rsi/doors.png create mode 100644 Resources/Textures/Constructible/Misc/decals.rsi/drones.png create mode 100644 Resources/Textures/Constructible/Misc/decals.rsi/electrical.png create mode 100644 Resources/Textures/Constructible/Misc/decals.rsi/eng.png create mode 100644 Resources/Textures/Constructible/Misc/decals.rsi/engine.png create mode 100644 Resources/Textures/Constructible/Misc/decals.rsi/eva.png create mode 100644 Resources/Textures/Constructible/Misc/decals.rsi/examroom.png create mode 100644 Resources/Textures/Constructible/Misc/decals.rsi/explosives.png create mode 100644 Resources/Textures/Constructible/Misc/decals.rsi/fire.png create mode 100644 Resources/Textures/Constructible/Misc/decals.rsi/flammable.png create mode 100644 Resources/Textures/Constructible/Misc/decals.rsi/gravi.png create mode 100644 Resources/Textures/Constructible/Misc/decals.rsi/hydro1.png create mode 100644 Resources/Textures/Constructible/Misc/decals.rsi/hydro2.png create mode 100644 Resources/Textures/Constructible/Misc/decals.rsi/hydro3.png create mode 100644 Resources/Textures/Constructible/Misc/decals.rsi/interrogation.png create mode 100644 Resources/Textures/Constructible/Misc/decals.rsi/laser.png create mode 100644 Resources/Textures/Constructible/Misc/decals.rsi/magnetics.png create mode 100644 Resources/Textures/Constructible/Misc/decals.rsi/mail.png create mode 100644 Resources/Textures/Constructible/Misc/decals.rsi/medbay.png create mode 100644 Resources/Textures/Constructible/Misc/decals.rsi/memetic.png create mode 100644 Resources/Textures/Constructible/Misc/decals.rsi/meta.json create mode 100644 Resources/Textures/Constructible/Misc/decals.rsi/miner_dock.png create mode 100644 Resources/Textures/Constructible/Misc/decals.rsi/monkey_painting.png create mode 100644 Resources/Textures/Constructible/Misc/decals.rsi/morgue.png create mode 100644 Resources/Textures/Constructible/Misc/decals.rsi/nosmoking.png create mode 100644 Resources/Textures/Constructible/Misc/decals.rsi/nosmoking2.png create mode 100644 Resources/Textures/Constructible/Misc/decals.rsi/optical.png create mode 100644 Resources/Textures/Constructible/Misc/decals.rsi/oxidants.png create mode 100644 Resources/Textures/Constructible/Misc/decals.rsi/pods.png create mode 100644 Resources/Textures/Constructible/Misc/decals.rsi/prison.png create mode 100644 Resources/Textures/Constructible/Misc/decals.rsi/radiation.png create mode 100644 Resources/Textures/Constructible/Misc/decals.rsi/rnd.png create mode 100644 Resources/Textures/Constructible/Misc/decals.rsi/robo.png create mode 100644 Resources/Textures/Constructible/Misc/decals.rsi/sci.png create mode 100644 Resources/Textures/Constructible/Misc/decals.rsi/science1.png create mode 100644 Resources/Textures/Constructible/Misc/decals.rsi/science2.png create mode 100644 Resources/Textures/Constructible/Misc/decals.rsi/secure.png create mode 100644 Resources/Textures/Constructible/Misc/decals.rsi/securearea.png create mode 100644 Resources/Textures/Constructible/Misc/decals.rsi/shield.png create mode 100644 Resources/Textures/Constructible/Misc/decals.rsi/shock.png create mode 100644 Resources/Textures/Constructible/Misc/decals.rsi/something-old1.png create mode 100644 Resources/Textures/Constructible/Misc/decals.rsi/something-old2.png create mode 100644 Resources/Textures/Constructible/Misc/decals.rsi/space.png create mode 100644 Resources/Textures/Constructible/Misc/decals.rsi/surgery.png create mode 100644 Resources/Textures/Constructible/Misc/decals.rsi/telecoms.png create mode 100644 Resources/Textures/Constructible/Misc/decals.rsi/toxin_res.png create mode 100644 Resources/Textures/Constructible/Misc/decals.rsi/toxins.png create mode 100644 Resources/Textures/Constructible/Misc/decals.rsi/virology.png create mode 100644 Resources/Textures/Constructible/Misc/decals.rsi/xenobio.png create mode 100644 Resources/Textures/Constructible/Misc/decals.rsi/xenobio2.png create mode 100644 Resources/Textures/Constructible/Misc/decals.rsi/xenolab.png create mode 100644 Resources/Textures/Constructible/Misc/decals.rsi/zumosplaque.png diff --git a/Resources/Maps/saltern.yml b/Resources/Maps/saltern.yml index ff9e52ed2e..33a2d4eb9b 100644 --- a/Resources/Maps/saltern.yml +++ b/Resources/Maps/saltern.yml @@ -112,9 +112,9 @@ grids: - ind: "-1,-2" tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAAD4AAAA+AAAAPgAAAD4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4AAAA6AAAAOgAAADoAAAA+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAAD4AAAA+AAAAOgAAADoAAAA6AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA6AAAAOgAAADoAAAA6AAAAOgAAADoAAAA6AAAAOgAAADoAAAA6AAAAOgAAADoAAAA0AAAANAAAADQAAAA+AAAAPQAAAD0AAAA9AAAAPQAAAD0AAAA9AAAAPQAAAD0AAAA9AAAAPQAAAD0AAAA9AAAANAAAADQAAAA0AAAAPgAAAD0AAAA+AAAAOgAAADoAAAA6AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPQAAADQAAAA0AAAANAAAAD4AAAA9AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA7AAAAOwAAADsAAAA7AAAAPgAAAD0AAAA7AAAAOwAAAD4AAAA+AAAAPQAAAD4AAAA6AAAAOgAAADoAAAA+AAAAOwAAADsAAAA7AAAAOwAAAD4AAAA9AAAAOwAAADsAAAA7AAAAPgAAAD0AAAA+AAAAOgAAADoAAAA6AAAAPgAAADsAAAA7AAAAOwAAADsAAAA+AAAAPQAAADsAAAA7AAAAOwAAAD4AAAA6AAAAPgAAAD4AAAA7AAAAPgAAAD4AAAA+AAAAPgAAADsAAAA+AAAAPgAAAD4AAAA7AAAAOwAAADsAAAA7AAAAOwAAADsAAAA7AAAAOwAAADsAAAA7AAAAOwAAADsAAAA7AAAAOwAAADsAAAA7AAAAOwAAADsAAAA7AAAAOwAAADsAAAA7AAAAOwAAADsAAAA7AAAAOwAAADsAAAA7AAAAOwAAADsAAAA7AAAAOwAAADsAAAA7AAAAOwAAAD4AAAA7AAAAOwAAADsAAAA7AAAAOwAAAD4AAAA+AAAAPgAAADsAAAA+AAAAPgAAAD4AAAA7AAAAOwAAADsAAAA+AAAAOwAAADsAAAA7AAAAOwAAADsAAAA+AAAAOwAAADsAAAA7AAAAOwAAADsAAAA7AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAADsAAAA7AAAAOwAAADsAAAA7AAAAOwAAAA== - ind: "-2,-2" - tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+AAAAPgAAAD4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAADQAAAA0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4AAAA0AAAANAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+AAAANAAAADQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAAD4AAAA7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4AAAA7AAAAOwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+AAAAOwAAADsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAADsAAAA7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4AAAA7AAAAOwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+AAAAOwAAADsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAADsAAAA7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAAD4AAAA+AAAAOgAAAA== + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+AAAAPgAAAD4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAADQAAAA0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4AAAA0AAAANAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+AAAANAAAADQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAAD4AAAA7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4AAAA7AAAAOwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+AAAAOwAAADsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAADsAAAA7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4AAAA7AAAAOwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+AAAAOwAAADsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAADsAAAA7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAAD4AAAA+AAAAOgAAAA== - ind: "-2,-1" - tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAA4AAAAOAAAADgAAAA4AAAAPgAAAD0AAAA6AAAAPQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4AAAAOAAAADgAAAA4AAAAOAAAAD4AAAA9AAAAPQAAAD0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAADgAAAA4AAAAOAAAADgAAAA+AAAAPQAAADoAAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD0AAAA6AAAAPgAAAD0AAAA9AAAAPQAAAD0AAAA9AAAAPQAAAD0AAAA9AAAAPQAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAOgAAAD4AAAA6AAAAOgAAADoAAAA6AAAAOgAAADoAAAA6AAAAOgAAAD0AAAA6AAAAOgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA6AAAAPgAAAD4AAAA+AAAAOAAAADgAAAA4AAAAPgAAAD4AAAA4AAAAOAAAADgAAAA4AAAAPgAAADgAAAA4AAAAOAAAADgAAAA4AAAAPgAAADgAAAA4AAAAOAAAAD4AAAA+AAAAOAAAADgAAAA4AAAAOAAAAD4AAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA6AAAAOgAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA4AAAAOAAAADgAAAA4AAAAPgAAADgAAAA4AAAAOAAAADgAAAA+AAAAOAAAADgAAAA4AAAAPgAAAD0AAAA+AAAAOAAAADgAAAA4AAAAOAAAAD4AAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAAD4AAAA9AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAOAAAADgAAAA4AAAAOAAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAOAAAAD4AAAA4AAAAOAAAADgAAAA4AAAAPgAAADgAAAA4AAAAOAAAADgAAAA+AAAAOAAAADgAAAA4AAAAOAAAADgAAAA+AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAPgAAADgAAAA4AAAAOAAAADgAAAA4AAAAPgAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAAD4AAAA4AAAAOAAAADgAAAA4AAAAOAAAAA== + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAPgAAAD0AAAA6AAAAPQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAAD4AAAA9AAAAPQAAAD0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA+AAAAPQAAADoAAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAOAAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD0AAAA6AAAAPgAAAD0AAAA9AAAAPQAAAD0AAAA9AAAAPQAAAD0AAAA9AAAAPQAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAOgAAAD4AAAA6AAAAOgAAADoAAAA6AAAAOgAAADoAAAA6AAAAOgAAAD0AAAA6AAAAOgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA6AAAAPgAAAD4AAAA+AAAAOAAAADgAAAA4AAAAPgAAAD4AAAA4AAAAOAAAADgAAAA4AAAAPgAAADgAAAA4AAAAOAAAADgAAAA4AAAAPgAAADgAAAA4AAAAOAAAAD4AAAA+AAAAOAAAADgAAAA4AAAAOAAAAD4AAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA6AAAAOgAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA4AAAAOAAAADgAAAA4AAAAPgAAADgAAAA4AAAAOAAAADgAAAA+AAAAOAAAADgAAAA4AAAAPgAAAD0AAAA+AAAAOAAAADgAAAA4AAAAOAAAAD4AAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAAD4AAAA9AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAOAAAADgAAAA4AAAAOAAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAOAAAAD4AAAA4AAAAOAAAADgAAAA4AAAAPgAAADgAAAA4AAAAOAAAADgAAAA+AAAAOAAAADgAAAA4AAAAOAAAADgAAAA+AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAPgAAADgAAAA4AAAAOAAAADgAAAA4AAAAPgAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAAD4AAAA4AAAAOAAAADgAAAA4AAAAOAAAAA== - ind: "-3,0" tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAADgAAAA4AAAAOAAAAD4AAAA9AAAAPQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+AAAAPgAAAD4AAAA4AAAAOAAAADgAAAA+AAAAPgAAAD0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAAD4AAAA6AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAAD4AAAA+AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADoAAAA6AAAAOgAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+AAAAPgAAAD4AAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4AAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA+AAAAPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4AAAA+AAAAPgAAADgAAAA4AAAAOAAAADgAAAA4AAAAPgAAAD0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA6AAAAOgAAADoAAAA4AAAAOAAAADgAAAA4AAAAOAAAADoAAAA9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAAD4AAAA+AAAAOAAAADgAAAA4AAAAOAAAADgAAAA+AAAAPQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAPgAAAD0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+AAAAPQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAAD0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4AAAA9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+AAAAPgAAAA== - ind: "-4,0" @@ -319,8 +319,8 @@ entities: type: Collidable - uid: 15 components: - - type: MetaData - name: Saltern Station + - name: Saltern Station + type: MetaData - parent: null type: Transform - index: 0 @@ -333,7 +333,7 @@ entities: - volume: 2500 moles: - 21.824879 - - 82.103120 + - 82.10312 - 0 - 0 - 0 @@ -16069,12 +16069,14 @@ entities: rot: -1.5707963267948966 rad type: Transform - uid: 711 - type: solid_wall + type: WeldingFuelTank components: - parent: 15 - pos: -25.5,-15.5 - rot: -1.5707963267948966 rad + pos: 33.5,12.5 + rot: 1.5707963267948966 rad type: Transform + - anchored: False + type: Collidable - uid: 712 type: Table components: @@ -16257,10 +16259,10 @@ entities: rot: -1.5707963267948966 rad type: Transform - uid: 738 - type: solid_wall + type: SignHead components: - parent: 15 - pos: -23.5,-16.5 + pos: -9.687853,18.5 rot: -1.5707963267948966 rad type: Transform - uid: 739 @@ -16711,14 +16713,11 @@ entities: rot: -1.5707963267948966 rad type: Transform - uid: 797 - type: WaterTankFull + type: VendingMachineDinnerware components: - parent: 15 - pos: -1.5,-6.5 - rot: -1.5707963267948966 rad + pos: -11.5,-3.5 type: Transform - - anchored: False - type: Collidable - uid: 798 type: solid_wall components: @@ -17600,7 +17599,7 @@ entities: type: LowWall components: - parent: 15 - pos: 24.5,14.5 + pos: 21.5,14.5 rot: -1.5707963267948966 rad type: Transform - uid: 924 @@ -17625,10 +17624,10 @@ entities: rot: -1.5707963267948966 rad type: Transform - uid: 927 - type: LowWall + type: ReinforcedWindow components: - parent: 15 - pos: 18.5,14.5 + pos: 21.5,15.5 rot: -1.5707963267948966 rad type: Transform - uid: 928 @@ -17793,627 +17792,619 @@ entities: rot: -1.5707963267948966 rad type: Transform - uid: 951 - type: LowWall + type: SignDirectionalBridge components: - parent: 15 - pos: 21.5,14.5 - rot: -1.5707963267948966 rad + pos: -20.49181,6.256847 type: Transform - uid: 952 - type: LowWall + type: SignDirectionalSec components: - parent: 15 - pos: 21.5,15.5 - rot: -1.5707963267948966 rad + pos: 5.9947615,6.5 + rot: 3.141592653589793 rad type: Transform - uid: 953 - type: LowWall - components: - - parent: 15 - pos: 21.5,16.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 954 type: LowWall components: - parent: 15 pos: 19.5,15.5 rot: -1.5707963267948966 rad type: Transform -- uid: 955 - type: LowWall +- uid: 954 + type: solid_wall components: - parent: 15 - pos: 26.5,14.5 + pos: -0.5,-7.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 955 + type: solid_wall + components: + - parent: 15 + pos: -19.5,-16.5 rot: -1.5707963267948966 rad type: Transform - uid: 956 - type: LowWall + type: solid_wall components: - parent: 15 - pos: 27.5,14.5 + pos: -21.5,-16.5 rot: -1.5707963267948966 rad type: Transform - uid: 957 - type: LowWall - components: - - parent: 15 - pos: 28.5,14.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 958 type: solid_wall components: - parent: 15 pos: 17.5,12.5 rot: -1.5707963267948966 rad type: Transform -- uid: 959 +- uid: 958 type: solid_wall components: - parent: 15 pos: 17.5,13.5 rot: -1.5707963267948966 rad type: Transform -- uid: 960 +- uid: 959 type: solid_wall components: - parent: 15 pos: 17.5,14.5 rot: -1.5707963267948966 rad type: Transform -- uid: 961 +- uid: 960 type: solid_wall components: - parent: 15 pos: 17.5,15.5 rot: -1.5707963267948966 rad type: Transform -- uid: 962 +- uid: 961 type: solid_wall components: - parent: 15 pos: 16.5,16.5 rot: -1.5707963267948966 rad type: Transform -- uid: 963 +- uid: 962 type: solid_wall components: - parent: 15 pos: 17.5,16.5 rot: -1.5707963267948966 rad type: Transform -- uid: 964 +- uid: 963 type: solid_wall components: - parent: 15 pos: 16.5,13.5 rot: -1.5707963267948966 rad type: Transform -- uid: 965 +- uid: 964 type: solid_wall components: - parent: 15 pos: 15.5,13.5 rot: -1.5707963267948966 rad type: Transform -- uid: 966 +- uid: 965 type: solid_wall components: - parent: 15 pos: 14.5,13.5 rot: -1.5707963267948966 rad type: Transform -- uid: 967 +- uid: 966 type: solid_wall components: - parent: 15 pos: 13.5,13.5 rot: -1.5707963267948966 rad type: Transform -- uid: 968 +- uid: 967 type: solid_wall components: - parent: 15 pos: 12.5,13.5 rot: -1.5707963267948966 rad type: Transform -- uid: 969 +- uid: 968 type: solid_wall components: - parent: 15 pos: 11.5,13.5 rot: -1.5707963267948966 rad type: Transform -- uid: 970 +- uid: 969 type: reinforced_wall components: - parent: 15 pos: 11.5,12.5 rot: -1.5707963267948966 rad type: Transform -- uid: 971 +- uid: 970 type: reinforced_wall components: - parent: 15 pos: 10.5,12.5 rot: -1.5707963267948966 rad type: Transform -- uid: 972 +- uid: 971 type: reinforced_wall components: - parent: 15 pos: 9.5,12.5 rot: -1.5707963267948966 rad type: Transform -- uid: 973 +- uid: 972 type: reinforced_wall components: - parent: 15 pos: 7.5,12.5 rot: -1.5707963267948966 rad type: Transform -- uid: 974 +- uid: 973 type: reinforced_wall components: - parent: 15 pos: 6.5,12.5 rot: -1.5707963267948966 rad type: Transform -- uid: 975 +- uid: 974 type: reinforced_wall components: - parent: 15 pos: 5.5,12.5 rot: -1.5707963267948966 rad type: Transform -- uid: 976 +- uid: 975 type: reinforced_wall components: - parent: 15 pos: 5.5,11.5 rot: -1.5707963267948966 rad type: Transform -- uid: 977 +- uid: 976 type: reinforced_wall components: - parent: 15 pos: 5.5,10.5 rot: -1.5707963267948966 rad type: Transform -- uid: 978 +- uid: 977 type: reinforced_wall components: - parent: 15 pos: 5.5,9.5 rot: -1.5707963267948966 rad type: Transform -- uid: 979 +- uid: 978 type: reinforced_wall components: - parent: 15 pos: 5.5,8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 980 +- uid: 979 type: reinforced_wall components: - parent: 15 pos: 5.5,7.5 rot: -1.5707963267948966 rad type: Transform -- uid: 981 +- uid: 980 type: reinforced_wall components: - parent: 15 pos: 5.5,6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 982 +- uid: 981 type: reinforced_wall components: - parent: 15 pos: 11.5,6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 983 +- uid: 982 type: reinforced_wall components: - parent: 15 pos: 11.5,11.5 rot: -1.5707963267948966 rad type: Transform -- uid: 984 +- uid: 983 type: reinforced_wall components: - parent: 15 pos: 11.5,10.5 rot: -1.5707963267948966 rad type: Transform -- uid: 985 +- uid: 984 type: reinforced_wall components: - parent: 15 pos: 11.5,9.5 rot: -1.5707963267948966 rad type: Transform -- uid: 986 +- uid: 985 type: reinforced_wall components: - parent: 15 pos: 11.5,8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 987 +- uid: 986 type: reinforced_wall components: - parent: 15 pos: 11.5,7.5 rot: -1.5707963267948966 rad type: Transform -- uid: 988 +- uid: 987 type: reinforced_wall components: - parent: 15 pos: 10.5,6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 989 +- uid: 988 type: reinforced_wall components: - parent: 15 pos: 6.5,6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 990 +- uid: 989 type: LowWall components: - parent: 15 pos: 8.5,6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 991 +- uid: 990 type: solid_wall components: - parent: 15 pos: 14.5,15.5 rot: -1.5707963267948966 rad type: Transform -- uid: 992 +- uid: 991 type: solid_wall components: - parent: 15 pos: 14.5,16.5 rot: -1.5707963267948966 rad type: Transform -- uid: 993 +- uid: 992 type: solid_wall components: - parent: 15 pos: 14.5,17.5 rot: -1.5707963267948966 rad type: Transform -- uid: 994 +- uid: 993 type: ReinforcedWindow components: - parent: 15 pos: 19.5,14.5 rot: -1.5707963267948966 rad type: Transform -- uid: 995 +- uid: 994 type: ReinforcedWindow components: - parent: 15 pos: 19.5,15.5 rot: -1.5707963267948966 rad type: Transform -- uid: 996 +- uid: 995 type: ReinforcedWindow components: - parent: 15 pos: 19.5,16.5 rot: -1.5707963267948966 rad type: Transform -- uid: 997 +- uid: 996 type: solid_wall components: - parent: 15 pos: 14.5,21.5 rot: -1.5707963267948966 rad type: Transform -- uid: 998 +- uid: 997 type: solid_wall components: - parent: 15 pos: 14.5,22.5 rot: -1.5707963267948966 rad type: Transform -- uid: 999 +- uid: 998 type: solid_wall components: - parent: 15 pos: 13.5,22.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1000 +- uid: 999 type: solid_wall components: - parent: 15 pos: 12.5,22.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1001 +- uid: 1000 type: solid_wall components: - parent: 15 pos: 11.5,22.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1002 +- uid: 1001 type: solid_wall components: - parent: 15 pos: 11.5,21.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1003 +- uid: 1002 type: solid_wall components: - parent: 15 pos: 11.5,19.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1004 +- uid: 1003 type: solid_wall components: - parent: 15 pos: 11.5,18.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1005 +- uid: 1004 type: solid_wall components: - parent: 15 pos: 11.5,17.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1006 +- uid: 1005 type: solid_wall components: - parent: 15 pos: 11.5,16.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1007 +- uid: 1006 type: solid_wall components: - parent: 15 pos: 11.5,15.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1008 +- uid: 1007 type: solid_wall components: - parent: 15 pos: 10.5,15.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1009 +- uid: 1008 type: solid_wall components: - parent: 15 pos: 9.5,15.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1010 +- uid: 1009 type: Wire components: - parent: 15 pos: 8.5,16.5 type: Transform -- uid: 1011 +- uid: 1010 type: Wire components: - parent: 15 pos: 8.5,17.5 type: Transform -- uid: 1012 +- uid: 1011 type: solid_wall components: - parent: 15 pos: 6.5,15.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1013 +- uid: 1012 type: solid_wall components: - parent: 15 pos: 5.5,15.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1014 +- uid: 1013 type: solid_wall components: - parent: 15 pos: 6.5,16.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1015 +- uid: 1014 type: solid_wall components: - parent: 15 pos: 5.5,13.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1016 +- uid: 1015 type: solid_wall components: - parent: 15 pos: 6.5,21.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1017 +- uid: 1016 type: reinforced_wall components: - parent: 15 pos: 10.5,22.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1018 +- uid: 1017 type: reinforced_wall components: - parent: 15 pos: 9.5,22.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1019 +- uid: 1018 type: reinforced_wall components: - parent: 15 pos: 8.5,22.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1020 +- uid: 1019 type: reinforced_wall components: - parent: 15 pos: 7.5,22.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1021 +- uid: 1020 type: reinforced_wall components: - parent: 15 pos: 6.5,22.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1022 +- uid: 1021 type: reinforced_wall components: - parent: 15 pos: 5.5,22.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1023 +- uid: 1022 type: reinforced_wall components: - parent: 15 pos: 10.5,23.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1024 +- uid: 1023 type: reinforced_wall components: - parent: 15 pos: 10.5,24.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1025 +- uid: 1024 type: reinforced_wall components: - parent: 15 pos: 10.5,25.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1026 +- uid: 1025 type: reinforced_wall components: - parent: 15 pos: 10.5,26.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1027 +- uid: 1026 type: reinforced_wall components: - parent: 15 pos: 10.5,27.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1028 +- uid: 1027 type: reinforced_wall components: - parent: 15 pos: 10.5,28.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1029 +- uid: 1028 type: reinforced_wall components: - parent: 15 pos: 10.5,30.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1030 +- uid: 1029 type: reinforced_wall components: - parent: 15 pos: 10.5,31.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1031 +- uid: 1030 type: reinforced_wall components: - parent: 15 pos: -3.5,31.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1032 +- uid: 1031 type: reinforced_wall components: - parent: 15 pos: -3.5,30.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1033 +- uid: 1032 type: reinforced_wall components: - parent: 15 pos: -3.5,28.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1034 +- uid: 1033 type: reinforced_wall components: - parent: 15 pos: -3.5,27.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1035 +- uid: 1034 type: reinforced_wall components: - parent: 15 pos: -3.5,26.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1036 +- uid: 1035 type: reinforced_wall components: - parent: 15 pos: -3.5,25.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1037 +- uid: 1036 type: reinforced_wall components: - parent: 15 pos: 1.5,22.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1038 +- uid: 1037 type: reinforced_wall components: - parent: 15 pos: 0.5,22.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1039 +- uid: 1038 type: reinforced_wall components: - parent: 15 pos: -0.5,22.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1040 +- uid: 1039 type: AirlockCommandLocked components: - name: Head of Personnel's Office @@ -18425,1637 +18416,1644 @@ entities: - access: - - HeadOfPersonnel type: AccessReader -- uid: 1041 +- uid: 1040 type: reinforced_wall components: - parent: 15 pos: -2.5,22.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1042 +- uid: 1041 type: reinforced_wall components: - parent: 15 pos: -3.5,22.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1043 +- uid: 1042 type: reinforced_wall components: - parent: 15 pos: -3.5,23.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1044 +- uid: 1043 type: reinforced_wall components: - parent: 15 pos: -3.5,24.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1045 +- uid: 1044 type: solid_wall components: - parent: 15 pos: 1.5,26.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1046 +- uid: 1045 type: solid_wall components: - parent: 15 pos: 1.5,27.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1047 +- uid: 1046 type: solid_wall components: - parent: 15 pos: 0.5,27.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1048 +- uid: 1047 type: solid_wall components: - parent: 15 pos: -2.5,27.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1049 +- uid: 1048 type: solid_wall components: - parent: 15 pos: 1.5,23.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1050 +- uid: 1049 type: solid_wall components: - parent: 15 pos: 5.5,23.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1051 +- uid: 1050 type: solid_wall components: - parent: 15 pos: 5.5,24.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1052 +- uid: 1051 type: solid_wall components: - parent: 15 pos: 5.5,26.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1053 +- uid: 1052 type: solid_wall components: - parent: 15 pos: 5.5,27.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1054 +- uid: 1053 type: solid_wall components: - parent: 15 pos: 6.5,27.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1055 +- uid: 1054 type: solid_wall components: - parent: 15 pos: 7.5,27.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1056 +- uid: 1055 type: solid_wall components: - parent: 15 pos: 8.5,27.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1057 +- uid: 1056 type: solid_wall components: - parent: 15 pos: 9.5,27.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1058 +- uid: 1057 type: LowWall components: - parent: 15 pos: 3.5,22.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1059 +- uid: 1058 type: LowWall components: - parent: 15 pos: -1.5,27.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1060 +- uid: 1059 type: LowWall components: - parent: 15 pos: -0.5,27.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1061 +- uid: 1060 type: LowWall components: - parent: 15 pos: -3.5,29.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1062 +- uid: 1061 type: LowWall components: - parent: 15 pos: 10.5,29.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1063 +- uid: 1062 type: LowWall components: - parent: 15 pos: 9.5,31.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1064 +- uid: 1063 type: LowWall components: - parent: 15 pos: 9.5,32.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1065 +- uid: 1064 type: LowWall components: - parent: 15 pos: 8.5,32.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1066 +- uid: 1065 type: LowWall components: - parent: 15 pos: 8.5,33.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1067 +- uid: 1066 type: LowWall components: - parent: 15 pos: 7.5,33.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1068 +- uid: 1067 type: LowWall components: - parent: 15 pos: 6.5,33.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1069 +- uid: 1068 type: LowWall components: - parent: 15 pos: 5.5,33.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1070 +- uid: 1069 type: LowWall components: - parent: 15 pos: 4.5,33.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1071 +- uid: 1070 type: LowWall components: - parent: 15 pos: 3.5,33.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1072 +- uid: 1071 type: LowWall components: - parent: 15 pos: 2.5,33.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1073 +- uid: 1072 type: LowWall components: - parent: 15 pos: 1.5,33.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1074 +- uid: 1073 type: LowWall components: - parent: 15 pos: 0.5,33.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1075 +- uid: 1074 type: LowWall components: - parent: 15 pos: -0.5,33.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1076 +- uid: 1075 type: LowWall components: - parent: 15 pos: -1.5,33.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1077 +- uid: 1076 type: LowWall components: - parent: 15 pos: -1.5,32.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1078 +- uid: 1077 type: LowWall components: - parent: 15 pos: -2.5,31.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1079 +- uid: 1078 type: LowWall components: - parent: 15 pos: -2.5,32.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1080 +- uid: 1079 type: LowWall components: - parent: 15 pos: 6.5,19.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1081 +- uid: 1080 type: LowWall components: - parent: 15 pos: 6.5,18.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1082 +- uid: 1081 type: reinforced_wall components: - parent: 15 pos: 1.5,15.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1083 +- uid: 1082 type: reinforced_wall components: - parent: 15 pos: 0.5,15.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1084 +- uid: 1083 type: reinforced_wall components: - parent: 15 pos: -0.5,15.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1085 +- uid: 1084 type: reinforced_wall components: - parent: 15 pos: -1.5,15.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1086 +- uid: 1085 type: reinforced_wall components: - parent: 15 pos: -2.5,15.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1087 +- uid: 1086 type: reinforced_wall components: - parent: 15 pos: -3.5,15.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1088 +- uid: 1087 type: reinforced_wall components: - parent: 15 pos: -4.5,15.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1089 +- uid: 1088 type: reinforced_wall components: - parent: 15 pos: -4.5,16.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1090 +- uid: 1089 type: reinforced_wall components: - parent: 15 pos: -4.5,17.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1091 +- uid: 1090 type: reinforced_wall components: - parent: 15 pos: -4.5,18.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1092 +- uid: 1091 type: reinforced_wall components: - parent: 15 pos: -4.5,19.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1093 +- uid: 1092 type: reinforced_wall components: - parent: 15 pos: -5.5,19.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1094 +- uid: 1093 type: LowWall components: - parent: 15 pos: -7.5,18.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1095 +- uid: 1094 type: reinforced_wall components: - parent: 15 pos: -3.5,19.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1096 +- uid: 1095 type: reinforced_wall components: - parent: 15 pos: -2.5,19.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1097 +- uid: 1096 type: reinforced_wall components: - parent: 15 pos: -1.5,19.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1098 +- uid: 1097 type: reinforced_wall components: - parent: 15 pos: -0.5,19.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1099 +- uid: 1098 type: reinforced_wall components: - parent: 15 pos: 0.5,19.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1100 +- uid: 1099 type: reinforced_wall components: - parent: 15 pos: 0.5,18.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1101 +- uid: 1100 type: reinforced_wall components: - parent: 15 pos: 0.5,16.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1102 +- uid: 1101 type: reinforced_wall components: - parent: 15 pos: -5.5,20.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1103 +- uid: 1102 type: reinforced_wall components: - parent: 15 pos: -5.5,21.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1104 +- uid: 1103 type: reinforced_wall components: - parent: 15 pos: -5.5,22.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1105 +- uid: 1104 type: reinforced_wall components: - parent: 15 pos: -6.5,22.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1106 +- uid: 1105 type: reinforced_wall components: - parent: 15 pos: -7.5,22.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1107 +- uid: 1106 type: reinforced_wall components: - parent: 15 pos: -8.5,22.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1108 +- uid: 1107 type: reinforced_wall components: - parent: 15 pos: -9.5,22.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1109 +- uid: 1108 type: Wire components: - parent: 15 pos: -13.5,15.5 rot: 1.5707963267948966 rad type: Transform -- uid: 1110 +- uid: 1109 type: reinforced_wall components: - parent: 15 pos: -11.5,22.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1111 +- uid: 1110 type: reinforced_wall components: - parent: 15 pos: -12.5,22.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1112 +- uid: 1111 type: reinforced_wall components: - parent: 15 pos: -13.5,22.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1113 +- uid: 1112 type: reinforced_wall components: - parent: 15 pos: -14.5,22.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1114 +- uid: 1113 type: reinforced_wall components: - parent: 15 pos: -15.5,22.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1115 +- uid: 1114 type: reinforced_wall components: - parent: 15 pos: -16.5,22.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1116 +- uid: 1115 type: reinforced_wall components: - parent: 15 pos: -16.5,23.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1117 +- uid: 1116 type: reinforced_wall components: - parent: 15 pos: -15.5,23.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1118 +- uid: 1117 type: reinforced_wall components: - parent: 15 pos: -14.5,23.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1119 +- uid: 1118 type: reinforced_wall components: - parent: 15 pos: -13.5,23.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1120 +- uid: 1119 type: reinforced_wall components: - parent: 15 pos: -12.5,23.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1121 +- uid: 1120 type: reinforced_wall components: - parent: 15 pos: -11.5,23.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1122 +- uid: 1121 type: reinforced_wall components: - parent: 15 pos: -10.5,23.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1123 +- uid: 1122 type: Wire components: - parent: 15 pos: -9.5,26.5 rot: 1.5707963267948966 rad type: Transform -- uid: 1124 +- uid: 1123 type: reinforced_wall components: - parent: 15 pos: -16.5,21.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1125 +- uid: 1124 type: reinforced_wall components: - parent: 15 pos: -16.5,20.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1126 +- uid: 1125 type: reinforced_wall components: - parent: 15 pos: -16.5,19.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1127 +- uid: 1126 type: reinforced_wall components: - parent: 15 pos: -16.5,18.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1128 +- uid: 1127 type: reinforced_wall components: - parent: 15 pos: -16.5,17.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1129 +- uid: 1128 type: reinforced_wall components: - parent: 15 pos: -15.5,21.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1130 +- uid: 1129 type: reinforced_wall components: - parent: 15 pos: -15.5,20.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1131 +- uid: 1130 type: reinforced_wall components: - parent: 15 pos: -15.5,19.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1132 +- uid: 1131 type: reinforced_wall components: - parent: 15 pos: -15.5,18.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1133 +- uid: 1132 type: reinforced_wall components: - parent: 15 pos: -15.5,17.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1134 +- uid: 1133 type: reinforced_wall components: - parent: 15 pos: -14.5,17.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1135 +- uid: 1134 type: reinforced_wall components: - parent: 15 pos: -13.5,17.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1136 +- uid: 1135 type: reinforced_wall components: - parent: 15 pos: -11.5,17.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1137 +- uid: 1136 type: reinforced_wall components: - parent: 15 pos: -10.5,17.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1138 +- uid: 1137 type: reinforced_wall components: - parent: 15 pos: -10.5,18.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1139 +- uid: 1138 type: reinforced_wall components: - parent: 15 pos: -10.5,19.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1140 +- uid: 1139 type: reinforced_wall components: - parent: 15 pos: -14.5,8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1141 +- uid: 1140 type: reinforced_wall components: - parent: 15 pos: -14.5,7.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1142 +- uid: 1141 type: reinforced_wall components: - parent: 15 pos: -14.5,6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1143 +- uid: 1142 type: reinforced_wall components: - parent: 15 pos: -13.5,6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1144 +- uid: 1143 type: reinforced_wall components: - parent: 15 pos: -12.5,6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1145 +- uid: 1144 type: reinforced_wall components: - parent: 15 pos: -11.5,6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1146 +- uid: 1145 type: reinforced_wall components: - parent: 15 pos: -10.5,6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1147 +- uid: 1146 type: reinforced_wall components: - parent: 15 pos: -10.5,7.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1148 +- uid: 1147 type: reinforced_wall components: - parent: 15 pos: -10.5,8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1149 +- uid: 1148 type: reinforced_wall components: - parent: 15 pos: -10.5,9.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1150 +- uid: 1149 type: reinforced_wall components: - parent: 15 pos: -14.5,12.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1151 +- uid: 1150 type: reinforced_wall components: - parent: 15 pos: -15.5,12.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1152 +- uid: 1151 type: reinforced_wall components: - parent: 15 pos: -15.5,13.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1153 +- uid: 1152 type: reinforced_wall components: - parent: 15 pos: -15.5,14.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1154 +- uid: 1153 type: reinforced_wall components: - parent: 15 pos: -15.5,15.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1155 +- uid: 1154 type: AirlockMaintSecLocked components: - parent: 15 pos: -14.5,11.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1156 +- uid: 1155 type: reinforced_wall components: - parent: 15 pos: -14.5,10.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1157 +- uid: 1156 type: reinforced_wall components: - parent: 15 pos: -14.5,9.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1158 +- uid: 1157 type: solid_wall components: - parent: 15 pos: -6.5,18.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1159 +- uid: 1158 type: LowWall components: - parent: 15 pos: -10.5,14.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1160 +- uid: 1159 type: solid_wall components: - parent: 15 pos: -9.5,18.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1161 +- uid: 1160 type: solid_wall components: - parent: 15 pos: -10.5,16.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1162 +- uid: 1161 type: solid_wall components: - parent: 15 pos: -10.5,13.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1163 +- uid: 1162 type: solid_wall components: - parent: 15 pos: -10.5,12.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1164 +- uid: 1163 type: solid_wall components: - parent: 15 pos: -11.5,12.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1165 +- uid: 1164 type: solid_wall components: - parent: 15 pos: -12.5,12.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1166 +- uid: 1165 type: solid_wall components: - parent: 15 pos: -13.5,12.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1167 +- uid: 1166 type: solid_wall components: - parent: 15 pos: -5.5,18.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1168 +- uid: 1167 type: reinforced_wall components: - parent: 15 pos: 1.5,14.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1169 +- uid: 1168 type: reinforced_wall components: - parent: 15 pos: 1.5,13.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1170 +- uid: 1169 type: reinforced_wall components: - parent: 15 pos: 1.5,12.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1171 +- uid: 1170 type: reinforced_wall components: - parent: 15 pos: 1.5,11.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1172 +- uid: 1171 type: reinforced_wall components: - parent: 15 pos: 1.5,10.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1173 +- uid: 1172 type: reinforced_wall components: - parent: 15 pos: 1.5,9.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1174 +- uid: 1173 type: reinforced_wall components: - parent: 15 pos: 1.5,8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1175 +- uid: 1174 type: reinforced_wall components: - parent: 15 pos: 1.5,7.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1176 +- uid: 1175 type: reinforced_wall components: - parent: 15 pos: 1.5,6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1177 +- uid: 1176 type: reinforced_wall components: - parent: 15 pos: -4.5,6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1178 +- uid: 1177 type: reinforced_wall components: - parent: 15 pos: -1.5,6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1179 +- uid: 1178 type: reinforced_wall components: - parent: 15 pos: -7.5,6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1180 +- uid: 1179 type: solid_wall components: - parent: 15 pos: -4.5,7.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1181 +- uid: 1180 type: solid_wall components: - parent: 15 pos: -4.5,8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1182 +- uid: 1181 type: solid_wall components: - parent: 15 pos: -4.5,9.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1183 +- uid: 1182 type: solid_wall components: - parent: 15 pos: -1.5,9.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1184 +- uid: 1183 type: solid_wall components: - parent: 15 pos: -1.5,7.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1185 +- uid: 1184 type: solid_wall components: - parent: 15 pos: -1.5,8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1186 +- uid: 1185 type: LowWall components: - parent: 15 pos: -0.5,9.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1187 +- uid: 1186 type: LowWall components: - parent: 15 pos: -3.5,9.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1188 +- uid: 1187 type: LowWall components: - parent: 15 pos: -7.5,9.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1189 +- uid: 1188 type: LowWall components: - parent: 15 pos: -8.5,9.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1190 +- uid: 1189 type: solid_wall components: - parent: 15 pos: -15.5,6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1191 +- uid: 1190 type: solid_wall components: - parent: 15 pos: -17.5,6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1192 +- uid: 1191 type: solid_wall components: - parent: 15 pos: -18.5,6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1193 +- uid: 1192 type: solid_wall components: - parent: 15 pos: -18.5,7.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1194 +- uid: 1193 type: solid_wall components: - parent: 15 pos: -18.5,8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1195 +- uid: 1194 type: solid_wall components: - parent: 15 pos: -18.5,9.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1196 +- uid: 1195 type: solid_wall components: - parent: 15 pos: -18.5,10.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1197 +- uid: 1196 type: solid_wall components: - parent: 15 pos: -18.5,11.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1198 +- uid: 1197 type: solid_wall components: - parent: 15 pos: -19.5,11.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1199 +- uid: 1198 type: solid_wall components: - parent: 15 pos: -18.5,14.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1200 +- uid: 1199 type: solid_wall components: - parent: 15 pos: -19.5,14.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1201 +- uid: 1200 type: solid_wall components: - parent: 15 pos: -19.5,15.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1202 +- uid: 1201 type: solid_wall components: - parent: 15 pos: -19.5,16.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1203 +- uid: 1202 type: solid_wall components: - parent: 15 pos: -19.5,17.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1204 +- uid: 1203 type: solid_wall components: - parent: 15 pos: -19.5,18.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1205 +- uid: 1204 type: solid_wall components: - parent: 15 pos: -19.5,19.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1206 +- uid: 1205 type: solid_wall components: - parent: 15 pos: -19.5,20.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1207 +- uid: 1206 type: solid_wall components: - parent: 15 pos: -19.5,21.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1208 +- uid: 1207 type: solid_wall components: - parent: 15 pos: -19.5,22.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1209 +- uid: 1208 type: solid_wall components: - parent: 15 pos: -19.5,23.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1210 +- uid: 1209 type: solid_wall components: - parent: 15 pos: -19.5,24.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1211 +- uid: 1210 type: solid_wall components: - parent: 15 pos: -19.5,25.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1212 +- uid: 1211 type: solid_wall components: - parent: 15 pos: -19.5,26.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1213 +- uid: 1212 type: solid_wall components: - parent: 15 pos: -18.5,26.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1214 +- uid: 1213 type: solid_wall components: - parent: 15 pos: -17.5,26.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1215 +- uid: 1214 type: solid_wall components: - parent: 15 pos: -16.5,26.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1216 +- uid: 1215 type: solid_wall components: - parent: 15 pos: -15.5,26.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1217 +- uid: 1216 type: solid_wall components: - parent: 15 pos: -14.5,26.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1218 +- uid: 1217 type: solid_wall components: - parent: 15 pos: -13.5,26.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1219 +- uid: 1218 type: solid_wall components: - parent: 15 pos: -12.5,26.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1220 +- uid: 1219 type: solid_wall components: - parent: 15 pos: -11.5,26.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1221 +- uid: 1220 type: solid_wall components: - parent: 15 pos: -10.5,26.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1222 +- uid: 1221 type: solid_wall components: - parent: 15 pos: -9.5,26.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1223 +- uid: 1222 type: solid_wall components: - parent: 15 pos: -8.5,26.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1224 +- uid: 1223 type: solid_wall components: - parent: 15 pos: -7.5,26.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1225 +- uid: 1224 type: solid_wall components: - parent: 15 pos: -6.5,26.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1226 +- uid: 1225 type: solid_wall components: - parent: 15 pos: -6.5,25.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1227 +- uid: 1226 type: solid_wall components: - parent: 15 pos: -4.5,25.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1228 +- uid: 1227 type: solid_wall components: - parent: 15 pos: -5.5,25.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1229 +- uid: 1228 type: solid_wall components: - parent: 15 pos: -20.5,15.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1230 +- uid: 1229 type: solid_wall components: - parent: 15 pos: -21.5,15.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1231 +- uid: 1230 type: solid_wall components: - parent: 15 pos: -22.5,15.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1232 +- uid: 1231 type: solid_wall components: - parent: 15 pos: -23.5,15.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1233 +- uid: 1232 type: solid_wall components: - parent: 15 pos: -24.5,15.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1234 +- uid: 1233 type: solid_wall components: - parent: 15 pos: -25.5,15.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1235 +- uid: 1234 type: solid_wall components: - parent: 15 pos: -26.5,15.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1236 +- uid: 1235 type: solid_wall components: - parent: 15 pos: -27.5,15.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1237 +- uid: 1236 type: solid_wall components: - parent: 15 pos: -28.5,15.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1238 +- uid: 1237 type: solid_wall components: - parent: 15 pos: -29.5,15.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1239 +- uid: 1238 type: solid_wall components: - parent: 15 pos: -30.5,15.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1240 +- uid: 1239 type: solid_wall components: - parent: 15 pos: -31.5,15.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1241 +- uid: 1240 type: solid_wall components: - parent: 15 pos: -32.5,15.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1242 +- uid: 1241 type: solid_wall components: - parent: 15 pos: -33.5,15.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1243 +- uid: 1242 type: solid_wall components: - parent: 15 pos: -33.5,14.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1244 +- uid: 1243 type: solid_wall components: - parent: 15 pos: -33.5,13.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1245 +- uid: 1244 type: solid_wall components: - parent: 15 pos: -33.5,12.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1246 +- uid: 1245 type: solid_wall components: - parent: 15 pos: -33.5,11.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1247 +- uid: 1246 type: solid_wall components: - parent: 15 pos: -33.5,10.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1248 +- uid: 1247 type: APC components: - parent: 15 pos: -34.5,-5.5 rot: 3.141592653589793 rad type: Transform -- uid: 1249 +- uid: 1248 type: solid_wall components: - parent: 15 pos: -33.5,7.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1250 +- uid: 1249 type: solid_wall components: - parent: 15 pos: -33.5,6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1251 +- uid: 1250 type: solid_wall components: - parent: 15 pos: -32.5,6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1252 +- uid: 1251 type: solid_wall components: - parent: 15 pos: -31.5,6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1253 +- uid: 1252 type: solid_wall components: - parent: 15 pos: -30.5,6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1254 +- uid: 1253 type: LowWall components: - parent: 15 pos: -28.5,6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1255 +- uid: 1254 type: Window components: - parent: 15 pos: -8.5,2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1256 +- uid: 1255 type: Window components: - parent: 15 pos: -7.5,2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1257 +- uid: 1256 type: solid_wall components: - parent: 15 pos: -26.5,6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1258 +- uid: 1257 type: solid_wall components: - parent: 15 pos: -26.5,7.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1259 +- uid: 1258 type: solid_wall components: - parent: 15 pos: -25.5,7.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1260 +- uid: 1259 type: solid_wall components: - parent: 15 pos: -30.5,7.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1261 +- uid: 1260 type: solid_wall components: - parent: 15 pos: -30.5,8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1262 +- uid: 1261 type: solid_wall components: - parent: 15 pos: -30.5,9.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1263 +- uid: 1262 type: solid_wall components: - parent: 15 pos: -30.5,10.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1264 +- uid: 1263 type: solid_wall components: - parent: 15 pos: -30.5,11.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1265 +- uid: 1264 type: solid_wall components: - parent: 15 pos: -30.5,12.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1266 +- uid: 1265 type: solid_wall components: - parent: 15 pos: -28.5,12.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1267 +- uid: 1266 type: solid_wall components: - parent: 15 pos: -27.5,12.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1268 +- uid: 1267 type: solid_wall components: - parent: 15 pos: -26.5,12.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1269 +- uid: 1268 type: solid_wall components: - parent: 15 pos: -25.5,12.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1270 +- uid: 1269 type: solid_wall components: - parent: 15 pos: -24.5,12.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1271 +- uid: 1270 type: solid_wall components: - parent: 15 pos: -23.5,12.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1272 +- uid: 1271 type: solid_wall components: - parent: 15 pos: -22.5,12.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1273 +- uid: 1272 type: solid_wall components: - parent: 15 pos: -29.5,12.5 rot: -1.5707963267948966 rad type: Transform +- uid: 1273 + type: solid_wall + components: + - parent: 15 + pos: -22.5,11.5 + rot: -1.5707963267948966 rad + type: Transform - uid: 1274 type: solid_wall components: @@ -20067,1326 +20065,1319 @@ entities: type: solid_wall components: - parent: 15 - pos: -22.5,11.5 + pos: -21.5,11.5 rot: -1.5707963267948966 rad type: Transform - uid: 1276 type: solid_wall components: - parent: 15 - pos: -21.5,11.5 + pos: -22.5,10.5 rot: -1.5707963267948966 rad type: Transform - uid: 1277 type: solid_wall components: - parent: 15 - pos: -22.5,10.5 + pos: -22.5,8.5 rot: -1.5707963267948966 rad type: Transform - uid: 1278 type: solid_wall components: - parent: 15 - pos: -22.5,8.5 + pos: -22.5,7.5 rot: -1.5707963267948966 rad type: Transform - uid: 1279 type: solid_wall components: - parent: 15 - pos: -22.5,7.5 + pos: -21.5,7.5 rot: -1.5707963267948966 rad type: Transform - uid: 1280 type: solid_wall components: - parent: 15 - pos: -21.5,7.5 + pos: -21.5,6.5 rot: -1.5707963267948966 rad type: Transform - uid: 1281 type: solid_wall components: - parent: 15 - pos: -21.5,6.5 + pos: -20.5,6.5 rot: -1.5707963267948966 rad type: Transform - uid: 1282 type: solid_wall components: - parent: 15 - pos: -20.5,6.5 + pos: -19.5,6.5 rot: -1.5707963267948966 rad type: Transform - uid: 1283 - type: solid_wall - components: - - parent: 15 - pos: -19.5,6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1284 type: solid_wall components: - parent: 15 pos: -25.5,11.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1285 +- uid: 1284 type: LowWall components: - parent: 15 pos: -25.5,9.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1286 +- uid: 1285 type: LowWall components: - parent: 15 pos: -2.5,6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1287 +- uid: 1286 type: LowWall components: - parent: 15 pos: -3.5,6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1288 +- uid: 1287 type: LowWall components: - parent: 15 pos: -0.5,6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1289 +- uid: 1288 type: LowWall components: - parent: 15 pos: 0.5,6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1290 +- uid: 1289 type: LowWall components: - parent: 15 pos: 14.5,8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1291 +- uid: 1290 type: solid_wall components: - parent: 15 pos: 30.5,-0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1292 +- uid: 1291 type: solid_wall components: - parent: 15 pos: 30.5,0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1293 +- uid: 1292 type: solid_wall components: - parent: 15 pos: 29.5,-0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1294 +- uid: 1293 type: solid_wall components: - parent: 15 pos: 28.5,-0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1295 +- uid: 1294 type: solid_wall components: - parent: 15 pos: 27.5,-0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1296 +- uid: 1295 type: solid_wall components: - parent: 15 pos: 26.5,-0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1297 +- uid: 1296 type: solid_wall components: - parent: 15 pos: 25.5,-0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1298 +- uid: 1297 type: solid_wall components: - parent: 15 pos: 24.5,-0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1299 +- uid: 1298 type: solid_wall components: - parent: 15 pos: 24.5,0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1300 +- uid: 1299 type: solid_wall components: - parent: 15 pos: 24.5,1.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1301 +- uid: 1300 type: solid_wall components: - parent: 15 pos: 24.5,2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1302 +- uid: 1301 type: solid_wall components: - parent: 15 pos: 23.5,2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1303 +- uid: 1302 type: solid_wall components: - parent: 15 pos: 22.5,2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1304 +- uid: 1303 type: solid_wall components: - parent: 15 pos: 19.5,2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1305 +- uid: 1304 type: solid_wall components: - parent: 15 pos: 18.5,2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1306 +- uid: 1305 type: solid_wall components: - parent: 15 pos: 17.5,2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1307 +- uid: 1306 type: solid_wall components: - parent: 15 pos: 16.5,2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1308 +- uid: 1307 type: solid_wall components: - parent: 15 pos: 15.5,2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1309 +- uid: 1308 type: solid_wall components: - parent: 15 pos: 14.5,2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1310 +- uid: 1309 type: solid_wall components: - parent: 15 pos: 13.5,2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1311 +- uid: 1310 type: solid_wall components: - parent: 15 pos: 12.5,2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1312 +- uid: 1311 type: solid_wall components: - parent: 15 pos: 6.5,2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1313 +- uid: 1312 type: solid_wall components: - parent: 15 pos: 5.5,2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1314 +- uid: 1313 type: solid_wall components: - parent: 15 pos: 5.5,1.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1315 +- uid: 1314 type: solid_wall components: - parent: 15 pos: 20.5,2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1316 +- uid: 1315 type: solid_wall components: - parent: 15 pos: 19.5,1.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1317 +- uid: 1316 type: solid_wall components: - parent: 15 pos: 19.5,0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1318 +- uid: 1317 type: solid_wall components: - parent: 15 pos: 19.5,-0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1319 +- uid: 1318 type: solid_wall components: - parent: 15 pos: 19.5,-1.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1320 +- uid: 1319 type: solid_wall components: - parent: 15 pos: 19.5,-2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1321 +- uid: 1320 type: solid_wall components: - parent: 15 pos: 13.5,-2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1322 +- uid: 1321 type: solid_wall components: - parent: 15 pos: 13.5,-3.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1323 +- uid: 1322 type: solid_wall components: - parent: 15 pos: 14.5,-3.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1324 +- uid: 1323 type: solid_wall components: - parent: 15 pos: 13.5,-6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1325 +- uid: 1324 type: solid_wall components: - parent: 15 pos: 5.5,-3.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1326 +- uid: 1325 type: solid_wall components: - parent: 15 pos: 5.5,-4.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1327 +- uid: 1326 type: solid_wall components: - parent: 15 pos: 5.5,-5.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1328 +- uid: 1327 type: solid_wall components: - parent: 15 pos: 5.5,-6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1329 +- uid: 1328 type: solid_wall components: - parent: 15 pos: 5.5,-7.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1330 +- uid: 1329 type: solid_wall components: - parent: 15 pos: 5.5,-12.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1331 +- uid: 1330 type: solid_wall components: - parent: 15 pos: 5.5,-11.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1332 +- uid: 1331 type: LowWall components: - parent: 15 pos: 5.5,-8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1333 +- uid: 1332 type: LowWall components: - parent: 15 pos: 5.5,-9.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1334 +- uid: 1333 type: LowWall components: - parent: 15 pos: 5.5,-10.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1335 +- uid: 1334 type: LowWall components: - parent: 15 pos: 13.5,-1.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1336 +- uid: 1335 type: LowWall components: - parent: 15 pos: 13.5,1.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1337 +- uid: 1336 type: LowWall components: - parent: 15 pos: 13.5,-0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1338 +- uid: 1337 type: LowWall components: - parent: 15 pos: 16.5,-3.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1339 +- uid: 1338 type: LowWall components: - parent: 15 pos: 11.5,2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1340 +- uid: 1339 type: LowWall components: - parent: 15 pos: 10.5,2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1341 +- uid: 1340 type: LowWall components: - parent: 15 pos: 9.5,2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1342 +- uid: 1341 type: LowWall components: - parent: 15 pos: 8.5,2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1343 +- uid: 1342 type: LowWall components: - parent: 15 pos: 7.5,2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1344 +- uid: 1343 type: LowWall components: - parent: 15 pos: 6.5,-6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1345 +- uid: 1344 type: LowWall components: - parent: 15 pos: 9.5,-6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1346 +- uid: 1345 type: LowWall components: - parent: 15 pos: 8.5,-6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1347 +- uid: 1346 type: LowWall components: - parent: 15 pos: 13.5,-5.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1348 +- uid: 1347 type: LowWall components: - parent: 15 pos: 13.5,-4.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1349 +- uid: 1348 type: LowWall components: - parent: 15 pos: 12.5,-6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1350 +- uid: 1349 type: LowWall components: - parent: 15 pos: 18.5,-3.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1351 +- uid: 1350 type: solid_wall components: - parent: 15 pos: 19.5,-3.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1352 +- uid: 1351 type: solid_wall components: - parent: 15 pos: 20.5,-3.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1353 +- uid: 1352 type: solid_wall components: - parent: 15 pos: 21.5,-3.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1354 +- uid: 1353 type: solid_wall components: - parent: 15 pos: 22.5,-3.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1355 +- uid: 1354 type: solid_wall components: - parent: 15 pos: 23.5,-3.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1356 +- uid: 1355 type: solid_wall components: - parent: 15 pos: 24.5,-3.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1357 +- uid: 1356 type: solid_wall components: - parent: 15 pos: 25.5,-3.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1358 +- uid: 1357 type: solid_wall components: - parent: 15 pos: 25.5,-4.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1359 +- uid: 1358 type: solid_wall components: - parent: 15 pos: 25.5,-5.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1360 +- uid: 1359 type: solid_wall components: - parent: 15 pos: 25.5,-7.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1361 +- uid: 1360 type: solid_wall components: - parent: 15 pos: 25.5,-8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1362 +- uid: 1361 type: solid_wall components: - parent: 15 pos: 24.5,-8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1363 +- uid: 1362 type: solid_wall components: - parent: 15 pos: 23.5,-8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1364 +- uid: 1363 type: solid_wall components: - parent: 15 pos: 22.5,-8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1365 +- uid: 1364 type: solid_wall components: - parent: 15 pos: 21.5,-8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1366 +- uid: 1365 type: solid_wall components: - parent: 15 pos: 20.5,-8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1367 +- uid: 1366 type: solid_wall components: - parent: 15 pos: 20.5,-7.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1368 +- uid: 1367 type: solid_wall components: - parent: 15 pos: 16.5,-18.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1369 +- uid: 1368 type: solid_wall components: - parent: 15 pos: 20.5,-4.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1370 +- uid: 1369 type: solid_wall components: - parent: 15 pos: 20.5,-9.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1371 +- uid: 1370 type: Window components: - parent: 15 pos: 20.5,-14.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1372 +- uid: 1371 type: solid_wall components: - parent: 15 pos: 20.5,-11.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1373 +- uid: 1372 type: solid_wall components: - parent: 15 pos: 21.5,-11.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1374 +- uid: 1373 type: solid_wall components: - parent: 15 pos: 22.5,-11.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1375 +- uid: 1374 type: solid_wall components: - parent: 15 pos: 23.5,-11.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1376 +- uid: 1375 type: solid_wall components: - parent: 15 pos: 24.5,-11.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1377 +- uid: 1376 type: solid_wall components: - parent: 15 pos: 25.5,-11.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1378 +- uid: 1377 type: solid_wall components: - parent: 15 pos: 25.5,-12.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1379 +- uid: 1378 type: solid_wall components: - parent: 15 pos: 25.5,-13.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1380 +- uid: 1379 type: solid_wall components: - parent: 15 pos: 25.5,-14.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1381 +- uid: 1380 type: solid_wall components: - parent: 15 pos: 25.5,-15.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1382 +- uid: 1381 type: solid_wall components: - parent: 15 pos: 25.5,-16.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1383 +- uid: 1382 type: solid_wall components: - parent: 15 pos: 24.5,-16.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1384 +- uid: 1383 type: solid_wall components: - parent: 15 pos: 23.5,-16.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1385 +- uid: 1384 type: solid_wall components: - parent: 15 pos: 22.5,-16.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1386 +- uid: 1385 type: solid_wall components: - parent: 15 pos: 21.5,-16.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1387 +- uid: 1386 type: solid_wall components: - parent: 15 pos: 20.5,-16.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1388 +- uid: 1387 type: Window components: - parent: 15 pos: 20.5,-5.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1389 +- uid: 1388 type: solid_wall components: - parent: 15 pos: 15.5,-18.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1390 +- uid: 1389 type: solid_wall components: - parent: 15 pos: 20.5,-17.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1391 +- uid: 1390 type: solid_wall components: - parent: 15 pos: 20.5,-18.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1392 +- uid: 1391 type: solid_wall components: - parent: 15 pos: 46.5,5.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1393 +- uid: 1392 type: solid_wall components: - parent: 15 pos: 45.5,5.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1394 +- uid: 1393 type: solid_wall components: - parent: 15 pos: 48.5,5.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1395 +- uid: 1394 type: LowWall components: - parent: 15 pos: 20.5,-14.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1396 +- uid: 1395 type: LowWall components: - parent: 15 pos: 20.5,-5.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1397 +- uid: 1396 type: LowWall components: - parent: 15 pos: 11.5,-14.5 rot: -1.5707963267948966 rad type: Transform +- uid: 1397 + type: LowWall + components: + - parent: 15 + pos: 11.5,-15.5 + rot: -1.5707963267948966 rad + type: Transform - uid: 1398 type: LowWall components: - parent: 15 - pos: 11.5,-15.5 + pos: 9.5,-12.5 rot: -1.5707963267948966 rad type: Transform - uid: 1399 - type: LowWall + type: Window components: - parent: 15 pos: 9.5,-12.5 rot: -1.5707963267948966 rad type: Transform - uid: 1400 - type: Window - components: - - parent: 15 - pos: 9.5,-12.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1401 type: solid_wall components: - parent: 15 pos: 11.5,-12.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1402 +- uid: 1401 type: Window components: - parent: 15 pos: 11.5,-15.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1403 +- uid: 1402 type: solid_wall components: - parent: 15 pos: 6.5,-12.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1404 +- uid: 1403 type: Window components: - parent: 15 pos: 20.5,-12.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1405 +- uid: 1404 type: solid_wall components: - parent: 15 pos: 6.5,-13.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1406 +- uid: 1405 type: solid_wall components: - parent: 15 pos: 6.5,-14.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1407 +- uid: 1406 type: solid_wall components: - parent: 15 pos: 6.5,-15.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1408 +- uid: 1407 type: solid_wall components: - parent: 15 pos: 6.5,-16.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1409 +- uid: 1408 type: solid_wall components: - parent: 15 pos: 6.5,-17.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1410 +- uid: 1409 type: solid_wall components: - parent: 15 pos: 7.5,-17.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1411 +- uid: 1410 type: solid_wall components: - parent: 15 pos: 8.5,-17.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1412 +- uid: 1411 type: solid_wall components: - parent: 15 pos: 9.5,-17.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1413 +- uid: 1412 type: solid_wall components: - parent: 15 pos: 10.5,-17.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1414 +- uid: 1413 type: solid_wall components: - parent: 15 pos: 11.5,-17.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1415 +- uid: 1414 type: Window components: - parent: 15 pos: 11.5,-14.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1416 +- uid: 1415 type: solid_wall components: - parent: 15 pos: 11.5,-18.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1417 +- uid: 1416 type: solid_wall components: - parent: 15 pos: 12.5,-18.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1418 +- uid: 1417 type: solid_wall components: - parent: 15 pos: 13.5,-18.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1419 +- uid: 1418 type: solid_wall components: - parent: 15 pos: 6.5,-18.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1420 +- uid: 1419 type: solid_wall components: - parent: 15 pos: 6.5,-20.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1421 +- uid: 1420 type: solid_wall components: - parent: 15 pos: 28.5,-1.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1422 +- uid: 1421 type: solid_wall components: - parent: 15 pos: 28.5,-2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1423 +- uid: 1422 type: solid_wall components: - parent: 15 pos: 28.5,-3.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1424 +- uid: 1423 type: solid_wall components: - parent: 15 pos: 28.5,-4.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1425 +- uid: 1424 type: solid_wall components: - parent: 15 pos: 28.5,-5.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1426 +- uid: 1425 type: solid_wall components: - parent: 15 pos: 29.5,-5.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1427 +- uid: 1426 type: solid_wall components: - parent: 15 pos: 30.5,-5.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1428 +- uid: 1427 type: solid_wall components: - parent: 15 pos: 31.5,-5.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1429 +- uid: 1428 type: solid_wall components: - parent: 15 pos: 32.5,-5.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1430 +- uid: 1429 type: solid_wall components: - parent: 15 pos: 34.5,-5.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1431 +- uid: 1430 type: solid_wall components: - parent: 15 pos: 35.5,-5.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1432 +- uid: 1431 type: solid_wall components: - parent: 15 pos: 36.5,-5.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1433 +- uid: 1432 type: solid_wall components: - parent: 15 pos: 36.5,-4.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1434 +- uid: 1433 type: solid_wall components: - parent: 15 pos: 36.5,-3.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1435 +- uid: 1434 type: solid_wall components: - parent: 15 pos: 1.5,1.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1436 +- uid: 1435 type: solid_wall components: - parent: 15 pos: 1.5,2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1437 +- uid: 1436 type: solid_wall components: - parent: 15 pos: 0.5,2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1438 +- uid: 1437 type: solid_wall components: - parent: 15 pos: 1.5,-3.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1439 +- uid: 1438 type: solid_wall components: - parent: 15 pos: 1.5,-4.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1440 +- uid: 1439 type: solid_wall components: - parent: 15 pos: 1.5,-5.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1441 +- uid: 1440 type: solid_wall components: - parent: 15 pos: 1.5,-6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1442 +- uid: 1441 type: solid_wall components: - parent: 15 pos: 0.5,-5.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1443 +- uid: 1442 type: solid_wall components: - parent: 15 pos: -0.5,-5.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1444 +- uid: 1443 type: solid_wall components: - parent: 15 pos: -1.5,-5.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1445 +- uid: 1444 type: solid_wall components: - parent: 15 pos: -2.5,-5.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1446 +- uid: 1445 type: solid_wall components: - parent: 15 pos: 1.5,-9.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1447 +- uid: 1446 type: solid_wall components: - parent: 15 pos: 1.5,-10.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1448 +- uid: 1447 type: solid_wall components: - parent: 15 pos: 1.5,-11.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1449 +- uid: 1448 type: solid_wall components: - parent: 15 pos: 1.5,-12.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1450 +- uid: 1449 type: solid_wall components: - parent: 15 pos: 1.5,-8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1451 +- uid: 1450 type: solid_wall components: - parent: 15 pos: 0.5,-12.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1452 +- uid: 1451 type: solid_wall components: - parent: 15 pos: -0.5,-12.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1453 +- uid: 1452 type: solid_wall components: - parent: 15 pos: -1.5,-12.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1454 +- uid: 1453 type: solid_wall components: - parent: 15 pos: -2.5,-12.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1455 +- uid: 1454 type: solid_wall components: - parent: 15 pos: 0.5,-13.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1456 +- uid: 1455 type: solid_wall components: - parent: 15 pos: -5.5,-18.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1457 +- uid: 1456 type: solid_wall components: - parent: 15 pos: 0.5,-17.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1458 +- uid: 1457 type: solid_wall components: - parent: 15 pos: 0.5,-18.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1459 +- uid: 1458 type: solid_wall components: - parent: 15 pos: -0.5,-18.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1460 +- uid: 1459 type: solid_wall components: - parent: 15 pos: -6.5,-18.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1461 +- uid: 1460 type: solid_wall components: - parent: 15 pos: -1.5,-18.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1462 +- uid: 1461 type: solid_wall components: - parent: 15 pos: -2.5,-11.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1463 +- uid: 1462 type: solid_wall components: - parent: 15 pos: -3.5,-11.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1464 +- uid: 1463 type: AirlockServiceLocked components: - name: Freezer @@ -21395,637 +21386,637 @@ entities: pos: -12.5,-2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1465 +- uid: 1464 type: solid_wall components: - parent: 15 pos: -5.5,-11.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1466 +- uid: 1465 type: solid_wall components: - parent: 15 pos: -6.5,-11.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1467 +- uid: 1466 type: solid_wall components: - parent: 15 pos: -6.5,-12.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1468 +- uid: 1467 type: solid_wall components: - parent: 15 pos: -6.5,-13.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1469 +- uid: 1468 type: solid_wall components: - parent: 15 pos: -6.5,-14.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1470 +- uid: 1469 type: solid_wall components: - parent: 15 pos: -6.5,-15.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1471 +- uid: 1470 type: solid_wall components: - parent: 15 pos: -6.5,-16.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1472 +- uid: 1471 type: solid_wall components: - parent: 15 pos: -6.5,-17.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1473 +- uid: 1472 type: LowWall components: - parent: 15 pos: -2.5,-18.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1474 +- uid: 1473 type: LowWall components: - parent: 15 pos: -4.5,-18.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1475 +- uid: 1474 type: LowWall components: - parent: 15 pos: 0.5,-16.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1476 +- uid: 1475 type: solid_wall components: - parent: 15 pos: -7.5,-21.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1477 +- uid: 1476 type: solid_wall components: - parent: 15 pos: 1.5,-22.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1478 +- uid: 1477 type: solid_wall components: - parent: 15 pos: 0.5,-22.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1479 +- uid: 1478 type: solid_wall components: - parent: 15 pos: 0.5,-21.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1480 +- uid: 1479 type: solid_wall components: - parent: 15 pos: -0.5,-21.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1481 +- uid: 1480 type: solid_wall components: - parent: 15 pos: -1.5,-21.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1482 +- uid: 1481 type: LowWall components: - parent: 15 pos: -4.5,-21.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1483 +- uid: 1482 type: solid_wall components: - parent: 15 pos: -1.5,-22.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1484 +- uid: 1483 type: solid_wall components: - parent: 15 pos: -1.5,-23.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1485 +- uid: 1484 type: solid_wall components: - parent: 15 pos: -1.5,-24.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1486 +- uid: 1485 type: solid_wall components: - parent: 15 pos: -1.5,-25.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1487 +- uid: 1486 type: solid_wall components: - parent: 15 pos: -2.5,-25.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1488 +- uid: 1487 type: solid_wall components: - parent: 15 pos: -3.5,-25.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1489 +- uid: 1488 type: solid_wall components: - parent: 15 pos: -4.5,-25.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1490 +- uid: 1489 type: solid_wall components: - parent: 15 pos: -5.5,-25.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1491 +- uid: 1490 type: solid_wall components: - parent: 15 pos: -6.5,-25.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1492 +- uid: 1491 type: solid_wall components: - parent: 15 pos: -6.5,-24.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1493 +- uid: 1492 type: solid_wall components: - parent: 15 pos: -6.5,-23.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1494 +- uid: 1493 type: solid_wall components: - parent: 15 pos: -6.5,-22.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1495 +- uid: 1494 type: solid_wall components: - parent: 15 pos: -6.5,-21.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1496 +- uid: 1495 type: LowWall components: - parent: 15 pos: -2.5,-21.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1497 +- uid: 1496 type: LowWall components: - parent: 15 pos: -5.5,-21.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1498 +- uid: 1497 type: solid_wall components: - parent: 15 pos: -9.5,-21.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1499 +- uid: 1498 type: reinforced_wall components: - parent: 15 pos: -12.5,-27.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1500 +- uid: 1499 type: reinforced_wall components: - parent: 15 pos: -13.5,-27.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1501 +- uid: 1500 type: reinforced_wall components: - parent: 15 pos: -14.5,-27.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1502 +- uid: 1501 type: reinforced_wall components: - parent: 15 pos: -15.5,-27.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1503 +- uid: 1502 type: reinforced_wall components: - parent: 15 pos: -16.5,-27.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1504 +- uid: 1503 type: reinforced_wall components: - parent: 15 pos: -17.5,-27.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1505 +- uid: 1504 type: reinforced_wall components: - parent: 15 pos: -18.5,-27.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1506 +- uid: 1505 type: reinforced_wall components: - parent: 15 pos: -18.5,-26.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1507 +- uid: 1506 type: reinforced_wall components: - parent: 15 pos: -18.5,-25.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1508 +- uid: 1507 type: reinforced_wall components: - parent: 15 pos: -18.5,-24.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1509 +- uid: 1508 type: reinforced_wall components: - parent: 15 pos: -18.5,-23.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1510 +- uid: 1509 type: reinforced_wall components: - parent: 15 pos: -17.5,-23.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1511 +- uid: 1510 type: reinforced_wall components: - parent: 15 pos: -13.5,-23.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1512 +- uid: 1511 type: reinforced_wall components: - parent: 15 pos: -12.5,-23.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1513 +- uid: 1512 type: reinforced_wall components: - parent: 15 pos: -12.5,-24.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1514 +- uid: 1513 type: reinforced_wall components: - parent: 15 pos: -12.5,-25.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1515 +- uid: 1514 type: reinforced_wall components: - parent: 15 pos: -12.5,-26.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1516 +- uid: 1515 type: solid_wall components: - parent: 15 pos: -12.5,-28.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1517 +- uid: 1516 type: solid_wall components: - parent: 15 pos: -11.5,-28.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1518 +- uid: 1517 type: solid_wall components: - parent: 15 pos: -10.5,-28.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1519 +- uid: 1518 type: solid_wall components: - parent: 15 pos: -6.5,-28.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1520 +- uid: 1519 type: solid_wall components: - parent: 15 pos: -5.5,-28.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1521 +- uid: 1520 type: solid_wall components: - parent: 15 pos: -4.5,-28.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1522 +- uid: 1521 type: solid_wall components: - parent: 15 pos: -3.5,-28.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1523 +- uid: 1522 type: solid_wall components: - parent: 15 pos: -2.5,-28.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1524 +- uid: 1523 type: solid_wall components: - parent: 15 pos: -1.5,-28.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1525 +- uid: 1524 type: solid_wall components: - parent: 15 pos: -0.5,-28.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1526 +- uid: 1525 type: solid_wall components: - parent: 15 pos: -10.5,-21.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1527 +- uid: 1526 type: solid_wall components: - parent: 15 pos: -10.5,-22.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1528 +- uid: 1527 type: solid_wall components: - parent: 15 pos: -10.5,-23.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1529 +- uid: 1528 type: solid_wall components: - parent: 15 pos: -10.5,-24.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1530 +- uid: 1529 type: solid_wall components: - parent: 15 pos: -10.5,-25.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1531 +- uid: 1530 type: solid_wall components: - parent: 15 pos: -12.5,-22.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1532 +- uid: 1531 type: solid_wall components: - parent: 15 pos: -12.5,-21.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1533 +- uid: 1532 type: solid_wall components: - parent: 15 pos: -12.5,-18.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1534 +- uid: 1533 type: solid_wall components: - parent: 15 pos: -12.5,-17.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1535 +- uid: 1534 type: solid_wall components: - parent: 15 pos: -12.5,-16.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1536 +- uid: 1535 type: solid_wall components: - parent: 15 pos: -11.5,-16.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1537 +- uid: 1536 type: solid_wall components: - parent: 15 pos: -10.5,-16.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1538 +- uid: 1537 type: solid_wall components: - parent: 15 pos: -9.5,-16.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1539 +- uid: 1538 type: solid_wall components: - parent: 15 pos: -8.5,-16.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1540 +- uid: 1539 type: solid_wall components: - parent: 15 pos: -7.5,-16.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1541 +- uid: 1540 type: solid_wall components: - parent: 15 pos: -13.5,-16.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1542 +- uid: 1541 type: solid_wall components: - parent: 15 pos: -14.5,-16.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1543 +- uid: 1542 type: solid_wall components: - parent: 15 pos: -15.5,-16.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1544 +- uid: 1543 type: solid_wall components: - parent: 15 pos: -17.5,-16.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1545 +- uid: 1544 type: solid_wall components: - parent: 15 pos: -18.5,-16.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1546 +- uid: 1545 type: solid_wall components: - parent: 15 pos: -18.5,-17.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1547 +- uid: 1546 type: solid_wall components: - parent: 15 pos: -18.5,-18.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1548 +- uid: 1547 type: solid_wall components: - parent: 15 pos: -18.5,-19.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1549 +- uid: 1548 type: solid_wall components: - parent: 15 pos: -18.5,-20.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1550 +- uid: 1549 type: solid_wall components: - parent: 15 pos: -18.5,-21.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1551 +- uid: 1550 type: solid_wall components: - parent: 15 pos: -18.5,-22.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1552 +- uid: 1551 type: Table components: - parent: 15 pos: 6.5,28.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1553 +- uid: 1552 type: Table components: - parent: 15 pos: 5.5,28.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1554 +- uid: 1553 type: VendingMachineCoffee components: - parent: 15 pos: 5.5,-13.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1555 +- uid: 1554 type: ToolboxElectricalFilled components: - parent: 15 @@ -22038,287 +22029,287 @@ entities: storagebase: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 1556 +- uid: 1555 type: solid_wall components: - parent: 15 pos: -16.5,-13.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1557 +- uid: 1556 type: solid_wall components: - parent: 15 pos: -15.5,-13.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1558 +- uid: 1557 type: solid_wall components: - parent: 15 pos: -14.5,-13.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1559 +- uid: 1558 type: solid_wall components: - parent: 15 pos: -12.5,-13.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1560 +- uid: 1559 type: solid_wall components: - parent: 15 pos: -11.5,-13.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1561 +- uid: 1560 type: solid_wall components: - parent: 15 pos: -10.5,-13.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1562 +- uid: 1561 type: solid_wall components: - parent: 15 pos: -10.5,-12.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1563 +- uid: 1562 type: solid_wall components: - parent: 15 pos: -10.5,-11.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1564 +- uid: 1563 type: solid_wall components: - parent: 15 pos: -10.5,-10.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1565 +- uid: 1564 type: solid_wall components: - parent: 15 pos: -10.5,-9.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1566 +- uid: 1565 type: solid_wall components: - parent: 15 pos: -10.5,-8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1567 +- uid: 1566 type: solid_wall components: - parent: 15 pos: -11.5,-8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1568 +- uid: 1567 type: solid_wall components: - parent: 15 pos: -13.5,-8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1569 +- uid: 1568 type: solid_wall components: - parent: 15 pos: -14.5,-8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1570 +- uid: 1569 type: solid_wall components: - parent: 15 pos: -15.5,-8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1571 +- uid: 1570 type: solid_wall components: - parent: 15 pos: -16.5,-8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1572 +- uid: 1571 type: solid_wall components: - parent: 15 pos: -16.5,-9.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1573 +- uid: 1572 type: solid_wall components: - parent: 15 pos: -16.5,-10.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1574 +- uid: 1573 type: solid_wall components: - parent: 15 pos: -16.5,-11.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1575 +- uid: 1574 type: solid_wall components: - parent: 15 pos: -16.5,-12.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1576 +- uid: 1575 type: solid_wall components: - parent: 15 pos: -9.5,-24.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1577 +- uid: 1576 type: solid_wall components: - parent: 15 pos: -8.5,-24.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1578 +- uid: 1577 type: solid_wall components: - parent: 15 pos: -7.5,-24.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1579 +- uid: 1578 type: solid_wall components: - parent: 15 pos: -2.5,-6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1580 +- uid: 1579 type: solid_wall components: - parent: 15 pos: -2.5,-7.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1581 +- uid: 1580 type: solid_wall components: - parent: 15 pos: -2.5,-8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1582 +- uid: 1581 type: solid_wall components: - parent: 15 pos: -3.5,-8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1583 +- uid: 1582 type: solid_wall components: - parent: 15 pos: -4.5,-8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1584 +- uid: 1583 type: solid_wall components: - parent: 15 pos: -5.5,-8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1585 +- uid: 1584 type: solid_wall components: - parent: 15 pos: -6.5,-8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1586 +- uid: 1585 type: solid_wall components: - parent: 15 pos: -7.5,-8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1587 +- uid: 1586 type: solid_wall components: - parent: 15 pos: -8.5,-8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1588 +- uid: 1587 type: solid_wall components: - parent: 15 pos: -8.5,-6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1589 +- uid: 1588 type: solid_wall components: - parent: 15 pos: -8.5,-5.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1590 +- uid: 1589 type: solid_wall components: - parent: 15 pos: -7.5,-5.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1591 +- uid: 1590 type: solid_wall components: - parent: 15 pos: -9.5,-5.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1592 +- uid: 1591 type: solid_wall components: - parent: 15 pos: -10.5,-5.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1593 +- uid: 1592 type: Table components: - parent: 15 pos: -15.5,-11.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1594 +- uid: 1593 type: Table components: - parent: 15 pos: -15.5,-12.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1595 +- uid: 1594 type: Table components: - parent: 15 pos: -29.5,7.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1596 +- uid: 1595 type: DisposalTrunk components: - parent: 15 @@ -22331,14 +22322,14 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 1597 +- uid: 1596 type: VendingMachineSovietSoda components: - parent: 15 pos: -11.5,-9.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1598 +- uid: 1597 type: ChairOfficeDark components: - parent: 15 @@ -22347,42 +22338,42 @@ entities: type: Transform - anchored: False type: Collidable -- uid: 1599 +- uid: 1598 type: solid_wall components: - parent: 15 pos: -10.5,2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1600 +- uid: 1599 type: solid_wall components: - parent: 15 pos: -4.5,2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1601 +- uid: 1600 type: solid_wall components: - parent: 15 pos: -9.5,2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1602 +- uid: 1601 type: solid_wall components: - parent: 15 pos: -11.5,2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1603 +- uid: 1602 type: Table components: - parent: 15 pos: 26.5,0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1604 +- uid: 1603 type: Multitool components: - parent: 15 @@ -22391,7 +22382,7 @@ entities: type: Transform - anchored: False type: Collidable -- uid: 1605 +- uid: 1604 type: Medkit components: - parent: 15 @@ -22404,35 +22395,35 @@ entities: storagebase: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 1606 +- uid: 1605 type: VendingMachineCola components: - parent: 15 pos: 29.5,6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1607 +- uid: 1606 type: Table components: - parent: 15 pos: 28.5,0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1608 +- uid: 1607 type: Table components: - parent: 15 pos: 20.5,7.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1609 +- uid: 1608 type: Table components: - parent: 15 pos: 19.5,7.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1610 +- uid: 1609 type: WeldingFuelTank components: - parent: 15 @@ -22441,7 +22432,7 @@ entities: type: Transform - anchored: False type: Collidable -- uid: 1611 +- uid: 1610 type: WeldingFuelTank components: - parent: 15 @@ -22450,7 +22441,7 @@ entities: type: Transform - anchored: False type: Collidable -- uid: 1612 +- uid: 1611 type: WeldingFuelTank components: - parent: 15 @@ -22459,7 +22450,7 @@ entities: type: Transform - anchored: False type: Collidable -- uid: 1613 +- uid: 1612 type: DrinkMugMoebius components: - parent: 15 @@ -22470,49 +22461,49 @@ entities: type: Solution - anchored: False type: Collidable -- uid: 1614 +- uid: 1613 type: VendingMachineSnack components: - parent: 15 pos: 9.5,28.5 rot: 3.141592653589793 rad type: Transform -- uid: 1615 +- uid: 1614 type: Table components: - parent: 15 pos: 0.5,28.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1616 +- uid: 1615 type: Table components: - parent: 15 pos: 1.5,28.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1617 +- uid: 1616 type: Table components: - parent: 15 pos: -0.5,28.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1618 +- uid: 1617 type: solid_wall components: - parent: 15 pos: -21.5,-9.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1619 +- uid: 1618 type: solid_wall components: - parent: 15 pos: -22.5,-9.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1620 +- uid: 1619 type: Paper components: - parent: 15 @@ -22521,259 +22512,259 @@ entities: type: Transform - anchored: False type: Collidable -- uid: 1621 +- uid: 1620 type: solid_wall components: - parent: 15 pos: -24.5,-9.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1622 +- uid: 1621 type: solid_wall components: - parent: 15 pos: -25.5,-9.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1623 +- uid: 1622 type: solid_wall components: - parent: 15 pos: -26.5,-9.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1624 +- uid: 1623 type: solid_wall components: - parent: 15 pos: -27.5,-9.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1625 +- uid: 1624 type: solid_wall components: - parent: 15 pos: -28.5,-9.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1626 +- uid: 1625 type: solid_wall components: - parent: 15 pos: -29.5,-9.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1627 +- uid: 1626 type: solid_wall components: - parent: 15 pos: -30.5,-9.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1628 +- uid: 1627 type: solid_wall components: - parent: 15 pos: -31.5,-9.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1629 +- uid: 1628 type: solid_wall components: - parent: 15 pos: -31.5,-7.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1630 +- uid: 1629 type: solid_wall components: - parent: 15 pos: -31.5,-8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1631 +- uid: 1630 type: Table components: - parent: 15 pos: -1.5,28.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1632 +- uid: 1631 type: Table components: - parent: 15 pos: -2.5,28.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1633 +- uid: 1632 type: solid_wall components: - parent: 15 pos: -34.5,-8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1634 +- uid: 1633 type: solid_wall components: - parent: 15 pos: -34.5,-7.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1635 +- uid: 1634 type: solid_wall components: - parent: 15 pos: -31.5,-5.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1636 +- uid: 1635 type: solid_wall components: - parent: 15 pos: -31.5,-4.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1637 +- uid: 1636 type: solid_wall components: - parent: 15 pos: -31.5,-3.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1638 +- uid: 1637 type: solid_wall components: - parent: 15 pos: -30.5,-3.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1639 +- uid: 1638 type: solid_wall components: - parent: 15 pos: -29.5,-3.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1640 +- uid: 1639 type: solid_wall components: - parent: 15 pos: -28.5,-3.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1641 +- uid: 1640 type: solid_wall components: - parent: 15 pos: -27.5,-3.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1642 +- uid: 1641 type: solid_wall components: - parent: 15 pos: -26.5,-3.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1643 +- uid: 1642 type: solid_wall components: - parent: 15 pos: -26.5,-2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1644 +- uid: 1643 type: solid_wall components: - parent: 15 pos: -26.5,-4.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1645 +- uid: 1644 type: solid_wall components: - parent: 15 pos: -26.5,-5.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1646 +- uid: 1645 type: solid_wall components: - parent: 15 pos: -26.5,-7.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1647 +- uid: 1646 type: solid_wall components: - parent: 15 pos: -26.5,-8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1648 +- uid: 1647 type: Table components: - parent: 15 pos: -7.5,20.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1649 +- uid: 1648 type: solid_wall components: - parent: 15 pos: -21.5,-5.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1650 +- uid: 1649 type: solid_wall components: - parent: 15 pos: -21.5,-6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1651 +- uid: 1650 type: solid_wall components: - parent: 15 pos: -20.5,-6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1652 +- uid: 1651 type: solid_wall components: - parent: 15 pos: -19.5,-6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1653 +- uid: 1652 type: solid_wall components: - parent: 15 pos: -18.5,-6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1654 +- uid: 1653 type: solid_wall components: - parent: 15 pos: -17.5,-6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1655 +- uid: 1654 type: SpawnPointLatejoin components: - parent: 15 pos: -36.5,-5.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1656 +- uid: 1655 type: SpawnPointLatejoin components: - parent: 15 pos: -36.5,-3.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1657 +- uid: 1656 type: CrateInternals components: - parent: 15 @@ -22788,7 +22779,7 @@ entities: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 1658 +- uid: 1657 type: CrateRadiation components: - parent: 15 @@ -22803,147 +22794,147 @@ entities: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 1659 +- uid: 1658 type: solid_wall components: - parent: 15 pos: -17.5,-4.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1660 +- uid: 1659 type: solid_wall components: - parent: 15 pos: -17.5,-5.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1661 +- uid: 1660 type: solid_wall components: - parent: 15 pos: -17.5,-3.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1662 +- uid: 1661 type: solid_wall components: - parent: 15 pos: -18.5,-3.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1663 +- uid: 1662 type: solid_wall components: - parent: 15 pos: -19.5,-3.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1664 +- uid: 1663 type: solid_wall components: - parent: 15 pos: -20.5,-3.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1665 +- uid: 1664 type: solid_wall components: - parent: 15 pos: -21.5,-3.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1666 +- uid: 1665 type: solid_wall components: - parent: 15 pos: -21.5,-2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1667 +- uid: 1666 type: solid_wall components: - parent: 15 pos: -17.5,2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1668 +- uid: 1667 type: solid_wall components: - parent: 15 pos: -20.5,2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1669 +- uid: 1668 type: solid_wall components: - parent: 15 pos: -21.5,2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1670 +- uid: 1669 type: solid_wall components: - parent: 15 pos: -21.5,1.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1671 +- uid: 1670 type: solid_wall components: - parent: 15 pos: -21.5,0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1672 +- uid: 1671 type: solid_wall components: - parent: 15 pos: -21.5,-0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1673 +- uid: 1672 type: solid_wall components: - parent: 15 pos: -22.5,1.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1674 +- uid: 1673 type: solid_wall components: - parent: 15 pos: -25.5,1.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1675 +- uid: 1674 type: solid_wall components: - parent: 15 pos: -26.5,0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1676 +- uid: 1675 type: solid_wall components: - parent: 15 pos: -26.5,1.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1677 +- uid: 1676 type: solid_wall components: - parent: 15 pos: -26.5,2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1678 +- uid: 1677 type: solid_wall components: - parent: 15 pos: -27.5,2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1679 +- uid: 1678 type: Poweredlight components: - parent: 15 @@ -22958,399 +22949,399 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 1680 +- uid: 1679 type: Window components: - parent: 15 pos: -25.5,9.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1681 +- uid: 1680 type: solid_wall components: - parent: 15 pos: -30.5,2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1682 +- uid: 1681 type: solid_wall components: - parent: 15 pos: -31.5,2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1683 +- uid: 1682 type: solid_wall components: - parent: 15 pos: -31.5,1.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1684 +- uid: 1683 type: solid_wall components: - parent: 15 pos: -31.5,0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1685 +- uid: 1684 type: solid_wall components: - parent: 15 pos: -31.5,-0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1686 +- uid: 1685 type: solid_wall components: - parent: 15 pos: -31.5,-1.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1687 +- uid: 1686 type: solid_wall components: - parent: 15 pos: -31.5,-2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1688 +- uid: 1687 type: solid_wall components: - parent: 15 pos: -34.5,-5.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1689 +- uid: 1688 type: solid_wall components: - parent: 15 pos: -34.5,-4.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1690 +- uid: 1689 type: solid_wall components: - parent: 15 pos: -34.5,-3.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1691 +- uid: 1690 type: solid_wall components: - parent: 15 pos: -34.5,-2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1692 +- uid: 1691 type: solid_wall components: - parent: 15 pos: -34.5,-1.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1693 +- uid: 1692 type: solid_wall components: - parent: 15 pos: -34.5,-0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1694 +- uid: 1693 type: solid_wall components: - parent: 15 pos: -34.5,0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1695 +- uid: 1694 type: solid_wall components: - parent: 15 pos: -34.5,1.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1696 +- uid: 1695 type: solid_wall components: - parent: 15 pos: -33.5,1.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1697 +- uid: 1696 type: solid_wall components: - parent: 15 pos: -33.5,2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1698 +- uid: 1697 type: LowWall components: - parent: 15 pos: -5.5,2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1699 +- uid: 1698 type: LowWall components: - parent: 15 pos: -6.5,2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1700 +- uid: 1699 type: LowWall components: - parent: 15 pos: -7.5,2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1701 +- uid: 1700 type: LowWall components: - parent: 15 pos: -8.5,2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1702 +- uid: 1701 type: LowWall components: - parent: 15 pos: -35.5,-8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1703 +- uid: 1702 type: LowWall components: - parent: 15 pos: -36.5,-8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1704 +- uid: 1703 type: LowWall components: - parent: 15 pos: -37.5,-8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1705 +- uid: 1704 type: LowWall components: - parent: 15 pos: -38.5,-8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1706 +- uid: 1705 type: LowWall components: - parent: 15 pos: -38.5,-7.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1707 +- uid: 1706 type: LowWall components: - parent: 15 pos: -38.5,-6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1708 +- uid: 1707 type: LowWall components: - parent: 15 pos: -38.5,-5.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1709 +- uid: 1708 type: LowWall components: - parent: 15 pos: -38.5,-4.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1710 +- uid: 1709 type: LowWall components: - parent: 15 pos: -39.5,-4.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1711 +- uid: 1710 type: LowWall components: - parent: 15 pos: -37.5,-4.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1712 +- uid: 1711 type: LowWall components: - parent: 15 pos: -39.5,-2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1713 +- uid: 1712 type: LowWall components: - parent: 15 pos: -38.5,-2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1714 +- uid: 1713 type: LowWall components: - parent: 15 pos: -37.5,-2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1715 +- uid: 1714 type: LowWall components: - parent: 15 pos: -38.5,-1.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1716 +- uid: 1715 type: LowWall components: - parent: 15 pos: -38.5,-0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1717 +- uid: 1716 type: LowWall components: - parent: 15 pos: -38.5,0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1718 +- uid: 1717 type: ReinforcedWindow components: - parent: 15 pos: -37.5,-2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1719 +- uid: 1718 type: LowWall components: - parent: 15 pos: -39.5,1.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1720 +- uid: 1719 type: LowWall components: - parent: 15 pos: -40.5,1.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1721 +- uid: 1720 type: LowWall components: - parent: 15 pos: -40.5,2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1722 +- uid: 1721 type: LowWall components: - parent: 15 pos: -40.5,3.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1723 +- uid: 1722 type: LowWall components: - parent: 15 pos: -41.5,3.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1724 +- uid: 1723 type: LowWall components: - parent: 15 pos: -39.5,3.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1725 +- uid: 1724 type: LowWall components: - parent: 15 pos: -39.5,5.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1726 +- uid: 1725 type: LowWall components: - parent: 15 pos: -40.5,5.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1727 +- uid: 1726 type: LowWall components: - parent: 15 pos: -41.5,5.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1728 +- uid: 1727 type: LowWall components: - parent: 15 pos: -40.5,6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1729 +- uid: 1728 type: LowWall components: - parent: 15 pos: -40.5,7.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1730 +- uid: 1729 type: LowWall components: - parent: 15 pos: -41.5,7.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1731 +- uid: 1730 type: LowWall components: - parent: 15 pos: -39.5,7.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1732 +- uid: 1731 type: LowWall components: - parent: 15 pos: -39.5,9.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1733 +- uid: 1732 type: LowWall components: - parent: 15 pos: -40.5,9.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1734 +- uid: 1733 type: LowWall components: - parent: 15 pos: -41.5,9.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1735 +- uid: 1734 type: LowWall components: - parent: 15 pos: -40.5,10.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1736 +- uid: 1735 type: Poweredlight components: - parent: 15 @@ -23365,104 +23356,104 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 1737 +- uid: 1736 type: solid_wall components: - parent: 15 pos: -40.5,11.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1738 +- uid: 1737 type: LowWall components: - parent: 15 pos: -37.5,11.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1739 +- uid: 1738 type: LowWall components: - parent: 15 pos: -36.5,11.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1740 +- uid: 1739 type: LowWall components: - parent: 15 pos: -35.5,11.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1741 +- uid: 1740 type: Catwalk components: - parent: 15 pos: -32.5,8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1742 +- uid: 1741 type: solid_wall components: - parent: 15 pos: 0.5,21.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1743 +- uid: 1742 type: ReinforcedWindow components: - parent: 15 pos: 30.5,4.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1744 +- uid: 1743 type: Window components: - parent: 15 pos: 32.5,1.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1745 +- uid: 1744 type: Window components: - parent: 15 pos: 34.5,1.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1746 +- uid: 1745 type: Window components: - parent: 15 pos: 36.5,-0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1747 +- uid: 1746 type: Window components: - parent: 15 pos: 37.5,1.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1748 +- uid: 1747 type: Window components: - parent: 15 pos: 39.5,1.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1749 +- uid: 1748 type: Window components: - parent: 15 pos: 40.5,1.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1750 +- uid: 1749 type: APC components: - parent: 15 pos: -11.5,2.5 type: Transform -- uid: 1751 +- uid: 1750 type: Poweredlight components: - parent: 15 @@ -23477,1224 +23468,1223 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 1752 - type: solid_wall +- uid: 1751 + type: SignCloning components: - parent: 15 - pos: -25.5,-16.5 + pos: 7.326743,-12.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1752 + type: SignSmoking + components: + - parent: 15 + pos: 42.70487,10.5 rot: -1.5707963267948966 rad type: Transform - uid: 1753 - type: solid_wall - components: - - parent: 15 - pos: -25.5,-14.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1754 type: Window components: - parent: 15 pos: 32.5,7.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1755 +- uid: 1754 type: Window components: - parent: 15 pos: 34.5,7.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1756 +- uid: 1755 type: ReinforcedWindow components: - parent: 15 pos: 30.5,14.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1757 +- uid: 1756 type: ReinforcedWindow components: - parent: 15 pos: 30.5,15.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1758 +- uid: 1757 type: ReinforcedWindow components: - parent: 15 pos: 31.5,15.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1759 +- uid: 1758 type: ReinforcedWindow components: - parent: 15 pos: 32.5,15.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1760 +- uid: 1759 type: ReinforcedWindow components: - parent: 15 pos: 33.5,15.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1761 +- uid: 1760 type: ReinforcedWindow components: - parent: 15 pos: 34.5,15.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1762 +- uid: 1761 type: ReinforcedWindow components: - parent: 15 pos: 35.5,15.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1763 +- uid: 1762 type: ReinforcedWindow components: - parent: 15 pos: 36.5,15.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1764 +- uid: 1763 type: ReinforcedWindow components: - parent: 15 pos: 36.5,14.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1765 - type: ReinforcedWindow +- uid: 1764 + type: solid_wall components: - parent: 15 - pos: 28.5,14.5 + pos: -20.5,-16.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1765 + type: solid_wall + components: + - parent: 15 + pos: -1.5,-7.5 rot: -1.5707963267948966 rad type: Transform - uid: 1766 - type: ReinforcedWindow + type: SignSmoking components: - parent: 15 - pos: 27.5,14.5 + pos: -1.2919803,-7.6148567 rot: -1.5707963267948966 rad type: Transform - uid: 1767 type: ReinforcedWindow components: - parent: 15 - pos: 26.5,14.5 + pos: 21.5,14.5 rot: -1.5707963267948966 rad type: Transform - uid: 1768 type: ReinforcedWindow components: - parent: 15 - pos: 24.5,14.5 + pos: 23.5,14.5 rot: -1.5707963267948966 rad type: Transform - uid: 1769 type: ReinforcedWindow components: - parent: 15 - pos: 23.5,14.5 + pos: 23.5,15.5 rot: -1.5707963267948966 rad type: Transform - uid: 1770 - type: ReinforcedWindow - components: - - parent: 15 - pos: 23.5,15.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1771 type: ReinforcedWindow components: - parent: 15 pos: 23.5,16.5 rot: -1.5707963267948966 rad type: Transform +- uid: 1771 + type: SignDirectionalBridge + components: + - parent: 15 + pos: 1.3437586,6.5 + rot: 1.5707963267948966 rad + type: Transform - uid: 1772 + type: SignConference + components: + - parent: 15 + pos: -2.6767635,22.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 1773 + type: SignArmory + components: + - parent: 15 + pos: -13.678196,17.5 + type: Transform +- uid: 1774 type: ReinforcedWindow components: - parent: 15 pos: 21.5,16.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1773 - type: ReinforcedWindow - components: - - parent: 15 - pos: 21.5,15.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1774 - type: ReinforcedWindow - components: - - parent: 15 - pos: 21.5,14.5 - rot: -1.5707963267948966 rad - type: Transform - uid: 1775 - type: ReinforcedWindow + type: LowWall components: - parent: 15 - pos: 18.5,14.5 + pos: 14.5,18.5 rot: -1.5707963267948966 rad type: Transform - uid: 1776 type: LowWall components: - parent: 15 - pos: 14.5,18.5 + pos: 14.5,19.5 rot: -1.5707963267948966 rad type: Transform - uid: 1777 - type: LowWall - components: - - parent: 15 - pos: 14.5,19.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1778 type: LowWall components: - parent: 15 pos: 14.5,20.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1779 +- uid: 1778 type: ReinforcedWindow components: - parent: 15 pos: 14.5,18.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1780 +- uid: 1779 type: ReinforcedWindow components: - parent: 15 pos: 14.5,19.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1781 +- uid: 1780 type: ReinforcedWindow components: - parent: 15 pos: 14.5,20.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1782 +- uid: 1781 type: ReinforcedWindow components: - parent: 15 pos: 6.5,18.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1783 +- uid: 1782 type: ReinforcedWindow components: - parent: 15 pos: 6.5,19.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1784 +- uid: 1783 type: ReinforcedWindow components: - parent: 15 pos: 8.5,6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1785 +- uid: 1784 type: Window components: - parent: 15 pos: 14.5,8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1786 +- uid: 1785 type: Window components: - parent: 15 pos: 19.5,6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1787 +- uid: 1786 type: Window components: - parent: 15 pos: 20.5,6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1788 +- uid: 1787 type: Window components: - parent: 15 pos: 21.5,6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1789 +- uid: 1788 type: Window components: - parent: 15 pos: 22.5,6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1790 +- uid: 1789 type: Window components: - parent: 15 pos: 13.5,-0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1791 +- uid: 1790 type: Window components: - parent: 15 pos: 13.5,-1.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1792 +- uid: 1791 type: Window components: - parent: 15 pos: 13.5,1.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1793 +- uid: 1792 type: Window components: - parent: 15 pos: 11.5,2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1794 +- uid: 1793 type: Window components: - parent: 15 pos: 10.5,2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1795 +- uid: 1794 type: Window components: - parent: 15 pos: 9.5,2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1796 +- uid: 1795 type: Window components: - parent: 15 pos: 8.5,2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1797 +- uid: 1796 type: Window components: - parent: 15 pos: 7.5,2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1798 +- uid: 1797 type: Window components: - parent: 15 pos: 8.5,-6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1799 +- uid: 1798 type: Window components: - parent: 15 pos: 9.5,-6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1800 +- uid: 1799 type: Window components: - parent: 15 pos: 6.5,-6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1801 +- uid: 1800 type: Window components: - parent: 15 pos: 12.5,-6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1802 +- uid: 1801 type: Window components: - parent: 15 pos: 13.5,-5.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1803 +- uid: 1802 type: Window components: - parent: 15 pos: 13.5,-4.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1804 +- uid: 1803 type: Window components: - parent: 15 pos: 16.5,-3.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1805 +- uid: 1804 type: Window components: - parent: 15 pos: 18.5,-3.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1806 +- uid: 1805 type: LowWall components: - parent: 15 pos: 20.5,-15.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1807 +- uid: 1806 type: LowWall components: - parent: 15 pos: 20.5,-12.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1808 +- uid: 1807 type: Window components: - parent: 15 pos: 20.5,-15.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1809 +- uid: 1808 type: LowWall components: - parent: 15 pos: 10.5,-12.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1810 +- uid: 1809 type: LowWall components: - parent: 15 pos: 7.5,-12.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1811 +- uid: 1810 type: LowWall components: - parent: 15 pos: 11.5,-13.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1812 +- uid: 1811 type: LowWall components: - parent: 15 pos: 11.5,-16.5 rot: -1.5707963267948966 rad type: Transform +- uid: 1812 + type: Window + components: + - parent: 15 + pos: 11.5,-16.5 + rot: -1.5707963267948966 rad + type: Transform - uid: 1813 type: Window components: - parent: 15 - pos: 11.5,-16.5 + pos: 11.5,-13.5 rot: -1.5707963267948966 rad type: Transform - uid: 1814 type: Window components: - parent: 15 - pos: 11.5,-13.5 + pos: 10.5,-12.5 rot: -1.5707963267948966 rad type: Transform - uid: 1815 type: Window components: - parent: 15 - pos: 10.5,-12.5 + pos: 7.5,-12.5 rot: -1.5707963267948966 rad type: Transform - uid: 1816 type: Window components: - parent: 15 - pos: 7.5,-12.5 + pos: 5.5,-10.5 rot: -1.5707963267948966 rad type: Transform - uid: 1817 type: Window components: - parent: 15 - pos: 5.5,-10.5 + pos: 5.5,-9.5 rot: -1.5707963267948966 rad type: Transform - uid: 1818 type: Window components: - parent: 15 - pos: 5.5,-9.5 + pos: 5.5,-8.5 rot: -1.5707963267948966 rad type: Transform - uid: 1819 type: Window components: - parent: 15 - pos: 5.5,-8.5 + pos: 0.5,-16.5 rot: -1.5707963267948966 rad type: Transform - uid: 1820 type: Window components: - parent: 15 - pos: 0.5,-16.5 + pos: -2.5,-18.5 rot: -1.5707963267948966 rad type: Transform - uid: 1821 type: Window components: - parent: 15 - pos: -2.5,-18.5 + pos: -4.5,-18.5 rot: -1.5707963267948966 rad type: Transform - uid: 1822 type: Window components: - parent: 15 - pos: -4.5,-18.5 + pos: -5.5,-21.5 rot: -1.5707963267948966 rad type: Transform - uid: 1823 type: Window components: - parent: 15 - pos: -5.5,-21.5 + pos: -4.5,-21.5 rot: -1.5707963267948966 rad type: Transform - uid: 1824 type: Window components: - parent: 15 - pos: -4.5,-21.5 + pos: -2.5,-21.5 rot: -1.5707963267948966 rad type: Transform - uid: 1825 type: Window components: - parent: 15 - pos: -2.5,-21.5 + pos: -5.5,2.5 rot: -1.5707963267948966 rad type: Transform - uid: 1826 type: Window components: - parent: 15 - pos: -5.5,2.5 + pos: -6.5,2.5 rot: -1.5707963267948966 rad type: Transform - uid: 1827 type: Window components: - parent: 15 - pos: -6.5,2.5 + pos: -27.5,6.5 rot: -1.5707963267948966 rad type: Transform - uid: 1828 type: Window components: - parent: 15 - pos: -27.5,6.5 + pos: -28.5,6.5 rot: -1.5707963267948966 rad type: Transform - uid: 1829 type: Window components: - parent: 15 - pos: -28.5,6.5 + pos: -29.5,6.5 rot: -1.5707963267948966 rad type: Transform - uid: 1830 - type: Window + type: LowWall components: - parent: 15 pos: -29.5,6.5 rot: -1.5707963267948966 rad type: Transform - uid: 1831 - type: LowWall - components: - - parent: 15 - pos: -29.5,6.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1832 type: LowWall components: - parent: 15 pos: -27.5,6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1833 +- uid: 1832 type: ReinforcedWindow components: - parent: 15 pos: -35.5,-8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1834 +- uid: 1833 type: ReinforcedWindow components: - parent: 15 pos: -36.5,-8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1835 +- uid: 1834 type: ReinforcedWindow components: - parent: 15 pos: -37.5,-8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1836 +- uid: 1835 type: ReinforcedWindow components: - parent: 15 pos: -38.5,-8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1837 +- uid: 1836 type: ReinforcedWindow components: - parent: 15 pos: -38.5,-7.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1838 +- uid: 1837 type: ReinforcedWindow components: - parent: 15 pos: -38.5,-6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1839 +- uid: 1838 type: ReinforcedWindow components: - parent: 15 pos: -38.5,-5.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1840 +- uid: 1839 type: ReinforcedWindow components: - parent: 15 pos: -38.5,-4.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1841 +- uid: 1840 type: ReinforcedWindow components: - parent: 15 pos: -37.5,-4.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1842 +- uid: 1841 type: ReinforcedWindow components: - parent: 15 pos: -39.5,-4.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1843 +- uid: 1842 type: ReinforcedWindow components: - parent: 15 pos: -38.5,-2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1844 +- uid: 1843 type: ReinforcedWindow components: - parent: 15 pos: -39.5,-2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1845 +- uid: 1844 type: solid_wall components: - parent: 15 pos: -38.5,1.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1846 +- uid: 1845 type: ReinforcedWindow components: - parent: 15 pos: -38.5,-1.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1847 +- uid: 1846 type: ReinforcedWindow components: - parent: 15 pos: -38.5,-0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1848 +- uid: 1847 type: ReinforcedWindow components: - parent: 15 pos: -38.5,0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1849 +- uid: 1848 type: ReinforcedWindow components: - parent: 15 pos: -39.5,1.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1850 +- uid: 1849 type: ReinforcedWindow components: - parent: 15 pos: -40.5,1.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1851 +- uid: 1850 type: ReinforcedWindow components: - parent: 15 pos: -40.5,2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1852 +- uid: 1851 type: ReinforcedWindow components: - parent: 15 pos: -40.5,3.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1853 +- uid: 1852 type: ReinforcedWindow components: - parent: 15 pos: -41.5,3.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1854 +- uid: 1853 type: ReinforcedWindow components: - parent: 15 pos: -39.5,3.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1855 +- uid: 1854 type: ReinforcedWindow components: - parent: 15 pos: -39.5,5.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1856 +- uid: 1855 type: ReinforcedWindow components: - parent: 15 pos: -40.5,5.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1857 +- uid: 1856 type: ReinforcedWindow components: - parent: 15 pos: -41.5,5.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1858 +- uid: 1857 type: ReinforcedWindow components: - parent: 15 pos: -40.5,6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1859 +- uid: 1858 type: ReinforcedWindow components: - parent: 15 pos: -40.5,7.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1860 +- uid: 1859 type: ReinforcedWindow components: - parent: 15 pos: -41.5,7.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1861 +- uid: 1860 type: ReinforcedWindow components: - parent: 15 pos: -39.5,7.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1862 +- uid: 1861 type: ReinforcedWindow components: - parent: 15 pos: -39.5,9.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1863 +- uid: 1862 type: ReinforcedWindow components: - parent: 15 pos: -40.5,9.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1864 +- uid: 1863 type: ReinforcedWindow components: - parent: 15 pos: -41.5,9.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1865 +- uid: 1864 type: ReinforcedWindow components: - parent: 15 pos: -40.5,10.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1866 +- uid: 1865 type: APC components: - parent: 15 pos: -33.5,7.5 type: Transform -- uid: 1867 +- uid: 1866 type: solid_wall components: - parent: 15 pos: -39.5,11.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1868 +- uid: 1867 type: ReinforcedWindow components: - parent: 15 pos: -37.5,11.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1869 +- uid: 1868 type: ReinforcedWindow components: - parent: 15 pos: -36.5,11.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1870 +- uid: 1869 type: ReinforcedWindow components: - parent: 15 pos: -35.5,11.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1871 +- uid: 1870 type: solid_wall components: - parent: 15 pos: -29.5,2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1872 +- uid: 1871 type: solid_wall components: - parent: 15 pos: -28.5,2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1873 +- uid: 1872 type: ReinforcedWindow components: - parent: 15 pos: -3.5,6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1874 +- uid: 1873 type: ReinforcedWindow components: - parent: 15 pos: -2.5,6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1875 +- uid: 1874 type: ReinforcedWindow components: - parent: 15 pos: -0.5,6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1876 +- uid: 1875 type: ReinforcedWindow components: - parent: 15 pos: 0.5,6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1877 +- uid: 1876 type: ReinforcedWindow components: - parent: 15 pos: -0.5,9.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1878 +- uid: 1877 type: ReinforcedWindow components: - parent: 15 pos: -3.5,9.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1879 +- uid: 1878 type: ReinforcedWindow components: - parent: 15 pos: -8.5,9.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1880 +- uid: 1879 type: ReinforcedWindow components: - parent: 15 pos: -7.5,9.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1881 +- uid: 1880 type: Window components: - parent: 15 pos: -10.5,14.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1882 +- uid: 1881 type: Window components: - parent: 15 pos: -7.5,18.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1883 +- uid: 1882 type: ReinforcedWindow components: - parent: 15 pos: -2.5,31.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1884 +- uid: 1883 type: ReinforcedWindow components: - parent: 15 pos: -2.5,32.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1885 +- uid: 1884 type: ReinforcedWindow components: - parent: 15 pos: -3.5,29.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1886 +- uid: 1885 type: ReinforcedWindow components: - parent: 15 pos: -1.5,32.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1887 +- uid: 1886 type: ReinforcedWindow components: - parent: 15 pos: -1.5,33.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1888 +- uid: 1887 type: ReinforcedWindow components: - parent: 15 pos: -0.5,33.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1889 +- uid: 1888 type: ReinforcedWindow components: - parent: 15 pos: 0.5,33.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1890 +- uid: 1889 type: ReinforcedWindow components: - parent: 15 pos: 1.5,33.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1891 +- uid: 1890 type: ReinforcedWindow components: - parent: 15 pos: 2.5,33.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1892 +- uid: 1891 type: ReinforcedWindow components: - parent: 15 pos: 3.5,33.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1893 +- uid: 1892 type: ReinforcedWindow components: - parent: 15 pos: 4.5,33.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1894 +- uid: 1893 type: ReinforcedWindow components: - parent: 15 pos: 5.5,33.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1895 +- uid: 1894 type: ReinforcedWindow components: - parent: 15 pos: 6.5,33.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1896 +- uid: 1895 type: ReinforcedWindow components: - parent: 15 pos: 7.5,33.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1897 +- uid: 1896 type: ReinforcedWindow components: - parent: 15 pos: 8.5,33.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1898 +- uid: 1897 type: ReinforcedWindow components: - parent: 15 pos: 8.5,32.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1899 +- uid: 1898 type: ReinforcedWindow components: - parent: 15 pos: 9.5,31.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1900 +- uid: 1899 type: ReinforcedWindow components: - parent: 15 pos: 9.5,32.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1901 +- uid: 1900 type: ReinforcedWindow components: - parent: 15 pos: 10.5,29.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1902 +- uid: 1901 type: ReinforcedWindow components: - parent: 15 pos: 3.5,22.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1903 +- uid: 1902 type: Window components: - parent: 15 pos: -0.5,27.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1904 +- uid: 1903 type: Window components: - parent: 15 pos: -1.5,27.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1905 +- uid: 1904 type: ReinforcedWindow components: - parent: 15 pos: 2.5,-24.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1906 +- uid: 1905 type: ReinforcedWindow components: - parent: 15 pos: 3.5,-24.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1907 +- uid: 1906 type: ReinforcedWindow components: - parent: 15 pos: 4.5,-24.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1908 +- uid: 1907 type: ReinforcedWindow components: - parent: 15 pos: 5.5,-24.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1909 +- uid: 1908 type: ReinforcedWindow components: - parent: 15 pos: 5.5,-23.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1910 +- uid: 1909 type: Window components: - parent: 15 pos: 9.5,-21.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1911 +- uid: 1910 type: Window components: - parent: 15 pos: 10.5,-21.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1912 +- uid: 1911 type: Window components: - parent: 15 pos: 11.5,-21.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1913 +- uid: 1912 type: ReinforcedWindow components: - parent: 15 pos: 51.5,1.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1914 +- uid: 1913 type: Wire components: - parent: 15 pos: 40.5,8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1915 +- uid: 1914 type: Wire components: - parent: 15 pos: 41.5,8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1916 +- uid: 1915 type: Wire components: - parent: 15 pos: 42.5,8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1917 +- uid: 1916 type: Wire components: - parent: 15 pos: 43.5,8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1918 +- uid: 1917 type: Wire components: - parent: 15 pos: 43.5,9.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1919 +- uid: 1918 type: Wire components: - parent: 15 pos: 43.5,10.5 rot: -1.5707963267948966 rad type: Transform +- uid: 1919 + type: APC + components: + - parent: 15 + pos: 43.5,10.5 + rot: -1.5707963267948966 rad + type: Transform - uid: 1920 - type: APC - components: - - parent: 15 - pos: 43.5,10.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 1921 type: Wire components: - parent: 15 pos: 41.5,4.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1922 +- uid: 1921 type: Wire components: - parent: 15 pos: 41.5,3.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1923 +- uid: 1922 type: Wire components: - parent: 15 pos: 41.5,2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1924 +- uid: 1923 type: Wire components: - parent: 15 pos: 41.5,1.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1925 +- uid: 1924 type: APC components: - parent: 15 pos: 41.5,1.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1926 +- uid: 1925 type: WaterTankFull components: - parent: 15 @@ -24703,7 +24693,7 @@ entities: type: Transform - anchored: False type: Collidable -- uid: 1927 +- uid: 1926 type: WaterTankFull components: - parent: 15 @@ -24712,22 +24702,13 @@ entities: type: Transform - anchored: False type: Collidable -- uid: 1928 - type: Poweredlight +- uid: 1927 + type: SignDirectionalEng components: - parent: 15 - pos: 42.5,10 - rot: -1.5707963267948966 rad + pos: 18.507353,6.5 type: Transform - - color: '#FFFFFFFF' - type: PointLight - - powerLoad: 40 - type: PowerReceiver - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 1929 +- uid: 1928 type: Poweredlight components: - parent: 15 @@ -24741,7 +24722,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 1930 +- uid: 1929 type: Poweredlight components: - parent: 15 @@ -24756,7 +24737,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 1931 +- uid: 1930 type: Poweredlight components: - parent: 15 @@ -24771,34 +24752,24 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer +- uid: 1931 + type: Poweredlight + components: + - parent: 15 + pos: -14.5,17 + rot: -1.5707963267948966 rad + type: Transform + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer - uid: 1932 - type: PoweredSmallLight + type: PaintingMonkey components: - parent: 15 - pos: 38,12.5 - rot: 3.141592653589793 rad + pos: -7.6996727,-5.5 type: Transform - - color: '#FFFFFFFF' - type: PointLight - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer - uid: 1933 - type: PoweredSmallLight - components: - - parent: 15 - pos: 44,12.5 - type: Transform - - color: '#FFFFFFFF' - type: PointLight - - powerLoad: 40 - type: PowerReceiver - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 1934 type: PoweredSmallLight components: - parent: 15 @@ -24810,7 +24781,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 1935 +- uid: 1934 type: Poweredlight components: - parent: 15 @@ -24825,7 +24796,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 1936 +- uid: 1935 type: Poweredlight components: - parent: 15 @@ -24838,7 +24809,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 1937 +- uid: 1936 type: Poweredlight components: - parent: 15 @@ -24850,65 +24821,65 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 1938 +- uid: 1937 type: Wire components: - parent: 15 pos: 32.5,9.5 type: Transform -- uid: 1939 +- uid: 1938 type: Wire components: - parent: 15 pos: 31.5,9.5 type: Transform -- uid: 1940 +- uid: 1939 type: Wire components: - parent: 15 pos: 30.5,9.5 type: Transform -- uid: 1941 +- uid: 1940 type: Wire components: - parent: 15 pos: 29.5,9.5 type: Transform -- uid: 1942 +- uid: 1941 type: APC components: - parent: 15 pos: 29.5,9.5 type: Transform -- uid: 1943 +- uid: 1942 type: Wire components: - parent: 15 pos: 35.5,-1.5 rot: 3.141592653589793 rad type: Transform -- uid: 1944 +- uid: 1943 type: Wire components: - parent: 15 pos: 34.5,-1.5 rot: 3.141592653589793 rad type: Transform -- uid: 1945 +- uid: 1944 type: Wire components: - parent: 15 pos: 36.5,-1.5 rot: 3.141592653589793 rad type: Transform -- uid: 1946 +- uid: 1945 type: APC components: - parent: 15 pos: 36.5,-1.5 rot: 3.141592653589793 rad type: Transform -- uid: 1947 +- uid: 1946 type: Poweredlight components: - parent: 15 @@ -24923,7 +24894,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 1948 +- uid: 1947 type: Poweredlight components: - parent: 15 @@ -24937,7 +24908,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 1949 +- uid: 1948 type: Poweredlight components: - parent: 15 @@ -24952,7 +24923,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 1950 +- uid: 1949 type: Poweredlight components: - parent: 15 @@ -24967,7 +24938,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 1951 +- uid: 1950 type: Poweredlight components: - parent: 15 @@ -24981,22 +24952,14 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 1952 - type: Poweredlight +- uid: 1951 + type: SignEngineering components: - parent: 15 - pos: 28.5,7 + pos: 26.30795,7.5 rot: -1.5707963267948966 rad type: Transform - - color: '#FFFFFFFF' - type: PointLight - - powerLoad: 40 - type: PowerReceiver - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 1953 +- uid: 1952 type: Poweredlight components: - parent: 15 @@ -25011,7 +24974,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 1954 +- uid: 1953 type: Poweredlight components: - parent: 15 @@ -25025,49 +24988,49 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 1955 +- uid: 1954 type: Wire components: - parent: 15 pos: 27.5,3.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1956 +- uid: 1955 type: Wire components: - parent: 15 pos: 27.5,2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1957 +- uid: 1956 type: Wire components: - parent: 15 pos: 27.5,1.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1958 +- uid: 1957 type: Wire components: - parent: 15 pos: 27.5,0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1959 +- uid: 1958 type: Wire components: - parent: 15 pos: 27.5,-0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1960 +- uid: 1959 type: APC components: - parent: 15 pos: 27.5,-0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1961 +- uid: 1960 type: PoweredSmallLight components: - parent: 15 @@ -25082,7 +25045,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 1962 +- uid: 1961 type: PoweredSmallLight components: - parent: 15 @@ -25097,7 +25060,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 1963 +- uid: 1962 type: PoweredSmallLight components: - parent: 15 @@ -25112,7 +25075,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 1964 +- uid: 1963 type: PoweredSmallLight components: - parent: 15 @@ -25127,7 +25090,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 1965 +- uid: 1964 type: PoweredSmallLight components: - parent: 15 @@ -25141,7 +25104,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 1966 +- uid: 1965 type: PoweredSmallLight components: - parent: 15 @@ -25155,7 +25118,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 1967 +- uid: 1966 type: PoweredSmallLight components: - parent: 15 @@ -25169,7 +25132,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 1968 +- uid: 1967 type: PoweredSmallLight components: - parent: 15 @@ -25184,21 +25147,21 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 1969 +- uid: 1968 type: solid_wall components: - parent: 15 pos: 45.5,7.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1970 +- uid: 1969 type: solid_wall components: - parent: 15 pos: 45.5,6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1971 +- uid: 1970 type: PoweredSmallLight components: - parent: 15 @@ -25213,98 +25176,98 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 1972 +- uid: 1971 type: APC components: - parent: 15 pos: 20.5,-4.5 rot: 1.5707963267948966 rad type: Transform -- uid: 1973 +- uid: 1972 type: Wire components: - parent: 15 pos: 23.5,-12.5 rot: 1.5707963267948966 rad type: Transform -- uid: 1974 +- uid: 1973 type: Wire components: - parent: 15 pos: 23.5,-11.5 rot: 1.5707963267948966 rad type: Transform +- uid: 1974 + type: APC + components: + - parent: 15 + pos: 23.5,-11.5 + rot: 1.5707963267948966 rad + type: Transform - uid: 1975 - type: APC - components: - - parent: 15 - pos: 23.5,-11.5 - rot: 1.5707963267948966 rad - type: Transform -- uid: 1976 type: Wire components: - parent: 15 pos: 15.5,-16.5 rot: 1.5707963267948966 rad type: Transform -- uid: 1977 +- uid: 1976 type: Wire components: - parent: 15 pos: 16.5,-16.5 rot: 1.5707963267948966 rad type: Transform -- uid: 1978 +- uid: 1977 type: Wire components: - parent: 15 pos: 16.5,-17.5 rot: 1.5707963267948966 rad type: Transform -- uid: 1979 +- uid: 1978 type: Wire components: - parent: 15 pos: 16.5,-18.5 rot: 1.5707963267948966 rad type: Transform +- uid: 1979 + type: APC + components: + - parent: 15 + pos: 16.5,-18.5 + rot: 1.5707963267948966 rad + type: Transform - uid: 1980 - type: APC - components: - - parent: 15 - pos: 16.5,-18.5 - rot: 1.5707963267948966 rad - type: Transform -- uid: 1981 type: Wire components: - parent: 15 pos: 8.5,-15.5 rot: 1.5707963267948966 rad type: Transform -- uid: 1982 +- uid: 1981 type: Wire components: - parent: 15 pos: 8.5,-17.5 rot: 1.5707963267948966 rad type: Transform -- uid: 1983 +- uid: 1982 type: Wire components: - parent: 15 pos: 8.5,-16.5 rot: 1.5707963267948966 rad type: Transform -- uid: 1984 +- uid: 1983 type: APC components: - parent: 15 pos: 8.5,-17.5 rot: 1.5707963267948966 rad type: Transform -- uid: 1985 +- uid: 1984 type: PoweredSmallLight components: - parent: 15 @@ -25319,7 +25282,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 1986 +- uid: 1985 type: PoweredSmallLight components: - parent: 15 @@ -25334,7 +25297,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 1987 +- uid: 1986 type: PoweredSmallLight components: - parent: 15 @@ -25349,7 +25312,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 1988 +- uid: 1987 type: Poweredlight components: - parent: 15 @@ -25364,7 +25327,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 1989 +- uid: 1988 type: Poweredlight components: - parent: 15 @@ -25377,7 +25340,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 1990 +- uid: 1989 type: Poweredlight components: - parent: 15 @@ -25392,7 +25355,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 1991 +- uid: 1990 type: Poweredlight components: - parent: 15 @@ -25407,7 +25370,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 1992 +- uid: 1991 type: Poweredlight components: - parent: 15 @@ -25422,7 +25385,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 1993 +- uid: 1992 type: ChairOfficeLight components: - parent: 15 @@ -25431,7 +25394,7 @@ entities: type: Transform - anchored: False type: Collidable -- uid: 1994 +- uid: 1993 type: ChairOfficeLight components: - parent: 15 @@ -25440,21 +25403,21 @@ entities: type: Transform - anchored: False type: Collidable -- uid: 1995 +- uid: 1994 type: solid_wall components: - parent: 15 pos: 47.5,5.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1996 +- uid: 1995 type: solid_wall components: - parent: 15 pos: 51.5,-0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 1997 +- uid: 1996 type: Poweredlight components: - parent: 15 @@ -25468,7 +25431,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 1998 +- uid: 1997 type: Poweredlight components: - parent: 15 @@ -25483,7 +25446,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 1999 +- uid: 1998 type: Poweredlight components: - parent: 15 @@ -25498,7 +25461,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2000 +- uid: 1999 type: Poweredlight components: - parent: 15 @@ -25512,51 +25475,44 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2001 +- uid: 2000 type: Wire components: - parent: 15 pos: 6.5,-1.5 type: Transform -- uid: 2002 +- uid: 2001 type: Wire components: - parent: 15 pos: 6.5,-2.5 type: Transform -- uid: 2003 +- uid: 2002 type: Wire components: - parent: 15 pos: 6.5,-3.5 type: Transform -- uid: 2004 +- uid: 2003 type: Wire components: - parent: 15 pos: 5.5,-3.5 type: Transform -- uid: 2005 +- uid: 2004 type: APC components: - parent: 15 pos: 5.5,-3.5 type: Transform -- uid: 2006 - type: Poweredlight +- uid: 2005 + type: SignDirectionalMed components: - parent: 15 - pos: 6,1.5 + pos: 5.768486,-12.5 + rot: 1.5707963267948966 rad type: Transform - - color: '#FFFFFFFF' - type: PointLight - - powerLoad: 40 - type: PowerReceiver - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 2007 +- uid: 2006 type: Poweredlight components: - parent: 15 @@ -25571,28 +25527,28 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2008 +- uid: 2007 type: Wire components: - parent: 15 pos: 17.5,1.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2009 +- uid: 2008 type: Wire components: - parent: 15 pos: 17.5,2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2010 +- uid: 2009 type: APC components: - parent: 15 pos: 17.5,2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2011 +- uid: 2010 type: Poweredlight components: - parent: 15 @@ -25607,20 +25563,14 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2012 - type: Poweredlight +- uid: 2011 + type: SignCargo components: - parent: 15 - pos: 14.5,-4 + pos: 16.688538,8.5 rot: -1.5707963267948966 rad type: Transform - - color: '#FFFFFFFF' - type: PointLight - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 2013 +- uid: 2012 type: Poweredlight components: - parent: 15 @@ -25634,7 +25584,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2014 +- uid: 2013 type: Poweredlight components: - parent: 15 @@ -25649,7 +25599,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2015 +- uid: 2014 type: Poweredlight components: - parent: 15 @@ -25664,7 +25614,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2016 +- uid: 2015 type: Poweredlight components: - parent: 15 @@ -25679,70 +25629,70 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2017 +- uid: 2016 type: Wire components: - parent: 15 pos: 14.5,11.5 rot: 1.5707963267948966 rad type: Transform -- uid: 2018 +- uid: 2017 type: Wire components: - parent: 15 pos: 14.5,12.5 rot: 1.5707963267948966 rad type: Transform -- uid: 2019 +- uid: 2018 type: Wire components: - parent: 15 pos: 14.5,13.5 rot: 1.5707963267948966 rad type: Transform +- uid: 2019 + type: APC + components: + - parent: 15 + pos: 14.5,13.5 + rot: 1.5707963267948966 rad + type: Transform - uid: 2020 - type: APC - components: - - parent: 15 - pos: 14.5,13.5 - rot: 1.5707963267948966 rad - type: Transform -- uid: 2021 type: Wire components: - parent: 15 pos: 8.5,10.5 rot: 1.5707963267948966 rad type: Transform -- uid: 2022 +- uid: 2021 type: Wire components: - parent: 15 pos: 7.5,10.5 rot: 1.5707963267948966 rad type: Transform -- uid: 2023 +- uid: 2022 type: Wire components: - parent: 15 pos: 6.5,10.5 rot: 1.5707963267948966 rad type: Transform -- uid: 2024 +- uid: 2023 type: Wire components: - parent: 15 pos: 5.5,10.5 rot: 1.5707963267948966 rad type: Transform -- uid: 2025 +- uid: 2024 type: APC components: - parent: 15 pos: 5.5,10.5 rot: 1.5707963267948966 rad type: Transform -- uid: 2026 +- uid: 2025 type: Poweredlight components: - parent: 15 @@ -25754,7 +25704,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2027 +- uid: 2026 type: Poweredlight components: - parent: 15 @@ -25768,7 +25718,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2028 +- uid: 2027 type: Poweredlight components: - parent: 15 @@ -25783,7 +25733,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2029 +- uid: 2028 type: Poweredlight components: - parent: 15 @@ -25797,7 +25747,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2030 +- uid: 2029 type: Poweredlight components: - parent: 15 @@ -25810,7 +25760,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2031 +- uid: 2030 type: Poweredlight components: - parent: 15 @@ -25825,7 +25775,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2032 +- uid: 2031 type: Poweredlight components: - parent: 15 @@ -25840,7 +25790,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2033 +- uid: 2032 type: Poweredlight components: - parent: 15 @@ -25855,7 +25805,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2034 +- uid: 2033 type: Poweredlight components: - parent: 15 @@ -25870,7 +25820,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2035 +- uid: 2034 type: Poweredlight components: - parent: 15 @@ -25884,7 +25834,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2036 +- uid: 2035 type: PoweredSmallLight components: - parent: 15 @@ -25899,7 +25849,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2037 +- uid: 2036 type: PoweredSmallLight components: - parent: 15 @@ -25913,7 +25863,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2038 +- uid: 2037 type: PoweredSmallLight components: - parent: 15 @@ -25925,115 +25875,115 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2039 +- uid: 2038 type: Wire components: - parent: 15 pos: 9.5,20.5 type: Transform -- uid: 2040 +- uid: 2039 type: Wire components: - parent: 15 pos: 8.5,20.5 type: Transform -- uid: 2041 +- uid: 2040 type: Wire components: - parent: 15 pos: 8.5,19.5 type: Transform -- uid: 2042 +- uid: 2041 type: Wire components: - parent: 15 pos: 8.5,18.5 type: Transform -- uid: 2043 +- uid: 2042 type: solid_wall components: - parent: 15 pos: 7.5,15.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2044 +- uid: 2043 type: solid_wall components: - parent: 15 pos: 8.5,15.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2045 +- uid: 2044 type: Wire components: - parent: 15 pos: 9.5,16.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2046 +- uid: 2045 type: Wire components: - parent: 15 pos: 9.5,15.5 rot: -1.5707963267948966 rad type: Transform +- uid: 2046 + type: APC + components: + - parent: 15 + pos: 9.5,15.5 + rot: -1.5707963267948966 rad + type: Transform - uid: 2047 - type: APC + type: Wire components: - parent: 15 - pos: 9.5,15.5 + pos: -2.5,19.5 rot: -1.5707963267948966 rad type: Transform - uid: 2048 type: Wire components: - parent: 15 - pos: -2.5,19.5 + pos: -2.5,18.5 rot: -1.5707963267948966 rad type: Transform - uid: 2049 type: Wire components: - parent: 15 - pos: -2.5,18.5 + pos: -2.5,17.5 rot: -1.5707963267948966 rad type: Transform - uid: 2050 - type: Wire - components: - - parent: 15 - pos: -2.5,17.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2051 type: Wire components: - parent: 15 pos: -0.5,17.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2052 +- uid: 2051 type: APC components: - parent: 15 pos: -2.5,19.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2053 +- uid: 2052 type: Wire components: - parent: 15 pos: 7.5,26.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2054 +- uid: 2053 type: Wire components: - parent: 15 pos: 7.5,27.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2055 +- uid: 2054 type: Poweredlight components: - parent: 15 @@ -26048,7 +25998,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2056 +- uid: 2055 type: Poweredlight components: - parent: 15 @@ -26063,7 +26013,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2057 +- uid: 2056 type: Poweredlight components: - parent: 15 @@ -26078,7 +26028,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2058 +- uid: 2057 type: Poweredlight components: - parent: 15 @@ -26093,7 +26043,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2059 +- uid: 2058 type: Poweredlight components: - parent: 15 @@ -26107,7 +26057,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2060 +- uid: 2059 type: Poweredlight components: - parent: 15 @@ -26122,7 +26072,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2061 +- uid: 2060 type: Poweredlight components: - parent: 15 @@ -26137,7 +26087,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2062 +- uid: 2061 type: Poweredlight components: - parent: 15 @@ -26152,7 +26102,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2063 +- uid: 2062 type: Poweredlight components: - parent: 15 @@ -26167,7 +26117,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2064 +- uid: 2063 type: Poweredlight components: - parent: 15 @@ -26179,7 +26129,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2065 +- uid: 2064 type: Poweredlight components: - parent: 15 @@ -26192,7 +26142,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2066 +- uid: 2065 type: Poweredlight components: - parent: 15 @@ -26206,7 +26156,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2067 +- uid: 2066 type: PoweredSmallLight components: - parent: 15 @@ -26221,14 +26171,14 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2068 +- uid: 2067 type: AirlockMaintCommonLocked components: - parent: 15 pos: 1.5,-23.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2069 +- uid: 2068 type: PoweredSmallLight components: - parent: 15 @@ -26243,49 +26193,49 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2070 +- uid: 2069 type: Wire components: - parent: 15 pos: -9.5,20.5 rot: 1.5707963267948966 rad type: Transform -- uid: 2071 +- uid: 2070 type: Wire components: - parent: 15 pos: -10.5,20.5 rot: 1.5707963267948966 rad type: Transform -- uid: 2072 +- uid: 2071 type: Wire components: - parent: 15 pos: -10.5,21.5 rot: 1.5707963267948966 rad type: Transform -- uid: 2073 +- uid: 2072 type: reinforced_wall components: - parent: 15 pos: -10.5,21.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2074 +- uid: 2073 type: reinforced_wall components: - parent: 15 pos: -10.5,22.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2075 +- uid: 2074 type: APC components: - parent: 15 pos: -10.5,21.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2076 +- uid: 2075 type: Poweredlight components: - parent: 15 @@ -26300,7 +26250,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2077 +- uid: 2076 type: Poweredlight components: - parent: 15 @@ -26312,22 +26262,18 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2078 +- uid: 2077 type: Poweredlight components: - parent: 15 - pos: -12.5,13 - rot: 1.5707963267948966 rad + pos: -6.0158176,18 + rot: -1.5707963267948966 rad type: Transform - - color: '#FFFFFFFF' - type: PointLight - - powerLoad: 40 - type: PowerReceiver - containers: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2079 +- uid: 2078 type: Poweredlight components: - parent: 15 @@ -26342,21 +26288,18 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2080 +- uid: 2079 type: Poweredlight components: - parent: 15 - pos: -10,12.5 + pos: -1.5,19 + rot: -1.5707963267948966 rad type: Transform - - color: '#FFFFFFFF' - type: PointLight - - powerLoad: 40 - type: PowerReceiver - containers: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2081 +- uid: 2080 type: Poweredlight components: - parent: 15 @@ -26368,7 +26311,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2082 +- uid: 2081 type: Poweredlight components: - parent: 15 @@ -26383,7 +26326,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2083 +- uid: 2082 type: PoweredSmallLight components: - parent: 15 @@ -26398,7 +26341,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2084 +- uid: 2083 type: PoweredSmallLight components: - parent: 15 @@ -26411,7 +26354,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2085 +- uid: 2084 type: Poweredlight components: - parent: 15 @@ -26426,7 +26369,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2086 +- uid: 2085 type: Poweredlight components: - parent: 15 @@ -26440,7 +26383,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2087 +- uid: 2086 type: Poweredlight components: - parent: 15 @@ -26454,21 +26397,14 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2088 - type: Poweredlight +- uid: 2087 + type: SignDirectionalSci components: - parent: 15 - pos: 2,1.5 + pos: 1.3437586,6.2515917 + rot: -1.5707963267948966 rad type: Transform - - color: '#FFFFFFFF' - type: PointLight - - powerLoad: 40 - type: PowerReceiver - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 2089 +- uid: 2088 type: Poweredlight components: - parent: 15 @@ -26482,7 +26418,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2090 +- uid: 2089 type: Poweredlight components: - parent: 15 @@ -26496,7 +26432,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2091 +- uid: 2090 type: Poweredlight components: - parent: 15 @@ -26511,57 +26447,52 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2092 +- uid: 2091 type: Poweredlight components: - parent: 15 - pos: -4.5,2 - rot: -1.5707963267948966 rad + pos: 6.0308504,2 type: Transform - - color: '#FFFFFFFF' - type: PointLight - - powerLoad: 40 - type: PowerReceiver - containers: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2093 +- uid: 2092 type: Table components: - parent: 15 pos: 29.5,0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2094 +- uid: 2093 type: Table components: - parent: 15 pos: 25.5,0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2095 +- uid: 2094 type: VendingMachineEngivend components: - parent: 15 pos: 31.5,-0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2096 +- uid: 2095 type: Wire components: - parent: 15 pos: -6.5,-8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2097 +- uid: 2096 type: APC components: - parent: 15 pos: -6.5,-8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2098 +- uid: 2097 type: Poweredlight components: - parent: 15 @@ -26576,7 +26507,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2099 +- uid: 2098 type: Poweredlight components: - parent: 15 @@ -26591,7 +26522,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2100 +- uid: 2099 type: Poweredlight components: - parent: 15 @@ -26606,7 +26537,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2101 +- uid: 2100 type: Poweredlight components: - parent: 15 @@ -26619,22 +26550,15 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2102 - type: PoweredSmallLight +- uid: 2101 + type: Paper components: - parent: 15 - pos: -0.5,-6 - rot: 1.5707963267948966 rad + pos: 8.598616,26.075901 type: Transform - - color: '#FFFFFFFF' - type: PointLight - - powerLoad: 40 - type: PowerReceiver - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 2103 + - anchored: False + type: Collidable +- uid: 2102 type: PoweredSmallLight components: - parent: 15 @@ -26649,7 +26573,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2104 +- uid: 2103 type: PoweredSmallLight components: - parent: 15 @@ -26664,7 +26588,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2105 +- uid: 2104 type: PoweredSmallLight components: - parent: 15 @@ -26679,7 +26603,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2106 +- uid: 2105 type: PoweredSmallLight components: - parent: 15 @@ -26694,7 +26618,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2107 +- uid: 2106 type: PoweredSmallLight components: - parent: 15 @@ -26709,35 +26633,35 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2108 +- uid: 2107 type: Wire components: - parent: 15 pos: -29.5,8.5 rot: 3.141592653589793 rad type: Transform -- uid: 2109 +- uid: 2108 type: Wire components: - parent: 15 pos: -30.5,8.5 rot: 3.141592653589793 rad type: Transform -- uid: 2110 +- uid: 2109 type: Wire components: - parent: 15 pos: -28.5,-2.5 rot: 3.141592653589793 rad type: Transform -- uid: 2111 +- uid: 2110 type: APC components: - parent: 15 pos: -28.5,-3.5 rot: 3.141592653589793 rad type: Transform -- uid: 2112 +- uid: 2111 type: Chair components: - parent: 15 @@ -26745,70 +26669,70 @@ entities: type: Transform - anchored: False type: Collidable -- uid: 2113 +- uid: 2112 type: APC components: - parent: 15 pos: -33.5,2.5 rot: 3.141592653589793 rad type: Transform -- uid: 2114 +- uid: 2113 type: solid_wall components: - parent: 15 pos: -33.5,9.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2115 +- uid: 2114 type: APC components: - parent: 15 pos: -12.5,-13.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2116 +- uid: 2115 type: APC components: - parent: 15 pos: -1.5,-18.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2117 +- uid: 2116 type: APC components: - parent: 15 pos: -7.5,-21.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2118 +- uid: 2117 type: APC components: - parent: 15 pos: -12.5,-18.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2119 +- uid: 2118 type: APC components: - parent: 15 pos: 0.5,-26.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2120 +- uid: 2119 type: Table components: - parent: 15 pos: -29.5,8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2121 +- uid: 2120 type: Table components: - parent: 15 pos: -29.5,9.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2122 +- uid: 2121 type: Poweredlight components: - parent: 15 @@ -26821,7 +26745,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2123 +- uid: 2122 type: Poweredlight components: - parent: 15 @@ -26836,35 +26760,35 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2124 +- uid: 2123 type: Table components: - parent: 15 pos: 18.5,7.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2125 +- uid: 2124 type: Table components: - parent: 15 pos: 15.5,8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2126 +- uid: 2125 type: VendingMachineSnack components: - parent: 15 pos: -22.5,0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2127 +- uid: 2126 type: VendingMachineCola components: - parent: 15 pos: -34.5,2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2128 +- uid: 2127 type: Poweredlight components: - parent: 15 @@ -26879,7 +26803,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2129 +- uid: 2128 type: LockerToolFilled components: - parent: 15 @@ -26894,7 +26818,7 @@ entities: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2130 +- uid: 2129 type: PoweredSmallLight components: - parent: 15 @@ -26908,7 +26832,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2131 +- uid: 2130 type: PoweredSmallLight components: - parent: 15 @@ -26922,7 +26846,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2132 +- uid: 2131 type: PoweredSmallLight components: - parent: 15 @@ -26937,6 +26861,13 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer +- uid: 2132 + type: Table + components: + - parent: 15 + pos: 10.5,7.5 + rot: -1.5707963267948966 rad + type: Transform - uid: 2133 type: Table components: @@ -26945,13 +26876,6 @@ entities: rot: -1.5707963267948966 rad type: Transform - uid: 2134 - type: Table - components: - - parent: 15 - pos: 10.5,7.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2135 type: PoweredSmallLight components: - parent: 15 @@ -26965,7 +26889,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2136 +- uid: 2135 type: Poweredlight components: - parent: 15 @@ -26979,7 +26903,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2137 +- uid: 2136 type: Welder components: - parent: 15 @@ -26988,7 +26912,7 @@ entities: type: Transform - anchored: False type: Collidable -- uid: 2138 +- uid: 2137 type: LockerWeldingSupplies components: - parent: 15 @@ -27003,7 +26927,7 @@ entities: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2139 +- uid: 2138 type: Poweredlight components: - parent: 15 @@ -27018,7 +26942,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2140 +- uid: 2139 type: Poweredlight components: - parent: 15 @@ -27033,7 +26957,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2141 +- uid: 2140 type: Poweredlight components: - parent: 15 @@ -27048,7 +26972,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2142 +- uid: 2141 type: Poweredlight components: - parent: 15 @@ -27063,7 +26987,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2143 +- uid: 2142 type: Poweredlight components: - parent: 15 @@ -27077,7 +27001,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2144 +- uid: 2143 type: Poweredlight components: - parent: 15 @@ -27092,7 +27016,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2145 +- uid: 2144 type: Poweredlight components: - parent: 15 @@ -27106,7 +27030,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2146 +- uid: 2145 type: Poweredlight components: - parent: 15 @@ -27119,7 +27043,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2147 +- uid: 2146 type: PoweredSmallLight components: - parent: 15 @@ -27134,7 +27058,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2148 +- uid: 2147 type: PoweredSmallLight components: - parent: 15 @@ -27149,7 +27073,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2149 +- uid: 2148 type: Food4NoRaisins components: - parent: 15 @@ -27160,7 +27084,7 @@ entities: type: Solution - anchored: False type: Collidable -- uid: 2150 +- uid: 2149 type: Pen components: - parent: 15 @@ -27169,7 +27093,7 @@ entities: type: Transform - anchored: False type: Collidable -- uid: 2151 +- uid: 2150 type: PoweredSmallLight components: - parent: 15 @@ -27183,7 +27107,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2152 +- uid: 2151 type: PoweredSmallLight components: - parent: 15 @@ -27198,21 +27122,21 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2153 +- uid: 2152 type: Table components: - parent: 15 pos: 7.5,28.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2154 +- uid: 2153 type: Table components: - parent: 15 pos: 8.5,28.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2155 +- uid: 2154 type: PoweredSmallLight components: - parent: 15 @@ -27227,7 +27151,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2156 +- uid: 2155 type: Poweredlight components: - parent: 15 @@ -27242,21 +27166,14 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2157 - type: Poweredlight +- uid: 2156 + type: SignShipDock components: - parent: 15 - pos: -26,6.5 + pos: -33.298416,6.5 + rot: -1.5707963267948966 rad type: Transform - - color: '#FFFFFFFF' - type: PointLight - - powerLoad: 40 - type: PowerReceiver - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 2158 +- uid: 2157 type: Poweredlight components: - parent: 15 @@ -27271,7 +27188,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2159 +- uid: 2158 type: Poweredlight components: - parent: 15 @@ -27286,7 +27203,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2160 +- uid: 2159 type: Poweredlight components: - parent: 15 @@ -27301,70 +27218,70 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2161 +- uid: 2160 type: solid_wall components: - parent: 15 pos: -38.5,11.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2162 +- uid: 2161 type: solid_wall components: - parent: 15 pos: -34.5,11.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2163 +- uid: 2162 type: SpawnPointStationEngineer components: - parent: 15 pos: 33.5,4.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2164 +- uid: 2163 type: SpawnPointSecurityOfficer components: - parent: 15 pos: -7.5,12.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2165 +- uid: 2164 type: Table components: - parent: 15 pos: 8.5,-5.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2166 +- uid: 2165 type: Table components: - parent: 15 pos: 8.5,-4.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2167 +- uid: 2166 type: Table components: - parent: 15 pos: 8.5,-3.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2168 +- uid: 2167 type: Table components: - parent: 15 pos: 7.5,-3.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2169 +- uid: 2168 type: Table components: - parent: 15 pos: 6.5,-3.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2170 +- uid: 2169 type: ChairOfficeLight components: - parent: 15 @@ -27373,14 +27290,14 @@ entities: type: Transform - anchored: False type: Collidable -- uid: 2171 +- uid: 2170 type: ComputerMedicalRecords components: - parent: 15 pos: 6.5,-5.5 rot: 1.5707963267948966 rad type: Transform -- uid: 2172 +- uid: 2171 type: chem_dispenser components: - parent: 15 @@ -27391,28 +27308,28 @@ entities: ReagentDispenser-reagentContainerContainer: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2173 +- uid: 2172 type: Table components: - parent: 15 pos: 14.5,-0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2174 +- uid: 2173 type: Table components: - parent: 15 pos: 18.5,1.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2175 +- uid: 2174 type: Table components: - parent: 15 pos: 18.5,0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2176 +- uid: 2175 type: chem_master components: - parent: 15 @@ -27423,28 +27340,28 @@ entities: ChemMaster-reagentContainerContainer: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2177 +- uid: 2176 type: Table components: - parent: 15 pos: 14.5,-2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2178 +- uid: 2177 type: Table components: - parent: 15 pos: 15.5,-0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2179 +- uid: 2178 type: Table components: - parent: 15 pos: 15.5,-3.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2180 +- uid: 2179 type: LockerHeadOfSecurityFilled components: - parent: 15 @@ -27459,7 +27376,7 @@ entities: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2181 +- uid: 2180 type: LockerChemistry components: - parent: 15 @@ -27474,14 +27391,14 @@ entities: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2182 +- uid: 2181 type: Table components: - parent: 15 pos: 13.5,0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2183 +- uid: 2182 type: WarpPoint components: - parent: 15 @@ -27490,7 +27407,7 @@ entities: type: Transform - location: eva type: WarpPoint -- uid: 2184 +- uid: 2183 type: WarpPoint components: - parent: 15 @@ -27499,7 +27416,7 @@ entities: type: Transform - location: cap type: WarpPoint -- uid: 2185 +- uid: 2184 type: WarpPoint components: - parent: 15 @@ -27508,7 +27425,7 @@ entities: type: Transform - location: chem type: WarpPoint -- uid: 2186 +- uid: 2185 type: WarpPoint components: - parent: 15 @@ -27517,7 +27434,7 @@ entities: type: Transform - location: hop type: WarpPoint -- uid: 2187 +- uid: 2186 type: WarpPoint components: - parent: 15 @@ -27526,7 +27443,7 @@ entities: type: Transform - location: grav type: WarpPoint -- uid: 2188 +- uid: 2187 type: LockerMedical components: - parent: 15 @@ -27541,7 +27458,7 @@ entities: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2189 +- uid: 2188 type: LockerMedical components: - parent: 15 @@ -27556,42 +27473,42 @@ entities: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2190 +- uid: 2189 type: VendingMachineMedical components: - parent: 15 pos: 19.5,-4.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2191 +- uid: 2190 type: VendingMachineMedical components: - parent: 15 pos: 6.5,-11.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2192 +- uid: 2191 type: Table components: - parent: 15 pos: 21.5,-4.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2193 +- uid: 2192 type: Table components: - parent: 15 pos: 22.5,-4.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2194 +- uid: 2193 type: Table components: - parent: 15 pos: 23.5,-4.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2195 +- uid: 2194 type: CrateMedical components: - parent: 15 @@ -27606,49 +27523,49 @@ entities: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2196 +- uid: 2195 type: Table components: - parent: 15 pos: 6.5,-10.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2197 +- uid: 2196 type: Table components: - parent: 15 pos: 6.5,-9.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2198 +- uid: 2197 type: Table components: - parent: 15 pos: 6.5,-8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2199 +- uid: 2198 type: Table components: - parent: 15 pos: 6.5,-7.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2200 +- uid: 2199 type: Table components: - parent: 15 pos: 10.5,-13.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2201 +- uid: 2200 type: Table components: - parent: 15 pos: 9.5,-13.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2202 +- uid: 2201 type: Beaker components: - parent: 15 @@ -27657,7 +27574,7 @@ entities: type: Transform - anchored: False type: Collidable -- uid: 2203 +- uid: 2202 type: MedicalScanner components: - parent: 15 @@ -27668,7 +27585,7 @@ entities: MedicalScanner-bodyContainer: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2204 +- uid: 2203 type: MedicalScanner components: - parent: 15 @@ -27679,49 +27596,49 @@ entities: MedicalScanner-bodyContainer: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2205 +- uid: 2204 type: LowWall components: - parent: 15 pos: 15.5,-12.5 rot: -1.5707963267948966 rad type: Transform +- uid: 2205 + type: LowWall + components: + - parent: 15 + pos: 16.5,-12.5 + rot: -1.5707963267948966 rad + type: Transform - uid: 2206 - type: LowWall - components: - - parent: 15 - pos: 16.5,-12.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2207 type: LowWall components: - parent: 15 pos: 17.5,-12.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2208 +- uid: 2207 type: Window components: - parent: 15 pos: 15.5,-12.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2209 +- uid: 2208 type: Window components: - parent: 15 pos: 16.5,-12.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2210 +- uid: 2209 type: Window components: - parent: 15 pos: 17.5,-12.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2211 +- uid: 2210 type: Poweredlight components: - parent: 15 @@ -27736,7 +27653,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2212 +- uid: 2211 type: Poweredlight components: - parent: 15 @@ -27750,7 +27667,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2213 +- uid: 2212 type: Poweredlight components: - parent: 15 @@ -27765,7 +27682,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2214 +- uid: 2213 type: Poweredlight components: - parent: 15 @@ -27780,7 +27697,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2215 +- uid: 2214 type: Medkit components: - parent: 15 @@ -27793,7 +27710,7 @@ entities: storagebase: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2216 +- uid: 2215 type: Medkit components: - parent: 15 @@ -27806,7 +27723,7 @@ entities: storagebase: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2217 +- uid: 2216 type: Medkit components: - parent: 15 @@ -27819,7 +27736,7 @@ entities: storagebase: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2218 +- uid: 2217 type: Medkit components: - parent: 15 @@ -27832,7 +27749,7 @@ entities: storagebase: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2219 +- uid: 2218 type: DisposalUnit components: - parent: 15 @@ -27844,7 +27761,7 @@ entities: DisposalUnit: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2220 +- uid: 2219 type: DisposalTrunk components: - parent: 15 @@ -27857,7 +27774,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 2221 +- uid: 2220 type: LargeBeaker components: - parent: 15 @@ -27866,7 +27783,7 @@ entities: type: Transform - anchored: False type: Collidable -- uid: 2222 +- uid: 2221 type: Beaker components: - parent: 15 @@ -27875,35 +27792,35 @@ entities: type: Transform - anchored: False type: Collidable -- uid: 2223 +- uid: 2222 type: ComputerMedicalRecords components: - parent: 15 pos: 24.5,-15.5 rot: 1.5707963267948966 rad type: Transform -- uid: 2224 +- uid: 2223 type: Table components: - parent: 15 pos: 23.5,-13.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2225 +- uid: 2224 type: Table components: - parent: 15 pos: 23.5,-14.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2226 +- uid: 2225 type: Table components: - parent: 15 pos: 23.5,-15.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2227 +- uid: 2226 type: ChairOfficeLight components: - parent: 15 @@ -27912,7 +27829,7 @@ entities: type: Transform - anchored: False type: Collidable -- uid: 2228 +- uid: 2227 type: Poweredlight components: - parent: 15 @@ -27927,7 +27844,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2229 +- uid: 2228 type: WarpPoint components: - parent: 15 @@ -27936,7 +27853,7 @@ entities: type: Transform - location: dorms type: WarpPoint -- uid: 2230 +- uid: 2229 type: WarpPoint components: - parent: 15 @@ -27945,147 +27862,147 @@ entities: type: Transform - location: escape type: WarpPoint -- uid: 2231 +- uid: 2230 type: SpawnPointChef components: - parent: 15 pos: -12.5,0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2232 +- uid: 2231 type: SpawnPointLatejoin components: - parent: 15 pos: -36.5,0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2233 +- uid: 2232 type: SpawnPointAssistant components: - parent: 15 pos: -29.5,-0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2234 +- uid: 2233 type: SpawnPointAssistant components: - parent: 15 pos: -23.5,-2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2235 +- uid: 2234 type: Table components: - parent: 15 pos: -4.5,-23.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2236 +- uid: 2235 type: Table components: - parent: 15 pos: -4.5,-24.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2237 +- uid: 2236 type: LowWall components: - parent: 15 pos: -10.5,-29.5 rot: -1.5707963267948966 rad type: Transform +- uid: 2237 + type: LowWall + components: + - parent: 15 + pos: -10.5,-30.5 + rot: -1.5707963267948966 rad + type: Transform - uid: 2238 type: LowWall components: - parent: 15 - pos: -10.5,-30.5 + pos: -9.5,-30.5 rot: -1.5707963267948966 rad type: Transform - uid: 2239 type: LowWall components: - parent: 15 - pos: -9.5,-30.5 + pos: -6.5,-29.5 rot: -1.5707963267948966 rad type: Transform - uid: 2240 type: LowWall components: - parent: 15 - pos: -6.5,-29.5 + pos: -7.5,-30.5 rot: -1.5707963267948966 rad type: Transform - uid: 2241 type: LowWall components: - parent: 15 - pos: -7.5,-30.5 + pos: -6.5,-30.5 rot: -1.5707963267948966 rad type: Transform - uid: 2242 - type: LowWall - components: - - parent: 15 - pos: -6.5,-30.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2243 type: LowWall components: - parent: 15 pos: -8.5,-30.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2244 +- uid: 2243 type: ReinforcedWindow components: - parent: 15 pos: -10.5,-29.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2245 +- uid: 2244 type: ReinforcedWindow components: - parent: 15 pos: -10.5,-30.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2246 +- uid: 2245 type: ReinforcedWindow components: - parent: 15 pos: -9.5,-30.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2247 +- uid: 2246 type: ReinforcedWindow components: - parent: 15 pos: -8.5,-30.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2248 +- uid: 2247 type: ReinforcedWindow components: - parent: 15 pos: -7.5,-30.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2249 +- uid: 2248 type: ReinforcedWindow components: - parent: 15 pos: -6.5,-30.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2250 +- uid: 2249 type: ReinforcedWindow components: - parent: 15 pos: -6.5,-29.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2251 +- uid: 2250 type: Poweredlight components: - parent: 15 @@ -28100,7 +28017,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2252 +- uid: 2251 type: Poweredlight components: - parent: 15 @@ -28114,7 +28031,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2253 +- uid: 2252 type: Poweredlight components: - parent: 15 @@ -28129,7 +28046,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2254 +- uid: 2253 type: Poweredlight components: - parent: 15 @@ -28144,7 +28061,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2255 +- uid: 2254 type: Poweredlight components: - parent: 15 @@ -28159,7 +28076,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2256 +- uid: 2255 type: Poweredlight components: - parent: 15 @@ -28174,7 +28091,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2257 +- uid: 2256 type: Poweredlight components: - parent: 15 @@ -28189,7 +28106,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2258 +- uid: 2257 type: PoweredSmallLight components: - parent: 15 @@ -28203,7 +28120,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2259 +- uid: 2258 type: ResearchAndDevelopmentServer components: - parent: 15 @@ -28211,7 +28128,7 @@ entities: type: Transform - points: 136000 type: ResearchServer -- uid: 2260 +- uid: 2259 type: Poweredlight components: - parent: 15 @@ -28223,7 +28140,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2261 +- uid: 2260 type: Poweredlight components: - parent: 15 @@ -28237,7 +28154,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2262 +- uid: 2261 type: Poweredlight components: - parent: 15 @@ -28252,7 +28169,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2263 +- uid: 2262 type: Poweredlight components: - parent: 15 @@ -28267,42 +28184,34 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2264 - type: Poweredlight +- uid: 2263 + type: SignScience components: - parent: 15 - pos: -15.5,-17 + pos: -8.494434,-16.5 rot: -1.5707963267948966 rad type: Transform - - color: '#FFFFFFFF' - type: PointLight - - powerLoad: 40 - type: PowerReceiver - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 2265 +- uid: 2264 type: Wire components: - parent: 15 pos: -17.5,-19.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2266 +- uid: 2265 type: APC components: - parent: 15 pos: -18.5,-19.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2267 +- uid: 2266 type: ComputerResearchAndDevelopment components: - parent: 15 pos: -5.5,-15.5 type: Transform -- uid: 2268 +- uid: 2267 type: PoweredSmallLight components: - parent: 15 @@ -28317,49 +28226,49 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2269 +- uid: 2268 type: Table components: - parent: 15 pos: -0.5,-17.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2270 +- uid: 2269 type: Table components: - parent: 15 pos: -1.5,-17.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2271 +- uid: 2270 type: Table components: - parent: 15 pos: -2.5,-17.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2272 +- uid: 2271 type: Table components: - parent: 15 pos: 0.5,-15.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2273 +- uid: 2272 type: Table components: - parent: 15 pos: 0.5,-14.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2274 +- uid: 2273 type: BaseResearchAndDevelopmentPointSource components: - parent: 15 pos: -5.5,-17.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2275 +- uid: 2274 type: ChairOfficeLight components: - parent: 15 @@ -28367,7 +28276,7 @@ entities: type: Transform - anchored: False type: Collidable -- uid: 2276 +- uid: 2275 type: ChairOfficeLight components: - parent: 15 @@ -28375,19 +28284,19 @@ entities: type: Transform - anchored: False type: Collidable -- uid: 2277 +- uid: 2276 type: VendingMachineCoffee components: - parent: 15 pos: -7.5,-17.5 type: Transform -- uid: 2278 +- uid: 2277 type: Table components: - parent: 15 pos: -8.5,-17.5 type: Transform -- uid: 2279 +- uid: 2278 type: ChairOfficeLight components: - parent: 15 @@ -28395,7 +28304,7 @@ entities: type: Transform - anchored: False type: Collidable -- uid: 2280 +- uid: 2279 type: ChairOfficeLight components: - parent: 15 @@ -28404,7 +28313,7 @@ entities: type: Transform - anchored: False type: Collidable -- uid: 2281 +- uid: 2280 type: Autolathe components: - parent: 15 @@ -28424,7 +28333,7 @@ entities: - Crowbar - Multitool type: LatheDatabase -- uid: 2282 +- uid: 2281 type: Protolathe components: - parent: 15 @@ -28444,56 +28353,56 @@ entities: - Crowbar - Multitool type: ProtolatheDatabase -- uid: 2283 +- uid: 2282 type: Table components: - parent: 15 pos: -2.5,-13.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2284 +- uid: 2283 type: Table components: - parent: 15 pos: -1.5,-13.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2285 +- uid: 2284 type: Table components: - parent: 15 pos: -0.5,-13.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2286 +- uid: 2285 type: SpawnPointStationEngineer components: - parent: 15 pos: 41.5,4.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2287 +- uid: 2286 type: SpawnPointStationEngineer components: - parent: 15 pos: 33.5,11.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2288 +- uid: 2287 type: SpawnPointSecurityOfficer components: - parent: 15 pos: -2.5,12.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2289 +- uid: 2288 type: SpawnPointSecurityOfficer components: - parent: 15 pos: -13.5,15.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2290 +- uid: 2289 type: Poweredlight components: - parent: 15 @@ -28508,91 +28417,91 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2291 +- uid: 2290 type: Table components: - parent: 15 pos: -2.5,-4.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2292 +- uid: 2291 type: Table components: - parent: 15 pos: -7.5,-3.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2293 +- uid: 2292 type: Table components: - parent: 15 pos: -6.5,-3.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2294 +- uid: 2293 type: Table components: - parent: 15 pos: -5.5,-3.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2295 +- uid: 2294 type: Table components: - parent: 15 pos: -4.5,-3.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2296 +- uid: 2295 type: Table components: - parent: 15 pos: -3.5,-3.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2297 +- uid: 2296 type: Table components: - parent: 15 pos: -2.5,-3.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2298 +- uid: 2297 type: Table components: - parent: 15 pos: 39.5,-0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2299 +- uid: 2298 type: SpawnPointAssistant components: - parent: 15 pos: -27.5,8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2300 +- uid: 2299 type: SpawnPointSecurityOfficer components: - parent: 15 pos: -12.5,15.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2301 +- uid: 2300 type: SpawnPointAssistant components: - parent: 15 pos: -27.5,10.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2302 +- uid: 2301 type: SpawnPointStationEngineer components: - parent: 15 pos: 33.5,-2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2303 +- uid: 2302 type: StoolBar components: - parent: 15 @@ -28601,7 +28510,7 @@ entities: type: Transform - anchored: False type: Collidable -- uid: 2304 +- uid: 2303 type: StoolBar components: - parent: 15 @@ -28610,7 +28519,7 @@ entities: type: Transform - anchored: False type: Collidable -- uid: 2305 +- uid: 2304 type: StoolBar components: - parent: 15 @@ -28619,7 +28528,7 @@ entities: type: Transform - anchored: False type: Collidable -- uid: 2306 +- uid: 2305 type: StoolBar components: - parent: 15 @@ -28628,7 +28537,7 @@ entities: type: Transform - anchored: False type: Collidable -- uid: 2307 +- uid: 2306 type: StoolBar components: - parent: 15 @@ -28637,7 +28546,7 @@ entities: type: Transform - anchored: False type: Collidable -- uid: 2308 +- uid: 2307 type: StoolBar components: - parent: 15 @@ -28646,7 +28555,7 @@ entities: type: Transform - anchored: False type: Collidable -- uid: 2309 +- uid: 2308 type: Fork components: - parent: 15 @@ -28654,41 +28563,41 @@ entities: type: Transform - anchored: False type: Collidable -- uid: 2310 +- uid: 2309 type: Arcade components: - parent: 15 pos: -1.5,-4.5 type: Transform -- uid: 2311 +- uid: 2310 type: TableWood components: - parent: 15 pos: -7.5,0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2312 +- uid: 2311 type: TableWood components: - parent: 15 pos: -6.5,0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2313 +- uid: 2312 type: TableWood components: - parent: 15 pos: -0.5,0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2314 +- uid: 2313 type: TableWood components: - parent: 15 pos: -3.5,0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2315 +- uid: 2314 type: ChairWood components: - parent: 15 @@ -28697,7 +28606,7 @@ entities: type: Transform - anchored: False type: Collidable -- uid: 2316 +- uid: 2315 type: ChairWood components: - parent: 15 @@ -28706,7 +28615,7 @@ entities: type: Transform - anchored: False type: Collidable -- uid: 2317 +- uid: 2316 type: ChairWood components: - parent: 15 @@ -28715,7 +28624,7 @@ entities: type: Transform - anchored: False type: Collidable -- uid: 2318 +- uid: 2317 type: ChairWood components: - parent: 15 @@ -28724,7 +28633,7 @@ entities: type: Transform - anchored: False type: Collidable -- uid: 2319 +- uid: 2318 type: ChairWood components: - parent: 15 @@ -28733,7 +28642,7 @@ entities: type: Transform - anchored: False type: Collidable -- uid: 2320 +- uid: 2319 type: ChairWood components: - parent: 15 @@ -28742,7 +28651,7 @@ entities: type: Transform - anchored: False type: Collidable -- uid: 2321 +- uid: 2320 type: ChairWood components: - parent: 15 @@ -28751,7 +28660,7 @@ entities: type: Transform - anchored: False type: Collidable -- uid: 2322 +- uid: 2321 type: ChairWood components: - parent: 15 @@ -28760,14 +28669,14 @@ entities: type: Transform - anchored: False type: Collidable -- uid: 2323 +- uid: 2322 type: BarSign components: - parent: 15 pos: 1,2.5 rot: 1.5707963267948966 rad type: Transform -- uid: 2324 +- uid: 2323 type: Spoon components: - parent: 15 @@ -28775,19 +28684,19 @@ entities: type: Transform - anchored: False type: Collidable -- uid: 2325 +- uid: 2324 type: VendingMachineCigs components: - parent: 15 pos: 0.5,-4.5 type: Transform -- uid: 2326 +- uid: 2325 type: VendingMachineSnack components: - parent: 15 pos: -0.5,-4.5 type: Transform -- uid: 2327 +- uid: 2326 type: Chair components: - parent: 15 @@ -28795,7 +28704,7 @@ entities: type: Transform - anchored: False type: Collidable -- uid: 2328 +- uid: 2327 type: Stool components: - parent: 15 @@ -28803,21 +28712,21 @@ entities: type: Transform - anchored: False type: Collidable -- uid: 2329 +- uid: 2328 type: Table components: - parent: 15 pos: -15.5,-10.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2330 +- uid: 2329 type: ComputerComms components: - parent: 15 pos: 3.5,32.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2331 +- uid: 2330 type: WarpPoint components: - parent: 15 @@ -28826,7 +28735,7 @@ entities: type: Transform - location: bar type: WarpPoint -- uid: 2332 +- uid: 2331 type: WarpPoint components: - parent: 15 @@ -28835,7 +28744,7 @@ entities: type: Transform - location: sci type: WarpPoint -- uid: 2333 +- uid: 2332 type: WarpPoint components: - parent: 15 @@ -28844,7 +28753,7 @@ entities: type: Transform - location: med type: WarpPoint -- uid: 2334 +- uid: 2333 type: WarpPoint components: - parent: 15 @@ -28853,7 +28762,7 @@ entities: type: Transform - location: cargo type: WarpPoint -- uid: 2335 +- uid: 2334 type: WarpPoint components: - parent: 15 @@ -28862,42 +28771,42 @@ entities: type: Transform - location: eng type: WarpPoint -- uid: 2336 +- uid: 2335 type: VendingMachineCola components: - parent: 15 pos: 1.5,21.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2337 +- uid: 2336 type: VendingMachineCoffee components: - parent: 15 pos: 0.5,23.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2338 +- uid: 2337 type: VendingMachineCigs components: - parent: 15 pos: 6.5,23.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2339 +- uid: 2338 type: TableWood components: - parent: 15 pos: 8.5,25.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2340 +- uid: 2339 type: TableWood components: - parent: 15 pos: 8.5,26.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2341 +- uid: 2340 type: ChairOfficeDark components: - parent: 15 @@ -28906,14 +28815,14 @@ entities: type: Transform - anchored: False type: Collidable -- uid: 2342 +- uid: 2341 type: ComputerComms components: - parent: 15 pos: 9.5,23.5 rot: 1.5707963267948966 rad type: Transform -- uid: 2343 +- uid: 2342 type: ChairOfficeDark components: - parent: 15 @@ -28922,7 +28831,7 @@ entities: type: Transform - anchored: False type: Collidable -- uid: 2344 +- uid: 2343 type: ChairWood components: - parent: 15 @@ -28930,7 +28839,7 @@ entities: type: Transform - anchored: False type: Collidable -- uid: 2345 +- uid: 2344 type: WarpPoint components: - parent: 15 @@ -28939,7 +28848,7 @@ entities: type: Transform - location: sec type: WarpPoint -- uid: 2346 +- uid: 2345 type: WarpPoint components: - parent: 15 @@ -28948,13 +28857,13 @@ entities: type: Transform - location: bridge type: WarpPoint -- uid: 2347 +- uid: 2346 type: Table components: - parent: 15 pos: 6.5,20.5 type: Transform -- uid: 2348 +- uid: 2347 type: ComputerId components: - parent: 15 @@ -28967,7 +28876,7 @@ entities: IdCardConsole-targetId: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2349 +- uid: 2348 type: ComputerId components: - parent: 15 @@ -28980,21 +28889,21 @@ entities: IdCardConsole-targetId: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2350 +- uid: 2349 type: ComputerAlert components: - parent: 15 pos: 6.5,32.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2351 +- uid: 2350 type: ComputerPowerMonitoring components: - parent: 15 pos: 7.5,32.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2352 +- uid: 2351 type: Paper components: - parent: 15 @@ -29002,7 +28911,7 @@ entities: type: Transform - anchored: False type: Collidable -- uid: 2353 +- uid: 2352 type: Pen components: - parent: 15 @@ -29010,21 +28919,21 @@ entities: type: Transform - anchored: False type: Collidable -- uid: 2354 +- uid: 2353 type: TableWood components: - parent: 15 pos: -1.5,25.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2355 +- uid: 2354 type: TableWood components: - parent: 15 pos: -1.5,24.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2356 +- uid: 2355 type: ChairOfficeDark components: - parent: 15 @@ -29033,7 +28942,7 @@ entities: type: Transform - anchored: False type: Collidable -- uid: 2357 +- uid: 2356 type: ChairOfficeDark components: - parent: 15 @@ -29042,7 +28951,7 @@ entities: type: Transform - anchored: False type: Collidable -- uid: 2358 +- uid: 2357 type: ChairOfficeDark components: - parent: 15 @@ -29050,7 +28959,7 @@ entities: type: Transform - anchored: False type: Collidable -- uid: 2359 +- uid: 2358 type: ChairOfficeDark components: - parent: 15 @@ -29058,7 +28967,7 @@ entities: type: Transform - anchored: False type: Collidable -- uid: 2360 +- uid: 2359 type: ChairOfficeDark components: - parent: 15 @@ -29067,14 +28976,14 @@ entities: type: Transform - anchored: False type: Collidable -- uid: 2361 +- uid: 2360 type: ComputerMedicalRecords components: - parent: 15 pos: 0.5,32.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2362 +- uid: 2361 type: ChairOfficeDark components: - parent: 15 @@ -29083,7 +28992,7 @@ entities: type: Transform - anchored: False type: Collidable -- uid: 2363 +- uid: 2362 type: ComputerSupplyRequest components: - parent: 15 @@ -29103,28 +29012,28 @@ entities: - cargo.glass - cargo.cable type: GalacticMarket -- uid: 2364 +- uid: 2363 type: Table components: - parent: 15 pos: 9.5,18.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2365 +- uid: 2364 type: Table components: - parent: 15 pos: 9.5,16.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2366 +- uid: 2365 type: Table components: - parent: 15 pos: 9.5,17.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2367 +- uid: 2366 type: Chair components: - parent: 15 @@ -29132,7 +29041,7 @@ entities: type: Transform - anchored: False type: Collidable -- uid: 2368 +- uid: 2367 type: ChairOfficeDark components: - parent: 15 @@ -29141,7 +29050,7 @@ entities: type: Transform - anchored: False type: Collidable -- uid: 2369 +- uid: 2368 type: Paper components: - parent: 15 @@ -29150,665 +29059,669 @@ entities: type: Transform - anchored: False type: Collidable -- uid: 2370 +- uid: 2369 type: solid_wall components: - parent: 15 pos: -34.5,-9.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2371 +- uid: 2370 type: solid_wall components: - parent: 15 pos: -34.5,-10.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2372 +- uid: 2371 type: solid_wall components: - parent: 15 pos: -34.5,-11.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2373 +- uid: 2372 type: solid_wall components: - parent: 15 pos: -34.5,-12.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2374 +- uid: 2373 type: solid_wall components: - parent: 15 pos: -33.5,-12.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2375 +- uid: 2374 type: solid_wall components: - parent: 15 pos: -32.5,-12.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2376 +- uid: 2375 type: solid_wall components: - parent: 15 pos: -31.5,-12.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2377 +- uid: 2376 type: solid_wall components: - parent: 15 pos: -30.5,-12.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2378 +- uid: 2377 type: solid_wall components: - parent: 15 pos: -29.5,-12.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2379 +- uid: 2378 type: solid_wall components: - parent: 15 pos: -28.5,-12.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2380 +- uid: 2379 type: solid_wall components: - parent: 15 pos: -27.5,-12.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2381 +- uid: 2380 type: solid_wall components: - parent: 15 pos: -26.5,-12.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2382 - type: solid_wall +- uid: 2381 + type: Brutepack components: - parent: 15 - pos: -25.5,-12.5 + pos: 6.97988,-3.2306285 rot: -1.5707963267948966 rad type: Transform + - anchored: False + type: Collidable +- uid: 2382 + type: SignDirectionalBridge + components: + - parent: 15 + pos: 5.641159,-12.7475605 + rot: 1.5707963267948966 rad + type: Transform - uid: 2383 type: solid_wall components: - parent: 15 - pos: -20.5,-16.5 - rot: -1.5707963267948966 rad + pos: 33.5,11.5 + rot: 1.5707963267948966 rad type: Transform - uid: 2384 type: solid_wall components: - parent: 15 - pos: -21.5,-16.5 + pos: -0.5,-6.5 rot: -1.5707963267948966 rad type: Transform - uid: 2385 - type: solid_wall - components: - - parent: 15 - pos: -25.5,-13.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2386 type: solid_wall components: - parent: 15 pos: -16.5,-6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2387 - type: solid_wall +- uid: 2386 + type: SignSmoking components: - parent: 15 - pos: -22.5,-16.5 + pos: 23.462582,6.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 2387 + type: SignBar + components: + - parent: 15 + pos: -4.6859417,2.5 rot: -1.5707963267948966 rad type: Transform - uid: 2388 - type: solid_wall - components: - - parent: 15 - pos: -24.5,-16.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2389 type: TrashSpawner components: - parent: 15 pos: 7.5,13.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2390 - type: solid_wall +- uid: 2389 + type: Brutepack components: - parent: 15 - pos: -19.5,-16.5 + pos: 7.370505,-3.4650035 rot: -1.5707963267948966 rad type: Transform -- uid: 2391 + - anchored: False + type: Collidable +- uid: 2390 type: solid_wall components: - parent: 15 pos: -20.5,-9.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2392 +- uid: 2391 type: solid_wall components: - parent: 15 pos: -20.5,-10.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2393 +- uid: 2392 type: solid_wall components: - parent: 15 pos: -19.5,-10.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2394 +- uid: 2393 type: solid_wall components: - parent: 15 pos: -18.5,-10.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2395 +- uid: 2394 type: solid_wall components: - parent: 15 pos: -17.5,-10.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2396 +- uid: 2395 type: solid_wall components: - parent: 15 pos: -20.5,-8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2397 +- uid: 2396 type: solid_wall components: - parent: 15 pos: -15.5,2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2398 +- uid: 2397 type: solid_wall components: - parent: 15 pos: -14.5,2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2399 +- uid: 2398 type: solid_wall components: - parent: 15 pos: -13.5,2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2400 +- uid: 2399 type: solid_wall components: - parent: 15 pos: -12.5,2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2401 +- uid: 2400 type: solid_wall components: - parent: 15 pos: -15.5,1.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2402 +- uid: 2401 type: solid_wall components: - parent: 15 pos: -15.5,-3.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2403 +- uid: 2402 type: solid_wall components: - parent: 15 pos: -15.5,-0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2404 +- uid: 2403 type: solid_wall components: - parent: 15 pos: -15.5,-1.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2405 +- uid: 2404 type: solid_wall components: - parent: 15 pos: -15.5,-2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2406 +- uid: 2405 type: solid_wall components: - parent: 15 pos: -10.5,-2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2407 +- uid: 2406 type: solid_wall components: - parent: 15 pos: -11.5,-2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2408 +- uid: 2407 type: solid_wall components: - parent: 15 pos: -13.5,-2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2409 +- uid: 2408 type: solid_wall components: - parent: 15 pos: -14.5,-2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2410 +- uid: 2409 type: solid_wall components: - parent: 15 pos: -10.5,-3.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2411 +- uid: 2410 type: solid_wall components: - parent: 15 pos: -10.5,-4.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2412 +- uid: 2411 type: solid_wall components: - parent: 15 pos: -11.5,-5.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2413 +- uid: 2412 type: solid_wall components: - parent: 15 pos: -12.5,-5.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2414 +- uid: 2413 type: solid_wall components: - parent: 15 pos: -13.5,-5.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2415 +- uid: 2414 type: solid_wall components: - parent: 15 pos: -14.5,-5.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2416 +- uid: 2415 type: Catwalk components: - parent: 15 pos: -23.5,-10.5 rot: -1.5707963267948966 rad type: Transform +- uid: 2416 + type: Catwalk + components: + - parent: 15 + pos: -17.5,-14.5 + rot: -1.5707963267948966 rad + type: Transform - uid: 2417 - type: Catwalk - components: - - parent: 15 - pos: -17.5,-14.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2418 type: Catwalk components: - parent: 15 pos: -9.5,-7.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2419 +- uid: 2418 type: Wire components: - parent: 15 pos: -33.5,-7.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2420 +- uid: 2419 type: Wire components: - parent: 15 pos: -33.5,-8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2421 +- uid: 2420 type: Wire components: - parent: 15 pos: -33.5,-9.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2422 +- uid: 2421 type: Wire components: - parent: 15 pos: -33.5,-10.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2423 +- uid: 2422 type: Wire components: - parent: 15 pos: -33.5,-11.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2424 +- uid: 2423 type: Wire components: - parent: 15 pos: -32.5,-11.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2425 +- uid: 2424 type: Wire components: - parent: 15 pos: -31.5,-11.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2426 +- uid: 2425 type: Wire components: - parent: 15 pos: -30.5,-11.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2427 +- uid: 2426 type: Wire components: - parent: 15 pos: -29.5,-11.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2428 +- uid: 2427 type: Wire components: - parent: 15 pos: -28.5,-11.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2429 +- uid: 2428 type: Wire components: - parent: 15 pos: -27.5,-11.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2430 +- uid: 2429 type: Wire components: - parent: 15 pos: -26.5,-11.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2431 +- uid: 2430 type: Wire components: - parent: 15 pos: -25.5,-11.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2432 +- uid: 2431 type: Wire components: - parent: 15 pos: -24.5,-11.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2433 +- uid: 2432 type: Wire components: - parent: 15 pos: -23.5,-11.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2434 +- uid: 2433 type: Wire components: - parent: 15 pos: -18.5,-11.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2435 +- uid: 2434 type: Wire components: - parent: 15 pos: -21.5,-11.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2436 +- uid: 2435 type: Wire components: - parent: 15 pos: -22.5,-11.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2437 +- uid: 2436 type: Wire components: - parent: 15 pos: -19.5,-11.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2438 +- uid: 2437 type: Wire components: - parent: 15 pos: -20.5,-11.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2439 +- uid: 2438 type: Wire components: - parent: 15 pos: -18.5,-12.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2440 +- uid: 2439 type: Wire components: - parent: 15 pos: -18.5,-13.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2441 +- uid: 2440 type: Wire components: - parent: 15 pos: -18.5,-14.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2442 +- uid: 2441 type: Wire components: - parent: 15 pos: -9.5,-6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2443 +- uid: 2442 type: Wire components: - parent: 15 pos: -17.5,-14.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2444 +- uid: 2443 type: Wire components: - parent: 15 pos: -15.5,-6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2445 +- uid: 2444 type: Wire components: - parent: 15 pos: -14.5,-6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2446 +- uid: 2445 type: Wire components: - parent: 15 pos: -13.5,-6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2447 +- uid: 2446 type: Wire components: - parent: 15 pos: -12.5,-6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2448 +- uid: 2447 type: Wire components: - parent: 15 pos: -11.5,-6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2449 +- uid: 2448 type: Wire components: - parent: 15 pos: -10.5,-6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2450 +- uid: 2449 type: Wire components: - parent: 15 pos: -23.5,-10.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2451 +- uid: 2450 type: Wire components: - parent: 15 pos: -23.5,-9.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2452 +- uid: 2451 type: Wire components: - parent: 15 pos: -23.5,-8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2453 +- uid: 2452 type: Wire components: - parent: 15 pos: -21.5,-7.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2454 +- uid: 2453 type: Wire components: - parent: 15 pos: -20.5,-7.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2455 +- uid: 2454 type: SpawnPointLatejoin components: - parent: 15 pos: -36.5,-1.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2456 +- uid: 2455 type: Table components: - parent: 15 pos: -10.5,-0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2457 +- uid: 2456 type: Table components: - parent: 15 pos: -10.5,0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2458 +- uid: 2457 type: Table components: - parent: 15 pos: -10.5,1.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2459 +- uid: 2458 type: Wire components: - parent: 15 pos: -9.5,-1.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2460 +- uid: 2459 type: Wire components: - parent: 15 pos: -10.5,-1.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2461 +- uid: 2460 type: Wire components: - parent: 15 pos: -11.5,-1.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2462 +- uid: 2461 type: SpawnPointSecurityOfficer components: - parent: 15 pos: -11.5,8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2463 +- uid: 2462 type: VendingMachineTheater components: - parent: 15 pos: -17.5,-9.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2464 +- uid: 2463 type: PianoInstrument components: - parent: 15 @@ -29817,7 +29730,7 @@ entities: type: Transform - anchored: False type: Collidable -- uid: 2465 +- uid: 2464 type: Stool components: - parent: 15 @@ -29826,21 +29739,21 @@ entities: type: Transform - anchored: False type: Collidable -- uid: 2466 +- uid: 2465 type: Table components: - parent: 15 pos: -14.5,-1.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2467 +- uid: 2466 type: Table components: - parent: 15 pos: -14.5,-0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2468 +- uid: 2467 type: KitchenMicrowave components: - parent: 15 @@ -29851,19 +29764,19 @@ entities: microwave_entity_container: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2469 +- uid: 2468 type: Wire components: - parent: 15 pos: -11.5,-0.5 type: Transform -- uid: 2470 +- uid: 2469 type: Wire components: - parent: 15 pos: -11.5,1.5 type: Transform -- uid: 2471 +- uid: 2470 type: Poweredlight components: - parent: 15 @@ -29878,7 +29791,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2472 +- uid: 2471 type: Poweredlight components: - parent: 15 @@ -29893,7 +29806,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2473 +- uid: 2472 type: PoweredSmallLight components: - parent: 15 @@ -29908,351 +29821,343 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2474 - type: Poweredlight +- uid: 2473 + type: Table components: - parent: 15 - pos: -18.5,-10 - rot: 1.5707963267948966 rad + pos: -18.5,-9.5 + rot: -1.5707963267948966 rad type: Transform - - color: '#FFFFFFFF' - type: PointLight - - powerLoad: 40 - type: PowerReceiver - - containers: - light_bulb: - type: Content.Server.GameObjects.ContainerSlot - type: ContainerContainer -- uid: 2475 +- uid: 2474 type: GravityGenerator components: - parent: 15 pos: 49.5,-4.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2476 +- uid: 2475 type: reinforced_wall components: - parent: 15 pos: 46.5,-1.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2477 +- uid: 2476 type: reinforced_wall components: - parent: 15 pos: 46.5,-2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2478 +- uid: 2477 type: reinforced_wall components: - parent: 15 pos: 46.5,-3.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2479 +- uid: 2478 type: reinforced_wall components: - parent: 15 pos: 46.5,-4.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2480 +- uid: 2479 type: reinforced_wall components: - parent: 15 pos: 46.5,-5.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2481 +- uid: 2480 type: reinforced_wall components: - parent: 15 pos: 46.5,-6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2482 +- uid: 2481 type: reinforced_wall components: - parent: 15 pos: 46.5,-7.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2483 +- uid: 2482 type: reinforced_wall components: - parent: 15 pos: 47.5,-7.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2484 +- uid: 2483 type: reinforced_wall components: - parent: 15 pos: 48.5,-7.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2485 +- uid: 2484 type: reinforced_wall components: - parent: 15 pos: 49.5,-7.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2486 +- uid: 2485 type: reinforced_wall components: - parent: 15 pos: 50.5,-7.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2487 +- uid: 2486 type: reinforced_wall components: - parent: 15 pos: 51.5,-7.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2488 +- uid: 2487 type: reinforced_wall components: - parent: 15 pos: 52.5,-7.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2489 +- uid: 2488 type: reinforced_wall components: - parent: 15 pos: 52.5,-6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2490 +- uid: 2489 type: reinforced_wall components: - parent: 15 pos: 52.5,-5.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2491 +- uid: 2490 type: reinforced_wall components: - parent: 15 pos: 52.5,-4.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2492 +- uid: 2491 type: reinforced_wall components: - parent: 15 pos: 52.5,-3.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2493 +- uid: 2492 type: reinforced_wall components: - parent: 15 pos: 52.5,-2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2494 +- uid: 2493 type: reinforced_wall components: - parent: 15 pos: 52.5,-1.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2495 +- uid: 2494 type: reinforced_wall components: - parent: 15 pos: 51.5,-1.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2496 +- uid: 2495 type: reinforced_wall components: - parent: 15 pos: 47.5,-1.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2497 +- uid: 2496 type: solid_wall components: - parent: 15 pos: 51.5,4.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2498 +- uid: 2497 type: solid_wall components: - parent: 15 pos: 49.5,5.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2499 +- uid: 2498 type: solid_wall components: - parent: 15 pos: 46.5,0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2500 +- uid: 2499 type: solid_wall components: - parent: 15 pos: 47.5,-0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2501 +- uid: 2500 type: solid_wall components: - parent: 15 pos: 47.5,0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2502 +- uid: 2501 type: solid_wall components: - parent: 15 pos: 50.5,5.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2503 +- uid: 2502 type: solid_wall components: - parent: 15 pos: 51.5,5.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2504 +- uid: 2503 type: reinforced_wall components: - parent: 15 pos: 48.5,-1.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2505 +- uid: 2504 type: reinforced_wall components: - parent: 15 pos: 50.5,-1.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2506 +- uid: 2505 type: Wire components: - parent: 15 pos: 42.5,4.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2507 +- uid: 2506 type: Wire components: - parent: 15 pos: 43.5,4.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2508 +- uid: 2507 type: Wire components: - parent: 15 pos: 44.5,4.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2509 +- uid: 2508 type: Wire components: - parent: 15 pos: 45.5,4.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2510 +- uid: 2509 type: Wire components: - parent: 15 pos: 46.5,4.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2511 +- uid: 2510 type: Wire components: - parent: 15 pos: 47.5,4.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2512 +- uid: 2511 type: Wire components: - parent: 15 pos: 48.5,4.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2513 +- uid: 2512 type: Wire components: - parent: 15 pos: 49.5,4.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2514 +- uid: 2513 type: Wire components: - parent: 15 pos: 49.5,3.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2515 +- uid: 2514 type: Wire components: - parent: 15 pos: 49.5,2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2516 +- uid: 2515 type: Wire components: - parent: 15 pos: 49.5,1.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2517 +- uid: 2516 type: Wire components: - parent: 15 pos: 49.5,0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2518 +- uid: 2517 type: Wire components: - parent: 15 pos: 49.5,-0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2519 +- uid: 2518 type: Wire components: - parent: 15 pos: 49.5,-1.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2520 +- uid: 2519 type: Wire components: - parent: 15 pos: 49.5,-2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2521 +- uid: 2520 type: APC components: - parent: 15 pos: 50.5,-1.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2522 +- uid: 2521 type: Poweredlight components: - parent: 15 @@ -30264,7 +30169,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2523 +- uid: 2522 type: Poweredlight components: - parent: 15 @@ -30277,112 +30182,112 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2524 +- uid: 2523 type: Catwalk components: - parent: 15 pos: 47.5,-2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2525 +- uid: 2524 type: Catwalk components: - parent: 15 pos: 48.5,-2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2526 +- uid: 2525 type: Catwalk components: - parent: 15 pos: 49.5,-2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2527 +- uid: 2526 type: Catwalk components: - parent: 15 pos: 50.5,-2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2528 +- uid: 2527 type: Catwalk components: - parent: 15 pos: 51.5,-2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2529 +- uid: 2528 type: Catwalk components: - parent: 15 pos: 51.5,-3.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2530 +- uid: 2529 type: Catwalk components: - parent: 15 pos: 51.5,-4.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2531 +- uid: 2530 type: Catwalk components: - parent: 15 pos: 51.5,-5.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2532 +- uid: 2531 type: Catwalk components: - parent: 15 pos: 51.5,-6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2533 +- uid: 2532 type: Catwalk components: - parent: 15 pos: 50.5,-6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2534 +- uid: 2533 type: Catwalk components: - parent: 15 pos: 49.5,-6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2535 +- uid: 2534 type: Catwalk components: - parent: 15 pos: 48.5,-6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2536 +- uid: 2535 type: Catwalk components: - parent: 15 pos: 47.5,-6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2537 +- uid: 2536 type: Catwalk components: - parent: 15 pos: 47.5,-5.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2538 +- uid: 2537 type: Catwalk components: - parent: 15 pos: 47.5,-4.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2539 +- uid: 2538 type: WardrobePajamaFilled components: - parent: 15 @@ -30397,7 +30302,7 @@ entities: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2540 +- uid: 2539 type: WardrobeGreyFilled components: - parent: 15 @@ -30412,7 +30317,7 @@ entities: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2541 +- uid: 2540 type: LockerGeneric components: - parent: 15 @@ -30427,7 +30332,7 @@ entities: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2542 +- uid: 2541 type: LockerL3JanitorFilled components: - parent: 15 @@ -30442,7 +30347,7 @@ entities: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2543 +- uid: 2542 type: WardrobeScienceFilled components: - parent: 15 @@ -30457,7 +30362,7 @@ entities: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2544 +- uid: 2543 type: LockerResearchDirectorFilled components: - parent: 15 @@ -30472,7 +30377,7 @@ entities: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2545 +- uid: 2544 type: LockerEngineerFilled components: - parent: 15 @@ -30487,7 +30392,7 @@ entities: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2546 +- uid: 2545 type: LockerEngineerFilled components: - parent: 15 @@ -30502,7 +30407,7 @@ entities: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2547 +- uid: 2546 type: LockerChiefEngineerFilled components: - parent: 15 @@ -30517,7 +30422,7 @@ entities: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2548 +- uid: 2547 type: LockerAtmosphericsFilled components: - parent: 15 @@ -30532,7 +30437,7 @@ entities: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2549 +- uid: 2548 type: LockerAtmosphericsFilled components: - parent: 15 @@ -30547,7 +30452,7 @@ entities: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2550 +- uid: 2549 type: WardrobeAtmosphericsFilled components: - parent: 15 @@ -30562,7 +30467,7 @@ entities: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2551 +- uid: 2550 type: WardrobeEngineeringFilled components: - parent: 15 @@ -30577,7 +30482,7 @@ entities: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2552 +- uid: 2551 type: LockerHeadOfPersonnelFilled components: - parent: 15 @@ -30592,7 +30497,7 @@ entities: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2553 +- uid: 2552 type: WardrobeBlackFilled components: - parent: 15 @@ -30607,7 +30512,7 @@ entities: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2554 +- uid: 2553 type: LockerChiefMedicalOfficerFilled components: - parent: 15 @@ -30622,7 +30527,7 @@ entities: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2555 +- uid: 2554 type: LockerL3SecurityFilled components: - parent: 15 @@ -30637,7 +30542,7 @@ entities: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2556 +- uid: 2555 type: WardrobeMedicalDoctorFilled components: - parent: 15 @@ -30652,7 +30557,7 @@ entities: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2557 +- uid: 2556 type: LockerSecurityFilled components: - parent: 15 @@ -30667,7 +30572,7 @@ entities: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2558 +- uid: 2557 type: LockerSecurityFilled components: - parent: 15 @@ -30682,7 +30587,7 @@ entities: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2559 +- uid: 2558 type: LockerSecurityFilled components: - parent: 15 @@ -30697,7 +30602,7 @@ entities: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2560 +- uid: 2559 type: LockerL3VirologyFilled components: - parent: 15 @@ -30712,7 +30617,7 @@ entities: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2561 +- uid: 2560 type: LockerMedicineFilled components: - parent: 15 @@ -30727,7 +30632,7 @@ entities: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2562 +- uid: 2561 type: WardrobeWhiteFilled components: - parent: 15 @@ -30742,7 +30647,7 @@ entities: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2563 +- uid: 2562 type: LockerChefFilled components: - parent: 15 @@ -30757,7 +30662,7 @@ entities: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2564 +- uid: 2563 type: LockerJanitorFilled components: - parent: 15 @@ -30772,7 +30677,7 @@ entities: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2565 +- uid: 2564 type: LockerL3JanitorFilled components: - parent: 15 @@ -30787,7 +30692,7 @@ entities: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2566 +- uid: 2565 type: WardrobePrisonFilled components: - parent: 15 @@ -30802,7 +30707,7 @@ entities: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2567 +- uid: 2566 type: PottedPlantRandom components: - parent: 15 @@ -30813,7 +30718,7 @@ entities: potted_plant_hide: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2568 +- uid: 2567 type: WardrobeCargoFilled components: - parent: 15 @@ -30828,7 +30733,7 @@ entities: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2569 +- uid: 2568 type: LockerCaptainFilled components: - parent: 15 @@ -30843,7 +30748,7 @@ entities: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2570 +- uid: 2569 type: LockerEmergencyFilledRandom components: - parent: 15 @@ -30858,7 +30763,7 @@ entities: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2571 +- uid: 2570 type: LockerEmergencyFilledRandom components: - parent: 15 @@ -30873,7 +30778,7 @@ entities: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2572 +- uid: 2571 type: LockerEmergencyFilledRandom components: - parent: 15 @@ -30888,7 +30793,7 @@ entities: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2573 +- uid: 2572 type: LockerEmergencyFilledRandom components: - parent: 15 @@ -30903,7 +30808,7 @@ entities: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2574 +- uid: 2573 type: LockerFireFilled components: - parent: 15 @@ -30918,7 +30823,7 @@ entities: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2575 +- uid: 2574 type: LockerEmergencyFilledRandom components: - parent: 15 @@ -30933,7 +30838,7 @@ entities: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2576 +- uid: 2575 type: LockerEmergencyFilledRandom components: - parent: 15 @@ -30948,7 +30853,7 @@ entities: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2577 +- uid: 2576 type: LockerEmergencyFilledRandom components: - parent: 15 @@ -30963,7 +30868,7 @@ entities: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2578 +- uid: 2577 type: LockerEmergencyFilledRandom components: - parent: 15 @@ -30978,7 +30883,7 @@ entities: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2579 +- uid: 2578 type: LockerFireFilled components: - parent: 15 @@ -30993,7 +30898,7 @@ entities: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2580 +- uid: 2579 type: LockerEmergencyFilledRandom components: - parent: 15 @@ -31008,7 +30913,7 @@ entities: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2581 +- uid: 2580 type: LockerFireFilled components: - parent: 15 @@ -31023,7 +30928,7 @@ entities: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2582 +- uid: 2581 type: LockerFireFilled components: - parent: 15 @@ -31038,7 +30943,7 @@ entities: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2583 +- uid: 2582 type: LockerEmergencyFilledRandom components: - parent: 15 @@ -31053,7 +30958,7 @@ entities: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2584 +- uid: 2583 type: LockerFireFilled components: - parent: 15 @@ -31068,7 +30973,7 @@ entities: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2585 +- uid: 2584 type: LockerEmergencyFilledRandom components: - parent: 15 @@ -31083,7 +30988,7 @@ entities: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2586 +- uid: 2585 type: LockerFireFilled components: - parent: 15 @@ -31098,7 +31003,7 @@ entities: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2587 +- uid: 2586 type: LockerBombFilled components: - parent: 15 @@ -31113,7 +31018,7 @@ entities: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2588 +- uid: 2587 type: LockerBombFilled components: - parent: 15 @@ -31128,7 +31033,7 @@ entities: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2589 +- uid: 2588 type: LockerFireFilled components: - parent: 15 @@ -31143,7 +31048,7 @@ entities: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2590 +- uid: 2589 type: LockerFireFilled components: - parent: 15 @@ -31158,7 +31063,7 @@ entities: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2591 +- uid: 2590 type: PottedPlantRandom components: - parent: 15 @@ -31169,7 +31074,7 @@ entities: potted_plant_hide: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2592 +- uid: 2591 type: PottedPlantRandom components: - parent: 15 @@ -31180,7 +31085,7 @@ entities: potted_plant_hide: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2593 +- uid: 2592 type: LockerEmergencyFilledRandom components: - parent: 15 @@ -31195,7 +31100,7 @@ entities: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2594 +- uid: 2593 type: PottedPlantRD components: - parent: 15 @@ -31206,7 +31111,7 @@ entities: potted_plant_hide: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2595 +- uid: 2594 type: LockerEmergencyFilledRandom components: - parent: 15 @@ -31221,7 +31126,7 @@ entities: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2596 +- uid: 2595 type: LockerEmergencyFilledRandom components: - parent: 15 @@ -31236,7 +31141,7 @@ entities: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2597 +- uid: 2596 type: LockerEmergencyFilledRandom components: - parent: 15 @@ -31251,7 +31156,7 @@ entities: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2598 +- uid: 2597 type: PottedPlantRandom components: - parent: 15 @@ -31262,7 +31167,7 @@ entities: potted_plant_hide: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2599 +- uid: 2598 type: PottedPlantRandom components: - parent: 15 @@ -31273,7 +31178,7 @@ entities: potted_plant_hide: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2600 +- uid: 2599 type: LockerEmergencyFilledRandom components: - parent: 15 @@ -31288,7 +31193,7 @@ entities: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2601 +- uid: 2600 type: LockerEmergencyFilledRandom components: - parent: 15 @@ -31303,7 +31208,7 @@ entities: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2602 +- uid: 2601 type: PottedPlantRandom components: - parent: 15 @@ -31314,7 +31219,7 @@ entities: potted_plant_hide: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2603 +- uid: 2602 type: LockerEmergencyFilledRandom components: - parent: 15 @@ -31329,7 +31234,7 @@ entities: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2604 +- uid: 2603 type: PottedPlantRandom components: - parent: 15 @@ -31340,7 +31245,7 @@ entities: potted_plant_hide: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2605 +- uid: 2604 type: LockerBoozeFilled components: - parent: 15 @@ -31355,14 +31260,14 @@ entities: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2606 +- uid: 2605 type: VendingMachineBooze components: - parent: 15 pos: -4.5,-7.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2607 +- uid: 2606 type: LockerEmergencyFilledRandom components: - parent: 15 @@ -31377,7 +31282,7 @@ entities: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2608 +- uid: 2607 type: PottedPlantRandom components: - parent: 15 @@ -31388,7 +31293,7 @@ entities: potted_plant_hide: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2609 +- uid: 2608 type: PottedPlantRandom components: - parent: 15 @@ -31399,7 +31304,7 @@ entities: potted_plant_hide: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2610 +- uid: 2609 type: PottedPlantRandomPlastic components: - parent: 15 @@ -31410,7 +31315,7 @@ entities: potted_plant_hide: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2611 +- uid: 2610 type: PottedPlantRandom components: - parent: 15 @@ -31421,7 +31326,7 @@ entities: potted_plant_hide: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2612 +- uid: 2611 type: PottedPlantRandomPlastic components: - parent: 15 @@ -31432,497 +31337,497 @@ entities: potted_plant_hide: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2613 +- uid: 2612 type: SpawnPointCargoTechnician components: - parent: 15 pos: 14.5,11.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2614 +- uid: 2613 type: SpawnPointCargoTechnician components: - parent: 15 pos: 21.5,11.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2615 +- uid: 2614 type: SpawnPointChiefMedicalOfficer components: - parent: 15 pos: 24.5,-14.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2616 +- uid: 2615 type: SpawnPointMedicalDoctor components: - parent: 15 pos: 6.5,-4.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2617 +- uid: 2616 type: SpawnPointMedicalDoctor components: - parent: 15 pos: 14.5,0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2618 +- uid: 2617 type: SpawnPointMedicalDoctor components: - parent: 15 pos: 22.5,-6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2619 +- uid: 2618 type: SpawnPointMedicalDoctor components: - parent: 15 pos: 16.5,-9.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2620 +- uid: 2619 type: SpawnPointMedicalDoctor components: - parent: 15 pos: 11.5,-9.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2621 +- uid: 2620 type: SpawnPointMedicalDoctor components: - parent: 15 pos: 15.5,-15.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2622 +- uid: 2621 type: SpawnPointResearchDirector components: - parent: 15 pos: -5.5,-23.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2623 +- uid: 2622 type: SpawnPointScientist components: - parent: 15 pos: -9.5,-17.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2624 +- uid: 2623 type: SpawnPointScientist components: - parent: 15 pos: -8.5,-18.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2625 +- uid: 2624 type: SpawnPointScientist components: - parent: 15 pos: -0.5,-14.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2626 +- uid: 2625 type: SpawnPointScientist components: - parent: 15 pos: -4.5,-15.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2627 +- uid: 2626 type: SpawnPointScientist components: - parent: 15 pos: -15.5,-19.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2628 +- uid: 2627 type: SpawnPointBartender components: - parent: 15 pos: -5.5,-5.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2629 +- uid: 2628 type: SpawnPointClown components: - parent: 15 pos: -18.5,-8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2630 +- uid: 2629 type: SpawnPointJanitor components: - parent: 15 pos: -20.5,9.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2631 +- uid: 2630 type: SpawnPointHeadOfSecurity components: - parent: 15 pos: -6.5,20.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2632 +- uid: 2631 type: SpawnPointCaptain components: - parent: 15 pos: 9.5,25.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2633 +- uid: 2632 type: SpawnPointHeadOfPersonnel components: - parent: 15 pos: 7.5,20.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2634 +- uid: 2633 type: SpawnPointChiefEngineer components: - parent: 15 pos: 40.5,-0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2635 +- uid: 2634 type: SpawnPointStationEngineer components: - parent: 15 pos: 30.5,-2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2636 +- uid: 2635 type: solid_wall components: - parent: 15 pos: 45.5,9.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2637 +- uid: 2636 type: Wire components: - parent: 15 pos: 22.5,-21.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2638 +- uid: 2637 type: Wire components: - parent: 15 pos: 22.5,-22.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2639 +- uid: 2638 type: Wire components: - parent: 15 pos: 22.5,-23.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2640 +- uid: 2639 type: Wire components: - parent: 15 pos: 22.5,-24.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2641 +- uid: 2640 type: Wire components: - parent: 15 pos: 22.5,-25.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2642 +- uid: 2641 type: Wire components: - parent: 15 pos: 21.5,-25.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2643 +- uid: 2642 type: Wire components: - parent: 15 pos: 20.5,-25.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2644 +- uid: 2643 type: Wire components: - parent: 15 pos: 19.5,-25.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2645 +- uid: 2644 type: Wire components: - parent: 15 pos: 14.5,-21.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2646 +- uid: 2645 type: Wire components: - parent: 15 pos: 14.5,-22.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2647 +- uid: 2646 type: solid_wall components: - parent: 15 pos: 23.5,-22.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2648 +- uid: 2647 type: solid_wall components: - parent: 15 pos: 23.5,-23.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2649 +- uid: 2648 type: solid_wall components: - parent: 15 pos: 23.5,-24.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2650 +- uid: 2649 type: solid_wall components: - parent: 15 pos: 23.5,-25.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2651 +- uid: 2650 type: solid_wall components: - parent: 15 pos: 23.5,-26.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2652 +- uid: 2651 type: solid_wall components: - parent: 15 pos: 22.5,-26.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2653 +- uid: 2652 type: solid_wall components: - parent: 15 pos: 21.5,-26.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2654 +- uid: 2653 type: solid_wall components: - parent: 15 pos: 20.5,-26.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2655 +- uid: 2654 type: solid_wall components: - parent: 15 pos: 19.5,-26.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2656 +- uid: 2655 type: solid_wall components: - parent: 15 pos: 18.5,-26.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2657 +- uid: 2656 type: solid_wall components: - parent: 15 pos: 17.5,-26.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2658 +- uid: 2657 type: solid_wall components: - parent: 15 pos: 16.5,-26.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2659 +- uid: 2658 type: solid_wall components: - parent: 15 pos: 15.5,-26.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2660 +- uid: 2659 type: solid_wall components: - parent: 15 pos: 14.5,-26.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2661 +- uid: 2660 type: solid_wall components: - parent: 15 pos: 13.5,-26.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2662 +- uid: 2661 type: solid_wall components: - parent: 15 pos: 13.5,-22.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2663 +- uid: 2662 type: solid_wall components: - parent: 15 pos: 13.5,-23.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2664 +- uid: 2663 type: solid_wall components: - parent: 15 pos: 13.5,-24.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2665 +- uid: 2664 type: solid_wall components: - parent: 15 pos: 13.5,-25.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2666 +- uid: 2665 type: solid_wall components: - parent: 15 pos: 20.5,-19.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2667 +- uid: 2666 type: solid_wall components: - parent: 15 pos: 20.5,-20.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2668 +- uid: 2667 type: solid_wall components: - parent: 15 pos: 20.5,-21.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2669 +- uid: 2668 type: solid_wall components: - parent: 15 pos: 20.5,-22.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2670 +- uid: 2669 type: solid_wall components: - parent: 15 pos: 20.5,-23.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2671 +- uid: 2670 type: solid_wall components: - parent: 15 pos: 17.5,-23.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2672 +- uid: 2671 type: solid_wall components: - parent: 15 pos: 16.5,-23.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2673 +- uid: 2672 type: solid_wall components: - parent: 15 pos: 16.5,-22.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2674 +- uid: 2673 type: solid_wall components: - parent: 15 pos: 16.5,-21.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2675 +- uid: 2674 type: solid_wall components: - parent: 15 pos: 16.5,-20.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2676 +- uid: 2675 type: solid_wall components: - parent: 15 pos: 16.5,-19.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2677 +- uid: 2676 type: LowWall components: - parent: 15 pos: 17.5,-18.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2678 +- uid: 2677 type: LowWall components: - parent: 15 pos: 18.5,-18.5 rot: -1.5707963267948966 rad type: Transform +- uid: 2678 + type: Window + components: + - parent: 15 + pos: 17.5,-18.5 + rot: -1.5707963267948966 rad + type: Transform - uid: 2679 - type: Window - components: - - parent: 15 - pos: 17.5,-18.5 - rot: -1.5707963267948966 rad - type: Transform -- uid: 2680 type: Window components: - parent: 15 pos: 18.5,-18.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2681 +- uid: 2680 type: Table components: - parent: 15 pos: 19.5,-21.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2682 +- uid: 2681 type: Table components: - parent: 15 pos: 19.5,-22.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2683 +- uid: 2682 type: WardrobeWhite components: - parent: 15 @@ -31937,7 +31842,7 @@ entities: EntityStorageComponent: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2684 +- uid: 2683 type: AirlockExternalLocked components: - name: Escape Shuttle Dock @@ -31946,7 +31851,7 @@ entities: pos: -41.5,4.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2685 +- uid: 2684 type: AirlockExternalLocked components: - name: Escape Shuttle Dock @@ -31955,7 +31860,7 @@ entities: pos: -39.5,4.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2686 +- uid: 2685 type: AirlockExternalLocked components: - name: Escape Shuttle Dock @@ -31964,7 +31869,7 @@ entities: pos: -39.5,8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2687 +- uid: 2686 type: AirlockExternalLocked components: - name: Escape Shuttle Dock @@ -31973,7 +31878,7 @@ entities: pos: -41.5,8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2688 +- uid: 2687 type: AirlockExternalLocked components: - name: Arrivals Shuttle Dock @@ -31982,7 +31887,7 @@ entities: pos: -37.5,-3.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2689 +- uid: 2688 type: AirlockExternalLocked components: - name: Arrivals Shuttle Dock @@ -31991,7 +31896,7 @@ entities: pos: -39.5,-3.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2690 +- uid: 2689 type: AirlockSecurityGlassLocked components: - name: Brig @@ -32000,7 +31905,7 @@ entities: pos: -5.5,6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2691 +- uid: 2690 type: AirlockSecurityGlassLocked components: - name: Brig @@ -32009,7 +31914,7 @@ entities: pos: -5.5,9.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2692 +- uid: 2691 type: AirlockSecurityGlassLocked components: - name: Brig @@ -32018,7 +31923,7 @@ entities: pos: -6.5,9.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2693 +- uid: 2692 type: AirlockEngineeringLocked components: - name: Gravity Generator @@ -32027,7 +31932,7 @@ entities: pos: 49.5,-1.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2694 +- uid: 2693 type: AirlockEngineeringGlassLocked components: - name: Engineering Equipment @@ -32036,7 +31941,7 @@ entities: pos: 33.5,1.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2695 +- uid: 2694 type: AirlockEngineeringGlassLocked components: - name: Atmospherics @@ -32045,7 +31950,7 @@ entities: pos: 33.5,7.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2696 +- uid: 2695 type: AirlockEngineeringLocked components: - name: Secure Storage @@ -32054,7 +31959,7 @@ entities: pos: 41.5,10.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2697 +- uid: 2696 type: AirlockEngineeringLocked components: - name: Secure Storage @@ -32063,35 +31968,35 @@ entities: pos: 40.5,10.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2698 +- uid: 2697 type: AirlockMaintEngiLocked components: - parent: 15 pos: 29.5,10.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2699 +- uid: 2698 type: AirlockMaintEngiLocked components: - parent: 15 pos: 43.5,0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2700 +- uid: 2699 type: AirlockMaintCargoLocked components: - parent: 15 pos: 25.5,9.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2701 +- uid: 2700 type: AirlockMaintRnDLocked components: - parent: 15 pos: -16.5,-16.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2702 +- uid: 2701 type: AirlockCommandGlassLocked components: - name: Heads of Staff Meeting Room @@ -32100,7 +32005,7 @@ entities: pos: 1.5,24.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2703 +- uid: 2702 type: AirlockCommandGlassLocked components: - name: Heads of Staff Meeting Room @@ -32109,7 +32014,7 @@ entities: pos: 1.5,25.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2704 +- uid: 2703 type: AirlockCommandLocked components: - name: Captain's Office @@ -32121,28 +32026,28 @@ entities: - access: - - Captain type: AccessReader -- uid: 2705 +- uid: 2704 type: AirlockMaintCommonLocked components: - parent: 15 pos: 6.5,-19.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2706 +- uid: 2705 type: AirlockMaintCommonLocked components: - parent: 15 pos: 21.5,2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2707 +- uid: 2706 type: AirlockMaintCommandLocked components: - parent: 15 pos: -1.5,22.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2708 +- uid: 2707 type: AirlockMedicalGlassLocked components: - name: Medical Bay @@ -32151,7 +32056,7 @@ entities: pos: 10.5,-6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2709 +- uid: 2708 type: AirlockMedicalGlassLocked components: - name: Medical Bay @@ -32160,7 +32065,7 @@ entities: pos: 11.5,-6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2710 +- uid: 2709 type: AirlockMedicalGlassLocked components: - name: Medical Storage @@ -32169,7 +32074,7 @@ entities: pos: 20.5,-6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2711 +- uid: 2710 type: AirlockMedicalGlassLocked components: - name: Surgery @@ -32178,7 +32083,7 @@ entities: pos: 19.5,-18.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2712 +- uid: 2711 type: AirlockMedicalGlassLocked components: - name: Cloning @@ -32187,7 +32092,7 @@ entities: pos: 8.5,-12.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2713 +- uid: 2712 type: AirlockSecurityGlassLocked components: - name: Security Equipment @@ -32196,7 +32101,7 @@ entities: pos: -10.5,15.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2714 +- uid: 2713 type: AirlockSecurityGlassLocked components: - name: Reception Desk @@ -32205,35 +32110,35 @@ entities: pos: -9.5,9.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2715 +- uid: 2714 type: AirlockMaintCommonLocked components: - parent: 15 pos: 0.5,20.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2716 +- uid: 2715 type: AirlockMaintMedLocked components: - parent: 15 pos: 14.5,-18.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2717 +- uid: 2716 type: AirlockMaintMedLocked components: - parent: 15 pos: 20.5,-10.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2718 +- uid: 2717 type: AirlockMaintRnDLocked components: - parent: 15 pos: -11.5,-21.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2719 +- uid: 2718 type: AirlockScienceLocked components: - name: Science @@ -32242,7 +32147,7 @@ entities: pos: 0.5,-19.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2720 +- uid: 2719 type: AirlockScienceLocked components: - name: Science @@ -32251,7 +32156,7 @@ entities: pos: 0.5,-20.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2721 +- uid: 2720 type: AirlockScienceGlassLocked components: - name: Research and Development @@ -32260,14 +32165,14 @@ entities: pos: -3.5,-18.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2722 +- uid: 2721 type: AirlockMaintCommonLocked components: - parent: 15 pos: -33.5,8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2723 +- uid: 2722 type: AirlockCommandGlassLocked components: - name: Chief Engineer's Office @@ -32280,14 +32185,14 @@ entities: - - Engineering - Command type: AccessReader -- uid: 2724 +- uid: 2723 type: Catwalk components: - parent: 15 pos: 26.5,9.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2725 +- uid: 2724 type: AirlockMaintCommandLocked components: - parent: 15 @@ -32297,14 +32202,14 @@ entities: - access: - - HeadOfPersonnel type: AccessReader -- uid: 2726 +- uid: 2725 type: AirlockExternalLocked components: - parent: 15 pos: 15.5,16.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2727 +- uid: 2726 type: Airlock components: - name: Custodial Closet @@ -32316,28 +32221,28 @@ entities: - access: - - Janitor type: AccessReader -- uid: 2728 +- uid: 2727 type: AirlockMaintCommonLocked components: - parent: 15 pos: -34.5,-6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2729 +- uid: 2728 type: AirlockMaintCommonLocked components: - parent: 15 pos: -23.5,-9.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2730 +- uid: 2729 type: AirlockMaintCommonLocked components: - parent: 15 pos: 1.5,-7.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2731 +- uid: 2730 type: AirlockVaultLocked components: - name: Vault @@ -32346,7 +32251,7 @@ entities: pos: 0.5,17.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2732 +- uid: 2731 type: AirlockMaintCommonLocked components: - parent: 15 @@ -32356,7 +32261,7 @@ entities: - access: - - Service type: AccessReader -- uid: 2733 +- uid: 2732 type: AirlockServiceGlassLocked components: - name: Kitchen @@ -32365,14 +32270,14 @@ entities: pos: -10.5,-1.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2734 +- uid: 2733 type: AirlockMaintEngiLocked components: - parent: 15 pos: 28.5,-6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2735 +- uid: 2734 type: AirlockServiceGlassLocked components: - name: Bar @@ -32381,7 +32286,7 @@ entities: pos: -7.5,-4.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2736 +- uid: 2735 type: AirlockSecurityGlassLocked components: - name: Brig @@ -32390,49 +32295,49 @@ entities: pos: -6.5,6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2737 +- uid: 2736 type: AirlockMaintCommonLocked components: - parent: 15 pos: -16.5,6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2738 +- uid: 2737 type: AirlockMaintCommonLocked components: - parent: 15 pos: 5.5,14.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2739 +- uid: 2738 type: AirlockMaintRnDLocked components: - parent: 15 pos: -4.5,-11.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2740 +- uid: 2739 type: AirlockMaintIntLocked components: - parent: 15 pos: -12.5,-8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2741 +- uid: 2740 type: AirlockMaintIntLocked components: - parent: 15 pos: -13.5,-13.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2742 +- uid: 2741 type: AirlockMaintCommonLocked components: - parent: 15 pos: -32.5,2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2743 +- uid: 2742 type: AirlockMaintCommonLocked components: - parent: 15 @@ -32442,7 +32347,7 @@ entities: - access: - - Janitor type: AccessReader -- uid: 2744 +- uid: 2743 type: AirlockEngineeringGlassLocked components: - name: Engineering @@ -32451,7 +32356,7 @@ entities: pos: 30.5,3.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2745 +- uid: 2744 type: AirlockEngineeringGlassLocked components: - name: Engineering @@ -32460,7 +32365,7 @@ entities: pos: 30.5,5.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2746 +- uid: 2745 type: AirlockMedicalGlassLocked components: - name: Chemistry @@ -32469,7 +32374,7 @@ entities: pos: 7.5,-6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2747 +- uid: 2746 type: AirlockMedicalGlassLocked components: - name: Chemistry @@ -32478,7 +32383,7 @@ entities: pos: 17.5,-3.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2748 +- uid: 2747 type: AirlockCommandGlassLocked components: - name: Chief Medical Officer's Office @@ -32491,7 +32396,7 @@ entities: - - Medical - Command type: AccessReader -- uid: 2749 +- uid: 2748 type: AirlockCommandGlassLocked components: - name: Server Room @@ -32504,7 +32409,7 @@ entities: - - Research - Command type: AccessReader -- uid: 2750 +- uid: 2749 type: AirlockCommandGlassLocked components: - name: Research Director's Office @@ -32517,7 +32422,7 @@ entities: - - Research - Command type: AccessReader -- uid: 2751 +- uid: 2750 type: AirlockScienceLocked components: - name: Testing Area @@ -32526,7 +32431,7 @@ entities: pos: -12.5,-19.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2752 +- uid: 2751 type: AirlockScienceLocked components: - name: Testing Area @@ -32535,7 +32440,7 @@ entities: pos: -12.5,-20.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2753 +- uid: 2752 type: AirlockGlass components: - name: Locker Room @@ -32544,7 +32449,7 @@ entities: pos: -26.5,-0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2754 +- uid: 2753 type: AirlockServiceGlassLocked components: - name: Tool Storage @@ -32556,7 +32461,7 @@ entities: - access: - - Maintenance type: AccessReader -- uid: 2755 +- uid: 2754 type: AirlockServiceGlassLocked components: - name: Tool Storage @@ -32568,7 +32473,7 @@ entities: - access: - - Maintenance type: AccessReader -- uid: 2756 +- uid: 2755 type: AirlockGlass components: - name: Locker Room @@ -32577,7 +32482,7 @@ entities: pos: -26.5,-1.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2757 +- uid: 2756 type: AirlockServiceLocked components: - name: Theatre @@ -32589,7 +32494,7 @@ entities: - access: - - Theatre type: AccessReader -- uid: 2758 +- uid: 2757 type: Airlock components: - name: Bunk Dorms @@ -32598,7 +32503,7 @@ entities: pos: -26.5,-6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2759 +- uid: 2758 type: Airlock components: - name: Showers @@ -32607,7 +32512,7 @@ entities: pos: -21.5,-4.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2760 +- uid: 2759 type: AirlockMaintCommonLocked components: - parent: 15 @@ -32617,49 +32522,49 @@ entities: - access: - - Service type: AccessReader -- uid: 2761 +- uid: 2760 type: AirlockMaintCommonLocked components: - parent: 15 pos: -31.5,-6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2762 +- uid: 2761 type: AirlockMaintCommonLocked components: - parent: 15 pos: 27.5,7.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2763 +- uid: 2762 type: Table components: - parent: 15 pos: -8.5,6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2764 +- uid: 2763 type: Table components: - parent: 15 pos: -9.5,6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2765 +- uid: 2764 type: Table components: - parent: 15 pos: -7.5,7.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2766 +- uid: 2765 type: Table components: - parent: 15 pos: -7.5,8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2767 +- uid: 2766 type: ChairOfficeDark components: - parent: 15 @@ -32668,7 +32573,7 @@ entities: type: Transform - anchored: False type: Collidable -- uid: 2768 +- uid: 2767 type: ChairOfficeDark components: - parent: 15 @@ -32676,7 +32581,7 @@ entities: type: Transform - anchored: False type: Collidable -- uid: 2769 +- uid: 2768 type: AirlockVaultLocked components: - name: Armory @@ -32685,7 +32590,7 @@ entities: pos: -12.5,17.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2770 +- uid: 2769 type: AirlockVaultLocked components: - name: Armory @@ -32694,7 +32599,7 @@ entities: pos: -10.5,20.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2771 +- uid: 2770 type: AirlockCommandGlassLocked components: - name: Bridge @@ -32703,7 +32608,7 @@ entities: pos: 2.5,22.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2772 +- uid: 2771 type: AirlockCommandGlassLocked components: - name: Bridge @@ -32712,7 +32617,7 @@ entities: pos: 4.5,22.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2773 +- uid: 2772 type: AirlockCommandGlassLocked components: - name: EVA @@ -32724,7 +32629,7 @@ entities: - access: - - External type: AccessReader -- uid: 2774 +- uid: 2773 type: AirlockCommandGlassLocked components: - name: EVA @@ -32736,7 +32641,7 @@ entities: - access: - - External type: AccessReader -- uid: 2775 +- uid: 2774 type: AirlockMaintCommandLocked components: - parent: 15 @@ -32746,7 +32651,7 @@ entities: - access: - - External type: AccessReader -- uid: 2776 +- uid: 2775 type: AirlockCargoGlassLocked components: - name: Cargo Office @@ -32755,7 +32660,7 @@ entities: pos: 13.5,8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2777 +- uid: 2776 type: AirlockCargoGlassLocked components: - name: Cargo Bay @@ -32764,7 +32669,7 @@ entities: pos: 17.5,10.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2778 +- uid: 2777 type: AirlockCargoGlassLocked components: - name: Cargo Bay @@ -32773,7 +32678,7 @@ entities: pos: 17.5,11.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2779 +- uid: 2778 type: AirlockExternalLocked components: - name: Supply Shuttle Dock @@ -32785,7 +32690,7 @@ entities: - access: - - Cargo type: AccessReader -- uid: 2780 +- uid: 2779 type: AirlockExternalLocked components: - name: Supply Shuttle Dock @@ -32797,7 +32702,7 @@ entities: - access: - - Cargo type: AccessReader -- uid: 2781 +- uid: 2780 type: AirlockExternalLocked components: - name: Supply Shuttle Dock @@ -32809,7 +32714,7 @@ entities: - access: - - Cargo type: AccessReader -- uid: 2782 +- uid: 2781 type: AirlockExternalLocked components: - name: Supply Shuttle Dock @@ -32821,14 +32726,14 @@ entities: - access: - - Cargo type: AccessReader -- uid: 2783 +- uid: 2782 type: AirlockExternalLocked components: - parent: 15 pos: 14.5,14.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2784 +- uid: 2783 type: AirlockCommandGlassLocked components: - name: Head of Security's Office @@ -32841,7 +32746,7 @@ entities: - - Security - Command type: AccessReader -- uid: 2785 +- uid: 2784 type: Poweredlight components: - parent: 15 @@ -32855,7 +32760,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2786 +- uid: 2785 type: Poweredlight components: - parent: 15 @@ -32870,7 +32775,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2787 +- uid: 2786 type: Poweredlight components: - parent: 15 @@ -32885,21 +32790,21 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2788 +- uid: 2787 type: reinforced_wall components: - parent: 15 pos: -15.5,16.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2789 +- uid: 2788 type: Catwalk components: - parent: 15 pos: -1.5,21.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2790 +- uid: 2789 type: AirlockSecurityGlassLocked components: - name: Cell 1 @@ -32908,7 +32813,7 @@ entities: pos: -2.5,9.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2791 +- uid: 2790 type: AirlockSecurityGlassLocked components: - name: Cell 2 @@ -32917,329 +32822,329 @@ entities: pos: 0.5,9.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2792 +- uid: 2791 type: SuspicionMeleeSpawner components: - parent: 15 pos: -27.5,1.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2793 +- uid: 2792 type: SuspicionMeleeSpawner components: - parent: 15 pos: -28.5,13.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2794 +- uid: 2793 type: SuspicionMeleeSpawner components: - parent: 15 pos: -29.5,10.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2795 +- uid: 2794 type: SuspicionMeleeSpawner components: - parent: 15 pos: -0.5,0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2796 +- uid: 2795 type: SuspicionMeleeSpawner components: - parent: 15 pos: 6.5,8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2797 +- uid: 2796 type: SuspicionMeleeSpawner components: - parent: 15 pos: 10.5,8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2798 +- uid: 2797 type: SuspicionMeleeSpawner components: - parent: 15 pos: 15.5,8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2799 +- uid: 2798 type: SuspicionMeleeSpawner components: - parent: 15 pos: 10.5,-13.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2800 +- uid: 2799 type: SuspicionMeleeSpawner components: - parent: 15 pos: 18.5,-24.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2801 +- uid: 2800 type: SuspicionMeleeSpawner components: - parent: 15 pos: 17.5,-20.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2802 +- uid: 2801 type: SuspicionMeleeSpawner components: - parent: 15 pos: 22.5,-4.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2803 +- uid: 2802 type: SuspicionRifleSpawner components: - parent: 15 pos: 23.5,-0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2804 +- uid: 2803 type: SuspicionRifleSpawner components: - parent: 15 pos: -2.5,-4.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2805 +- uid: 2804 type: SuspicionRifleSpawner components: - parent: 15 pos: -14.5,-0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2806 +- uid: 2805 type: SuspicionRifleSpawner components: - parent: 15 pos: -32.5,-8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2807 +- uid: 2806 type: SuspicionPistolSpawner components: - parent: 15 pos: -18.5,-11.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2808 +- uid: 2807 type: SuspicionPistolSpawner components: - parent: 15 pos: -31.5,8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2809 +- uid: 2808 type: SuspicionPistolSpawner components: - parent: 15 pos: -20.5,14.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2810 +- uid: 2809 type: SuspicionRifleSpawner components: - parent: 15 pos: -7.5,20.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2811 +- uid: 2810 type: SuspicionRifleSpawner components: - parent: 15 pos: -7.5,21.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2812 +- uid: 2811 type: SuspicionPistolSpawner components: - parent: 15 pos: 6.5,20.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2813 +- uid: 2812 type: SuspicionRifleSpawner components: - parent: 15 pos: 0.5,28.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2814 +- uid: 2813 type: SuspicionRifleSpawner components: - parent: 15 pos: 6.5,28.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2815 +- uid: 2814 type: SuspicionPistolSpawner components: - parent: 15 pos: -13.5,24.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2816 +- uid: 2815 type: SuspicionMeleeSpawner components: - parent: 15 pos: -4.5,20.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2817 +- uid: 2816 type: SuspicionRifleSpawner components: - parent: 15 pos: 5.5,16.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2818 +- uid: 2817 type: solid_wall components: - parent: 15 pos: -21.5,-1.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2819 +- uid: 2818 type: Wire components: - parent: 15 pos: -15.5,-5.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2820 +- uid: 2819 type: Wire components: - parent: 15 pos: -16.5,-5.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2821 +- uid: 2820 type: Wire components: - parent: 15 pos: -16.5,-4.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2822 +- uid: 2821 type: Wire components: - parent: 15 pos: -16.5,-3.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2823 +- uid: 2822 type: Wire components: - parent: 15 pos: -16.5,-2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2824 +- uid: 2823 type: Wire components: - parent: 15 pos: -17.5,-2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2825 +- uid: 2824 type: Wire components: - parent: 15 pos: -18.5,-2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2826 +- uid: 2825 type: Wire components: - parent: 15 pos: -19.5,-2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2827 +- uid: 2826 type: Wire components: - parent: 15 pos: -16.5,-1.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2828 +- uid: 2827 type: Wire components: - parent: 15 pos: -19.5,-3.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2829 +- uid: 2828 type: Wire components: - parent: 15 pos: -16.5,-0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2830 +- uid: 2829 type: Wire components: - parent: 15 pos: -16.5,0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2831 +- uid: 2830 type: Wire components: - parent: 15 pos: -16.5,1.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2832 +- uid: 2831 type: Wire components: - parent: 15 pos: -16.5,2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2833 +- uid: 2832 type: Wire components: - parent: 15 pos: -16.5,3.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2834 +- uid: 2833 type: solid_wall components: - parent: 15 pos: -14.5,-3.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2835 +- uid: 2834 type: Table components: - parent: 15 pos: -15.5,0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2836 +- uid: 2835 type: AirlockMaintCommonLocked components: - parent: 15 pos: -14.5,-4.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2837 +- uid: 2836 type: AirlockMaintCommonLocked components: - parent: 15 pos: -16.5,-3.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2838 +- uid: 2837 type: Airlock components: - name: Hydroponics @@ -33248,42 +33153,42 @@ entities: pos: -16.5,2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2839 +- uid: 2838 type: Catwalk components: - parent: 15 pos: -16.5,-4.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2840 +- uid: 2839 type: Catwalk components: - parent: 15 pos: -15.5,-4.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2841 +- uid: 2840 type: Catwalk components: - parent: 15 pos: -15.5,-5.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2842 +- uid: 2841 type: Catwalk components: - parent: 15 pos: -16.5,-5.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2843 +- uid: 2842 type: Catwalk components: - parent: 15 pos: -15.5,-6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2844 +- uid: 2843 type: Poweredlight components: - parent: 15 @@ -33294,7 +33199,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2845 +- uid: 2844 type: Poweredlight components: - parent: 15 @@ -33305,7 +33210,7 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2846 +- uid: 2845 type: Poweredlight components: - parent: 15 @@ -33316,728 +33221,728 @@ entities: light_bulb: type: Content.Server.GameObjects.ContainerSlot type: ContainerContainer -- uid: 2847 +- uid: 2846 type: TrashSpawner components: - parent: 15 pos: -21.5,10.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2848 +- uid: 2847 type: TrashSpawner components: - parent: 15 pos: -31.5,7.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2849 +- uid: 2848 type: TrashSpawner components: - parent: 15 pos: -32.5,11.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2850 +- uid: 2849 type: TrashSpawner components: - parent: 15 pos: -30.5,14.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2851 +- uid: 2850 type: TrashSpawner components: - parent: 15 pos: -25.5,13.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2852 +- uid: 2851 type: TrashSpawner components: - parent: 15 pos: -23.5,14.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2853 +- uid: 2852 type: TrashSpawner components: - parent: 15 pos: -21.5,12.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2854 +- uid: 2853 type: TrashSpawner components: - parent: 15 pos: -17.5,13.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2855 +- uid: 2854 type: TrashSpawner components: - parent: 15 pos: -15.5,9.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2856 +- uid: 2855 type: TrashSpawner components: - parent: 15 pos: -18.5,19.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2857 +- uid: 2856 type: TrashSpawner components: - parent: 15 pos: -18.5,25.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2858 +- uid: 2857 type: TrashSpawner components: - parent: 15 pos: -15.5,24.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2859 +- uid: 2858 type: TrashSpawner components: - parent: 15 pos: -8.5,25.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2860 +- uid: 2859 type: TrashSpawner components: - parent: 15 pos: -7.5,23.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2861 +- uid: 2860 type: TrashSpawner components: - parent: 15 pos: -4.5,22.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2862 +- uid: 2861 type: TrashSpawner components: - parent: 15 pos: -2.5,20.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2863 +- uid: 2862 type: TrashSpawner components: - parent: 15 pos: -3.5,7.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2864 +- uid: 2863 type: TrashSpawner components: - parent: 15 pos: 0.5,8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2865 +- uid: 2864 type: TrashSpawner components: - parent: 15 pos: -36.5,10.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2866 +- uid: 2865 type: TrashSpawner components: - parent: 15 pos: -35.5,-2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2867 +- uid: 2866 type: TrashSpawner components: - parent: 15 pos: -32.5,5.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2868 +- uid: 2867 type: TrashSpawner components: - parent: 15 pos: -22.5,6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2869 +- uid: 2868 type: TrashSpawner components: - parent: 15 pos: -30.5,1.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2870 +- uid: 2869 type: TrashSpawner components: - parent: 15 pos: -30.5,-8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2871 +- uid: 2870 type: TrashSpawner components: - parent: 15 pos: -19.5,-5.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2872 +- uid: 2871 type: TrashSpawner components: - parent: 15 pos: -32.5,-0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2873 +- uid: 2872 type: TrashSpawner components: - parent: 15 pos: -33.5,-7.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2874 +- uid: 2873 type: TrashSpawner components: - parent: 15 pos: -33.5,-11.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2875 +- uid: 2874 type: TrashSpawner components: - parent: 15 pos: -32.5,-5.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2876 +- uid: 2875 type: TrashSpawner components: - parent: 15 pos: -28.5,-11.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2877 +- uid: 2876 type: TrashSpawner components: - parent: 15 pos: -21.5,-10.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2878 +- uid: 2877 type: TrashSpawner components: - parent: 15 pos: -21.5,-12.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2879 +- uid: 2878 type: TrashSpawner components: - parent: 15 pos: -18.5,-13.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2880 +- uid: 2879 type: TrashSpawner components: - parent: 15 pos: -12.5,-15.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2881 +- uid: 2880 type: TrashSpawner components: - parent: 15 pos: -8.5,-15.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2882 +- uid: 2881 type: TrashSpawner components: - parent: 15 pos: -9.5,-12.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2883 +- uid: 2882 type: TrashSpawner components: - parent: 15 pos: -8.5,-11.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2884 +- uid: 2883 type: TrashSpawner components: - parent: 15 pos: -11.5,-6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2885 +- uid: 2884 type: TrashSpawner components: - parent: 15 pos: -16.5,-5.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2886 +- uid: 2885 type: TrashSpawner components: - parent: 15 pos: -6.5,-9.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2887 +- uid: 2886 type: TrashSpawner components: - parent: 15 pos: -2.5,-10.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2888 +- uid: 2887 type: TrashSpawner components: - parent: 15 pos: -0.5,-9.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2889 +- uid: 2888 type: TrashSpawner components: - parent: 15 pos: -0.5,-8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2890 +- uid: 2889 type: TrashSpawner components: - parent: 15 pos: 0.5,-6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2891 +- uid: 2890 type: TrashSpawner components: - parent: 15 pos: -11.5,-23.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2892 +- uid: 2891 type: TrashSpawner components: - parent: 15 pos: -11.5,-27.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2893 +- uid: 2892 type: TrashSpawner components: - parent: 15 pos: -9.5,-25.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2894 +- uid: 2893 type: TrashSpawner components: - parent: 15 pos: -5.5,-27.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2895 +- uid: 2894 type: TrashSpawner components: - parent: 15 pos: -2.5,-26.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2896 +- uid: 2895 type: TrashSpawner components: - parent: 15 pos: -0.5,-22.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2897 +- uid: 2896 type: TrashSpawner components: - parent: 15 pos: -10.5,-17.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2898 +- uid: 2897 type: TrashSpawner components: - parent: 15 pos: 7.5,-18.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2899 +- uid: 2898 type: TrashSpawner components: - parent: 15 pos: 12.5,-19.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2900 +- uid: 2899 type: TrashSpawner components: - parent: 15 pos: 14.5,-21.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2901 +- uid: 2900 type: TrashSpawner components: - parent: 15 pos: 14.5,-24.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2902 +- uid: 2901 type: TrashSpawner components: - parent: 15 pos: 18.5,-25.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2903 +- uid: 2902 type: TrashSpawner components: - parent: 15 pos: 22.5,-23.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2904 +- uid: 2903 type: TrashSpawner components: - parent: 15 pos: 21.5,-20.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2905 +- uid: 2904 type: TrashSpawner components: - parent: 15 pos: 21.5,-17.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2906 +- uid: 2905 type: TrashSpawner components: - parent: 15 pos: 26.5,-17.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2907 +- uid: 2906 type: TrashSpawner components: - parent: 15 pos: 27.5,-13.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2908 +- uid: 2907 type: TrashSpawner components: - parent: 15 pos: 24.5,-9.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2909 +- uid: 2908 type: TrashSpawner components: - parent: 15 pos: 27.5,-7.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2910 +- uid: 2909 type: TrashSpawner components: - parent: 15 pos: 27.5,-3.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2911 +- uid: 2910 type: TrashSpawner components: - parent: 15 pos: 25.5,-1.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2912 +- uid: 2911 type: TrashSpawner components: - parent: 15 pos: 21.5,-2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2913 +- uid: 2912 type: TrashSpawner components: - parent: 15 pos: 20.5,0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2914 +- uid: 2913 type: TrashSpawner components: - parent: 15 pos: 32.5,-6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2915 +- uid: 2914 type: TrashSpawner components: - parent: 15 pos: 37.5,-7.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2916 +- uid: 2915 type: TrashSpawner components: - parent: 15 pos: 37.5,-3.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2917 +- uid: 2916 type: TrashSpawner components: - parent: 15 pos: 42.5,-2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2918 +- uid: 2917 type: TrashSpawner components: - parent: 15 pos: 44.5,6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2919 +- uid: 2918 type: TrashSpawner components: - parent: 15 pos: 35.5,2.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2920 +- uid: 2919 type: TrashSpawner components: - parent: 15 pos: 27.5,0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2921 +- uid: 2920 type: TrashSpawner components: - parent: 15 pos: 28.5,8.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2922 +- uid: 2921 type: TrashSpawner components: - parent: 15 pos: 26.5,10.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2923 +- uid: 2922 type: TrashSpawner components: - parent: 15 pos: 27.5,13.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2924 +- uid: 2923 type: TrashSpawner components: - parent: 15 pos: 24.5,11.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2925 +- uid: 2924 type: TrashSpawner components: - parent: 15 pos: 12.5,12.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2926 +- uid: 2925 type: TrashSpawner components: - parent: 15 pos: 12.5,7.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2927 +- uid: 2926 type: TrashSpawner components: - parent: 15 pos: 6.5,1.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2928 +- uid: 2927 type: TrashSpawner components: - parent: 15 pos: 25.5,6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2929 +- uid: 2928 type: TrashSpawner components: - parent: 15 pos: 19.5,3.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2930 +- uid: 2929 type: TrashSpawner components: - parent: 15 pos: -7.5,5.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2931 +- uid: 2930 type: TrashSpawner components: - parent: 15 pos: -1.5,-0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2932 +- uid: 2931 type: TrashSpawner components: - parent: 15 pos: -8.5,-1.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2933 +- uid: 2932 type: TrashSpawner components: - parent: 15 pos: -17.5,3.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2934 +- uid: 2933 type: TrashSpawner components: - parent: 15 pos: -25.5,0.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2935 +- uid: 2934 type: TrashSpawner components: - parent: 15 pos: -22.5,-6.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2936 +- uid: 2935 type: TrashSpawner components: - parent: 15 pos: 4.5,9.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2937 +- uid: 2936 type: TrashSpawner components: - parent: 15 pos: 1.5,16.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2938 +- uid: 2937 type: TrashSpawner components: - parent: 15 pos: 13.5,19.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2939 +- uid: 2938 type: TrashSpawner components: - parent: 15 pos: 12.5,15.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2940 +- uid: 2939 type: TrashSpawner components: - parent: 15 pos: 9.5,13.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2941 +- uid: 2940 type: solid_wall components: - parent: 15 pos: -19.5,-15.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2942 +- uid: 2941 type: solid_wall components: - parent: 15 pos: -19.5,-14.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2943 +- uid: 2942 type: solid_wall components: - parent: 15 pos: -19.5,-13.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2944 +- uid: 2943 type: solid_wall components: - parent: 15 pos: -19.5,-12.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2945 +- uid: 2944 type: solid_wall components: - parent: 15 pos: -20.5,-12.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2946 +- uid: 2945 type: solid_wall components: - parent: 15 pos: -21.5,-12.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2947 +- uid: 2946 type: solid_wall components: - parent: 15 pos: -22.5,-12.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2948 +- uid: 2947 type: solid_wall components: - parent: 15 pos: -23.5,-12.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2949 +- uid: 2948 type: AirlockMaintCommon components: - parent: 15 pos: -24.5,-12.5 rot: -1.5707963267948966 rad type: Transform -- uid: 2950 +- uid: 2949 type: DisposalUnit components: - parent: 15 @@ -34050,7 +33955,7 @@ entities: DisposalUnit: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2951 +- uid: 2950 type: DisposalPipe components: - parent: 15 @@ -34063,7 +33968,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 2952 +- uid: 2951 type: DisposalPipe components: - parent: 15 @@ -34076,7 +33981,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 2953 +- uid: 2952 type: DisposalPipe components: - parent: 15 @@ -34089,7 +33994,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 2954 +- uid: 2953 type: DisposalUnit components: - parent: 15 @@ -34102,7 +34007,7 @@ entities: DisposalUnit: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2955 +- uid: 2954 type: DisposalPipe components: - parent: 15 @@ -34115,7 +34020,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 2956 +- uid: 2955 type: DisposalPipe components: - parent: 15 @@ -34128,7 +34033,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 2957 +- uid: 2956 type: DisposalPipe components: - parent: 15 @@ -34141,7 +34046,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 2958 +- uid: 2957 type: DisposalPipe components: - parent: 15 @@ -34154,7 +34059,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 2959 +- uid: 2958 type: DisposalBend components: - parent: 15 @@ -34167,7 +34072,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 2960 +- uid: 2959 type: DisposalPipe components: - parent: 15 @@ -34180,7 +34085,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 2961 +- uid: 2960 type: DisposalPipe components: - parent: 15 @@ -34193,7 +34098,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 2962 +- uid: 2961 type: DisposalPipe components: - parent: 15 @@ -34206,7 +34111,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 2963 +- uid: 2962 type: DisposalPipe components: - parent: 15 @@ -34219,7 +34124,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 2964 +- uid: 2963 type: DisposalPipe components: - parent: 15 @@ -34232,7 +34137,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 2965 +- uid: 2964 type: DisposalPipe components: - parent: 15 @@ -34245,7 +34150,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 2966 +- uid: 2965 type: DisposalPipe components: - parent: 15 @@ -34258,7 +34163,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 2967 +- uid: 2966 type: DisposalPipe components: - parent: 15 @@ -34271,7 +34176,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 2968 +- uid: 2967 type: DisposalPipe components: - parent: 15 @@ -34284,7 +34189,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 2969 +- uid: 2968 type: DisposalPipe components: - parent: 15 @@ -34297,7 +34202,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 2970 +- uid: 2969 type: DisposalPipe components: - parent: 15 @@ -34310,7 +34215,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 2971 +- uid: 2970 type: DisposalPipe components: - parent: 15 @@ -34323,7 +34228,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 2972 +- uid: 2971 type: DisposalPipe components: - parent: 15 @@ -34336,7 +34241,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 2973 +- uid: 2972 type: DisposalPipe components: - parent: 15 @@ -34349,7 +34254,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 2974 +- uid: 2973 type: DisposalPipe components: - parent: 15 @@ -34362,7 +34267,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 2975 +- uid: 2974 type: DisposalPipe components: - parent: 15 @@ -34375,7 +34280,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 2976 +- uid: 2975 type: DisposalPipe components: - parent: 15 @@ -34388,7 +34293,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 2977 +- uid: 2976 type: DisposalPipe components: - parent: 15 @@ -34401,7 +34306,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 2978 +- uid: 2977 type: DisposalPipe components: - parent: 15 @@ -34414,7 +34319,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 2979 +- uid: 2978 type: DisposalPipe components: - parent: 15 @@ -34427,7 +34332,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 2980 +- uid: 2979 type: DisposalPipe components: - parent: 15 @@ -34440,7 +34345,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 2981 +- uid: 2980 type: DisposalPipe components: - parent: 15 @@ -34453,7 +34358,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 2982 +- uid: 2981 type: DisposalUnit components: - parent: 15 @@ -34466,7 +34371,7 @@ entities: DisposalUnit: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2983 +- uid: 2982 type: DisposalPipe components: - parent: 15 @@ -34479,7 +34384,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 2984 +- uid: 2983 type: DisposalPipe components: - parent: 15 @@ -34492,7 +34397,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 2985 +- uid: 2984 type: DisposalPipe components: - parent: 15 @@ -34505,7 +34410,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 2986 +- uid: 2985 type: DisposalPipe components: - parent: 15 @@ -34518,7 +34423,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 2987 +- uid: 2986 type: DisposalPipe components: - parent: 15 @@ -34531,7 +34436,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 2988 +- uid: 2987 type: DisposalPipe components: - parent: 15 @@ -34544,7 +34449,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 2989 +- uid: 2988 type: DisposalPipe components: - parent: 15 @@ -34557,7 +34462,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 2990 +- uid: 2989 type: DisposalPipe components: - parent: 15 @@ -34570,7 +34475,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 2991 +- uid: 2990 type: DisposalPipe components: - parent: 15 @@ -34583,7 +34488,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 2992 +- uid: 2991 type: DisposalUnit components: - parent: 15 @@ -34596,7 +34501,7 @@ entities: DisposalUnit: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 2993 +- uid: 2992 type: DisposalPipe components: - parent: 15 @@ -34609,7 +34514,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 2994 +- uid: 2993 type: DisposalPipe components: - parent: 15 @@ -34622,7 +34527,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 2995 +- uid: 2994 type: DisposalPipe components: - parent: 15 @@ -34635,7 +34540,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 2996 +- uid: 2995 type: DisposalPipe components: - parent: 15 @@ -34648,7 +34553,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 2997 +- uid: 2996 type: DisposalPipe components: - parent: 15 @@ -34661,7 +34566,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 2998 +- uid: 2997 type: DisposalPipe components: - parent: 15 @@ -34674,7 +34579,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 2999 +- uid: 2998 type: DisposalPipe components: - parent: 15 @@ -34687,7 +34592,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3000 +- uid: 2999 type: DisposalPipe components: - parent: 15 @@ -34700,7 +34605,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3001 +- uid: 3000 type: DisposalPipe components: - parent: 15 @@ -34713,7 +34618,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3002 +- uid: 3001 type: DisposalPipe components: - parent: 15 @@ -34726,7 +34631,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3003 +- uid: 3002 type: DisposalPipe components: - parent: 15 @@ -34739,7 +34644,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3004 +- uid: 3003 type: DisposalPipe components: - parent: 15 @@ -34752,7 +34657,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3005 +- uid: 3004 type: DisposalPipe components: - parent: 15 @@ -34765,7 +34670,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3006 +- uid: 3005 type: DisposalPipe components: - parent: 15 @@ -34778,7 +34683,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3007 +- uid: 3006 type: DisposalBend components: - parent: 15 @@ -34791,7 +34696,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3008 +- uid: 3007 type: DisposalTrunk components: - parent: 15 @@ -34804,7 +34709,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3009 +- uid: 3008 type: DisposalPipe components: - parent: 15 @@ -34817,7 +34722,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3010 +- uid: 3009 type: DisposalPipe components: - parent: 15 @@ -34830,7 +34735,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3011 +- uid: 3010 type: DisposalBend components: - parent: 15 @@ -34842,7 +34747,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3012 +- uid: 3011 type: DisposalPipe components: - parent: 15 @@ -34855,7 +34760,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3013 +- uid: 3012 type: DisposalPipe components: - parent: 15 @@ -34868,7 +34773,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3014 +- uid: 3013 type: DisposalPipe components: - parent: 15 @@ -34880,7 +34785,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3015 +- uid: 3014 type: DisposalTrunk components: - parent: 15 @@ -34893,7 +34798,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3016 +- uid: 3015 type: DisposalPipe components: - parent: 15 @@ -34906,7 +34811,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3017 +- uid: 3016 type: DisposalPipe components: - parent: 15 @@ -34918,7 +34823,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3018 +- uid: 3017 type: DisposalTrunk components: - parent: 15 @@ -34931,7 +34836,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3019 +- uid: 3018 type: DisposalPipe components: - parent: 15 @@ -34944,7 +34849,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3020 +- uid: 3019 type: DisposalUnit components: - parent: 15 @@ -34957,7 +34862,7 @@ entities: DisposalUnit: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 3021 +- uid: 3020 type: DisposalTrunk components: - parent: 15 @@ -34970,7 +34875,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3022 +- uid: 3021 type: DisposalPipe components: - parent: 15 @@ -34982,7 +34887,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3023 +- uid: 3022 type: DisposalPipe components: - parent: 15 @@ -34995,7 +34900,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3024 +- uid: 3023 type: DisposalPipe components: - parent: 15 @@ -35008,7 +34913,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3025 +- uid: 3024 type: DisposalPipe components: - parent: 15 @@ -35021,7 +34926,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3026 +- uid: 3025 type: DisposalPipe components: - parent: 15 @@ -35034,7 +34939,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3027 +- uid: 3026 type: DisposalPipe components: - parent: 15 @@ -35047,7 +34952,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3028 +- uid: 3027 type: DisposalPipe components: - parent: 15 @@ -35060,7 +34965,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3029 +- uid: 3028 type: DisposalPipe components: - parent: 15 @@ -35073,7 +34978,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3030 +- uid: 3029 type: DisposalPipe components: - parent: 15 @@ -35086,7 +34991,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3031 +- uid: 3030 type: DisposalPipe components: - parent: 15 @@ -35099,7 +35004,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3032 +- uid: 3031 type: DisposalPipe components: - parent: 15 @@ -35112,7 +35017,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3033 +- uid: 3032 type: DisposalPipe components: - parent: 15 @@ -35125,7 +35030,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3034 +- uid: 3033 type: DisposalPipe components: - parent: 15 @@ -35138,7 +35043,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3035 +- uid: 3034 type: DisposalPipe components: - parent: 15 @@ -35151,7 +35056,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3036 +- uid: 3035 type: DisposalPipe components: - parent: 15 @@ -35164,7 +35069,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3037 +- uid: 3036 type: DisposalPipe components: - parent: 15 @@ -35177,7 +35082,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3038 +- uid: 3037 type: DisposalPipe components: - parent: 15 @@ -35190,7 +35095,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3039 +- uid: 3038 type: DisposalPipe components: - parent: 15 @@ -35203,7 +35108,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3040 +- uid: 3039 type: DisposalPipe components: - parent: 15 @@ -35216,7 +35121,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3041 +- uid: 3040 type: DisposalPipe components: - parent: 15 @@ -35229,7 +35134,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3042 +- uid: 3041 type: DisposalPipe components: - parent: 15 @@ -35242,7 +35147,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3043 +- uid: 3042 type: DisposalPipe components: - parent: 15 @@ -35255,7 +35160,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3044 +- uid: 3043 type: DisposalPipe components: - parent: 15 @@ -35268,7 +35173,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3045 +- uid: 3044 type: DisposalPipe components: - parent: 15 @@ -35281,7 +35186,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3046 +- uid: 3045 type: DisposalPipe components: - parent: 15 @@ -35294,7 +35199,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3047 +- uid: 3046 type: DisposalPipe components: - parent: 15 @@ -35307,7 +35212,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3048 +- uid: 3047 type: DisposalPipe components: - parent: 15 @@ -35320,7 +35225,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3049 +- uid: 3048 type: DisposalPipe components: - parent: 15 @@ -35333,7 +35238,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3050 +- uid: 3049 type: DisposalPipe components: - parent: 15 @@ -35346,7 +35251,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3051 +- uid: 3050 type: DisposalUnit components: - parent: 15 @@ -35359,7 +35264,7 @@ entities: DisposalUnit: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 3052 +- uid: 3051 type: DisposalTrunk components: - parent: 15 @@ -35372,13 +35277,13 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3053 +- uid: 3052 type: ConveyorBelt components: - parent: 15 pos: -22.5,-13.5 type: Transform -- uid: 3054 +- uid: 3053 type: DisposalPipe components: - parent: 15 @@ -35391,7 +35296,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3055 +- uid: 3054 type: DisposalPipe components: - parent: 15 @@ -35404,7 +35309,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3056 +- uid: 3055 type: DisposalPipe components: - parent: 15 @@ -35417,7 +35322,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3057 +- uid: 3056 type: DisposalPipe components: - parent: 15 @@ -35429,7 +35334,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3058 +- uid: 3057 type: DisposalUnit components: - parent: 15 @@ -35442,7 +35347,7 @@ entities: DisposalUnit: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 3059 +- uid: 3058 type: DisposalTrunk components: - parent: 15 @@ -35455,7 +35360,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3060 +- uid: 3059 type: DisposalPipe components: - parent: 15 @@ -35468,7 +35373,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3061 +- uid: 3060 type: DisposalPipe components: - parent: 15 @@ -35481,7 +35386,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3062 +- uid: 3061 type: DisposalPipe components: - parent: 15 @@ -35494,7 +35399,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3063 +- uid: 3062 type: DisposalPipe components: - parent: 15 @@ -35507,7 +35412,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3064 +- uid: 3063 type: DisposalPipe components: - parent: 15 @@ -35520,7 +35425,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3065 +- uid: 3064 type: DisposalPipe components: - parent: 15 @@ -35533,7 +35438,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3066 +- uid: 3065 type: DisposalPipe components: - parent: 15 @@ -35546,7 +35451,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3067 +- uid: 3066 type: DisposalBend components: - parent: 15 @@ -35559,7 +35464,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3068 +- uid: 3067 type: DisposalPipe components: - parent: 15 @@ -35572,7 +35477,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3069 +- uid: 3068 type: DisposalPipe components: - parent: 15 @@ -35585,7 +35490,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3070 +- uid: 3069 type: DisposalPipe components: - parent: 15 @@ -35598,7 +35503,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3071 +- uid: 3070 type: DisposalPipe components: - parent: 15 @@ -35611,7 +35516,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3072 +- uid: 3071 type: DisposalPipe components: - parent: 15 @@ -35624,7 +35529,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3073 +- uid: 3072 type: DisposalPipe components: - parent: 15 @@ -35637,7 +35542,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3074 +- uid: 3073 type: DisposalPipe components: - parent: 15 @@ -35650,7 +35555,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3075 +- uid: 3074 type: DisposalPipe components: - parent: 15 @@ -35663,7 +35568,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3076 +- uid: 3075 type: DisposalPipe components: - parent: 15 @@ -35676,7 +35581,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3077 +- uid: 3076 type: DisposalPipe components: - parent: 15 @@ -35689,7 +35594,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3078 +- uid: 3077 type: DisposalPipe components: - parent: 15 @@ -35702,7 +35607,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3079 +- uid: 3078 type: DisposalPipe components: - parent: 15 @@ -35715,7 +35620,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3080 +- uid: 3079 type: DisposalPipe components: - parent: 15 @@ -35728,7 +35633,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3081 +- uid: 3080 type: DisposalPipe components: - parent: 15 @@ -35740,7 +35645,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3082 +- uid: 3081 type: DisposalUnit components: - parent: 15 @@ -35753,7 +35658,7 @@ entities: DisposalUnit: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 3083 +- uid: 3082 type: DisposalTrunk components: - parent: 15 @@ -35765,7 +35670,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3084 +- uid: 3083 type: DisposalPipe components: - parent: 15 @@ -35777,7 +35682,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3085 +- uid: 3084 type: DisposalPipe components: - parent: 15 @@ -35789,7 +35694,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3086 +- uid: 3085 type: DisposalPipe components: - parent: 15 @@ -35801,7 +35706,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3087 +- uid: 3086 type: DisposalPipe components: - parent: 15 @@ -35813,7 +35718,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3088 +- uid: 3087 type: DisposalPipe components: - parent: 15 @@ -35826,7 +35731,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3089 +- uid: 3088 type: DisposalPipe components: - parent: 15 @@ -35839,7 +35744,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3090 +- uid: 3089 type: DisposalPipe components: - parent: 15 @@ -35852,7 +35757,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3091 +- uid: 3090 type: DisposalPipe components: - parent: 15 @@ -35865,7 +35770,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3092 +- uid: 3091 type: DisposalPipe components: - parent: 15 @@ -35878,7 +35783,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3093 +- uid: 3092 type: DisposalPipe components: - parent: 15 @@ -35891,7 +35796,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3094 +- uid: 3093 type: DisposalPipe components: - parent: 15 @@ -35904,7 +35809,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3095 +- uid: 3094 type: DisposalPipe components: - parent: 15 @@ -35917,7 +35822,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3096 +- uid: 3095 type: DisposalPipe components: - parent: 15 @@ -35930,7 +35835,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3097 +- uid: 3096 type: DisposalPipe components: - parent: 15 @@ -35943,7 +35848,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3098 +- uid: 3097 type: DisposalPipe components: - parent: 15 @@ -35956,7 +35861,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3099 +- uid: 3098 type: DisposalPipe components: - parent: 15 @@ -35969,7 +35874,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3100 +- uid: 3099 type: DisposalPipe components: - parent: 15 @@ -35981,7 +35886,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3101 +- uid: 3100 type: DisposalPipe components: - parent: 15 @@ -35994,7 +35899,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3102 +- uid: 3101 type: DisposalPipe components: - parent: 15 @@ -36007,7 +35912,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3103 +- uid: 3102 type: DisposalPipe components: - parent: 15 @@ -36020,7 +35925,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3104 +- uid: 3103 type: DisposalPipe components: - parent: 15 @@ -36033,7 +35938,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3105 +- uid: 3104 type: DisposalPipe components: - parent: 15 @@ -36046,7 +35951,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3106 +- uid: 3105 type: DisposalPipe components: - parent: 15 @@ -36059,7 +35964,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3107 +- uid: 3106 type: DisposalPipe components: - parent: 15 @@ -36072,7 +35977,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3108 +- uid: 3107 type: DisposalPipe components: - parent: 15 @@ -36085,7 +35990,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3109 +- uid: 3108 type: DisposalPipe components: - parent: 15 @@ -36098,7 +36003,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3110 +- uid: 3109 type: DisposalPipe components: - parent: 15 @@ -36111,7 +36016,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3111 +- uid: 3110 type: DisposalPipe components: - parent: 15 @@ -36124,7 +36029,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3112 +- uid: 3111 type: DisposalPipe components: - parent: 15 @@ -36137,7 +36042,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3113 +- uid: 3112 type: DisposalBend components: - parent: 15 @@ -36150,7 +36055,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3114 +- uid: 3113 type: DisposalUnit components: - parent: 15 @@ -36163,7 +36068,7 @@ entities: DisposalUnit: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 3115 +- uid: 3114 type: DisposalTrunk components: - parent: 15 @@ -36176,7 +36081,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3116 +- uid: 3115 type: DisposalPipe components: - parent: 15 @@ -36189,7 +36094,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3117 +- uid: 3116 type: DisposalPipe components: - parent: 15 @@ -36202,7 +36107,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3118 +- uid: 3117 type: DisposalBend components: - parent: 15 @@ -36215,7 +36120,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3119 +- uid: 3118 type: DisposalPipe components: - parent: 15 @@ -36228,7 +36133,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3120 +- uid: 3119 type: DisposalPipe components: - parent: 15 @@ -36241,7 +36146,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3121 +- uid: 3120 type: DisposalPipe components: - parent: 15 @@ -36254,7 +36159,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3122 +- uid: 3121 type: DisposalPipe components: - parent: 15 @@ -36267,7 +36172,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3123 +- uid: 3122 type: DisposalPipe components: - parent: 15 @@ -36280,7 +36185,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3124 +- uid: 3123 type: DisposalPipe components: - parent: 15 @@ -36293,7 +36198,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3125 +- uid: 3124 type: DisposalPipe components: - parent: 15 @@ -36306,7 +36211,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3126 +- uid: 3125 type: DisposalUnit components: - parent: 15 @@ -36319,7 +36224,7 @@ entities: DisposalUnit: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 3127 +- uid: 3126 type: DisposalTrunk components: - parent: 15 @@ -36332,7 +36237,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3128 +- uid: 3127 type: DisposalPipe components: - parent: 15 @@ -36345,7 +36250,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3129 +- uid: 3128 type: DisposalPipe components: - parent: 15 @@ -36358,7 +36263,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3130 +- uid: 3129 type: DisposalPipe components: - parent: 15 @@ -36371,7 +36276,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3131 +- uid: 3130 type: DisposalPipe components: - parent: 15 @@ -36384,7 +36289,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3132 +- uid: 3131 type: DisposalPipe components: - parent: 15 @@ -36397,7 +36302,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3133 +- uid: 3132 type: DisposalPipe components: - parent: 15 @@ -36410,7 +36315,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3134 +- uid: 3133 type: DisposalPipe components: - parent: 15 @@ -36423,13 +36328,13 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3135 +- uid: 3134 type: Recycler components: - parent: 15 pos: -21.5,-13.5 type: Transform -- uid: 3136 +- uid: 3135 type: DisposalPipe components: - parent: 15 @@ -36442,7 +36347,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3137 +- uid: 3136 type: DisposalPipe components: - parent: 15 @@ -36454,7 +36359,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3138 +- uid: 3137 type: DisposalPipe components: - parent: 15 @@ -36466,7 +36371,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3139 +- uid: 3138 type: DisposalPipe components: - parent: 15 @@ -36478,7 +36383,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3140 +- uid: 3139 type: DisposalUnit components: - parent: 15 @@ -36491,7 +36396,7 @@ entities: DisposalUnit: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 3141 +- uid: 3140 type: DisposalTrunk components: - parent: 15 @@ -36504,7 +36409,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3142 +- uid: 3141 type: DisposalPipe components: - parent: 15 @@ -36517,7 +36422,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3143 +- uid: 3142 type: DisposalPipe components: - parent: 15 @@ -36530,7 +36435,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3144 +- uid: 3143 type: DisposalPipe components: - parent: 15 @@ -36543,7 +36448,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3145 +- uid: 3144 type: DisposalPipe components: - parent: 15 @@ -36556,7 +36461,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3146 +- uid: 3145 type: DisposalUnit components: - parent: 15 @@ -36569,7 +36474,7 @@ entities: DisposalUnit: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 3147 +- uid: 3146 type: DisposalTrunk components: - parent: 15 @@ -36582,7 +36487,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3148 +- uid: 3147 type: DisposalPipe components: - parent: 15 @@ -36595,7 +36500,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3149 +- uid: 3148 type: DisposalPipe components: - parent: 15 @@ -36608,7 +36513,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3150 +- uid: 3149 type: DisposalPipe components: - parent: 15 @@ -36621,7 +36526,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3151 +- uid: 3150 type: DisposalUnit components: - parent: 15 @@ -36634,7 +36539,7 @@ entities: DisposalUnit: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 3152 +- uid: 3151 type: DisposalTrunk components: - parent: 15 @@ -36646,7 +36551,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3153 +- uid: 3152 type: DisposalPipe components: - parent: 15 @@ -36658,7 +36563,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3154 +- uid: 3153 type: DisposalPipe components: - parent: 15 @@ -36670,7 +36575,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3155 +- uid: 3154 type: DisposalPipe components: - parent: 15 @@ -36682,7 +36587,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3156 +- uid: 3155 type: DisposalPipe components: - parent: 15 @@ -36694,7 +36599,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3157 +- uid: 3156 type: DisposalPipe components: - parent: 15 @@ -36706,7 +36611,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3158 +- uid: 3157 type: DisposalPipe components: - parent: 15 @@ -36718,7 +36623,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3159 +- uid: 3158 type: DisposalPipe components: - parent: 15 @@ -36731,7 +36636,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3160 +- uid: 3159 type: DisposalBend components: - parent: 15 @@ -36744,7 +36649,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3161 +- uid: 3160 type: DisposalUnit components: - parent: 15 @@ -36757,14 +36662,14 @@ entities: DisposalUnit: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 3162 +- uid: 3161 type: VendingMachineYouTool components: - parent: 15 pos: -28.5,11.5 rot: -1.5707963267948966 rad type: Transform -- uid: 3163 +- uid: 3162 type: DisposalPipe components: - parent: 15 @@ -36777,7 +36682,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3164 +- uid: 3163 type: DisposalPipe components: - parent: 15 @@ -36790,7 +36695,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3165 +- uid: 3164 type: DisposalPipe components: - parent: 15 @@ -36803,7 +36708,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3166 +- uid: 3165 type: DisposalPipe components: - parent: 15 @@ -36816,7 +36721,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3167 +- uid: 3166 type: DisposalPipe components: - parent: 15 @@ -36829,7 +36734,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3168 +- uid: 3167 type: DisposalPipe components: - parent: 15 @@ -36841,7 +36746,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3169 +- uid: 3168 type: DisposalUnit components: - parent: 15 @@ -36854,7 +36759,7 @@ entities: DisposalUnit: type: Robust.Server.GameObjects.Components.Container.Container type: ContainerContainer -- uid: 3170 +- uid: 3169 type: DisposalTrunk components: - parent: 15 @@ -36867,7 +36772,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3171 +- uid: 3170 type: DisposalPipe components: - parent: 15 @@ -36880,7 +36785,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3172 +- uid: 3171 type: DisposalPipe components: - parent: 15 @@ -36893,7 +36798,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3173 +- uid: 3172 type: DisposalPipe components: - parent: 15 @@ -36906,7 +36811,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3174 +- uid: 3173 type: DisposalPipe components: - parent: 15 @@ -36919,7 +36824,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3175 +- uid: 3174 type: DisposalJunctionFlipped components: - parent: 15 @@ -36932,7 +36837,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3176 +- uid: 3175 type: DisposalJunction components: - parent: 15 @@ -36945,7 +36850,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3177 +- uid: 3176 type: DisposalJunctionFlipped components: - parent: 15 @@ -36958,7 +36863,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3178 +- uid: 3177 type: DisposalJunctionFlipped components: - parent: 15 @@ -36971,7 +36876,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3179 +- uid: 3178 type: DisposalJunction components: - parent: 15 @@ -36984,7 +36889,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3180 +- uid: 3179 type: DisposalJunction components: - parent: 15 @@ -36997,7 +36902,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3181 +- uid: 3180 type: DisposalJunctionFlipped components: - parent: 15 @@ -37009,7 +36914,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3182 +- uid: 3181 type: DisposalYJunction components: - parent: 15 @@ -37022,7 +36927,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3183 +- uid: 3182 type: DisposalJunction components: - parent: 15 @@ -37035,7 +36940,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3184 +- uid: 3183 type: DisposalJunctionFlipped components: - parent: 15 @@ -37048,7 +36953,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3185 +- uid: 3184 type: DisposalJunctionFlipped components: - parent: 15 @@ -37061,7 +36966,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3186 +- uid: 3185 type: DisposalJunction components: - parent: 15 @@ -37074,7 +36979,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3187 +- uid: 3186 type: DisposalJunctionFlipped components: - parent: 15 @@ -37087,7 +36992,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3188 +- uid: 3187 type: DisposalJunction components: - parent: 15 @@ -37100,7 +37005,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3189 +- uid: 3188 type: DisposalJunction components: - parent: 15 @@ -37113,7 +37018,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3190 +- uid: 3189 type: DisposalJunctionFlipped components: - parent: 15 @@ -37126,7 +37031,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3191 +- uid: 3190 type: ConveyorSwitch components: - parent: 15 @@ -37136,7 +37041,7 @@ entities: - conveyors: [] switches: [] type: ConveyorSwitch -- uid: 3192 +- uid: 3191 type: DisposalPipe components: - parent: 15 @@ -37148,7 +37053,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3193 +- uid: 3192 type: DisposalBend components: - parent: 15 @@ -37161,7 +37066,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3194 +- uid: 3193 type: DisposalBend components: - parent: 15 @@ -37173,7 +37078,7 @@ entities: type: ContainerContainer - shapes: [] type: Collidable -- uid: 3195 +- uid: 3194 type: Beaker components: - parent: 15 @@ -37182,7 +37087,7 @@ entities: type: Transform - anchored: False type: Collidable -- uid: 3196 +- uid: 3195 type: LargeBeaker components: - parent: 15 @@ -37191,16 +37096,984 @@ entities: type: Transform - anchored: False type: Collidable -- uid: 3197 +- uid: 3196 type: ConveyorBelt components: - parent: 15 pos: -23.5,-13.5 type: Transform -- uid: 3198 +- uid: 3197 type: AirlockMaintCargo components: - parent: 15 pos: -24.5,-12.5 type: Transform +- uid: 3198 + type: SignDirectionalSupply + components: + - parent: 15 + pos: -25.704908,7.5 + rot: 1.5707963267948966 rad + type: Transform +- uid: 3199 + type: SignDirectionalEvac + components: + - parent: 15 + pos: -20.488556,6.5 + rot: 1.5707963267948966 rad + type: Transform +- uid: 3200 + type: LowWall + components: + - parent: 15 + pos: 21.5,16.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 3201 + type: LowWall + components: + - parent: 15 + pos: 21.5,15.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 3202 + type: solid_wall + components: + - parent: 15 + pos: 18.5,14.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 3203 + type: solid_wall + components: + - parent: 15 + pos: 24.5,14.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 3204 + type: SignCargoDock + components: + - parent: 15 + pos: 18.501179,14.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 3205 + type: SignChem + components: + - parent: 15 + pos: 14.317627,-3.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 3206 + type: SignEVA + components: + - parent: 15 + pos: 10.691145,6.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 3207 + type: Poweredlight + components: + - parent: 15 + pos: 28.73304,7 + rot: -1.5707963267948966 rad + type: Transform + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 3208 + type: SignToolStorage + components: + - parent: 15 + pos: -26.694574,6.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 3209 + type: SignGravity + components: + - parent: 15 + pos: 48.325787,-1.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 3210 + type: SignMedical + components: + - parent: 15 + pos: 6.500677,2.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 3211 + type: SignRND + components: + - parent: 15 + pos: -5.506548,-18.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 3212 + type: Poweredlight + components: + - parent: 15 + pos: -15.231159,-17 + rot: -1.5707963267948966 rad + type: Transform + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 3213 + type: Poweredlight + components: + - parent: 15 + pos: -25.939785,7 + type: Transform + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 3214 + type: SignBridge + components: + - parent: 15 + pos: 5.6507263,22.5 + type: Transform +- uid: 3215 + type: SignDirectionalEng + components: + - parent: 15 + pos: 5.987236,6.2578936 + type: Transform +- uid: 3216 + type: PlaqueZum + components: + - parent: 15 + pos: 33.498077,11.399912 + rot: 1.5707963267948966 rad + type: Transform +- uid: 3217 + type: Poweredlight + components: + - parent: 15 + pos: 49.53657,5 + rot: -1.5707963267948966 rad + type: Transform + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 3218 + type: Poweredlight + components: + - parent: 15 + pos: -10,13.5 + type: Transform + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 3219 + type: Poweredlight + components: + - parent: 15 + pos: 41.000477,14 + rot: -1.5707963267948966 rad + type: Transform + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 3220 + type: SignEngineering + components: + - parent: 15 + pos: 30.305984,-0.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 3221 + type: Table + components: + - parent: 15 + pos: -14.5,21.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 3222 + type: Table + components: + - parent: 15 + pos: -13.5,21.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 3223 + type: Table + components: + - parent: 15 + pos: -14.5,20.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 3224 + type: TaserGun + components: + - parent: 15 + pos: -13.672081,21.719378 + rot: -1.5707963267948966 rad + type: Transform + - angleIncrease: 1.9051974E-08 + angleDecay: 1.4288981E-08 + type: BatteryBarrel + - anchored: False + type: Collidable + - containers: + BatteryBarrel-powercell-container: + entities: + - 3225 + type: Content.Server.GameObjects.ContainerSlot + BatteryBarrel-ammo-container: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 3225 + type: PowerCellSmallStandard + components: + - parent: 3224 + type: Transform + - startingCharge: 1000 + type: PowerCell + - anchored: False + type: Collidable +- uid: 3226 + type: TaserGun + components: + - parent: 15 + pos: -14.515831,21.735003 + rot: -1.5707963267948966 rad + type: Transform + - angleIncrease: 1.9051974E-08 + angleDecay: 1.4288981E-08 + type: BatteryBarrel + - anchored: False + type: Collidable + - containers: + BatteryBarrel-powercell-container: + entities: + - 3227 + type: Content.Server.GameObjects.ContainerSlot + BatteryBarrel-ammo-container: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 3227 + type: PowerCellSmallStandard + components: + - parent: 3226 + type: Transform + - startingCharge: 1000 + type: PowerCell + - anchored: False + type: Collidable +- uid: 3228 + type: Stunbaton + components: + - parent: 15 + pos: -14.609581,20.969378 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable + - containers: + stunbaton_cell_container: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 3229 + type: Stunbaton + components: + - parent: 15 + pos: -14.484581,20.641253 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable + - containers: + stunbaton_cell_container: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 3230 + type: Chair + components: + - parent: 15 + pos: 8.5,1.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 3231 + type: Chair + components: + - parent: 15 + pos: 9.5,1.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 3232 + type: Chair + components: + - parent: 15 + pos: 10.5,1.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 3233 + type: S + components: + - parent: 15 + pos: -9.816995,-25.23114 + type: Transform + - anchored: False + type: Collidable +- uid: 3234 + type: HatHardhatRed + components: + - parent: 15 + pos: 31.201477,-4.05181 + type: Transform + - anchored: False + type: Collidable +- uid: 3235 + type: HatHardhatWhite + components: + - parent: 15 + pos: 31.623352,-4.14556 + type: Transform + - anchored: False + type: Collidable +- uid: 3236 + type: HatHardhatYellow + components: + - parent: 15 + pos: 31.357727,-4.36431 + type: Transform + - anchored: False + type: Collidable +- uid: 3237 + type: FlashlightLantern + components: + - parent: 15 + pos: 30.545227,-4.17681 + type: Transform + - anchored: False + type: Collidable + - containers: + flashlight_cell_container: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 3238 + type: FlashlightLantern + components: + - parent: 15 + pos: 30.248352,-4.36431 + type: Transform + - anchored: False + type: Collidable + - containers: + flashlight_cell_container: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 3239 + type: RandHandTele + components: + - parent: 15 + pos: 8.379866,26.654026 + type: Transform + - anchored: False + type: Collidable +- uid: 3240 + type: DrinkHotCoffee + components: + - parent: 15 + pos: 8.661116,25.513401 + type: Transform + - caps: PourIn, PourOut, Injectable + type: Solution + - anchored: False + type: Collidable +- uid: 3241 + type: Paper + components: + - parent: 15 + pos: 8.379866,25.982151 + type: Transform + - anchored: False + type: Collidable +- uid: 3242 + type: SignAtmos + components: + - parent: 15 + pos: 31.498556,7.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 3243 + type: SignSomethingOld + components: + - parent: 15 + pos: 17.158585,-23.619913 + rot: -1.5707963267948966 rad + type: Transform +- uid: 3244 + type: SignSomethingOld2 + components: + - parent: 15 + pos: 24.996767,-0.60842 + rot: -1.5707963267948966 rad + type: Transform +- uid: 3245 + type: Basketball + components: + - parent: 15 + pos: -1.5183675,-6.4951944 + type: Transform + - anchored: False + type: Collidable +- uid: 3246 + type: WaterTankFull + components: + - parent: 15 + pos: 0.5,-11.5 + type: Transform + - anchored: False + type: Collidable +- uid: 3247 + type: WeldingFuelTank + components: + - parent: 15 + pos: -1.5,-11.5 + type: Transform + - anchored: False + type: Collidable +- uid: 3248 + type: RCD + components: + - parent: 15 + pos: 29.4025,-4.489469 + type: Transform + - anchored: False + type: Collidable +- uid: 3249 + type: RCD + components: + - parent: 15 + pos: 29.55875,-4.333219 + type: Transform + - anchored: False + type: Collidable +- uid: 3250 + type: MaskJoy + components: + - parent: 15 + pos: -9.360208,-25.487799 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable +- uid: 3251 + type: Brutepack + components: + - parent: 15 + pos: 6.839255,-3.3712535 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable +- uid: 3252 + type: solid_wall + components: + - parent: 15 + pos: -25.5,-12.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 3253 + type: solid_wall + components: + - parent: 15 + pos: -25.5,-13.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 3254 + type: solid_wall + components: + - parent: 15 + pos: -25.5,-14.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 3255 + type: solid_wall + components: + - parent: 15 + pos: -25.5,-15.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 3256 + type: solid_wall + components: + - parent: 15 + pos: -25.5,-16.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 3257 + type: solid_wall + components: + - parent: 15 + pos: -24.5,-16.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 3258 + type: solid_wall + components: + - parent: 15 + pos: -23.5,-16.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 3259 + type: solid_wall + components: + - parent: 15 + pos: -22.5,-16.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 3260 + type: LowWall + components: + - parent: 15 + pos: 26.5,14.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 3261 + type: LowWall + components: + - parent: 15 + pos: 27.5,14.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 3262 + type: LowWall + components: + - parent: 15 + pos: 28.5,14.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 3263 + type: ReinforcedWindow + components: + - parent: 15 + pos: 26.5,14.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 3264 + type: ReinforcedWindow + components: + - parent: 15 + pos: 27.5,14.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 3265 + type: ReinforcedWindow + components: + - parent: 15 + pos: 28.5,14.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 3266 + type: Table + components: + - parent: 15 + pos: -3.5,18.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 3267 + type: Table + components: + - parent: 15 + pos: -2.5,18.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 3268 + type: Table + components: + - parent: 15 + pos: -2.5,16.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 3269 + type: Table + components: + - parent: 15 + pos: -3.5,16.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 3270 + type: Bling + components: + - parent: 15 + pos: -2.564289,18.643616 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable +- uid: 3271 + type: Bling + components: + - parent: 15 + pos: -2.861164,18.612366 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable +- uid: 3272 + type: GoldStack + components: + - parent: 15 + pos: -3.064289,16.53424 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable +- uid: 3273 + type: GoldStack + components: + - parent: 15 + pos: -2.861164,16.72174 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable +- uid: 3274 + type: GoldStack + components: + - parent: 15 + pos: -2.673664,16.72174 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable +- uid: 3275 + type: GoldStack + components: + - parent: 15 + pos: -2.611164,16.549866 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable +- uid: 3276 + type: GoldStack + components: + - parent: 15 + pos: -2.798664,16.424866 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable +- uid: 3277 + type: GoldStack + components: + - parent: 15 + pos: -2.283039,16.518616 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable +- uid: 3278 + type: GoldStack + components: + - parent: 15 + pos: -2.439289,16.72174 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable +- uid: 3279 + type: GoldStack + components: + - parent: 15 + pos: -2.579914,16.362366 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable +- uid: 3280 + type: DrinkGoldenCup + components: + - parent: 15 + pos: -3.470539,16.956116 + rot: -1.5707963267948966 rad + type: Transform + - caps: PourIn, PourOut, Injectable + type: Solution + - anchored: False + type: Collidable +- uid: 3281 + type: ToolboxGoldFilled + components: + - parent: 15 + pos: -3.454914,18.643616 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable + - containers: + storagebase: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer +- uid: 3282 + type: metal_wall + components: + - parent: 15 + pos: 13.293709,-8.309891 + rot: -1.5707963267948966 rad + type: Transform +- uid: 3283 + type: PlushieCarp + components: + - parent: 15 + pos: -4.7375913,-3.3900535 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable +- uid: 3284 + type: PowerCellRecharger + components: + - parent: 15 + pos: 39.5,-1.5 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable + - containers: + PowerCellCharger-powerCellContainer: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 3285 + type: LockerCursed + components: + - parent: 15 + pos: -8.5,-25.5 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable + - IsPlaceable: False + type: PlaceableSurface + - containers: + EntityStorageComponent: + type: Robust.Server.GameObjects.Components.Container.Container + type: ContainerContainer +- uid: 3286 + type: hemostat + components: + - parent: 15 + pos: 19.655668,-21.300453 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable +- uid: 3287 + type: Bed + components: + - parent: 15 + pos: 18.5,-20.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 3288 + type: BedsheetMedical + components: + - parent: 15 + pos: 18.5,-20.5 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable +- uid: 3289 + type: drill + components: + - parent: 15 + pos: 19.515043,-22.566078 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable +- uid: 3290 + type: SignSurgery + components: + - parent: 15 + pos: 18.296293,-18.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 3291 + type: ToyMouse + components: + - parent: 15 + pos: 31.376545,-7.1625524 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable +- uid: 3292 + type: retractor + components: + - parent: 15 + pos: 19.482815,-21.853302 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable +- uid: 3293 + type: DisgustingSweptSoup + components: + - parent: 15 + pos: -14.96041,24.545767 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable +- uid: 3294 + type: DrinkBottleRum + components: + - parent: 15 + pos: -15.694785,24.608267 + rot: -1.5707963267948966 rad + type: Transform + - caps: PourIn, PourOut, Injectable + type: Solution + - anchored: False + type: Collidable +- uid: 3295 + type: scalpel + components: + - parent: 15 + pos: 19.190952,-21.29313 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable +- uid: 3296 + type: ToyPhazon + components: + - parent: 15 + pos: 9.449931,16.636608 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable +- uid: 3297 + type: FoodMint + components: + - parent: 15 + pos: -2.776661,-3.3271997 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable +- uid: 3298 + type: GlovesLatex + components: + - parent: 15 + pos: 21.618128,-4.4133806 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable +- uid: 3299 + type: GlovesLatex + components: + - parent: 15 + pos: 22.086878,-4.4133806 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable +- uid: 3300 + type: JawsOfLife + components: + - parent: 15 + pos: 39.53893,-0.77325034 + rot: -1.5707963267948966 rad + type: Transform + - useSound: /Audio/Items/jaws_pry.ogg + type: Tool + - anchored: False + type: Collidable +- uid: 3301 + type: ShoesCoder + components: + - parent: 15 + pos: 47.437466,-6.6893435 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable +- uid: 3302 + type: bone_saw + components: + - parent: 15 + pos: 19.49593,-21.552101 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable +- uid: 3303 + type: Table + components: + - parent: 15 + pos: -19.5,-9.5 + rot: -1.5707963267948966 rad + type: Transform +- uid: 3304 + type: Poweredlight + components: + - parent: 15 + pos: -18.5,-7 + rot: -1.5707963267948966 rad + type: Transform + - containers: + light_bulb: + type: Content.Server.GameObjects.ContainerSlot + type: ContainerContainer +- uid: 3305 + type: FoodBanana + components: + - parent: 15 + pos: -19.728624,-9.576498 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable +- uid: 3306 + type: FoodBanana + components: + - parent: 15 + pos: -19.603624,-9.388998 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable +- uid: 3307 + type: FoodBanana + components: + - parent: 15 + pos: -19.463,-9.482748 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable +- uid: 3308 + type: FoodBananaCreamPie + components: + - parent: 15 + pos: -18.947374,-9.467123 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable +- uid: 3309 + type: FoodBananaCreamPie + components: + - parent: 15 + pos: -18.509874,-9.279623 + rot: -1.5707963267948966 rad + type: Transform + - anchored: False + type: Collidable ... diff --git a/Resources/Prototypes/Entities/Constructible/Walls/signs.yml b/Resources/Prototypes/Entities/Constructible/Walls/signs.yml new file mode 100644 index 0000000000..81fb0c8be0 --- /dev/null +++ b/Resources/Prototypes/Entities/Constructible/Walls/signs.yml @@ -0,0 +1,1037 @@ +- type: entity + id: BaseSign + name: base sign + abstract: true + description: based on what + components: + - type: Clickable + - type: Collidable + shapes: + - !type:PhysShapeAabb + - type: Damageable + - type: Destructible + thresholdvalue: 5 + - type: Sprite + drawdepth: WallTops + sprite: Constructible/Misc/decals.rsi + - type: Icon + sprite: Constructible/Misc/decals.rsi + +# These signs would not have collision otherwise, they simply +# need collision in order for them to be destructible. Once the +# SmallImpassable etc. stuff actually gets implemented in this +# shitheap of a videogame bother swept to go back and fix these. + +- type: entity + parent: BaseSign + id: PaintingMonkey + name: monkey painting + description: monky + components: + - type: Collidable + shapes: + - !type:PhysShapeAabb + bounds: "-0.1,-0.4,0.1,0.4" + layer: + - Opaque + - Impassable + - MobImpassable + - VaultImpassable + - SmallImpassable + - type: Sprite + state: monkey_painting + - type: Icon + state: monkey_painting + +# Directional Station Guide Signs + +- type: entity + parent: BaseSign + id: SignDirectionalSec + name: sec sign + description: A direction sign, pointing out which way Security is. + components: + - type: Rotatable + - type: Collidable + shapes: + - !type:PhysShapeAabb + bounds: "-0.1,-0.4,0.1,0.4" + layer: + - Opaque + - Impassable + - MobImpassable + - VaultImpassable + - SmallImpassable + - type: Sprite + state: direction_sec + - type: Icon + state: direction_sec + +- type: entity + parent: BaseSign + id: SignDirectionalEvac + name: evac sign + description: A direction sign, pointing out which way evac is. + components: + - type: Rotatable + - type: Collidable + shapes: + - !type:PhysShapeAabb + bounds: "-0.1,-0.4,0.1,0.4" + layer: + - Opaque + - Impassable + - MobImpassable + - VaultImpassable + - SmallImpassable + - type: Sprite + state: direction_evac + - type: Icon + state: direction_evac + +- type: entity + parent: BaseSign + id: SignDirectionalBridge + name: bridge sign + description: A direction sign, pointing out which way the Bridge is. + components: + - type: Rotatable + - type: Collidable + shapes: + - !type:PhysShapeAabb + bounds: "-0.1,-0.4,0.1,0.4" + layer: + - Opaque + - Impassable + - MobImpassable + - VaultImpassable + - SmallImpassable + - type: Sprite + state: direction_bridge + - type: Icon + state: direction_bridge + +- type: entity + parent: BaseSign + id: SignDirectionalMed + name: medical sign + description: A direction sign, pointing out which way the Medical department is. + components: + - type: Rotatable + - type: Collidable + shapes: + - !type:PhysShapeAabb + bounds: "-0.1,-0.4,0.1,0.4" + layer: + - Opaque + - Impassable + - MobImpassable + - VaultImpassable + - SmallImpassable + - type: Sprite + state: direction_med + - type: Icon + state: direction_med + +- type: entity + parent: BaseSign + id: SignDirectionalEng + name: engineering sign + description: A direction sign, pointing out which way the Engineering department is. + components: + - type: Rotatable + - type: Collidable + shapes: + - !type:PhysShapeAabb + bounds: "-0.1,-0.4,0.1,0.4" + layer: + - Opaque + - Impassable + - MobImpassable + - VaultImpassable + - SmallImpassable + - type: Sprite + state: direction_eng + - type: Icon + state: direction_eng + +- type: entity + parent: BaseSign + id: SignDirectionalSci + name: science sign + description: A direction sign, pointing out which way the Science department is. + components: + - type: Rotatable + - type: Collidable + shapes: + - !type:PhysShapeAabb + bounds: "-0.1,-0.4,0.1,0.4" + layer: + - Opaque + - Impassable + - MobImpassable + - VaultImpassable + - SmallImpassable + - type: Sprite + state: direction_sci + - type: Icon + state: direction_sci + +- type: entity + parent: BaseSign + id: SignDirectionalSupply + name: supply sign + description: A direction sign, pointing to some supplies. + components: + - type: Rotatable + - type: Collidable + shapes: + - !type:PhysShapeAabb + bounds: "-0.1,-0.4,0.1,0.4" + layer: + - Opaque + - Impassable + - MobImpassable + - VaultImpassable + - SmallImpassable + - type: Sprite + state: direction_supply + - type: Icon + state: direction_supply + +# Regular Signs + +- type: entity + parent: BaseSign + id: SignArmory + name: ARMORY + components: + - type: Collidable + shapes: + - !type:PhysShapeAabb + bounds: "-0.4,-0.3,0.4,0.3" + layer: + - Opaque + - Impassable + - MobImpassable + - VaultImpassable + - SmallImpassable + - type: Sprite + state: armory + - type: Icon + state: armory + +- type: entity + parent: BaseSign + id: SignToolStorage + name: TOOL STORAGE + components: + - type: Collidable + shapes: + - !type:PhysShapeAabb + bounds: "-0.4,-0.3,0.4,0.3" + layer: + - Opaque + - Impassable + - MobImpassable + - VaultImpassable + - SmallImpassable + - type: Sprite + state: ass + - type: Icon + state: ass + +- type: entity + parent: BaseSign + id: SignAnomaly + name: ANOMALY LAB + components: + - type: Collidable + shapes: + - !type:PhysShapeAabb + bounds: "-0.4,-0.3,0.4,0.3" + layer: + - Opaque + - Impassable + - MobImpassable + - VaultImpassable + - SmallImpassable + - type: Sprite + state: anomaly + - type: Icon + state: anomaly + +- type: entity + parent: BaseSign + id: SignAtmos + name: ATMOS + components: + - type: Collidable + shapes: + - !type:PhysShapeAabb + bounds: "-0.4,-0.3,0.4,0.3" + layer: + - Opaque + - Impassable + - MobImpassable + - VaultImpassable + - SmallImpassable + - type: Sprite + state: atmos + - type: Icon + state: atmos + +- type: entity + parent: BaseSign + id: SignBar + name: BAR + components: + - type: Collidable + shapes: + - !type:PhysShapeAabb + bounds: "-0.4,-0.3,0.4,0.3" + layer: + - Opaque + - Impassable + - MobImpassable + - VaultImpassable + - SmallImpassable + - type: Sprite + state: bar + - type: Icon + state: bar + +- type: entity + parent: BaseSign + id: SignLibrary + name: LIBRARY + components: + - type: Collidable + shapes: + - !type:PhysShapeAabb + bounds: "-0.4,-0.3,0.4,0.3" + layer: + - Opaque + - Impassable + - MobImpassable + - VaultImpassable + - SmallImpassable + - type: Sprite + state: biblio + - type: Icon + state: biblio + +- type: entity + parent: BaseSign + id: SignChapel + name: CHAPEL + components: + - type: Collidable + shapes: + - !type:PhysShapeAabb + bounds: "-0.4,-0.3,0.4,0.3" + layer: + - Opaque + - Impassable + - MobImpassable + - VaultImpassable + - SmallImpassable + - type: Sprite + state: chapel + - type: Icon + state: chapel + +- type: entity + parent: BaseSign + id: SignHead + name: HEAD + components: + - type: Collidable + shapes: + - !type:PhysShapeAabb + bounds: "-0.4,-0.3,0.4,0.3" + layer: + - Opaque + - Impassable + - MobImpassable + - VaultImpassable + - SmallImpassable + - type: Sprite + state: commander + - type: Icon + state: commander + +- type: entity + parent: BaseSign + id: SignConference + name: CONFERENCE ROOM + components: + - type: Collidable + shapes: + - !type:PhysShapeAabb + bounds: "-0.4,-0.3,0.4,0.3" + layer: + - Opaque + - Impassable + - MobImpassable + - VaultImpassable + - SmallImpassable + - type: Sprite + state: conference_room + - type: Icon + state: conference_room + +- type: entity + parent: BaseSign + id: SignDrones + name: DRONES + components: + - type: Collidable + shapes: + - !type:PhysShapeAabb + bounds: "-0.4,-0.3,0.4,0.3" + layer: + - Opaque + - Impassable + - MobImpassable + - VaultImpassable + - SmallImpassable + - type: Sprite + state: drones + - type: Icon + state: drones + +- type: entity + parent: BaseSign + id: SignEngine + name: ENGINE + components: + - type: Collidable + shapes: + - !type:PhysShapeAabb + bounds: "-0.4,-0.3,0.4,0.3" + layer: + - Opaque + - Impassable + - MobImpassable + - VaultImpassable + - SmallImpassable + - type: Sprite + state: engine + - type: Icon + state: engine + +- type: entity + parent: BaseSign + id: SignCloning + name: CLONING + components: + - type: Collidable + shapes: + - !type:PhysShapeAabb + bounds: "-0.4,-0.3,0.4,0.3" + layer: + - Opaque + - Impassable + - MobImpassable + - VaultImpassable + - SmallImpassable + - type: Sprite + state: cloning + - type: Icon + state: cloning + +- type: entity + parent: BaseSign + id: SignInterrogation + name: INTERROGATION + components: + - type: Collidable + shapes: + - !type:PhysShapeAabb + bounds: "-0.4,-0.3,0.4,0.3" + layer: + - Opaque + - Impassable + - MobImpassable + - VaultImpassable + - SmallImpassable + - type: Sprite + state: interrogation + - type: Icon + state: interrogation + +- type: entity + parent: BaseSign + id: SignSurgery + name: SURGERY + components: + - type: Collidable + shapes: + - !type:PhysShapeAabb + bounds: "-0.4,-0.3,0.4,0.3" + layer: + - Opaque + - Impassable + - MobImpassable + - VaultImpassable + - SmallImpassable + - type: Sprite + state: surgery + - type: Icon + state: surgery + +- type: entity + parent: BaseSign + id: SignTelecoms + name: TELECOMS + components: + - type: Collidable + shapes: + - !type:PhysShapeAabb + bounds: "-0.4,-0.3,0.4,0.3" + layer: + - Opaque + - Impassable + - MobImpassable + - VaultImpassable + - SmallImpassable + - type: Sprite + state: telecoms + - type: Icon + state: telecoms + +- type: entity + parent: BaseSign + id: SignCargo + name: CARGO + components: + - type: Collidable + shapes: + - !type:PhysShapeAabb + bounds: "-0.4,-0.3,0.4,0.3" + layer: + - Opaque + - Impassable + - MobImpassable + - VaultImpassable + - SmallImpassable + - type: Sprite + state: cargo + - type: Icon + state: cargo + +- type: entity + parent: BaseSign + id: SignCargoDock + name: CARGO DOCK + components: + - type: Collidable + shapes: + - !type:PhysShapeAabb + bounds: "-0.4,-0.3,0.4,0.3" + layer: + - Opaque + - Impassable + - MobImpassable + - VaultImpassable + - SmallImpassable + - type: Sprite + state: cargo_dock + - type: Icon + state: cargo_dock + +- type: entity + parent: BaseSign + id: SignChem + name: CHEMISTRY + components: + - type: Collidable + shapes: + - !type:PhysShapeAabb + bounds: "-0.4,-0.3,0.4,0.3" + layer: + - Opaque + - Impassable + - MobImpassable + - VaultImpassable + - SmallImpassable + - type: Sprite + state: chem + - type: Icon + state: chem + +- type: entity + parent: BaseSign + id: SignShipDock + name: DOCKING + components: + - type: Collidable + shapes: + - !type:PhysShapeAabb + bounds: "-0.4,-0.3,0.4,0.3" + layer: + - Opaque + - Impassable + - MobImpassable + - VaultImpassable + - SmallImpassable + - type: Sprite + state: dock + - type: Icon + state: dock + +- type: entity + parent: BaseSign + id: SignEngineering + name: ENGINEERING + components: + - type: Collidable + shapes: + - !type:PhysShapeAabb + bounds: "-0.4,-0.3,0.4,0.3" + layer: + - Opaque + - Impassable + - MobImpassable + - VaultImpassable + - SmallImpassable + - type: Sprite + state: eng + - type: Icon + state: eng + +- type: entity + parent: BaseSign + id: SignEVA + name: EVA + components: + - type: Collidable + shapes: + - !type:PhysShapeAabb + bounds: "-0.4,-0.3,0.4,0.3" + layer: + - Opaque + - Impassable + - MobImpassable + - VaultImpassable + - SmallImpassable + - type: Sprite + state: eva + - type: Icon + state: eva + +- type: entity + parent: BaseSign + id: SignGravity + name: GRAVITY + components: + - type: Collidable + shapes: + - !type:PhysShapeAabb + bounds: "-0.4,-0.3,0.4,0.3" + layer: + - Opaque + - Impassable + - MobImpassable + - VaultImpassable + - SmallImpassable + - type: Sprite + state: gravi + - type: Icon + state: gravi + +- type: entity + parent: BaseSign + id: SignMedical + name: MEDBAY + components: + - type: Collidable + shapes: + - !type:PhysShapeAabb + bounds: "-0.4,-0.3,0.4,0.3" + layer: + - Opaque + - Impassable + - MobImpassable + - VaultImpassable + - SmallImpassable + - type: Sprite + state: medbay + - type: Icon + state: medbay + +- type: entity + parent: BaseSign + id: SignMorgue + name: MORGUE + components: + - type: Collidable + shapes: + - !type:PhysShapeAabb + bounds: "-0.4,-0.3,0.4,0.3" + layer: + - Opaque + - Impassable + - MobImpassable + - VaultImpassable + - SmallImpassable + - type: Sprite + state: morgue + - type: Icon + state: morgue + +- type: entity + parent: BaseSign + id: SignPrison + name: PRISON + description: + components: + - type: Collidable + shapes: + - !type:PhysShapeAabb + bounds: "-0.4,-0.3,0.4,0.3" + layer: + - Opaque + - Impassable + - MobImpassable + - VaultImpassable + - SmallImpassable + - type: Sprite + state: prison + - type: Icon + state: prison + +- type: entity + parent: BaseSign + id: SignRND + name: RND + components: + - type: Collidable + shapes: + - !type:PhysShapeAabb + bounds: "-0.4,-0.3,0.4,0.3" + layer: + - Opaque + - Impassable + - MobImpassable + - VaultImpassable + - SmallImpassable + - type: Sprite + state: rnd + - type: Icon + state: rnd + +- type: entity + parent: BaseSign + id: SignScience + name: SCIENCE + components: + - type: Collidable + shapes: + - !type:PhysShapeAabb + bounds: "-0.4,-0.3,0.4,0.3" + layer: + - Opaque + - Impassable + - MobImpassable + - VaultImpassable + - SmallImpassable + - type: Sprite + state: sci + - type: Icon + state: sci + +- type: entity + parent: BaseSign + id: SignToxins + name: TOXINS + components: + - type: Collidable + shapes: + - !type:PhysShapeAabb + bounds: "-0.4,-0.3,0.4,0.3" + layer: + - Opaque + - Impassable + - MobImpassable + - VaultImpassable + - SmallImpassable + - type: Sprite + state: toxins + - type: Icon + state: toxins + +- type: entity + parent: BaseSign + id: SignBridge + name: BRIDGE + components: + - type: Collidable + shapes: + - !type:PhysShapeAabb + bounds: "-0.4,-0.3,0.4,0.3" + layer: + - Opaque + - Impassable + - MobImpassable + - VaultImpassable + - SmallImpassable + - type: Sprite + state: bridge + - type: Icon + state: bridge + +# Atmos Warnings + +- type: entity + parent: BaseSign + id: WarningAir + name: Air warning sign + description: WARNING! Air flow tube. Ensure the flow is disengaged before working. + components: + - type: Collidable + shapes: + - !type:PhysShapeAabb + bounds: "-0.2,-0.3,0.2,0.3" + layer: + - Opaque + - Impassable + - MobImpassable + - VaultImpassable + - SmallImpassable + - type: Sprite + state: atmos_air + - type: Icon + state: atmos_air + +- type: entity + parent: BaseSign + id: WarningCO2 + name: CO2 warning sign + description: WARNING! CO2 flow tube. Ensure the flow is disengaged before working. + components: + - type: Collidable + shapes: + - !type:PhysShapeAabb + bounds: "-0.2,-0.3,0.2,0.3" + layer: + - Opaque + - Impassable + - MobImpassable + - VaultImpassable + - SmallImpassable + - type: Sprite + state: atmos_co2 + - type: Icon + state: atmos_co2 + +- type: entity + parent: BaseSign + id: WarningN2 + name: N2 warning sign + description: WARNING! N2 flow tube. Ensure the flow is disengaged before working. + components: + - type: Collidable + shapes: + - !type:PhysShapeAabb + bounds: "-0.2,-0.3,0.2,0.3" + layer: + - Opaque + - Impassable + - MobImpassable + - VaultImpassable + - SmallImpassable + - type: Sprite + state: atmos_n2 + - type: Icon + state: atmos_n2 + +- type: entity + parent: BaseSign + id: WarningN2O + name: N2O warning sign + description: WARNING! N2O flow tube. Ensure the flow is disengaged before working. + components: + - type: Collidable + shapes: + - !type:PhysShapeAabb + bounds: "-0.2,-0.3,0.2,0.3" + layer: + - Opaque + - Impassable + - MobImpassable + - VaultImpassable + - SmallImpassable + - type: Sprite + state: atmos_n2o + - type: Icon + state: atmos_n2o + +- type: entity + parent: BaseSign + id: WarningO2 + name: O2 warning sign + description: WARNING! O2 flow tube. Ensure the flow is disengaged before working. + components: + - type: Collidable + shapes: + - !type:PhysShapeAabb + bounds: "-0.2,-0.3,0.2,0.3" + layer: + - Opaque + - Impassable + - MobImpassable + - VaultImpassable + - SmallImpassable + - type: Sprite + state: atmos_o2 + - type: Icon + state: atmos_o2 + +- type: entity + parent: BaseSign + id: WarningPhoron + name: phoron waste sign + description: WARNING! Plasma flow tube. Ensure the flow is disengaged before working. + components: + - type: Collidable + shapes: + - !type:PhysShapeAabb + bounds: "-0.2,-0.3,0.2,0.3" + layer: + - Opaque + - Impassable + - MobImpassable + - VaultImpassable + - SmallImpassable + - type: Sprite + state: atmos_phoron + - type: Icon + state: atmos_phoron + +- type: entity + parent: BaseSign + id: WarningWaste + name: Atmos waste sign + description: WARNING! Waste flow tube. Ensure the flow is disengaged before working. + components: + - type: Collidable + shapes: + - !type:PhysShapeAabb + bounds: "-0.2,-0.3,0.2,0.3" + layer: + - Opaque + - Impassable + - MobImpassable + - VaultImpassable + - SmallImpassable + - type: Sprite + state: atmos_waste + - type: Icon + state: atmos_waste + +- type: entity + parent: BaseSign + id: PlaqueZum + name: zumos plaque + description: This plaque commemorates the rise of the Atmos ZUM division. May they carry the torch that the Atmos ZAS, LINDA and FEA divisions left behind. + components: + - type: Collidable + shapes: + - !type:PhysShapeAabb + bounds: "-0.3,-0.3,0.3,0.3" + layer: + - Opaque + - Impassable + - MobImpassable + - VaultImpassable + - SmallImpassable + - type: Sprite + state: zumosplaque + - type: Icon + state: zumosplaque + +- type: entity + parent: BaseSign + id: PlaqueAtmos + name: atmos plaque + description: This plaque commemorates the fall of the Atmos FEA division. For all the charred, dizzy, and brittle men who have died in its hands. + components: + - type: Collidable + shapes: + - !type:PhysShapeAabb + bounds: "-0.3,-0.3,0.3,0.3" + layer: + - Opaque + - Impassable + - MobImpassable + - VaultImpassable + - SmallImpassable + - type: Sprite + state: atmosplaque + - type: Icon + state: atmosplaque + +- type: entity + parent: BaseSign + id: SignSmoking + name: No Smoking + description: A warning sign which reads 'NO SMOKING' + components: + - type: Collidable + shapes: + - !type:PhysShapeAabb + bounds: "-0.4,-0.3,0.4,0.3" + layer: + - Opaque + - Impassable + - MobImpassable + - VaultImpassable + - SmallImpassable + - type: Sprite + state: nosmoking2 + - type: Icon + state: nosmoking2 + +- type: entity + parent: BaseSign + id: SignSomethingOld + name: Old Sign + description: Technical information of some sort, shame its too worn-out to read. + components: + - type: Collidable + shapes: + - !type:PhysShapeAabb + bounds: "-0.4,-0.3,0.4,0.3" + layer: + - Opaque + - Impassable + - MobImpassable + - VaultImpassable + - SmallImpassable + - type: Sprite + state: something-old1 + - type: Icon + state: something-old1 + +- type: entity + parent: BaseSign + id: SignSomethingOld2 + name: Old Sign + description: Looks like a planet crashing by some station above it. Its kinda scary. + components: + - type: Collidable + shapes: + - !type:PhysShapeAabb + bounds: "-0.4,-0.3,0.4,0.3" + layer: + - Opaque + - Impassable + - MobImpassable + - VaultImpassable + - SmallImpassable + - type: Sprite + state: something-old2 + - type: Icon + state: something-old2 diff --git a/Resources/Textures/Constructible/Misc/decals.rsi/ai.png b/Resources/Textures/Constructible/Misc/decals.rsi/ai.png new file mode 100644 index 0000000000000000000000000000000000000000..6cee540a6b2b727d219e49585e6395cebeaf0f46 GIT binary patch literal 400 zcmV;B0dM|^P)6vn?+s3+*ijKpB+p_~B;Eq-anyK=CnAG zzuZ3Jx_P%0~Q!~SqAjOQs>%%;D_Ojy?d zk*MAIIgw0RZR;F?I&LQdb#2FufKwOfO0R(11=cB8284Zq}6n(9_WbaamAr}A81Ucm&^BSQTphaze9k`_H5vyO%hmDu`+y?LS>mqmVLux+ zns{m>DY6_3h1LvIv6)H)B1E|@)vEPp z+q`t%0TSneWuV-aD6;%QoLj2a2BKJ8i8~WVjosXUo&gf4KBp4cN1%%rSq|6tI8^)) zR>kQUZf<}wP!&&Qa-R(7CV=1cbHxG1he$Wk2aF7Kxomnd(B(Sr#Q*^OtanIdauK>f zgsQEU|5si`EU7v0Vkzft$qxpW@rEa002ovPDHLkV1hwhuDSpK literal 0 HcmV?d00001 diff --git a/Resources/Textures/Constructible/Misc/decals.rsi/armory.png b/Resources/Textures/Constructible/Misc/decals.rsi/armory.png new file mode 100644 index 0000000000000000000000000000000000000000..671e57aa5cf295495ae5f9c8f377b847a3f772cb GIT binary patch literal 391 zcmV;20eJq2P)de4*D)KD!nHhJFPd^J#59uPyypEEOn&rB@WyC}2v&VWq5nwMvlVXajMjRFu&XJsSUuK^tQ zTX^r`oC7n%dkOUHwZo*V0n=n;><1DD|`&R)- zIgT#^AUf{1u-1ZzLg`6gT5V;hJWvnL%%N|L(M%NwPz^*x0Z8DgZC|ODK)jH;`KSPh lD7p&j7nmkp{aQX~&<7Z}mxGmyr)vNJ002ovPDHLkV1fefq~ZVo literal 0 HcmV?d00001 diff --git a/Resources/Textures/Constructible/Misc/decals.rsi/ass.png b/Resources/Textures/Constructible/Misc/decals.rsi/ass.png new file mode 100644 index 0000000000000000000000000000000000000000..0dfa8a04f5cd9b305f3aa331f0894bd8c2e3a9ec GIT binary patch literal 385 zcmV-{0e=38P)ZLQywCC&g3x^Z(dyJL&RXO&6K=BhHUAi z;-smhlS4zO|HYPc+0yGAC1*?h6@6X5mvNgG4EIGZo_AL9+`rgaJ~I776X zXd!M*PU@z`+vAH9fGjdZ_Y%pUA5cX`CRhN(jzSH|@bU^n5JW zE7BXndJm|e3Zffaja6`pNSiS9{BMX;a0-ed@-ch}?ttzUeCnTYMH>MGXU?ZUa0cx3 fHWz=E4;u6Z6@GynN^>Xu00000NkvXXu0mjf2aBj{ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Constructible/Misc/decals.rsi/atmos.png b/Resources/Textures/Constructible/Misc/decals.rsi/atmos.png new file mode 100644 index 0000000000000000000000000000000000000000..9441b32827891b83ec11770bb1a94bba35f4739c GIT binary patch literal 486 zcmV@P)9C6vn?)y+9^bk4!MJWh)1$6eUtm(6v%`58fkn%?T=jxB=PNm|*hgl?mkp=>T?t zrr<}ZIyB!BjIH;6`27oT(|^}$>cHXne))-m*XO5EAETRx* z7zE-d0m=kGLb@?)044?U_E~>%7bNr?tldqs7QQvaoh^WNI&_{3AED=5-CGm@XktFM zBEFM#2y}u4oFi=$QRhP(C7%b&1iSqfYH0wVUje|^D>reM!rG=aKpZt+)^)1Gp>rT@ ztE840;M&H;Z(&DnimxYpf}+K9+ysL*8n89?xe-Wu(@MFB$3G1HH#&~tE_IP>R! c%Wt~r17h>B3t333-2eap07*qoM6N<$f|GF6r2qf` literal 0 HcmV?d00001 diff --git a/Resources/Textures/Constructible/Misc/decals.rsi/atmos_air.png b/Resources/Textures/Constructible/Misc/decals.rsi/atmos_air.png new file mode 100644 index 0000000000000000000000000000000000000000..51cd12d4b76fe7a10b9319d3013c32dc8630c23c GIT binary patch literal 663 zcmV;I0%-k-P)A3l8e_|G`h z9*D(a`v3`fh`he`Pel{*5P;|UVzKDh)A1t9^8Va|5v21a3?qajePd^*PB7Tl)5eW8 zh7n?G^EaX6d4B%72|zUZ365SvnG)!_-rV=Fy}*qtgKU4^<;&VIVMyr~2b!wWe`Jc< z-V3Y4mKqHe%xAkwJt#0fz6|tPE|(qu-|dA>OqHt4-9OWu9=j1Wwa`Z500ID13WzL} zS0ECG*N;roe%)w!Arf{kTUfZw)yuP<^-Av(L@({SQm!$4GOcs!L`T9MvA&hy-06JR xZ;bUj+?)O27{iXI;oqXy)3g0F^x?yYk3Y~W>GmlV7x4f9002ovPDHLkV1gc}I+_3g literal 0 HcmV?d00001 diff --git a/Resources/Textures/Constructible/Misc/decals.rsi/atmos_co2.png b/Resources/Textures/Constructible/Misc/decals.rsi/atmos_co2.png new file mode 100644 index 0000000000000000000000000000000000000000..18b09466746e3b6b3363226f2088eb0a3498903e GIT binary patch literal 673 zcmV;S0$%-zP)SD84#Iy&kHMZ5#B0^(K>hLbfUGCCG7nl3P!F%s}@B9AW|Nf5$0RjXF@Skz0 zc_AK;?*Sx5FVp7gKP63yUI5?o3kwUbny!fuVsGkEKg#($mK8=(zO%huB^2stt8nd% zWrf*T|4sP#G(Ugc1Rxgs3`eh_jvAPzS+9H8nc&8i9yY)1@O3r9VE;4JlmNiUyahlV z6BrrOGp<273zVR;3qX66OD_MB*+T=#>kwVC-%dU}2^IJkm3CU|l$f|2cl?u0Cu z?Lr+B(4BCNonK)Y(i4Js^cVoIjS&jV$oN4709(S7wrp$6%|(0T_pNHC6Ua>cqgs(7thx35{$g(9x1{D?~3y ziJdBd^wqHX%8pl2QF>Mu&gixvDy{%@4BH#!voD%(uI=UNIMD?iy;&xfstij zALyD%=aEq=yD#ky8*0>4kYlGxZ747_v;=h64i~Qf@AbkuQl&Ce56_?|TY%e$x|VAq zaR31TN;!-S6qX^{2X7ur(|#*9yb$g49-E!L&DG13zWMSWlEg0UctW0Q`1G#HsS_;; zx5U~;l5?l0_uXTy-QmIHN7prM`5OK$+I>BnU&8Ah z0ey*%CE>4ip#}$payjR0R-@@9*w~4J?%^%ub!EO;2MZYHGHLL>mGCl(Xn* z$gM&&V*d?+Z^e2qL?iC7g@xN(xisUMZ~0@A*oAGE%Qc42?i!pp=1bTYh0P>qPR_O5 xV;1i4aORU^41I6IzeT6FXY*|sAV7cse*iH@=;)O14)g#3002ovPDHLkV1m!VG}r(D literal 0 HcmV?d00001 diff --git a/Resources/Textures/Constructible/Misc/decals.rsi/atmos_n2o.png b/Resources/Textures/Constructible/Misc/decals.rsi/atmos_n2o.png new file mode 100644 index 0000000000000000000000000000000000000000..9fd3f5d84c4b73bed1268d5b21a6741218b02ea5 GIT binary patch literal 672 zcmV;R0$=@!P)@(#)3W@zasL8=|q=@5r5f^<{2(8C77MU=XA z334}dsEh4l5z-vA#@a?DMTEvQiNjr!yWFLTE-v?nK;HL#?|c9MKi|s(A3l8e_|NER z4aDQ|IzUnkFt2a?Q`4jv0Px(uyu9o<)3Fdj)aM>uByx5I!w30K{US;qX=D2@PG>8|U`f8(hB}rub!tuN#9rNUs6#_DK(v-yu&4 zw6xx+ZCwLIP6K7A?t=DVoP{NUs=OdNWX8SVkhZW?Bpm+9$jCYXPwx+M<6a$t3A9W< z@|1vJ!aUrzwtsSYn4A&BqelREqm7fxW9B;%04xiSTecONic=M|Oh2X4p0^Yrx0+>g zMgZ{m?IU~reX1gO`lKA0SET<|+QlF{bBGd`P=cNPlt|8Piy+EKX<93LiGcC5e z0Onkc$*-+^4LMb9KZFgGolR6lcdWgjrM(F+EEO4(&7K6Wx$>R_-mlz3%d9(GP!-)( zx3Ahn!is^aGzF-NZmX+xCSVvLhGWl>Qv&c--E^eVh_zlx2g;U^ZXDR$l!!zUXc-Qi z169%KJv2de_m!ov>Bhbb=6AbGT{tj0x&{Q0Qx!lset-8YY+<@oVQ%_VkUN$kRoE9JU|&+h7+IM$YM zTNJjFoH;pvV2x3@!^7E6j%(QVHT+w2`+By%hCY1w@bL%c-}0Rki^RGB0000`WELAt41>0yK5B1+t{ z1i2eJ)Wv482x$*mV{NM?MTEw*iNjs~T<c*T3-_e9xx)12}WbB2|1ykZy6~OGP zN%@WCuOcT7yqmCrvOS5a=(e>Rv{`q;*~M)pWiuy(*ByRW0w40X(b8)+6;#DJ0rjd) z#4H=AO0xh}(OdRaI}-|oxwu{R(Xsd8L zM$_DEtZ(B!p5oWAO}?&<@;Fff;QjLfsDH3U zzMP%tUf={=b!O&VdTgBt~Nhq`ez>7zt+Aor;vxXEZ%Q3|EG|+kWb6^pN&Emn zNggH?S~mDxt|5~MYm8lV?d!M9CQB;Cg8f2*KZ4+oAWK~p02Y^O$dZcSj{v(i3Dk{A zWJxuw&7dUAB~E9n+z#tG8NOkUz+(O`N^-@pZ?dHJeW!QTMxexfu(* zB0MDm=3RFcX>@E#qMu*~^;RQx6sS~Oc)bynB$g+)P2$jzNp`m0wmR&p(N;l!->Z@h z1;)oqz#!qN1|S;tzyB<(qpQ?l{>hon?b&-BWhv7`;s62w)H5gvD3(F+wf=^{w@UXc z2)_QXg@t=uyE12*FTWHeaA~v8)i(=XPOF?cVM*8$Ya3C{olfohjkb25nYmAfSztL0 k{}y(qXYVw0;J|@{KX!ZImj^~5YXATM07*qoM6N<$f_X14iU0rr literal 0 HcmV?d00001 diff --git a/Resources/Textures/Constructible/Misc/decals.rsi/atmos_waste.png b/Resources/Textures/Constructible/Misc/decals.rsi/atmos_waste.png new file mode 100644 index 0000000000000000000000000000000000000000..6649918af0194d963298d7e62e5829a53a26d5d9 GIT binary patch literal 656 zcmV;B0&o3^P)@5EsYEYU}@$G%k(8@yw z-4RX#RjBWR`eBBJB@sn_K{#Z@ov@U)uv8`({K@3x8UTe)H@SYl3BH)Iz!w|%DXu~? zB@zuE0^p50LvfW(j(!3F)54>sZ6(`=N@dU0f#PzGWJ(0!$;*{?Jed+HF6V|5V2Id8 z&Fn`?)GXfse*c)$7FQno!M*0wb=9-3XsGEbevzjJ}$dUYqj`q(t4l3ENby zNfcSLjGa)^&Vm<~%1lc}PJCBw^Ns@E7jB_u)+{b4vi%0Msy2w3F;L`A0g9}3t!oSx zpz8r9BF~W$BH&zg$B|k)*7u55%|eE8U}M9NAjD8J^z8#h))+l7OMUm1Sz*VGmJ7!3 zZkL8|U}|aw7(q(Z0MYXQ+k0UX!=)PYk4_*6+kmwZ6*<=4k8}zHM>wHkU8XIp!;Tj1xJ(W1F&F!)Nz2jva9o>`G}X&Z*Hk*YIx{_Vw(24Lv+OJpKT0f$OoX(fft~0000lWcb8{W#}2&w0-K z4(!>U{m-U&4^MW*98Cj5QK}cIJ3Fa8?fG%aBPAPb95yYOyq8e`bZ=5u6-=N}S5Q%0 zr~c*uR(D+4^6Zc46*1z4?kz zHRek;WD8(fGXBB)otUzTxR-sUYpZ6BrL!oFA zHbR_z;aO&9{~|q~;qBKKP!uVT8Yqz-3|>OAe5_x_+M+_gim(6>X@JN!nf`Efk^`-g ziuXi32Ee1;u$uE@ZOZ`owO!wUqFX!10o#Gr2!z~Sc0dE^`3#A8jQaXIIyz$9zn@`a zBTsrhQ(jZ6n<@a5woFDFYG-P@;xaAKer$gW$>adXh92kVAFt36?_zUvljmN1iK*+q zGCe&5EY$Q>fl2c+bu(LBkzZyRme*imNm#j?5wVtRuwB&C(=+6AS(3*G`Tn~rB##f0 z&t=`2`*vmASbzi9|QqT%HrB zP6BY^)Jd|rJc&d%b93p6^}$M1F`%lThrlo(5vxWFQkJ3#R!M{iaP7tv!-L28@{6y^ z>y8c_=Gu)ZdJe{ApH=OvN&|Iasjsd|w$VmdU6)|C4Q)-*4UQwhqx)oU-=Q81BgD~x z!=%%HlSp)97$N!&^-wH|{B_+w&bMa(e^Gn01Z{3~Th8tMSc|ODR4_vD&MUvv;AyJj ztt~37?ZALU%@<*I9-bM7dy5iO*ZmVQ-Uk0Zlu|WEe4xA8G4>q5M000NuR>(Yn z)SrU*V9dYu8p5FI!a%e^T$C)>Fsb}hs9~wQaQ!A6>Gfk(0dO3!-9x4S5y`Gl^xLjv zgJa5l5WJd$`>h%W4agz()R44t-gXGw#y$Ysffdu?qYpc&R~15mepiuOaVHBp4Vt3( zbCv_^B?qGxfV}0PYjP9j>`HIDeG_^hx0->1=->BeIPzV%XM471p8W?89Gq;OI)vQ- O0000n7dE*9lrr)-Mb#f7OXeBvrmHe)tfbk_2qiAJ0G7vfD4IA&M1NSw6H=v zjRoOCLY$-at5fgQrCg0?O}hLA~Yd}a~M6MzA_Rr zO3=x@0HzWeKplbV|C<8jO{IIj?K>!v6b*p_sIyWV6c-ZR0RSHV0iVKi2JkuKNdSE8 zcoKkXL5n2Srer?5!lH^$IpVMrFm8wfP}Um-p&qw=hq}6<%*fQz96MU^uK*Y&=q_NC i0G#Y={{31$Yt|Hz|%z&f;@OXD3IIZY~Z!gn?vs(syvvsipNNY0?G< zbEd$(-1Cw2Bn7z8mf~Cun|C#rC^jG3PPN(m$!NpgxDSrCL_@`>UJOx-~o(dm@5jx z-vDqSt#8Iw02n1-Yc}_Q)e)$+Uj^70U_V_V$x{6hjAAzcIYgVP1yJV!athGoIc^1@ zJZwIm6kmG2W|V*nS*g{9Ho6HJC57QPbEhfbLKcSQHGm3?6M)K=mSgrBIfDq+0$`L_ lr+`rc+|@ll|1J0OdIC4#Y5e6@`y2oO002ovPDHLkV1oF=iU$Ay literal 0 HcmV?d00001 diff --git a/Resources/Textures/Constructible/Misc/decals.rsi/bio.png b/Resources/Textures/Constructible/Misc/decals.rsi/bio.png new file mode 100644 index 0000000000000000000000000000000000000000..5bf9483bc75594b10fab4d49e9bb85ea26ba9e40 GIT binary patch literal 681 zcmV;a0#^NrP)JpLR*^DQWt4_lj1K}y{a^pR`c?m@fGhrYC^F-Ht(?3E$&dMqkVj~^ zua%QxNx`RL*5!4%0|0zgKXAX(__Iy0-6TR0+(APA`Aat7dLEVWn1pA4CW(jmgZr2_UOiTgFLWwPgsm;$i^+ zGAmopW9E_h%8>gEFu?;GraNH9M_v2u^j{=EZ5c3KVBtB;xakgZZP77KZozsUXM(FO zV}Ifg(1+8E-E;@J&Vf__Aur$FA+$6s#~!tXmd1Twjy;5yhVt!QE)hZjuge`JpL81V zg9r=HVMO>rM7tp&Uw97uAi|{6pdv`CK1%=qh8)-*z=h|~UXT_NS{fFfLl0tF#6=l+ zczUMfysk$2|M5EkX-<<)0}oHn=L_HkOqUwz{iHnu`wWe`cJ4L|NXqc#*H57c(gV_! zAS36+A`t$L)1=G<1z62uJccu7ysy{syF*rQcp zx&y3ctS>2J8Kj+%biGm6W<;qigO*$#U%-Y4LIK5+g1%md=?*gKPS-mCwBb+@kDn(`+LN5cclporo|Er8 z{|Eou8=AyNH*RqG#tmvDMhv4OC~Yiqe> znkYNls_bm5OcPza$e$ACUv-7>cCB_vO z6980F5+8wwy`&^wfHrI(ATj=(3utKITwEN=$S~FZ*wary`(uwXGE6xf=*}G~-zi*T z_Wb#wD_4FbsUJM-kwAA*S~v&t6h57(ZT27R-AflBuh$WQ zl$9kaKi{UBi!Rk%bSXdIrn0ic$hz0-5THGK=$82KjRmx}vTxWhl$sh9$+GUMOVg%B z_bdJMoM_cubw#R^ni?gy8#Omm`YJ}$E3(fjDPc}yBdjlqCoawaptQ7$S+imQ@cV_| zF97oLVkj-`0w6BVV0}?M4<5kg&E!c;8Hi&H05`5*r*^^w#*Y~@go?At7*BVu`>CC# zrXbzj!WI*n?CcT_yFrpOigjz_!ZDbd-OQCMJ=D}tKYBFd41?gSs`0FVuV>FjhJntW zNq(->m6gd#OpMayORmV=vib#DW}rXO!@AI{uQ@x zrO0kKl#zkDy4dm}@3})LF=E#)yjQP6;c5pSj|G7J2fEm{btqX`R)Rrcvq5c*i>j(_ z&Y$n0w#J3c27!Rc%CfR;>rnO|2pvd|$3o$12iLB__U$Z}NFOkJpO12<6Ad43QQM=w z=2BSbh-7r~52uzbv&-M%k;iS3$8C|n!=q(O?fU(gGg7g_!oI%I_Qo4uSq^MpkUWBbLJ@kI+26;G(FQp501ArlsbnqZ|^YU;k{yvs1TV8)t-o{q0{EHpG_}RCQ&N*}V*y!ls=W*j$ z($E0E?oJ@dIbe5wC)U~$yYluCS96Cuo4aH~wJyp+np;dV5)L_%KDCojiN; u^n&mg$9)TWv%T^01ZT`(`9ORBJN6Iq7FRcx%SiJ80000ZrE5Ji8YC?{}9jpPDp5NEJtU%-fh!c`8C0&xP1!Uu3gL4n``Sjri!jI>3h)G2*} zG)`eJ!FB?>3s#DF8pQ5s=I!kK0pMo;-R`;^R_lD1gL6`-KBs2o>qYRU=*Xna`6uFULnRA~IdH{ZuVYA)+y1&`(;76GjK<5=S zjmSY-Rsd$l=i!Qc7Ff&=YedfV0OEkK1dx^$iX_A`XSlY7sW*ZjWgv182c!j{-2==5 zM9xX6WpWd>C|97_Y_4s=wJoG&RRg)U1!htEsa8T6pn1C2_m7KxxmNor0w`ZWk%aX; zkf$Ybu$a%lEa2MKh2Nk6(qy+clN3paw5+h0&ve7-sbI6+)l!p9$SjbSrxKldBjuP{ z6_Cl}fKVi1t@$De5eL+OP&cg#blq(nkaF`G0SuAQ2taqf4-U}hb36#ZPeJAAm9hj5 z64g-vU@!-o!w2}DfF=q63@X4ZPUgRqrmV)*0nYnj>K)$=)zArW{^`{*m7kM8|1H1S a&AtHKQ@BgLG`SA|0000!z(8Xf zLtH}GtXr>4%Dh-Kc%g|If3Cnem{5oeugEo7ad?=fPl@0Y&O)}%h!u)E>Too&NLvyK;`AcC0<`N zfMAdx0aaAkwP(*#0Xlt}{zWk#A7^(_5whD24Te@|FtkDrhoPb(G&aV2FVtMZ=JhfP zsIJbb$w`DZczV1 z%q8;n@8>Zf|H(cq|oJ9Wz)eZsj`}tMESTI01Ox3z|$mKFLbUQa;bnxIz6|}Xw63@eTa^-RvTDum7 z!&J>Rzd6V19qsKLzj+ht4rGy=I}>hTFgzS*csNcpHZx}Va+8B~S=_!2?d=?w$V}&v zHbvL3bF8$K+T2_#1N|OswkP3d&pl#bAjWI2J}LQ7=rP3`P2SmM2Ot`SH;YHPcP~ay z555f>s7>cH+v-{&Yh5kNG` zmc~Z5TP)yhb0vL?#UT`mbLppO@3B} znJS5*6o6n5e=vwyQDJAxmW;F$I8 z?FL^Qam_x<0@c#&!frQcXrOp}oZSFci6veyUtPNfb#sHP^%eeoR{s2fC8q-Ue RkN5xp002ovPDHLkV1ml93M>Es literal 0 HcmV?d00001 diff --git a/Resources/Textures/Constructible/Misc/decals.rsi/cargo.png b/Resources/Textures/Constructible/Misc/decals.rsi/cargo.png new file mode 100644 index 0000000000000000000000000000000000000000..bf0176ea97ecd8d2a47e095dba2082fae42236d8 GIT binary patch literal 352 zcmV-m0iXVfP)wIsxogL$v!7;~gu29%b=izt@JYgQ*k%*P-MMP;>~r z4Zvp{mja*%4C4fc-3CM=uL-p$5(oy1!ZF!hpqs0flrlpYC+s3+11NL#@lh+0a2ixz yT@cMiFKaMh``ZDCgmV`V30y6AzW!TYsnP?;?_($DF7uH90000%m0hKU&wIz@&&Ri*VQ#(cq15(*AXm)47q&y z0)ubfPO==Zd6GMWq+L8-H3S`iZXh-Qb0D%jv5qF%0h=eeGk69h;*^6~sH=?r)dA=L7Am^B25{fw3Mra6VEcyo3=9kqpTm3)6Qhd* zV7^681Eiz_iXA{HAUP4D16Xhm*+fWk2*@ZKqVSOuA+nfnUIg_W@Z|1!hRc^Pz@vs^amPKh+8Nn=vStO%uh~gNSJSmkCN!bvU4=HFA z1ptyHpV-bynlS(X002ovPDHLkV1jSl BoWlSB literal 0 HcmV?d00001 diff --git a/Resources/Textures/Constructible/Misc/decals.rsi/chapel.png b/Resources/Textures/Constructible/Misc/decals.rsi/chapel.png new file mode 100644 index 0000000000000000000000000000000000000000..635f00ec536f7a9666c491dc4439f7cc9fbc3c86 GIT binary patch literal 354 zcmV-o0iFJdP)!Q-+@gBQ&L3>*W#Z< zzNMrzcfWksI{-TUyLxp8*1`5-lVG)&YjbE{u7mC6Fgzp8jz-A^XK;#<7Gh8rB+ZW4 zO_xRhv;79nc%(g33!n?G$`rD13IG7U>%n(Dn-Jy>06>zTtdf%f9&La1j#3V?1FGfH z0d+5oBT_svz%$!zN$muR3v~fjvzQIXTNknCQb4a zxicD(2u1bN|=U!or!iU32vU`8}Ak(?1xT_rc z>uw>$Ls^nc=PbOb2*6)P^dGy0F{J=MC5HVDfrCR5P!Rw?9E9|?9RQMG&N!Wk@`wNy z-V{HLSSbxudre{o0N$D}0Qf}W9QRcK>W~Ovuo<0LzVN0DHlyDI$aGH9nBy-a{AEPa zn2TqHHNapqA`ZfnuYR1)h=Wk%f;B+VP9-i_0i4^tk<Cw=eWwD-BOIx+1Y!SLR+&z*Ua83tZ*Ex;W;~f6H&W Z=?m~CmG`rZ@pJ$H002ovPDHLkV1g(}zEc1I literal 0 HcmV?d00001 diff --git a/Resources/Textures/Constructible/Misc/decals.rsi/chemistry1.png b/Resources/Textures/Constructible/Misc/decals.rsi/chemistry1.png new file mode 100644 index 0000000000000000000000000000000000000000..d1c1ac91845db8f6c6f9da96afa298ea80da4996 GIT binary patch literal 450 zcmV;z0X_bSP)U zsjBE{DRgMh63aL7Ial}iMi=<&xY7mYi)9y!Gg7s<|q9;s1S)?G8MHAsAV7;1xPzC_e zL@3_^8#!NBb$hzz5Wf>mfQp>2O)(c(OTaVDv*ctzkw7ekFS%8KxXr+~0b|11gqI+< z3LuoBEK(zRo+ZY$4OSD{vKGa0KQ!BevjFc#BtkZ5o+YU2)~i4C79bl`gpY`z9f$$v zPAH?QTa-m=j9*khvpsm3O$TcUc=r>#o%|`seg3koJK)lQj6qmjfnv+wzI?#Iz`*bymm@G70JB^{-Hc+( z85kHCcm>2@OstMz!lsEDJ}1^ZtPY?jz?ue#0qt2PaCYUiGxT*pdzJ}`rRaQ809jE` zIqeKQ1SqkbYzI&i3{3|ZX^GCMab;I*l$5(?bj(m}?q+=yeUx9_8>ckX9@(Xli>fWUc z)=eEqo%kjx1363LANhVczP=97>%Z%)YQl8B+&2mEbRTgIZlVPP7EP!a8V0=09&N&ZVbh4eX#*V4dfuBlEh6o9ikhr-L0D#XgbJ!-` zF#v$Wmh9{!9t;6(Ee{n7fUI^M;3^nkr5A|SiFLtoAn)rMz=cpk0%&$pSO9=Mw?Tt}w z0V3WQgb*Nvkj5gC1sA>y(^S&FP=Q*AP;JR2$Lm~oZPUB%p)#RK0h*?En+OtD QrT_o{07*qoM6N<$f)%!z1poj5 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Constructible/Misc/decals.rsi/conference_room.png b/Resources/Textures/Constructible/Misc/decals.rsi/conference_room.png new file mode 100644 index 0000000000000000000000000000000000000000..c3d20f31b8761dbe49232a3212cf073ed169ea6c GIT binary patch literal 356 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Constructible/Misc/decals.rsi/deathsposal.png b/Resources/Textures/Constructible/Misc/decals.rsi/deathsposal.png new file mode 100644 index 0000000000000000000000000000000000000000..28975a1b12b7eb516409bfe62fd84cf92e4a0b63 GIT binary patch literal 461 zcmV;;0W$uHP)ygFqg@ z6vv2Jch%c9CLx*1b=UpBnVsErfWK}hvX0eyQw}Ba^l&THIg^Q-izUu4=Gx->-4*~! z8AJns#OI4;=j5U9Ac)e|F_Ym8-74B2XxMUZ2+B&KMKIMjOxG%qO|gw z&VK6W+x&O{xW2hR9>8Z}a23Oqzsol7G7Qfy3I@uima)2z{q>j5Go) zE5Nd%@(^fx#D|)tNP!pw!Oc-f<4{|>jPl~ z_PZ@6)7c>VJ&01O4TL5v7KScN@|S06b@c6}*}r`NH?p?mw^eKM00000NkvXXu0mjf D2yD~@ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Constructible/Misc/decals.rsi/direction_bridge.png b/Resources/Textures/Constructible/Misc/decals.rsi/direction_bridge.png new file mode 100644 index 0000000000000000000000000000000000000000..7f3e3d70c5076bcdbc5c7426426ad519fc48ffd2 GIT binary patch literal 436 zcmV;l0ZaagP)Zq}6b9hG6%&dSHc%9amE0m5L$AOI%6)o*T%lVJlC=`5k}VTcq;w#U8ZZXOr5*f# z3$gL@dmy9?&j1k-5fKrQho1TqaU9>4N_IY<2l@Uxf1q1?05G_!_w#boDNg19 zboQ{}nqOUS%J2QZ01*)p5fKp)5fKp)kvF{W3@v&-KxK12U@YFXE^V%{BBcM`w3ln+ zxZk=~`|)z`@-g|`o%sHq67N!%)eCsEKc6JSmblE%rE9HAyh~j=i<}RT(;9ORDd^&L z`?%JnWBdY|{yPBF_a6JtRlT2=5srtiHdgJ&=VgR+4O}dWYI^?BJ$FOmUFy>D{$GHI eh=_=Y{PYbwzbuRg20_070000hy&eFwL_|bH3-r>QFvb*f70dIyRqwymhcTwOoKO@+R{mssIYB+I zj%9r_uJ0fF>-vs1`S!X303?xH8_QA7JwI*5#7dmZ_ccX*&rbmWL6{+l+|K%|j(Grp z=ci>N8TW~s%9#3cW8~PydIOTkttChzS8YNoB5`AG%$WLpsgJoa*z>k8=byJd zwjYo3-18r0%*H`0t~%e>6!n|Ay6`PPL_|bHL_|bHL_|ci6pP;(Qg`i+ha5qemE-Gq zhak*wJ?{XZbuKXg5Z?`shrE?DzMI~ScC8=VmuB|w10?3R-v?B4H}ekdOJm))mEBoM z)@;fa*Sh}sZY!nctL3SzAKI73dIOpZZTs`p`Rcl#=GL}SYQB2?b?y3)zBIFaA0UQ) pAE2!p+m~kXZvi4AA|fJMrZ1&8uA7<$VbfW5{9#_9>!Bx-i2GBTep<+ojzHT171bqD_mX`qK1Xww(;Qvbq zU+3gGC8UV=l>h($0APV0x);{#^-rjmZTFeJKR>kHXZ5+UvCZT2=``sfT$|s$=F9g!fFg}s z3%Rvx@@=l|CF%8W=p8%w1`LIaS;T*S#5MVSZ-r0qe}DxPX{?oVijrJK8Y@b2t(=o2 zMM*A6t^2kpyJq8T&J=UxubitlpT&O#000000000002X8Mm7$>h0b}a(A@j%dCj{>g zuzUCD50F%kxoLkuw{%^kv9~@SBH!kXDUk>14`|N4M}NQ+gKt2T=s wVl?aVHs?HXVRPl%u`hq|UjYCB007JM3%D;#Z%t8)%K!iX07*qoM6N<$f~<7CtN;K2 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Constructible/Misc/decals.rsi/direction_med.png b/Resources/Textures/Constructible/Misc/decals.rsi/direction_med.png new file mode 100644 index 0000000000000000000000000000000000000000..b6b2899dcd622b454a63d996c45cea356b073b6a GIT binary patch literal 421 zcmV;W0b2fvP)1p=5J1sMNF6uE4j5sKj}h<{)Vj+JL>l2U1Q9T~fxEQ2Lcm21kxG?XT_9;PVzn7L z^2$mI{nto4-q~3RjEWr*000007@;daFrUvqhbmT<<&S#*UH`_KxZdvMxZlYA<69lm z@o~SYWA0eze!M=(db?}nXuPYxtbc69#G1j>{&${pG67@C5 zjdy+lD$WYY(@5g1XvFh0l01#hdZ-Y6>T8al>oflX)xKCm zsa)=xT)Iw#-no>hIsF6Ujs{ge$A``ePnq8Y~j=Wwf{`1}3|0l~HKdW4Q{AngT!;O9QadS>@to&P{ zXS&bk?Y}ksU+4c^%UeDu~vs$182p7|K_YU9r9Q`qh()dwEE)uOYK z{j+_Xwu{i6ZtuFxDK-2%Z!t_)QaQG@abG>l>-dD7aSROK+C>=@{H1lSb3e&kd=!YU zcWb%LGuwYq_shM%iAy(T92YO`{_}Tl+b8z_A___fz~%NKzirPs_8HHB_~W|Ln-%l< zC%g`R&U_~3Z|(DIrn?vq-O1?s_xjDEu8&`>Z13GU-ZMXXdhhg~4LU2oDnAc?ocnvn ywbaMCb`EFe@?WsHxa)eV@Sos@4iGr>h54_NuI!w0_9wtVXYh3Ob6Mw<&;$UogT9ym literal 0 HcmV?d00001 diff --git a/Resources/Textures/Constructible/Misc/decals.rsi/direction_sec.png b/Resources/Textures/Constructible/Misc/decals.rsi/direction_sec.png new file mode 100644 index 0000000000000000000000000000000000000000..d025350b9a321c74a0d8f2681cbe43e8de76c2b4 GIT binary patch literal 372 zcmV-)0gL{LP)f*$Q=52Ome?NLEFvP`T_4+_pWhb|xf>JL4{m-M-|H{qs|WDq zuhz{n`VGQZ+Sl&ilXgD7*BSAxKbXPK*^2-1Dv`14<3@pX^J=V?Bk{w*gzJ`<2cRV} zcKzE;MSgyPqlZ-*e=qeBxcKYU2cEhjUhY@AF&n)4lV3OY_oHsSgNqN$G@h z)-9<204>FbhAde{`tMw&$X{yx+1f}%>+Pb58X_|iv00000Xww4%ffMch SAvCxE0000&=Bzw4QTKdtRx0ufCgqX-MR>`OE#ESSDrnz3vZM)nl{V%>L7y zP4C5jzy2{jw^JptL4~KFzM7e#*Nl_-W8C-9=dWKY9y`{5nTJ7O`ApM&I~YAB9{hZJ zc-8{Td#3drnvY)duFUIsvP!#i8|#_6&vEK0(TCG={_H!#yW-umw5{vDzO24G>vIFs z?5k4k8QsUP+wxufR=(!N+$$mSMqAZF&21W2I->TK)^qzc{~UUUh!vSJvcDlREx4tXrIUpw3Re_ia=i z8fHA?~>FVdQ&MBb@0QVisv;Y7A literal 0 HcmV?d00001 diff --git a/Resources/Textures/Constructible/Misc/decals.rsi/dock.png b/Resources/Textures/Constructible/Misc/decals.rsi/dock.png new file mode 100644 index 0000000000000000000000000000000000000000..1716f825bbdf2648ae622eac494d73b81d680bc0 GIT binary patch literal 432 zcmV;h0Z;ykP)Zq}6n(9-bnj9rLoNWK>d-TQgh(23 zKZsy|8!1D165``;{2$N%e+*3c@3=8d*lc$vp8#*KFM}}#oty3MbpP>#rmCHS2T_RQ z>TZz4%(O^T)kycki9nu7JglAv=NJhne6K&X5?w-hCbi8ad&`;Jw|JgO1W~9jO2!7( z3iLq*U%Ws44X)4Qwo0%FT>3gX9z-E$Ngjb%Bq(Lk3fNRNVv*?QQWh)%tQ=5K`>pJ* zj{~P1pnajKYRn(!y*?YT6j1V}d!dueR{`%b^o3U$0%yrxTQ$H`pj(DikxRA-PGv|z z_nf=`ECQ#bq6U!IJidA9oR>(x;_Zj=MT920ZDIbdciK(2y&zh*j>sq90>k^ zSZ&x#X1^{g7W$fG*~z>&J2OiL`0F?jZA@qL#umxz^MjD*NJQ?ACpbMH4JO}i)&S6m zMDzqO^3ixQm>d9(PtMpYDdLd&$VTM4{>T(i@I6PHuqbP7TP*>MT*tBRIq*G4TLhT` zl@OcI77&H5bU%rMpAq1D4x-RSmRC~pMY`HcfU*WyY8oQ5yp4f)l07ngCU`n-rk20Fx_L z7g{w?ly!T>>e^csVCvKa#x-CY!V_S<%_^F2FKR8a2Y{R9lTd*41QzLP=L(jsMfR$$ zv6_M;4%#-%@(M{DC=1uB0R9AuvhJM_1!)&h5sB8+x6Dq4-e2l;HgEikEB&<>lg6GEvYYyw+YQ5Rty*)vyHYho#1l#Dv z3UNIYM5-2X-UIH_Z72{|R5!->syh4$J7ru$`yNv7K{fSx@$Kv`7al%OmslT51C{1>$SYpoan zJ^;k`=-eM)eKZKbDLL7CUEbXe_?-P%K5Nz|xTu5#!@|^000000NkvXXu0mjfUV61R literal 0 HcmV?d00001 diff --git a/Resources/Textures/Constructible/Misc/decals.rsi/electrical.png b/Resources/Textures/Constructible/Misc/decals.rsi/electrical.png new file mode 100644 index 0000000000000000000000000000000000000000..a1616ae52e2ab76a4365ff79b509fd67644c7926 GIT binary patch literal 1153 zcmV-{1b+L8P)7o_p@)-vyKl*ULgPxS?|^8eqPlTGtlR3*Xq*mUk`Zi&`v%>CzgyF_S{+ zjbfvgMW$hMb2fOPE}MFznTySUso9W!{S^c)xHm)Zw-+dc2%-V&MbGxz&dz@Oem~E1 ze&;#Qf&b$kL&A3E3>9b3vQ5G^;{ctVl%%Gj)Kt{bLD7twOC*()5C#OOxR{Vc;*0?_ zH1MgzfwHqLWoKJ*I8ZRi?in$cc&MO&h+&}P$J{!8%q_z}1qDPT7EL?A-n}#dTDdY> z;gDD1kXL~~v;ghd!|7=?@9pJzpAWfQhT1N8h5_2!JaV}V`F!ZoC7zoWbBXA(GWq~* zdDAs)esh&?i5H-UIkCMwII{31(|m3`XEu^kXHu}&K96RfNK(SrwpLJo-Yjp&CKQ|Xy7Haw~dD!T&Jcj_SUmrK>QM5EC%i%DT zn~MeqdGcSGOPD)$@FSq&;@Dx6AI_)9=`Z?d`1d zcu-1;O~3s*Qs$ji2?Dfg)krTmeR>3>`{EpVy{0@K)ZWgzd(A$nsA#C)zyDt1s0>%E zh?d=s8oqMt@S!C6{Z768R{W?vAMQ#NprRte5=nOr5DZdlStuvRQfOdA_;TMIB`4dI zm1XJK711)yp%2ojZ``8*LIYkcS>ljop($Y9uTcN6o z?Gmx$0yH(TrLvL)pU+NVVa$Y;x_VV~bzLVX$08|d;*s#>mttAC&`xC~2~ACu-xfgP z{)!4-?eB-JTjOy!j0r{eefB3OPyWUH`F75oyEfroyB#XG#nayp6%`apJTL~Ju8x}8 zTFhnnPL}15U(%Z~H_hb8k*oCfUMDlte#iZOzmw(5qo}RLtgol$=6wSo9A;@=9$z#! z8#I3FCL`m{f_;7B(Iwp+J?bXyzR6AH9Ua%ndZe30i$p^M%c7zHWtT7!Z#? z(Su<`ICY9QC@<$CH|G19UYj@blRYnwPu8sAl}H3@T2sFzEDQX8KA%a?|7QFRXIaX$ TvXvGP00000NkvXXu0mjf=c+Q` literal 0 HcmV?d00001 diff --git a/Resources/Textures/Constructible/Misc/decals.rsi/eng.png b/Resources/Textures/Constructible/Misc/decals.rsi/eng.png new file mode 100644 index 0000000000000000000000000000000000000000..2d12b080fc7cb40ed8ad81b42f7159274b9008c8 GIT binary patch literal 432 zcmV;h0Z;ykP)B33H`)58)XFTVv;gs#tO^Ih8wfo;#Q zs=!Yf1O1M`T7;Q){!)a})^EpX1UBJXWh?TsW^cl^H392eP|PC)QKa4(C8+RqJcV_5 z2Ld{R=!B||1N?zmU{nDYaSckqbsU=zH`ai3wh7m29yD9AzGh0=SObg_6}-7Vn=b$W zv-tvy5>uCU1VmmUiBomg^^9djMxBPTqy?b*Km{OJp=RrAgAmYrzAYFfICkv0`EU6h acYFeR2&gHh#6_+E0000&^D`8wVe6uY*1YC)b

FM|mscI|dN#J7d zeGWoAjv0}vMwC`o08)gQdBbZStSn!Urv>J_XZC+q0DVWE7Ra;0s#GihPYVETS!g`p zJtNNw0I(_*3n0%56Mdsg97G79-E0IyU^fAX(h5@5NCFp*A0r7|NL8D$F&bUM@nbAk3$rHA3Pfqe%EDxTByf>u1(vIYiL%jU=LvN8#8m;Ls&7Vwd3Bngl={?-rT_U>o@qaP}S`qtuZ4E%>IV0Kmnbe-3hF+GF1bq^gZW z0Om;2cdpnOpcH=rh+cprfGADbjwb^of!lUJ3nhVz{m7a>zn0&1*Ed%Ux+{~41X=(9 N002ovPDHLkV1kI!#svTX literal 0 HcmV?d00001 diff --git a/Resources/Textures/Constructible/Misc/decals.rsi/eva.png b/Resources/Textures/Constructible/Misc/decals.rsi/eva.png new file mode 100644 index 0000000000000000000000000000000000000000..2db7d42645646bfbda6aa0634d6129076b12aa60 GIT binary patch literal 387 zcmV-}0et?6P)Nkl15QSetiWIqlRVf5g?85300;^FML`qeujn83JyK-rQIyWwI2n(dzm2(GoPPNO% zKPzS?IED49LA%WR7|mz|47zpQ^<9|Fmj{W#^y59~5j>pDmxr&%Z!~SkGB;Ww-H(D0 z4}D3Rw!`P!gauI471Ebc@XkFevu9A$l_Uippr|X9S&lNxMG!0i-*B_ro;;(dw+Aj6 z8?CTduUy=;oja%W3<Em*9vUQK|zUJ60rJLZ0zhn5E6?&c$&DNU9vAC_{q+3V z1o)wW?-XKgCmkVMZJRGcayf4@b{P1YEZ2leRRv^8Rhdb$MjMf)#?R>kzwc#qaRT$1 zXMVKi|L&k;-hyLQoXI`O9wNQnCdw|GrQnt0426Peu-s|lU*kk~G z1*i#d4@e5@;NUBDG@kC=`w9P=t&Pu*cVy2CaXt`}aJN~b)$Xb@xe8&F(rh3?92S}$ kO!Bwa(&^~ON3(x?0V)90@p>QEQ~&?~07*qoM6N<$g3mtUPyhe` literal 0 HcmV?d00001 diff --git a/Resources/Textures/Constructible/Misc/decals.rsi/explosives.png b/Resources/Textures/Constructible/Misc/decals.rsi/explosives.png new file mode 100644 index 0000000000000000000000000000000000000000..5f262300e737fb0c5ee58dc8cf65f8f02c3f5688 GIT binary patch literal 1609 zcmV-P2DbT$P)*=ejqfesbh6}W|asUvZS6}7e4TVd5DL+302b7kZFazMKT0 ziVC;J#|kt)R-oHH?-rnY?ja$OcijX!JK1gwayZbrv(qL8?!Mb2V~{bZvy*Mt1uk)G zSs6B8X1xj;(`#{oH=XgFRlDX?mlUsHlcyP8AF&Nc${ z(o3AUrf`X>U@+5o6%`(hj}>TSxIkx4PnFwkv~)@4+s>UK0SW|=MAfx|dmej?7$Cpj zXye8y+PyoZNW`J9ibNdR{p*lo0}-uTm#z3vL=E*p8G~lca_WO!JARzsUTyZDD=y9~vUssaO-(tI z$8X!#9No1v(|B7Nb2QK&(Nj+b1ZdeZuX=kTs#_lvpu$2VvEWMKrm>L@Kv`Kv@1B~f zTW)dc#T_|%;)!f6Sm0KDT|j?1l&8Mlh-z!IUC8UD~^3=RDq-bA6wQI9A zG#Jsvk<2A@|NTCl{l_$||4~5IU-#?vw*1LUYJ99f^XF&YiB+o@l?Z;E_la#89OS9z zpC`*0*svkUw(VoI9=SwspUwO4rzxE7psOoQZEc*}Z*#Nq0Y7_Ro?u3?MKo$NcdiTD zhEwk*Y1}eKIBYNmnws!Oqttzz_mTHo;--1?cvON_U-NUMqi3zcPKW$5vaQi0&B<=`@`E!3i{Bm;+)zv<}^3_3( z9=$|ELy#Fo7DtXI_|}>%i~-9s1cQcj8sc%AcwF@Kq!}C%!*QGQ=hF<2h`v6X!9kn$ z_fovqo+39F1_t=DF}yZe0tu_3ffxJxp{U5By4nZ8$&)FfQJb2YAs&A`o8h={xeOi; z{BGX_$xG1RZ`0Fj6OGyo#%u}n42{ilbi`9>C&1umCibkt^KL^L;# zvwnSmvN9*#-D$eJZMwVDoIRH!+GpeQ8{T*$$(wIp!s&!$l1Gf;XGS8YvXb6cUctTS zP7nL`C$2i@QqN>V^1igJ}-hL}dcECYJg`57U&AILr6XW3Vz-K<|VqUq6 z+}z9GJC&6&_WvnCRTas-dzo&|oMB68DK!#2w=qa0VqJFPhr<>eKAhm?y%Us{I+;;y z(cYe-Y>t!su!HV%X$A&t0HzmN%(}^9)+~#xEC)S3Y1Y;bV+?e3u!H;V%lu^iH^#DM zBur-~8&p1T_6|5p4H=}|+EGPY_700000NkvXX Hu0mjfzk?H# literal 0 HcmV?d00001 diff --git a/Resources/Textures/Constructible/Misc/decals.rsi/fire.png b/Resources/Textures/Constructible/Misc/decals.rsi/fire.png new file mode 100644 index 0000000000000000000000000000000000000000..6f66c618fef5b14f63966e5b969f47f72a8eabe7 GIT binary patch literal 536 zcmV+z0_XjSP)Zq}6n#a2STZ0Om_trcF-6LiP^Qe_W8@e_>J;@9N#+b3APNX~XufM)8!)ZZp?Oji zgMs(_{J;MPp7`&0v3+431l%g^tla)|n&-murL=N#hFp=~ zr|mGoF|9uHJYhS49wCio9OAeq2mlhtLFRdbnWGgz>Sd&PE=W`&!kIDQgy}n@0(7f4 zL3KqZYRm;Ki%B&RrpmuOwsm2AnFf%UO$has<`NE8@?T9|aGqKNOqaI_d1OQjkMb1<~` z1Y;IZEC3K4kXi-l_*D<0_o5Ju$yh&N)e*^!i4Jo*qRHKgDnx}Xv9$nIhz_&cuP2`P aOMC#&yN=f(1*=b-k2$_6`GA0kfpVb*fQh{>#Aqa+)wpu*-p6;T~FFy~^6 zjTCAt+Xg}8*aou3m_cosEmnf$3&hH@TG>j?qs{cc4`;C<( z`{lYX_}|8963I0+T&Ss`Ln3*?1)Ms?mktMVI8Z|adnXhw5h^TX7?5G0!a{~5o}VxQ zwYB^TsHn)PrAre9=-@$qnGkqyFH1rpEYF93YT!~*uix` zn>M-C9}TKM8r0^^ZUL&O;F^TvnF(lb=iQVPl#yZ8jjq6mfE!%_WoBBHl7d=W+44-_ z5`ndA`4dphzT^@3z4pcD$pW-y4R<60PhG%~BYbVMp?UKX6zvPf35fOum6w+wn+?_1 zQ~Olm5_1X)ki~+2{>dK)zt)(7(YqoMx&du3 z_l`i?T2pngBTXKUq1A7>;#Q$zyH|iB5xOOk#x0<^nGZc4l$~wUt(*5FJ<;G-IGi9r ziHU|H5szBV-rtU%?x1pVY;wC%QxhMJH~MMC#oPr{TRYhlVSRmy0A*#_1jy^PsI)Z6 zH0GA>{BG-5nyULIW}FoXg(t^7dT`XsIHD5 z9}7M>$cy1Hvf0p?)8>=DY?)IYj}a%pFwp$`1RXne|C*jTJw% z<~*QvYt75rcRP0S{|PQAaG1WUt9&M(_3M)aXxA<}B&`1`preCz>FLPtx9I8>^OA1b z=$6lCkzvG=5};4_Br6cGjtDq#V3Nt_>XkJ4{T8LCqf3`~do<57Dtcd46_uTxuw{z} zpU?E0%a@1f?jC00OAcnwwi62335V@$C`}?WGZviPW(N3t79tT3ot?0AC*=~8#*DtP zkv&c)%AIM~?cVrQyLz=tZnvRtznQER%M;bwlB)h_P&fYwYSE(DR;((C&kMJEgUZdd z%jrZXPqOcUDJF@on?#j zvsz)t2VMpSpuC)w5}~+3hYr!e-(}WVkIlu7G^M0iv|@RpslT!^micDRwCne)fieAy zikt#eTRW+9o{S+ingR?FGcF(>Gc26gmkiWV<+YVY1jx^*+4_ba@bJ2ye^l(}`~ z^4RcuDctFdm2bVhECH}c*sH4etf>jg%95Bq{oywykY?qL*AsChKwaG(GBT`eC`}?i zKY`@rhd+K(r&=j1OQN|McJHQI!eN{{$Hs7&?UIFt<9^)kCx1a7X3?k!&+B4%c$mgU z-ec=ldKi_}CaP`QMz3wb0>1C>=QWGv5wg?+Y-orc>Mlb_7{GzXB{&k R_woP$002ovPDHLkV1iHMR+|6- literal 0 HcmV?d00001 diff --git a/Resources/Textures/Constructible/Misc/decals.rsi/gravi.png b/Resources/Textures/Constructible/Misc/decals.rsi/gravi.png new file mode 100644 index 0000000000000000000000000000000000000000..21eb2e861365f25fd830d1a6ed79432e56bb494f GIT binary patch literal 458 zcmV;*0X6=KP)j)B4c9T&*{km(vFr@0^@xafp5N zrG- zrD_ZiwG?S}{Ixq7!X+oHsvv5q^4zxv#i>irFwTL|5t+tB*hMb5G%Vu?Fy1NOSq{By z+sZfsKX)gG-lrcJ14J!F-yX&&$k7nCT&gEh-520QDu4j#tA5^jxJ+dP;CtYB1GpZ? zCg4`B7`T=k15QSetT7x0TDdomASiE;_+#2ZGOF+0iaSr z+yIdIe6h4P2Y|_RMyFDUd)Y%KU+#Mj;xK^kIj#5V-X{exG2gCTL`jP6+BJgc6@bir z7>1=t@7#9@FeFA;|U_J@KEApHy4l;tG=)aDcq1`vnA4GdSTA&8O`QIgg$B2ZVc zGSGyv5i0|Is&fXK=@w&7Hacg3OlTg6F-M~h!RP?2zkpUkF&-2k%S-D8h&1{TC;=$N zx}#VRG-K0x!72mItyql3dVvkloM>%ZFK27k0*H$XO*-A=;}j=WL!kR&lZ*k9zF@W4 zRsQpfSj}4N=lcuU$D6c2kgfyQ%NdjD%xa$}MM+A%fmG6Fq3_0|_&h1QqtRQlfBgal Wgr_VU2}0li0000*4}gCFZQ z(nest^bjQ}q9pwW0U)hK;5ZE20qhQi_Q3ic0XqZ8@=`ibG#VwT15QSetT7x0TDecanQV4^akj^JaTKBqvPM{m8PaB=Uok$Z1LZu;{RXWBH$N`jU zV6&Rt9a(D!w96nUyj8h#N#npfZQOdH$0&yv_5fNs>c zoHd|A6lEiZ$dVXE**O2#>nZ3H2~&D>i6fvx_)>2G0HV;I6~Jc{PVR(7*|0r;*3J%4 zZx3D~aZ(C=>h}Urer=!XL8V_uVPHMToB$H(C!TsuXN9Y2Spn24r>eJAxU~I>0n~O% z6>qD2={tZJz$KfNL^(hY5DJAXfQ-*o58Tcq%dQ@%B1sV{mYHIG%pKzrf5Q<3xnT^UEN_)7U1= zjH+%#0L~gLM&^tHwAybsH$6c_c>mmFq6q+)8AJr7RQE50&_V6DXNX*wWPqw};HP){w$w0>lZSLj&eCTl*|AC002ovPDHLkV1i*buFU`d literal 0 HcmV?d00001 diff --git a/Resources/Textures/Constructible/Misc/decals.rsi/laser.png b/Resources/Textures/Constructible/Misc/decals.rsi/laser.png new file mode 100644 index 0000000000000000000000000000000000000000..f96d7cf9275f38a85af573526dc09257181d00c4 GIT binary patch literal 1341 zcmV-D1;YA?P)!tOfczdi-lcpGJNqCdmN}_ndm{twi zNNF8fd@)k{q%|f&#fk{gl9E;kYNfSR7(^JDVHoDDJ|Gl|Nb7|rP5)#)oOAZt|GzGK zoelrv2_b^h?dG=IO{)mbNf%IGPq|?rhJn=7@cE>Yi;$L`jR}aNAlcc3M0j!11XNUT z6_C}dt+IA)xBznE1a*@_?)9=JEe)|+6=`mYljf#4iHJ}nEe+}J=FR6yE`qUtKkb0z z=SPa)=MulqCEK<|3Lty;(k6oO+ypc?vm+)3NletF!;>&9pu>|ONlBW-#30wN^Wk$L z7a?KuX8HkfA9D_q580PrI0cZL90DRFJaYk+m3*!1NM>f3_6k+bOB3H`FXaZ!zhKO;=hiv192m!?H z<|h%9rxxJxus%5%aX1wD`Bwad0$Oj!i^HMF^y!Gl!}^K#S0{)*qPUntEiI70)lPi; z=;gIng0!>@jCwa^ipu->c5dB*;$jYoV0)6l0cdRGBfA|*PS)i?=issX{kM48SL6`C z&n4yM(NbAC*b{|?4tdZyn1${xm!zcV5*dj!H1P4`IL6I@2rm>Bk?ZwBQIP|~7%ZpL zsp9Vw>gxKrdpE?*n*&_D7{D;VcsPPAmO-DM9@xL1_e7Zfj|H4POKEvI+L9#(E8Z|@ zYYS0O;H9lCgv+II{J5VhSAtYk^;7XxfVen~J9k3t*x|+NHF@K8gJnw%%FEGCpQdy? zo=0|RFi6&d1yt47Lw(&8Qd4yR+S)=KKJ3HaC)~arqNBq^RUtZBB{5OQ8Ksb$Ya=RZ zaNDM)0bZWh&YU?=UCnD23+E@yfCyS?DP@;0L(V(4VRC@DIE{n^mF{lg*IzZwH4QvG0Sc+98mTjM5|h;7UKv6lARIg9CpucFttBrpkpm;Y>mwgTh|14r z-<>;f@SuH|9N>d(kpLVm@zLAcPeOu9AfTft5Ff8$w=1Nlhq3Oh@V~~y%$XLpZ0X{_ z0d|W}rYLkiG6S`>e43TT+cQ!uT)GsCHX>pD{cyCT7f-uMUqI;WG-+=)2@h9@ic*P< zRS^?XQZ&}Bi$EPw+)xN!o$sN!Imm?zxaZAd;}`)Vq^@1dj};ZD-<*jdD=TbN6!-6& z+`SuO)+`Gbs{8r2DuAcMMAsGUc7>JM;mn?`bM5;eGg5SHw$Y`iuI^{q@(xz6L{6RJ zB}Jie)Pj>Iso~)@>v5yj*Xxo^n{3kKbxB!Sw46H^E1maUlACLra7?dWZ52Q&D*n8_ zsQ|sbtk}7e469XPSD|A}4M(D@%Vfj)a5N1x4Rjr>R#>&lN+9r9SN807V6`d~6foE8 zWetETg5}5&K5J-zygVDzrj0o%qu_L^q^DZ|Sia0)cKTo+XS@Wde1 z*6(MPs*asfe+QuuK@mbv;=6DmXP(6GzlA>lLcY=VzKryr00000NkvXXu0mjf?*V}^ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Constructible/Misc/decals.rsi/magnetics.png b/Resources/Textures/Constructible/Misc/decals.rsi/magnetics.png new file mode 100644 index 0000000000000000000000000000000000000000..7c131e3412e236db3317fd98a9dd19e389c59633 GIT binary patch literal 1166 zcmV;91abR`P)O_H3JBT zxdEuMGD`;!t`neh=eV{e;*THmL2)t4$}-g7=T(27S9ZIh;$k#0!F#JJE@2A>83lCY zh(l8`pQd6y9X;w0ppz%LFJW6Xfc}2I$jd_;H(K-{T95>I5G~NAO%~gK9R9nkm5(Tdu;L;_2uv$?`Nv2|xzC{4BNuPG_&Xm=PE?y-3 zO2s9195{eX6aDt9XOZ}vcU|_#G*M|OafuzTO5A8~rw>p~jXkaSoPStj7obpx-zAKf z28c$fE-XYYm!Ug<{tN|!Ez+mh$o*x*bG4ctl9!@!+<8Ac-C*x*d& z-#K8DVW9Kp`6Zo>xm0pyhP{CR({4>+G=G%EG1&MJJqMT*@e{#$Bt1p zGeg-60Z3TRoT0tD8)`q!rl=^TR6HMY&T6Xd`2882KFzvo*EqE#fJ9MqGl!<96UAd$bXwqY z8RX_BhTNaG>XDH|oR?=V+BJZ=VxFFcrY5Q-is#yr6&4N?3WqT(E3??UH*>N2Gkbea zCc`6fY_?RjugfwhDapj^U4r_V?b(w_Wn~tfozq5VCuf1TfW&1nImx@bc5%M1&*0{b z4Q$<-exjkFS$sZA@;SE~Uay&arnAApS>AYal)^&M)x|-lldvg~(b~#4Jv~rYm%Xew zKs*j(V{x85N#$ZOF*X)wdRohl-MraCU0pW4z0lUi*Ah14_H91fxswx;N!Mi$4#&&i zpvze-CU%xYiO1tyxxz6T8kiu><+9q|*vMmRSs6b~P4T{IF8)ish|SJ2BQg8WJr~=) gef+qRasMs*8?8%ozF>720RR9107*qoM6N<$f)Bef-~a#s literal 0 HcmV?d00001 diff --git a/Resources/Textures/Constructible/Misc/decals.rsi/mail.png b/Resources/Textures/Constructible/Misc/decals.rsi/mail.png new file mode 100644 index 0000000000000000000000000000000000000000..f397ffe996eb88634a8aba684fd53c828b7f4e47 GIT binary patch literal 346 zcmV-g0j2(lP)%m0hKU&wIz@&&Ri*VQ#(cq15(*AXm)47q&y z0)ubfPO==Zd6GMWq+L8-HB4lgOhqu@4j>o>$YAp%ccRph5@jSg00uk*60wSJ-!PwK zvq+8tU0nmL7H!`!pFvmGfc6fMQ8vVI1k7?7WkZr3KvopMEP^?LT+7LJ0L&5OT1t@v z$Vq5aa{##|B0ezS1<|Mjh)M&*7Qr-g043EiRUCkBsIIO7ypiG=kjU`l?sDOjLQ~xV sy1E8r=K@__1BN#Q)C_pDd=!iV0IVcg!z{TN`2YX_07*qoM6N<$g5=tTasU7T literal 0 HcmV?d00001 diff --git a/Resources/Textures/Constructible/Misc/decals.rsi/medbay.png b/Resources/Textures/Constructible/Misc/decals.rsi/medbay.png new file mode 100644 index 0000000000000000000000000000000000000000..c9c6e1362a7f973039ffd199b7a7c4827b7dc6ab GIT binary patch literal 313 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=hEVFfw?$IEGZrNluVpRhBgn3c6rj z{IlLmN5ilGNH%-i$$K+T|JR>*|6swtQ?8qI%&%Nb@2GsycwJDZg~zh~snTJ`+pQ^< z2mTeG6=7~~xcla^CDD?A~cf-W+fug}HhDDbds^;`f zV?KP0G37ezlVg^Vdd+a=@M^=PvG zdIJ!c(ft}oIygQ1Gqszi&FUAA@i)EH69s*3pF3GqEEAd%1iPHy@E<>1o3mmuzqmT< zgczYi&DX>{g~Vq|@flpXsBSF|G}qX`=E(ZA1GAqlP7q;WsN#!Bob&mhH84mRJYD@< J);T3K0RY#udhY-L literal 0 HcmV?d00001 diff --git a/Resources/Textures/Constructible/Misc/decals.rsi/memetic.png b/Resources/Textures/Constructible/Misc/decals.rsi/memetic.png new file mode 100644 index 0000000000000000000000000000000000000000..1ff84aa70beccd26c1087f99cc4a0bf7983a4d3e GIT binary patch literal 1311 zcmV+)1>pLLP))6vzK-?Q@;;-R3@Krc9M~w0)S0OR9*(Lr2OqMUfDM2udH?2jYQHMAM{_Nl5yl zh$lpN&=++{L`v%tkx1ycPH9t9%uv($zJ1RAdpI+rooR>CX+o@ICFipD`Ty41YwvY{ z|LxyuU8h8+l`G-LC-1wyj1k=G9K985xJz`Ip0?{ zH<_N3A|6Ga1d;9yjJj>x8u-MMB^slQWAk=LeI&CEkQDSuHOfVcV;&j}I5HCR)Xso@ zplof7R?Mn+TbqBr?|TG{8~CDuX{yXJ!#CfmCjb{j!Yh~0Da;x`sp!9M0_D1OMUsX# z1#K!M4R5%yK+iKwV(-ye5pQeIUgIkZiO)TI>R3xL4ggvUezrSdRA(5*hCSUu(+L&t zXxEA#%1;3J?6Zv|4N2j*gW#v13P~a9anr_n0>Y$D22LnI9P4`DQ=YdpA{p}gy~>L( z76KEleExZmjJRlFOk=#Pn3$C(M7(!-S8EU$0>U@8mpEoU_Vg$LOmXFo9m7|JSz*5m{{YL=x zMLpXOm8~tl8~(YDq+x%*5CCtwS=iU7T(LrV)z!+*&K!yahlVOFmwo5?X0#Ye=S&(p z)5|d{ui7eb$DOex#W9c$%a#Fv;HxizH(n?9?F07h1)L-1o-P0k%Jn0-^_ECd>tbi* zg})Vj63HX#DLdO^k_oL9)~vEx6E5iyhJmtsfwEi?c6H^&xNBEHX3AJ&fXGf7)CQPl;T4gO2e!e?TcWbM1)hZ>RynC%ObHZAhk8_#w zwe4m4fw(Y|{l^7RUk+YW&+wuPBi3v{YYnY6`Qc+h61?oPyzo}9&UeAU09eh0H7l&8 zU@Zl!)qv-m8&W;PmgcDcFNrr7Os@%qfN}eOsL-b7NPsj4*t%850c5=RWD;=VgiKT6 z*Mp4&l%5aPH_5qE^`;f!uNE8Bfg3j!rKNcoqyxo)LJ0FQjzD|I__YJt+5`ae6XCFi z>_~LY`4RU&Pz0!~{$@7M7=1aE+r7ZBTvGl#64Iu^njMeIVlo4127dC1u#qL^y~_(E;D5KjdfyQMolUZ!YP0oO4S485 zL7GkmFwF#jgJAJl2A&Uy3c42pVd!#39t}a@QeeZw6l(#bxc9UczZ(GX)aFYx40Hfc zu31wd=}oTpv0a&^9$$J%x%qM7=pi#cM`&l5NBX?;_A&usT<3pt+fpbhiC%63;k+{f zM;DLxcFdYP#+<((aGnpAW9gGp(H|ZiV|mGv5X&wAQVJAD&EqsvWFQPO{7F+ed=5Rl z_rAji?~lS$w_D;!4^$l+kqI0e-~^K!e!@7h`p0XWwlfI8hyVsChThQM_~?Jkeg{JO V4@xVAC=UPt002ovPDHLkV1o09YDoY9 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Constructible/Misc/decals.rsi/meta.json b/Resources/Textures/Constructible/Misc/decals.rsi/meta.json new file mode 100644 index 0000000000..c411301312 --- /dev/null +++ b/Resources/Textures/Constructible/Misc/decals.rsi/meta.json @@ -0,0 +1,893 @@ +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from https://github.com/discordia-space/CEV-Eris at commit 4e0bbe682d0a00192d24708fdb7031008aa03f18", + "states": [ + { + "name": "ai", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "anomaly", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "armory", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "ass", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "atmos", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "atmos_air", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "atmos_co2", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "atmos_n2", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "atmos_n2o", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "atmos_o2", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "atmos_phoron", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "atmos_waste", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "atmosplaque", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "zumosplaque", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "bar", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "biblio", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "bio", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "biohazard", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "bridge", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "canisters", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "cargo", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "cargo_dock", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "chapel", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "chem", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "chemistry1", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "chemistry2", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "commander", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "conference_room", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "corrosives", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "cryogenics", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "danger", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "deathsposal", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "direction_eng", + "directions": 4, + "delays": [ + [ + 1 + ], + [ + 1 + ], + [ + 1 + ], + [ + 1 + ] + ] + }, + { + "name": "direction_evac", + "directions": 4, + "delays": [ + [ + 1 + ], + [ + 1 + ], + [ + 1 + ], + [ + 1 + ] + ] + }, + { + "name": "direction_supply", + "directions": 4, + "delays": [ + [ + 1 + ], + [ + 1 + ], + [ + 1 + ], + [ + 1 + ] + ] + }, + { + "name": "direction_bridge", + "directions": 4, + "delays": [ + [ + 1 + ], + [ + 1 + ], + [ + 1 + ], + [ + 1 + ] + ] + }, + { + "name": "direction_med", + "directions": 4, + "delays": [ + [ + 1 + ], + [ + 1 + ], + [ + 1 + ], + [ + 1 + ] + ] + }, + { + "name": "direction_sci", + "directions": 4, + "delays": [ + [ + 1 + ], + [ + 1 + ], + [ + 1 + ], + [ + 1 + ] + ] + }, + { + "name": "direction_sec", + "directions": 4, + "delays": [ + [ + 1 + ], + [ + 1 + ], + [ + 1 + ], + [ + 1 + ] + ] + }, + { + "name": "dock", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "doors", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "drones", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "electrical", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "eng", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "engine", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "eva", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "examroom", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "explosives", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "fire", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "flammable", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "cloning", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "gravi", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "hydro1", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "hydro2", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "hydro3", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "interrogation", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "laser", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "magnetics", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "mail", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "medbay", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "memetic", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "miner_dock", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "monkey_painting", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "morgue", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "nosmoking", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "nosmoking2", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "surgery", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "optical", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "oxidants", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "pods", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "prison", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "radiation", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "rnd", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "robo", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "sci", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "science1", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "science2", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "secure", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "securearea", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "shield", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "shock", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "something-old1", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "something-old2", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "space", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "telecoms", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "toxin_res", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "toxins", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "virology", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "xenobio", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "xenobio2", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "xenolab", + "directions": 1, + "delays": [ + [ + 1 + ] + ] + } + ] +} diff --git a/Resources/Textures/Constructible/Misc/decals.rsi/miner_dock.png b/Resources/Textures/Constructible/Misc/decals.rsi/miner_dock.png new file mode 100644 index 0000000000000000000000000000000000000000..a9444f1ed6c073171a40752b1ecb271846153888 GIT binary patch literal 462 zcmV;<0WtoGP)V}V><;;-Mn<@Gjzz3EmP=}j)4pzQy;;Gn++X2 z2Kor;B=vF)_T42RL-T{dJ`3rybkZ5P=)dc#%V0d6Zx0FZ^8C~qqxI!@I^W)XzeDRP zC^(VA=62Kyant2Q>k4VH4gy$ChPZziwc2z7n9f*4O76|<5GilqYiCP99BW<4Wdeni z$~glz1k21!NU6L4mXjgUV!aa-`2F$_80Qk0bq9bX%VjOeaO*M77 zlkTt2S8pHA0OsHUAnh2%A5w~tvF%j?JAgS8LeC6mfZpH@y}{r0(1Xegz@B`^loP-q z$MI1B*qPaiyeE<@M^l&3x{@^?XsX0T08=PbcFr9uTu^JAX33yK%}tgusQp0`9&A~08l@2H!oh}ei=C)$aH#I-mR zv2y3oD)TkF%nbkh48wrqIL@XcxrNhP!Xz_K&Ur z2qGNz;QWL2+oX0#_3>`Dp4q^vc`<~tij-fm_tTmnvNn-RuWR#B6_GFiK*E4g6)A>o z-a@Ad0H8{0+HYzUR6EI-4KyhcMA&{(V*HNRwKCQ=|L;4nGO;X`{thhXKbO#g=?>gp vFS3PS@7_3>-2B}g(6d=~bH{NU$FcAUWKB#(M%x{h00000NkvXXu0mjf7`TFv literal 0 HcmV?d00001 diff --git a/Resources/Textures/Constructible/Misc/decals.rsi/morgue.png b/Resources/Textures/Constructible/Misc/decals.rsi/morgue.png new file mode 100644 index 0000000000000000000000000000000000000000..1dc0e7d1a960dcf91fd09c4ceab3848de9459ffa GIT binary patch literal 341 zcmV-b0jmCqP)%l|Kt-@$PH%0;p)H`LK*hi zgbE>=JAjhvm?{oHHZa3En&ITjD+~+_khTJh4`a{RyObmclbj1+mYIv|pzsZK^ciOC zUCLmnqfe4~Bs&0RG0ZZU*7$R-m5Q4T)8eN=P4lvZwCp#Ay n>gY2tJjAbNz?l;rxfU1-){hYIv&TP zuNgN5Op!HNrkr@rocYC~0#VyW1!F4jQ%pbRYE>}DTy@xB-LXv7FvX`E{=F4D_w2c0 rR4~>XTyq$i98reW7(jtQU=w@*B0H1o#0Hca=a)nAnUH8&OD*|FESza1-N4w3{;w%3_!6 z;(N9w>U*VzK~D0L-uAWUyn9b?F0jFWM^0vwX_}<^;mKqo_3dpL@@BIM!!V@DecuNF zk`?hIx#xMrVObUhK_IT9_oFcpk>`0Nlew+mHY878tJPw$ZQEdsfiVW#w!eKZwSXj& zM5{ts008v+{Ut#>6Pdy^O;K}I1VNCE2a*V#A?An1(h8knszd(z8%D7>Zy(C==c zRm(9^i;GKWjt70vQxYJZ0Z#rrxWU!aW9%6h6S^ZT&Kuba2%VuIpH8P}x7$nN#9nul zx*SX3CYlB~ z$%J@##dthME|?gBW=lsAb@qKty;us|)gzjCqG>-lJ`x$>?Kv|8 z0$(QN#)_^eEXyJQL_{>p7wP@p&DMlkwG6FN5^=KTj4==q=7$EfN=eCx(k0LbJs~2Q zX5OB)N=dmBD*XlepeNccE-vHG674xN0lx2}P$-C4tCq1RLG(G6ttQ}erXxUp!r|nd kPDg4mUHeqL!3Jx`2hzlXVo^6zvj6}907*qoM6N<$fX9JP)FGjFD;8E+9ibZ{?wQAEuMQn;sQd2c;(%QyW zv>p*##p;X3^}w^*YND;gBUM}KK{O&FPz4o`T@iP`eOS>TS_mo+O(&U`e`e!+3l#LgtgrYE|Hp*MF@~#psXx{60da|0iTcG z0cB@9G+{!d0BzpPiEaUJY-D_DDsngsm0d_w*@Z+!MHxy>MGXy%eWBnI_Qi|20VqE| zS^>XT0l!!C=0yw8qD5Snu)i<@Wo3NkcB7s>Evl$%3^XK{Wg@8*W z=j3n?P|-TqL-1DJ@S{tBrcb9?BKf%!ICO~ZRx27b$R>Z2w;ch0lUErTHd(Fc;6Z%P z6aK-$vXIpTLHgU4fS62>t|JTG&*yJC0zoSczN<;`GhpST#0yHR;_*U8{Wbi?(i!7of?Lxi8W8X*f@9l70I)FlrQU4jX1?XK_5u z&BAUEo6pT}ps^uDWRyuTD8RsGgRd6F0uT&>#R6GbH#zWgGrM+iaLgEnbvpZ&7BbV* zk=2S$pGr``@735xE01+#keKpu~&n(DT}u9PRKaJ5URsa9oWIRpsM+iyFR zmS$7oYL_anw)Ls0PLjuCsz(o0S;@zb<5?feJ}y6>udiK$rAuRoiwlokb#;*9oz0v+ z)xw>o5LT-}ubz*RNlCF#RTX6Ct^h}lG?SKYW6Wqf$;lSt;!GAUj3GC-o`M3tkXUaR z+-mi0(}c&4u_iN<4`1mQ!O^20EKev{bxnvdqw9!{G04cUVX+vTIDU^CH$v>*0Wo0cKK1|WTflO;hK;qR26FBShVeZ@OCNtC4F3{b(FzLOUq@~%2h%nf+ zDFDF4iID_@;`s3vHg0$choe35BS-G>)`&XBjYHeE@w#D9+QwkZ7D{+Z*iJJnF{RsC(RX6HIP<#XYDq8yI!`PSITcmPu(V&zJHICBQ_@|^VP)A6JL zj2vkvA_8nS7%`%AS6J`f7V`3(l$JtaA*&?p#-&TlO;6`b$)x0{hv?{Me?k9E{C<%> zsFqMD#Ia+1&iwf_@L-<1TNf;#(K>V}KLrB3W15}VQcsXzkQRwxS9}K#W^Y&g{#)`7 XgoaMl2AAQq00000NkvXXu0mjfR7r!u literal 0 HcmV?d00001 diff --git a/Resources/Textures/Constructible/Misc/decals.rsi/oxidants.png b/Resources/Textures/Constructible/Misc/decals.rsi/oxidants.png new file mode 100644 index 0000000000000000000000000000000000000000..a37f6f828c4a33e26fd818c4c6e3217b10f25e6a GIT binary patch literal 1319 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Constructible/Misc/decals.rsi/rnd.png b/Resources/Textures/Constructible/Misc/decals.rsi/rnd.png new file mode 100644 index 0000000000000000000000000000000000000000..875b57204b378f7b712b90599c08841fb4f830cd GIT binary patch literal 390 zcmV;10eSw3P)%m0h4|ITpv!X>gS*EP^%coWEp*AXm)47q&a z5`*u?M6w*P*?&HRWS}`-HB4lgj0ODJ@RDJ(|9q155exxh0L)^~L@$!{QXB%vzGev! zr>_H$E!Q>BBg+i39q^$3EQ;lqFI++qqqzeV8jTrr4fGg%HzqP%zHkZd2)a1{<_HD` z2Dl^00c7QZKO0^m3?L)nQRD!OypF^rCn1vT09dKG*?&HUg|H|g1(2NvkmLRGg-c|o z0kRyh*?&GfDv&LvTTx7I9 k$MA-LngMT?kAhJE04>RViu{be_W%F@07*qoM6N<$g8BZQN&o-= literal 0 HcmV?d00001 diff --git a/Resources/Textures/Constructible/Misc/decals.rsi/robo.png b/Resources/Textures/Constructible/Misc/decals.rsi/robo.png new file mode 100644 index 0000000000000000000000000000000000000000..5b3bb6e83dbb846ce5fcc3355e8547297f347191 GIT binary patch literal 413 zcmV;O0b>4%P)b>!47?Owx_2p%p&yW-qC?+c1A&{dqo+Ke56BDhfJ_=Q7J-4}6+sO90~s=A@0bn+ z1KCk+Qa0M5zQvSCkSCI&3=H`17_}KJmaB7@0PnN6#u$yt#d3AN|M*0i7eT?5(Kt=- z8cE!?IVtl3lXV(IAWJMBrZ0^)Hxh@3`3{HqE?DnFYX)3UDIW10r0-0CN|7b@sw}>} z-U+xwvcy6e4WL_}hzMkft*qVK;p!x0L`?|ba%z(6Ybn?npcA_3roH-F(huwmNKPlQ z6*r+W`l=Ubt&A2=O*VnLW8XD&ZMn06T>?pGOKim@piI=u;OZm@nuL9VMZkC3UnS7x zIqro3IdiWW$;xPqpT^kQO-0WoEq;!D0n5BVl*ZWF4FDiYW42GxTM(r&%DljFf2_B=b;z6n(8&x>u?yWyl2*8D;1hK#Eevj-Gme9suP49Dpe!BSewl6eyN`0R}Hf>|K!P zfSejg6Fa8rP~Mb$JO4fZ|NVb}8~!`)+BQt4vx5u4$NO6&N8{pTIy*ehKOq?JL>`b3 zyU|0Vh+dl$!8qcab`nq|8Jz2i2m#&s{QsV0?x&#h;*G5P6AwstpvCZ z9A^P8Zq}6n(9_R;pCdj%16(h)|?%Y&`*UcW#gqaD(ifbAoQ!DpiOPsaqH$lryADANl#Q zjR{B@+P@HE$M5;Q?{5tJ^|-Nhyu7|0rULo=c(>x**}%j30*}wL(ct^t761-55@!Sm zKASI`6UR}2EDf>VG^py)va~>#RMb}02Fy*mAuH4j*xuUN5E;pded|hb8-Suc0Oev z!PlF{3EoSfs@pRXBt{U~*5G}s2YM_Z2@OVTbRX^U1@|IA5)w=*uw0cVq=tqU0h!$d ztLnA`WI>WDO{RdY;>q{y(_7Jpgfj^_ne-btdMy=TP?;2AN9Z<><)PKk+X6~H=Hp`&0a;+KLV$&aNk>KKy?*+JcMfQ8^`5`v zB(xIP@3!)Ddhn_=q2IfKF^rdmsV^qY_m}l{boHy*fBXO-!#dn{TP!620000U`J9^uJqlANQZhZph?s)^BAaCH_*(d1cRw&{qbUVjG?isF2bL3(o z$uFrL+TWr<^!xe!OZ)+U-L7m8o}OP$u|(eAUadMeHt}@3!~NqXSp0a{1Hj1!F$0j| zo9!-G8~|?b9^|bN;@b2Q#q&H%AUHEVTl$_6fFfQNDVlclem59E74L^>T>vQ#fFurB zy1>QseCJuRegsr2ixhd5tOFpuZ`u)6-CaQZIDp{nEGk1zseUqm6jwc`79c<@LfeM3 z8i49OaM_N&Mk>NQOGp)OGExMjw(d^&80BqZoi6iB8 Qod5s;07*qoM6N<$f)X>lga7~l literal 0 HcmV?d00001 diff --git a/Resources/Textures/Constructible/Misc/decals.rsi/secure.png b/Resources/Textures/Constructible/Misc/decals.rsi/secure.png new file mode 100644 index 0000000000000000000000000000000000000000..40f056c2b847aca6a37fae5986b997faccaf5205 GIT binary patch literal 1080 zcmV-81jqY{P)X<59kfitO_F(BL37%R(-Z zS6xj4(3Q*CDe@`1dL>(cs;fyzH9j)DMyowG1p+7@XYY&F zHx_bAxX+&D?9dQ=anvF&Z#vwYGxOV)`u6(`YHBQohM={TRtfhj?E5MD`e@F|LVx^EG$G`uc2Q@*UWqCb#{7F zP58~%IrGLne3&o4-%w#88X4iU1v4PwX=$NpbQDgUu*gnR+bM*0IN7%Csa00a?U5<0 z_SiUe%3^dBT3R?Gkv-Ett9Y>(=gP}D@Or?cw>KAi`pmvGl1V7r66fB%NqTy?xM>sn zr+ld`N~~{a;FClGA`#CE$#33F5G;%Hb}-J38;J#D4FkSx_K-+GeLWvZl*|e0=-?Kh zJ$qd9)^nz9+&Fy^ZP?&g)SRj3TQtfKvobI?#_rRn2|ArN8XM9dyXWDWQFf;@{V{wV z^>r3*w~do0d24)}4*?7bv#pJb{rzz0P$uivEw1qO^%lE!I@uX=QeU^Y--4ndJ4cRW z(%%nlZL~{d*aikT8VqtKnKbyW$A@LT_^AFHOiYNa@5V_cll1m-in=;}=UFXR+G=YV yHMef%>fys2OeUA{HJb(w2W;O?=Sp(^H}MaWXG|Z$@`Awt0000IPB~8(W5~m6}&z$=)|&qi98l}O>%sNIw^t^9&S#(8X{|@s;PLQ+Fh~Iai)8}<6Rsw# zgRkbEIPD?YEhgG6CQf^Z)!Y*@mAeEVkNhIII6{ac3KQdzZ*9V}H4z3Wx&wy8h8NEc z8;{oW&icTm1A29 zWCE(%%W|PmX@F9DSvC|%1XS5Szcc07mV(iMDf?!`mE&Ag3Y7#XwU=c>LHjSD)V`CL z7tbk}{u4$5rtIZ=Ko*sP(f}oU-8~?yYAy_1x=@p-LtS%1ubwz0HWD z6XmmNN@0*9nfRsW#*S#a=6HHBXIG`|+H6i~V6kizC8%0}s;q4z7|70RRx6hVLl-=m p_{zpr+eF^Fzx$JhwN@<`eFH)o@1k_%ve^It002ovPDHLkV1n>M#_|9F literal 0 HcmV?d00001 diff --git a/Resources/Textures/Constructible/Misc/decals.rsi/shield.png b/Resources/Textures/Constructible/Misc/decals.rsi/shield.png new file mode 100644 index 0000000000000000000000000000000000000000..bb88d2a770e7e6da59be40ee3d317eea2cd814d3 GIT binary patch literal 402 zcmV;D0d4+?P)L*939?4&&cGh2Yn~udBHqB+yfKA|F)I_|3DTu@ zZB)VeLKRizU%+7b|L!=S0Y?3IP5LJ6_J`X&2Jf4%|*j zI$uCQnR@{4xX6ANpe~g$wxRSpU;V8j)cPq>PW0XYadPP_GEUE6e*!yVZuBewI}3HG zj5)VsdhY@Q(P}u{cFh8~$FQx3Z$nZBeEa+00Niv_z{xd`w+@`udWq99g9rmm=L>VM zcL)`l46s@+QJ2aXIEF>$fYqf!LtK|!gr{Q$Sybi-wxiWq0N_AUM9zRtX#*gB{l4mF w4S+aFoaci8*gqh?5@CRI&zy(?g?z~n_$Z2#Q&OP^=hcmz*>n`mNpPv|ymfzmPRAc4R2Jf^FXw;7YfXOrqfbp~@ zoP*DT4BxH5iv`Au1;%$P@L7=IGL@SI?{z&9oNvJS2Es(I>p7dqxSD9xk0|>L>qRK) z){78jpNT2Ci2<7TTJ@ytQ>&iPX&+(>^eP5`Ra6WKVLTU`4( zV;tX?>ZnZS z&ShS}i3TRqtT>1$d(vpQJtGorr?T9K#!OP;Ka~9Pxm1&B7X5*j_W?x7aKq*K!6164C%H zuGc?)2FK_i_Q)xma<~A|Apr9wKHtKkW!=LkM28AVA%GkTxBx7T5DQ2S0dzLH8dB54 z&?yOrtpkWo1F(dL9LM;?(8Vcs0I>xSO%fq;0fSsC5+gHF6S_%^F0BrR>vKTDkk<&gH{82!tRZBAm9N4;_!C}cls#tPh>wc=3 cGYV(|0L|%&MLye5&;S4c07*qoM6N<$f|2@|KmY&$ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Constructible/Misc/decals.rsi/something-old2.png b/Resources/Textures/Constructible/Misc/decals.rsi/something-old2.png new file mode 100644 index 0000000000000000000000000000000000000000..2731e3626b7d6035cdd5468b4f9af3f7152fcd62 GIT binary patch literal 439 zcmV;o0Z9IdP)7#?)%-H?;PM_|7=%%8;j-JVe&W)B2t$XmWyYlRxiNzyc5s9^yMNPBd)CGAO9|dF~xg&IDJO@PM(Pl|>61h$K0gns- zZll);K<;ZEbOe3MXwAe5a5*@^=WU63VFXZo$j zBNR>RbQJ?0x1s7X`cnWPOdA@NK)(HW#A4*GWiSFT`P*?VgBC#dSL(7b_rSKSNUq)VYl#y~eSS`i9;06U#< za&m9(y(XnY`+?{+H~0I_Z*qXYjtkv|$!vb=isbeAQOk3sBlkyRT;B{^lOOjx066JH z)C3Uua5O%PFij#XmfLdO>ksIsQpBa|kS;8@Jx>_|LKt|p|FZnhNJiF&foI$cXgt6V zkRL8eB`{4QE1^aKIsy(NAyNR9__r2t4#L1gnnXtNX9?hzax9kH@>)FgE8ndI$T+Sy z1>&i%v~ImAkR}n!aB}z5xa31<|@&MlJvV002ovPDHLk FV1nx5=DPp@ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Constructible/Misc/decals.rsi/surgery.png b/Resources/Textures/Constructible/Misc/decals.rsi/surgery.png new file mode 100644 index 0000000000000000000000000000000000000000..254ada76fd4d76c38965d88101b216d133fa576c GIT binary patch literal 428 zcmV;d0aN~oP)8b{6#iO@TZc{^`v(Hz)G0U|l=}4K$xPUk$%w$57;VB!sAvkm4z0c(m>~lmajo7rCLmPMaMn|VE{sZ$I|Y(5ld1R1 z5Lf}h=}Fs{Q3kpaRM}=H;MXCdHb%o)ul62sr7ZnA{5=9f|6&yA+H@76T>_7|@aynL z28On&&~CzyyElN2+h!%8Ti4kM*j&eBnA`(G0o_qt!{WI+PK8zzKHd{4x!2V*k}{KP zNtwYTZqGJ50pYwGyn7}L&xa|Ptb$%2oPdB1j$L};*_MFNxCuPs0tfY;KmRRXu;3ee Wa;EpAY0Lfq0000ZrE5S&C&UXaqYB^O9*`3;uL2S5}QRCz!O7YKjAk@AL!l_(-nQ|1L} zoFd*6U*VnE@df6*7derI z`Q))x#6#C5%sJB7?YcV`DLU8cu+a|5g$= z+yXEYp)H_Fel81vV|8C?aG)G3RREXJ!}+ z=u32w0IB&9&=PRTIKGO2>SfaT%|?_n(|*wQfxxi={4`zQ*osI<<&4N0#)<_*mYRfF zQ7Y1ECID!Afsqxf30J*b_RUojodSrg-d}-EDgOMo{DvF80mpX7aVb=L_W%F@07*qo IM6N<$f|p#+R{#J2 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Constructible/Misc/decals.rsi/toxin_res.png b/Resources/Textures/Constructible/Misc/decals.rsi/toxin_res.png new file mode 100644 index 0000000000000000000000000000000000000000..c2c35212d0b5bce15bd13d83f7fac3f65358fb13 GIT binary patch literal 433 zcmV;i0Z#sjP)9C7{yTsj_60h4%-%7b zK4T(^|A5+|yah0p-w*rQAHbylt}9!I-TrVMV({|()a%jva<@O6Z{NQlxd<|k(*&pO zO)tdEHi+Z`>th}SP-G1E+sEEMR)DTS`{WDj4Dk8-0m%j8G(oh8006310ML3aGKM%! zFn@b+8u!{2fN~HmBB)wvb23)7(jY#WaR%s`TFFJHna?tKWng{GTNxlDY6}UhcL=)- zLU#$^u>?QKoDtg&84ZApDDm_hG7~`nmsuDh?+gIVmjlfiP-N`)W`IQILlnFOk_&wp z4XGDFOF$6%eiOb8odCuPTrj|pay$ya6)T;gokO_HSNck( zBvmU7V^+yg0ZcOhs94!*H_Nq;oR?s>xzlN%qxspOd$Y}FS6Bhev))&6n&4#V^XI?i blO}xwSDT$DhFH7M00000NkvXXu0mjfS!KEb literal 0 HcmV?d00001 diff --git a/Resources/Textures/Constructible/Misc/decals.rsi/toxins.png b/Resources/Textures/Constructible/Misc/decals.rsi/toxins.png new file mode 100644 index 0000000000000000000000000000000000000000..6c28bfde0033b911a4a60d8c897cef911abd6c47 GIT binary patch literal 424 zcmV;Z0ayNsP)}DLaESq!Z|>kaa2VqAxL`c4M3L;0eCJ#+Tz*$ zOd3+$1mzrnR3B<-PO%E*4S;F@fLt}T1mzV#mkwcbY#Rg6E~qQ654H83(RmsD2B9iQ zrwCwH{YC(`-?%e?A=j}J0DZEMMe;R-3MT0kar(KfYQ@vD-Z}#qa?^z@!l`4-pZ}JR8ubAZ@2ArS S+F42f0000c3@)c4_LB1WwJ6LA$|dYl(88R{SFW#jFF1?g)R(HCZ;Hoe}IvRy$c=S ztSF5VpNZ6=yd}mt-MxFhJOe!N-|^HIu-NP__Z0YeA2-%$e7V@{E}w5-$W7r@TnUNk zanwlSr7cNr3Zy#mA`oT~rmv&Mm}jrdx8&7zdCwJW0#rl^2>_U#mq>MDpIo#aK^0Ui zHw8l6I!9!ShgrlT;;cYf-rN*c0VO1qkO;HLO9f{F)OnaiP(mU%1>(U3xhW9zh25i= z&Itg(syDZ5B_!7StyQ8N!%=}f1B9S25cI{beVPwf63zrj`Zlb3b3nUhWe~6(>H6=T z29x_0cpU)^Ty>AzJ>Y3XtKJ++NTfPJsuNp$c3yJR@d=Q;qyP~DuIJCSWAD3wh*Zy; zYeY^n;B(1zO5mRBxDx`DEFMg(`_T;0x@^zu{kD4}0)WHG*mXRZ;BYdv#W`>$P}hCc z3+nEM&IpXZhZyVO^#_?v*>so&KB2k*0000< KMNUMnLSTZ+z0gbm literal 0 HcmV?d00001 diff --git a/Resources/Textures/Constructible/Misc/decals.rsi/xenobio.png b/Resources/Textures/Constructible/Misc/decals.rsi/xenobio.png new file mode 100644 index 0000000000000000000000000000000000000000..0d9336c01a19f7967bb4e2b70feb77d2b778b4ee GIT binary patch literal 609 zcmV-n0-pVeP)&sxCjImC#BK_Je?5%H?cZ@fl?XVD?ea=K+qT1{X!}mcB>Ry#o1;dHtH-$ zXO)Qv1QJMjx4PQ#Xht)N6Sl~n#*8$+=iJw5F7Vm0V|vl)4d}f{e*gStJ7)_Q&Lf*re%`<%e0i%droe`bqvf*~C=}exa zd1WNEDX1N<28F<$8&~r3i{m!R;yL% zc^G(zBOmQnvk)YwW@`ccZUg;p0|0P&^J?7p7IG&6OnQ0qT6Bdj5{$ZC;*~N2oW2DrxF}V)oE0i+pM=0)?}ZTBQ}M$Eun11cTgkQP z^agZ(aYaN#!|`I{mm#l*;{^@J3z}Z9iHK-=z1~<85uIOLk?D$OtpPc&YMagG8RE#t zXtG2Ycof^FsdhflM&R*&jlKN??Uk%9 vMw2Da23lx`h4&szvb$U3bo9?hv;X)5Tzo~p=G`P)jOX>HZ z5DkELdeo4*AcI}xP!>ZQt`|3SpxiYA`z71mg5StQLlU! zIgoKL@CiJGH<-!%0L+OzUGNdkNJA9?iOP16QVO6ooxkY;G*HTO_jpqg53m zxTv&|zF6&qW#XW8!LVPC%us&v@j){tmr+~pLKz}^W_K|5jJtb&n$3;Rk9RDdAEoyL zsRj1iHLfbP%%>X}EXSq0ffUkHL(vzL&D*Q;cJ%94vwwU6G}j0Z3SOnJ00000NkvXX Hu0mjff|UYh literal 0 HcmV?d00001 diff --git a/Resources/Textures/Constructible/Misc/decals.rsi/xenolab.png b/Resources/Textures/Constructible/Misc/decals.rsi/xenolab.png new file mode 100644 index 0000000000000000000000000000000000000000..21eb486835b9418e35103b15dcfbe06efc4a22b6 GIT binary patch literal 408 zcmV;J0cZY+P)9C6vn?+S-N+rlpz-YQDx{EKtd#AM^8OK4}f}r93T^8#tI=Nr>KJP1v)Th@0bpe zE$0u$@5OD0@+~&c#@`S7*#;Q&-*wa1VX<88uQ7OidA5338yCyf{{H<7vTj)BK@?&) zzq3M&`Ua78gR~SZfGR8SFn_Z4=>@P2Zi)+e>%+V&_9Fl`BMt;>27HPHP-O*zC`1s2 zXKgA@odt3dPTr=6N)Ej}gDBK-nbEc^dkHkiNu4SZKw1iX<{zEyRaTI= zi$#J>vDP~w775yI3t2a3G1tS%ISEbk@#7c(w0SHN4WVMLat7EGYi-nSTL91?=B!ZV zyaXx_(%GS$V0!dy##HGAfOEx~@9ui~{P}PBph4gKfS9#W%prRK0000@e%sdLMBtW1PeZ#xjzNC<%coDQJ-p2r6o5BBiIHN1{pqDf9>mTp}8T z2w*@UQp7GWj|hdx1ZOw9>#Uuf$3}1h44Lo4dHZU<_rz*!`^4=JD zPT$#mG3bAM1-_|h`hu0N_6WE(xENf%e1~yYN3FtyHH0CUW*Tj>KA5S&bveJg55BM8 zzyIzWUYG`EXC1gE?04a-8*qLVo|*^Sj)4tGs$-ejaq_p(&aFYu>TURb6BdpNpg~uS zAYjSQf-@^{b{XzAAgW7jGi7M)!oH`U#deyH1{ZsB9t2YYkn)(B67>iOc!1t?dRf1# zm2~iBh=JKAQ)IIO$;AMfTi}HuX}&|_z8j_#54_5 z;76dsHX`7M`A%Z%<76d~#%H7l&B*2gmB|8-v00000NkvXXu0mjf D8g~Dg literal 0 HcmV?d00001 From 9ffc134f75f4f3bbc8529e368b09aeb662094f22 Mon Sep 17 00:00:00 2001 From: ancientpower Date: Fri, 14 Aug 2020 08:13:32 -0500 Subject: [PATCH 17/48] Fixes overlays not clearing when using the ghost command (#1669) * fixes overlays not clearing when ghosting * fix gonflicts??? * actually fixes gonflicts Co-authored-by: ancientpower --- Content.Server/Observer/Ghost.cs | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/Content.Server/Observer/Ghost.cs b/Content.Server/Observer/Ghost.cs index 493ac615b9..80480b958a 100644 --- a/Content.Server/Observer/Ghost.cs +++ b/Content.Server/Observer/Ghost.cs @@ -4,6 +4,7 @@ using Content.Server.GameObjects.Components.Observer; using Content.Server.Interfaces.GameTicking; using Content.Server.Players; using Content.Shared.GameObjects.Components.Damage; +using Content.Shared.GameObjects.Components.Mobs; using Robust.Server.Interfaces.Console; using Robust.Server.Interfaces.Player; using Robust.Shared.Interfaces.GameObjects; @@ -67,7 +68,12 @@ namespace Content.Server.Observer var ghostComponent = ghost.GetComponent(); ghostComponent.CanReturnToBody = canReturn; - if(canReturn) + if (player.AttachedEntity.TryGetComponent(out ServerOverlayEffectsComponent overlayComponent)) + { + overlayComponent?.RemoveOverlay(SharedOverlayID.CircleMaskOverlay); + } + + if (canReturn) mind.Visit(ghost); else mind.TransferTo(ghost); From 8f1a74dcd1b8973a730ef6aeebe1f9f427886843 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Aguilera=20Puerto?= Date: Fri, 14 Aug 2020 16:10:19 +0200 Subject: [PATCH 18/48] Fix integration tests failing. --- .../Barrels/ServerRangedBarrelComponent.cs | 8 ++--- Resources/Maps/saltern.yml | 35 +++++++++++++++---- 2 files changed, 33 insertions(+), 10 deletions(-) diff --git a/Content.Server/GameObjects/Components/Weapon/Ranged/Barrels/ServerRangedBarrelComponent.cs b/Content.Server/GameObjects/Components/Weapon/Ranged/Barrels/ServerRangedBarrelComponent.cs index 62ba32be5e..b3d6b8e924 100644 --- a/Content.Server/GameObjects/Components/Weapon/Ranged/Barrels/ServerRangedBarrelComponent.cs +++ b/Content.Server/GameObjects/Components/Weapon/Ranged/Barrels/ServerRangedBarrelComponent.cs @@ -112,14 +112,14 @@ namespace Content.Server.GameObjects.Components.Weapon.Ranged.Barrels serializer.DataReadWriteFunction( "angleIncrease", 40 / _fireRate, - angle => _angleIncrease = angle * (float) Math.PI / 180, - () => _angleIncrease / (float) Math.PI / 180); + angle => _angleIncrease = angle * (float) Math.PI / 180f, + () => MathF.Round(_angleIncrease / ((float) Math.PI / 180f), 2)); serializer.DataReadWriteFunction( "angleDecay", 20f, - angle => _angleDecay = angle * (float) Math.PI / 180, - () => _angleDecay / (float) Math.PI / 180); + angle => _angleDecay = angle * (float) Math.PI / 180f, + () => MathF.Round(_angleDecay / ((float) Math.PI / 180f), 2)); serializer.DataField(ref _spreadRatio, "ammoSpreadRatio", 1.0f); diff --git a/Resources/Maps/saltern.yml b/Resources/Maps/saltern.yml index 33a2d4eb9b..e387f022c3 100644 --- a/Resources/Maps/saltern.yml +++ b/Resources/Maps/saltern.yml @@ -11156,6 +11156,33 @@ entities: ? X: 52 Y: -2 : 0 + ? X: -26 + Y: -17 + : 0 + ? X: -25 + Y: -17 + : 0 + ? X: -24 + Y: -17 + : 0 + ? X: -23 + Y: -17 + : 0 + ? X: -22 + Y: -17 + : 0 + ? X: -21 + Y: -17 + : 0 + ? X: -26 + Y: -16 + : 0 + ? X: -26 + Y: -15 + : 0 + ? X: -26 + Y: -14 + : 0 type: GridAtmosphere - uid: 16 type: Wire @@ -37317,9 +37344,7 @@ entities: pos: -13.672081,21.719378 rot: -1.5707963267948966 rad type: Transform - - angleIncrease: 1.9051974E-08 - angleDecay: 1.4288981E-08 - type: BatteryBarrel + - type: BatteryBarrel - anchored: False type: Collidable - containers: @@ -37346,9 +37371,7 @@ entities: pos: -14.515831,21.735003 rot: -1.5707963267948966 rad type: Transform - - angleIncrease: 1.9051974E-08 - angleDecay: 1.4288981E-08 - type: BatteryBarrel + - type: BatteryBarrel - anchored: False type: Collidable - containers: From ff891f106a52ace91fc783dc2871fd7af6479ad3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Aguilera=20Puerto?= Date: Fri, 14 Aug 2020 16:12:08 +0200 Subject: [PATCH 19/48] Interaction outline for base sign. --- Resources/Prototypes/Entities/Constructible/Walls/signs.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/Resources/Prototypes/Entities/Constructible/Walls/signs.yml b/Resources/Prototypes/Entities/Constructible/Walls/signs.yml index 81fb0c8be0..2fead866e8 100644 --- a/Resources/Prototypes/Entities/Constructible/Walls/signs.yml +++ b/Resources/Prototypes/Entities/Constructible/Walls/signs.yml @@ -5,6 +5,7 @@ description: based on what components: - type: Clickable + - type: InteractionOutline - type: Collidable shapes: - !type:PhysShapeAabb From 8ffd2b411ef78a2a0197b2814a6888f6a9f810ce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Aguilera=20Puerto?= Date: Fri, 14 Aug 2020 16:50:11 +0200 Subject: [PATCH 20/48] Make sign names consistent. --- .../Entities/Constructible/Walls/signs.yml | 124 ++++++++++++------ 1 file changed, 86 insertions(+), 38 deletions(-) diff --git a/Resources/Prototypes/Entities/Constructible/Walls/signs.yml b/Resources/Prototypes/Entities/Constructible/Walls/signs.yml index 2fead866e8..3d9cb3c09f 100644 --- a/Resources/Prototypes/Entities/Constructible/Walls/signs.yml +++ b/Resources/Prototypes/Entities/Constructible/Walls/signs.yml @@ -2,7 +2,6 @@ id: BaseSign name: base sign abstract: true - description: based on what components: - type: Clickable - type: InteractionOutline @@ -39,6 +38,7 @@ - MobImpassable - VaultImpassable - SmallImpassable + - Clickable - type: Sprite state: monkey_painting - type: Icon @@ -63,6 +63,7 @@ - MobImpassable - VaultImpassable - SmallImpassable + - Clickable - type: Sprite state: direction_sec - type: Icon @@ -85,6 +86,7 @@ - MobImpassable - VaultImpassable - SmallImpassable + - Clickable - type: Sprite state: direction_evac - type: Icon @@ -107,6 +109,7 @@ - MobImpassable - VaultImpassable - SmallImpassable + - Clickable - type: Sprite state: direction_bridge - type: Icon @@ -129,6 +132,7 @@ - MobImpassable - VaultImpassable - SmallImpassable + - Clickable - type: Sprite state: direction_med - type: Icon @@ -151,6 +155,7 @@ - MobImpassable - VaultImpassable - SmallImpassable + - Clickable - type: Sprite state: direction_eng - type: Icon @@ -173,6 +178,7 @@ - MobImpassable - VaultImpassable - SmallImpassable + - Clickable - type: Sprite state: direction_sci - type: Icon @@ -195,6 +201,7 @@ - MobImpassable - VaultImpassable - SmallImpassable + - Clickable - type: Sprite state: direction_supply - type: Icon @@ -205,7 +212,7 @@ - type: entity parent: BaseSign id: SignArmory - name: ARMORY + name: armory sign components: - type: Collidable shapes: @@ -217,6 +224,7 @@ - MobImpassable - VaultImpassable - SmallImpassable + - Clickable - type: Sprite state: armory - type: Icon @@ -225,7 +233,7 @@ - type: entity parent: BaseSign id: SignToolStorage - name: TOOL STORAGE + name: tool storage sign components: - type: Collidable shapes: @@ -237,6 +245,7 @@ - MobImpassable - VaultImpassable - SmallImpassable + - Clickable - type: Sprite state: ass - type: Icon @@ -245,7 +254,7 @@ - type: entity parent: BaseSign id: SignAnomaly - name: ANOMALY LAB + name: anomaly lab sign components: - type: Collidable shapes: @@ -257,6 +266,7 @@ - MobImpassable - VaultImpassable - SmallImpassable + - Clickable - type: Sprite state: anomaly - type: Icon @@ -265,7 +275,7 @@ - type: entity parent: BaseSign id: SignAtmos - name: ATMOS + name: atmos sign components: - type: Collidable shapes: @@ -277,6 +287,7 @@ - MobImpassable - VaultImpassable - SmallImpassable + - Clickable - type: Sprite state: atmos - type: Icon @@ -285,7 +296,7 @@ - type: entity parent: BaseSign id: SignBar - name: BAR + name: bar sign components: - type: Collidable shapes: @@ -297,6 +308,7 @@ - MobImpassable - VaultImpassable - SmallImpassable + - Clickable - type: Sprite state: bar - type: Icon @@ -305,7 +317,7 @@ - type: entity parent: BaseSign id: SignLibrary - name: LIBRARY + name: library sign components: - type: Collidable shapes: @@ -317,6 +329,7 @@ - MobImpassable - VaultImpassable - SmallImpassable + - Clickable - type: Sprite state: biblio - type: Icon @@ -325,7 +338,7 @@ - type: entity parent: BaseSign id: SignChapel - name: CHAPEL + name: chapel sign components: - type: Collidable shapes: @@ -337,6 +350,7 @@ - MobImpassable - VaultImpassable - SmallImpassable + - Clickable - type: Sprite state: chapel - type: Icon @@ -345,7 +359,7 @@ - type: entity parent: BaseSign id: SignHead - name: HEAD + name: head sign components: - type: Collidable shapes: @@ -357,6 +371,7 @@ - MobImpassable - VaultImpassable - SmallImpassable + - Clickable - type: Sprite state: commander - type: Icon @@ -365,7 +380,7 @@ - type: entity parent: BaseSign id: SignConference - name: CONFERENCE ROOM + name: conference room sign components: - type: Collidable shapes: @@ -377,6 +392,7 @@ - MobImpassable - VaultImpassable - SmallImpassable + - Clickable - type: Sprite state: conference_room - type: Icon @@ -385,7 +401,7 @@ - type: entity parent: BaseSign id: SignDrones - name: DRONES + name: drones sign components: - type: Collidable shapes: @@ -397,6 +413,7 @@ - MobImpassable - VaultImpassable - SmallImpassable + - Clickable - type: Sprite state: drones - type: Icon @@ -405,7 +422,7 @@ - type: entity parent: BaseSign id: SignEngine - name: ENGINE + name: engine sign components: - type: Collidable shapes: @@ -417,6 +434,7 @@ - MobImpassable - VaultImpassable - SmallImpassable + - Clickable - type: Sprite state: engine - type: Icon @@ -425,7 +443,7 @@ - type: entity parent: BaseSign id: SignCloning - name: CLONING + name: cloning sign components: - type: Collidable shapes: @@ -437,6 +455,7 @@ - MobImpassable - VaultImpassable - SmallImpassable + - Clickable - type: Sprite state: cloning - type: Icon @@ -445,7 +464,7 @@ - type: entity parent: BaseSign id: SignInterrogation - name: INTERROGATION + name: interrogation sign components: - type: Collidable shapes: @@ -457,6 +476,7 @@ - MobImpassable - VaultImpassable - SmallImpassable + - Clickable - type: Sprite state: interrogation - type: Icon @@ -465,7 +485,7 @@ - type: entity parent: BaseSign id: SignSurgery - name: SURGERY + name: surgery sign components: - type: Collidable shapes: @@ -477,6 +497,7 @@ - MobImpassable - VaultImpassable - SmallImpassable + - Clickable - type: Sprite state: surgery - type: Icon @@ -484,8 +505,8 @@ - type: entity parent: BaseSign - id: SignTelecoms - name: TELECOMS + id: SignTelecomms + name: telecomms sign components: - type: Collidable shapes: @@ -497,6 +518,7 @@ - MobImpassable - VaultImpassable - SmallImpassable + - Clickable - type: Sprite state: telecoms - type: Icon @@ -505,7 +527,7 @@ - type: entity parent: BaseSign id: SignCargo - name: CARGO + name: cargo sign components: - type: Collidable shapes: @@ -517,6 +539,7 @@ - MobImpassable - VaultImpassable - SmallImpassable + - Clickable - type: Sprite state: cargo - type: Icon @@ -525,7 +548,7 @@ - type: entity parent: BaseSign id: SignCargoDock - name: CARGO DOCK + name: cargo dock sign components: - type: Collidable shapes: @@ -537,6 +560,7 @@ - MobImpassable - VaultImpassable - SmallImpassable + - Clickable - type: Sprite state: cargo_dock - type: Icon @@ -545,7 +569,7 @@ - type: entity parent: BaseSign id: SignChem - name: CHEMISTRY + name: chemistry sign components: - type: Collidable shapes: @@ -557,6 +581,7 @@ - MobImpassable - VaultImpassable - SmallImpassable + - Clickable - type: Sprite state: chem - type: Icon @@ -565,7 +590,7 @@ - type: entity parent: BaseSign id: SignShipDock - name: DOCKING + name: docking sign components: - type: Collidable shapes: @@ -577,6 +602,7 @@ - MobImpassable - VaultImpassable - SmallImpassable + - Clickable - type: Sprite state: dock - type: Icon @@ -585,7 +611,7 @@ - type: entity parent: BaseSign id: SignEngineering - name: ENGINEERING + name: engineering sign components: - type: Collidable shapes: @@ -597,6 +623,7 @@ - MobImpassable - VaultImpassable - SmallImpassable + - Clickable - type: Sprite state: eng - type: Icon @@ -605,7 +632,7 @@ - type: entity parent: BaseSign id: SignEVA - name: EVA + name: EVA sign components: - type: Collidable shapes: @@ -617,6 +644,7 @@ - MobImpassable - VaultImpassable - SmallImpassable + - Clickable - type: Sprite state: eva - type: Icon @@ -625,7 +653,7 @@ - type: entity parent: BaseSign id: SignGravity - name: GRAVITY + name: gravity sign components: - type: Collidable shapes: @@ -637,6 +665,7 @@ - MobImpassable - VaultImpassable - SmallImpassable + - Clickable - type: Sprite state: gravi - type: Icon @@ -645,7 +674,7 @@ - type: entity parent: BaseSign id: SignMedical - name: MEDBAY + name: medbay sign components: - type: Collidable shapes: @@ -657,6 +686,7 @@ - MobImpassable - VaultImpassable - SmallImpassable + - Clickable - type: Sprite state: medbay - type: Icon @@ -665,7 +695,7 @@ - type: entity parent: BaseSign id: SignMorgue - name: MORGUE + name: morgue sign components: - type: Collidable shapes: @@ -677,6 +707,7 @@ - MobImpassable - VaultImpassable - SmallImpassable + - Clickable - type: Sprite state: morgue - type: Icon @@ -685,7 +716,7 @@ - type: entity parent: BaseSign id: SignPrison - name: PRISON + name: prison sign description: components: - type: Collidable @@ -698,6 +729,7 @@ - MobImpassable - VaultImpassable - SmallImpassable + - Clickable - type: Sprite state: prison - type: Icon @@ -706,7 +738,7 @@ - type: entity parent: BaseSign id: SignRND - name: RND + name: research and development sign components: - type: Collidable shapes: @@ -718,6 +750,7 @@ - MobImpassable - VaultImpassable - SmallImpassable + - Clickable - type: Sprite state: rnd - type: Icon @@ -726,7 +759,7 @@ - type: entity parent: BaseSign id: SignScience - name: SCIENCE + name: science sign components: - type: Collidable shapes: @@ -738,6 +771,7 @@ - MobImpassable - VaultImpassable - SmallImpassable + - Clickable - type: Sprite state: sci - type: Icon @@ -746,7 +780,7 @@ - type: entity parent: BaseSign id: SignToxins - name: TOXINS + name: toxins sign components: - type: Collidable shapes: @@ -758,6 +792,7 @@ - MobImpassable - VaultImpassable - SmallImpassable + - Clickable - type: Sprite state: toxins - type: Icon @@ -766,7 +801,7 @@ - type: entity parent: BaseSign id: SignBridge - name: BRIDGE + name: bridge sign components: - type: Collidable shapes: @@ -778,6 +813,7 @@ - MobImpassable - VaultImpassable - SmallImpassable + - Clickable - type: Sprite state: bridge - type: Icon @@ -788,7 +824,7 @@ - type: entity parent: BaseSign id: WarningAir - name: Air warning sign + name: air warning sign description: WARNING! Air flow tube. Ensure the flow is disengaged before working. components: - type: Collidable @@ -801,6 +837,7 @@ - MobImpassable - VaultImpassable - SmallImpassable + - Clickable - type: Sprite state: atmos_air - type: Icon @@ -822,6 +859,7 @@ - MobImpassable - VaultImpassable - SmallImpassable + - Clickable - type: Sprite state: atmos_co2 - type: Icon @@ -843,6 +881,7 @@ - MobImpassable - VaultImpassable - SmallImpassable + - Clickable - type: Sprite state: atmos_n2 - type: Icon @@ -864,6 +903,7 @@ - MobImpassable - VaultImpassable - SmallImpassable + - Clickable - type: Sprite state: atmos_n2o - type: Icon @@ -885,6 +925,7 @@ - MobImpassable - VaultImpassable - SmallImpassable + - Clickable - type: Sprite state: atmos_o2 - type: Icon @@ -906,6 +947,7 @@ - MobImpassable - VaultImpassable - SmallImpassable + - Clickable - type: Sprite state: atmos_phoron - type: Icon @@ -914,7 +956,7 @@ - type: entity parent: BaseSign id: WarningWaste - name: Atmos waste sign + name: atmos waste sign description: WARNING! Waste flow tube. Ensure the flow is disengaged before working. components: - type: Collidable @@ -927,6 +969,7 @@ - MobImpassable - VaultImpassable - SmallImpassable + - Clickable - type: Sprite state: atmos_waste - type: Icon @@ -936,7 +979,7 @@ parent: BaseSign id: PlaqueZum name: zumos plaque - description: This plaque commemorates the rise of the Atmos ZUM division. May they carry the torch that the Atmos ZAS, LINDA and FEA divisions left behind. + description: "This plaque commemorates the rise of the Atmos ZUM division. May they carry the torch that the Atmos ZAS, LINDA and FEA divisions left behind." components: - type: Collidable shapes: @@ -948,6 +991,7 @@ - MobImpassable - VaultImpassable - SmallImpassable + - Clickable - type: Sprite state: zumosplaque - type: Icon @@ -957,7 +1001,7 @@ parent: BaseSign id: PlaqueAtmos name: atmos plaque - description: This plaque commemorates the fall of the Atmos FEA division. For all the charred, dizzy, and brittle men who have died in its hands. + description: "This plaque commemorates the fall of the Atmos FEA division. For all the charred, dizzy, and brittle men who have died in its hands." components: - type: Collidable shapes: @@ -969,6 +1013,7 @@ - MobImpassable - VaultImpassable - SmallImpassable + - Clickable - type: Sprite state: atmosplaque - type: Icon @@ -977,7 +1022,7 @@ - type: entity parent: BaseSign id: SignSmoking - name: No Smoking + name: no smoking sign description: A warning sign which reads 'NO SMOKING' components: - type: Collidable @@ -990,6 +1035,7 @@ - MobImpassable - VaultImpassable - SmallImpassable + - Clickable - type: Sprite state: nosmoking2 - type: Icon @@ -998,7 +1044,7 @@ - type: entity parent: BaseSign id: SignSomethingOld - name: Old Sign + name: old sign description: Technical information of some sort, shame its too worn-out to read. components: - type: Collidable @@ -1011,6 +1057,7 @@ - MobImpassable - VaultImpassable - SmallImpassable + - Clickable - type: Sprite state: something-old1 - type: Icon @@ -1019,7 +1066,7 @@ - type: entity parent: BaseSign id: SignSomethingOld2 - name: Old Sign + name: old sign description: Looks like a planet crashing by some station above it. Its kinda scary. components: - type: Collidable @@ -1032,6 +1079,7 @@ - MobImpassable - VaultImpassable - SmallImpassable + - Clickable - type: Sprite state: something-old2 - type: Icon From 4ebd7e0dbc7d83ea06a2153eb2368a453d5a165d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Aguilera=20Puerto?= Date: Fri, 14 Aug 2020 18:03:52 +0200 Subject: [PATCH 21/48] Welder now exposes temperature to hotspot every update. --- .../GameObjects/Components/Interactable/WelderComponent.cs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Content.Server/GameObjects/Components/Interactable/WelderComponent.cs b/Content.Server/GameObjects/Components/Interactable/WelderComponent.cs index ae8ce17a3d..515ecc8e3c 100644 --- a/Content.Server/GameObjects/Components/Interactable/WelderComponent.cs +++ b/Content.Server/GameObjects/Components/Interactable/WelderComponent.cs @@ -217,6 +217,9 @@ namespace Content.Server.GameObjects.Components.Interactable _solutionComponent?.TryRemoveReagent("chem.WeldingFuel", ReagentUnit.New(FuelLossRate * frameTime)); + Owner.Transform.GridPosition + .GetTileAtmosphere()?.HotspotExpose(700f, 50f, true); + if (Fuel == 0) ToggleWelderStatus(); From 541ba64c80af8b1f5e7ef756fdecce72067d5a37 Mon Sep 17 00:00:00 2001 From: Swept Date: Fri, 14 Aug 2020 09:09:58 -0700 Subject: [PATCH 22/48] More sandbox buttons for fun and pleasure (#1599) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Aghost Button * Toggle Lights Button (Shitcode) * Suicide Button * Toggle Subfloor Button * Changed the X icon for windows to be slimmer * ToggleLights and ToggleSubfloor are no longer shitcode! * Refactors SandboxWindows.cs * Added Shows Spawns Button * Fix * Show Bounding Boxes Button * I guess this helps somewhat? * Nested SandboxWindow.cs inside of SandboxManager.cs for simplicity * Fixes * I forgot what I added * Removed CSI console... for now * Fix build Co-authored-by: Víctor Aguilera Puerto --- Content.Client/Sandbox/SandboxManager.cs | 129 +++++++++++++++++- Content.Client/Sandbox/SandboxWindow.cs | 51 ------- Content.Server/Sandbox/SandboxManager.cs | 27 ++++ .../Sandbox/SharedSandboxManager.cs | 40 +++++- Resources/Textures/Interface/Nano/cross.svg | 87 +----------- .../Textures/Interface/Nano/cross.svg.png | Bin 372 -> 288 bytes 6 files changed, 192 insertions(+), 142 deletions(-) delete mode 100644 Content.Client/Sandbox/SandboxWindow.cs diff --git a/Content.Client/Sandbox/SandboxManager.cs b/Content.Client/Sandbox/SandboxManager.cs index 5e5cda1aa0..fddcf313cf 100644 --- a/Content.Client/Sandbox/SandboxManager.cs +++ b/Content.Client/Sandbox/SandboxManager.cs @@ -1,8 +1,12 @@ using System; using Content.Client.UserInterface; +using Content.Client.GameObjects.EntitySystems; using Content.Shared.Input; using Content.Shared.Sandbox; +using Robust.Client.Console; +using Robust.Client.Interfaces.Console; using Robust.Client.Interfaces.Input; +using Robust.Client.Interfaces.Graphics.Lighting; using Robust.Client.Interfaces.Placement; using Robust.Client.Interfaces.ResourceManagement; using Robust.Client.UserInterface.Controls; @@ -16,9 +20,64 @@ using Robust.Shared.Prototypes; namespace Content.Client.Sandbox { - internal sealed class SandboxManager : SharedSandboxManager, ISandboxManager + // Layout for the SandboxWindow + public class SandboxWindow : SS14Window + { + public Button RespawnButton; + public Button SpawnEntitiesButton; + public Button SpawnTilesButton; + public Button GiveFullAccessButton; //A button that just puts a captain's ID in your hands. + public Button GiveAghostButton; + public Button ToggleLightButton; + public Button SuicideButton; + public Button ToggleSubfloorButton; + public Button ShowMarkersButton; //Shows spawn points + public Button ShowBbButton; //Shows bounding boxes + + public SandboxWindow(ILocalizationManager loc) + { + Resizable = false; + + Title = "Sandbox Panel"; + + var vBox = new VBoxContainer { SeparationOverride = 4 }; + Contents.AddChild(vBox); + + RespawnButton = new Button { Text = loc.GetString("Respawn") }; + vBox.AddChild(RespawnButton); + + SpawnEntitiesButton = new Button { Text = loc.GetString("Spawn Entities") }; + vBox.AddChild(SpawnEntitiesButton); + + SpawnTilesButton = new Button { Text = loc.GetString("Spawn Tiles") }; + vBox.AddChild(SpawnTilesButton); + + GiveFullAccessButton = new Button { Text = loc.GetString("Give AA Id") }; + vBox.AddChild(GiveFullAccessButton); + + GiveAghostButton = new Button { Text = loc.GetString("Ghost") }; + vBox.AddChild(GiveAghostButton); + + ToggleLightButton = new Button { Text = loc.GetString("Toggle Lights"), ToggleMode = true }; + vBox.AddChild(ToggleLightButton); + + ToggleSubfloorButton = new Button { Text = loc.GetString("Toggle Subfloor"), ToggleMode = true }; + vBox.AddChild(ToggleSubfloorButton); + + SuicideButton = new Button { Text = loc.GetString("Suicide") }; + vBox.AddChild(SuicideButton); + + ShowMarkersButton = new Button { Text = loc.GetString("Show Spawns"), ToggleMode = true }; + vBox.AddChild(ShowMarkersButton); + + ShowBbButton = new Button { Text = loc.GetString("Show Bb"), ToggleMode = true }; + vBox.AddChild(ShowBbButton); + } + } + internal class SandboxManager : SharedSandboxManager, ISandboxManager { #pragma warning disable 649 + [Dependency] private readonly IClientConsole _console; [Dependency] private readonly IGameHud _gameHud; [Dependency] private readonly IClientNetManager _netManager; [Dependency] private readonly ILocalizationManager _localization; @@ -37,6 +96,7 @@ namespace Content.Client.Sandbox private EntitySpawnWindow _spawnWindow; private TileSpawnWindow _tilesSpawnWindow; private bool _sandboxWindowToggled; + bool SpawnEntitiesButton { get; set; } public void Initialize() { @@ -47,6 +107,10 @@ namespace Content.Client.Sandbox _netManager.RegisterNetMessage(nameof(MsgSandboxRespawn)); + _netManager.RegisterNetMessage(nameof(MsgSandboxGiveAghost)); + + _netManager.RegisterNetMessage(nameof(MsgSandboxSuicide)); + _gameHud.SandboxButtonToggled = SandboxButtonPressed; _inputManager.SetInputCommand(ContentKeyFunctions.OpenEntitySpawnWindow, @@ -111,12 +175,16 @@ namespace Content.Client.Sandbox _window.SpawnTilesButton.OnPressed += OnSpawnTilesButtonClicked; _window.SpawnEntitiesButton.OnPressed += OnSpawnEntitiesButtonClicked; _window.GiveFullAccessButton.OnPressed += OnGiveAdminAccessButtonClicked; + _window.GiveAghostButton.OnPressed += OnGiveAghostButtonClicked; + _window.ToggleLightButton.OnToggled += OnToggleLightButtonClicked; + _window.SuicideButton.OnPressed += OnSuicideButtonClicked; + _window.ToggleSubfloorButton.OnPressed += OnToggleSubfloorButtonClicked; + _window.ShowMarkersButton.OnPressed += OnShowMarkersButtonClicked; + _window.ShowBbButton.OnPressed += OnShowBbButtonClicked; _window.OpenCentered(); } - - private void WindowOnOnClose() { _window = null; @@ -139,13 +207,44 @@ namespace Content.Client.Sandbox ToggleTilesWindow(); } + private void OnToggleLightButtonClicked(BaseButton.ButtonEventArgs args) + { + ToggleLight(); + } + + private void OnToggleSubfloorButtonClicked(BaseButton.ButtonEventArgs args) + { + ToggleSubfloor(); + } + + private void OnShowMarkersButtonClicked(BaseButton.ButtonEventArgs args) + { + ShowMarkers(); + } + + private void OnShowBbButtonClicked(BaseButton.ButtonEventArgs args) + { + ShowBb(); + } + private void OnGiveAdminAccessButtonClicked(BaseButton.ButtonEventArgs args) { _netManager.ClientSendMessage(_netManager.CreateNetMessage()); } + + private void OnGiveAghostButtonClicked(BaseButton.ButtonEventArgs args) + { + _netManager.ClientSendMessage(_netManager.CreateNetMessage()); + } + + private void OnSuicideButtonClicked(BaseButton.ButtonEventArgs args) + { + _netManager.ClientSendMessage(_netManager.CreateNetMessage()); + } + private void ToggleEntitySpawnWindow() { - if(_spawnWindow == null) + if (_spawnWindow == null) _spawnWindow = new EntitySpawnWindow(_placementManager, _prototypeManager, _resourceCache, _localization); if (_spawnWindow.IsOpen) @@ -161,7 +260,7 @@ namespace Content.Client.Sandbox private void ToggleTilesWindow() { - if(_tilesSpawnWindow == null) + if (_tilesSpawnWindow == null) _tilesSpawnWindow = new TileSpawnWindow(_tileDefinitionManager, _placementManager, _resourceCache); if (_tilesSpawnWindow.IsOpen) @@ -174,5 +273,25 @@ namespace Content.Client.Sandbox _tilesSpawnWindow.OpenToLeft(); } } + + private void ToggleLight() + { + _console.ProcessCommand("togglelight"); + } + + private void ToggleSubfloor() + { + _console.ProcessCommand("showsubfloor"); + } + + private void ShowMarkers() + { + _console.ProcessCommand("showmarkers"); + } + + private void ShowBb() + { + _console.ProcessCommand("showbb"); + } } } diff --git a/Content.Client/Sandbox/SandboxWindow.cs b/Content.Client/Sandbox/SandboxWindow.cs deleted file mode 100644 index b1db694d01..0000000000 --- a/Content.Client/Sandbox/SandboxWindow.cs +++ /dev/null @@ -1,51 +0,0 @@ -using Robust.Client.UserInterface.Controls; -using Robust.Client.UserInterface.CustomControls; -using Robust.Shared.Localization; - -namespace Content.Client.Sandbox -{ - public sealed class SandboxWindow : SS14Window - { - public Button RespawnButton { get; } - public Button SpawnEntitiesButton { get; } - public Button SpawnTilesButton { get; } - - public Button GiveFullAccessButton { get; } //A button that just puts a captain's ID in your hands. - - public SandboxWindow(ILocalizationManager loc) - { - Title = loc.GetString("Sandbox Panel"); - - RespawnButton = new Button - { - Text = loc.GetString("Respawn") - }; - - SpawnEntitiesButton = new Button - { - Text = loc.GetString("Spawn Entities") - }; - - SpawnTilesButton = new Button - { - Text = loc.GetString("Spawn Tiles") - }; - - GiveFullAccessButton = new Button - { - Text = loc.GetString("Give Full Access ID") - }; - - Contents.AddChild(new VBoxContainer - { - Children = - { - RespawnButton, - SpawnEntitiesButton, - SpawnTilesButton, - GiveFullAccessButton - } - }); - } - } -} diff --git a/Content.Server/Sandbox/SandboxManager.cs b/Content.Server/Sandbox/SandboxManager.cs index 3492db968c..0b63ac5644 100644 --- a/Content.Server/Sandbox/SandboxManager.cs +++ b/Content.Server/Sandbox/SandboxManager.cs @@ -1,8 +1,10 @@ +using Content.Server.GameObjects.Components; using Content.Server.GameObjects.Components.GUI; using Content.Server.GameObjects.Components.Items.Storage; using Content.Server.GameTicking; using Content.Server.Interfaces.GameTicking; using Content.Shared.Sandbox; +using Robust.Server.Interfaces.Console; using Robust.Server.Console; using Robust.Server.Interfaces.Placement; using Robust.Server.Interfaces.Player; @@ -24,6 +26,7 @@ namespace Content.Server.Sandbox [Dependency] private readonly IPlacementManager _placementManager; [Dependency] private readonly IConGroupController _conGroupController; [Dependency] private readonly IEntityManager _entityManager; + [Dependency] private readonly IConsoleShell _shell; #pragma warning restore 649 private bool _isSandboxEnabled; @@ -44,6 +47,8 @@ namespace Content.Server.Sandbox _netManager.RegisterNetMessage(nameof(MsgSandboxStatus)); _netManager.RegisterNetMessage(nameof(MsgSandboxRespawn), SandboxRespawnReceived); _netManager.RegisterNetMessage(nameof(MsgSandboxGiveAccess), SandboxGiveAccessReceived); + _netManager.RegisterNetMessage(nameof(MsgSandboxGiveAghost), SandboxGiveAghostReceived); + _netManager.RegisterNetMessage(nameof(MsgSandboxSuicide), SandboxSuicideReceived); _playerManager.PlayerStatusChanged += OnPlayerStatusChanged; _gameTicker.OnRunLevelChanged += GameTickerOnOnRunLevelChanged; @@ -116,6 +121,28 @@ namespace Content.Server.Sandbox } } + private void SandboxGiveAghostReceived(MsgSandboxGiveAghost message) + { + if (!IsSandboxEnabled) + { + return; + } + + var player = _playerManager.GetSessionByChannel(message.MsgChannel); + _shell.ExecuteCommand(player, $"aghost"); + } + + private void SandboxSuicideReceived(MsgSandboxSuicide message) + { + if (!IsSandboxEnabled) + { + return; + } + + var player = _playerManager.GetSessionByChannel(message.MsgChannel); + _shell.ExecuteCommand(player, $"suicide"); + } + private void UpdateSandboxStatusForAll() { var msg = _netManager.CreateNetMessage(); diff --git a/Content.Shared/Sandbox/SharedSandboxManager.cs b/Content.Shared/Sandbox/SharedSandboxManager.cs index 774ad66443..5276cb911c 100644 --- a/Content.Shared/Sandbox/SharedSandboxManager.cs +++ b/Content.Shared/Sandbox/SharedSandboxManager.cs @@ -1,4 +1,4 @@ -using Lidgren.Network; +using Lidgren.Network; using Robust.Shared.Interfaces.Network; using Robust.Shared.Network; @@ -66,5 +66,43 @@ namespace Content.Shared.Sandbox } } + + protected sealed class MsgSandboxGiveAghost : NetMessage + { + #region REQUIRED + + public const MsgGroups GROUP = MsgGroups.Command; + public const string NAME = nameof(MsgSandboxGiveAghost); + public MsgSandboxGiveAghost(INetChannel channel) : base(NAME, GROUP) { } + + #endregion + public override void ReadFromBuffer(NetIncomingMessage buffer) + { + } + + public override void WriteToBuffer(NetOutgoingMessage buffer) + { + } + + } + + protected sealed class MsgSandboxSuicide : NetMessage + { + #region REQUIRED + + public const MsgGroups GROUP = MsgGroups.Command; + public const string NAME = nameof(MsgSandboxSuicide); + public MsgSandboxSuicide(INetChannel channel) : base(NAME, GROUP) { } + + #endregion + public override void ReadFromBuffer(NetIncomingMessage buffer) + { + } + + public override void WriteToBuffer(NetOutgoingMessage buffer) + { + } + + } } } diff --git a/Resources/Textures/Interface/Nano/cross.svg b/Resources/Textures/Interface/Nano/cross.svg index b91b944e56..a73977ddc9 100644 --- a/Resources/Textures/Interface/Nano/cross.svg +++ b/Resources/Textures/Interface/Nano/cross.svg @@ -1,86 +1,3 @@ - - - - - - - - image/svg+xml - - - - - - - - - - - + + diff --git a/Resources/Textures/Interface/Nano/cross.svg.png b/Resources/Textures/Interface/Nano/cross.svg.png index db213ed45b2e16e8dddac99c6a9e120e2b608afd..539f5f23898ba8e1f0a1d91f435b93112f909bd1 100644 GIT binary patch delta 260 zcmV+f0sH>+0-yqrB!A~gL_t(Ijh)qN3W7ioz;WqwkDEkvhA4ult{EX6p@(&-9`KJX z2e!=}XB=2j#`(GKLkmFK3@D>(Zws{xsgdF_aOWFU2lQ0eK7fh9s|c02IM8!a8}N1f zv@|SuuC@xvVU2k49C`&t@r@o_Lw_dEgQsKqhc>|)z6W*|G<^qaxCzx@E8d8>xZ&6V zZN)=!Q-7SjXbyh@TST)v->)Fc1LH zgB7(K75x7am;*Bm@By@tZ~!tTLzzo{sUe{&%npg9{!#{KT7Cj>ZE#HOsRHiE9&F_2Xq`i z11;l8bYuKNk5ahYNG}~nI<+_R2pwlXUr0OlY@VPK@NMm(A4HRQbNHH`dJCyBHGJtW re*AkgH1=(2Yn2u%Z@b(EvxtZ Date: Fri, 14 Aug 2020 21:55:39 +0200 Subject: [PATCH 23/48] Fix sandbox panel "ghost" button oversight. Now defaults to ghost if you don't have aghost perms. --- Content.Server/Sandbox/SandboxManager.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Content.Server/Sandbox/SandboxManager.cs b/Content.Server/Sandbox/SandboxManager.cs index 0b63ac5644..76cfc201f0 100644 --- a/Content.Server/Sandbox/SandboxManager.cs +++ b/Content.Server/Sandbox/SandboxManager.cs @@ -129,7 +129,8 @@ namespace Content.Server.Sandbox } var player = _playerManager.GetSessionByChannel(message.MsgChannel); - _shell.ExecuteCommand(player, $"aghost"); + + _shell.ExecuteCommand(player, _conGroupController.CanCommand(player, "aghost") ? "aghost" : "ghost"); } private void SandboxSuicideReceived(MsgSandboxSuicide message) From 2dc4bbd60432f590d76a5d13650cca0b1d7a22b3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Aguilera=20Puerto?= Date: Fri, 14 Aug 2020 23:54:50 +0200 Subject: [PATCH 24/48] Fix welder updating when deleted --- .../GameObjects/Components/Interactable/WelderComponent.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Content.Server/GameObjects/Components/Interactable/WelderComponent.cs b/Content.Server/GameObjects/Components/Interactable/WelderComponent.cs index 515ecc8e3c..3f2e07206d 100644 --- a/Content.Server/GameObjects/Components/Interactable/WelderComponent.cs +++ b/Content.Server/GameObjects/Components/Interactable/WelderComponent.cs @@ -212,7 +212,7 @@ namespace Content.Server.GameObjects.Components.Interactable public void OnUpdate(float frameTime) { - if (!HasQuality(ToolQuality.Welding) || !WelderLit) + if (!HasQuality(ToolQuality.Welding) || !WelderLit || Owner.Deleted) return; _solutionComponent?.TryRemoveReagent("chem.WeldingFuel", ReagentUnit.New(FuelLossRate * frameTime)); From a815b50f6df58a1767e24a3d6068fa090c547169 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Aguilera=20Puerto?= Date: Sat, 15 Aug 2020 00:02:17 +0200 Subject: [PATCH 25/48] Welders now use EntityQuery to update instead of subscriptions. --- .../Components/Interactable/WelderComponent.cs | 4 +--- .../GameObjects/EntitySystems/WelderSystem.cs | 18 ++++-------------- 2 files changed, 5 insertions(+), 17 deletions(-) diff --git a/Content.Server/GameObjects/Components/Interactable/WelderComponent.cs b/Content.Server/GameObjects/Components/Interactable/WelderComponent.cs index 3f2e07206d..5148071820 100644 --- a/Content.Server/GameObjects/Components/Interactable/WelderComponent.cs +++ b/Content.Server/GameObjects/Components/Interactable/WelderComponent.cs @@ -162,7 +162,6 @@ namespace Content.Server.GameObjects.Components.Interactable if (_pointLightComponent != null) _pointLightComponent.Enabled = false; PlaySoundCollection("WelderOff", -5); - _welderSystem.Unsubscribe(this); return true; } @@ -179,7 +178,6 @@ namespace Content.Server.GameObjects.Components.Interactable if (_pointLightComponent != null) _pointLightComponent.Enabled = true; PlaySoundCollection("WelderOn", -5); - _welderSystem.Subscribe(this); Owner.Transform.GridPosition .GetTileAtmosphere()?.HotspotExpose(700f, 50f, true); @@ -212,7 +210,7 @@ namespace Content.Server.GameObjects.Components.Interactable public void OnUpdate(float frameTime) { - if (!HasQuality(ToolQuality.Welding) || !WelderLit || Owner.Deleted) + if (!HasQuality(ToolQuality.Welding) || !WelderLit) return; _solutionComponent?.TryRemoveReagent("chem.WeldingFuel", ReagentUnit.New(FuelLossRate * frameTime)); diff --git a/Content.Server/GameObjects/EntitySystems/WelderSystem.cs b/Content.Server/GameObjects/EntitySystems/WelderSystem.cs index 411e3546fc..d8b9081e2a 100644 --- a/Content.Server/GameObjects/EntitySystems/WelderSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/WelderSystem.cs @@ -1,6 +1,7 @@ using System.Collections.Generic; using System.Linq; using Content.Server.GameObjects.Components.Interactable; +using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Systems; namespace Content.Server.GameObjects.EntitySystems @@ -10,23 +11,12 @@ namespace Content.Server.GameObjects.EntitySystems ///

public class WelderSystem : EntitySystem { - private readonly HashSet _activeWelders = new HashSet(); - - public bool Subscribe(WelderComponent welder) - { - return _activeWelders.Add(welder); - } - - public bool Unsubscribe(WelderComponent welder) - { - return _activeWelders.Remove(welder); - } - public override void Update(float frameTime) { - foreach (var tool in _activeWelders.ToArray()) + foreach (var welder in EntityManager.ComponentManager.EntityQuery()) { - tool.OnUpdate(frameTime); + if(welder.WelderLit && !welder.Owner.Deleted) + welder.OnUpdate(frameTime); } } } From b2709733a58f61dada18b7cc98ef74d1ad0c58a3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Aguilera=20Puerto?= Date: Sat, 15 Aug 2020 00:12:30 +0200 Subject: [PATCH 26/48] Revert "Welders now use EntityQuery to update instead of subscriptions." This reverts commit a815b50f6df58a1767e24a3d6068fa090c547169 and fixes the issue properly. --- .../Components/Interactable/WelderComponent.cs | 10 +++++++++- .../GameObjects/EntitySystems/WelderSystem.cs | 18 ++++++++++++++---- 2 files changed, 23 insertions(+), 5 deletions(-) diff --git a/Content.Server/GameObjects/Components/Interactable/WelderComponent.cs b/Content.Server/GameObjects/Components/Interactable/WelderComponent.cs index 5148071820..f85e7b64ea 100644 --- a/Content.Server/GameObjects/Components/Interactable/WelderComponent.cs +++ b/Content.Server/GameObjects/Components/Interactable/WelderComponent.cs @@ -162,6 +162,7 @@ namespace Content.Server.GameObjects.Components.Interactable if (_pointLightComponent != null) _pointLightComponent.Enabled = false; PlaySoundCollection("WelderOff", -5); + _welderSystem.Unsubscribe(this); return true; } @@ -178,6 +179,7 @@ namespace Content.Server.GameObjects.Components.Interactable if (_pointLightComponent != null) _pointLightComponent.Enabled = true; PlaySoundCollection("WelderOn", -5); + _welderSystem.Subscribe(this); Owner.Transform.GridPosition .GetTileAtmosphere()?.HotspotExpose(700f, 50f, true); @@ -208,9 +210,15 @@ namespace Content.Server.GameObjects.Components.Interactable } } + protected override void Shutdown() + { + base.Shutdown(); + _welderSystem.Unsubscribe(this); + } + public void OnUpdate(float frameTime) { - if (!HasQuality(ToolQuality.Welding) || !WelderLit) + if (!HasQuality(ToolQuality.Welding) || !WelderLit || Owner.Deleted) return; _solutionComponent?.TryRemoveReagent("chem.WeldingFuel", ReagentUnit.New(FuelLossRate * frameTime)); diff --git a/Content.Server/GameObjects/EntitySystems/WelderSystem.cs b/Content.Server/GameObjects/EntitySystems/WelderSystem.cs index d8b9081e2a..411e3546fc 100644 --- a/Content.Server/GameObjects/EntitySystems/WelderSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/WelderSystem.cs @@ -1,7 +1,6 @@ using System.Collections.Generic; using System.Linq; using Content.Server.GameObjects.Components.Interactable; -using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Systems; namespace Content.Server.GameObjects.EntitySystems @@ -11,12 +10,23 @@ namespace Content.Server.GameObjects.EntitySystems ///
public class WelderSystem : EntitySystem { + private readonly HashSet _activeWelders = new HashSet(); + + public bool Subscribe(WelderComponent welder) + { + return _activeWelders.Add(welder); + } + + public bool Unsubscribe(WelderComponent welder) + { + return _activeWelders.Remove(welder); + } + public override void Update(float frameTime) { - foreach (var welder in EntityManager.ComponentManager.EntityQuery()) + foreach (var tool in _activeWelders.ToArray()) { - if(welder.WelderLit && !welder.Owner.Deleted) - welder.OnUpdate(frameTime); + tool.OnUpdate(frameTime); } } } From f598c6e8c61fb8a8256ba989cb21747c5307932e Mon Sep 17 00:00:00 2001 From: Pieter-Jan Briers Date: Sat, 15 Aug 2020 00:30:02 +0200 Subject: [PATCH 27/48] Make package_release_build.py include PDBs if available. --- Tools/package_release_build.py | 40 +++++++++++++++++++++++++++++----- 1 file changed, 34 insertions(+), 6 deletions(-) diff --git a/Tools/package_release_build.py b/Tools/package_release_build.py index fae399325a..214f478e1c 100755 --- a/Tools/package_release_build.py +++ b/Tools/package_release_build.py @@ -84,8 +84,23 @@ MAC_NATIVES = { "libfreetype.6.dylib" } -SERVER_EXTRA_CONTENT_ASSEMBLIES = [ - "Content.Server.Database.dll" +# Assembly names to copy from content. +# PDBs are included if available, .dll/.pdb appended automatically. +SERVER_CONTENT_ASSEMBLIES = [ + "Content.Server.Database", + "Content.Server", + "Content.Shared" +] + +CLIENT_CONTENT_ASSEMBLIES = [ + "Content.Client", + "Content.Shared" +] + +# Extra assemblies to copy on the server, with a startswith +SERVER_EXTRA_ASSEMBLIES = [ + "Npgsql.", + "Microsoft", ] def main() -> None: @@ -381,16 +396,29 @@ def copy_dir_into_zip(directory, basepath, zipf): def copy_content_assemblies(target, zipf, server): + files = [] if server: source_dir = p("bin", "Content.Server") - files = ["Content.Shared.dll", "Content.Server.dll"] + SERVER_EXTRA_CONTENT_ASSEMBLIES + base_assemblies = SERVER_CONTENT_ASSEMBLIES + + # Additional assemblies that need to be copied such as EFCore. for filename in os.listdir(source_dir): - if filename.startswith("Microsoft.") or filename.startswith("Npgsql."): - files.append(filename) + for extra_assembly_start in SERVER_EXTRA_ASSEMBLIES: + if filename.startswith(extra_assembly_start): + files.append(filename) + break else: source_dir = p("bin", "Content.Client") - files = ["Content.Shared.dll", "Content.Client.dll"] + base_assemblies = CLIENT_CONTENT_ASSEMBLIES + + # Include content assemblies. + for asm in base_assemblies: + files.append(asm + ".dll") + # If PDB available, include it aswell. + pdb_path = asm + ".pdb" + if os.path.exists(p(source_dir, pdb_path)): + files.append(pdb_path) # Write assemblies dir if necessary. if not zip_entry_exists(zipf, target): From 580e14207bb26fd74dd58585517634fc9343eb53 Mon Sep 17 00:00:00 2001 From: Pieter-Jan Briers Date: Sat, 15 Aug 2020 00:33:33 +0200 Subject: [PATCH 28/48] Update submodule --- RobustToolbox | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/RobustToolbox b/RobustToolbox index d4a47778ef..8b931fc56e 160000 --- a/RobustToolbox +++ b/RobustToolbox @@ -1 +1 @@ -Subproject commit d4a47778ef0453f1aebc80de1622e84aa000816b +Subproject commit 8b931fc56eda95557b4497cc6266365148ed3221 From fd40c5157bdb5165fba547add32f923670d48526 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Aguilera=20Puerto?= Date: Sat, 15 Aug 2020 03:20:25 +0200 Subject: [PATCH 29/48] Pressure movements won't affect entities in containers. Use GetCardinalDirection. --- Content.Server/Atmos/TileAtmosphere.cs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/Content.Server/Atmos/TileAtmosphere.cs b/Content.Server/Atmos/TileAtmosphere.cs index 6888dce918..851091f7bd 100644 --- a/Content.Server/Atmos/TileAtmosphere.cs +++ b/Content.Server/Atmos/TileAtmosphere.cs @@ -10,6 +10,7 @@ using Content.Shared.Atmos; using Content.Shared.Audio; using Content.Shared.Maps; using Robust.Server.GameObjects.EntitySystems; +using Robust.Shared.Containers; using Robust.Shared.GameObjects.Components; using Robust.Shared.GameObjects.Systems; using Robust.Shared.Interfaces.GameObjects; @@ -176,7 +177,8 @@ namespace Content.Server.Atmos foreach (var entity in _entityManager.GetEntitiesIntersecting(_mapManager.GetGrid(GridIndex).ParentMapId, Box2.UnitCentered.Translated(GridIndices))) { if (!entity.TryGetComponent(out ICollidableComponent physics) - || !entity.TryGetComponent(out MovedByPressureComponent pressure)) + || !entity.TryGetComponent(out MovedByPressureComponent pressure) + || ContainerHelpers.IsInContainer(entity)) continue; var pressureMovements = physics.EnsureController(); @@ -596,7 +598,7 @@ namespace Content.Server.Atmos if (difference > PressureDifference) { PressureDifference = difference; - _pressureDirection = ((Vector2i) (tile.GridIndices - GridIndices)).GetDir(); + _pressureDirection = ((Vector2i) (tile.GridIndices - GridIndices)).GetCardinalDir(); } } From 02ba98b7cf17f179021583113ff839d8853b3544 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Aguilera=20Puerto?= Date: Sat, 15 Aug 2020 03:20:36 +0200 Subject: [PATCH 30/48] Update submodule --- RobustToolbox | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/RobustToolbox b/RobustToolbox index 8b931fc56e..5819e5ee92 160000 --- a/RobustToolbox +++ b/RobustToolbox @@ -1 +1 @@ -Subproject commit 8b931fc56eda95557b4497cc6266365148ed3221 +Subproject commit 5819e5ee92b287da6306807f8e05efc457c06a6c From ae1f55656e13b005868bb5e01f861098d1eae238 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Aguilera=20Puerto?= Date: Sat, 15 Aug 2020 03:23:57 +0200 Subject: [PATCH 31/48] Fix pressure difference direction being incorrect. --- Content.Server/Atmos/TileAtmosphere.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Content.Server/Atmos/TileAtmosphere.cs b/Content.Server/Atmos/TileAtmosphere.cs index 851091f7bd..eab7e6b9ad 100644 --- a/Content.Server/Atmos/TileAtmosphere.cs +++ b/Content.Server/Atmos/TileAtmosphere.cs @@ -598,7 +598,7 @@ namespace Content.Server.Atmos if (difference > PressureDifference) { PressureDifference = difference; - _pressureDirection = ((Vector2i) (tile.GridIndices - GridIndices)).GetCardinalDir(); + _pressureDirection = ((Vector2i) (GridIndices - tile.GridIndices)).GetCardinalDir(); } } From f791719e31e406c78c82e41a2948aafcfb2467f3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Aguilera=20Puerto?= Date: Sat, 15 Aug 2020 03:38:34 +0200 Subject: [PATCH 32/48] Add damage cooldown to DamageOnHighSpeedImpactComponent. --- .../DamageOnHighSpeedImpactComponent.cs | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/Content.Server/GameObjects/Components/Damage/DamageOnHighSpeedImpactComponent.cs b/Content.Server/GameObjects/Components/Damage/DamageOnHighSpeedImpactComponent.cs index 4e5b4169b2..0dff2a90f2 100644 --- a/Content.Server/GameObjects/Components/Damage/DamageOnHighSpeedImpactComponent.cs +++ b/Content.Server/GameObjects/Components/Damage/DamageOnHighSpeedImpactComponent.cs @@ -1,4 +1,5 @@ -using Content.Server.GameObjects.Components.Mobs; +using System; +using Content.Server.GameObjects.Components.Mobs; using Content.Shared.Audio; using Content.Shared.GameObjects.Components.Damage; using Robust.Server.GameObjects.EntitySystems; @@ -7,6 +8,7 @@ using Robust.Shared.GameObjects.Components; using Robust.Shared.GameObjects.Systems; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Interfaces.Random; +using Robust.Shared.Interfaces.Timing; using Robust.Shared.IoC; using Robust.Shared.Random; using Robust.Shared.Serialization; @@ -17,6 +19,7 @@ namespace Content.Server.GameObjects.Components.Damage public class DamageOnHighSpeedImpactComponent : Component, ICollideBehavior { [Dependency] private IRobustRandom _robustRandom = default!; + [Dependency] private IGameTiming _gameTiming = default!; public override string Name => "DamageOnHighSpeedImpact"; @@ -27,7 +30,9 @@ namespace Content.Server.GameObjects.Components.Damage public string SoundHit { get; set; } = ""; public float StunChance { get; set; } = 0.25f; public int StunMinimumDamage { get; set; } = 10; - public float StunSeconds { get; set; } + public float StunSeconds { get; set; } = 1f; + public float DamageCooldown { get; set; } = 2f; + private TimeSpan _lastHit = TimeSpan.Zero; public override void ExposeData(ObjectSerializer serializer) { @@ -40,6 +45,7 @@ namespace Content.Server.GameObjects.Components.Damage serializer.DataField(this, x => SoundHit, "soundHit", ""); serializer.DataField(this, x => StunChance, "stunChance", 0.25f); serializer.DataField(this, x => StunSeconds, "stunSeconds", 1f); + serializer.DataField(this, x => DamageCooldown, "damageCooldown", 2f); serializer.DataField(this, x => StunMinimumDamage, "stunMinimumDamage", 10); } @@ -51,11 +57,16 @@ namespace Content.Server.GameObjects.Components.Damage if (speed < MinimumSpeed) return; - var damage = (int) (BaseDamage * (speed / MinimumSpeed) * Factor); - if(!string.IsNullOrEmpty(SoundHit)) EntitySystem.Get().PlayFromEntity(SoundHit, collidedWith, AudioHelpers.WithVariation(0.125f).WithVolume(-0.125f)); + if ((_gameTiming.CurTime - _lastHit).TotalSeconds < DamageCooldown) + return; + + _lastHit = _gameTiming.CurTime; + + var damage = (int) (BaseDamage * (speed / MinimumSpeed) * Factor); + if (Owner.TryGetComponent(out StunnableComponent stun) && _robustRandom.Prob(StunChance)) stun.Stun(StunSeconds); From 845f5af7d09361fbd548d561afa3b732eb139f58 Mon Sep 17 00:00:00 2001 From: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com> Date: Sun, 16 Aug 2020 00:03:43 +1000 Subject: [PATCH 33/48] Fix do_after throwing on attaching to new entity (#1679) Co-authored-by: Metal Gear Sloth --- .../Components/DoAfterComponent.cs | 14 ++++++++++++++ .../EntitySystems/DoAfter/DoAfterGui.cs | 19 +++++++++++++++++++ .../EntitySystems/DoAfter/DoAfterSystem.cs | 2 +- 3 files changed, 34 insertions(+), 1 deletion(-) diff --git a/Content.Client/GameObjects/Components/DoAfterComponent.cs b/Content.Client/GameObjects/Components/DoAfterComponent.cs index 1b665d2a31..e751f5a996 100644 --- a/Content.Client/GameObjects/Components/DoAfterComponent.cs +++ b/Content.Client/GameObjects/Components/DoAfterComponent.cs @@ -3,8 +3,10 @@ using System; using System.Collections.Generic; using Content.Client.GameObjects.EntitySystems.DoAfter; using Content.Shared.GameObjects.Components; +using Robust.Client.GameObjects; using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Systems; +using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Interfaces.Network; using Robust.Shared.Interfaces.Timing; using Robust.Shared.IoC; @@ -38,6 +40,18 @@ namespace Content.Client.GameObjects.Components } } + public override void HandleMessage(ComponentMessage message, IComponent? component) + { + base.HandleMessage(message, component); + switch (message) + { + case PlayerDetachedMsg _: + _doAfters.Clear(); + CancelledDoAfters.Clear(); + break; + } + } + /// /// Remove a DoAfter without showing a cancellation graphic. /// diff --git a/Content.Client/GameObjects/EntitySystems/DoAfter/DoAfterGui.cs b/Content.Client/GameObjects/EntitySystems/DoAfter/DoAfterGui.cs index 35ea070048..b46b359ff4 100644 --- a/Content.Client/GameObjects/EntitySystems/DoAfter/DoAfterGui.cs +++ b/Content.Client/GameObjects/EntitySystems/DoAfter/DoAfterGui.cs @@ -43,6 +43,25 @@ namespace Content.Client.GameObjects.EntitySystems.DoAfter LayoutContainer.SetGrowVertical(this, LayoutContainer.GrowDirection.Begin); } + /// + /// Called when the mind is detached from an entity + /// + /// Rather than just dispose of the Gui we'll just remove its child controls and re-use the control. + public void Detached() + { + foreach (var (_, control) in _doAfterControls) + { + control.Dispose(); + } + _doAfterControls.Clear(); + foreach (var (_, control) in _doAfterBars) + { + control.Dispose(); + } + _doAfterBars.Clear(); + _cancelledDoAfters.Clear(); + } + /// /// Add the necessary control for a DoAfter progress bar. /// diff --git a/Content.Client/GameObjects/EntitySystems/DoAfter/DoAfterSystem.cs b/Content.Client/GameObjects/EntitySystems/DoAfter/DoAfterSystem.cs index 8ba59fde7f..8aed094c7f 100644 --- a/Content.Client/GameObjects/EntitySystems/DoAfter/DoAfterSystem.cs +++ b/Content.Client/GameObjects/EntitySystems/DoAfter/DoAfterSystem.cs @@ -57,7 +57,7 @@ namespace Content.Client.GameObjects.EntitySystems.DoAfter { _player = entity; // Setup the GUI and pass the new data to it if applicable. - Gui?.Dispose(); + Gui?.Detached(); if (entity == null) { From 915631d51ca524cb99a20e633ee44b9f93a7306a Mon Sep 17 00:00:00 2001 From: ShadowCommander <10494922+ShadowCommander@users.noreply.github.com> Date: Sat, 15 Aug 2020 07:07:09 -0700 Subject: [PATCH 34/48] Refactor collision to use hard instead of a workaround (#1677) --- .../Items/Storage/EntityStorageComponent.cs | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/Content.Server/GameObjects/Components/Items/Storage/EntityStorageComponent.cs b/Content.Server/GameObjects/Components/Items/Storage/EntityStorageComponent.cs index 79bd216244..73d1fd09ca 100644 --- a/Content.Server/GameObjects/Components/Items/Storage/EntityStorageComponent.cs +++ b/Content.Server/GameObjects/Components/Items/Storage/EntityStorageComponent.cs @@ -10,7 +10,6 @@ using Content.Shared.GameObjects.EntitySystems; using Content.Shared.GameObjects.Verbs; using Content.Shared.Interfaces; using Content.Shared.Interfaces.GameObjects.Components; -using Content.Shared.Physics; using Robust.Server.GameObjects; using Robust.Server.GameObjects.Components.Container; using Robust.Server.GameObjects.EntitySystems; @@ -50,8 +49,6 @@ namespace Content.Server.GameObjects.Components.Items.Storage private bool _occludesLight; private bool _open; private bool _isWeldedShut; - private int _collisionMaskStorage; - private int _collisionLayerStorage; [ViewVariables] protected Container Contents; @@ -202,18 +199,13 @@ namespace Content.Server.GameObjects.Components.Items.Storage { if (!_isCollidableWhenOpen && Owner.TryGetComponent(out var collidableComponent)) { - var physShape = collidableComponent.PhysicsShapes[0]; if (Open) { - _collisionMaskStorage = physShape.CollisionMask; - physShape.CollisionMask = (int)CollisionGroup.Impassable; - _collisionLayerStorage = physShape.CollisionLayer; - physShape.CollisionLayer = (int)CollisionGroup.None; + collidableComponent.Hard = false; } else { - physShape.CollisionMask = _collisionMaskStorage; - physShape.CollisionLayer = _collisionLayerStorage; + collidableComponent.Hard = true; } } From 898e2782665c13443f644723a70a30bf65e34b1f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Aguilera=20Puerto?= Date: Sat, 15 Aug 2020 16:20:31 +0200 Subject: [PATCH 35/48] Fix some atmos tiles not being added correctly. --- .../GameObjects/Components/Atmos/GridAtmosphereComponent.cs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Content.Server/GameObjects/Components/Atmos/GridAtmosphereComponent.cs b/Content.Server/GameObjects/Components/Atmos/GridAtmosphereComponent.cs index c7207ffa4e..cb938944b4 100644 --- a/Content.Server/GameObjects/Components/Atmos/GridAtmosphereComponent.cs +++ b/Content.Server/GameObjects/Components/Atmos/GridAtmosphereComponent.cs @@ -154,13 +154,14 @@ namespace Content.Server.GameObjects.Components.Atmos if (tile == null) { tile = new TileAtmosphere(this, _grid.Index, indices, new GasMixture(GetVolumeForCells(1)){Temperature = Atmospherics.T20C}); - _tiles.Add(indices, tile); + _tiles[indices] = tile; } if (IsSpace(indices)) { tile.Air = new GasMixture(GetVolumeForCells(1)); tile.Air.MarkImmutable(); + _tiles[indices] = tile; } else if (IsAirBlocked(indices)) { @@ -176,6 +177,7 @@ namespace Content.Server.GameObjects.Components.Atmos { var adjacent = GetAdjacentTiles(indices); tile.Air = new GasMixture(GetVolumeForCells(1)){Temperature = Atmospherics.T20C}; + _tiles[indices] = tile; var ratio = 1f / adjacent.Count; From 67fbdb96b3b3da23db00e61110fd41b57d6bb055 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Aguilera=20Puerto?= Date: Sat, 15 Aug 2020 16:36:51 +0200 Subject: [PATCH 36/48] Fix deconstructing walls creating an atmos void. This caused a lot of high pressure movements. --- .../Atmos/IGridAtmosphereComponent.cs | 5 +++ Content.Server/Atmos/TileAtmosphere.cs | 1 - .../Components/Atmos/AirtightComponent.cs | 16 ++++------ .../Atmos/GridAtmosphereComponent.cs | 32 ++++++++++++------- 4 files changed, 31 insertions(+), 23 deletions(-) diff --git a/Content.Server/Atmos/IGridAtmosphereComponent.cs b/Content.Server/Atmos/IGridAtmosphereComponent.cs index 430c674bce..5518881767 100644 --- a/Content.Server/Atmos/IGridAtmosphereComponent.cs +++ b/Content.Server/Atmos/IGridAtmosphereComponent.cs @@ -40,6 +40,11 @@ namespace Content.Server.Atmos /// void Invalidate(MapIndices indices); + /// + /// Attempts to fix a sudden vacuum by creating gas. + /// + void FixVacuum(MapIndices indices); + /// /// Adds an active tile so it becomes processed every update until it becomes inactive. /// Also makes the tile excited. diff --git a/Content.Server/Atmos/TileAtmosphere.cs b/Content.Server/Atmos/TileAtmosphere.cs index eab7e6b9ad..5331f215f5 100644 --- a/Content.Server/Atmos/TileAtmosphere.cs +++ b/Content.Server/Atmos/TileAtmosphere.cs @@ -78,7 +78,6 @@ namespace Content.Server.Atmos [ViewVariables] public Hotspot Hotspot; - [ViewVariables] private Direction _pressureDirection; [ViewVariables] diff --git a/Content.Server/GameObjects/Components/Atmos/AirtightComponent.cs b/Content.Server/GameObjects/Components/Atmos/AirtightComponent.cs index 478dd540cb..07c6ed66e9 100644 --- a/Content.Server/GameObjects/Components/Atmos/AirtightComponent.cs +++ b/Content.Server/GameObjects/Components/Atmos/AirtightComponent.cs @@ -40,7 +40,7 @@ namespace Content.Server.GameObjects.Components.Atmos base.ExposeData(serializer); serializer.DataField(ref _airBlocked, "airBlocked", true); - serializer.DataField(ref _fixVacuum, "fixVacuum", false); + serializer.DataField(ref _fixVacuum, "fixVacuum", true); } public override void Initialize() @@ -57,15 +57,6 @@ namespace Content.Server.GameObjects.Components.Atmos UpdatePosition(); } - public override void OnRemove() - { - base.OnRemove(); - - _airBlocked = false; - - UpdatePosition(); - } - public void MapInit() { _snapGrid.OnPositionChanged += OnTransformMove; @@ -80,6 +71,11 @@ namespace Content.Server.GameObjects.Components.Atmos _airBlocked = false; _snapGrid.OnPositionChanged -= OnTransformMove; + + if(_fixVacuum) + EntitySystem.Get().GetGridAtmosphere(Owner.Transform.GridID)? + .FixVacuum(_snapGrid.Position); + UpdatePosition(); } diff --git a/Content.Server/GameObjects/Components/Atmos/GridAtmosphereComponent.cs b/Content.Server/GameObjects/Components/Atmos/GridAtmosphereComponent.cs index cb938944b4..c872ea8893 100644 --- a/Content.Server/GameObjects/Components/Atmos/GridAtmosphereComponent.cs +++ b/Content.Server/GameObjects/Components/Atmos/GridAtmosphereComponent.cs @@ -175,18 +175,7 @@ namespace Content.Server.GameObjects.Components.Atmos { if (tile.Air == null && obs.FixVacuum) { - var adjacent = GetAdjacentTiles(indices); - tile.Air = new GasMixture(GetVolumeForCells(1)){Temperature = Atmospherics.T20C}; - _tiles[indices] = tile; - - var ratio = 1f / adjacent.Count; - - foreach (var (direction, adj) in adjacent) - { - var mix = adj.Air.RemoveRatio(ratio); - tile.Air.Merge(mix); - adj.Air.Merge(mix); - } + FixVacuum(tile.GridIndices); } } @@ -208,6 +197,25 @@ namespace Content.Server.GameObjects.Components.Atmos _invalidatedCoords.Clear(); } + /// + public void FixVacuum(MapIndices indices) + { + var tile = GetTile(indices); + if (tile?.GridIndex != _grid.Index) return; + var adjacent = GetAdjacentTiles(indices); + tile.Air = new GasMixture(GetVolumeForCells(1)){Temperature = Atmospherics.T20C}; + _tiles[indices] = tile; + + var ratio = 1f / adjacent.Count; + + foreach (var (direction, adj) in adjacent) + { + var mix = adj.Air.RemoveRatio(ratio); + tile.Air.Merge(mix); + adj.Air.Merge(mix); + } + } + /// [MethodImpl(MethodImplOptions.AggressiveInlining)] public void AddActiveTile(TileAtmosphere tile) From e0472622894fb0f97eb4e483820ebf91ee91bb46 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Aguilera=20Puerto?= Date: Sat, 15 Aug 2020 17:16:55 +0200 Subject: [PATCH 37/48] Fix TileAtmosInfo pressure direction being east when created. --- Content.Server/Atmos/TileAtmosphere.cs | 45 +++++++++++++++----------- 1 file changed, 26 insertions(+), 19 deletions(-) diff --git a/Content.Server/Atmos/TileAtmosphere.cs b/Content.Server/Atmos/TileAtmosphere.cs index 5331f215f5..b01bba9baa 100644 --- a/Content.Server/Atmos/TileAtmosphere.cs +++ b/Content.Server/Atmos/TileAtmosphere.cs @@ -220,7 +220,8 @@ namespace Content.Server.Atmos { if (Air == null || (_tileAtmosInfo.LastCycle >= cycleNum)) return; // Already done. - _tileAtmosInfo = new TileAtmosInfo(); + ResetTileAtmosInfo(); + var startingMoles = Air.TotalMoles; var runAtmos = false; @@ -263,7 +264,7 @@ namespace Content.Server.Atmos { if (adj?.Air == null) continue; if(adj._tileAtmosInfo.LastQueueCycle == queueCycle) continue; - adj._tileAtmosInfo = new TileAtmosInfo(); + adj.ResetTileAtmosInfo(); adj._tileAtmosInfo.LastQueueCycle = queueCycle; if(tileCount < Atmospherics.ZumosHardTileLimit) @@ -503,16 +504,16 @@ namespace Content.Server.Atmos for (var i = queueLength - 1; i >= 0; i--) { var tile = queue[i]; - if (tile._tileAtmosInfo.CurrentTransferAmount == 0 || - tile._tileAtmosInfo.CurrentTransferDirection == Direction.Invalid) continue; - tile.AdjustEqMovement(tile._tileAtmosInfo.CurrentTransferDirection, - tile._tileAtmosInfo.CurrentTransferAmount); + if (tile._tileAtmosInfo.CurrentTransferAmount == 0 || tile._tileAtmosInfo.CurrentTransferDirection == Direction.Invalid) + continue; - if (tile._adjacentTiles.TryGetValue(tile._tileAtmosInfo.CurrentTransferDirection, - out var adjacent)) - adjacent._tileAtmosInfo.CurrentTransferAmount += - tile._tileAtmosInfo.CurrentTransferAmount; - tile._tileAtmosInfo.CurrentTransferAmount = 0; + tile.AdjustEqMovement(tile._tileAtmosInfo.CurrentTransferDirection, tile._tileAtmosInfo.CurrentTransferAmount); + + if (tile._adjacentTiles.TryGetValue(tile._tileAtmosInfo.CurrentTransferDirection, out var adjacent)) + { + adjacent._tileAtmosInfo.CurrentTransferAmount += tile._tileAtmosInfo.CurrentTransferAmount; + tile._tileAtmosInfo.CurrentTransferAmount = 0; + } } } @@ -605,8 +606,14 @@ namespace Content.Server.Atmos private void AdjustEqMovement(Direction direction, float molesToMove) { _tileAtmosInfo[direction] += molesToMove; - if(direction != (Direction)(-1) && _adjacentTiles.TryGetValue(direction, out var adj)) - _adjacentTiles[direction]._tileAtmosInfo[direction.GetOpposite()] -= molesToMove; + if(direction != Direction.Invalid && _adjacentTiles.TryGetValue(direction, out var adj)) + adj._tileAtmosInfo[direction.GetOpposite()] -= molesToMove; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private void ResetTileAtmosInfo() + { + _tileAtmosInfo = new TileAtmosInfo {CurrentTransferDirection = Direction.Invalid}; } [MethodImpl(MethodImplOptions.AggressiveInlining)] @@ -928,11 +935,10 @@ namespace Content.Server.Atmos var tiles = new List(); var spaceTiles = new List(); tiles.Add(this); - _tileAtmosInfo = new TileAtmosInfo - { - LastQueueCycle = queueCycle, - CurrentTransferDirection = Direction.Invalid - }; + + ResetTileAtmosInfo(); + _tileAtmosInfo.LastQueueCycle = queueCycle; + var tileCount = 1; for (var i = 0; i < tileCount; i++) { @@ -955,7 +961,8 @@ namespace Content.Server.Atmos tile.ConsiderFirelocks(tile2); if (tile._adjacentTiles[direction]?.Air != null) { - tile2._tileAtmosInfo = new TileAtmosInfo {LastQueueCycle = queueCycle}; + tile2.ResetTileAtmosInfo(); + tile2._tileAtmosInfo.LastQueueCycle = queueCycle; tiles.Add(tile2); tileCount++; } From c3df108b27e7797f274e5619bbabab7fb236e05f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Aguilera=20Puerto?= <6766154+Zumorica@users.noreply.github.com> Date: Sat, 15 Aug 2020 20:33:42 +0200 Subject: [PATCH 38/48] Stripping (#1668) * Start work on stripping. * more strippable work * Stripping works * Nullable * MORE NULLABLE * nullable moment * life is pain * Interaction check. * Update Content.Client/GameObjects/Components/HUD/Inventory/StrippableBoundUserInterface.cs Co-authored-by: DrSmugleaf * Update Content.Client/GameObjects/Components/HUD/Inventory/StrippableBoundUserInterface.cs Co-authored-by: DrSmugleaf * Update Content.Server/GameObjects/Components/GUI/HandsComponent.cs Co-authored-by: DrSmugleaf * Update Content.Server/GameObjects/Components/GUI/HandsComponent.cs Co-authored-by: DrSmugleaf * Update Content.Server/GameObjects/Components/GUI/HandsComponent.cs Co-authored-by: DrSmugleaf * Update Content.Server/GameObjects/Components/GUI/StrippableComponent.cs Co-authored-by: DrSmugleaf * Update Content.Server/GameObjects/Components/GUI/StrippableComponent.cs Co-authored-by: DrSmugleaf * Update Content.Server/GameObjects/Components/GUI/HandsComponent.cs Co-authored-by: DrSmugleaf * Update Content.Server/GameObjects/Components/GUI/StrippableComponent.cs Co-authored-by: DrSmugleaf * Update Content.Server/GameObjects/Components/GUI/StrippableComponent.cs Co-authored-by: DrSmugleaf * Update Content.Shared/GameObjects/Components/GUI/SharedStrippableComponent.cs Co-authored-by: DrSmugleaf * Update Content.Server/GameObjects/Components/GUI/StrippableComponent.cs Co-authored-by: DrSmugleaf * Rename InventoryComponent and HandsComponent's OnChanged event to OnItemChanged * Apply suggestions from code review Co-authored-by: DrSmugleaf * Apply suggestions from code review Co-authored-by: DrSmugleaf * Apply suggestions from code review Co-authored-by: DrSmugleaf * Use static EquipmentSlotDefines * Do not expose ContainerSlot on Inventory or Hands. Co-authored-by: DrSmugleaf --- .../Components/GUI/StrippableComponent.cs | 22 ++ .../Inventory/StrippableBoundUserInterface.cs | 81 ++++ .../Components/Items/HandsComponent.cs | 1 + Content.Client/UserInterface/StrippingMenu.cs | 64 +++ .../Components/GUI/HandsComponent.cs | 25 +- .../Components/GUI/InventoryComponent.cs | 66 ++-- .../Components/GUI/StrippableComponent.cs | 372 ++++++++++++++++++ .../Components/Mobs/MindComponent.cs | 4 +- .../Components/Items/IHandsComponent.cs | 33 +- .../GUI/SharedStrippableComponent.cs | 56 +++ .../Entities/Mobs/Species/human.yml | 6 + SpaceStation14.sln.DotSettings | 2 + 12 files changed, 700 insertions(+), 32 deletions(-) create mode 100644 Content.Client/GameObjects/Components/GUI/StrippableComponent.cs create mode 100644 Content.Client/GameObjects/Components/HUD/Inventory/StrippableBoundUserInterface.cs create mode 100644 Content.Client/UserInterface/StrippingMenu.cs create mode 100644 Content.Server/GameObjects/Components/GUI/StrippableComponent.cs create mode 100644 Content.Shared/GameObjects/Components/GUI/SharedStrippableComponent.cs diff --git a/Content.Client/GameObjects/Components/GUI/StrippableComponent.cs b/Content.Client/GameObjects/Components/GUI/StrippableComponent.cs new file mode 100644 index 0000000000..6fa50ded40 --- /dev/null +++ b/Content.Client/GameObjects/Components/GUI/StrippableComponent.cs @@ -0,0 +1,22 @@ +using Content.Client.GameObjects.Components.Items; +using Content.Client.Interfaces.GameObjects.Components.Interaction; +using Content.Shared.GameObjects.Components.GUI; +using Robust.Shared.GameObjects; + +namespace Content.Client.GameObjects.Components.GUI +{ + [RegisterComponent] + public class StrippableComponent : SharedStrippableComponent, IClientDraggable + { + public bool ClientCanDropOn(CanDropEventArgs eventArgs) + { + return eventArgs.Target.HasComponent() + && eventArgs.Target != eventArgs.Dragged && eventArgs.Target == eventArgs.User; + } + + public bool ClientCanDrag(CanDragEventArgs eventArgs) + { + return true; + } + } +} diff --git a/Content.Client/GameObjects/Components/HUD/Inventory/StrippableBoundUserInterface.cs b/Content.Client/GameObjects/Components/HUD/Inventory/StrippableBoundUserInterface.cs new file mode 100644 index 0000000000..afd87e0e06 --- /dev/null +++ b/Content.Client/GameObjects/Components/HUD/Inventory/StrippableBoundUserInterface.cs @@ -0,0 +1,81 @@ +using System.Collections.Generic; +using Content.Client.UserInterface; +using Content.Shared.GameObjects.Components.GUI; +using Content.Shared.GameObjects.Components.Inventory; +using JetBrains.Annotations; +using Robust.Client.GameObjects.Components.UserInterface; +using Robust.Shared.GameObjects.Components.UserInterface; +using Robust.Shared.ViewVariables; +using static Content.Shared.GameObjects.Components.Inventory.EquipmentSlotDefines; + +namespace Content.Client.GameObjects.Components.HUD.Inventory +{ + [UsedImplicitly] + public class StrippableBoundUserInterface : BoundUserInterface + { + public Dictionary Inventory { get; private set; } + public Dictionary Hands { get; private set; } + + [ViewVariables] + private StrippingMenu _strippingMenu; + + public StrippableBoundUserInterface(ClientUserInterfaceComponent owner, object uiKey) : base(owner, uiKey) + { + } + + protected override void Open() + { + base.Open(); + + _strippingMenu = new StrippingMenu($"{Owner.Owner.Name}'s inventory"); + _strippingMenu.OpenCentered(); + UpdateMenu(); + } + + protected override void Dispose(bool disposing) + { + base.Dispose(disposing); + if (!disposing) return; + _strippingMenu.Dispose(); + + _strippingMenu.Close(); + } + + private void UpdateMenu() + { + if (_strippingMenu == null) return; + + _strippingMenu.ClearButtons(); + + if(Inventory != null) + foreach (var (slot, name) in Inventory) + { + _strippingMenu.AddButton(EquipmentSlotDefines.SlotNames[slot], name, (ev) => + { + SendMessage(new StrippingInventoryButtonPressed(slot)); + }); + } + + if(Hands != null) + foreach (var (hand, name) in Hands) + { + _strippingMenu.AddButton(hand, name, (ev) => + { + SendMessage(new StrippingHandButtonPressed(hand)); + }); + } + } + + protected override void UpdateState(BoundUserInterfaceState state) + { + base.UpdateState(state); + + if (!(state is StrippingBoundUserInterfaceState stripState)) return; + + Inventory = stripState.Inventory; + Hands = stripState.Hands; + + UpdateMenu(); + } + } +} diff --git a/Content.Client/GameObjects/Components/Items/HandsComponent.cs b/Content.Client/GameObjects/Components/Items/HandsComponent.cs index 0a024e4195..daa03d74e1 100644 --- a/Content.Client/GameObjects/Components/Items/HandsComponent.cs +++ b/Content.Client/GameObjects/Components/Items/HandsComponent.cs @@ -23,6 +23,7 @@ namespace Content.Client.GameObjects.Components.Items [Dependency] private readonly IGameHud _gameHud = default!; #pragma warning restore 649 + /// private readonly List _hands = new List(); [ViewVariables] public IReadOnlyList Hands => _hands; diff --git a/Content.Client/UserInterface/StrippingMenu.cs b/Content.Client/UserInterface/StrippingMenu.cs new file mode 100644 index 0000000000..3088bd4270 --- /dev/null +++ b/Content.Client/UserInterface/StrippingMenu.cs @@ -0,0 +1,64 @@ +using System; +using Content.Client.UserInterface.Stylesheets; +using Robust.Client.UserInterface; +using Robust.Client.UserInterface.Controls; +using Robust.Client.UserInterface.CustomControls; +using Robust.Shared.Map; +using Robust.Shared.Maths; + +namespace Content.Client.UserInterface +{ + public class StrippingMenu : SS14Window + { + protected override Vector2? CustomSize => new Vector2(400, 600); + + private readonly VBoxContainer _vboxContainer; + + public StrippingMenu(string title) + { + Title = title; + + _vboxContainer = new VBoxContainer() + { + SizeFlagsVertical = SizeFlags.FillExpand, + SeparationOverride = 5, + }; + + Contents.AddChild(_vboxContainer); + } + + public void ClearButtons() + { + _vboxContainer.DisposeAllChildren(); + } + + public void AddButton(string title, string name, Action onPressed) + { + var button = new Button() + { + Text = name, + StyleClasses = { StyleBase.ButtonOpenRight } + }; + + button.OnPressed += onPressed; + + _vboxContainer.AddChild(new HBoxContainer() + { + SizeFlagsHorizontal = SizeFlags.FillExpand, + SeparationOverride = 5, + Children = + { + new Label() + { + Text = $"{title}:" + }, + new Control() + { + SizeFlagsHorizontal = SizeFlags.FillExpand + }, + button, + } + }); + } + } +} diff --git a/Content.Server/GameObjects/Components/GUI/HandsComponent.cs b/Content.Server/GameObjects/Components/GUI/HandsComponent.cs index 0ea707e19c..e9097d40b5 100644 --- a/Content.Server/GameObjects/Components/GUI/HandsComponent.cs +++ b/Content.Server/GameObjects/Components/GUI/HandsComponent.cs @@ -42,6 +42,8 @@ namespace Content.Server.GameObjects.Components.GUI private string? _activeHand; private uint _nextHand; + public event Action? OnItemChanged; + [ViewVariables(VVAccess.ReadWrite)] public string? ActiveHand { @@ -60,6 +62,8 @@ namespace Content.Server.GameObjects.Components.GUI [ViewVariables] private readonly List _hands = new List(); + public IEnumerable Hands => _hands.Select(h => h.Name); + // Mostly arbitrary. public const float PickupRange = 2; @@ -105,6 +109,12 @@ namespace Content.Server.GameObjects.Components.GUI return GetHand(handName)?.Entity?.GetComponent(); } + public bool TryGetItem(string handName, [MaybeNullWhen(false)] out ItemComponent item) + { + item = GetItem(handName); + return item != null; + } + public ItemComponent? GetActiveHand => ActiveHand == null ? null : GetItem(ActiveHand); @@ -136,6 +146,8 @@ namespace Content.Server.GameObjects.Components.GUI { if (PutInHand(item, hand, false)) { + OnItemChanged?.Invoke(); + return true; } } @@ -156,6 +168,7 @@ namespace Content.Server.GameObjects.Components.GUI if (success) { item.Owner.Transform.LocalPosition = Vector2.Zero; + OnItemChanged?.Invoke(); } _entitySystemManager.GetEntitySystem().HandSelectedInteraction(Owner, item.Owner); @@ -250,6 +263,8 @@ namespace Content.Server.GameObjects.Components.GUI container.Insert(item.Owner); } + OnItemChanged?.Invoke(); + Dirty(); return true; } @@ -300,6 +315,8 @@ namespace Content.Server.GameObjects.Components.GUI container.Insert(item.Owner); } + OnItemChanged?.Invoke(); + Dirty(); return true; } @@ -364,6 +381,8 @@ namespace Content.Server.GameObjects.Components.GUI throw new InvalidOperationException(); } + OnItemChanged?.Invoke(); + Dirty(); return true; } @@ -415,6 +434,8 @@ namespace Content.Server.GameObjects.Components.GUI ActiveHand ??= name; + OnItemChanged?.Invoke(); + Dirty(); } @@ -435,6 +456,8 @@ namespace Content.Server.GameObjects.Components.GUI _activeHand = _hands.FirstOrDefault()?.Name; } + OnItemChanged?.Invoke(); + Dirty(); } @@ -645,7 +668,7 @@ namespace Content.Server.GameObjects.Components.GUI Dirty(); - if (!message.Entity.TryGetComponent(out IPhysicsComponent physics)) + if (!message.Entity.TryGetComponent(out ICollidableComponent physics)) { return; } diff --git a/Content.Server/GameObjects/Components/GUI/InventoryComponent.cs b/Content.Server/GameObjects/Components/GUI/InventoryComponent.cs index aa9f03ac10..1d1e52b6a2 100644 --- a/Content.Server/GameObjects/Components/GUI/InventoryComponent.cs +++ b/Content.Server/GameObjects/Components/GUI/InventoryComponent.cs @@ -33,9 +33,13 @@ namespace Content.Server.GameObjects.Components.GUI #pragma warning restore 649 [ViewVariables] - private readonly Dictionary SlotContainers = new Dictionary(); + private readonly Dictionary _slotContainers = new Dictionary(); - private KeyValuePair? HoverEntity; + private KeyValuePair? _hoverEntity; + + public IEnumerable Slots => _slotContainers.Keys; + + public event Action OnItemChanged; public override void Initialize() { @@ -43,7 +47,7 @@ namespace Content.Server.GameObjects.Components.GUI foreach (var slotName in InventoryInstance.SlotMasks) { - if (slotName != Slots.NONE) + if (slotName != EquipmentSlotDefines.Slots.NONE) { AddSlot(slotName); } @@ -58,7 +62,7 @@ namespace Content.Server.GameObjects.Components.GUI { var multiplier = 1f; - foreach (var (slot, containerSlot) in SlotContainers) + foreach (var (slot, containerSlot) in _slotContainers) { foreach (var entity in containerSlot.ContainedEntities) { @@ -81,7 +85,7 @@ namespace Content.Server.GameObjects.Components.GUI { var multiplier = 1f; - foreach (var (slot, containerSlot) in SlotContainers) + foreach (var (slot, containerSlot) in _slotContainers) { foreach (var entity in containerSlot.ContainedEntities) { @@ -99,7 +103,7 @@ namespace Content.Server.GameObjects.Components.GUI bool IEffectBlocker.CanSlip() { if(Owner.TryGetComponent(out InventoryComponent inventoryComponent) && - inventoryComponent.TryGetSlotItem(Slots.SHOES, out ItemComponent shoes) + inventoryComponent.TryGetSlotItem(EquipmentSlotDefines.Slots.SHOES, out ItemComponent shoes) ) { return EffectBlockerSystem.CanSlip(shoes.Owner); @@ -110,7 +114,7 @@ namespace Content.Server.GameObjects.Components.GUI public override void OnRemove() { - var slots = SlotContainers.Keys.ToList(); + var slots = _slotContainers.Keys.ToList(); foreach (var slot in slots) { RemoveSlot(slot); @@ -140,15 +144,15 @@ namespace Content.Server.GameObjects.Components.GUI } public T GetSlotItem(Slots slot) where T : ItemComponent { - if (!SlotContainers.ContainsKey(slot)) + if (!_slotContainers.ContainsKey(slot)) { return null; } - var containedEntity = SlotContainers[slot].ContainedEntity; + var containedEntity = _slotContainers[slot].ContainedEntity; if (containedEntity?.Deleted == true) { - SlotContainers[slot] = null; + _slotContainers[slot] = null; containedEntity = null; Dirty(); } @@ -169,7 +173,7 @@ namespace Content.Server.GameObjects.Components.GUI /// /// The slot to put the item in. /// The item to insert into the slot. - /// The translated reason why the item cannot be equiped, if this function returns false. Can be null. + /// The translated reason why the item cannot be equipped, if this function returns false. Can be null. /// True if the item was successfully inserted, false otherwise. public bool Equip(Slots slot, ItemComponent item, out string reason) { @@ -184,7 +188,7 @@ namespace Content.Server.GameObjects.Components.GUI return false; } - var inventorySlot = SlotContainers[slot]; + var inventorySlot = _slotContainers[slot]; if (!inventorySlot.Insert(item.Owner)) { return false; @@ -192,6 +196,8 @@ namespace Content.Server.GameObjects.Components.GUI _entitySystemManager.GetEntitySystem().EquippedInteraction(Owner, item.Owner, slot); + OnItemChanged?.Invoke(); + Dirty(); return true; @@ -239,7 +245,7 @@ namespace Content.Server.GameObjects.Components.GUI reason = Loc.GetString("You can't equip this!"); } - return pass && SlotContainers[slot].CanInsert(item.Owner); + return pass && _slotContainers[slot].CanInsert(item.Owner); } public bool CanEquip(Slots slot, ItemComponent item) => CanEquip(slot, item, out var _); @@ -258,7 +264,7 @@ namespace Content.Server.GameObjects.Components.GUI return false; } - var inventorySlot = SlotContainers[slot]; + var inventorySlot = _slotContainers[slot]; var item = inventorySlot.ContainedEntity.GetComponent(); if (!inventorySlot.Remove(inventorySlot.ContainedEntity)) { @@ -271,6 +277,8 @@ namespace Content.Server.GameObjects.Components.GUI _entitySystemManager.GetEntitySystem().UnequippedInteraction(Owner, item.Owner, slot); + OnItemChanged?.Invoke(); + Dirty(); return true; @@ -288,7 +296,7 @@ namespace Content.Server.GameObjects.Components.GUI if (!ActionBlockerSystem.CanUnequip(Owner)) return false; - var InventorySlot = SlotContainers[slot]; + var InventorySlot = _slotContainers[slot]; return InventorySlot.ContainedEntity != null && InventorySlot.CanRemove(InventorySlot.ContainedEntity); } @@ -307,7 +315,12 @@ namespace Content.Server.GameObjects.Components.GUI } Dirty(); - return SlotContainers[slot] = ContainerManagerComponent.Create(GetSlotString(slot), Owner); + + _slotContainers[slot] = ContainerManagerComponent.Create(GetSlotString(slot), Owner); + + OnItemChanged?.Invoke(); + + return _slotContainers[slot]; } /// @@ -331,7 +344,10 @@ namespace Content.Server.GameObjects.Components.GUI "Unable to remove slot as the contained clothing could not be dropped"); } - SlotContainers.Remove(slot); + _slotContainers.Remove(slot); + + OnItemChanged?.Invoke(); + Dirty(); } @@ -342,7 +358,7 @@ namespace Content.Server.GameObjects.Components.GUI /// True if the slot exists, false otherwise. public bool HasSlot(Slots slot) { - return SlotContainers.ContainsKey(slot); + return _slotContainers.ContainsKey(slot); } /// @@ -354,7 +370,7 @@ namespace Content.Server.GameObjects.Components.GUI // make sure this is one of our containers. // Technically the correct way would be to enumerate the possible slot names // comparing with this container, but I might as well put the dictionary to good use. - if (!(container is ContainerSlot slot) || !SlotContainers.ContainsValue(slot)) + if (!(container is ContainerSlot slot) || !_slotContainers.ContainsValue(slot)) return; if (entity.TryGetComponent(out ItemComponent itemComp)) @@ -362,6 +378,8 @@ namespace Content.Server.GameObjects.Components.GUI itemComp.RemovedFromSlot(); } + OnItemChanged?.Invoke(); + Dirty(); } @@ -417,7 +435,7 @@ namespace Content.Server.GameObjects.Components.GUI if (activeHand != null && GetSlotItem(msg.Inventoryslot) == null) { var canEquip = CanEquip(msg.Inventoryslot, activeHand, out var reason); - HoverEntity = new KeyValuePair(msg.Inventoryslot, (activeHand.Owner.Uid, canEquip)); + _hoverEntity = new KeyValuePair(msg.Inventoryslot, (activeHand.Owner.Uid, canEquip)); Dirty(); } @@ -476,7 +494,7 @@ namespace Content.Server.GameObjects.Components.GUI public override ComponentState GetComponentState() { var list = new List>(); - foreach (var (slot, container) in SlotContainers) + foreach (var (slot, container) in _slotContainers) { if (container.ContainedEntity != null) { @@ -484,8 +502,8 @@ namespace Content.Server.GameObjects.Components.GUI } } - var hover = HoverEntity; - HoverEntity = null; + var hover = _hoverEntity; + _hoverEntity = null; return new InventoryComponentState(list, hover); } @@ -497,7 +515,7 @@ namespace Content.Server.GameObjects.Components.GUI return; } - foreach (var slot in SlotContainers.Values.ToList()) + foreach (var slot in _slotContainers.Values.ToList()) { foreach (var entity in slot.ContainedEntities) { diff --git a/Content.Server/GameObjects/Components/GUI/StrippableComponent.cs b/Content.Server/GameObjects/Components/GUI/StrippableComponent.cs new file mode 100644 index 0000000000..e045fd2b5a --- /dev/null +++ b/Content.Server/GameObjects/Components/GUI/StrippableComponent.cs @@ -0,0 +1,372 @@ +using System; +using System.Collections.Generic; +using System.Threading; +using Content.Server.GameObjects.Components.Items.Storage; +using Content.Server.GameObjects.EntitySystems.DoAfter; +using Content.Server.Interfaces; +using Content.Shared.GameObjects.Components.GUI; +using Content.Shared.GameObjects.Components.Inventory; +using Content.Shared.GameObjects.EntitySystems; +using Content.Shared.Interfaces.GameObjects.Components; +using Robust.Server.GameObjects.Components.UserInterface; +using Robust.Server.Interfaces.GameObjects; +using Robust.Server.Interfaces.Player; +using Robust.Shared.GameObjects; +using Robust.Shared.GameObjects.Systems; +using Robust.Shared.Interfaces.GameObjects; +using Robust.Shared.IoC; +using Robust.Shared.Localization; +using Robust.Shared.Log; +using Robust.Shared.ViewVariables; +using static Content.Shared.GameObjects.Components.Inventory.EquipmentSlotDefines; + +namespace Content.Server.GameObjects.Components.GUI +{ + [RegisterComponent] + public sealed class StrippableComponent : SharedStrippableComponent, IDragDrop + { + [Dependency] private IServerNotifyManager _notifyManager = default!; + + public const float StripDelay = 2f; + + [ViewVariables] + private BoundUserInterface _userInterface; + + private InventoryComponent _inventoryComponent; + private HandsComponent _handsComponent; + + public override void Initialize() + { + base.Initialize(); + + _userInterface = Owner.GetComponent().GetBoundUserInterface(StrippingUiKey.Key); + _userInterface.OnReceiveMessage += HandleUserInterfaceMessage; + + _inventoryComponent = Owner.GetComponent(); + _handsComponent = Owner.GetComponent(); + + _inventoryComponent.OnItemChanged += UpdateSubscribed; + + // Initial update. + UpdateSubscribed(); + } + + private void UpdateSubscribed() + { + var inventory = GetInventorySlots(); + var hands = GetHandSlots(); + + _userInterface.SetState(new StrippingBoundUserInterfaceState(inventory, hands)); + } + + public bool CanDragDrop(DragDropEventArgs eventArgs) + { + return eventArgs.User.HasComponent() + && eventArgs.Target != eventArgs.Dropped && eventArgs.Target == eventArgs.User; + } + + public bool DragDrop(DragDropEventArgs eventArgs) + { + if (!eventArgs.User.TryGetComponent(out IActorComponent actor)) return false; + + OpenUserInterface(actor.playerSession); + return true; + } + + private Dictionary GetInventorySlots() + { + var dictionary = new Dictionary(); + + foreach (var slot in _inventoryComponent.Slots) + { + dictionary[slot] = _inventoryComponent.GetSlotItem(slot)?.Owner.Name ?? "None"; + } + + return dictionary; + } + + private Dictionary GetHandSlots() + { + var dictionary = new Dictionary(); + + foreach (var hand in _handsComponent.Hands) + { + dictionary[hand] = _handsComponent.GetItem(hand)?.Owner.Name ?? "None"; + } + + return dictionary; + } + + private void OpenUserInterface(IPlayerSession session) + { + _userInterface.Open(session); + } + + /// + /// Places item in user's active hand to an inventory slot. + /// + private async void PlaceActiveHandItemInInventory(IEntity user, Slots slot) + { + var inventory = Owner.GetComponent(); + var userHands = user.GetComponent(); + var item = userHands.GetActiveHand; + + bool Check() + { + if (!ActionBlockerSystem.CanInteract(user)) + return false; + + if (item == null) + { + _notifyManager.PopupMessageCursor(user, Loc.GetString("You aren't holding anything!")); + return false; + } + + if (!userHands.CanDrop(userHands.ActiveHand!)) + { + _notifyManager.PopupMessageCursor(user, Loc.GetString("You can't drop that!")); + return false; + } + + if (!inventory.HasSlot(slot)) + return false; + + if (inventory.TryGetSlotItem(slot, out ItemComponent _)) + { + _notifyManager.PopupMessageCursor(user, Loc.GetString("{0:They} already {0:have} something there!", Owner)); + return false; + } + + if (!inventory.CanEquip(slot, item)) + { + _notifyManager.PopupMessageCursor(user, Loc.GetString("{0:They} cannot equip that there!", Owner)); + return false; + } + + return true; + } + + var doAfterSystem = EntitySystem.Get(); + + var doAfterArgs = new DoAfterEventArgs(user, StripDelay, CancellationToken.None, Owner) + { + ExtraCheck = Check, + BreakOnStun = true, + BreakOnDamage = true, + BreakOnTargetMove = true, + BreakOnUserMove = true, + NeedHand = true, + }; + + var result = await doAfterSystem.DoAfter(doAfterArgs); + if (result != DoAfterStatus.Finished) return; + + userHands.Drop(item!.Owner, false); + inventory.Equip(slot, item!.Owner); + + UpdateSubscribed(); + } + + /// + /// Places item in user's active hand in one of the entity's hands. + /// + private async void PlaceActiveHandItemInHands(IEntity user, string hand) + { + var hands = Owner.GetComponent(); + var userHands = user.GetComponent(); + var item = userHands.GetActiveHand; + + bool Check() + { + if (!ActionBlockerSystem.CanInteract(user)) + return false; + + if (item == null) + { + _notifyManager.PopupMessageCursor(user, Loc.GetString("You aren't holding anything!")); + return false; + } + + if (!userHands.CanDrop(userHands.ActiveHand!)) + { + _notifyManager.PopupMessageCursor(user, Loc.GetString("You can't drop that!")); + return false; + } + + if (!hands.HasHand(hand)) + return false; + + if (hands.TryGetItem(hand, out var _)) + { + _notifyManager.PopupMessageCursor(user, Loc.GetString("{0:They} already {0:have} something there!", Owner)); + return false; + } + + if (!hands.CanPutInHand(item, hand)) + { + _notifyManager.PopupMessageCursor(user, Loc.GetString("{0:They} cannot put that there!", Owner)); + return false; + } + + return true; + } + + var doAfterSystem = EntitySystem.Get(); + + var doAfterArgs = new DoAfterEventArgs(user, StripDelay, CancellationToken.None, Owner) + { + ExtraCheck = Check, + BreakOnStun = true, + BreakOnDamage = true, + BreakOnTargetMove = true, + BreakOnUserMove = true, + NeedHand = true, + }; + + var result = await doAfterSystem.DoAfter(doAfterArgs); + if (result != DoAfterStatus.Finished) return; + + userHands.Drop(hand, false); + hands.PutInHand(item, hand, false); + UpdateSubscribed(); + } + + /// + /// Takes an item from the inventory and places it in the user's active hand. + /// + private async void TakeItemFromInventory(IEntity user, Slots slot) + { + var inventory = Owner.GetComponent(); + var userHands = user.GetComponent(); + + bool Check() + { + if (!ActionBlockerSystem.CanInteract(user)) + return false; + + if (!inventory.HasSlot(slot)) + return false; + + if (!inventory.TryGetSlotItem(slot, out ItemComponent itemToTake)) + { + _notifyManager.PopupMessageCursor(user, Loc.GetString("{0:They} {0:have} nothing there!", Owner)); + return false; + } + + if (!inventory.CanUnequip(slot)) + { + _notifyManager.PopupMessageCursor(user, Loc.GetString("{0:They} cannot unequip that!", Owner)); + return false; + } + + return true; + } + + var doAfterSystem = EntitySystem.Get(); + + var doAfterArgs = new DoAfterEventArgs(user, StripDelay, CancellationToken.None, Owner) + { + ExtraCheck = Check, + BreakOnStun = true, + BreakOnDamage = true, + BreakOnTargetMove = true, + BreakOnUserMove = true, + }; + + var result = await doAfterSystem.DoAfter(doAfterArgs); + if (result != DoAfterStatus.Finished) return; + + var item = inventory.GetSlotItem(slot); + inventory.Unequip(slot); + userHands.PutInHandOrDrop(item); + UpdateSubscribed(); + } + + /// + /// Takes an item from a hand and places it in the user's active hand. + /// + private async void TakeItemFromHands(IEntity user, string hand) + { + var hands = Owner.GetComponent(); + var userHands = user.GetComponent(); + + bool Check() + { + if (!ActionBlockerSystem.CanInteract(user)) + return false; + + if (!hands.HasHand(hand)) + return false; + + if (!hands.TryGetItem(hand, out var heldItem)) + { + _notifyManager.PopupMessageCursor(user, Loc.GetString("{0:They} {0:have} nothing there!", Owner)); + return false; + } + + if (!hands.CanDrop(hand)) + { + _notifyManager.PopupMessageCursor(user, Loc.GetString("{0:They} cannot drop that!", Owner)); + return false; + } + + return true; + } + + var doAfterSystem = EntitySystem.Get(); + + var doAfterArgs = new DoAfterEventArgs(user, StripDelay, CancellationToken.None, Owner) + { + ExtraCheck = Check, + BreakOnStun = true, + BreakOnDamage = true, + BreakOnTargetMove = true, + BreakOnUserMove = true, + }; + + var result = await doAfterSystem.DoAfter(doAfterArgs); + if (result != DoAfterStatus.Finished) return; + + var item = hands.GetItem(hand); + hands.Drop(hand, false); + userHands.PutInHandOrDrop(item); + UpdateSubscribed(); + } + + private void HandleUserInterfaceMessage(ServerBoundUserInterfaceMessage obj) + { + var user = obj.Session.AttachedEntity; + if (user == null || !(user.TryGetComponent(out HandsComponent userHands))) return; + + var placingItem = userHands.GetActiveHand != null; + + switch (obj.Message) + { + case StrippingInventoryButtonPressed inventoryMessage: + var inventory = Owner.GetComponent(); + + if (inventory.TryGetSlotItem(inventoryMessage.Slot, out ItemComponent _)) + placingItem = false; + + if(placingItem) + PlaceActiveHandItemInInventory(user, inventoryMessage.Slot); + else + TakeItemFromInventory(user, inventoryMessage.Slot); + break; + case StrippingHandButtonPressed handMessage: + var hands = Owner.GetComponent(); + + if (hands.TryGetItem(handMessage.Hand, out _)) + placingItem = false; + + if(placingItem) + PlaceActiveHandItemInHands(user, handMessage.Hand); + else + TakeItemFromHands(user, handMessage.Hand); + break; + default: + break; + } + } + } +} diff --git a/Content.Server/GameObjects/Components/Mobs/MindComponent.cs b/Content.Server/GameObjects/Components/Mobs/MindComponent.cs index 20271f0b23..d148490bd9 100644 --- a/Content.Server/GameObjects/Components/Mobs/MindComponent.cs +++ b/Content.Server/GameObjects/Components/Mobs/MindComponent.cs @@ -132,12 +132,12 @@ namespace Content.Server.GameObjects.Components.Mobs if (!HasMind) { message.AddMarkup(!dead - ? $"[color=red]" + Loc.GetString("{0:They} are totally catatonic. The stresses of life in deep-space must have been too much for {0:them}. Any recovery is unlikely.", Owner) + "[/color]" + ? $"[color=red]" + Loc.GetString("{0:They} {0:are} totally catatonic. The stresses of life in deep-space must have been too much for {0:them}. Any recovery is unlikely.", Owner) + "[/color]" : $"[color=purple]" + Loc.GetString("{0:Their} soul has departed.", Owner) + "[/color]"); } else if (Mind?.Session == null) { - message.AddMarkup("[color=yellow]" + Loc.GetString("{0:They} have a blank, absent-minded stare and appears completely unresponsive to anything. {0:They} may snap out of it soon.", Owner) + "[/color]"); + message.AddMarkup("[color=yellow]" + Loc.GetString("{0:They} {0:have} a blank, absent-minded stare and appears completely unresponsive to anything. {0:They} may snap out of it soon.", Owner) + "[/color]"); } } } diff --git a/Content.Server/Interfaces/GameObjects/Components/Items/IHandsComponent.cs b/Content.Server/Interfaces/GameObjects/Components/Items/IHandsComponent.cs index d631716cc9..e716533285 100644 --- a/Content.Server/Interfaces/GameObjects/Components/Items/IHandsComponent.cs +++ b/Content.Server/Interfaces/GameObjects/Components/Items/IHandsComponent.cs @@ -1,6 +1,11 @@ -using System; +#nullable enable +using System; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using Content.Server.GameObjects; +using Content.Server.GameObjects.Components.GUI; using Content.Server.GameObjects.Components.Items.Storage; +using Content.Shared.GameObjects.Components.Inventory; using Content.Shared.GameObjects.Components.Items; using Content.Shared.GameObjects.EntitySystems; using Robust.Server.GameObjects.Components.Container; @@ -12,10 +17,20 @@ namespace Content.Server.Interfaces.GameObjects.Components.Items { public interface IHandsComponent : ISharedHandsComponent { + /// + /// Invoked when the hand contents changes or when a hand is added/removed. + /// + event Action? OnItemChanged; + + /// + /// The hands in this component. + /// + IEnumerable Hands { get; } + /// /// The hand name of the currently active hand. /// - string ActiveHand { get; set; } + string? ActiveHand { get; set; } /// /// Enumerates over every held item. @@ -27,12 +42,20 @@ namespace Content.Server.Interfaces.GameObjects.Components.Items /// /// The name of the hand to get. /// The item in the held, null if no item is held - ItemComponent GetItem(string handName); + ItemComponent? GetItem(string handName); + + /// + /// Attempts to get an item in a hand. + /// + /// The name of the hand to get. + /// The item in the held, null if no item is held + /// Whether it was holding an item + bool TryGetItem(string handName, [MaybeNullWhen(false)] out ItemComponent item); /// /// Gets item held by the current active hand /// - ItemComponent GetActiveHand { get; } + ItemComponent? GetActiveHand { get; } /// /// Puts an item into any empty hand, preferring the active hand. @@ -78,7 +101,7 @@ namespace Content.Server.Interfaces.GameObjects.Components.Items /// /// true if the entity is held, false otherwise /// - bool TryHand(IEntity entity, out string handName); + bool TryHand(IEntity entity, [MaybeNullWhen(false)] out string handName); /// /// Drops the item contained in the slot to the same position as our entity. diff --git a/Content.Shared/GameObjects/Components/GUI/SharedStrippableComponent.cs b/Content.Shared/GameObjects/Components/GUI/SharedStrippableComponent.cs new file mode 100644 index 0000000000..bcc9b2fc7c --- /dev/null +++ b/Content.Shared/GameObjects/Components/GUI/SharedStrippableComponent.cs @@ -0,0 +1,56 @@ +using System; +using System.Collections.Generic; +using Content.Shared.GameObjects.Components.Inventory; +using Robust.Shared.GameObjects; +using Robust.Shared.GameObjects.Components.UserInterface; +using Robust.Shared.Serialization; +using static Content.Shared.GameObjects.Components.Inventory.EquipmentSlotDefines; + +namespace Content.Shared.GameObjects.Components.GUI +{ + public class SharedStrippableComponent : Component + { + public override string Name => "Strippable"; + + [NetSerializable, Serializable] + public enum StrippingUiKey + { + Key, + } + } + + [NetSerializable, Serializable] + public class StrippingInventoryButtonPressed : BoundUserInterfaceMessage + { + public Slots Slot { get; } + + public StrippingInventoryButtonPressed(Slots slot) + { + Slot = slot; + } + } + + [NetSerializable, Serializable] + public class StrippingHandButtonPressed : BoundUserInterfaceMessage + { + public string Hand { get; } + + public StrippingHandButtonPressed(string hand) + { + Hand = hand; + } + } + + [NetSerializable, Serializable] + public class StrippingBoundUserInterfaceState : BoundUserInterfaceState + { + public Dictionary Inventory { get; } + public Dictionary Hands { get; } + + public StrippingBoundUserInterfaceState(Dictionary inventory, Dictionary hands) + { + Inventory = inventory; + Hands = hands; + } + } +} diff --git a/Resources/Prototypes/Entities/Mobs/Species/human.yml b/Resources/Prototypes/Entities/Mobs/Species/human.yml index b5a18678fd..9259c28043 100644 --- a/Resources/Prototypes/Entities/Mobs/Species/human.yml +++ b/Resources/Prototypes/Entities/Mobs/Species/human.yml @@ -144,6 +144,12 @@ - type: Pullable - type: CanSeeGases - type: DoAfter + - type: Strippable + - type: UserInterface + interfaces: + - key: enum.StrippingUiKey.Key + type: StrippableBoundUserInterface + - type: entity save: false diff --git a/SpaceStation14.sln.DotSettings b/SpaceStation14.sln.DotSettings index f9a53158a2..c93412bf8d 100644 --- a/SpaceStation14.sln.DotSettings +++ b/SpaceStation14.sln.DotSettings @@ -71,10 +71,12 @@ True True True + True True True True True + True True True True From bb781f49759faffc7e4f3d1e8b65c3267d732982 Mon Sep 17 00:00:00 2001 From: ancientpower Date: Sat, 15 Aug 2020 13:34:25 -0500 Subject: [PATCH 39/48] fixes ghosts not having a collidable component and adds a ghost collision flag (#1675) Co-authored-by: ancientpower --- Content.Shared/Physics/CollisionGroup.cs | 1 + Resources/Prototypes/Entities/Mobs/Player/observer.yml | 6 ++++++ 2 files changed, 7 insertions(+) diff --git a/Content.Shared/Physics/CollisionGroup.cs b/Content.Shared/Physics/CollisionGroup.cs index 8ef86b5a6f..0834d69787 100644 --- a/Content.Shared/Physics/CollisionGroup.cs +++ b/Content.Shared/Physics/CollisionGroup.cs @@ -20,6 +20,7 @@ namespace Content.Shared.Physics VaultImpassable = 1 << 3, // 8 Things that cannot be jumped over, not half walls or tables SmallImpassable = 1 << 4, // 16 Things a smaller object - a cat, a crab - can't go through - a wall, but not a computer terminal or a table Clickable = 1 << 5, // 32 Temporary "dummy" layer to ensure that objects can still be clicked even if they don't collide with anything (you can't interact with objects that have no layer, including items) + GhostImpassable = 1 << 6, // 64 Things impassible by ghosts/observers, ie blessed tiles or forcefields MapGrid = MapGridHelpers.CollisionGroup, // Map grids, like shuttles. This is the actual grid itself, not the walls or other entities connected to the grid. diff --git a/Resources/Prototypes/Entities/Mobs/Player/observer.yml b/Resources/Prototypes/Entities/Mobs/Player/observer.yml index eba5ba58d4..4b6fea353d 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/observer.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/observer.yml @@ -7,6 +7,12 @@ - type: Mind - type: Physics mass: 5 + - type: Collidable + shapes: + - !type:PhysShapeAabb + bounds: "-0.35,-0.35,0.35,0.35" + mask: + - GhostImpassable - type: Eye zoom: 0.5, 0.5 drawFov: false From f37d6343cefc1df2de479fac3ca1f50030d46f4d Mon Sep 17 00:00:00 2001 From: Exp Date: Sat, 15 Aug 2020 20:35:02 +0200 Subject: [PATCH 40/48] Reset velocity after warp (#1680) * Reset velocity after warp * Rather than looping through the controllers manually, just call collidable.stop --- Content.Server/Administration/WarpCommand.cs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Content.Server/Administration/WarpCommand.cs b/Content.Server/Administration/WarpCommand.cs index 4942c6599b..e54bca1671 100644 --- a/Content.Server/Administration/WarpCommand.cs +++ b/Content.Server/Administration/WarpCommand.cs @@ -4,10 +4,12 @@ using Content.Server.GameObjects.Components.Markers; using Robust.Server.Interfaces.Console; using Robust.Server.Interfaces.Player; using Robust.Shared.Enums; +using Robust.Shared.GameObjects.Components; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Interfaces.Map; using Robust.Shared.IoC; using Robust.Shared.Map; +using Robust.Shared.Maths; namespace Content.Server.Administration { @@ -107,6 +109,10 @@ namespace Content.Server.Administration if (found.GridID != GridId.Invalid) { player.AttachedEntity.Transform.GridPosition = found; + if (player.AttachedEntity.TryGetComponent(out ICollidableComponent collidable)) + { + collidable.Stop(); + } } else { From add49860012946fabb0d8e89feb91152dfb6ad02 Mon Sep 17 00:00:00 2001 From: DrSmugleaf Date: Sat, 15 Aug 2020 20:38:37 +0200 Subject: [PATCH 41/48] Fix being able to do most verbs from within a container (#1613) * Fix being able to do most verbs from within a container * Fix missing container check when using global verbs --- .../GameObjects/EntitySystems/VerbSystem.cs | 6 +++ Content.Client/GlobalVerbs/ExamineVerb.cs | 2 + .../EntitySystems/Click/ExamineSystem.cs | 3 +- .../GameObjects/EntitySystems/VerbSystem.cs | 48 +++++++++++++------ .../EntitySystems/ExamineSystemShared.cs | 28 ++++++++--- .../GameObjects/Verbs/GlobalVerb.cs | 6 +++ Content.Shared/GameObjects/Verbs/Verb.cs | 6 +++ 7 files changed, 77 insertions(+), 22 deletions(-) diff --git a/Content.Client/GameObjects/EntitySystems/VerbSystem.cs b/Content.Client/GameObjects/EntitySystems/VerbSystem.cs index 9d73013321..f388263d65 100644 --- a/Content.Client/GameObjects/EntitySystems/VerbSystem.cs +++ b/Content.Client/GameObjects/EntitySystems/VerbSystem.cs @@ -210,6 +210,9 @@ namespace Content.Client.GameObjects.EntitySystems if (verb.RequireInteractionRange && !VerbUtility.InVerbUseRange(user, entity)) continue; + if (verb.BlockedByContainers && !user.IsInSameOrNoContainer(entity)) + continue; + var verbData = verb.GetData(user, component); if (verbData.IsInvisible) @@ -232,6 +235,9 @@ namespace Content.Client.GameObjects.EntitySystems if (globalVerb.RequireInteractionRange && !VerbUtility.InVerbUseRange(user, entity)) continue; + if (globalVerb.BlockedByContainers && !user.IsInSameOrNoContainer(entity)) + continue; + var verbData = globalVerb.GetData(user, entity); if (verbData.IsInvisible) diff --git a/Content.Client/GlobalVerbs/ExamineVerb.cs b/Content.Client/GlobalVerbs/ExamineVerb.cs index 13e6198490..2116290796 100644 --- a/Content.Client/GlobalVerbs/ExamineVerb.cs +++ b/Content.Client/GlobalVerbs/ExamineVerb.cs @@ -11,6 +11,8 @@ namespace Content.Client.GlobalVerbs { public override bool RequireInteractionRange => false; + public override bool BlockedByContainers => false; + public override void GetData(IEntity user, IEntity target, VerbData data) { data.Visibility = VerbVisibility.Visible; diff --git a/Content.Server/GameObjects/EntitySystems/Click/ExamineSystem.cs b/Content.Server/GameObjects/EntitySystems/Click/ExamineSystem.cs index 53fa77c516..1b83b0b3fe 100644 --- a/Content.Server/GameObjects/EntitySystems/Click/ExamineSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/Click/ExamineSystem.cs @@ -4,6 +4,7 @@ using Robust.Server.Interfaces.Player; using Robust.Shared.GameObjects; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.IoC; +using Robust.Shared.Localization; using Robust.Shared.Utility; namespace Content.Server.GameObjects.EntitySystems.Click @@ -19,7 +20,7 @@ namespace Content.Server.GameObjects.EntitySystems.Click static ExamineSystem() { _entityNotFoundMessage = new FormattedMessage(); - _entityNotFoundMessage.AddText("That entity doesn't exist"); + _entityNotFoundMessage.AddText(Loc.GetString("That entity doesn't exist")); } public override void Initialize() diff --git a/Content.Server/GameObjects/EntitySystems/VerbSystem.cs b/Content.Server/GameObjects/EntitySystems/VerbSystem.cs index b0720ccfb3..6de086226a 100644 --- a/Content.Server/GameObjects/EntitySystems/VerbSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/VerbSystem.cs @@ -2,6 +2,7 @@ using System.Reflection; using Content.Shared.GameObjects.Verbs; using Robust.Server.Interfaces.Player; +using Robust.Shared.Containers; using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Systems; using Robust.Shared.Interfaces.GameObjects; @@ -37,6 +38,12 @@ namespace Content.Server.GameObjects.EntitySystems var session = eventArgs.SenderSession; var userEntity = session.AttachedEntity; + if (userEntity == null) + { + Logger.Warning($"{nameof(UseVerb)} called by player {session} with no attached entity."); + return; + } + foreach (var (component, verb) in VerbUtility.GetVerbs(entity)) { if ($"{component.GetType()}:{verb.GetType()}" != use.VerbKey) @@ -44,14 +51,14 @@ namespace Content.Server.GameObjects.EntitySystems continue; } - if (verb.RequireInteractionRange) + if (verb.RequireInteractionRange && !VerbUtility.InVerbUseRange(userEntity, entity)) { - var distanceSquared = (userEntity.Transform.WorldPosition - entity.Transform.WorldPosition) - .LengthSquared; - if (distanceSquared > VerbUtility.InteractionRangeSquared) - { - break; - } + break; + } + + if (verb.BlockedByContainers && !userEntity.IsInSameOrNoContainer(entity)) + { + break; } verb.Activate(userEntity, component); @@ -65,14 +72,15 @@ namespace Content.Server.GameObjects.EntitySystems continue; } - if (globalVerb.RequireInteractionRange) + if (globalVerb.RequireInteractionRange && + !VerbUtility.InVerbUseRange(userEntity, entity)) { - var distanceSquared = (userEntity.Transform.WorldPosition - entity.Transform.WorldPosition) - .LengthSquared; - if (distanceSquared > VerbUtility.InteractionRangeSquared) - { - break; - } + break; + } + + if (globalVerb.BlockedByContainers && !userEntity.IsInSameOrNoContainer(entity)) + { + break; } globalVerb.Activate(userEntity, entity); @@ -92,6 +100,12 @@ namespace Content.Server.GameObjects.EntitySystems var userEntity = player.AttachedEntity; + if (userEntity == null) + { + Logger.Warning($"{nameof(UseVerb)} called by player {player} with no attached entity."); + return; + } + var data = new List(); //Get verbs, component dependent. foreach (var (component, verb) in VerbUtility.GetVerbs(entity)) @@ -99,6 +113,9 @@ namespace Content.Server.GameObjects.EntitySystems if (verb.RequireInteractionRange && !VerbUtility.InVerbUseRange(userEntity, entity)) continue; + if (verb.BlockedByContainers && !userEntity.IsInSameOrNoContainer(entity)) + continue; + var verbData = verb.GetData(userEntity, component); if (verbData.IsInvisible) continue; @@ -113,6 +130,9 @@ namespace Content.Server.GameObjects.EntitySystems if (globalVerb.RequireInteractionRange && !VerbUtility.InVerbUseRange(userEntity, entity)) continue; + if (globalVerb.BlockedByContainers && !userEntity.IsInSameOrNoContainer(entity)) + continue; + var verbData = globalVerb.GetData(userEntity, entity); if (verbData.IsInvisible) continue; diff --git a/Content.Shared/GameObjects/EntitySystems/ExamineSystemShared.cs b/Content.Shared/GameObjects/EntitySystems/ExamineSystemShared.cs index 0e09c98af2..71e0190d8d 100644 --- a/Content.Shared/GameObjects/EntitySystems/ExamineSystemShared.cs +++ b/Content.Shared/GameObjects/EntitySystems/ExamineSystemShared.cs @@ -1,5 +1,7 @@ -using Content.Shared.GameObjects.Components.Mobs; +using System; +using Content.Shared.GameObjects.Components.Mobs; using JetBrains.Annotations; +using Robust.Shared.Containers; using Robust.Shared.GameObjects.Systems; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Maths; @@ -22,6 +24,15 @@ namespace Content.Shared.GameObjects.EntitySystems public const float ExamineRangeSquared = ExamineRange * ExamineRange; protected const float ExamineDetailsRange = 3f; + private static bool IsInDetailsRange(IEntity examiner, IEntity entity) + { + return Get() + .InRangeUnobstructed(examiner.Transform.MapPosition, entity.Transform.MapPosition, + ExamineDetailsRange, predicate: entity0 => entity0 == examiner || entity0 == entity, + ignoreInsideBlocker: true) && + examiner.IsInSameOrNoContainer(entity); + } + [Pure] protected static bool CanExamine(IEntity examiner, IEntity examined) { @@ -40,9 +51,16 @@ namespace Content.Shared.GameObjects.EntitySystems return false; } + Func predicate = entity => entity == examiner || entity == examined; + + if (ContainerHelpers.TryGetContainer(examiner, out var container)) + { + predicate += entity => entity == container.Owner; + } + return Get() .InRangeUnobstructed(examiner.Transform.MapPosition, examined.Transform.MapPosition, - ExamineRange, predicate: entity => entity == examiner || entity == examined, ignoreInsideBlocker:true); + ExamineRange, predicate: predicate, ignoreInsideBlocker:true); } public static FormattedMessage GetExamineText(IEntity entity, IEntity examiner) @@ -60,15 +78,11 @@ namespace Content.Shared.GameObjects.EntitySystems message.PushColor(Color.DarkGray); - var inDetailsRange = Get() - .InRangeUnobstructed(examiner.Transform.MapPosition, entity.Transform.MapPosition, - ExamineDetailsRange, predicate: entity0 => entity0 == examiner || entity0 == entity, ignoreInsideBlocker: true); - //Add component statuses from components that report one foreach (var examineComponent in entity.GetAllComponents()) { var subMessage = new FormattedMessage(); - examineComponent.Examine(subMessage, inDetailsRange); + examineComponent.Examine(subMessage, IsInDetailsRange(examiner, entity)); if (subMessage.Tags.Count == 0) continue; diff --git a/Content.Shared/GameObjects/Verbs/GlobalVerb.cs b/Content.Shared/GameObjects/Verbs/GlobalVerb.cs index ad5ebed628..e14830fab3 100644 --- a/Content.Shared/GameObjects/Verbs/GlobalVerb.cs +++ b/Content.Shared/GameObjects/Verbs/GlobalVerb.cs @@ -20,6 +20,12 @@ namespace Content.Shared.GameObjects.Verbs /// public virtual bool RequireInteractionRange => true; + /// + /// If true, this verb requires both the user and the entity on which + /// this verb resides to be in the same container or no container. + /// + public virtual bool BlockedByContainers => true; + /// /// Gets the visible verb data for the user. /// diff --git a/Content.Shared/GameObjects/Verbs/Verb.cs b/Content.Shared/GameObjects/Verbs/Verb.cs index b4b1f27751..99cf50b24d 100644 --- a/Content.Shared/GameObjects/Verbs/Verb.cs +++ b/Content.Shared/GameObjects/Verbs/Verb.cs @@ -20,6 +20,12 @@ namespace Content.Shared.GameObjects.Verbs /// public virtual bool RequireInteractionRange => true; + /// + /// If true, this verb requires both the user and the entity on which + /// this verb resides to be in the same container or no container. + /// + public virtual bool BlockedByContainers => true; + /// /// Gets the visible verb data for the user. /// From 33baa73f060781b8dfb7c52207b31cbd9bab7f76 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Aguilera=20Puerto?= Date: Sat, 15 Aug 2020 20:42:39 +0200 Subject: [PATCH 42/48] Debug verbs aren't blocked by containers anymore. --- Content.Client/GlobalVerbs/ViewVariablesVerb.cs | 1 + Content.Server/GlobalVerbs/ControlMobVerb.cs | 1 + Content.Server/GlobalVerbs/RejuvenateVerb.cs | 1 + 3 files changed, 3 insertions(+) diff --git a/Content.Client/GlobalVerbs/ViewVariablesVerb.cs b/Content.Client/GlobalVerbs/ViewVariablesVerb.cs index 93e2f1f39a..fd31a6fd0c 100644 --- a/Content.Client/GlobalVerbs/ViewVariablesVerb.cs +++ b/Content.Client/GlobalVerbs/ViewVariablesVerb.cs @@ -13,6 +13,7 @@ namespace Content.Client.GlobalVerbs class ViewVariablesVerb : GlobalVerb { public override bool RequireInteractionRange => false; + public override bool BlockedByContainers => false; public override void GetData(IEntity user, IEntity target, VerbData data) { diff --git a/Content.Server/GlobalVerbs/ControlMobVerb.cs b/Content.Server/GlobalVerbs/ControlMobVerb.cs index 2b69c30c46..390094d763 100644 --- a/Content.Server/GlobalVerbs/ControlMobVerb.cs +++ b/Content.Server/GlobalVerbs/ControlMobVerb.cs @@ -13,6 +13,7 @@ namespace Content.Server.GlobalVerbs public class ControlMobVerb : GlobalVerb { public override bool RequireInteractionRange => false; + public override bool BlockedByContainers => false; public override void GetData(IEntity user, IEntity target, VerbData data) { diff --git a/Content.Server/GlobalVerbs/RejuvenateVerb.cs b/Content.Server/GlobalVerbs/RejuvenateVerb.cs index 11b11e8c2a..5f074e085b 100644 --- a/Content.Server/GlobalVerbs/RejuvenateVerb.cs +++ b/Content.Server/GlobalVerbs/RejuvenateVerb.cs @@ -16,6 +16,7 @@ namespace Content.Server.GlobalVerbs class RejuvenateVerb : GlobalVerb { public override bool RequireInteractionRange => false; + public override bool BlockedByContainers => false; public override void GetData(IEntity user, IEntity target, VerbData data) { From a7fc2bccbde08834743dd954b9de809f23c6d203 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Aguilera=20Puerto?= <6766154+Zumorica@users.noreply.github.com> Date: Sat, 15 Aug 2020 22:43:55 +0200 Subject: [PATCH 43/48] Fixes explosive depressurization and improves high pressure movements (#1683) --- .../Atmos/HighPressureMovementController.cs | 28 +++--- Content.Server/Atmos/TileAtmosphere.cs | 85 ++++++++++--------- 2 files changed, 59 insertions(+), 54 deletions(-) diff --git a/Content.Server/Atmos/HighPressureMovementController.cs b/Content.Server/Atmos/HighPressureMovementController.cs index 60086206b9..2e27f513ad 100644 --- a/Content.Server/Atmos/HighPressureMovementController.cs +++ b/Content.Server/Atmos/HighPressureMovementController.cs @@ -49,19 +49,23 @@ namespace Content.Server.Atmos { - if (maxForce > ThrowForce && throwTarget != GridCoordinates.InvalidGrid) + if (maxForce > ThrowForce) { - var moveForce = MathF.Min(maxForce * FloatMath.Clamp(moveProb, 0, 100) / 100f, 50f); - var pos = throwTarget.Position - transform.GridPosition.Position; - LinearVelocity = pos * moveForce; - } - else - { - var moveForce = MathF.Min(maxForce * FloatMath.Clamp(moveProb, 0, 100) / 100f, 25f); - LinearVelocity = direction.ToVec() * moveForce; - } + if (throwTarget != GridCoordinates.InvalidGrid) + { + var moveForce = maxForce * FloatMath.Clamp(moveProb, 0, 100) / 150f; + var pos = ((throwTarget.Position - transform.GridPosition.Position).Normalized + direction.ToVec()).Normalized; + LinearVelocity = pos * moveForce; + } - pressureComponent.LastHighPressureMovementAirCycle = cycle; + else + { + var moveForce = MathF.Min(maxForce * FloatMath.Clamp(moveProb, 0, 100) / 2500f, 20f); + LinearVelocity = direction.ToVec() * moveForce; + } + + pressureComponent.LastHighPressureMovementAirCycle = cycle; + } } } @@ -72,7 +76,7 @@ namespace Content.Server.Atmos if (ControlledComponent != null && !_physicsManager.IsWeightless(ControlledComponent.Owner.Transform.GridPosition)) { LinearVelocity *= 0.85f; - if (LinearVelocity.Length < 1f) + if (MathF.Abs(LinearVelocity.Length) < 1f) Stop(); } } diff --git a/Content.Server/Atmos/TileAtmosphere.cs b/Content.Server/Atmos/TileAtmosphere.cs index b01bba9baa..8e634a1c7d 100644 --- a/Content.Server/Atmos/TileAtmosphere.cs +++ b/Content.Server/Atmos/TileAtmosphere.cs @@ -17,6 +17,7 @@ using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Interfaces.Map; using Robust.Shared.Interfaces.Random; using Robust.Shared.IoC; +using Robust.Shared.Log; using Robust.Shared.Map; using Robust.Shared.Maths; using Robust.Shared.Random; @@ -105,6 +106,7 @@ namespace Content.Server.Atmos GridIndex = gridIndex; GridIndices = gridIndices; Air = mixture; + ResetTileAtmosInfo(); } [MethodImpl(MethodImplOptions.AggressiveInlining)] @@ -180,6 +182,8 @@ namespace Content.Server.Atmos || ContainerHelpers.IsInContainer(entity)) continue; + physics.WakeBody(); + var pressureMovements = physics.EnsureController(); if (pressure.LastHighPressureMovementAirCycle < _gridAtmosphereComponent.UpdateCounter) { @@ -328,7 +332,7 @@ namespace Content.Server.Atmos var tile = tiles[i]; tile._tileAtmosInfo.FastDone = true; if (!(tile._tileAtmosInfo.MoleDelta > 0)) continue; - Direction eligibleAdjBits = 0; + var eligibleDirections = new List(); var amtEligibleAdj = 0; foreach (var direction in Cardinal) { @@ -338,16 +342,17 @@ namespace Content.Server.Atmos if (tile2._tileAtmosInfo.FastDone || tile2._tileAtmosInfo.LastQueueCycle != queueCycle) continue; - eligibleAdjBits |= direction; + eligibleDirections.Add(direction); amtEligibleAdj++; } if (amtEligibleAdj <= 0) continue; // Oof we've painted ourselves into a corner. Bad luck. Next part will handle this. + var molesToMove = tile._tileAtmosInfo.MoleDelta / amtEligibleAdj; foreach (var direction in Cardinal) { - if ((eligibleAdjBits & direction) == 0 || + if (eligibleDirections.Contains(direction) || !tile._adjacentTiles.TryGetValue(direction, out var tile2)) continue; tile.AdjustEqMovement(direction, molesToMove); tile._tileAtmosInfo.MoleDelta -= molesToMove; @@ -394,13 +399,10 @@ namespace Content.Server.Atmos foreach (var direction in Cardinal) { if (!tile._adjacentTiles.TryGetValue(direction, out var tile2)) continue; - if (giver._tileAtmosInfo.MoleDelta <= 0) - break; // We're done here now. Let's not do more work than needed. - - if (tile2?._tileAtmosInfo == null || tile2._tileAtmosInfo.LastQueueCycle != queueCycle) - continue; - + if (giver._tileAtmosInfo.MoleDelta <= 0) break; // We're done here now. Let's not do more work than needed. + if (tile2._tileAtmosInfo.LastQueueCycle != queueCycle) continue; if (tile2._tileAtmosInfo.LastSlowQueueCycle == queueCycleSlow) continue; + queue[queueLength++] = tile2; tile2._tileAtmosInfo.LastSlowQueueCycle = queueCycleSlow; tile2._tileAtmosInfo.CurrentTransferDirection = direction.GetOpposite(); @@ -458,7 +460,7 @@ namespace Content.Server.Atmos var queueLength = 0; queue[queueLength++] = taker; taker._tileAtmosInfo.LastSlowQueueCycle = queueCycleSlow; - for (int i = 0; i < queueLength; i++) + for (var i = 0; i < queueLength; i++) { if (taker._tileAtmosInfo.MoleDelta >= 0) break; // We're done here now. Let's not do more work than needed. @@ -469,11 +471,8 @@ namespace Content.Server.Atmos if (!tile._adjacentTiles.ContainsKey(direction)) continue; var tile2 = tile._adjacentTiles[direction]; - if (taker._tileAtmosInfo.MoleDelta >= 0) - break; // We're done here now. Let's not do more work than needed. - - if (tile2?._tileAtmosInfo == null || tile2._tileAtmosInfo.LastQueueCycle != queueCycle) - continue; + if (taker._tileAtmosInfo.MoleDelta >= 0) break; // We're done here now. Let's not do more work than needed. + if (tile2._tileAtmosInfo.LastQueueCycle != queueCycle) continue; if (tile2._tileAtmosInfo.LastSlowQueueCycle == queueCycleSlow) continue; queue[queueLength++] = tile2; tile2._tileAtmosInfo.LastSlowQueueCycle = queueCycleSlow; @@ -552,38 +551,34 @@ namespace Content.Server.Atmos foreach (var direction in Cardinal) { var amount = _tileAtmosInfo[direction]; - transferDirections[direction] = amount; if (amount == 0) continue; + transferDirections[direction] = amount; _tileAtmosInfo[direction] = 0; hasTransferDirs = true; } if (!hasTransferDirs) return; - foreach (var direction in Cardinal) + foreach (var (direction, amount) in transferDirections) { - var amount = transferDirections[direction]; if (!_adjacentTiles.TryGetValue(direction, out var tile) || tile.Air == null) continue; if (amount > 0) { - // Prevent infinite recursion. - tile._tileAtmosInfo[direction.GetOpposite()] = 0; - if (Air.TotalMoles < amount) - FinalizeEqNeighbors(); + FinalizeEqNeighbors(transferDirections.Keys); tile.Air.Merge(Air.Remove(amount)); UpdateVisuals(); tile.UpdateVisuals(); - ConsiderPressureDifference(tile, amount); + ConsiderPressureDifference(direction, amount); } } } [MethodImpl(MethodImplOptions.AggressiveInlining)] - private void FinalizeEqNeighbors() + private void FinalizeEqNeighbors(IEnumerable directions) { - foreach (var direction in Cardinal) + foreach (var direction in directions) { var amount = _tileAtmosInfo[direction]; if(amount < 0 && _adjacentTiles.TryGetValue(direction, out var adjacent)) @@ -592,13 +587,13 @@ namespace Content.Server.Atmos } [MethodImpl(MethodImplOptions.AggressiveInlining)] - private void ConsiderPressureDifference(TileAtmosphere tile, float difference) + private void ConsiderPressureDifference(Direction direction, float difference) { _gridAtmosphereComponent.AddHighPressureDelta(this); if (difference > PressureDifference) { PressureDifference = difference; - _pressureDirection = ((Vector2i) (GridIndices - tile.GridIndices)).GetCardinalDir(); + _pressureDirection = difference < 0 ? direction.GetOpposite() : direction; } } @@ -631,7 +626,7 @@ namespace Content.Server.Atmos _currentCycle = fireCount; var adjacentTileLength = 0; - foreach (var (_, enemyTile) in _adjacentTiles) + foreach (var (direction, enemyTile) in _adjacentTiles) { // If the tile is null or has no air, we don't do anything if(enemyTile?.Air == null) continue; @@ -681,11 +676,11 @@ namespace Content.Server.Atmos // Space wind! if (difference > 0) { - ConsiderPressureDifference(enemyTile, difference); + ConsiderPressureDifference(direction, difference); } else { - enemyTile.ConsiderPressureDifference(this, -difference); + enemyTile.ConsiderPressureDifference(direction.GetOpposite(), -difference); } LastShareCheck(); @@ -952,10 +947,10 @@ namespace Content.Server.Atmos } else { - if (i > Atmospherics.ZumosHardTileLimit) continue; + if (i > Atmospherics.ZumosTileLimit) continue; foreach (var direction in Cardinal) { - if (!_adjacentTiles.TryGetValue(direction, out var tile2)) continue; + if (!tile._adjacentTiles.TryGetValue(direction, out var tile2)) continue; if (tile2?.Air == null) continue; if (tile2._tileAtmosInfo.LastQueueCycle == queueCycle) continue; tile.ConsiderFirelocks(tile2); @@ -985,7 +980,7 @@ namespace Content.Server.Atmos var tile = progressionOrder[i]; foreach (var direction in Cardinal) { - if (!_adjacentTiles.TryGetValue(direction, out var tile2)) continue; + if (!tile._adjacentTiles.TryGetValue(direction, out var tile2)) continue; if (tile2?._tileAtmosInfo.LastQueueCycle != queueCycle) continue; if (tile2._tileAtmosInfo.LastSlowQueueCycle == queueCycleSlow) continue; if(tile2.Air.Immutable) continue; @@ -998,14 +993,12 @@ namespace Content.Server.Atmos } } - for (int i = 0; i < progressionCount; i++) + for (var i = progressionCount - 1; i >= 0; i--) { var tile = progressionOrder[i]; if (tile._tileAtmosInfo.CurrentTransferDirection == Direction.Invalid) continue; - var hpdLength = _gridAtmosphereComponent.HighPressureDeltaCount; - var inHdp = _gridAtmosphereComponent.HasHighPressureDelta(tile); - if(!inHdp) - _gridAtmosphereComponent.AddHighPressureDelta(tile); + _gridAtmosphereComponent.AddHighPressureDelta(tile); + _gridAtmosphereComponent.AddActiveTile(tile); if (!tile._adjacentTiles.TryGetValue(tile._tileAtmosInfo.CurrentTransferDirection, out var tile2) || tile2.Air == null) continue; var sum = tile2.Air.TotalMoles; totalGasesRemoved += sum; @@ -1013,11 +1006,13 @@ namespace Content.Server.Atmos tile2._tileAtmosInfo.CurrentTransferAmount += tile._tileAtmosInfo.CurrentTransferAmount; tile.PressureDifference = tile._tileAtmosInfo.CurrentTransferAmount; tile._pressureDirection = tile._tileAtmosInfo.CurrentTransferDirection; + if (tile2._tileAtmosInfo.CurrentTransferDirection == Direction.Invalid) { tile2.PressureDifference = tile2._tileAtmosInfo.CurrentTransferAmount; tile2._pressureDirection = tile._tileAtmosInfo.CurrentTransferDirection; } + tile.Air.Clear(); tile.UpdateVisuals(); tile.HandleDecompressionFloorRip(sum); @@ -1026,7 +1021,8 @@ namespace Content.Server.Atmos private void HandleDecompressionFloorRip(float sum) { - if (sum > 20 && _robustRandom.Prob(FloatMath.Clamp(sum / 100, 0.005f, 0.5f))) + var chance = FloatMath.Clamp(sum / 500, 0.005f, 0.5f); + if (sum > 20 && _robustRandom.Prob(chance)) _gridAtmosphereComponent.PryTile(GridIndices); } @@ -1067,14 +1063,19 @@ namespace Content.Server.Atmos { foreach (var direction in Cardinal) { - if(!_gridAtmosphereComponent.IsAirBlocked(GridIndices.Offset(direction))) - _adjacentTiles[direction] = _gridAtmosphereComponent.GetTile(GridIndices.Offset(direction)); + if (!_gridAtmosphereComponent.IsAirBlocked(GridIndices.Offset(direction))) + { + var adjacent = _gridAtmosphereComponent.GetTile(GridIndices.Offset(direction)); + _adjacentTiles[direction] = adjacent; + adjacent.UpdateAdjacent(direction.GetOpposite()); + } } } public void UpdateAdjacent(Direction direction) { - _adjacentTiles[direction] = _gridAtmosphereComponent.GetTile(GridIndices.Offset(direction)); + if (!_gridAtmosphereComponent.IsAirBlocked(GridIndices.Offset(direction))) + _adjacentTiles[direction] = _gridAtmosphereComponent.GetTile(GridIndices.Offset(direction)); } private void LastShareCheck() From 4d1538da1a423505ec6f0792081929c5a1a16e09 Mon Sep 17 00:00:00 2001 From: Pieter-Jan Briers Date: Sun, 16 Aug 2020 01:11:56 +0200 Subject: [PATCH 44/48] Update submodule --- RobustToolbox | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/RobustToolbox b/RobustToolbox index 5819e5ee92..1934428c95 160000 --- a/RobustToolbox +++ b/RobustToolbox @@ -1 +1 @@ -Subproject commit 5819e5ee92b287da6306807f8e05efc457c06a6c +Subproject commit 1934428c95d44210cfc9c155c7d15405d4a374c4 From 05cf8303e46f1611a7805e93e257b0accf24401f Mon Sep 17 00:00:00 2001 From: Pieter-Jan Briers Date: Sun, 16 Aug 2020 01:12:30 +0200 Subject: [PATCH 45/48] Make use of new WritableDirProvider APIs to improve file sharing and simplify code. --- Content.Client/Parallax/ParallaxManager.cs | 17 ++++++----------- Content.Client/ScreenshotHook.cs | 2 +- .../GameTicking/GamePresets/PresetSuspicion.cs | 2 +- 3 files changed, 8 insertions(+), 13 deletions(-) diff --git a/Content.Client/Parallax/ParallaxManager.cs b/Content.Client/Parallax/ParallaxManager.cs index 0e6ff0e827..d289ef16cc 100644 --- a/Content.Client/Parallax/ParallaxManager.cs +++ b/Content.Client/Parallax/ParallaxManager.cs @@ -8,6 +8,7 @@ using Robust.Client.Graphics; using Robust.Client.Interfaces.ResourceManagement; using Robust.Shared.Interfaces.Configuration; using Robust.Shared.Interfaces.Log; +using Robust.Shared.Interfaces.Resources; using Robust.Shared.IoC; using Robust.Shared.Log; using Robust.Shared.Utility; @@ -59,16 +60,11 @@ namespace Content.Client.Parallax if (!debugParallax && _resourceCache.UserData.Exists(ParallaxConfigOld)) { - bool match; - using (var data = _resourceCache.UserData.Open(ParallaxConfigOld, FileMode.Open)) - using (var reader = new StreamReader(data, EncodingHelpers.UTF8)) - { - match = reader.ReadToEnd() == contents; - } + var match = _resourceCache.UserData.ReadAllText(ParallaxConfigOld) == contents; if (match) { - using (var stream = _resourceCache.UserData.Open(ParallaxPath, FileMode.Open)) + using (var stream = _resourceCache.UserData.OpenRead(ParallaxPath)) { ParallaxTexture = Texture.LoadFromPNGStream(stream, "Parallax"); } @@ -95,7 +91,7 @@ namespace Content.Client.Parallax ParallaxTexture = Texture.LoadFromImage(image, "Parallax"); // Store it and CRC so further game starts don't need to regenerate it. - using (var stream = _resourceCache.UserData.Open(ParallaxPath, FileMode.Create)) + using (var stream = _resourceCache.UserData.Create(ParallaxPath)) { image.SaveAsPng(stream); } @@ -105,8 +101,7 @@ namespace Content.Client.Parallax var i = 0; foreach (var debugImage in debugImages) { - using (var stream = _resourceCache.UserData.Open(new ResourcePath($"/parallax_debug_{i}.png"), - FileMode.Create)) + using (var stream = _resourceCache.UserData.Create(new ResourcePath($"/parallax_debug_{i}.png"))) { debugImage.SaveAsPng(stream); } @@ -117,7 +112,7 @@ namespace Content.Client.Parallax image.Dispose(); - using (var stream = _resourceCache.UserData.Open(ParallaxConfigOld, FileMode.Create)) + using (var stream = _resourceCache.UserData.Create(ParallaxConfigOld)) using (var writer = new StreamWriter(stream, EncodingHelpers.UTF8)) { writer.Write(contents); diff --git a/Content.Client/ScreenshotHook.cs b/Content.Client/ScreenshotHook.cs index 238288ab5f..d1cf81bd96 100644 --- a/Content.Client/ScreenshotHook.cs +++ b/Content.Client/ScreenshotHook.cs @@ -57,7 +57,7 @@ namespace Content.Client } await using var file = - _resourceManager.UserData.Open(BaseScreenshotPath / $"{filename}.png", FileMode.CreateNew); + _resourceManager.UserData.Open(BaseScreenshotPath / $"{filename}.png", FileMode.CreateNew, FileAccess.Read, FileShare.None); await Task.Run(() => { diff --git a/Content.Server/GameTicking/GamePresets/PresetSuspicion.cs b/Content.Server/GameTicking/GamePresets/PresetSuspicion.cs index 50365c6569..bd2f43a13d 100644 --- a/Content.Server/GameTicking/GamePresets/PresetSuspicion.cs +++ b/Content.Server/GameTicking/GamePresets/PresetSuspicion.cs @@ -62,7 +62,7 @@ namespace Content.Server.GameTicking.GamePresets for (var i = 0; i < numTraitors; i++) { IPlayerSession traitor; - if(prefList.Count() == 0) + if(prefList.Count == 0) { traitor = _random.PickAndTake(list); Logger.InfoS("preset", "Insufficient preferred traitors, picking at random."); From 93ebd95f8a02642ec1e66b9b6c108dc0344fbb05 Mon Sep 17 00:00:00 2001 From: Pieter-Jan Briers Date: Sun, 16 Aug 2020 02:22:10 +0200 Subject: [PATCH 46/48] Fix async issues with SpawnPlayer. Fixes #1705 --- Content.Server/GameTicking/GameTicker.cs | 26 ++++++++++++++++-------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/Content.Server/GameTicking/GameTicker.cs b/Content.Server/GameTicking/GameTicker.cs index 8c3ed03f1b..bef68e027d 100644 --- a/Content.Server/GameTicking/GameTicker.cs +++ b/Content.Server/GameTicking/GameTicker.cs @@ -264,7 +264,7 @@ namespace Content.Server.GameTicking // Spawn everybody in! foreach (var (player, job) in assignedJobs) { - SpawnPlayer(player, job, false); + SpawnPlayer(player, profiles[player.Name], job, false); } // Time to start the preset. @@ -344,7 +344,7 @@ namespace Content.Server.GameTicking if (LobbyEnabled) _playerJoinLobby(targetPlayer); else - SpawnPlayer(targetPlayer); + SpawnPlayerAsync(targetPlayer); } public void MakeObserve(IPlayerSession player) @@ -358,7 +358,7 @@ namespace Content.Server.GameTicking { if (!_playersInLobby.ContainsKey(player)) return; - SpawnPlayer(player, jobId); + SpawnPlayerAsync(player, jobId); } public void ToggleReady(IPlayerSession player, bool ready) @@ -620,7 +620,7 @@ namespace Content.Server.GameTicking _playerJoinLobby(player); } - + EntitySystem.Get().ResettingCleanup(); EntitySystem.Get().ResettingCleanup(); EntitySystem.Get().ResetLayouts(); @@ -684,13 +684,13 @@ namespace Content.Server.GameTicking return; } - SpawnPlayer(session); + SpawnPlayerAsync(session); } else { if (data.Mind.CurrentEntity == null) { - SpawnPlayer(session); + SpawnPlayerAsync(session); } else { @@ -744,14 +744,22 @@ namespace Content.Server.GameTicking }, _updateShutdownCts.Token); } - private async void SpawnPlayer(IPlayerSession session, string jobId = null, bool lateJoin = true) + private async void SpawnPlayerAsync(IPlayerSession session, string jobId = null, bool lateJoin = true) { - _playerJoinGame(session); - var character = (HumanoidCharacterProfile) (await _prefsManager .GetPreferencesAsync(session.SessionId.Username)) .SelectedCharacter; + SpawnPlayer(session, character, jobId, lateJoin); + } + + private void SpawnPlayer(IPlayerSession session, + HumanoidCharacterProfile character, + string jobId = null, + bool lateJoin = true) + { + _playerJoinGame(session); + var data = session.ContentData(); data.WipeMind(); data.Mind = new Mind(session.SessionId) From 8503ab157a0cd6ee6b216bbfa82c083f37ba9f7a Mon Sep 17 00:00:00 2001 From: AJCM-git <60196617+AJCM-git@users.noreply.github.com> Date: Sat, 15 Aug 2020 21:37:20 -0400 Subject: [PATCH 47/48] Fixing a path (#1707) --- .../GameObjects/Components/Disposal/DisposalTubeComponent.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Content.Server/GameObjects/Components/Disposal/DisposalTubeComponent.cs b/Content.Server/GameObjects/Components/Disposal/DisposalTubeComponent.cs index 9f9d0efe21..29d5132925 100644 --- a/Content.Server/GameObjects/Components/Disposal/DisposalTubeComponent.cs +++ b/Content.Server/GameObjects/Components/Disposal/DisposalTubeComponent.cs @@ -217,7 +217,7 @@ namespace Content.Server.GameObjects.Components.Disposal public override void ExposeData(ObjectSerializer serializer) { base.ExposeData(serializer); - serializer.DataField(ref _clangSound, "clangSound", "/Audio/effects/clang.ogg"); + serializer.DataField(ref _clangSound, "clangSound", "/Audio/Effects/clang.ogg"); } public override void Initialize() From b647ad0f4290acc12e3bfc592d1e124014139ce6 Mon Sep 17 00:00:00 2001 From: Vince <39844191+Visne@users.noreply.github.com> Date: Sun, 16 Aug 2020 05:38:35 +0200 Subject: [PATCH 48/48] Refactor UpdateKinematics() and fix a lot of Content warnings (#1709) Most warnings were related to EntityQuery and IPhysicsComponent. Partially fixes #1650 and fixes #1682 --- .../EntitySystems/CameraRecoilSystem.cs | 11 +------- .../EntitySystems/InstrumentSystem.cs | 11 ++------ .../GameObjects/EntitySystems/MarkerSystem.cs | 12 ++------- .../EntitySystems/MeleeLungeSystem.cs | 12 ++------- .../EntitySystems/MeleeWeaponSystem.cs | 5 ++-- .../GameObjects/EntitySystems/MoverSystem.cs | 7 +++-- .../EntitySystems/StatusEffectsSystem.cs | 10 ++----- Content.Client/UserInterface/EscapeMenu.cs | 11 +++----- .../Atmos/GridAtmosphereComponent.cs | 1 - .../Components/Chemistry/VaporComponent.cs | 4 +-- .../Construction/ConstructionComponent.cs | 5 ---- .../Disposal/DisposalUnitComponent.cs | 2 +- .../Components/GUI/HandsComponent.cs | 4 +-- .../Components/Items/Storage/ItemComponent.cs | 4 +-- .../Movement/AiControllerComponent.cs | 6 ++--- .../Movement/ShuttleControllerComponent.cs | 19 +++++--------- .../Projectiles/ProjectileComponent.cs | 4 +-- .../Projectiles/ThrownItemComponent.cs | 2 +- .../Rotatable/RotatableComponent.cs | 4 +-- .../Barrels/ServerRangedBarrelComponent.cs | 8 +++--- .../AI/Steering/AiSteeringSystem.cs | 1 - .../EntitySystems/AtmosphereSystem.cs | 13 +++------- .../GameObjects/EntitySystems/MoverSystem.cs | 18 +++---------- Content.Server/Throw/ThrowHelper.cs | 4 +-- .../Disposal/SharedDisposalUnitComponent.cs | 2 +- .../SharedPlayerInputMoverComponent.cs | 6 ++--- .../Movement/SharedSlipperyComponent.cs | 3 +-- .../EntitySystems/SharedMoverSystem.cs | 26 ++++++++----------- .../Mechanism/MechanismPrototype.cs | 1 - 29 files changed, 65 insertions(+), 151 deletions(-) diff --git a/Content.Client/GameObjects/EntitySystems/CameraRecoilSystem.cs b/Content.Client/GameObjects/EntitySystems/CameraRecoilSystem.cs index 2d5af8c103..137dc2a5e7 100644 --- a/Content.Client/GameObjects/EntitySystems/CameraRecoilSystem.cs +++ b/Content.Client/GameObjects/EntitySystems/CameraRecoilSystem.cs @@ -1,25 +1,16 @@ using Content.Client.GameObjects.Components.Mobs; -using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Systems; namespace Content.Client.GameObjects.EntitySystems { public sealed class CameraRecoilSystem : EntitySystem { - public override void Initialize() - { - base.Initialize(); - - EntityQuery = new TypeEntityQuery(typeof(CameraRecoilComponent)); - } - public override void FrameUpdate(float frameTime) { base.FrameUpdate(frameTime); - foreach (var entity in RelevantEntities) + foreach (var recoil in EntityManager.ComponentManager.EntityQuery()) { - var recoil = entity.GetComponent(); recoil.FrameUpdate(frameTime); } } diff --git a/Content.Client/GameObjects/EntitySystems/InstrumentSystem.cs b/Content.Client/GameObjects/EntitySystems/InstrumentSystem.cs index 5401274988..e184d7d1eb 100644 --- a/Content.Client/GameObjects/EntitySystems/InstrumentSystem.cs +++ b/Content.Client/GameObjects/EntitySystems/InstrumentSystem.cs @@ -1,6 +1,5 @@ using Content.Client.GameObjects.Components.Instruments; using JetBrains.Annotations; -using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Systems; using Robust.Shared.Interfaces.Timing; using Robust.Shared.IoC; @@ -12,12 +11,6 @@ namespace Content.Client.GameObjects.EntitySystems { [Dependency] private readonly IGameTiming _gameTiming = default; - public override void Initialize() - { - base.Initialize(); - EntityQuery = new TypeEntityQuery(typeof(InstrumentComponent)); - } - public override void Update(float frameTime) { base.Update(frameTime); @@ -27,9 +20,9 @@ namespace Content.Client.GameObjects.EntitySystems return; } - foreach (var entity in RelevantEntities) + foreach (var instrumentComponent in EntityManager.ComponentManager.EntityQuery()) { - entity.GetComponent().Update(frameTime); + instrumentComponent.Update(frameTime); } } } diff --git a/Content.Client/GameObjects/EntitySystems/MarkerSystem.cs b/Content.Client/GameObjects/EntitySystems/MarkerSystem.cs index 7573253fb6..bec86abbb4 100644 --- a/Content.Client/GameObjects/EntitySystems/MarkerSystem.cs +++ b/Content.Client/GameObjects/EntitySystems/MarkerSystem.cs @@ -1,5 +1,4 @@ using Content.Client.GameObjects.Components.Markers; -using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Systems; namespace Content.Client.GameObjects.EntitySystems @@ -8,13 +7,6 @@ namespace Content.Client.GameObjects.EntitySystems { private bool _markersVisible; - public override void Initialize() - { - base.Initialize(); - - EntityQuery = new TypeEntityQuery(); - } - public bool MarkersVisible { get => _markersVisible; @@ -27,9 +19,9 @@ namespace Content.Client.GameObjects.EntitySystems private void UpdateMarkers() { - foreach (var entity in RelevantEntities) + foreach (var markerComponent in EntityManager.ComponentManager.EntityQuery()) { - entity.GetComponent().UpdateVisibility(); + markerComponent.UpdateVisibility(); } } } diff --git a/Content.Client/GameObjects/EntitySystems/MeleeLungeSystem.cs b/Content.Client/GameObjects/EntitySystems/MeleeLungeSystem.cs index bff419b8ab..3f180d4399 100644 --- a/Content.Client/GameObjects/EntitySystems/MeleeLungeSystem.cs +++ b/Content.Client/GameObjects/EntitySystems/MeleeLungeSystem.cs @@ -1,6 +1,5 @@ using Content.Client.GameObjects.Components.Mobs; using JetBrains.Annotations; -using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Systems; namespace Content.Client.GameObjects.EntitySystems @@ -8,20 +7,13 @@ namespace Content.Client.GameObjects.EntitySystems [UsedImplicitly] public sealed class MeleeLungeSystem : EntitySystem { - public override void Initialize() - { - base.Initialize(); - - EntityQuery = new TypeEntityQuery(); - } - public override void FrameUpdate(float frameTime) { base.FrameUpdate(frameTime); - foreach (var entity in RelevantEntities) + foreach (var meleeLungeComponent in EntityManager.ComponentManager.EntityQuery()) { - entity.GetComponent().Update(frameTime); + meleeLungeComponent.Update(frameTime); } } } diff --git a/Content.Client/GameObjects/EntitySystems/MeleeWeaponSystem.cs b/Content.Client/GameObjects/EntitySystems/MeleeWeaponSystem.cs index 8b95cb6405..ca7a9d79e4 100644 --- a/Content.Client/GameObjects/EntitySystems/MeleeWeaponSystem.cs +++ b/Content.Client/GameObjects/EntitySystems/MeleeWeaponSystem.cs @@ -24,16 +24,15 @@ namespace Content.Client.GameObjects.EntitySystems public override void Initialize() { SubscribeNetworkEvent(PlayWeaponArc); - EntityQuery = new TypeEntityQuery(typeof(MeleeWeaponArcAnimationComponent)); } public override void FrameUpdate(float frameTime) { base.FrameUpdate(frameTime); - foreach (var entity in RelevantEntities) + foreach (var arcAnimationComponent in EntityManager.ComponentManager.EntityQuery()) { - entity.GetComponent().Update(frameTime); + arcAnimationComponent.Update(frameTime); } } diff --git a/Content.Client/GameObjects/EntitySystems/MoverSystem.cs b/Content.Client/GameObjects/EntitySystems/MoverSystem.cs index b16cea1672..cdabb87d7c 100644 --- a/Content.Client/GameObjects/EntitySystems/MoverSystem.cs +++ b/Content.Client/GameObjects/EntitySystems/MoverSystem.cs @@ -30,11 +30,10 @@ namespace Content.Client.GameObjects.EntitySystems return; } - var physics = playerEnt.GetComponent(); - playerEnt.TryGetComponent(out ICollidableComponent? collidable); - physics.Predict = true; + var collidable = playerEnt.GetComponent(); + collidable.Predict = true; - UpdateKinematics(playerEnt.Transform, mover, physics, collidable); + UpdateKinematics(playerEnt.Transform, mover, collidable); } public override void Update(float frameTime) diff --git a/Content.Client/GameObjects/EntitySystems/StatusEffectsSystem.cs b/Content.Client/GameObjects/EntitySystems/StatusEffectsSystem.cs index a0fd868b2c..367c49f0b9 100644 --- a/Content.Client/GameObjects/EntitySystems/StatusEffectsSystem.cs +++ b/Content.Client/GameObjects/EntitySystems/StatusEffectsSystem.cs @@ -1,5 +1,4 @@ using Content.Client.GameObjects.Components.Mobs; -using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Systems; using Robust.Shared.Interfaces.Timing; using Robust.Shared.IoC; @@ -12,11 +11,6 @@ namespace Content.Client.GameObjects.EntitySystems [Dependency] private IGameTiming _gameTiming; #pragma warning restore 649 - public StatusEffectsSystem() - { - EntityQuery = new TypeEntityQuery(typeof(ClientStatusEffectsComponent)); - } - public override void FrameUpdate(float frameTime) { base.FrameUpdate(frameTime); @@ -24,9 +18,9 @@ namespace Content.Client.GameObjects.EntitySystems if (!_gameTiming.IsFirstTimePredicted) return; - foreach (var entity in RelevantEntities) + foreach (var clientStatusEffectsComponent in EntityManager.ComponentManager.EntityQuery()) { - entity.GetComponent().FrameUpdate(frameTime); + clientStatusEffectsComponent.FrameUpdate(frameTime); } } } diff --git a/Content.Client/UserInterface/EscapeMenu.cs b/Content.Client/UserInterface/EscapeMenu.cs index 3f085d1a8a..7b3ba644ce 100644 --- a/Content.Client/UserInterface/EscapeMenu.cs +++ b/Content.Client/UserInterface/EscapeMenu.cs @@ -1,5 +1,4 @@ -using Content.Client.Sandbox; -using Robust.Client.Console; +using Robust.Client.Console; using Robust.Client.Interfaces.Placement; using Robust.Client.Interfaces.ResourceManagement; using Robust.Client.UserInterface.Controls; @@ -15,16 +14,12 @@ namespace Content.Client.UserInterface internal sealed class EscapeMenu : SS14Window { private readonly IClientConsole _console; - private readonly ITileDefinitionManager __tileDefinitionManager; + private readonly ITileDefinitionManager _tileDefinitionManager; private readonly IPlacementManager _placementManager; private readonly IPrototypeManager _prototypeManager; private readonly IResourceCache _resourceCache; private readonly IConfigurationManager _configSystem; private readonly ILocalizationManager _localizationManager; -#pragma warning disable 649 - [Dependency] private readonly ISandboxManager _sandboxManager; - [Dependency] private readonly IClientConGroupController _conGroupController; -#pragma warning restore 649 private BaseButton DisconnectButton; private BaseButton QuitButton; @@ -41,7 +36,7 @@ namespace Content.Client.UserInterface _configSystem = configSystem; _localizationManager = localizationManager; _console = console; - __tileDefinitionManager = tileDefinitionManager; + _tileDefinitionManager = tileDefinitionManager; _placementManager = placementManager; _prototypeManager = prototypeManager; _resourceCache = resourceCache; diff --git a/Content.Server/GameObjects/Components/Atmos/GridAtmosphereComponent.cs b/Content.Server/GameObjects/Components/Atmos/GridAtmosphereComponent.cs index c872ea8893..05ba999b0b 100644 --- a/Content.Server/GameObjects/Components/Atmos/GridAtmosphereComponent.cs +++ b/Content.Server/GameObjects/Components/Atmos/GridAtmosphereComponent.cs @@ -28,7 +28,6 @@ namespace Content.Server.GameObjects.Components.Atmos [RegisterComponent, Serializable] public class GridAtmosphereComponent : Component, IGridAtmosphereComponent { - [Robust.Shared.IoC.Dependency] private IGameTiming _gameTiming = default!; [Robust.Shared.IoC.Dependency] private IMapManager _mapManager = default!; /// diff --git a/Content.Server/GameObjects/Components/Chemistry/VaporComponent.cs b/Content.Server/GameObjects/Components/Chemistry/VaporComponent.cs index cc477cd8e9..066cf21836 100644 --- a/Content.Server/GameObjects/Components/Chemistry/VaporComponent.cs +++ b/Content.Server/GameObjects/Components/Chemistry/VaporComponent.cs @@ -16,9 +16,7 @@ namespace Content.Server.GameObjects.Components.Chemistry [RegisterComponent] class VaporComponent : Component, ICollideBehavior { -#pragma warning disable 649 [Dependency] private readonly IMapManager _mapManager = default!; -#pragma warning enable 649 public override string Name => "Vapor"; [ViewVariables] @@ -66,7 +64,7 @@ namespace Content.Server.GameObjects.Components.Chemistry { var worldBounds = collidable.WorldAABB; var mapGrid = _mapManager.GetGrid(Owner.Transform.GridID); - + var tiles = mapGrid.GetTilesIntersecting(worldBounds); var amount = _transferAmount / ReagentUnit.New(tiles.Count()); foreach (var tile in tiles) diff --git a/Content.Server/GameObjects/Components/Construction/ConstructionComponent.cs b/Content.Server/GameObjects/Components/Construction/ConstructionComponent.cs index 8e5ca778a1..d29c7d93c9 100644 --- a/Content.Server/GameObjects/Components/Construction/ConstructionComponent.cs +++ b/Content.Server/GameObjects/Components/Construction/ConstructionComponent.cs @@ -2,8 +2,6 @@ using Content.Shared.GameObjects.EntitySystems; using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Systems; -using Robust.Shared.IoC; -using Robust.Shared.Localization; using Robust.Shared.Serialization; using Robust.Shared.Utility; using Robust.Shared.ViewVariables; @@ -16,9 +14,6 @@ namespace Content.Server.GameObjects.Components.Construction [RegisterComponent] public class ConstructionComponent : Component, IExamine { -#pragma warning disable 649 - [Dependency] private readonly ILocalizationManager _loc; -#pragma warning restore 649 /// public override string Name => "Construction"; diff --git a/Content.Server/GameObjects/Components/Disposal/DisposalUnitComponent.cs b/Content.Server/GameObjects/Components/Disposal/DisposalUnitComponent.cs index bc4d887457..89a6049b66 100644 --- a/Content.Server/GameObjects/Components/Disposal/DisposalUnitComponent.cs +++ b/Content.Server/GameObjects/Components/Disposal/DisposalUnitComponent.cs @@ -94,7 +94,7 @@ namespace Content.Server.GameObjects.Components.Disposal collidable.Anchored; [ViewVariables] - private State State => _pressure >= 1 ? State.Ready : State.Pressurizing; + private PressureState State => _pressure >= 1 ? PressureState.Ready : PressureState.Pressurizing; [ViewVariables] private bool Engaged diff --git a/Content.Server/GameObjects/Components/GUI/HandsComponent.cs b/Content.Server/GameObjects/Components/GUI/HandsComponent.cs index e9097d40b5..ea75c7f382 100644 --- a/Content.Server/GameObjects/Components/GUI/HandsComponent.cs +++ b/Content.Server/GameObjects/Components/GUI/HandsComponent.cs @@ -668,13 +668,13 @@ namespace Content.Server.GameObjects.Components.GUI Dirty(); - if (!message.Entity.TryGetComponent(out ICollidableComponent physics)) + if (!message.Entity.TryGetComponent(out ICollidableComponent collidable)) { return; } // set velocity to zero - physics.Stop(); + collidable.Stop(); return; } } diff --git a/Content.Server/GameObjects/Components/Items/Storage/ItemComponent.cs b/Content.Server/GameObjects/Components/Items/Storage/ItemComponent.cs index daf1f94d07..67eca347f2 100644 --- a/Content.Server/GameObjects/Components/Items/Storage/ItemComponent.cs +++ b/Content.Server/GameObjects/Components/Items/Storage/ItemComponent.cs @@ -14,7 +14,6 @@ using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Components; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Interfaces.Map; -using Robust.Shared.Interfaces.Random; using Robust.Shared.IoC; using Robust.Shared.Serialization; @@ -29,7 +28,6 @@ namespace Content.Server.GameObjects.Components.Items.Storage public override uint? NetID => ContentNetIDs.ITEM; #pragma warning disable 649 - [Dependency] private readonly IRobustRandom _robustRandom; [Dependency] private readonly IMapManager _mapManager; #pragma warning restore 649 @@ -93,7 +91,7 @@ namespace Content.Server.GameObjects.Components.Items.Storage return false; } - if (Owner.TryGetComponent(out PhysicsComponent physics) && + if (Owner.TryGetComponent(out CollidableComponent physics) && physics.Anchored) { return false; diff --git a/Content.Server/GameObjects/Components/Movement/AiControllerComponent.cs b/Content.Server/GameObjects/Components/Movement/AiControllerComponent.cs index 0c89727f0c..26b450ca47 100644 --- a/Content.Server/GameObjects/Components/Movement/AiControllerComponent.cs +++ b/Content.Server/GameObjects/Components/Movement/AiControllerComponent.cs @@ -42,9 +42,9 @@ namespace Content.Server.GameObjects.Components.Movement { base.Initialize(); - // This component requires a physics component. - if (!Owner.HasComponent()) - Owner.AddComponent(); + // This component requires a collidable component. + if (!Owner.HasComponent()) + Owner.AddComponent(); } /// diff --git a/Content.Server/GameObjects/Components/Movement/ShuttleControllerComponent.cs b/Content.Server/GameObjects/Components/Movement/ShuttleControllerComponent.cs index 62063854f2..85bb04b84b 100644 --- a/Content.Server/GameObjects/Components/Movement/ShuttleControllerComponent.cs +++ b/Content.Server/GameObjects/Components/Movement/ShuttleControllerComponent.cs @@ -71,22 +71,15 @@ namespace Content.Server.GameObjects.Components.Movement _entityManager.TryGetEntity(grid.GridEntityId, out var gridEntity)) { //TODO: Switch to shuttle component - if (!gridEntity.TryGetComponent(out IPhysicsComponent physComp)) + if (!gridEntity.TryGetComponent(out ICollidableComponent collidable)) { - physComp = gridEntity.AddComponent(); - physComp.Mass = 1; + collidable = gridEntity.AddComponent(); + collidable.Mass = 1; + collidable.CanCollide = true; + collidable.PhysicsShapes.Add(new PhysShapeGrid(grid)); } - //TODO: Is this always true? - if (!gridEntity.HasComponent()) - { - var collideComp = gridEntity.AddComponent(); - collideComp.CanCollide = true; - //collideComp.IsHardCollidable = true; - collideComp.PhysicsShapes.Add(new PhysShapeGrid(grid)); - } - - var controller = physComp.EnsureController(); + var controller = collidable.EnsureController(); controller.Push(CalcNewVelocity(direction, enabled), CurrentWalkSpeed); } } diff --git a/Content.Server/GameObjects/Components/Projectiles/ProjectileComponent.cs b/Content.Server/GameObjects/Components/Projectiles/ProjectileComponent.cs index 00613c2b96..9b633dc688 100644 --- a/Content.Server/GameObjects/Components/Projectiles/ProjectileComponent.cs +++ b/Content.Server/GameObjects/Components/Projectiles/ProjectileComponent.cs @@ -92,9 +92,9 @@ namespace Content.Server.GameObjects.Components.Projectiles } if (!entity.Deleted && entity.TryGetComponent(out CameraRecoilComponent recoilComponent) - && Owner.TryGetComponent(out IPhysicsComponent physicsComponent)) + && Owner.TryGetComponent(out ICollidableComponent collidableComponent)) { - var direction = physicsComponent.LinearVelocity.Normalized; + var direction = collidableComponent.LinearVelocity.Normalized; recoilComponent.Kick(direction); } } diff --git a/Content.Server/GameObjects/Components/Projectiles/ThrownItemComponent.cs b/Content.Server/GameObjects/Components/Projectiles/ThrownItemComponent.cs index 2ae7c7f5c9..b072072bc5 100644 --- a/Content.Server/GameObjects/Components/Projectiles/ThrownItemComponent.cs +++ b/Content.Server/GameObjects/Components/Projectiles/ThrownItemComponent.cs @@ -88,7 +88,7 @@ namespace Content.Server.GameObjects.Components.Projectiles public void StartThrow(Vector2 direction, float speed) { - var comp = Owner.GetComponent(); + var comp = Owner.GetComponent(); comp.Status = BodyStatus.InAir; var controller = comp.EnsureController(); diff --git a/Content.Server/GameObjects/Components/Rotatable/RotatableComponent.cs b/Content.Server/GameObjects/Components/Rotatable/RotatableComponent.cs index 73194471c8..ffbcfbe4cc 100644 --- a/Content.Server/GameObjects/Components/Rotatable/RotatableComponent.cs +++ b/Content.Server/GameObjects/Components/Rotatable/RotatableComponent.cs @@ -21,9 +21,9 @@ namespace Content.Server.GameObjects.Components.Rotatable private void TryRotate(IEntity user, Angle angle) { - if (Owner.TryGetComponent(out IPhysicsComponent physics)) + if (Owner.TryGetComponent(out ICollidableComponent collidable)) { - if (physics.Anchored) + if (collidable.Anchored) { _notifyManager.PopupMessage(Owner.Transform.GridPosition, user, _localizationManager.GetString("It's stuck.")); return; diff --git a/Content.Server/GameObjects/Components/Weapon/Ranged/Barrels/ServerRangedBarrelComponent.cs b/Content.Server/GameObjects/Components/Weapon/Ranged/Barrels/ServerRangedBarrelComponent.cs index b3d6b8e924..4b0553fe2b 100644 --- a/Content.Server/GameObjects/Components/Weapon/Ranged/Barrels/ServerRangedBarrelComponent.cs +++ b/Content.Server/GameObjects/Components/Weapon/Ranged/Barrels/ServerRangedBarrelComponent.cs @@ -5,7 +5,6 @@ using Content.Server.GameObjects.Components.Damage; using Content.Server.GameObjects.Components.Mobs; using Content.Server.GameObjects.Components.Projectiles; using Content.Server.GameObjects.Components.Weapon.Ranged.Ammunition; -using Content.Server.Interfaces; using Content.Shared.Audio; using Content.Shared.GameObjects.Components.Weapons.Ranged; using Content.Shared.GameObjects.EntitySystems; @@ -43,7 +42,6 @@ namespace Content.Server.GameObjects.Components.Weapon.Ranged.Barrels #pragma warning disable 649 [Dependency] private IGameTiming _gameTiming; [Dependency] private IRobustRandom _robustRandom; - [Dependency] private readonly IServerNotifyManager _notifyManager; #pragma warning restore 649 public override FireRateSelector FireRateSelector => _fireRateSelector; @@ -385,15 +383,15 @@ namespace Content.Server.GameObjects.Components.Weapon.Ranged.Barrels projectileAngle = angle; } - var physicsComponent = projectile.GetComponent(); - physicsComponent.Status = BodyStatus.InAir; + var collidableComponent = projectile.GetComponent(); + collidableComponent.Status = BodyStatus.InAir; projectile.Transform.GridPosition = Owner.Transform.GridPosition; var projectileComponent = projectile.GetComponent(); projectileComponent.IgnoreEntity(shooter); projectile - .GetComponent() + .GetComponent() .EnsureController() .LinearVelocity = projectileAngle.ToVec() * velocity; diff --git a/Content.Server/GameObjects/EntitySystems/AI/Steering/AiSteeringSystem.cs b/Content.Server/GameObjects/EntitySystems/AI/Steering/AiSteeringSystem.cs index ea9ca44ec1..a9a7899300 100644 --- a/Content.Server/GameObjects/EntitySystems/AI/Steering/AiSteeringSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/AI/Steering/AiSteeringSystem.cs @@ -27,7 +27,6 @@ namespace Content.Server.GameObjects.EntitySystems.AI.Steering #pragma warning disable 649 [Dependency] private IMapManager _mapManager; - [Dependency] private IEntityManager _entityManager; [Dependency] private IPauseManager _pauseManager; #pragma warning restore 649 private PathfindingSystem _pathfindingSystem; diff --git a/Content.Server/GameObjects/EntitySystems/AtmosphereSystem.cs b/Content.Server/GameObjects/EntitySystems/AtmosphereSystem.cs index 71acf54c52..327104a148 100644 --- a/Content.Server/GameObjects/EntitySystems/AtmosphereSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/AtmosphereSystem.cs @@ -17,18 +17,14 @@ namespace Content.Server.GameObjects.EntitySystems [UsedImplicitly] public class AtmosphereSystem : EntitySystem { -#pragma warning disable 649 [Dependency] private readonly IMapManager _mapManager = default!; - [Dependency] private readonly IEntityManager _entityManager = default!; [Dependency] private readonly IPauseManager _pauseManager = default!; -#pragma warning restore 649 public override void Initialize() { base.Initialize(); _mapManager.TileChanged += OnTileChanged; - EntityQuery = new MultipleTypeEntityQuery(new List(){typeof(IGridAtmosphereComponent)}); } public IGridAtmosphereComponent? GetGridAtmosphere(GridId gridId) @@ -36,7 +32,7 @@ namespace Content.Server.GameObjects.EntitySystems // TODO Return space grid atmosphere for invalid grids or grids with no atmos var grid = _mapManager.GetGrid(gridId); - if (!_entityManager.TryGetEntity(grid.GridEntityId, out var gridEnt)) return null; + if (!EntityManager.TryGetEntity(grid.GridEntityId, out var gridEnt)) return null; return gridEnt.TryGetComponent(out IGridAtmosphereComponent atmos) ? atmos : null; } @@ -45,13 +41,12 @@ namespace Content.Server.GameObjects.EntitySystems { base.Update(frameTime); - foreach (var gridEnt in RelevantEntities) + foreach (var (mapGridComponent, gridAtmosphereComponent) in EntityManager.ComponentManager.EntityQuery()) { - var grid = gridEnt.GetComponent(); - if (_pauseManager.IsGridPaused(grid.GridIndex)) + if (_pauseManager.IsGridPaused(mapGridComponent.GridIndex)) continue; - gridEnt.GetComponent().Update(frameTime); + gridAtmosphereComponent.Update(frameTime); } } diff --git a/Content.Server/GameObjects/EntitySystems/MoverSystem.cs b/Content.Server/GameObjects/EntitySystems/MoverSystem.cs index 35c99acd98..84250d4e91 100644 --- a/Content.Server/GameObjects/EntitySystems/MoverSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/MoverSystem.cs @@ -58,23 +58,13 @@ namespace Content.Server.GameObjects.EntitySystems public override void Update(float frameTime) { - foreach (var entity in RelevantEntities) + foreach (var (moverComponent, collidableComponent) in EntityManager.ComponentManager.EntityQuery()) { + var entity = moverComponent.Owner; if (_pauseManager.IsEntityPaused(entity)) - { continue; - } - var mover = entity.GetComponent(); - var physics = entity.GetComponent(); - if (entity.TryGetComponent(out var collider)) - { - UpdateKinematics(entity.Transform, mover, physics, collider); - } - else - { - UpdateKinematics(entity.Transform, mover, physics); - } + UpdateKinematics(entity.Transform, moverComponent, collidableComponent); } } @@ -93,7 +83,7 @@ namespace Content.Server.GameObjects.EntitySystems ev.Entity.RemoveComponent(); } - if (ev.Entity.TryGetComponent(out IPhysicsComponent physics) && + if (ev.Entity.TryGetComponent(out ICollidableComponent physics) && physics.TryGetController(out MoverController controller)) { controller.StopMoving(); diff --git a/Content.Server/Throw/ThrowHelper.cs b/Content.Server/Throw/ThrowHelper.cs index 6b62531a7f..ad8e76b4bf 100644 --- a/Content.Server/Throw/ThrowHelper.cs +++ b/Content.Server/Throw/ThrowHelper.cs @@ -85,7 +85,7 @@ namespace Content.Server.Throw projComp.StartThrow(angle.ToVec(), spd); if (throwSourceEnt != null && - throwSourceEnt.TryGetComponent(out var physics) && + throwSourceEnt.TryGetComponent(out var physics) && physics.TryGetController(out MoverController mover)) { var physicsMgr = IoCManager.Resolve(); @@ -136,7 +136,7 @@ namespace Content.Server.Throw var distance = (targetLoc.ToMapPos(mapManager) - sourceLoc.ToMapPos(mapManager)).Length; var throwDuration = ThrownItemComponent.DefaultThrowTime; var mass = 1f; - if (thrownEnt.TryGetComponent(out IPhysicsComponent physicsComponent)) + if (thrownEnt.TryGetComponent(out ICollidableComponent physicsComponent)) { mass = physicsComponent.Mass; } diff --git a/Content.Shared/GameObjects/Components/Disposal/SharedDisposalUnitComponent.cs b/Content.Shared/GameObjects/Components/Disposal/SharedDisposalUnitComponent.cs index 1ce14ae17f..9bcd7edbf0 100644 --- a/Content.Shared/GameObjects/Components/Disposal/SharedDisposalUnitComponent.cs +++ b/Content.Shared/GameObjects/Components/Disposal/SharedDisposalUnitComponent.cs @@ -51,7 +51,7 @@ namespace Content.Shared.GameObjects.Components.Disposal } [Serializable, NetSerializable] - public enum State + public enum PressureState { Ready, Pressurizing diff --git a/Content.Shared/GameObjects/Components/Movement/SharedPlayerInputMoverComponent.cs b/Content.Shared/GameObjects/Components/Movement/SharedPlayerInputMoverComponent.cs index da88fdd468..9c74d666bc 100644 --- a/Content.Shared/GameObjects/Components/Movement/SharedPlayerInputMoverComponent.cs +++ b/Content.Shared/GameObjects/Components/Movement/SharedPlayerInputMoverComponent.cs @@ -142,11 +142,11 @@ namespace Content.Shared.GameObjects.Components.Movement /// public override void OnAdd() { - // This component requires that the entity has a PhysicsComponent. - if (!Owner.HasComponent()) + // This component requires that the entity has a CollidableComponent. + if (!Owner.HasComponent()) Logger.Error( $"[ECS] {Owner.Prototype?.Name} - {nameof(SharedPlayerInputMoverComponent)} requires" + - $" {nameof(IPhysicsComponent)}. "); + $" {nameof(ICollidableComponent)}. "); base.OnAdd(); } diff --git a/Content.Shared/GameObjects/Components/Movement/SharedSlipperyComponent.cs b/Content.Shared/GameObjects/Components/Movement/SharedSlipperyComponent.cs index 4181a2e36d..4d05195dba 100644 --- a/Content.Shared/GameObjects/Components/Movement/SharedSlipperyComponent.cs +++ b/Content.Shared/GameObjects/Components/Movement/SharedSlipperyComponent.cs @@ -50,13 +50,12 @@ namespace Content.Shared.GameObjects.Components.Movement || _slipped.Contains(entity.Uid) || !entity.TryGetComponent(out SharedStunnableComponent stun) || !entity.TryGetComponent(out ICollidableComponent otherBody) - || !entity.TryGetComponent(out IPhysicsComponent otherPhysics) || !Owner.TryGetComponent(out ICollidableComponent body)) { return false; } - if (otherPhysics.LinearVelocity.Length < RequiredSlipSpeed || stun.KnockedDown) + if (otherBody.LinearVelocity.Length < RequiredSlipSpeed || stun.KnockedDown) { return false; } diff --git a/Content.Shared/GameObjects/EntitySystems/SharedMoverSystem.cs b/Content.Shared/GameObjects/EntitySystems/SharedMoverSystem.cs index 8c2cdcc9c3..7c9a4537a2 100644 --- a/Content.Shared/GameObjects/EntitySystems/SharedMoverSystem.cs +++ b/Content.Shared/GameObjects/EntitySystems/SharedMoverSystem.cs @@ -29,8 +29,6 @@ namespace Content.Shared.GameObjects.EntitySystems { base.Initialize(); - EntityQuery = new TypeEntityQuery(typeof(IMoverComponent)); - var moveUpCmdHandler = new MoverDirInputCmdHandler(Direction.North); var moveLeftCmdHandler = new MoverDirInputCmdHandler(Direction.West); var moveRightCmdHandler = new MoverDirInputCmdHandler(Direction.East); @@ -54,18 +52,17 @@ namespace Content.Shared.GameObjects.EntitySystems base.Shutdown(); } - protected void UpdateKinematics(ITransformComponent transform, IMoverComponent mover, IPhysicsComponent physics, - ICollidableComponent? collider = null) + protected void UpdateKinematics(ITransformComponent transform, IMoverComponent mover, ICollidableComponent collidable) { - physics.EnsureController(); + collidable.EnsureController(); var weightless = !transform.Owner.HasComponent() && _physicsManager.IsWeightless(transform.GridPosition); - if (weightless && collider != null) + if (weightless) { // No gravity: is our entity touching anything? - var touching = IsAroundCollider(transform, mover, collider); + var touching = IsAroundCollider(transform, mover, collidable); if (!touching) { @@ -78,18 +75,16 @@ namespace Content.Shared.GameObjects.EntitySystems var combined = walkDir + sprintDir; if (combined.LengthSquared < 0.001 || !ActionBlockerSystem.CanMove(mover.Owner) && !weightless) { - if (physics.TryGetController(out MoverController controller)) + if (collidable.TryGetController(out MoverController controller)) { controller.StopMoving(); } } else { - //Console.WriteLine($"{IoCManager.Resolve().TickStamp}: {combined}"); - if (weightless) { - if (physics.TryGetController(out MoverController controller)) + if (collidable.TryGetController(out MoverController controller)) { controller.Push(combined, mover.CurrentPushSpeed); } @@ -99,12 +94,13 @@ namespace Content.Shared.GameObjects.EntitySystems } var total = walkDir * mover.CurrentWalkSpeed + sprintDir * mover.CurrentSprintSpeed; - //Console.WriteLine($"{walkDir} ({mover.CurrentWalkSpeed}) + {sprintDir} ({mover.CurrentSprintSpeed}): {total}"); - {if (physics.TryGetController(out MoverController controller)) { - controller.Move(total, 1); - }} + if (collidable.TryGetController(out MoverController controller)) + { + controller.Move(total, 1); + } + } transform.LocalRotation = total.GetDir().ToAngle(); diff --git a/Content.Shared/Health/BodySystem/Mechanism/MechanismPrototype.cs b/Content.Shared/Health/BodySystem/Mechanism/MechanismPrototype.cs index 3a37046b20..acf2711f28 100644 --- a/Content.Shared/Health/BodySystem/Mechanism/MechanismPrototype.cs +++ b/Content.Shared/Health/BodySystem/Mechanism/MechanismPrototype.cs @@ -18,7 +18,6 @@ namespace Content.Shared.Health.BodySystem.Mechanism private string _name; private string _description; private string _examineMessage; - private string _spritePath; private string _rsiPath; private string _rsiState; private int _durability;