diff --git a/Content.Client/Emp/EmpSystem.cs b/Content.Client/Emp/EmpSystem.cs index 5ed1022750..b32e370f1e 100644 --- a/Content.Client/Emp/EmpSystem.cs +++ b/Content.Client/Emp/EmpSystem.cs @@ -7,6 +7,18 @@ public sealed class EmpSystem : SharedEmpSystem { [Dependency] private readonly IRobustRandom _random = default!; + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnStartup); + } + + private void OnStartup(Entity ent, ref ComponentStartup args) + { + // EmpPulseEvent.Affected will spawn the first visual effect directly when the emp is used + ent.Comp.TargetTime = Timing.CurTime + _random.NextFloat(0.8f, 1.2f) * ent.Comp.EffectCooldown; + } public override void Update(float frameTime) { base.Update(frameTime); @@ -16,7 +28,7 @@ public sealed class EmpSystem : SharedEmpSystem { if (Timing.CurTime > comp.TargetTime) { - comp.TargetTime = Timing.CurTime + _random.NextFloat(0.8f, 1.2f) * TimeSpan.FromSeconds(comp.EffectCooldown); + comp.TargetTime = Timing.CurTime + _random.NextFloat(0.8f, 1.2f) * comp.EffectCooldown; Spawn(EmpDisabledEffectPrototype, transform.Coordinates); } } diff --git a/Content.Client/Input/ContentContexts.cs b/Content.Client/Input/ContentContexts.cs index 6b279cb12c..47f0cda2f6 100644 --- a/Content.Client/Input/ContentContexts.cs +++ b/Content.Client/Input/ContentContexts.cs @@ -73,6 +73,9 @@ namespace Content.Client.Input human.AddFunction(ContentKeyFunctions.OpenInventoryMenu); human.AddFunction(ContentKeyFunctions.SmartEquipBackpack); human.AddFunction(ContentKeyFunctions.SmartEquipBelt); + human.AddFunction(ContentKeyFunctions.SmartEquipPocket1); + human.AddFunction(ContentKeyFunctions.SmartEquipPocket2); + human.AddFunction(ContentKeyFunctions.SmartEquipSuitStorage); human.AddFunction(ContentKeyFunctions.OpenBackpack); human.AddFunction(ContentKeyFunctions.OpenBelt); human.AddFunction(ContentKeyFunctions.MouseMiddle); diff --git a/Content.Client/Options/UI/Tabs/KeyRebindTab.xaml.cs b/Content.Client/Options/UI/Tabs/KeyRebindTab.xaml.cs index ee72a91fb7..59c9607b24 100644 --- a/Content.Client/Options/UI/Tabs/KeyRebindTab.xaml.cs +++ b/Content.Client/Options/UI/Tabs/KeyRebindTab.xaml.cs @@ -190,6 +190,9 @@ namespace Content.Client.Options.UI.Tabs AddHeader("ui-options-header-interaction-adv"); AddButton(ContentKeyFunctions.SmartEquipBackpack); AddButton(ContentKeyFunctions.SmartEquipBelt); + AddButton(ContentKeyFunctions.SmartEquipPocket1); + AddButton(ContentKeyFunctions.SmartEquipPocket2); + AddButton(ContentKeyFunctions.SmartEquipSuitStorage); AddButton(ContentKeyFunctions.OpenBackpack); AddButton(ContentKeyFunctions.OpenBelt); AddButton(ContentKeyFunctions.ThrowItemInHand); diff --git a/Content.Client/Power/EntitySystems/BatterySystem.cs b/Content.Client/Power/EntitySystems/BatterySystem.cs new file mode 100644 index 0000000000..1d0b48003b --- /dev/null +++ b/Content.Client/Power/EntitySystems/BatterySystem.cs @@ -0,0 +1,5 @@ +using Content.Shared.Power.EntitySystems; + +namespace Content.Client.Power.EntitySystems; + +public sealed class BatterySystem : SharedBatterySystem; diff --git a/Content.Client/Power/EntitySystems/ChargerSystem.cs b/Content.Client/Power/EntitySystems/ChargerSystem.cs new file mode 100644 index 0000000000..efadde30e0 --- /dev/null +++ b/Content.Client/Power/EntitySystems/ChargerSystem.cs @@ -0,0 +1,5 @@ +using Content.Shared.Power.EntitySystems; + +namespace Content.Client.Power.EntitySystems; + +public sealed class ChargerSystem : SharedChargerSystem; diff --git a/Content.Client/SurveillanceCamera/SurveillanceCameraSystem.cs b/Content.Client/SurveillanceCamera/SurveillanceCameraSystem.cs new file mode 100644 index 0000000000..5dbb9f8442 --- /dev/null +++ b/Content.Client/SurveillanceCamera/SurveillanceCameraSystem.cs @@ -0,0 +1,5 @@ +using Content.Shared.SurveillanceCamera; + +namespace Content.Client.SurveillanceCamera; + +public sealed class SurveillanceCameraSystem : SharedSurveillanceCameraSystem; diff --git a/Content.Client/VendingMachines/VendingMachineSystem.cs b/Content.Client/VendingMachines/VendingMachineSystem.cs index 7491912855..f116dd5107 100644 --- a/Content.Client/VendingMachines/VendingMachineSystem.cs +++ b/Content.Client/VendingMachines/VendingMachineSystem.cs @@ -33,6 +33,7 @@ public sealed class VendingMachineSystem : SharedVendingMachineSystem component.EjectEnd = state.EjectEnd; component.DenyEnd = state.DenyEnd; component.DispenseOnHitEnd = state.DispenseOnHitEnd; + component.Broken = state.Broken; // If all we did was update amounts then we can leave BUI buttons in place. var fullUiUpdate = !component.Inventory.Keys.SequenceEqual(state.Inventory.Keys) || diff --git a/Content.IntegrationTests/Tests/Construction/RCDTest.cs b/Content.IntegrationTests/Tests/Construction/RCDTest.cs new file mode 100644 index 0000000000..814f7e89aa --- /dev/null +++ b/Content.IntegrationTests/Tests/Construction/RCDTest.cs @@ -0,0 +1,243 @@ +using System.Numerics; +using Content.IntegrationTests.Tests.Interaction; +using Content.Shared.Charges.Systems; +using Content.Shared.RCD; +using Content.Shared.RCD.Components; +using Robust.Shared.GameObjects; +using Robust.Shared.Map; +using Robust.Shared.Prototypes; + +namespace Content.IntegrationTests.Tests.Construction; + +public sealed class RCDTest : InteractionTest +{ + private static readonly EntProtoId RCDProtoId = "RCD"; + private static readonly ProtoId RCDSettingWall = "WallSolid"; + private static readonly ProtoId RCDSettingAirlock = "Airlock"; + private static readonly ProtoId RCDSettingPlating = "Plating"; + private static readonly ProtoId RCDSettingFloorSteel = "FloorSteel"; + private static readonly ProtoId RCDSettingDeconstruct = "Deconstruct"; + private static readonly ProtoId RCDSettingDeconstructTile = "DeconstructTile"; + private static readonly ProtoId RCDSettingDeconstructLattice = "DeconstructLattice"; + + /// + /// Tests RCD construction and deconstruction, as well as selecting options from the radial menu. + /// + [Test] + public async Task RCDConstructionDeconstructionTest() + { + // Place some tiles around the player so that we have space to build. + var pNorth = new EntityCoordinates(SPlayer, new Vector2(0, 1)); + var pSouth = new EntityCoordinates(SPlayer, new Vector2(0, -1)); + var pEast = new EntityCoordinates(SPlayer, new Vector2(1, 0)); + var pWest = new EntityCoordinates(SPlayer, new Vector2(-1, 0)); + + // Use EntityCoordinates relative to the grid because the player turns around when interacting. + pNorth = Transform.WithEntityId(pNorth, MapData.Grid); + pSouth = Transform.WithEntityId(pSouth, MapData.Grid); + pEast = Transform.WithEntityId(pEast, MapData.Grid); + pWest = Transform.WithEntityId(pWest, MapData.Grid); + + await SetTile(Plating, SEntMan.GetNetCoordinates(pNorth), MapData.Grid); + await SetTile(Plating, SEntMan.GetNetCoordinates(pSouth), MapData.Grid); + await SetTile(Plating, SEntMan.GetNetCoordinates(pEast), MapData.Grid); + await SetTile(Lattice, SEntMan.GetNetCoordinates(pWest), MapData.Grid); + + Assert.That(ProtoMan.TryIndex(RCDSettingWall, out var settingWall), $"RCDPrototype not found: {RCDSettingWall}."); + Assert.That(settingWall.Prototype, Is.Not.Null, "RCDPrototype has a null spawning prototype."); + Assert.That(ProtoMan.TryIndex(RCDSettingAirlock, out var settingAirlock), $"RCDPrototype not found: {RCDSettingAirlock}."); + Assert.That(settingAirlock.Prototype, Is.Not.Null, $"RCDPrototype has a null spawning prototype."); + Assert.That(ProtoMan.TryIndex(RCDSettingPlating, out var settingPlating), $"RCDPrototype not found: {RCDSettingPlating}."); + Assert.That(settingPlating.Prototype, Is.Not.Null, "RCDPrototype has a null spawning prototype."); + Assert.That(ProtoMan.TryIndex(RCDSettingFloorSteel, out var settingFloorSteel), $"RCDPrototype not found: {RCDSettingFloorSteel}."); + Assert.That(settingFloorSteel.Prototype, Is.Not.Null, "RCDPrototype has a null spawning prototype."); + Assert.That(ProtoMan.TryIndex(RCDSettingDeconstructTile, out var settingDeconstructTile), $"RCDPrototype not found: {RCDSettingDeconstructTile}."); + Assert.That(ProtoMan.TryIndex(RCDSettingDeconstructLattice, out var settingDeconstructLattice), $"RCDPrototype not found: {RCDSettingDeconstructLattice}."); + + var rcd = await PlaceInHands(RCDProtoId); + + // Give the RCD enough charges to do everything. + var sCharges = SEntMan.System(); + await Server.WaitPost(() => + { + sCharges.SetMaxCharges(ToServer(rcd), 10000); + sCharges.SetCharges(ToServer(rcd), 10000); + }); + var initialCharges = sCharges.GetCurrentCharges(ToServer(rcd)); + Assert.That(initialCharges, Is.EqualTo(10000), "RCD did not have the correct amount of charges."); + + // Make sure that picking it up did not open the UI. + Assert.That(IsUiOpen(RcdUiKey.Key), Is.False, "RCD UI was opened when picking it up."); + + // Switch to building walls. + await SetRcdProto(rcd, RCDSettingWall); + + // Build a wall next to the player. + await Interact(null, pNorth); + + // Check that there is exactly one wall. + await RunSeconds(settingWall.Delay + 1); // wait for the construction to finish + await AssertEntityLookup((settingWall.Prototype, 1)); + + // Check that the wall is in the correct tile. + var wallUid = await FindEntity(settingWall.Prototype); + var wallNetUid = FromServer(wallUid); + AssertLocation(wallNetUid, FromServer(pNorth)); + + // Check that the cost of the wall was subtracted from the current charges. + var newCharges = sCharges.GetCurrentCharges(ToServer(rcd)); + Assert.That(initialCharges - settingWall.Cost, Is.EqualTo(newCharges), "RCD has wrong amount of charges after building something."); + initialCharges = newCharges; + + // Try building another wall in the same spot. + await Interact(null, pNorth); + await RunSeconds(settingWall.Delay + 1); // wait for the construction to finish + + // Check that there is still exactly one wall. + await AssertEntityLookup((settingWall.Prototype, 1)); + + // Check that the failed construction did not cost us any charges. + newCharges = sCharges.GetCurrentCharges(ToServer(rcd)); + Assert.That(initialCharges, Is.EqualTo(newCharges), "RCD has wrong amount of charges after failing to build something."); + + // Switch to building airlocks. + await SetRcdProto(rcd, RCDSettingAirlock); + + // Build an airlock next to the player. + await Interact(null, pSouth); + + // Check that there is exactly one airlock. + await RunSeconds(settingAirlock.Delay + 1); // wait for the construction to finish + await AssertEntityLookup( + (settingWall.Prototype, 1), + (settingAirlock.Prototype, 1) + ); + + // Check that the airlock is in the correct tile. + var airlockUid = await FindEntity(settingAirlock.Prototype); + var airlockNetUid = FromServer(airlockUid); + AssertLocation(airlockNetUid, FromServer(pSouth)); + + // Check that the cost of the airlock was subtracted from the current charges. + newCharges = sCharges.GetCurrentCharges(ToServer(rcd)); + Assert.That(initialCharges - settingAirlock.Cost, Is.EqualTo(newCharges), "RCD has wrong amount of charges after building something."); + initialCharges = newCharges; + + // Switch to building plating. + await SetRcdProto(rcd, RCDSettingPlating); + + // Try building plating on existing plating. + await AssertTile(settingPlating.Prototype, FromServer(pEast)); + await Interact(null, pEast); + + // Check that the tile did not change. + await AssertTile(settingPlating.Prototype, FromServer(pEast)); + + // Check that the failed construction did not cost us any charges. + await RunSeconds(settingPlating.Delay + 1); // wait for the construction to finish + newCharges = sCharges.GetCurrentCharges(ToServer(rcd)); + Assert.That(initialCharges, Is.EqualTo(newCharges), "RCD has wrong amount of charges after failing to build something."); + + // Try building plating on top of lattice. + await AssertTile(Lattice, FromServer(pWest)); + await Interact(null, pWest); + await RunSeconds(settingPlating.Delay + 1); // wait for the construction to finish + + // Check that the tile is now plating. + await AssertTile(settingPlating.Prototype, FromServer(pWest)); + + // Check that the cost of the plating was subtracted from the current charges. + newCharges = sCharges.GetCurrentCharges(ToServer(rcd)); + Assert.That(initialCharges - settingPlating.Cost, Is.EqualTo(newCharges), "RCD has wrong amount of charges after building something."); + initialCharges = newCharges; + + // Switch to building steel tiles. + await SetRcdProto(rcd, RCDSettingFloorSteel); + + // Try building a steel tile on top of plating. + await Interact(null, pEast); + + // Check that the tile is now a steel tile. + await RunSeconds(settingFloorSteel.Delay + 1); // wait for the construction to finish + await AssertTile(settingFloorSteel.Prototype, FromServer(pEast)); + + // Check that the cost of the plating was subtracted from the current charges. + newCharges = sCharges.GetCurrentCharges(ToServer(rcd)); + Assert.That(initialCharges - settingFloorSteel.Cost, Is.EqualTo(newCharges), "RCD has wrong amount of charges after building something."); + initialCharges = newCharges; + + // Switch to deconstruction mode. + await SetRcdProto(rcd, RCDSettingDeconstruct); + + // Deconstruct the wall. + Assert.That(SEntMan.TryGetComponent(wallUid, out var wallComp), "Wall entity did not have the RCDDeconstructableComponent."); + await Interact(wallUid, pNorth); + await RunSeconds(wallComp.Delay + 1); // wait for the deconstruction to finish + AssertDeleted(wallNetUid); + + // Check that the cost of the deconstruction was subtracted from the current charges. + newCharges = sCharges.GetCurrentCharges(ToServer(rcd)); + Assert.That(initialCharges - wallComp.Cost, Is.EqualTo(newCharges), "RCD has wrong amount of charges after deconstructing something."); + initialCharges = newCharges; + + // Deconstruct the airlock. + Assert.That(SEntMan.TryGetComponent(airlockUid, out var airlockComp), "Wall entity did not have the RCDDeconstructableComponent."); + await Interact(airlockUid, pSouth); + await RunSeconds(airlockComp.Delay + 1); // wait for the deconstruction to finish + AssertDeleted(airlockNetUid); + + // Check that the cost of the deconstruction was subtracted from the current charges. + newCharges = sCharges.GetCurrentCharges(ToServer(rcd)); + Assert.That(initialCharges - airlockComp.Cost, Is.EqualTo(newCharges), "RCD has wrong amount of charges after deconstructing something."); + initialCharges = newCharges; + + // Deconstruct the steel tile. + await Interact(null, pEast); + await RunSeconds(settingDeconstructTile.Delay + 1); // wait for the deconstruction to finish + await AssertTile(Lattice, FromServer(pEast)); + + // Check that the cost of the deconstruction was subtracted from the current charges. + newCharges = sCharges.GetCurrentCharges(ToServer(rcd)); + Assert.That(initialCharges - settingDeconstructTile.Cost, Is.EqualTo(newCharges), "RCD has wrong amount of charges after deconstructing something."); + initialCharges = newCharges; + + // Deconstruct the plating. + await Interact(null, pWest); + await RunSeconds(settingDeconstructTile.Delay + 1); // wait for the deconstruction to finish + await AssertTile(Lattice, FromServer(pWest)); + + // Check that the cost of the deconstruction was subtracted from the current charges. + newCharges = sCharges.GetCurrentCharges(ToServer(rcd)); + Assert.That(initialCharges - settingDeconstructTile.Cost, Is.EqualTo(newCharges), "RCD has wrong amount of charges after deconstructing something."); + initialCharges = newCharges; + + // Deconstruct the lattice. + await Interact(null, pWest); + await RunSeconds(settingDeconstructLattice.Delay + 1); // wait for the deconstruction to finish + await AssertTile(null, FromServer(pWest)); + + // Check that the cost of the deconstruction was subtracted from the current charges. + newCharges = sCharges.GetCurrentCharges(ToServer(rcd)); + Assert.That(initialCharges - settingDeconstructLattice.Cost, Is.EqualTo(newCharges), "RCD has wrong amount of charges after deconstructing something."); + + // Wait for the visual effect to disappear. + await RunSeconds(3); + + // Check that there are no entities left. + await AssertEntityLookup(); + } + + private async Task SetRcdProto(NetEntity rcd, ProtoId protoId) + { + await UseInHand(); + await RunTicks(3); + Assert.That(IsUiOpen(RcdUiKey.Key), Is.True, "RCD UI was not opened when using the RCD while holding it."); + + // Simulating a click on the right control for nested radial menus is very complicated. + // So we just manually send a networking message from the client to tell the server we selected an option. + // TODO: Write a separate test for clicking through a SimpleRadialMenu. + await SendBui(RcdUiKey.Key, new RCDSystemMessage(protoId), rcd); + await CloseBui(RcdUiKey.Key, rcd); + Assert.That(IsUiOpen(RcdUiKey.Key), Is.False, "RCD UI is still open."); + } +} diff --git a/Content.IntegrationTests/Tests/Interaction/InteractionTest.Helpers.cs b/Content.IntegrationTests/Tests/Interaction/InteractionTest.Helpers.cs index e92ccf64df..fa16730dd5 100644 --- a/Content.IntegrationTests/Tests/Interaction/InteractionTest.Helpers.cs +++ b/Content.IntegrationTests/Tests/Interaction/InteractionTest.Helpers.cs @@ -726,7 +726,7 @@ public abstract partial class InteractionTest tile = MapSystem.GetTileRef(gridUid, grid, serverCoords).Tile; }); - Assert.That(tile.TypeId, Is.EqualTo(targetTile.TypeId)); + Assert.That(tile.TypeId, Is.EqualTo(targetTile.TypeId), $"Expected tile at NetCoordinates {coords}: {TileMan[targetTile.TypeId].Name}. But was: {TileMan[tile.TypeId].Name}"); } protected void AssertGridCount(int value) @@ -742,6 +742,20 @@ public abstract partial class InteractionTest Assert.That(count, Is.EqualTo(value)); } + /// + /// Check that some entity is close to a certain coordinate location. + /// + /// The entity to check the location for. Defaults to + /// The coordinates the entity should be at. + /// The maximum allowed distance from the target coords + protected void AssertLocation(NetEntity? target, NetCoordinates coords, float radius = 0.01f) + { + target ??= Target; + Assert.That(target, Is.Not.Null, "No target specified"); + Assert.That(Position(target!.Value).TryDelta(SEntMan, Transform, ToServer(coords), out var delta), "Could not calculate distance between coordinates."); + Assert.That(delta.Length(), Is.LessThanOrEqualTo(radius), $"{SEntMan.ToPrettyString(SEntMan.GetEntity(target.Value))} was not at the intended location. Distance: {delta}, allowed distance: {radius}"); + } + #endregion #region Entity lookups @@ -986,9 +1000,9 @@ public abstract partial class InteractionTest /// /// Sends a bui message using the given bui key. /// - protected async Task SendBui(Enum key, BoundUserInterfaceMessage msg, EntityUid? _ = null) + protected async Task SendBui(Enum key, BoundUserInterfaceMessage msg, NetEntity? target = null) { - if (!TryGetBui(key, out var bui)) + if (!TryGetBui(key, out var bui, target)) return; await Client.WaitPost(() => bui.SendMessage(msg)); @@ -1000,9 +1014,9 @@ public abstract partial class InteractionTest /// /// Sends a bui message using the given bui key. /// - protected async Task CloseBui(Enum key, EntityUid? _ = null) + protected async Task CloseBui(Enum key, NetEntity? target = null) { - if (!TryGetBui(key, out var bui)) + if (!TryGetBui(key, out var bui, target)) return; await Client.WaitPost(() => bui.Close()); @@ -1424,15 +1438,25 @@ public abstract partial class InteractionTest protected EntityUid? ToServer(NetEntity? nent) => SEntMan.GetEntity(nent); protected EntityUid? ToClient(NetEntity? nent) => CEntMan.GetEntity(nent); protected EntityUid ToServer(EntityUid cuid) => SEntMan.GetEntity(CEntMan.GetNetEntity(cuid)); - protected EntityUid ToClient(EntityUid cuid) => CEntMan.GetEntity(SEntMan.GetNetEntity(cuid)); + protected EntityUid ToClient(EntityUid suid) => CEntMan.GetEntity(SEntMan.GetNetEntity(suid)); protected EntityUid? ToServer(EntityUid? cuid) => SEntMan.GetEntity(CEntMan.GetNetEntity(cuid)); - protected EntityUid? ToClient(EntityUid? cuid) => CEntMan.GetEntity(SEntMan.GetNetEntity(cuid)); + protected EntityUid? ToClient(EntityUid? suid) => CEntMan.GetEntity(SEntMan.GetNetEntity(suid)); protected EntityCoordinates ToServer(NetCoordinates coords) => SEntMan.GetCoordinates(coords); protected EntityCoordinates ToClient(NetCoordinates coords) => CEntMan.GetCoordinates(coords); protected EntityCoordinates? ToServer(NetCoordinates? coords) => SEntMan.GetCoordinates(coords); protected EntityCoordinates? ToClient(NetCoordinates? coords) => CEntMan.GetCoordinates(coords); + protected NetEntity FromServer(EntityUid suid) => SEntMan.GetNetEntity(suid); + protected NetEntity FromClient(EntityUid cuid) => CEntMan.GetNetEntity(cuid); + protected NetEntity? FromServer(EntityUid? suid) => SEntMan.GetNetEntity(suid); + protected NetEntity? FromClient(EntityUid? cuid) => CEntMan.GetNetEntity(cuid); + + protected NetCoordinates FromServer(EntityCoordinates scoords) => SEntMan.GetNetCoordinates(scoords); + protected NetCoordinates FromClient(EntityCoordinates ccoords) => CEntMan.GetNetCoordinates(ccoords); + protected NetCoordinates? FromServer(EntityCoordinates? scoords) => SEntMan.GetNetCoordinates(scoords); + protected NetCoordinates? FromClient(EntityCoordinates? ccoords) => CEntMan.GetNetCoordinates(ccoords); + #endregion #region Metadata & Transforms diff --git a/Content.IntegrationTests/Tests/Power/PowerTest.cs b/Content.IntegrationTests/Tests/Power/PowerTest.cs index a448427d05..ab8a421c03 100644 --- a/Content.IntegrationTests/Tests/Power/PowerTest.cs +++ b/Content.IntegrationTests/Tests/Power/PowerTest.cs @@ -1,12 +1,11 @@ #nullable enable -using Content.Server.NodeContainer; using Content.Server.NodeContainer.EntitySystems; -using Content.Server.NodeContainer.Nodes; using Content.Server.Power.Components; using Content.Server.Power.EntitySystems; using Content.Server.Power.Nodes; using Content.Shared.Coordinates; using Content.Shared.NodeContainer; +using Content.Shared.Power.Components; using Robust.Shared.GameObjects; using Robust.Shared.Map; using Robust.Shared.Maths; diff --git a/Content.IntegrationTests/Tests/Power/StationPowerTests.cs b/Content.IntegrationTests/Tests/Power/StationPowerTests.cs index c9f9498750..3a0af28e48 100644 --- a/Content.IntegrationTests/Tests/Power/StationPowerTests.cs +++ b/Content.IntegrationTests/Tests/Power/StationPowerTests.cs @@ -5,6 +5,7 @@ using Content.Server.Maps; using Content.Server.Power.Components; using Content.Server.Power.NodeGroups; using Content.Server.Power.Pow3r; +using Content.Shared.Power.Components; using Content.Shared.NodeContainer; using Robust.Shared.EntitySerialization; diff --git a/Content.Server/Administration/Systems/AdminVerbSystem.Smites.cs b/Content.Server/Administration/Systems/AdminVerbSystem.Smites.cs index 02c47691fd..d03b799ff2 100644 --- a/Content.Server/Administration/Systems/AdminVerbSystem.Smites.cs +++ b/Content.Server/Administration/Systems/AdminVerbSystem.Smites.cs @@ -5,7 +5,6 @@ using Content.Server.Body.Systems; using Content.Server.Electrocution; using Content.Server.Explosion.EntitySystems; using Content.Server.GhostKick; -using Content.Server.Medical; using Content.Server.Nutrition.EntitySystems; using Content.Server.Physics.Components; using Content.Server.Pointing.Components; @@ -32,6 +31,7 @@ using Content.Shared.Electrocution; using Content.Shared.Gravity; using Content.Shared.Interaction.Components; using Content.Shared.Inventory; +using Content.Shared.Medical; using Content.Shared.Mobs; using Content.Shared.Mobs.Components; using Content.Shared.Mobs.Systems; diff --git a/Content.Server/Administration/Systems/AdminVerbSystem.Tools.cs b/Content.Server/Administration/Systems/AdminVerbSystem.Tools.cs index 44795d1fb2..176d4fd04c 100644 --- a/Content.Server/Administration/Systems/AdminVerbSystem.Tools.cs +++ b/Content.Server/Administration/Systems/AdminVerbSystem.Tools.cs @@ -24,6 +24,7 @@ using Content.Shared.Doors.Components; using Content.Shared.Hands.Components; using Content.Shared.Inventory; using Content.Shared.PDA; +using Content.Shared.Power.Components; using Content.Shared.Stacks; using Content.Shared.Station.Components; using Content.Shared.Verbs; diff --git a/Content.Server/Clothing/Systems/ChameleonClothingSystem.cs b/Content.Server/Clothing/Systems/ChameleonClothingSystem.cs index f734d3eb3e..645b47d180 100644 --- a/Content.Server/Clothing/Systems/ChameleonClothingSystem.cs +++ b/Content.Server/Clothing/Systems/ChameleonClothingSystem.cs @@ -1,14 +1,10 @@ -using System.Linq; -using Content.Server.Emp; using Content.Shared.Clothing.Components; using Content.Shared.Clothing.EntitySystems; using Content.Shared.Emp; using Content.Shared.IdentityManagement; using Content.Shared.IdentityManagement.Components; -using Content.Shared.Inventory; using Content.Shared.Prototypes; using Robust.Shared.Prototypes; -using Robust.Shared.Random; namespace Content.Server.Clothing.Systems; @@ -16,15 +12,12 @@ public sealed class ChameleonClothingSystem : SharedChameleonClothingSystem { [Dependency] private readonly IPrototypeManager _proto = default!; [Dependency] private readonly IdentitySystem _identity = default!; - [Dependency] private readonly IRobustRandom _random = default!; public override void Initialize() { base.Initialize(); SubscribeLocalEvent(OnMapInit); SubscribeLocalEvent(OnSelected); - - SubscribeLocalEvent(OnEmpPulse); } private void OnMapInit(EntityUid uid, ChameleonClothingComponent component, MapInitEvent args) @@ -37,21 +30,6 @@ public sealed class ChameleonClothingSystem : SharedChameleonClothingSystem SetSelectedPrototype(uid, args.SelectedId, component: component); } - private void OnEmpPulse(EntityUid uid, ChameleonClothingComponent component, ref EmpPulseEvent args) - { - if (!component.AffectedByEmp) - return; - - if (component.EmpContinuous) - component.NextEmpChange = _timing.CurTime + TimeSpan.FromSeconds(1f / component.EmpChangeIntensity); - - var pick = GetRandomValidPrototype(component.Slot, component.RequireTag); - SetSelectedPrototype(uid, pick, component: component); - - args.Affected = true; - args.Disabled = true; - } - private void UpdateUi(EntityUid uid, ChameleonClothingComponent? component = null) { if (!Resolve(uid, ref component)) @@ -64,7 +42,7 @@ public sealed class ChameleonClothingSystem : SharedChameleonClothingSystem /// /// Change chameleon items name, description and sprite to mimic other entity prototype. /// - public void SetSelectedPrototype(EntityUid uid, string? protoId, bool forceUpdate = false, + public override void SetSelectedPrototype(EntityUid uid, string? protoId, bool forceUpdate = false, ChameleonClothingComponent? component = null) { if (!Resolve(uid, ref component, false)) @@ -88,14 +66,6 @@ public sealed class ChameleonClothingSystem : SharedChameleonClothingSystem Dirty(uid, component); } - /// - /// Get a random prototype for a given slot. - /// - public string GetRandomValidPrototype(SlotFlags slot, string? tag = null) - { - return _random.Pick(GetValidTargets(slot, tag).ToList()); - } - public override void Update(float frameTime) { base.Update(frameTime); @@ -106,7 +76,7 @@ public sealed class ChameleonClothingSystem : SharedChameleonClothingSystem if (!chameleon.EmpContinuous) continue; - if (_timing.CurTime < chameleon.NextEmpChange) + if (Timing.CurTime < chameleon.NextEmpChange) continue; // randomly pick cloth element from available and apply it diff --git a/Content.Server/Construction/Completions/BuildMech.cs b/Content.Server/Construction/Completions/BuildMech.cs index e11c79d851..c0b5921db9 100644 --- a/Content.Server/Construction/Completions/BuildMech.cs +++ b/Content.Server/Construction/Completions/BuildMech.cs @@ -1,7 +1,7 @@ using Content.Server.Mech.Systems; -using Content.Server.Power.Components; using Content.Shared.Construction; using Content.Shared.Mech.Components; +using Content.Shared.Power.Components; using JetBrains.Annotations; using Robust.Server.Containers; using Robust.Shared.Containers; diff --git a/Content.Server/Destructible/Thresholds/Behaviors/VomitBehavior.cs b/Content.Server/Destructible/Thresholds/Behaviors/VomitBehavior.cs index 067e7d4565..cba8576213 100644 --- a/Content.Server/Destructible/Thresholds/Behaviors/VomitBehavior.cs +++ b/Content.Server/Destructible/Thresholds/Behaviors/VomitBehavior.cs @@ -1,4 +1,4 @@ -using Content.Server.Medical; +using Content.Shared.Medical; namespace Content.Server.Destructible.Thresholds.Behaviors; diff --git a/Content.Server/Emp/EmpSystem.cs b/Content.Server/Emp/EmpSystem.cs index 67f9cabd42..38ab09e1cf 100644 --- a/Content.Server/Emp/EmpSystem.cs +++ b/Content.Server/Emp/EmpSystem.cs @@ -2,16 +2,11 @@ using Content.Server.Power.EntitySystems; using Content.Server.Radio; using Content.Server.SurveillanceCamera; using Content.Shared.Emp; -using Robust.Shared.Map; namespace Content.Server.Emp; public sealed class EmpSystem : SharedEmpSystem { - [Dependency] private readonly EntityLookupSystem _lookup = default!; - - public const string EmpPulseEffectPrototype = "EffectEmpPulse"; - public override void Initialize() { base.Initialize(); @@ -22,84 +17,6 @@ public sealed class EmpSystem : SharedEmpSystem SubscribeLocalEvent(OnCameraSetActive); } - public override void EmpPulse(MapCoordinates coordinates, float range, float energyConsumption, float duration) - { - foreach (var uid in _lookup.GetEntitiesInRange(coordinates, range)) - { - TryEmpEffects(uid, energyConsumption, duration); - } - Spawn(EmpPulseEffectPrototype, coordinates); - } - - /// - /// Triggers an EMP pulse at the given location, by first raising an , then a raising on all entities in range. - /// - /// The location to trigger the EMP pulse at. - /// The range of the EMP pulse. - /// The amount of energy consumed by the EMP pulse. - /// The duration of the EMP effects. - public void EmpPulse(EntityCoordinates coordinates, float range, float energyConsumption, float duration) - { - foreach (var uid in _lookup.GetEntitiesInRange(coordinates, range)) - { - TryEmpEffects(uid, energyConsumption, duration); - } - Spawn(EmpPulseEffectPrototype, coordinates); - } - - /// - /// Attempts to apply the effects of an EMP pulse onto an entity by first raising an , followed by raising a on it. - /// - /// The entity to apply the EMP effects on. - /// The amount of energy consumed by the EMP. - /// The duration of the EMP effects. - public void TryEmpEffects(EntityUid uid, float energyConsumption, float duration) - { - var attemptEv = new EmpAttemptEvent(); - RaiseLocalEvent(uid, attemptEv); - if (attemptEv.Cancelled) - return; - - DoEmpEffects(uid, energyConsumption, duration); - } - - /// - /// Applies the effects of an EMP pulse onto an entity by raising a on it. - /// - /// The entity to apply the EMP effects on. - /// The amount of energy consumed by the EMP. - /// The duration of the EMP effects. - public void DoEmpEffects(EntityUid uid, float energyConsumption, float duration) - { - var ev = new EmpPulseEvent(energyConsumption, false, false, TimeSpan.FromSeconds(duration)); - RaiseLocalEvent(uid, ref ev); - - if (ev.Affected) - Spawn(EmpDisabledEffectPrototype, Transform(uid).Coordinates); - - if (!ev.Disabled) - return; - - var disabled = EnsureComp(uid); - disabled.DisabledUntil = Timing.CurTime + TimeSpan.FromSeconds(duration); - } - - public override void Update(float frameTime) - { - base.Update(frameTime); - - var query = EntityQueryEnumerator(); - while (query.MoveNext(out var uid, out var comp)) - { - if (comp.DisabledUntil < Timing.CurTime) - { - RemComp(uid); - var ev = new EmpDisabledRemoved(); - RaiseLocalEvent(uid, ref ev); - } - } - } - private void OnRadioSendAttempt(EntityUid uid, EmpDisabledComponent component, ref RadioSendAttemptEvent args) { args.Cancelled = true; @@ -120,14 +37,3 @@ public sealed class EmpSystem : SharedEmpSystem args.Cancelled = true; } } - -/// -/// Raised on an entity before . Cancel this to prevent the emp event being raised. -/// -public sealed partial class EmpAttemptEvent : CancellableEntityEventArgs; - -[ByRefEvent] -public record struct EmpPulseEvent(float EnergyConsumption, bool Affected, bool Disabled, TimeSpan Duration); - -[ByRefEvent] -public record struct EmpDisabledRemoved(); diff --git a/Content.Server/EntityEffects/EntityEffectSystem.cs b/Content.Server/EntityEffects/EntityEffectSystem.cs index 3a86941a34..238ef4849d 100644 --- a/Content.Server/EntityEffects/EntityEffectSystem.cs +++ b/Content.Server/EntityEffects/EntityEffectSystem.cs @@ -11,7 +11,6 @@ using Content.Server.Emp; using Content.Server.Explosion.EntitySystems; using Content.Server.Fluids.EntitySystems; using Content.Server.Ghost.Roles.Components; -using Content.Server.Medical; using Content.Server.Polymorph.Components; using Content.Server.Polymorph.Systems; using Content.Server.Speech.Components; @@ -29,6 +28,7 @@ using Content.Shared.EntityEffects.Effects; using Content.Shared.EntityEffects; using Content.Shared.Flash; using Content.Shared.Maps; +using Content.Shared.Medical; using Content.Shared.Mind.Components; using Content.Shared.Popups; using Content.Shared.Random; diff --git a/Content.Server/Holosign/HolosignSystem.cs b/Content.Server/Holosign/HolosignSystem.cs index 58ed77ecf8..beb5e909c0 100644 --- a/Content.Server/Holosign/HolosignSystem.cs +++ b/Content.Server/Holosign/HolosignSystem.cs @@ -1,8 +1,8 @@ using Content.Shared.Examine; using Content.Shared.Coordinates.Helpers; -using Content.Server.Power.Components; using Content.Server.PowerCell; using Content.Shared.Interaction; +using Content.Shared.Power.Components; using Content.Shared.Storage; namespace Content.Server.Holosign; @@ -12,7 +12,6 @@ public sealed class HolosignSystem : EntitySystem [Dependency] private readonly PowerCellSystem _powerCell = default!; [Dependency] private readonly SharedTransformSystem _transform = default!; - public override void Initialize() { base.Initialize(); diff --git a/Content.Server/Light/EntitySystems/EmergencyLightSystem.cs b/Content.Server/Light/EntitySystems/EmergencyLightSystem.cs index 1b7b614665..0aea245c79 100644 --- a/Content.Server/Light/EntitySystems/EmergencyLightSystem.cs +++ b/Content.Server/Light/EntitySystems/EmergencyLightSystem.cs @@ -8,6 +8,7 @@ using Content.Shared.Examine; using Content.Shared.Light; using Content.Shared.Light.Components; using Content.Shared.Power; +using Content.Shared.Power.Components; using Content.Shared.Station.Components; using Robust.Server.GameObjects; using Color = Robust.Shared.Maths.Color; diff --git a/Content.Server/Light/EntitySystems/PoweredLightSystem.cs b/Content.Server/Light/EntitySystems/PoweredLightSystem.cs index 948c44cd75..d1c231e490 100644 --- a/Content.Server/Light/EntitySystems/PoweredLightSystem.cs +++ b/Content.Server/Light/EntitySystems/PoweredLightSystem.cs @@ -1,4 +1,3 @@ -using Content.Server.Emp; using Content.Server.Ghost; using Content.Shared.Light.Components; using Content.Shared.Light.EntitySystems; @@ -16,8 +15,6 @@ public sealed class PoweredLightSystem : SharedPoweredLightSystem SubscribeLocalEvent(OnMapInit); SubscribeLocalEvent(OnGhostBoo); - - SubscribeLocalEvent(OnEmpPulse); } private void OnGhostBoo(EntityUid uid, PoweredLightComponent light, GhostBooEvent args) @@ -55,10 +52,4 @@ public sealed class PoweredLightSystem : SharedPoweredLightSystem // need this to update visualizers UpdateLight(uid, light); } - - private void OnEmpPulse(EntityUid uid, PoweredLightComponent component, ref EmpPulseEvent args) - { - if (TryDestroyBulb(uid, component)) - args.Affected = true; - } } diff --git a/Content.Server/Mech/Systems/MechSystem.cs b/Content.Server/Mech/Systems/MechSystem.cs index 7b0c2f6472..917f4f5035 100644 --- a/Content.Server/Mech/Systems/MechSystem.cs +++ b/Content.Server/Mech/Systems/MechSystem.cs @@ -2,7 +2,6 @@ using System.Linq; using Content.Server.Atmos.EntitySystems; using Content.Server.Body.Systems; using Content.Server.Mech.Components; -using Content.Server.Power.Components; using Content.Server.Power.EntitySystems; using Content.Shared.ActionBlocker; using Content.Shared.Damage; @@ -14,6 +13,7 @@ using Content.Shared.Mech.Components; using Content.Shared.Mech.EntitySystems; using Content.Shared.Movement.Events; using Content.Shared.Popups; +using Content.Shared.Power.Components; using Content.Shared.Tools; using Content.Shared.Tools.Components; using Content.Shared.Tools.Systems; diff --git a/Content.Server/Medical/SuitSensors/SuitSensorSystem.cs b/Content.Server/Medical/SuitSensors/SuitSensorSystem.cs index 7af093b178..72c3f5ecd9 100644 --- a/Content.Server/Medical/SuitSensors/SuitSensorSystem.cs +++ b/Content.Server/Medical/SuitSensors/SuitSensorSystem.cs @@ -1,8 +1,6 @@ using Content.Server.DeviceNetwork.Systems; -using Content.Server.Emp; using Content.Server.Medical.CrewMonitoring; using Content.Shared.DeviceNetwork.Components; -using Content.Shared.Medical.SuitSensor; using Content.Shared.Medical.SuitSensors; using Robust.Shared.Timing; @@ -14,14 +12,6 @@ public sealed class SuitSensorSystem : SharedSuitSensorSystem [Dependency] private readonly DeviceNetworkSystem _deviceNetworkSystem = default!; [Dependency] private readonly SingletonDeviceNetServerSystem _singletonServerSystem = default!; - public override void Initialize() - { - base.Initialize(); - - SubscribeLocalEvent(OnEmpPulse); - SubscribeLocalEvent(OnEmpFinished); - } - public override void Update(float frameTime) { base.Update(frameTime); @@ -70,22 +60,4 @@ public sealed class SuitSensorSystem : SharedSuitSensorSystem _deviceNetworkSystem.QueuePacket(uid, sensor.ConnectedServer, payload, device: device); } } - - private void OnEmpPulse(Entity ent, ref EmpPulseEvent args) - { - args.Affected = true; - args.Disabled = true; - - ent.Comp.PreviousMode = ent.Comp.Mode; - SetSensor(ent.AsNullable(), SuitSensorMode.SensorOff, null); - - ent.Comp.PreviousControlsLocked = ent.Comp.ControlsLocked; - ent.Comp.ControlsLocked = true; - } - - private void OnEmpFinished(Entity ent, ref EmpDisabledRemoved args) - { - SetSensor(ent.AsNullable(), ent.Comp.PreviousMode, null); - ent.Comp.ControlsLocked = ent.Comp.PreviousControlsLocked; - } } diff --git a/Content.Server/Medical/VomitSystem.cs b/Content.Server/Medical/VomitSystem.cs deleted file mode 100644 index 235cc17331..0000000000 --- a/Content.Server/Medical/VomitSystem.cs +++ /dev/null @@ -1,112 +0,0 @@ -using Content.Server.Body.Systems; -using Content.Server.Fluids.EntitySystems; -using Content.Server.Forensics; -using Content.Server.Popups; -using Content.Shared.Body.Components; -using Content.Shared.Body.Systems; -using Content.Shared.Chemistry.Components; -using Content.Shared.Chemistry.EntitySystems; -using Content.Shared.Chemistry.Reagent; -using Content.Shared.IdentityManagement; -using Content.Shared.Mobs.Systems; -using Content.Shared.Movement.Systems; -using Content.Shared.Nutrition.Components; -using Content.Shared.Nutrition.EntitySystems; -using Robust.Server.Audio; -using Robust.Shared.Audio; -using Robust.Shared.Prototypes; - -namespace Content.Server.Medical -{ - public sealed class VomitSystem : EntitySystem - { - [Dependency] private readonly IPrototypeManager _proto = default!; - [Dependency] private readonly AudioSystem _audio = default!; - [Dependency] private readonly BloodstreamSystem _bloodstream = default!; - [Dependency] private readonly BodySystem _body = default!; - [Dependency] private readonly ForensicsSystem _forensics = default!; - [Dependency] private readonly HungerSystem _hunger = default!; - [Dependency] private readonly MobStateSystem _mobstate = default!; - [Dependency] private readonly MovementModStatusSystem _movementMod = default!; - [Dependency] private readonly PopupSystem _popup = default!; - [Dependency] private readonly PuddleSystem _puddle = default!; - [Dependency] private readonly SharedSolutionContainerSystem _solutionContainer = default!; - [Dependency] private readonly ThirstSystem _thirst = default!; - - private static readonly ProtoId VomitCollection = "Vomit"; - - private readonly SoundSpecifier _vomitSound = new SoundCollectionSpecifier(VomitCollection, - AudioParams.Default.WithVariation(0.2f).WithVolume(-4f)); - - /// - /// Make an entity vomit, if they have a stomach. - /// - public void Vomit(EntityUid uid, float thirstAdded = -40f, float hungerAdded = -40f, bool force = false) - { - // Main requirement: You have a stomach - var stomachList = _body.GetBodyOrganEntityComps(uid); - if (stomachList.Count == 0) - return; - - // Vomit only if entity is alive - // Ignore condition if force was set to true - if (!force && _mobstate.IsDead(uid)) - return; - - // Vomiting makes you hungrier and thirstier - if (TryComp(uid, out var hunger)) - _hunger.ModifyHunger(uid, hungerAdded, hunger); - - if (TryComp(uid, out var thirst)) - _thirst.ModifyThirst(uid, thirst, thirstAdded); - - // It fully empties the stomach, this amount from the chem stream is relatively small - var solutionSize = (MathF.Abs(thirstAdded) + MathF.Abs(hungerAdded)) / 6; - // Apply a bit of slowdown - _movementMod.TryUpdateMovementSpeedModDuration(uid, MovementModStatusSystem.VomitingSlowdown, TimeSpan.FromSeconds(solutionSize), 0.5f); - - // TODO: Need decals - var solution = new Solution(); - - // Empty the stomach out into it - foreach (var stomach in stomachList) - { - if (_solutionContainer.ResolveSolution(stomach.Owner, StomachSystem.DefaultSolutionName, ref stomach.Comp1.Solution, out var sol)) - { - solution.AddSolution(sol, _proto); - sol.RemoveAllSolution(); - _solutionContainer.UpdateChemicals(stomach.Comp1.Solution.Value); - } - } - // Adds a tiny amount of the chem stream from earlier along with vomit - if (TryComp(uid, out var bloodStream)) - { - const float chemMultiplier = 0.1f; - - var vomitAmount = solutionSize; - - // Takes 10% of the chemicals removed from the chem stream - if (_solutionContainer.ResolveSolution(uid, bloodStream.ChemicalSolutionName, ref bloodStream.ChemicalSolution)) - { - var vomitChemstreamAmount = _solutionContainer.SplitSolution(bloodStream.ChemicalSolution.Value, vomitAmount); - vomitChemstreamAmount.ScaleSolution(chemMultiplier); - solution.AddSolution(vomitChemstreamAmount, _proto); - - vomitAmount -= (float)vomitChemstreamAmount.Volume; - } - - // Makes a vomit solution the size of 90% of the chemicals removed from the chemstream - solution.AddReagent(new ReagentId("Vomit", _bloodstream.GetEntityBloodData(uid)), vomitAmount); // TODO: Dehardcode vomit prototype - } - - if (_puddle.TrySpillAt(uid, solution, out var puddle, false)) - { - _forensics.TransferDna(puddle, uid, false); - } - - // Force sound to play as spill doesn't work if solution is empty. - _audio.PlayPvs(_vomitSound, uid); - _popup.PopupEntity(Loc.GetString("disease-vomit", ("person", Identity.Entity(uid, EntityManager))), uid); - } - } -} diff --git a/Content.Server/Ninja/Systems/BatteryDrainerSystem.cs b/Content.Server/Ninja/Systems/BatteryDrainerSystem.cs index 71e38ed3f6..e563386608 100644 --- a/Content.Server/Ninja/Systems/BatteryDrainerSystem.cs +++ b/Content.Server/Ninja/Systems/BatteryDrainerSystem.cs @@ -6,7 +6,7 @@ using Content.Shared.Interaction; using Content.Shared.Ninja.Components; using Content.Shared.Ninja.Systems; using Content.Shared.Popups; -using Robust.Shared.Audio; +using Content.Shared.Power.Components; using Robust.Shared.Audio.Systems; namespace Content.Server.Ninja.Systems; diff --git a/Content.Server/Ninja/Systems/NinjaSuitSystem.cs b/Content.Server/Ninja/Systems/NinjaSuitSystem.cs index 62d3d0e3ca..399d94e8f7 100644 --- a/Content.Server/Ninja/Systems/NinjaSuitSystem.cs +++ b/Content.Server/Ninja/Systems/NinjaSuitSystem.cs @@ -1,11 +1,11 @@ -using Content.Server.Emp; using Content.Server.Ninja.Events; using Content.Server.Power.Components; using Content.Server.PowerCell; +using Content.Shared.Emp; using Content.Shared.Hands.EntitySystems; using Content.Shared.Ninja.Components; using Content.Shared.Ninja.Systems; -using Content.Shared.Popups; +using Content.Shared.Power.Components; using Content.Shared.PowerCell.Components; using Robust.Shared.Containers; @@ -16,7 +16,7 @@ namespace Content.Server.Ninja.Systems; /// public sealed class NinjaSuitSystem : SharedNinjaSuitSystem { - [Dependency] private readonly EmpSystem _emp = default!; + [Dependency] private readonly SharedEmpSystem _emp = default!; [Dependency] private readonly SharedHandsSystem _hands = default!; [Dependency] private readonly SpaceNinjaSystem _ninja = default!; [Dependency] private readonly PowerCellSystem _powerCell = default!; @@ -30,7 +30,6 @@ public sealed class NinjaSuitSystem : SharedNinjaSuitSystem base.Initialize(); SubscribeLocalEvent(OnSuitInsertAttempt); - SubscribeLocalEvent(OnEmpAttempt); SubscribeLocalEvent(OnRecallKatana); SubscribeLocalEvent(OnEmp); } @@ -44,7 +43,7 @@ public sealed class NinjaSuitSystem : SharedNinjaSuitSystem // raise event to let ninja components get starting battery _ninja.GetNinjaBattery(user.Owner, out var uid, out var _); - if (uid is not {} battery_uid) + if (uid is not { } battery_uid) return; var ev = new NinjaBatteryChangedEvent(battery_uid, ent.Owner); @@ -96,17 +95,10 @@ public sealed class NinjaSuitSystem : SharedNinjaSuitSystem // if a cell is able to automatically recharge, boost the score drastically depending on the recharge rate, // this is to ensure a ninja can still upgrade to a micro reactor cell even if they already have a medium or high. if (TryComp(uid, out var selfcomp) && selfcomp.AutoRecharge) - return battcomp.MaxCharge + (selfcomp.AutoRechargeRate*AutoRechargeValue); + return battcomp.MaxCharge + selfcomp.AutoRechargeRate * AutoRechargeValue; return battcomp.MaxCharge; } - private void OnEmpAttempt(EntityUid uid, NinjaSuitComponent comp, EmpAttemptEvent args) - { - // ninja suit (battery) is immune to emp - // powercell relays the event to suit - args.Cancel(); - } - protected override void UserUnequippedSuit(Entity ent, Entity user) { base.UserUnequippedSuit(ent, user); @@ -144,6 +136,7 @@ public sealed class NinjaSuitSystem : SharedNinjaSuitSystem Popup.PopupEntity(Loc.GetString(message), user, user); } + // TODO: Move this to shared when power cells are predicted. private void OnEmp(Entity ent, ref NinjaEmpEvent args) { var (uid, comp) = ent; @@ -159,7 +152,6 @@ public sealed class NinjaSuitSystem : SharedNinjaSuitSystem if (CheckDisabled(ent, user)) return; - var coords = _transform.GetMapCoordinates(user); - _emp.EmpPulse(coords, comp.EmpRange, comp.EmpConsumption, comp.EmpDuration); + _emp.EmpPulse(Transform(user).Coordinates, comp.EmpRange, comp.EmpConsumption, comp.EmpDuration, user); } } diff --git a/Content.Server/Ninja/Systems/SpaceNinjaSystem.cs b/Content.Server/Ninja/Systems/SpaceNinjaSystem.cs index 1ece045774..ff88926723 100644 --- a/Content.Server/Ninja/Systems/SpaceNinjaSystem.cs +++ b/Content.Server/Ninja/Systems/SpaceNinjaSystem.cs @@ -1,26 +1,20 @@ using Content.Server.Communications; -using Content.Server.Chat.Managers; using Content.Server.CriminalRecords.Systems; -using Content.Server.GameTicking.Rules.Components; using Content.Server.Objectives.Components; using Content.Server.Objectives.Systems; -using Content.Server.Power.Components; using Content.Server.Power.EntitySystems; using Content.Server.PowerCell; using Content.Server.Research.Systems; -using Content.Server.Roles; using Content.Shared.Alert; using Content.Shared.Doors.Components; using Content.Shared.IdentityManagement; using Content.Shared.Mind; using Content.Shared.Ninja.Components; using Content.Shared.Ninja.Systems; +using Content.Shared.Power.Components; using Content.Shared.Popups; using Content.Shared.Rounding; -using Robust.Shared.Audio; -using Robust.Shared.Player; using System.Diagnostics.CodeAnalysis; -using Robust.Shared.Audio.Systems; namespace Content.Server.Ninja.Systems; diff --git a/Content.Server/Power/Components/BatteryChargerComponent.cs b/Content.Server/Power/Components/BatteryChargerComponent.cs index 99284e44ac..7f3dd39524 100644 --- a/Content.Server/Power/Components/BatteryChargerComponent.cs +++ b/Content.Server/Power/Components/BatteryChargerComponent.cs @@ -1,4 +1,5 @@ using Content.Server.Power.NodeGroups; +using Content.Shared.Power.Components; namespace Content.Server.Power.Components { diff --git a/Content.Server/Power/Components/BatteryComponent.cs b/Content.Server/Power/Components/BatteryComponent.cs deleted file mode 100644 index 96571bcca3..0000000000 --- a/Content.Server/Power/Components/BatteryComponent.cs +++ /dev/null @@ -1,67 +0,0 @@ -using Content.Server.Power.EntitySystems; -using Content.Shared.Guidebook; - -namespace Content.Server.Power.Components -{ - /// - /// Battery node on the pow3r network. Needs other components to connect to actual networks. - /// - [RegisterComponent] - [Virtual] - [Access(typeof(BatterySystem))] - public partial class BatteryComponent : Component - { - public string SolutionName = "battery"; - - /// - /// Maximum charge of the battery in joules (ie. watt seconds) - /// - [DataField] - [GuidebookData] - public float MaxCharge; - - /// - /// Current charge of the battery in joules (ie. watt seconds) - /// - [DataField("startingCharge")] - public float CurrentCharge; - - /// - /// The price per one joule. Default is 1 credit for 10kJ. - /// - [DataField] - public float PricePerJoule = 0.0001f; - } - - /// - /// Raised when a battery's charge or capacity changes (capacity affects relative charge percentage). - /// - [ByRefEvent] - public readonly record struct ChargeChangedEvent(float Charge, float MaxCharge); - - /// - /// Raised when it is necessary to get information about battery charges. - /// - [ByRefEvent] - public sealed class GetChargeEvent : EntityEventArgs - { - public float CurrentCharge; - public float MaxCharge; - } - - /// - /// Raised when it is necessary to change the current battery charge to a some value. - /// - [ByRefEvent] - public sealed class ChangeChargeEvent : EntityEventArgs - { - public float OriginalValue; - public float ResidualValue; - - public ChangeChargeEvent(float value) - { - OriginalValue = value; - ResidualValue = value; - } - } -} diff --git a/Content.Server/Power/Components/ChargerComponent.cs b/Content.Server/Power/Components/ChargerComponent.cs deleted file mode 100644 index 4a3c83ae03..0000000000 --- a/Content.Server/Power/Components/ChargerComponent.cs +++ /dev/null @@ -1,37 +0,0 @@ -using Content.Shared.Power; -using Content.Shared.Whitelist; - -namespace Content.Server.Power.Components -{ - [RegisterComponent] - public sealed partial class ChargerComponent : Component - { - [ViewVariables] - public CellChargerStatus Status; - - /// - /// The charge rate of the charger, in watts - /// - [DataField("chargeRate")] - public float ChargeRate = 20.0f; - - /// - /// The container ID that is holds the entities being charged. - /// - [DataField("slotId", required: true)] - public string SlotId = string.Empty; - - /// - /// A whitelist for what entities can be charged by this Charger. - /// - [DataField("whitelist")] - public EntityWhitelist? Whitelist; - - /// - /// Indicates whether the charger is portable and thus subject to EMP effects - /// and bypasses checks for transform, anchored, and ApcPowerReceiverComponent. - /// - [DataField] - public bool Portable = false; - } -} diff --git a/Content.Server/Power/EntitySystems/ApcSystem.cs b/Content.Server/Power/EntitySystems/ApcSystem.cs index 29c1431179..ed7ec0e225 100644 --- a/Content.Server/Power/EntitySystems/ApcSystem.cs +++ b/Content.Server/Power/EntitySystems/ApcSystem.cs @@ -1,11 +1,12 @@ -using Content.Server.Emp; using Content.Server.Popups; using Content.Server.Power.Components; using Content.Server.Power.Pow3r; using Content.Shared.Access.Systems; using Content.Shared.APC; using Content.Shared.Emag.Systems; +using Content.Shared.Emp; using Content.Shared.Popups; +using Content.Shared.Power; using Content.Shared.Rounding; using Robust.Server.GameObjects; using Robust.Shared.Audio; @@ -203,6 +204,9 @@ public sealed class ApcSystem : EntitySystem return ApcExternalPowerState.Good; } + // TODO: This subscription should be in shared. + // But I am not moving ApcComponent to shared, this PR already got soaped enough and that component uses several layers of OOP. + // At least the EMP visuals won't mispredict, since all APCs also have the BatteryComponent, which also has a EMP effect and is in shared. private void OnEmpPulse(EntityUid uid, ApcComponent component, ref EmpPulseEvent args) { if (component.MainBreakerEnabled) diff --git a/Content.Server/Power/EntitySystems/BatteryInterfaceSystem.cs b/Content.Server/Power/EntitySystems/BatteryInterfaceSystem.cs index 33e3f8ff2c..83ff28646d 100644 --- a/Content.Server/Power/EntitySystems/BatteryInterfaceSystem.cs +++ b/Content.Server/Power/EntitySystems/BatteryInterfaceSystem.cs @@ -2,6 +2,7 @@ using Content.Server.Power.Components; using Content.Shared.Database; using Content.Shared.Power; +using Content.Shared.Power.Components; using Robust.Server.GameObjects; namespace Content.Server.Power.EntitySystems; diff --git a/Content.Server/Power/EntitySystems/BatterySystem.cs b/Content.Server/Power/EntitySystems/BatterySystem.cs index f4e48f4a3d..28b14f6925 100644 --- a/Content.Server/Power/EntitySystems/BatterySystem.cs +++ b/Content.Server/Power/EntitySystems/BatterySystem.cs @@ -1,7 +1,9 @@ -using Content.Server.Emp; using Content.Server.Power.Components; using Content.Shared.Cargo; using Content.Shared.Examine; +using Content.Shared.Power; +using Content.Shared.Power.Components; +using Content.Shared.Power.EntitySystems; using Content.Shared.Rejuvenate; using JetBrains.Annotations; using Robust.Shared.Utility; @@ -10,7 +12,7 @@ using Robust.Shared.Timing; namespace Content.Server.Power.EntitySystems { [UsedImplicitly] - public sealed class BatterySystem : EntitySystem + public sealed class BatterySystem : SharedBatterySystem { [Dependency] private readonly IGameTiming _timing = default!; @@ -22,7 +24,6 @@ namespace Content.Server.Power.EntitySystems SubscribeLocalEvent(OnNetBatteryRejuvenate); SubscribeLocalEvent(OnBatteryRejuvenate); SubscribeLocalEvent(CalculateBatteryPrice); - SubscribeLocalEvent(OnEmpPulse); SubscribeLocalEvent(OnChangeCharge); SubscribeLocalEvent(OnGetCharge); @@ -50,7 +51,7 @@ namespace Content.Server.Power.EntitySystems if (effectiveMax == 0) effectiveMax = 1; var chargeFraction = batteryComponent.CurrentCharge / effectiveMax; - var chargePercentRounded = (int) (chargeFraction * 100); + var chargePercentRounded = (int)(chargeFraction * 100); args.PushMarkup( Loc.GetString( "examinable-battery-component-examine-detail", @@ -108,15 +109,6 @@ namespace Content.Server.Power.EntitySystems { args.Price += component.CurrentCharge * component.PricePerJoule; } - - private void OnEmpPulse(EntityUid uid, BatteryComponent component, ref EmpPulseEvent args) - { - args.Affected = true; - UseCharge(uid, args.EnergyConsumption, component); - // Apply a cooldown to the entity's self recharge if needed to avoid it immediately self recharging after an EMP. - TrySetChargeCooldown(uid); - } - private void OnChangeCharge(Entity entity, ref ChangeChargeEvent args) { if (args.ResidualValue == 0) @@ -131,7 +123,7 @@ namespace Content.Server.Power.EntitySystems args.MaxCharge += entity.Comp.MaxCharge; } - public float UseCharge(EntityUid uid, float value, BatteryComponent? battery = null) + public override float UseCharge(EntityUid uid, float value, BatteryComponent? battery = null) { if (value <= 0 || !Resolve(uid, ref battery) || battery.CurrentCharge == 0) return 0; @@ -139,7 +131,7 @@ namespace Content.Server.Power.EntitySystems return ChangeCharge(uid, -value, battery); } - public void SetMaxCharge(EntityUid uid, float value, BatteryComponent? battery = null) + public override void SetMaxCharge(EntityUid uid, float value, BatteryComponent? battery = null) { if (!Resolve(uid, ref battery)) return; @@ -174,7 +166,7 @@ namespace Content.Server.Power.EntitySystems /// /// Changes the current battery charge by some value /// - public float ChangeCharge(EntityUid uid, float value, BatteryComponent? battery = null) + public override float ChangeCharge(EntityUid uid, float value, BatteryComponent? battery = null) { if (!Resolve(uid, ref battery)) return 0; @@ -190,10 +182,7 @@ namespace Content.Server.Power.EntitySystems return delta; } - /// - /// Checks if the entity has a self recharge and puts it on cooldown if applicable. - /// - public void TrySetChargeCooldown(EntityUid uid, float value = -1) + public override void TrySetChargeCooldown(EntityUid uid, float value = -1) { if (!TryComp(uid, out var batteryself)) return; @@ -228,7 +217,7 @@ namespace Content.Server.Power.EntitySystems /// /// If sufficient charge is available on the battery, use it. Otherwise, don't. /// - public bool TryUseCharge(EntityUid uid, float value, BatteryComponent? battery = null) + public override bool TryUseCharge(EntityUid uid, float value, BatteryComponent? battery = null) { if (!Resolve(uid, ref battery, false) || value > battery.CurrentCharge) return false; diff --git a/Content.Server/Power/EntitySystems/ChargerSystem.cs b/Content.Server/Power/EntitySystems/ChargerSystem.cs index c128c846fb..e8dc9e9962 100644 --- a/Content.Server/Power/EntitySystems/ChargerSystem.cs +++ b/Content.Server/Power/EntitySystems/ChargerSystem.cs @@ -1,8 +1,9 @@ using Content.Server.Power.Components; -using Content.Server.Emp; -using Content.Server.PowerCell; using Content.Shared.Examine; +using Content.Server.PowerCell; using Content.Shared.Power; +using Content.Shared.Power.Components; +using Content.Shared.Power.EntitySystems; using Content.Shared.PowerCell.Components; using Content.Shared.Emp; using JetBrains.Annotations; @@ -15,7 +16,7 @@ using Content.Shared.Whitelist; namespace Content.Server.Power.EntitySystems; [UsedImplicitly] -internal sealed class ChargerSystem : EntitySystem +public sealed class ChargerSystem : SharedChargerSystem { [Dependency] private readonly ContainerSystem _container = default!; [Dependency] private readonly PowerCellSystem _powerCell = default!; @@ -25,6 +26,8 @@ internal sealed class ChargerSystem : EntitySystem public override void Initialize() { + base.Initialize(); + SubscribeLocalEvent(OnStartup); SubscribeLocalEvent(OnPowerChanged); SubscribeLocalEvent(OnInserted); @@ -32,8 +35,6 @@ internal sealed class ChargerSystem : EntitySystem SubscribeLocalEvent(OnInsertAttempt); SubscribeLocalEvent(OnEntityStorageInsertAttempt); SubscribeLocalEvent(OnChargerExamine); - - SubscribeLocalEvent(OnEmpPulse); } private void OnStartup(EntityUid uid, ChargerComponent component, ComponentStartup args) @@ -46,7 +47,7 @@ internal sealed class ChargerSystem : EntitySystem using (args.PushGroup(nameof(ChargerComponent))) { // rate at which the charger charges - args.PushMarkup(Loc.GetString("charger-examine", ("color", "yellow"), ("chargeRate", (int) component.ChargeRate))); + args.PushMarkup(Loc.GetString("charger-examine", ("color", "yellow"), ("chargeRate", (int)component.ChargeRate))); // try to get contents of the charger if (!_container.TryGetContainer(uid, component.SlotId, out var container)) @@ -70,7 +71,7 @@ internal sealed class ChargerSystem : EntitySystem continue; var chargePercentage = (battery.CurrentCharge / battery.MaxCharge) * 100; - args.PushMarkup(Loc.GetString("charger-content", ("chargePercentage", (int) chargePercentage))); + args.PushMarkup(Loc.GetString("charger-content", ("chargePercentage", (int)chargePercentage))); } } } @@ -194,12 +195,6 @@ internal sealed class ChargerSystem : EntitySystem } } - private void OnEmpPulse(EntityUid uid, ChargerComponent component, ref EmpPulseEvent args) - { - args.Affected = true; - args.Disabled = true; - } - private CellChargerStatus GetStatus(EntityUid uid, ChargerComponent component) { if (!component.Portable) diff --git a/Content.Server/Power/EntitySystems/PowerMonitoringConsoleSystem.cs b/Content.Server/Power/EntitySystems/PowerMonitoringConsoleSystem.cs index be79d64fc9..25757360b3 100644 --- a/Content.Server/Power/EntitySystems/PowerMonitoringConsoleSystem.cs +++ b/Content.Server/Power/EntitySystems/PowerMonitoringConsoleSystem.cs @@ -1,6 +1,4 @@ -using Content.Server.NodeContainer; using Content.Server.NodeContainer.EntitySystems; -using Content.Server.NodeContainer.Nodes; using Content.Server.Power.Components; using Content.Server.Power.Nodes; using Content.Server.Power.NodeGroups; @@ -9,6 +7,7 @@ using Content.Shared.GameTicking.Components; using Content.Shared.Pinpointer; using Content.Shared.Station.Components; using Content.Shared.Power; +using Content.Shared.Power.Components; using JetBrains.Annotations; using Robust.Server.GameObjects; using Robust.Shared.Map.Components; diff --git a/Content.Server/Power/EntitySystems/RiggableSystem.cs b/Content.Server/Power/EntitySystems/RiggableSystem.cs index 26eaca80fe..0f8b32865b 100644 --- a/Content.Server/Power/EntitySystems/RiggableSystem.cs +++ b/Content.Server/Power/EntitySystems/RiggableSystem.cs @@ -4,6 +4,7 @@ using Content.Server.Kitchen.Components; using Content.Server.Power.Components; using Content.Shared.Chemistry.EntitySystems; using Content.Shared.Database; +using Content.Shared.Power.Components; using Content.Shared.Rejuvenate; namespace Content.Server.Power.EntitySystems; diff --git a/Content.Server/Power/SMES/SmesSystem.cs b/Content.Server/Power/SMES/SmesSystem.cs index ebd56ee3e1..15c40b3c92 100644 --- a/Content.Server/Power/SMES/SmesSystem.cs +++ b/Content.Server/Power/SMES/SmesSystem.cs @@ -1,6 +1,7 @@ using Content.Server.Power.Components; using Content.Server.Power.EntitySystems; using Content.Shared.Power; +using Content.Shared.Power.Components; using Content.Shared.Rounding; using Content.Shared.SMES; using JetBrains.Annotations; diff --git a/Content.Server/Power/SetBatteryPercentCommand.cs b/Content.Server/Power/SetBatteryPercentCommand.cs index 7ceee20172..03d6d30f8a 100644 --- a/Content.Server/Power/SetBatteryPercentCommand.cs +++ b/Content.Server/Power/SetBatteryPercentCommand.cs @@ -1,7 +1,7 @@ using Content.Server.Administration; -using Content.Server.Power.Components; using Content.Server.Power.EntitySystems; using Content.Shared.Administration; +using Content.Shared.Power.Components; using Robust.Shared.Console; namespace Content.Server.Power diff --git a/Content.Server/PowerCell/PowerCellSystem.Draw.cs b/Content.Server/PowerCell/PowerCellSystem.Draw.cs index 9156d30b1f..40e54ba13a 100644 --- a/Content.Server/PowerCell/PowerCellSystem.Draw.cs +++ b/Content.Server/PowerCell/PowerCellSystem.Draw.cs @@ -1,4 +1,4 @@ -using Content.Server.Power.Components; +using Content.Shared.Power; using Content.Shared.PowerCell; using Content.Shared.PowerCell.Components; diff --git a/Content.Server/PowerCell/PowerCellSystem.cs b/Content.Server/PowerCell/PowerCellSystem.cs index 01767d6c41..6c00cdd300 100644 --- a/Content.Server/PowerCell/PowerCellSystem.cs +++ b/Content.Server/PowerCell/PowerCellSystem.cs @@ -1,17 +1,17 @@ -using Content.Server.Emp; +using System.Diagnostics.CodeAnalysis; +using Content.Server.Kitchen.Components; using Content.Server.Power.Components; +using Content.Server.Power.EntitySystems; +using Content.Shared.Containers.ItemSlots; using Content.Shared.Examine; +using Content.Shared.Popups; +using Content.Shared.Power; +using Content.Shared.Power.Components; using Content.Shared.PowerCell; using Content.Shared.PowerCell.Components; using Content.Shared.Rounding; +using Content.Shared.UserInterface; using Robust.Shared.Containers; -using System.Diagnostics.CodeAnalysis; -using Content.Server.Kitchen.Components; -using Content.Server.Power.EntitySystems; -using Content.Server.UserInterface; -using Content.Shared.Containers.ItemSlots; -using Content.Shared.Popups; -using ActivatableUISystem = Content.Shared.UserInterface.ActivatableUISystem; namespace Content.Server.PowerCell; @@ -34,7 +34,6 @@ public sealed partial class PowerCellSystem : SharedPowerCellSystem SubscribeLocalEvent(OnChargeChanged); SubscribeLocalEvent(OnCellExamined); - SubscribeLocalEvent(OnCellEmpAttempt); SubscribeLocalEvent(OnDrawChargeChanged); SubscribeLocalEvent(OnDrawCellChanged); @@ -221,14 +220,6 @@ public sealed partial class PowerCellSystem : SharedPowerCellSystem OnBatteryExamined(uid, battery, args); } - private void OnCellEmpAttempt(EntityUid uid, PowerCellComponent component, EmpAttemptEvent args) - { - var parent = Transform(uid).ParentUid; - // relay the attempt event to the slot so it can cancel it - if (HasComp(parent)) - RaiseLocalEvent(parent, args); - } - private void OnCellSlotExamined(EntityUid uid, PowerCellSlotComponent component, ExaminedEvent args) { TryGetBatteryFromSlot(uid, out var battery); diff --git a/Content.Server/PowerSink/PowerSinkSystem.cs b/Content.Server/PowerSink/PowerSinkSystem.cs index ef08240c5c..2bf9046cc3 100644 --- a/Content.Server/PowerSink/PowerSinkSystem.cs +++ b/Content.Server/PowerSink/PowerSinkSystem.cs @@ -1,13 +1,13 @@ -using Content.Server.Explosion.EntitySystems; +using Content.Server.Chat.Systems; +using Content.Server.Explosion.EntitySystems; using Content.Server.Power.Components; -using Content.Shared.Examine; -using Robust.Shared.Utility; -using Content.Server.Chat.Systems; -using Content.Server.Station.Systems; -using Robust.Shared.Timing; -using Robust.Shared.Audio; -using Robust.Shared.Audio.Systems; using Content.Server.Power.EntitySystems; +using Content.Server.Station.Systems; +using Content.Shared.Examine; +using Content.Shared.Power.Components; +using Robust.Shared.Audio.Systems; +using Robust.Shared.Timing; +using Robust.Shared.Utility; namespace Content.Server.PowerSink { diff --git a/Content.Server/Radio/EntitySystems/HeadsetSystem.cs b/Content.Server/Radio/EntitySystems/HeadsetSystem.cs index 445c4429c7..f1e15bcc79 100644 --- a/Content.Server/Radio/EntitySystems/HeadsetSystem.cs +++ b/Content.Server/Radio/EntitySystems/HeadsetSystem.cs @@ -1,5 +1,4 @@ using Content.Server.Chat.Systems; -using Content.Server.Emp; using Content.Shared.Inventory.Events; using Content.Shared.Radio; using Content.Shared.Radio.Components; @@ -22,8 +21,6 @@ public sealed class HeadsetSystem : SharedHeadsetSystem SubscribeLocalEvent(OnKeysChanged); SubscribeLocalEvent(OnSpeak); - - SubscribeLocalEvent(OnEmpPulse); } private void OnKeysChanged(EntityUid uid, HeadsetComponent component, EncryptionChannelsChangedEvent args) @@ -71,7 +68,6 @@ public sealed class HeadsetSystem : SharedHeadsetSystem protected override void OnGotUnequipped(EntityUid uid, HeadsetComponent component, GotUnequippedEvent args) { base.OnGotUnequipped(uid, component, args); - component.IsEquipped = false; RemComp(uid); RemComp(args.Equipee); } @@ -84,6 +80,9 @@ public sealed class HeadsetSystem : SharedHeadsetSystem if (component.Enabled == value) return; + component.Enabled = value; + Dirty(uid, component); + if (!value) { RemCompDeferred(uid); @@ -115,13 +114,4 @@ public sealed class HeadsetSystem : SharedHeadsetSystem if (TryComp(parent, out ActorComponent? actor)) _netMan.ServerSendMessage(args.ChatMsg, actor.PlayerSession.Channel); } - - private void OnEmpPulse(EntityUid uid, HeadsetComponent component, ref EmpPulseEvent args) - { - if (component.Enabled) - { - args.Affected = true; - args.Disabled = true; - } - } } diff --git a/Content.Server/SensorMonitoring/BatterySensorComponent.cs b/Content.Server/SensorMonitoring/BatterySensorComponent.cs index 2f0c97e6ec..a5a48ddc91 100644 --- a/Content.Server/SensorMonitoring/BatterySensorComponent.cs +++ b/Content.Server/SensorMonitoring/BatterySensorComponent.cs @@ -1,4 +1,5 @@ using Content.Server.Power.Components; +using Content.Shared.Power.Components; namespace Content.Server.SensorMonitoring; diff --git a/Content.Server/SensorMonitoring/BatterySensorSystem.cs b/Content.Server/SensorMonitoring/BatterySensorSystem.cs index 5047cd1d29..bd94868c5f 100644 --- a/Content.Server/SensorMonitoring/BatterySensorSystem.cs +++ b/Content.Server/SensorMonitoring/BatterySensorSystem.cs @@ -1,8 +1,8 @@ -using Content.Server.DeviceNetwork; -using Content.Server.DeviceNetwork.Systems; +using Content.Server.DeviceNetwork.Systems; using Content.Server.Power.Components; using Content.Shared.DeviceNetwork; using Content.Shared.DeviceNetwork.Events; +using Content.Shared.Power.Components; namespace Content.Server.SensorMonitoring; diff --git a/Content.Server/Silicons/StationAi/StationAiSystem.cs b/Content.Server/Silicons/StationAi/StationAiSystem.cs index 73c5670c1e..4ee2a07d72 100644 --- a/Content.Server/Silicons/StationAi/StationAiSystem.cs +++ b/Content.Server/Silicons/StationAi/StationAiSystem.cs @@ -19,6 +19,7 @@ using Content.Shared.DoAfter; using Content.Shared.Mobs; using Content.Shared.Mobs.Systems; using Content.Shared.Popups; +using Content.Shared.Power; using Content.Shared.Power.Components; using Content.Shared.Rejuvenate; using Content.Shared.Roles; diff --git a/Content.Server/Stunnable/Systems/StunbatonSystem.cs b/Content.Server/Stunnable/Systems/StunbatonSystem.cs index f043c452ca..7f8aa37036 100644 --- a/Content.Server/Stunnable/Systems/StunbatonSystem.cs +++ b/Content.Server/Stunnable/Systems/StunbatonSystem.cs @@ -7,6 +7,8 @@ using Content.Shared.Examine; using Content.Shared.Item.ItemToggle; using Content.Shared.Item.ItemToggle.Components; using Content.Shared.Popups; +using Content.Shared.Power; +using Content.Shared.Power.Components; using Content.Shared.Stunnable; namespace Content.Server.Stunnable.Systems diff --git a/Content.Server/SurveillanceCamera/Systems/SurveillanceCameraMicrophoneSystem.cs b/Content.Server/SurveillanceCamera/Systems/SurveillanceCameraMicrophoneSystem.cs index 4029488159..1f298f32a4 100644 --- a/Content.Server/SurveillanceCamera/Systems/SurveillanceCameraMicrophoneSystem.cs +++ b/Content.Server/SurveillanceCamera/Systems/SurveillanceCameraMicrophoneSystem.cs @@ -1,6 +1,7 @@ using Content.Server.Chat.Systems; using Content.Shared.Speech; using Content.Shared.Speech.Components; +using Content.Shared.SurveillanceCamera.Components; using Content.Shared.Whitelist; using Robust.Shared.Player; using static Content.Server.Chat.Systems.ChatSystem; diff --git a/Content.Server/SurveillanceCamera/Systems/SurveillanceCameraSystem.cs b/Content.Server/SurveillanceCamera/Systems/SurveillanceCameraSystem.cs index 7f7dbc6c97..7e275c78ce 100644 --- a/Content.Server/SurveillanceCamera/Systems/SurveillanceCameraSystem.cs +++ b/Content.Server/SurveillanceCamera/Systems/SurveillanceCameraSystem.cs @@ -1,13 +1,12 @@ using Content.Server.Administration.Logs; using Content.Server.DeviceNetwork.Systems; -using Content.Server.Emp; using Content.Shared.ActionBlocker; using Content.Shared.Database; using Content.Shared.DeviceNetwork; using Content.Shared.DeviceNetwork.Events; using Content.Shared.Power; using Content.Shared.SurveillanceCamera; -using Content.Shared.Verbs; +using Content.Shared.SurveillanceCamera.Components; using Robust.Server.GameObjects; using Robust.Shared.Player; using Robust.Shared.Prototypes; @@ -15,7 +14,7 @@ using Content.Shared.DeviceNetwork.Components; namespace Content.Server.SurveillanceCamera; -public sealed class SurveillanceCameraSystem : EntitySystem +public sealed class SurveillanceCameraSystem : SharedSurveillanceCameraSystem { [Dependency] private readonly IPrototypeManager _prototypeManager = default!; [Dependency] private readonly ActionBlockerSystem _actionBlocker = default!; @@ -57,15 +56,13 @@ public sealed class SurveillanceCameraSystem : EntitySystem public override void Initialize() { + base.Initialize(); + SubscribeLocalEvent(OnShutdown); SubscribeLocalEvent(OnPowerChanged); SubscribeLocalEvent(OnPacketReceived); SubscribeLocalEvent(OnSetName); SubscribeLocalEvent(OnSetNetwork); - SubscribeLocalEvent>(AddVerbs); - - SubscribeLocalEvent(OnEmpPulse); - SubscribeLocalEvent(OnEmpDisabledRemoved); } private void OnPacketReceived(EntityUid uid, SurveillanceCameraComponent component, DeviceNetworkPacketEvent args) @@ -131,26 +128,6 @@ public sealed class SurveillanceCameraSystem : EntitySystem } } - private void AddVerbs(EntityUid uid, SurveillanceCameraComponent component, GetVerbsEvent verbs) - { - if (!_actionBlocker.CanInteract(verbs.User, uid) || !_actionBlocker.CanComplexInteract(verbs.User)) - { - return; - } - - if (component.NameSet && component.NetworkSet) - { - return; - } - - AlternativeVerb verb = new(); - verb.Text = Loc.GetString("surveillance-camera-setup"); - verb.Act = () => OpenSetupInterface(uid, verbs.User, component); - verbs.Verbs.Add(verb); - } - - - private void OnPowerChanged(EntityUid camera, SurveillanceCameraComponent component, ref PowerChangedEvent args) { SetActive(camera, args.Powered, component); @@ -173,6 +150,7 @@ public sealed class SurveillanceCameraSystem : EntitySystem component.CameraId = args.Name; component.NameSet = true; + Dirty(uid, component); UpdateSetupInterface(uid, component); _adminLogger.Add(LogType.Chat, LogImpact.Low, $"{ToPrettyString(args.Actor)} set the name of {ToPrettyString(uid)} to \"{args.Name}.\""); } @@ -198,10 +176,11 @@ public sealed class SurveillanceCameraSystem : EntitySystem _deviceNetworkSystem.SetReceiveFrequency(uid, frequency.Frequency); component.NetworkSet = true; + Dirty(uid, component); UpdateSetupInterface(uid, component); } - private void OpenSetupInterface(EntityUid uid, EntityUid player, SurveillanceCameraComponent? camera = null) + protected override void OpenSetupInterface(EntityUid uid, EntityUid player, SurveillanceCameraComponent? camera = null) { if (!Resolve(uid, ref camera)) return; @@ -271,7 +250,7 @@ public sealed class SurveillanceCameraSystem : EntitySystem UpdateVisuals(camera, component); } - public void SetActive(EntityUid camera, bool setting, SurveillanceCameraComponent? component = null) + public override void SetActive(EntityUid camera, bool setting, SurveillanceCameraComponent? component = null) { if (!Resolve(camera, ref component)) { @@ -418,21 +397,6 @@ public sealed class SurveillanceCameraSystem : EntitySystem _appearance.SetData(uid, SurveillanceCameraVisualsKey.Key, key, appearance); } - - private void OnEmpPulse(EntityUid uid, SurveillanceCameraComponent component, ref EmpPulseEvent args) - { - if (component.Active) - { - args.Affected = true; - args.Disabled = true; - SetActive(uid, false); - } - } - - private void OnEmpDisabledRemoved(EntityUid uid, SurveillanceCameraComponent component, ref EmpDisabledRemoved args) - { - SetActive(uid, true); - } } public sealed class OnSurveillanceCameraViewerAddEvent : EntityEventArgs diff --git a/Content.Server/Tesla/EntitySystem/TeslaCoilSystem.cs b/Content.Server/Tesla/EntitySystem/TeslaCoilSystem.cs index 4fd2f9b6ed..f3cae90b40 100644 --- a/Content.Server/Tesla/EntitySystem/TeslaCoilSystem.cs +++ b/Content.Server/Tesla/EntitySystem/TeslaCoilSystem.cs @@ -1,7 +1,7 @@ -using Content.Server.Power.Components; using Content.Server.Power.EntitySystems; using Content.Server.Tesla.Components; using Content.Server.Lightning; +using Content.Shared.Power.Components; namespace Content.Server.Tesla.EntitySystems; diff --git a/Content.Server/VendingMachines/VendingMachineSystem.cs b/Content.Server/VendingMachines/VendingMachineSystem.cs index df204cf338..86a7b512b6 100644 --- a/Content.Server/VendingMachines/VendingMachineSystem.cs +++ b/Content.Server/VendingMachines/VendingMachineSystem.cs @@ -1,9 +1,7 @@ using System.Linq; using System.Numerics; using Content.Server.Cargo.Systems; -using Content.Server.Emp; using Content.Server.Power.Components; -using Content.Server.Power.EntitySystems; using Content.Server.Vocalization.Systems; using Content.Shared.Cargo; using Content.Shared.Damage; @@ -35,7 +33,6 @@ namespace Content.Server.VendingMachines SubscribeLocalEvent(OnBreak); SubscribeLocalEvent(OnDamageChanged); SubscribeLocalEvent(OnVendingPrice); - SubscribeLocalEvent(OnEmpPulse); SubscribeLocalEvent(OnTryVocalize); SubscribeLocalEvent(OnActivatableUIOpenAttempt); @@ -86,6 +83,7 @@ namespace Content.Server.VendingMachines private void OnBreak(EntityUid uid, VendingMachineComponent vendComponent, BreakageEventArgs eventArgs) { vendComponent.Broken = true; + Dirty(uid, vendComponent); TryUpdateVisualState((uid, vendComponent)); } @@ -94,6 +92,7 @@ namespace Content.Server.VendingMachines if (!args.DamageIncreased && component.Broken) { component.Broken = false; + Dirty(uid, component); TryUpdateVisualState((uid, component)); return; } @@ -257,16 +256,6 @@ namespace Content.Server.VendingMachines args.Price += priceSets.Max(); } - private void OnEmpPulse(EntityUid uid, VendingMachineComponent component, ref EmpPulseEvent args) - { - if (!component.Broken && this.IsPowered(uid, EntityManager)) - { - args.Affected = true; - args.Disabled = true; - component.NextEmpEject = Timing.CurTime; - } - } - private void OnTryVocalize(Entity ent, ref TryVocalizeEvent args) { args.Cancelled |= ent.Comp.Broken; diff --git a/Content.Server/Weapons/Ranged/Systems/GunSystem.Battery.cs b/Content.Server/Weapons/Ranged/Systems/GunSystem.Battery.cs index 4865d08782..d697e2bef1 100644 --- a/Content.Server/Weapons/Ranged/Systems/GunSystem.Battery.cs +++ b/Content.Server/Weapons/Ranged/Systems/GunSystem.Battery.cs @@ -1,7 +1,6 @@ -using Content.Server.Power.Components; using Content.Shared.Damage; using Content.Shared.Damage.Events; -using Content.Shared.FixedPoint; +using Content.Shared.Power; using Content.Shared.PowerCell.Components; using Content.Shared.Projectiles; using Content.Shared.Weapons.Ranged; diff --git a/Content.Server/Xenoarchaeology/Artifact/XAE/Components/XAEEmpInAreaComponent.cs b/Content.Server/Xenoarchaeology/Artifact/XAE/Components/XAEEmpInAreaComponent.cs index 1e9489e9ec..88faf2fdcd 100644 --- a/Content.Server/Xenoarchaeology/Artifact/XAE/Components/XAEEmpInAreaComponent.cs +++ b/Content.Server/Xenoarchaeology/Artifact/XAE/Components/XAEEmpInAreaComponent.cs @@ -22,5 +22,5 @@ public sealed partial class XAEEmpInAreaComponent : Component /// Duration (in seconds) for which devices going to be disabled. /// [DataField] - public float DisableDuration = 60f; + public TimeSpan DisableDuration = TimeSpan.FromSeconds(60); } diff --git a/Content.Server/Xenoarchaeology/Artifact/XAE/XAEChargeBatterySystem.cs b/Content.Server/Xenoarchaeology/Artifact/XAE/XAEChargeBatterySystem.cs index 5e9bf7352b..85ffc75627 100644 --- a/Content.Server/Xenoarchaeology/Artifact/XAE/XAEChargeBatterySystem.cs +++ b/Content.Server/Xenoarchaeology/Artifact/XAE/XAEChargeBatterySystem.cs @@ -1,6 +1,6 @@ -using Content.Server.Power.Components; using Content.Server.Power.EntitySystems; using Content.Server.Xenoarchaeology.Artifact.XAE.Components; +using Content.Shared.Power.Components; using Content.Shared.Xenoarchaeology.Artifact; using Content.Shared.Xenoarchaeology.Artifact.XAE; diff --git a/Content.Shared/Anomaly/Effects/Components/ElectricityAnomalyComponent.cs b/Content.Shared/Anomaly/Effects/Components/ElectricityAnomalyComponent.cs index e48e0ae6a7..c05a3f6e41 100644 --- a/Content.Shared/Anomaly/Effects/Components/ElectricityAnomalyComponent.cs +++ b/Content.Shared/Anomaly/Effects/Components/ElectricityAnomalyComponent.cs @@ -61,5 +61,5 @@ public sealed partial class ElectricityAnomalyComponent : Component /// Duration of devices being disabled by the emp pulse upon going supercritical. /// [DataField, ViewVariables(VVAccess.ReadWrite)] - public float EmpDisabledDuration = 60f; + public TimeSpan EmpDisabledDuration = TimeSpan.FromSeconds(60); } diff --git a/Content.Shared/Clothing/EntitySystems/SharedChameleonClothingSystem.cs b/Content.Shared/Clothing/EntitySystems/SharedChameleonClothingSystem.cs index 18b79bf52b..07aae61f83 100644 --- a/Content.Shared/Clothing/EntitySystems/SharedChameleonClothingSystem.cs +++ b/Content.Shared/Clothing/EntitySystems/SharedChameleonClothingSystem.cs @@ -2,13 +2,16 @@ using System.Linq; using Content.Shared.Access.Components; using Content.Shared.Clothing.Components; using Content.Shared.Contraband; +using Content.Shared.Emp; using Content.Shared.Inventory; using Content.Shared.Inventory.Events; using Content.Shared.Item; using Content.Shared.Lock; using Content.Shared.Tag; using Content.Shared.Verbs; +using Robust.Shared.Network; using Robust.Shared.Prototypes; +using Robust.Shared.Random; using Robust.Shared.Timing; using Robust.Shared.Utility; @@ -23,8 +26,11 @@ public abstract class SharedChameleonClothingSystem : EntitySystem [Dependency] private readonly SharedItemSystem _itemSystem = default!; [Dependency] private readonly SharedAppearanceSystem _appearance = default!; [Dependency] private readonly TagSystem _tag = default!; - [Dependency] protected readonly IGameTiming _timing = default!; + [Dependency] protected readonly IGameTiming Timing = default!; [Dependency] private readonly LockSystem _lock = default!; + [Dependency] private readonly IRobustRandom _random = default!; + [Dependency] protected readonly SharedUserInterfaceSystem UI = default!; + [Dependency] private readonly INetManager _net = default!; private static readonly SlotFlags[] IgnoredSlots = { @@ -32,12 +38,12 @@ public abstract class SharedChameleonClothingSystem : EntitySystem SlotFlags.PREVENTEQUIP, SlotFlags.NONE }; + private static readonly SlotFlags[] Slots = Enum.GetValues().Except(IgnoredSlots).ToArray(); private readonly Dictionary> _data = new(); public readonly Dictionary> ValidVariants = new(); - [Dependency] protected readonly SharedUserInterfaceSystem UI = default!; private static readonly ProtoId WhitelistChameleonTag = "WhitelistChameleon"; @@ -47,6 +53,7 @@ public abstract class SharedChameleonClothingSystem : EntitySystem SubscribeLocalEvent(OnGotEquipped); SubscribeLocalEvent(OnGotUnequipped); SubscribeLocalEvent>(OnVerb); + SubscribeLocalEvent(OnEmpPulse); SubscribeLocalEvent(OnPrototypeReload); PrepareAllVariants(); @@ -97,21 +104,21 @@ public abstract class SharedChameleonClothingSystem : EntitySystem // clothing sprite logic if (TryComp(uid, out ClothingComponent? clothing) && - proto.TryGetComponent("Clothing", out ClothingComponent? otherClothing)) + proto.TryGetComponent(out ClothingComponent? otherClothing, Factory)) { _clothingSystem.CopyVisuals(uid, otherClothing, clothing); } // appearance data logic if (TryComp(uid, out AppearanceComponent? appearance) && - proto.TryGetComponent("Appearance", out AppearanceComponent? appearanceOther)) + proto.TryGetComponent(out AppearanceComponent? appearanceOther, Factory)) { _appearance.AppendData(appearanceOther, uid); Dirty(uid, appearance); } // properly mark contraband - if (proto.TryGetComponent("Contraband", out ContrabandComponent? contra)) + if (proto.TryGetComponent(out ContrabandComponent? contra, Factory)) { EnsureComp(uid, out var current); _contraband.CopyDetails(uid, contra, current); @@ -138,6 +145,24 @@ public abstract class SharedChameleonClothingSystem : EntitySystem }); } + private void OnEmpPulse(EntityUid uid, ChameleonClothingComponent component, ref EmpPulseEvent args) + { + if (!component.AffectedByEmp) + return; + + if (component.EmpContinuous) + component.NextEmpChange = Timing.CurTime + TimeSpan.FromSeconds(1f / component.EmpChangeIntensity); + + if (_net.IsServer) // needs RandomPredicted + { + var pick = GetRandomValidPrototype(component.Slot, component.RequireTag); + SetSelectedPrototype(uid, pick, component: component); + } + + args.Affected = true; + args.Disabled = true; + } + protected virtual void UpdateSprite(EntityUid uid, EntityPrototype proto) { } /// @@ -157,7 +182,7 @@ public abstract class SharedChameleonClothingSystem : EntitySystem return false; // check if it's valid clothing - if (!proto.TryGetComponent("Clothing", out ClothingComponent? clothing)) + if (!proto.TryGetComponent(out ClothingComponent? clothing, Factory)) return false; if (!clothing.Slots.HasFlag(chameleonSlot)) return false; @@ -187,6 +212,14 @@ public abstract class SharedChameleonClothingSystem : EntitySystem return validTargets; } + /// + /// Get a random prototype for a given slot. + /// + public string GetRandomValidPrototype(SlotFlags slot, string? tag = null) + { + return _random.Pick(GetValidTargets(slot, tag).ToList()); + } + protected void PrepareAllVariants() { _data.Clear(); @@ -215,4 +248,9 @@ public abstract class SharedChameleonClothingSystem : EntitySystem } } } + + // TODO: Predict and use component states for the UI + public virtual void SetSelectedPrototype(EntityUid uid, string? protoId, bool forceUpdate = false, + ChameleonClothingComponent? component = null) + { } } diff --git a/Content.Shared/Emp/EmpDisabledComponent.cs b/Content.Shared/Emp/EmpDisabledComponent.cs index 9e5a56de83..71748c0be3 100644 --- a/Content.Shared/Emp/EmpDisabledComponent.cs +++ b/Content.Shared/Emp/EmpDisabledComponent.cs @@ -5,24 +5,30 @@ namespace Content.Shared.Emp; /// /// While entity has this component it is "disabled" by EMP. -/// Add desired behaviour in other systems +/// Add desired behaviour in other systems. /// -[RegisterComponent, NetworkedComponent, AutoGenerateComponentPause] +[RegisterComponent, NetworkedComponent] +[AutoGenerateComponentState, AutoGenerateComponentPause] [Access(typeof(SharedEmpSystem))] public sealed partial class EmpDisabledComponent : Component { /// - /// Moment of time when component is removed and entity stops being "disabled" + /// Moment of time when the component is removed and entity stops being "disabled". /// - [DataField("timeLeft", customTypeSerializer: typeof(TimeOffsetSerializer)), ViewVariables(VVAccess.ReadWrite)] - [AutoPausedField] - public TimeSpan DisabledUntil; - - [DataField("effectCoolDown"), ViewVariables(VVAccess.ReadWrite)] - public float EffectCooldown = 3f; + [DataField(customTypeSerializer: typeof(TimeOffsetSerializer))] + [AutoNetworkedField, AutoPausedField] + public TimeSpan DisabledUntil = TimeSpan.Zero; /// - /// When next effect will be spawned + /// Default time between visual effect spawns. + /// This gets a random multiplier. + /// + [DataField, AutoNetworkedField] + public TimeSpan EffectCooldown = TimeSpan.FromSeconds(3); + + /// + /// When next effect will be spawned. + /// TODO: Particle system. /// [AutoPausedField] public TimeSpan TargetTime = TimeSpan.Zero; diff --git a/Content.Shared/Emp/SharedEmpSystem.cs b/Content.Shared/Emp/SharedEmpSystem.cs index deb2afd709..7e6ea58dbc 100644 --- a/Content.Shared/Emp/SharedEmpSystem.cs +++ b/Content.Shared/Emp/SharedEmpSystem.cs @@ -1,21 +1,58 @@ using Content.Shared.Examine; +using Content.Shared.Rejuvenate; +using Robust.Shared.Audio; +using Robust.Shared.Audio.Systems; using Robust.Shared.Map; using Robust.Shared.Timing; +using Robust.Shared.Network; +using Robust.Shared.Prototypes; namespace Content.Shared.Emp; public abstract class SharedEmpSystem : EntitySystem { [Dependency] protected readonly IGameTiming Timing = default!; + [Dependency] private readonly EntityLookupSystem _lookup = default!; + [Dependency] private readonly INetManager _net = default!; + [Dependency] private readonly SharedAudioSystem _audio = default!; + [Dependency] private readonly SharedTransformSystem _transform = default!; + + private HashSet _entSet = new(); public override void Initialize() { base.Initialize(); SubscribeLocalEvent(OnExamine); + SubscribeLocalEvent(OnRemove); + SubscribeLocalEvent(OnRejuvenate); } - protected const string EmpDisabledEffectPrototype = "EffectEmpDisabled"; + public static readonly EntProtoId EmpPulseEffectPrototype = "EffectEmpPulse"; + public static readonly EntProtoId EmpDisabledEffectPrototype = "EffectEmpDisabled"; + public static readonly SoundSpecifier EmpSound = new SoundPathSpecifier("/Audio/Effects/Lightning/lightningbolt.ogg"); + + /// + /// Triggers an EMP pulse at the given location, by first raising an , then by raising on all entities in range. + /// + /// The location to trigger the EMP pulse at. + /// The range of the EMP pulse. + /// The amount of energy consumed by the EMP pulse. In Joule. + /// The duration of the EMP effects. + /// The player that caused the effect. Used for predicted audio. + public void EmpPulse(MapCoordinates mapCoordinates, float range, float energyConsumption, TimeSpan duration, EntityUid? user = null) + { + foreach (var uid in _lookup.GetEntitiesInRange(mapCoordinates, range)) + { + TryEmpEffects(uid, energyConsumption, duration, user); + } + // TODO: replace with PredictedSpawn once it works with animated sprites + if (_net.IsServer) + Spawn(EmpPulseEffectPrototype, mapCoordinates); + + var coordinates = _transform.ToCoordinates(mapCoordinates); + _audio.PlayPredicted(EmpSound, coordinates, user); + } /// /// Triggers an EMP pulse at the given location, by first raising an , then a raising on all entities in range. @@ -24,12 +61,119 @@ public abstract class SharedEmpSystem : EntitySystem /// The range of the EMP pulse. /// The amount of energy consumed by the EMP pulse. /// The duration of the EMP effects. - public virtual void EmpPulse(MapCoordinates coordinates, float range, float energyConsumption, float duration) + /// The player that caused the effect. Used for predicted audio. + public void EmpPulse(EntityCoordinates coordinates, float range, float energyConsumption, TimeSpan duration, EntityUid? user = null) { + _entSet.Clear(); + _lookup.GetEntitiesInRange(coordinates, range, _entSet); + foreach (var uid in _entSet) + { + TryEmpEffects(uid, energyConsumption, duration, user); + } + // TODO: replace with PredictedSpawn once it works with animated sprites + if (_net.IsServer) + Spawn(EmpPulseEffectPrototype, coordinates); + + _audio.PlayPredicted(EmpSound, coordinates, user); + } + + /// + /// Attempts to apply the effects of an EMP pulse onto an entity by first raising an , followed by raising a on it. + /// + /// The entity to apply the EMP effects on. + /// The amount of energy consumed by the EMP. + /// The duration of the EMP effects. + /// The player that caused the EMP. For prediction purposes. + /// If the entity was affected by the EMP. + public bool TryEmpEffects(EntityUid uid, float energyConsumption, TimeSpan duration, EntityUid? user = null) + { + var attemptEv = new EmpAttemptEvent(); + RaiseLocalEvent(uid, ref attemptEv); + if (attemptEv.Cancelled) + return false; + + return DoEmpEffects(uid, energyConsumption, duration, user); + } + + /// + /// Applies the effects of an EMP pulse onto an entity by raising a on it. + /// + /// The entity to apply the EMP effects on. + /// The amount of energy consumed by the EMP. + /// The duration of the EMP effects. + /// The player that caused the EMP. For prediction purposes. + /// If the entity was affected by the EMP. + public bool DoEmpEffects(EntityUid uid, float energyConsumption, TimeSpan duration, EntityUid? user = null) + { + var ev = new EmpPulseEvent(energyConsumption, false, false, duration, user); + RaiseLocalEvent(uid, ref ev); + + // TODO: replace with PredictedSpawn once it works with animated sprites + if (ev.Affected && _net.IsServer) + Spawn(EmpDisabledEffectPrototype, Transform(uid).Coordinates); + + if (!ev.Disabled) + return ev.Affected; + + var disabled = EnsureComp(uid); + disabled.DisabledUntil = Timing.CurTime + duration; + Dirty(uid, disabled); + + return ev.Affected; + } + + public override void Update(float frameTime) + { + base.Update(frameTime); + + var curTime = Timing.CurTime; + var query = EntityQueryEnumerator(); + while (query.MoveNext(out var uid, out var comp)) + { + if (curTime < comp.DisabledUntil) + continue; + + RemComp(uid); + } } private void OnExamine(Entity ent, ref ExaminedEvent args) { args.PushMarkup(Loc.GetString("emp-disabled-comp-on-examine")); } + + private void OnRemove(Entity ent, ref ComponentRemove args) + { + var ev = new EmpDisabledRemovedEvent(); + RaiseLocalEvent(ent, ref ev); + } + + private void OnRejuvenate(Entity ent, ref RejuvenateEvent args) + { + RemCompDeferred(ent); + } } + +/// +/// Raised on an entity before . Cancel this to prevent the emp event being raised. +/// +[ByRefEvent] +public record struct EmpAttemptEvent(bool Cancelled); + +/// +/// Raised on an entity when it gets hit by an EMP Pulse. +/// +/// The amount of energy to remove from batteries. In Joule. +/// Set this is true in the subscription to spawn a visual effect at the entity's location. +/// Set this to ture in the subscription to add to the entity. +/// The duration the entity will be disabled. +/// The player that caused the EMP. For prediction purposes. + +[ByRefEvent] +public record struct EmpPulseEvent(float EnergyConsumption, bool Affected, bool Disabled, TimeSpan Duration, EntityUid? User); + +/// +/// Raised on an entity after is removed. +/// +[ByRefEvent] +public record struct EmpDisabledRemovedEvent(); diff --git a/Content.Shared/EntityEffects/Effects/EmpReactionEffect.cs b/Content.Shared/EntityEffects/Effects/EmpReactionEffect.cs index eee0aeb51b..0f9eacc58d 100644 --- a/Content.Shared/EntityEffects/Effects/EmpReactionEffect.cs +++ b/Content.Shared/EntityEffects/Effects/EmpReactionEffect.cs @@ -27,7 +27,7 @@ public sealed partial class EmpReactionEffect : EventEntityEffect [DataField("duration")] - public float DisableDuration = 15; + public TimeSpan DisableDuration = TimeSpan.FromSeconds(15); protected override string? ReagentEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys) => Loc.GetString("reagent-effect-guidebook-emp-reaction-effect", ("chance", Probability)); diff --git a/Content.Shared/Input/ContentKeyFunctions.cs b/Content.Shared/Input/ContentKeyFunctions.cs index cd5f4cff7b..50ea218b00 100644 --- a/Content.Shared/Input/ContentKeyFunctions.cs +++ b/Content.Shared/Input/ContentKeyFunctions.cs @@ -32,6 +32,9 @@ namespace Content.Shared.Input public static readonly BoundKeyFunction OpenInventoryMenu = "OpenInventoryMenu"; public static readonly BoundKeyFunction SmartEquipBackpack = "SmartEquipBackpack"; public static readonly BoundKeyFunction SmartEquipBelt = "SmartEquipBelt"; + public static readonly BoundKeyFunction SmartEquipPocket1 = "SmartEquipPocket1"; + public static readonly BoundKeyFunction SmartEquipPocket2 = "SmartEquipPocket2"; + public static readonly BoundKeyFunction SmartEquipSuitStorage = "SmartEquipSuitStorage"; public static readonly BoundKeyFunction OpenBackpack = "OpenBackpack"; public static readonly BoundKeyFunction OpenBelt = "OpenBelt"; public static readonly BoundKeyFunction OpenAHelp = "OpenAHelp"; diff --git a/Content.Shared/Interaction/SmartEquipSystem.cs b/Content.Shared/Interaction/SmartEquipSystem.cs index 553a4475cb..7529d8701d 100644 --- a/Content.Shared/Interaction/SmartEquipSystem.cs +++ b/Content.Shared/Interaction/SmartEquipSystem.cs @@ -35,6 +35,9 @@ public sealed class SmartEquipSystem : EntitySystem CommandBinds.Builder .Bind(ContentKeyFunctions.SmartEquipBackpack, InputCmdHandler.FromDelegate(HandleSmartEquipBackpack, handle: false, outsidePrediction: false)) .Bind(ContentKeyFunctions.SmartEquipBelt, InputCmdHandler.FromDelegate(HandleSmartEquipBelt, handle: false, outsidePrediction: false)) + .Bind(ContentKeyFunctions.SmartEquipPocket1, InputCmdHandler.FromDelegate(HandleSmartEquipPocket1, handle: false, outsidePrediction: false)) + .Bind(ContentKeyFunctions.SmartEquipPocket2, InputCmdHandler.FromDelegate(HandleSmartEquipPocket2, handle: false, outsidePrediction: false)) + .Bind(ContentKeyFunctions.SmartEquipSuitStorage, InputCmdHandler.FromDelegate(HandleSmartEquipSuitStorage, handle: false, outsidePrediction: false)) .Register(); } @@ -55,6 +58,21 @@ public sealed class SmartEquipSystem : EntitySystem HandleSmartEquip(session, "belt"); } + private void HandleSmartEquipPocket1(ICommonSession? session) + { + HandleSmartEquip(session, "pocket1"); + } + + private void HandleSmartEquipPocket2(ICommonSession? session) + { + HandleSmartEquip(session, "pocket2"); + } + + private void HandleSmartEquipSuitStorage(ICommonSession? session) + { + HandleSmartEquip(session, "suitstorage"); + } + private void HandleSmartEquip(ICommonSession? session, string equipmentSlot) { if (session is not { } playerSession) diff --git a/Content.Shared/Light/EntitySystems/SharedPoweredLightSystem.cs b/Content.Shared/Light/EntitySystems/SharedPoweredLightSystem.cs index 65097f0d06..9ca0a1821b 100644 --- a/Content.Shared/Light/EntitySystems/SharedPoweredLightSystem.cs +++ b/Content.Shared/Light/EntitySystems/SharedPoweredLightSystem.cs @@ -7,6 +7,7 @@ using Content.Shared.DeviceLinking.Events; using Content.Shared.DeviceNetwork; using Content.Shared.DeviceNetwork.Events; using Content.Shared.DoAfter; +using Content.Shared.Emp; using Content.Shared.Hands.EntitySystems; using Content.Shared.Interaction; using Content.Shared.Light.Components; @@ -52,6 +53,7 @@ public abstract class SharedPoweredLightSystem : EntitySystem SubscribeLocalEvent(OnPowerChanged); SubscribeLocalEvent(OnDoAfter); SubscribeLocalEvent(HandleLightDamaged); + SubscribeLocalEvent(OnEmpPulse); } private void OnInit(EntityUid uid, PoweredLightComponent light, ComponentInit args) @@ -230,29 +232,21 @@ public abstract class SharedPoweredLightSystem : EntitySystem /// /// Try to break bulb inside light fixture /// - public bool TryDestroyBulb(EntityUid uid, PoweredLightComponent? light = null) + public bool TryDestroyBulb(EntityUid uid, PoweredLightComponent? light = null, EntityUid? user = null) { if (!Resolve(uid, ref light, false)) return false; - // if we aren't mapinited, - // just null the spawned bulb - if (LifeStage(uid) < EntityLifeStage.MapInitialized) - { - light.HasLampOnSpawn = null; - return true; - } - // check bulb state var bulbUid = GetBulb(uid, light); - if (bulbUid == null || !EntityManager.TryGetComponent(bulbUid.Value, out LightBulbComponent? lightBulb)) + if (bulbUid == null || !TryComp(bulbUid.Value, out var lightBulb)) return false; if (lightBulb.State == LightBulbState.Broken) return false; // break it _bulbSystem.SetState(bulbUid.Value, LightBulbState.Broken, lightBulb); - _bulbSystem.PlayBreakSound(bulbUid.Value, lightBulb); + _bulbSystem.PlayBreakSound(bulbUid.Value, lightBulb, user); UpdateLight(uid, light); return true; } @@ -327,13 +321,18 @@ public abstract class SharedPoweredLightSystem : EntitySystem /// /// Destroy the light bulb if the light took any damage. /// + /// + /// TODO: This should be an IThresholdBehaviour once DestructibleSystem is predicted. + /// public void HandleLightDamaged(EntityUid uid, PoweredLightComponent component, DamageChangedEvent args) { + if (GameTiming.ApplyingState) // The destruction is already networked on its own. + return; + // Was it being repaired, or did it take damage? if (args.DamageIncreased) { - // Eventually, this logic should all be done by this (or some other) system, not a component. - TryDestroyBulb(uid, component); + TryDestroyBulb(uid, component, args.Origin); } } @@ -348,6 +347,12 @@ public abstract class SharedPoweredLightSystem : EntitySystem UpdateLight(uid, component); } + private void OnEmpPulse(EntityUid uid, PoweredLightComponent component, ref EmpPulseEvent args) + { + if (TryDestroyBulb(uid, component)) + args.Affected = true; + } + public void ToggleBlinkingLight(EntityUid uid, PoweredLightComponent light, bool isNowBlinking) { if (light.IsBlinking == isNowBlinking) diff --git a/Content.Shared/Medical/SuitSensors/SharedSuitSensorSystem.cs b/Content.Shared/Medical/SuitSensors/SharedSuitSensorSystem.cs index 6c52fae358..ef6271d52c 100644 --- a/Content.Shared/Medical/SuitSensors/SharedSuitSensorSystem.cs +++ b/Content.Shared/Medical/SuitSensors/SharedSuitSensorSystem.cs @@ -5,6 +5,7 @@ using Content.Shared.Clothing; using Content.Shared.Damage; using Content.Shared.DeviceNetwork; using Content.Shared.DoAfter; +using Content.Shared.Emp; using Content.Shared.Examine; using Content.Shared.GameTicking; using Content.Shared.Interaction; @@ -53,6 +54,8 @@ public abstract class SharedSuitSensorSystem : EntitySystem SubscribeLocalEvent(OnPlayerSpawn); SubscribeLocalEvent(OnEquipped); SubscribeLocalEvent(OnUnequipped); + SubscribeLocalEvent(OnEmpPulse); + SubscribeLocalEvent(OnEmpFinished); SubscribeLocalEvent(OnExamine); SubscribeLocalEvent>(OnVerb); SubscribeLocalEvent(OnInsert); @@ -137,6 +140,25 @@ public abstract class SharedSuitSensorSystem : EntitySystem Dirty(ent); } + private void OnEmpPulse(Entity ent, ref EmpPulseEvent args) + { + args.Affected = true; + args.Disabled = true; + + ent.Comp.PreviousMode = ent.Comp.Mode; + SetSensor(ent.AsNullable(), SuitSensorMode.SensorOff, null); + + ent.Comp.PreviousControlsLocked = ent.Comp.ControlsLocked; + ent.Comp.ControlsLocked = true; + // SetSensor already calls Dirty + } + + private void OnEmpFinished(Entity ent, ref EmpDisabledRemovedEvent args) + { + SetSensor(ent.AsNullable(), ent.Comp.PreviousMode, null); + ent.Comp.ControlsLocked = ent.Comp.PreviousControlsLocked; + } + private void OnExamine(Entity ent, ref ExaminedEvent args) { if (!args.IsInDetailsRange) diff --git a/Content.Shared/Medical/SuitSensors/SuitSensorComponent.cs b/Content.Shared/Medical/SuitSensors/SuitSensorComponent.cs index b20b7af2c9..19bee1b017 100644 --- a/Content.Shared/Medical/SuitSensors/SuitSensorComponent.cs +++ b/Content.Shared/Medical/SuitSensors/SuitSensorComponent.cs @@ -85,13 +85,13 @@ public sealed partial class SuitSensorComponent : Component /// /// The previous mode of the suit. This is used to restore the state when an EMP effect ends. /// - [DataField, ViewVariables] + [DataField, AutoNetworkedField, ViewVariables] public SuitSensorMode PreviousMode = SuitSensorMode.SensorOff; /// /// The previous locked status of the controls. This is used to restore the state when an EMP effect ends. /// This keeps prisoner jumpsuits/internal implants from becoming unlocked after an EMP. /// - [DataField, ViewVariables] + [DataField, AutoNetworkedField, ViewVariables] public bool PreviousControlsLocked = false; } diff --git a/Content.Shared/Medical/VomitSystem.cs b/Content.Shared/Medical/VomitSystem.cs new file mode 100644 index 0000000000..d398faef20 --- /dev/null +++ b/Content.Shared/Medical/VomitSystem.cs @@ -0,0 +1,140 @@ +using Content.Shared.Body.Components; +using Content.Shared.Body.Systems; +using Content.Shared.Chemistry.Components; +using Content.Shared.Chemistry.EntitySystems; +using Content.Shared.Chemistry.Reagent; +using Content.Shared.Fluids; +using Content.Shared.Forensics.Systems; +using Content.Shared.IdentityManagement; +using Content.Shared.Mobs.Systems; +using Content.Shared.Movement.Systems; +using Content.Shared.Nutrition.Components; +using Content.Shared.Nutrition.EntitySystems; +using Content.Shared.Popups; +using Robust.Shared.Audio; +using Robust.Shared.Audio.Systems; +using Robust.Shared.Network; +using Robust.Shared.Prototypes; + +namespace Content.Shared.Medical; + +public sealed class VomitSystem : EntitySystem +{ + [Dependency] private readonly INetManager _netManager = default!; + [Dependency] private readonly IPrototypeManager _proto = default!; + [Dependency] private readonly HungerSystem _hunger = default!; + [Dependency] private readonly MobStateSystem _mobState = default!; + [Dependency] private readonly MovementModStatusSystem _movementMod = default!; + [Dependency] private readonly ThirstSystem _thirst = default!; + [Dependency] private readonly SharedAudioSystem _audio = default!; + [Dependency] private readonly SharedBloodstreamSystem _bloodstream = default!; + [Dependency] private readonly SharedBodySystem _body = default!; + [Dependency] private readonly SharedForensicsSystem _forensics = default!; + [Dependency] private readonly SharedPopupSystem _popup = default!; + [Dependency] private readonly SharedPuddleSystem _puddle = default!; + [Dependency] private readonly SharedSolutionContainerSystem _solutionContainer = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(TryBodyVomitSolution); + } + + private const float ChemMultiplier = 0.1f; + + private static readonly ProtoId VomitCollection = "Vomit"; + + private static readonly ProtoId VomitPrototype = "Vomit"; // TODO: Dehardcode vomit prototype + + private readonly SoundSpecifier _vomitSound = new SoundCollectionSpecifier(VomitCollection, + AudioParams.Default.WithVariation(0.2f).WithVolume(-4f)); + + private void TryBodyVomitSolution(Entity ent, ref TryVomitEvent args) + { + if (args.Handled) + return; + + // Main requirement: You have a stomach + var stomachList = _body.GetBodyOrganEntityComps((ent, null)); + if (stomachList.Count == 0) + return; + + // Empty the stomach out into it + foreach (var stomach in stomachList) + { + if (_solutionContainer.ResolveSolution(stomach.Owner, StomachSystem.DefaultSolutionName, ref stomach.Comp1.Solution, out var sol)) + _solutionContainer.TryTransferSolution(stomach.Comp1.Solution.Value, args.Sol, sol.AvailableVolume); + } + + args.Handled = true; + } + + /// + /// Make an entity vomit, if they have a stomach. + /// + public void Vomit(EntityUid uid, float thirstAdded = -40f, float hungerAdded = -40f, bool force = false) + { + // Vomit only if entity is alive + // Ignore condition if force was set to true + if (!force && _mobState.IsDead(uid)) + return; + + // TODO: Need decals + var solution = new Solution(); + + var ev = new TryVomitEvent(solution, force); + RaiseLocalEvent(uid, ref ev); + + if (!ev.Handled) + return; + + // Vomiting makes you hungrier and thirstier + if (TryComp(uid, out var hunger)) + _hunger.ModifyHunger(uid, hungerAdded, hunger); + + if (TryComp(uid, out var thirst)) + _thirst.ModifyThirst(uid, thirst, thirstAdded); + + // It fully empties the stomach, this amount from the chem stream is relatively small + var solutionSize = (MathF.Abs(thirstAdded) + MathF.Abs(hungerAdded)) / 6; + + // Apply a bit of slowdown + _movementMod.TryUpdateMovementSpeedModDuration(uid, MovementModStatusSystem.VomitingSlowdown, TimeSpan.FromSeconds(solutionSize), 0.5f); + + // Adds a tiny amount of the chem stream from earlier along with vomit + if (TryComp(uid, out var bloodStream)) + { + var vomitAmount = solutionSize; + + // Takes 10% of the chemicals removed from the chem stream + if (_solutionContainer.ResolveSolution(uid, bloodStream.ChemicalSolutionName, ref bloodStream.ChemicalSolution)) + { + var vomitChemstreamAmount = _solutionContainer.SplitSolution(bloodStream.ChemicalSolution.Value, vomitAmount); + vomitChemstreamAmount.ScaleSolution(ChemMultiplier); + solution.AddSolution(vomitChemstreamAmount, _proto); + + vomitAmount -= (float)vomitChemstreamAmount.Volume; + } + + // Makes a vomit solution the size of 90% of the chemicals removed from the chemstream + solution.AddReagent(new ReagentId(VomitPrototype, _bloodstream.GetEntityBloodData(uid)), vomitAmount); + } + + if (_puddle.TrySpillAt(uid, solution, out var puddle, false)) + { + _forensics.TransferDna(puddle, uid, false); + } + + + if (!_netManager.IsServer) + return; + + // Force sound to play as spill doesn't work if solution is empty. + _audio.PlayPvs(_vomitSound, uid); + _popup.PopupEntity(Loc.GetString("disease-vomit", ("person", Identity.Entity(uid, EntityManager))), uid); + } +} + +[ByRefEvent] +public record struct TryVomitEvent(Solution Sol, bool Forced = false, bool Handled = false); diff --git a/Content.Shared/Ninja/Components/NinjaSuitComponent.cs b/Content.Shared/Ninja/Components/NinjaSuitComponent.cs index 8b477b2aa5..b1467b4146 100644 --- a/Content.Shared/Ninja/Components/NinjaSuitComponent.cs +++ b/Content.Shared/Ninja/Components/NinjaSuitComponent.cs @@ -72,10 +72,10 @@ public sealed partial class NinjaSuitComponent : Component public float EmpConsumption = 100000f; /// - /// How long the EMP effects last for, in seconds + /// How long the EMP effects last for /// [DataField] - public float EmpDuration = 60f; + public TimeSpan EmpDuration = TimeSpan.FromSeconds(60); } public sealed partial class RecallKatanaEvent : InstantActionEvent; diff --git a/Content.Shared/Ninja/Systems/SharedNinjaSuitSystem.cs b/Content.Shared/Ninja/Systems/SharedNinjaSuitSystem.cs index 3800d15b26..f316b16f6b 100644 --- a/Content.Shared/Ninja/Systems/SharedNinjaSuitSystem.cs +++ b/Content.Shared/Ninja/Systems/SharedNinjaSuitSystem.cs @@ -1,7 +1,7 @@ using Content.Shared.Actions; using Content.Shared.Clothing; using Content.Shared.Clothing.Components; -using Content.Shared.Clothing.EntitySystems; +using Content.Shared.Emp; using Content.Shared.Inventory.Events; using Content.Shared.Item.ItemToggle; using Content.Shared.Item.ItemToggle.Components; @@ -18,8 +18,8 @@ namespace Content.Shared.Ninja.Systems; public abstract class SharedNinjaSuitSystem : EntitySystem { [Dependency] private readonly ActionContainerSystem _actionContainer = default!; - [Dependency] private readonly SharedAudioSystem _audio = default!; [Dependency] private readonly ItemToggleSystem _toggle = default!; + [Dependency] private readonly SharedAudioSystem _audio = default!; [Dependency] protected readonly SharedPopupSystem Popup = default!; [Dependency] private readonly SharedSpaceNinjaSystem _ninja = default!; [Dependency] private readonly UseDelaySystem _useDelay = default!; @@ -36,6 +36,7 @@ public abstract class SharedNinjaSuitSystem : EntitySystem SubscribeLocalEvent(OnCreateStarAttempt); SubscribeLocalEvent(OnActivateAttempt); SubscribeLocalEvent(OnUnequipped); + SubscribeLocalEvent(OnEmpAttempt); } private void OnEquipped(Entity ent, ref ClothingGotEquippedEvent args) @@ -168,7 +169,14 @@ public abstract class SharedNinjaSuitSystem : EntitySystem // mark the user as not wearing a suit _ninja.AssignSuit(user, null); // disable glove abilities - if (user.Comp.Gloves is {} uid) + if (user.Comp.Gloves is { } uid) _toggle.TryDeactivate(uid, user: user); } + + private void OnEmpAttempt(Entity ent, ref EmpAttemptEvent args) + { + // ninja suit (battery) is immune to emp + // powercell relays the event to suit + args.Cancelled = true; + } } diff --git a/Content.Shared/Power/ChargeEvents.cs b/Content.Shared/Power/ChargeEvents.cs new file mode 100644 index 0000000000..db412e91d9 --- /dev/null +++ b/Content.Shared/Power/ChargeEvents.cs @@ -0,0 +1,33 @@ +namespace Content.Shared.Power; + +/// +/// Raised when a battery's charge or capacity changes (capacity affects relative charge percentage). +/// +[ByRefEvent] +public readonly record struct ChargeChangedEvent(float Charge, float MaxCharge); + +/// +/// Raised when it is necessary to get information about battery charges. +/// +[ByRefEvent] +public sealed class GetChargeEvent : EntityEventArgs +{ + public float CurrentCharge; + public float MaxCharge; +} + +/// +/// Raised when it is necessary to change the current battery charge to a some value. +/// +[ByRefEvent] +public sealed class ChangeChargeEvent : EntityEventArgs +{ + public float OriginalValue; + public float ResidualValue; + + public ChangeChargeEvent(float value) + { + OriginalValue = value; + ResidualValue = value; + } +} diff --git a/Content.Shared/Power/Components/ApcPowerReceiverBatteryComponent.cs b/Content.Shared/Power/Components/ApcPowerReceiverBatteryComponent.cs index 02c8328fa1..92efabd7ab 100644 --- a/Content.Shared/Power/Components/ApcPowerReceiverBatteryComponent.cs +++ b/Content.Shared/Power/Components/ApcPowerReceiverBatteryComponent.cs @@ -6,7 +6,7 @@ namespace Content.Shared.Power.Components; /// /// Attached to APC powered entities that possess a rechargeable internal battery. /// If external power is interrupted, the entity will draw power from this battery instead. -/// Requires and to function. +/// Requires and to function. /// [RegisterComponent, NetworkedComponent, AutoGenerateComponentState] [Access(typeof(SharedPowerNetSystem), typeof(SharedPowerReceiverSystem))] diff --git a/Content.Shared/Power/Components/BatteryComponent.cs b/Content.Shared/Power/Components/BatteryComponent.cs new file mode 100644 index 0000000000..6a2d2a5051 --- /dev/null +++ b/Content.Shared/Power/Components/BatteryComponent.cs @@ -0,0 +1,34 @@ +using Content.Shared.Power.EntitySystems; +using Content.Shared.Guidebook; + +namespace Content.Shared.Power.Components; + +/// +/// Battery node on the pow3r network. Needs other components to connect to actual networks. +/// +[RegisterComponent] +[Virtual] +[Access(typeof(SharedBatterySystem))] +public partial class BatteryComponent : Component +{ + public string SolutionName = "battery"; + + /// + /// Maximum charge of the battery in joules (ie. watt seconds) + /// + [DataField] + [GuidebookData] + public float MaxCharge; + + /// + /// Current charge of the battery in joules (ie. watt seconds) + /// + [DataField("startingCharge")] + public float CurrentCharge; + + /// + /// The price per one joule. Default is 1 credit for 10kJ. + /// + [DataField] + public float PricePerJoule = 0.0001f; +} diff --git a/Content.Shared/Power/Components/ChargerComponent.cs b/Content.Shared/Power/Components/ChargerComponent.cs new file mode 100644 index 0000000000..a3f2f8f424 --- /dev/null +++ b/Content.Shared/Power/Components/ChargerComponent.cs @@ -0,0 +1,36 @@ +using Content.Shared.Whitelist; +using Robust.Shared.GameStates; + +namespace Content.Shared.Power.Components; + +[RegisterComponent, NetworkedComponent] +public sealed partial class ChargerComponent : Component +{ + [ViewVariables] + public CellChargerStatus Status; + + /// + /// The charge rate of the charger, in watts + /// + [DataField] + public float ChargeRate = 20.0f; + + /// + /// The container ID that is holds the entities being charged. + /// + [DataField(required: true)] + public string SlotId = string.Empty; + + /// + /// A whitelist for what entities can be charged by this Charger. + /// + [DataField] + public EntityWhitelist? Whitelist; + + /// + /// Indicates whether the charger is portable and thus subject to EMP effects + /// and bypasses checks for transform, anchored, and ApcPowerReceiverComponent. + /// + [DataField] + public bool Portable = false; +} diff --git a/Content.Shared/Power/EntitySystems/SharedBatterySystem.cs b/Content.Shared/Power/EntitySystems/SharedBatterySystem.cs new file mode 100644 index 0000000000..90931ef9f1 --- /dev/null +++ b/Content.Shared/Power/EntitySystems/SharedBatterySystem.cs @@ -0,0 +1,44 @@ +using Content.Shared.Emp; +using Content.Shared.Power.Components; + +namespace Content.Shared.Power.EntitySystems; + +public abstract class SharedBatterySystem : EntitySystem +{ + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnEmpPulse); + } + + private void OnEmpPulse(EntityUid uid, BatteryComponent component, ref EmpPulseEvent args) + { + args.Affected = true; + UseCharge(uid, args.EnergyConsumption, component); + // Apply a cooldown to the entity's self recharge if needed to avoid it immediately self recharging after an EMP. + TrySetChargeCooldown(uid); + } + + public virtual float UseCharge(EntityUid uid, float value, BatteryComponent? battery = null) + { + return 0f; + } + + public virtual void SetMaxCharge(EntityUid uid, float value, BatteryComponent? battery = null) { } + + public virtual float ChangeCharge(EntityUid uid, float value, BatteryComponent? battery = null) + { + return 0f; + } + + /// + /// Checks if the entity has a self recharge and puts it on cooldown if applicable. + /// + public virtual void TrySetChargeCooldown(EntityUid uid, float value = -1) { } + + public virtual bool TryUseCharge(EntityUid uid, float value, BatteryComponent? battery = null) + { + return false; + } +} diff --git a/Content.Shared/Power/EntitySystems/SharedChargerSystem.cs b/Content.Shared/Power/EntitySystems/SharedChargerSystem.cs new file mode 100644 index 0000000000..a150436bef --- /dev/null +++ b/Content.Shared/Power/EntitySystems/SharedChargerSystem.cs @@ -0,0 +1,20 @@ +using Content.Shared.Emp; +using Content.Shared.Power.Components; + +namespace Content.Shared.Power.EntitySystems; + +public abstract class SharedChargerSystem : EntitySystem +{ + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnEmpPulse); + } + + private void OnEmpPulse(EntityUid uid, ChargerComponent component, ref EmpPulseEvent args) + { + args.Affected = true; + args.Disabled = true; + } +} diff --git a/Content.Shared/PowerCell/SharedPowerCellSystem.cs b/Content.Shared/PowerCell/SharedPowerCellSystem.cs index 3398563e55..0b71a3c24d 100644 --- a/Content.Shared/PowerCell/SharedPowerCellSystem.cs +++ b/Content.Shared/PowerCell/SharedPowerCellSystem.cs @@ -1,4 +1,5 @@ using Content.Shared.Containers.ItemSlots; +using Content.Shared.Emp; using Content.Shared.PowerCell.Components; using Content.Shared.Rejuvenate; using Robust.Shared.Containers; @@ -22,6 +23,8 @@ public abstract class SharedPowerCellSystem : EntitySystem SubscribeLocalEvent(OnCellInserted); SubscribeLocalEvent(OnCellRemoved); SubscribeLocalEvent(OnCellInsertAttempt); + + SubscribeLocalEvent(OnCellEmpAttempt); } private void OnMapInit(Entity ent, ref MapInitEvent args) @@ -71,6 +74,14 @@ public abstract class SharedPowerCellSystem : EntitySystem RaiseLocalEvent(uid, new PowerCellChangedEvent(true), false); } + private void OnCellEmpAttempt(EntityUid uid, PowerCellComponent component, EmpAttemptEvent args) + { + var parent = Transform(uid).ParentUid; + // relay the attempt event to the slot so it can cancel it + if (HasComp(parent)) + RaiseLocalEvent(parent, ref args); + } + public void SetDrawEnabled(Entity ent, bool enabled) { if (!Resolve(ent, ref ent.Comp, false) || ent.Comp.Enabled == enabled) diff --git a/Content.Shared/Radio/Components/HeadsetComponent.cs b/Content.Shared/Radio/Components/HeadsetComponent.cs index 66a0ae8027..28911fb674 100644 --- a/Content.Shared/Radio/Components/HeadsetComponent.cs +++ b/Content.Shared/Radio/Components/HeadsetComponent.cs @@ -1,18 +1,20 @@ using Content.Shared.Inventory; +using Robust.Shared.GameStates; namespace Content.Shared.Radio.Components; /// -/// This component relays radio messages to the parent entity's chat when equipped. +/// This component relays radio messages to the parent entity's chat when equipped. /// -[RegisterComponent] +[RegisterComponent, NetworkedComponent, AutoGenerateComponentState] public sealed partial class HeadsetComponent : Component { - [DataField("enabled")] + [DataField, AutoNetworkedField] public bool Enabled = true; + [DataField, AutoNetworkedField] public bool IsEquipped = false; - [DataField("requiredSlot")] + [DataField, AutoNetworkedField] public SlotFlags RequiredSlot = SlotFlags.EARS; } diff --git a/Content.Shared/Radio/EntitySystems/SharedHeadsetSystem.cs b/Content.Shared/Radio/EntitySystems/SharedHeadsetSystem.cs index 8083c8cd3a..5526e8f133 100644 --- a/Content.Shared/Radio/EntitySystems/SharedHeadsetSystem.cs +++ b/Content.Shared/Radio/EntitySystems/SharedHeadsetSystem.cs @@ -1,3 +1,4 @@ +using Content.Shared.Emp; using Content.Shared.Inventory; using Content.Shared.Inventory.Events; using Content.Shared.Radio.Components; @@ -9,9 +10,11 @@ public abstract class SharedHeadsetSystem : EntitySystem public override void Initialize() { base.Initialize(); + SubscribeLocalEvent>(OnGetDefault); SubscribeLocalEvent(OnGotEquipped); SubscribeLocalEvent(OnGotUnequipped); + SubscribeLocalEvent(OnEmpPulse); } private void OnGetDefault(EntityUid uid, HeadsetComponent component, InventoryRelayedEvent args) @@ -23,16 +26,27 @@ public abstract class SharedHeadsetSystem : EntitySystem } if (TryComp(uid, out EncryptionKeyHolderComponent? keyHolder)) - args.Args.Channel ??= keyHolder.DefaultChannel; + args.Args.Channel ??= keyHolder.DefaultChannel; } protected virtual void OnGotEquipped(EntityUid uid, HeadsetComponent component, GotEquippedEvent args) { component.IsEquipped = args.SlotFlags.HasFlag(component.RequiredSlot); + Dirty(uid, component); } protected virtual void OnGotUnequipped(EntityUid uid, HeadsetComponent component, GotUnequippedEvent args) { component.IsEquipped = false; + Dirty(uid, component); + } + + private void OnEmpPulse(Entity ent, ref EmpPulseEvent args) + { + if (ent.Comp.Enabled) + { + args.Affected = true; + args.Disabled = true; + } } } diff --git a/Content.Server/SurveillanceCamera/Components/SurveillanceCameraComponent.cs b/Content.Shared/SurveillanceCamera/Components/SurveillanceCameraComponent.cs similarity index 72% rename from Content.Server/SurveillanceCamera/Components/SurveillanceCameraComponent.cs rename to Content.Shared/SurveillanceCamera/Components/SurveillanceCameraComponent.cs index b0d41e52c7..1c5ba8ad17 100644 --- a/Content.Server/SurveillanceCamera/Components/SurveillanceCameraComponent.cs +++ b/Content.Shared/SurveillanceCamera/Components/SurveillanceCameraComponent.cs @@ -1,10 +1,11 @@ using Content.Shared.DeviceNetwork; +using Robust.Shared.GameStates; using Robust.Shared.Prototypes; -namespace Content.Server.SurveillanceCamera; +namespace Content.Shared.SurveillanceCamera.Components; -[RegisterComponent] -[Access(typeof(SurveillanceCameraSystem))] +[RegisterComponent, NetworkedComponent, AutoGenerateComponentState] +[Access(typeof(SharedSurveillanceCameraSystem))] public sealed partial class SurveillanceCameraComponent : Component { // List of active viewers. This is for bookkeeping purposes, @@ -24,23 +25,20 @@ public sealed partial class SurveillanceCameraComponent : Component // If this camera is active or not. Deactivating a camera // will not allow it to obtain any new viewers. - [ViewVariables] - public bool Active { get; set; } = true; + [DataField] + public bool Active = true; // This one isn't easy to deal with. Will require a UI // to change/set this so mapping these in isn't // the most terrible thing possible. - [ViewVariables(VVAccess.ReadWrite)] [DataField("id")] - public string CameraId { get; set; } = "camera"; + public string CameraId = "camera"; - [ViewVariables(VVAccess.ReadWrite)] - [DataField("nameSet")] - public bool NameSet { get; set; } + [DataField, AutoNetworkedField] + public bool NameSet; - [ViewVariables(VVAccess.ReadWrite)] - [DataField("networkSet")] - public bool NetworkSet { get; set; } + [DataField, AutoNetworkedField] + public bool NetworkSet; // This has to be device network frequency prototypes. [DataField("setupAvailableNetworks")] diff --git a/Content.Shared/SurveillanceCamera/SharedSurveillanceCameraSystem.cs b/Content.Shared/SurveillanceCamera/SharedSurveillanceCameraSystem.cs index e76d5516e8..b6743669e9 100644 --- a/Content.Shared/SurveillanceCamera/SharedSurveillanceCameraSystem.cs +++ b/Content.Shared/SurveillanceCamera/SharedSurveillanceCameraSystem.cs @@ -1,8 +1,56 @@ -using Robust.Shared.GameStates; +using Content.Shared.Emp; +using Content.Shared.SurveillanceCamera.Components; +using Content.Shared.Verbs; using Robust.Shared.Serialization; namespace Content.Shared.SurveillanceCamera; +public abstract class SharedSurveillanceCameraSystem : EntitySystem +{ + public override void Initialize() + { + SubscribeLocalEvent>(AddVerbs); + SubscribeLocalEvent(OnEmpPulse); + SubscribeLocalEvent(OnEmpDisabledRemoved); + } + + private void AddVerbs(EntityUid uid, SurveillanceCameraComponent component, GetVerbsEvent args) + { + if (!args.CanInteract || !args.CanComplexInteract) + return; + + if (component.NameSet && component.NetworkSet) + return; + + AlternativeVerb verb = new() + { + Text = Loc.GetString("surveillance-camera-setup"), + Act = () => OpenSetupInterface(uid, args.User, component) + }; + args.Verbs.Add(verb); + } + + private void OnEmpPulse(EntityUid uid, SurveillanceCameraComponent component, ref EmpPulseEvent args) + { + if (component.Active) + { + args.Affected = true; + args.Disabled = true; + SetActive(uid, false); + } + } + + private void OnEmpDisabledRemoved(EntityUid uid, SurveillanceCameraComponent component, ref EmpDisabledRemovedEvent args) + { + SetActive(uid, true); + } + + // TODO: predict the rest of the server side system + public virtual void SetActive(EntityUid camera, bool setting, SurveillanceCameraComponent? component = null) { } + + protected virtual void OpenSetupInterface(EntityUid uid, EntityUid player, SurveillanceCameraComponent? camera = null) { } +} + [Serializable, NetSerializable] public enum SurveillanceCameraVisualsKey : byte { diff --git a/Content.Shared/Trigger/Components/TimerTriggerComponent.cs b/Content.Shared/Trigger/Components/TimerTriggerComponent.cs index 9cc58d3cda..f413ab5d4f 100644 --- a/Content.Shared/Trigger/Components/TimerTriggerComponent.cs +++ b/Content.Shared/Trigger/Components/TimerTriggerComponent.cs @@ -75,6 +75,7 @@ public sealed partial class TimerTriggerComponent : Component /// /// The entity that activated this trigger. + /// TODO: use WeakEntityReference once the engine PR is merged! /// [DataField, AutoNetworkedField] public EntityUid? User; diff --git a/Content.Shared/Trigger/Systems/EmpOnTriggerSystem.cs b/Content.Shared/Trigger/Systems/EmpOnTriggerSystem.cs index 136c4474a2..50fb7a25e4 100644 --- a/Content.Shared/Trigger/Systems/EmpOnTriggerSystem.cs +++ b/Content.Shared/Trigger/Systems/EmpOnTriggerSystem.cs @@ -6,7 +6,6 @@ namespace Content.Shared.Trigger.Systems; public sealed class EmpOnTriggerSystem : EntitySystem { [Dependency] private readonly SharedEmpSystem _emp = default!; - [Dependency] private readonly SharedTransformSystem _transform = default!; public override void Initialize() { @@ -25,7 +24,7 @@ public sealed class EmpOnTriggerSystem : EntitySystem if (target == null) return; - _emp.EmpPulse(_transform.GetMapCoordinates(target.Value), ent.Comp.Range, ent.Comp.EnergyConsumption, (float)ent.Comp.DisableDuration.TotalSeconds); + _emp.EmpPulse(Transform(target.Value).Coordinates, ent.Comp.Range, ent.Comp.EnergyConsumption, ent.Comp.DisableDuration, args.User); args.Handled = true; } } diff --git a/Content.Shared/Trigger/Systems/TriggerSystem.Timer.cs b/Content.Shared/Trigger/Systems/TriggerSystem.Timer.cs index 58ac43e571..179b04af93 100644 --- a/Content.Shared/Trigger/Systems/TriggerSystem.Timer.cs +++ b/Content.Shared/Trigger/Systems/TriggerSystem.Timer.cs @@ -168,7 +168,8 @@ public sealed partial class TriggerSystem if (timer.NextTrigger <= curTime) { - Trigger(uid, timer.User, timer.KeyOut); + var user = TerminatingOrDeleted(timer.User) ? null : timer.User; + Trigger(uid, user, timer.KeyOut); // Remove after triggering to prevent it from starting the timer again RemComp(uid); if (TryComp(uid, out var appearance)) diff --git a/Content.Shared/Trigger/Systems/TriggerSystem.cs b/Content.Shared/Trigger/Systems/TriggerSystem.cs index ca60901a79..25f8d51e11 100644 --- a/Content.Shared/Trigger/Systems/TriggerSystem.cs +++ b/Content.Shared/Trigger/Systems/TriggerSystem.cs @@ -107,6 +107,7 @@ public sealed partial class TriggerSystem : EntitySystem ent.Comp.NextTrigger = curTime + ent.Comp.Delay; var delay = ent.Comp.InitialBeepDelay ?? ent.Comp.BeepInterval; ent.Comp.NextBeep = curTime + delay; + ent.Comp.User = user; Dirty(ent); var ev = new ActiveTimerTriggerEvent(user); diff --git a/Content.Shared/VendingMachines/SharedVendingMachineSystem.cs b/Content.Shared/VendingMachines/SharedVendingMachineSystem.cs index 141183873d..610f4d0efe 100644 --- a/Content.Shared/VendingMachines/SharedVendingMachineSystem.cs +++ b/Content.Shared/VendingMachines/SharedVendingMachineSystem.cs @@ -1,19 +1,19 @@ -using Content.Shared.Emag.Components; -using Robust.Shared.Prototypes; using System.Linq; using Content.Shared.Access.Components; using Content.Shared.Access.Systems; using Content.Shared.Advertise.Components; using Content.Shared.Advertise.Systems; using Content.Shared.DoAfter; +using Content.Shared.Emag.Components; using Content.Shared.Emag.Systems; +using Content.Shared.Emp; using Content.Shared.Interaction; using Content.Shared.Popups; using Content.Shared.Power.EntitySystems; using Robust.Shared.Audio; using Robust.Shared.Audio.Systems; using Robust.Shared.GameStates; -using Robust.Shared.Network; +using Robust.Shared.Prototypes; using Robust.Shared.Random; using Robust.Shared.Timing; @@ -41,6 +41,7 @@ public abstract partial class SharedVendingMachineSystem : EntitySystem SubscribeLocalEvent(OnVendingGetState); SubscribeLocalEvent(OnMapInit); SubscribeLocalEvent(OnEmagged); + SubscribeLocalEvent(OnEmpPulse); SubscribeLocalEvent(OnRestockDoAfter); SubscribeLocalEvent(OnAfterInteract); @@ -83,6 +84,7 @@ public abstract partial class SharedVendingMachineSystem : EntitySystem EjectEnd = component.EjectEnd, DenyEnd = component.DenyEnd, DispenseOnHitEnd = component.DispenseOnHitEnd, + Broken = component.Broken, }; } @@ -145,6 +147,16 @@ public abstract partial class SharedVendingMachineSystem : EntitySystem RestockInventoryFromPrototype(uid, component, component.InitialStockQuality); } + private void OnEmpPulse(Entity ent, ref EmpPulseEvent args) + { + if (!ent.Comp.Broken && _receiver.IsPowered(ent.Owner)) + { + args.Affected = true; + args.Disabled = true; + ent.Comp.NextEmpEject = Timing.CurTime; + } + } + protected virtual void EjectItem(EntityUid uid, VendingMachineComponent? vendComponent = null, bool forceEject = false) { } /// diff --git a/Content.Shared/VendingMachines/VendingMachineComponent.cs b/Content.Shared/VendingMachines/VendingMachineComponent.cs index 6a9d650898..29ff3c654a 100644 --- a/Content.Shared/VendingMachines/VendingMachineComponent.cs +++ b/Content.Shared/VendingMachines/VendingMachineComponent.cs @@ -67,6 +67,7 @@ namespace Content.Shared.VendingMachines public string? NextItemToEject; + [DataField] public bool Broken; /// @@ -300,5 +301,7 @@ namespace Content.Shared.VendingMachines public TimeSpan? DenyEnd; public TimeSpan? DispenseOnHitEnd; + + public bool Broken; } } diff --git a/Resources/Credits/GitHub.txt b/Resources/Credits/GitHub.txt index f3ea41018f..ca08fb2939 100644 --- a/Resources/Credits/GitHub.txt +++ b/Resources/Credits/GitHub.txt @@ -1 +1 @@ -0leshe, 0tito, 0x6273, 12rabbits, 1337dakota, 13spacemen, 154942, 2013HORSEMEATSCANDAL, 20kdc, 21Melkuu, 27alaing, 2DSiggy, 3nderall, 4310v343k, 4dplanner, 5tickman, 612git, 778b, 96flo, aaron, abadaba695, Ablankmann, abregado, Absolute-Potato, Absotively, achookh, Acruid, ActiveMammmoth, actually-reb, ada-please, adamsong, Adeinitas, adm2play, Admiral-Obvious-001, adrian, Adrian16199, Ady4ik, Aearo-Deepwater, Aerocrux, Aeshus, Aexolott, Aexxie, africalimedrop, afrokada, AftrLite, AgentSmithRadio, Agoichi, Ahion, aiden, Aidenkrz, Aisu9, ajcm, AJCM-git, AjexRose, Alekshhh, alexalexmax, alexkar598, AlexMorgan3817, alexum418, alexumandxgabriel08x, Alice4267, Alithsko, Alkheemist, alliephante, ALMv1, Alpaccalypse, Alpha-Two, AlphaQwerty, Altoids1, amatwiedle, amylizzle, ancientpower, Andre19926, Andrew-Fall, AndrewEyeke, AndrewFenriz, AndreyCamper, Anzarot121, ApolloVector, Appiah, ar4ill, Arcane-Waffle, archee1, ArchPigeon, ArchRBX, areitpog, Arendian, areyouconfused, arimah, Arkanic, ArkiveDev, armoks, Arteben, ArthurMousatov, ArtisticRoomba, artur, Artxmisery, ArZarLordOfMango, as334, AsikKEsel, AsnDen, asperger-sind, aspiringLich, astriloqua, august-sun, AutoOtter, AverageNotDoingAnythingEnjoyer, avghdev, Awlod, AzzyIsNotHere, azzyisnothere, B-Kirill, B3CKDOOR, baa14453, BackeTako, BadaBoomie, Bakke, BananaFlambe, Baptr0b0t, BarryNorfolk, BasedUser, beck-thompson, beesterman, bellwetherlogic, ben, benbryant0, benev0, benjamin-burges, BGare, bhespiritu, bibbly, BigfootBravo, BIGZi0348, bingojohnson, BismarckShuffle, Bixkitts, Blackern5000, Blazeror, blitzthesquishy, bloodrizer, Bloody2372, blueDev2, Boaz1111, BobdaBiscuit, BobTheSleder, boiled-water-tsar, Bokser815, bolantej, Booblesnoot42, Boolean-Buckeye, botanySupremist, brainfood1183, BramvanZijp, Brandon-Huu, breeplayx3, BriBrooo, Bright0, brndd, bryce0110, BubblegumBlue, buletsponge, buntobaggins, bvelliquette, BWTCK, byondfuckery, c0rigin, c4llv07e, CaasGit, Caconym27, Calecute, Callmore, Camdot, capnsockless, CaptainMaru, captainsqrbeard, Carbonhell, Carolyn3114, Carou02, carteblanche4me, catdotjs, catlord, Catofquestionableethics, CatTheSystem, CawsForConcern, Centronias, Chaboricks, chairbender, Chaoticaa, Charlese2, charlie, chartman, ChaseFlorom, chavonadelal, Cheackraze, CheddaCheez, cheesePizza2, CheesePlated, Chief-Engineer, chillyconmor, christhirtle, chromiumboy, Chronophylos, Chubbicous, Chubbygummibear, Ciac32, ciaran, citrea, civilCornball, claustro305, Clement-O, clyf, Clyybber, CMDR-Piboy314, cnv41, coco, cohanna, Cohnway, Cojoke-dot, ColdAutumnRain, Colin-Tel, collinlunn, ComicIronic, Compilatron144, CookieMasterT, coolboy911, CoolioDudio, coolmankid12345, Coolsurf6, cooperwallace, corentt, CormosLemming, CrafterKolyan, CraftyRenter, crazybrain23, Crazydave91920, creadth, CrigCrag, CroilBird, Crotalus, CrudeWax, cryals, CrzyPotato, cubixthree, cutemoongod, Cyberboss, d34d10cc, DadeKuma, Daemon, daerSeebaer, dahnte, dakamakat, DamianX, dan, dangerrevolution, daniel-cr, DanSAussieITS, Daracke, Darkenson, DawBla, Daxxi3, dch-GH, ddeegan, de0rix, Deahaka, dean, DEATHB4DEFEAT, Deatherd, deathride58, DebugOk, Decappi, Decortex, Deeeeja, deepdarkdepths, DeepwaterCreations, Deerstop, degradka, Delete69, deltanedas, DenisShvalov, DerbyX, derek, dersheppard, Deserty0, Detintinto, DevilishMilk, devinschubert14, dexlerxd, dffdff2423, DieselMohawk, DieselMohawkTheSequel, digitalic, Dimastra, DinnerCalzone, DinoWattz, Disp-Dev, DisposableCrewmember42, dissidentbullet, DjfjdfofdjfjD, doc-michael, docnite, Doctor-Cpu, DogZeroX, dolgovmi, dontbetank, Doomsdrayk, Doru991, DoubleRiceEddiedd, DoutorWhite, DR-DOCTOR-EVIL-EVIL, Dragonjspider, dragonryan06, drakewill-CRL, Drayff, dreamlyjack, DrEnzyme, dribblydrone, DrMelon, drongood12, DrSingh, DrSmugleaf, drteaspoon420, DTanxxx, DubiousDoggo, DuckManZach, Duddino, dukevanity, duskyjay, Dutch-VanDerLinde, dvir001, dylanstrategie, dylanwhittingham, Dynexust, Easypoller, echo, eclips_e, eden077, EEASAS, Efruit, efzapa, Ekkosangen, ElectroSR, elsie, elthundercloud, Elysium206, Emisse, emmafornash, EmoGarbage404, Endecc, EnrichedCaramel, Entvari, eoineoineoin, ephememory, eris, erohrs2, ERORR404V1, Errant-4, ertanic, esguard, estacaoespacialpirata, eugene, ewokswagger, exincore, exp111, f0x-n3rd, F1restar4, FacePluslll, Fahasor, FairlySadPanda, farrellka-dev, FATFSAAM2, Feluk6174, ficcialfaint, Fiftyllama, Fildrance, FillerVK, FinnishPaladin, firenamefn, Firewars763, FirinMaLazors, Fishfish458, fl-oz, Flareguy, flashgnash, FlipBrooke, FluffiestFloof, FluffMe, FluidRock, flymo5678, foboscheshir, FoLoKe, fooberticus, ForestNoises, forgotmyotheraccount, forkeyboards, forthbridge, Fortune117, foxhorn, freeman2651, freeze2222, frobnic8, Froffy025, Fromoriss, froozigiusz, FrostMando, FrostRibbon, Funce, FungiFellow, FunTust, Futuristic-OK, GalacticChimp, gamer3107, Gamewar360, gansulalan, GaussiArson, Gaxeer, gbasood, gcoremans, Geekyhobo, genderGeometries, GeneralGaws, Genkail, Gentleman-Bird, geraeumig, Ghagliiarghii, Git-Nivrak, githubuser508, gituhabu, GlassEclipse, GnarpGnarp, GNF54, godisdeadLOL, goet, GoldenCan, Goldminermac, Golinth, golubgik, GoodWheatley, Gorox221, GR1231, gradientvera, graevy, GraniteSidewalk, GreaseMonk, greenrock64, GreyMario, GrownSamoyedDog, GTRsound, gusxyz, Gyrandola, h3half, hamurlik, Hanzdegloker, HappyRoach, Hardly3D, harikattar, Hayden, he1acdvv, Hebi, Helix-ctrl, helm4142, Henry, HerCoyote23, Hi-Im-Shot, HighTechPuddle, Hitlinemoss, hiucko, hivehum, Hmeister-fake, Hmeister-real, Hobbitmax, hobnob, HoidC, Holinka4ever, holyssss, HoofedEar, Hoolny, hord-brayden, hoshizora-sayo, Hreno, Hrosts, htmlsystem, Huaqas, hubismal, Hugal31, Huxellberger, Hyenh, hyperb1, hyperDelegate, hyphenationc, i-justuser-i, iaada, iacore, IamVelcroboy, Ian321, icekot8, icesickleone, iczero, iglov, IgorAnt028, igorsaux, ike709, illersaver, Illiux, Ilushkins33, Ilya246, IlyaElDunaev, imatsoup, IMCB, impubbi, imrenq, imweax, indeano, Injazz, Insineer, insoPL, IntegerTempest, Interrobang01, Intoxicating-Innocence, IProduceWidgets, itsmethom, Itzbenz, iztokbajcar, Jackal298, Jackrost, jacksonzck, Jacktastic09, Jackw2As, jacob, jamessimo, janekvap, Jark255, Jarmer123, Jaskanbe, JasperJRoth, jbox144, JCGWE30, JerryImMouse, jerryimmouse, Jessetriesagain, jessicamaybe, Jezithyr, jicksaw, JiimBob, JimGamemaster, jimmy12or, JIPDawg, jjtParadox, jkwookee, jmcb, JohnGinnane, johnku1, Jophire, joshepvodka, JpegOfAFrog, jproads, JrInventor05, Jrpl, jukereise, juliangiebel, JustArt1m, JustCone14, justdie12, justin, justintether, JustinTrotter, JustinWinningham, justtne, K-Dynamic, k3yw, Kadeo64, Kaga-404, kaiserbirch, KaiShibaa, kalane15, kalanosh, KamTheSythe, Kanashi-Panda, katzenminer, kbailey-git, Keelin, Keer-Sar, KEEYNy, keikiru, Kelrak, kerisargit, keronshb, KIBORG04, KieueCaprie, Killerqu00, Kimpes, KingFroozy, kira-er, kiri-yoshikage, Kirillcas, Kirus59, Kistras, Kit0vras, KittenColony, Kittygyat, klaypexx, Kmc2000, Ko4ergaPunk, kognise, kokoc9n, komunre, KonstantinAngelov, kontakt, kosticia, koteq, kotobdev, Kowlin, KrasnoshchekovPavel, Krosus777, Krunklehorn, Kupie, kxvvv, Kyoth25f, kyupolaris, kzhanik, LaCumbiaDelCoronavirus, lajolico, Lamrr, lanedon, LankLTE, laok233, lapatison, larryrussian, lawdog4817, Lazzi0706, leander-0, leonardo-dabepis, leonidussaks, leonsfriedrich, LeoSantich, LetterN, lettern, Level10Cybermancer, LEVELcat, lever1209, LevitatingTree, Lgibb18, lgruthes, LightVillet, lilazero, liltenhead, linkbro1, linkuyx, Litraxx, little-meow-meow, LittleBuilderJane, LittleNorthStar, LittleNyanCat, lizelive, ljm862, lmsnoise, localcc, lokachop, lolman360, Lomcastar, Lordbrandon12, LordCarve, LordEclipse, lucas, LucasTheDrgn, luckyshotpictures, LudwigVonChesterfield, luegamer, luizwritescode, Lukasz825700516, luminight, lunarcomets, Lusatia, Luxeator, lvvova1, Lyndomen, lyroth001, lzimann, lzk228, M1tht1c, M3739, M4rchy-S, M87S, mac6na6na, MACMAN2003, Macoron, magicalus, magmodius, magnuscrowe, maland1, malchanceux, MaloTV, ManelNavola, manelnavola, Mangohydra, marboww, Markek1, MarkerWicker, marlyn, matt, Matz05, max, MaxNox7, maylokana, MehimoNemo, MeltedPixel, memeproof, MendaxxDev, Menshin, Mephisto72, MerrytheManokit, Mervill, metalgearsloth, MetalSage, MFMessage, mhamsterr, michaelcu, micheel665, mifia, MilenVolf, MilonPL, Minemoder5000, Minty642, minus1over12, Mirino97, mirrorcult, misandrie, MishaUnity, MissKay1994, MisterImp, MisterMecky, Mith-randalf, Mixelz, mjarduk, MjrLandWhale, mkanke-real, MLGTASTICa, mnva0, moderatelyaware, modern-nm, mokiros, momo, Moneyl, monotheonist, Moomoobeef, moony, Morb0, MossyGreySlope, mr-bo-jangles, Mr0maks, MrFippik, mrrobdemo, muburu, MureixloI, murolem, musicmanvr, MWKane, Myakot, Myctai, N3X15, nabegator, nails-n-tape, Nairodian, Naive817, NakataRin, namespace-Memory, Nannek, NazrinNya, neutrino-laser, NickPowers43, nikitosych, nikthechampiongr, Nimfar11, ninruB, Nirnael, NIXC, nkokic, NkoKirkto, nmajask, noctyrnal, noelkathegod, noirogen, nok-ko, NonchalantNoob, NoobyLegion, Nopey, not-gavnaed, notafet, notquitehadouken, notsodana, noudoit, noverd, Nox38, NuclearWinter, nukashimika, nuke-haus, NULL882, nullarmo, nyeogmi, Nylux, Nyranu, Nyxilath, och-och, OctoRocket, OldDanceJacket, OliverOtter, onesch, OneZerooo0, OnsenCapy, OnyxTheBrave, opl-, Orange-Winds, OrangeMoronage9622, OrbitSystem07, Orsoniks, osjarw, Ostaf, othymer, OttoMaticode, Owai-Seek, packmore, paige404, paigemaeforrest, pali6, Palladinium, Pangogie, panzer-iv1, partyaddict, patrikturi, PaulRitter, pavlockblaine03, peccneck, Peptide90, peptron1, perryprog, PeterFuto, PetMudstone, pewter-wiz, pgraycs, PGrayCS, Pgriha, phantom-lily, pheenty, philingham, Phill101, Phooooooooooooooooooooooooooooooosphate, phunnyguy, PicklOH, PilgrimViis, Pill-U, pinkbat5, Piras314, Pireax, Pissachu, pissdemon, Pixel8-dev, PixeltheAertistContrib, PixelTheKermit, PJB3005, Plasmaguy, plinyvic, Plykiya, poeMota, pofitlo, pointer-to-null, pok27, poklj, PolterTzi, PoorMansDreams, PopGamer45, portfiend, potato1234x, PotentiallyTom, PotRoastPiggy, Princess-Cheeseballs, ProfanedBane, PROG-MohamedDwidar, Prole0, ProPandaBear, PrPleGoo, ps3moira, Pspritechologist, Psychpsyo, psykana, psykzz, PuceTint, pumkin69, PuroSlavKing, PursuitInAshes, Putnam3145, py01, Pyrovi, qrtDaniil, qrwas, Quantum-cross, quasr-9, quatre, QueerNB, QuietlyWhisper, qwerltaz, Radezolid, RadioMull, Radosvik, Radrark, Rainbeon, Rainfey, Raitononai, Ramlik, RamZ, randy10122, Rane, Ranger6012, Rapidgame7, ravage123321, rbertoche, RedBookcase, Redfire1331, Redict, RedlineTriad, redmushie, RednoWCirabrab, ReeZer2, RemberBM, RemieRichards, RemTim, rene-descartes2021, Renlou, retequizzle, rhailrake, rhsvenson, rich-dunne, RieBi, riggleprime, RIKELOLDABOSS, rinary1, Rinkashikachi, riolume, rlebell33, RobbyTheFish, robinthedragon, Rockdtben, Rohesie, rok-povsic, rokudara-sen, rolfero, RomanNovo, rosieposieeee, Roudenn, router, ruddygreat, rumaks, RumiTiger, Ruzihm, S1rFl0, S1ss3l, Saakra, Sadie-silly, saga3152, saintmuntzer, Salex08, sam, samgithubaccount, Samuka-C, SaphireLattice, SapphicOverload, sarahon, sativaleanne, SaveliyM360, sBasalto, ScalyChimp, ScarKy0, ScholarNZL, schrodinger71, scrato, Scribbles0, scrivoy, scruq445, scuffedjays, ScumbagDog, SeamLesss, Segonist, semensponge, sephtasm, ser1-1y, Serkket, sewerpig, SG6732, sh18rw, Shaddap1, ShadeAware, ShadowCommander, shadowtheprotogen546, shaeone, shampunj, shariathotpatrol, SharkSnake98, shibechef, Siginanto, signalsender, SignalWalker, siigiil, silicon14wastaken, Simyon264, sirdragooon, Sirionaut, sirwarock, Sk1tch, SkaldetSkaeg, Skarletto, Skrauz, Skybailey-dev, skye, Skyedra, SlamBamActionman, slarticodefast, Slava0135, sleepyyapril, slimmslamm, Slyfox333, Smugman, snebl, snicket, sniperchance, Snowni, snowsignal, SolidSyn, SolidusSnek, solstar2, SonicHDC, SoulFN, SoulSloth, Soundwavesghost, soupkilove, southbridge-fur, sowelipililimute, Soydium, spacelizard, SpaceLizardSky, SpaceManiac, SpaceRox1244, SpaceyLady, Spangs04, spanky-spanky, Sparlight, spartak, SpartanKadence, spderman3333, SpeltIncorrectyl, Spessmann, SphiraI, SplinterGP, spoogemonster, sporekto, sporkyz, ssdaniel24, stalengd, stanberytrask, Stanislav4ix, StanTheCarpenter, starbuckss14, Stealthbomber16, Steffo99, stellar-novas, stewie523, stomf, Stop-Signs, stopbreaking, stopka-html, StrawberryMoses, Stray-Pyramid, strO0pwafel, Strol20, StStevens, Subversionary, sunbear-dev, supergdpwyl, superjj18, Supernorn, SurrealShibe, SweetAplle, SweptWasTaken, SyaoranFox, Sybil, SYNCHRONIC, Szunti, t, Tainakov, takemysoult, taonewt, tap, TaralGit, Taran, taurie, Tayrtahn, tday93, teamaki, TeenSarlacc, TekuNut, telyonok, TemporalOroboros, tentekal, terezi4real, Terraspark4941, texcruize, Tezzaide, TGODiamond, TGRCdev, tgrkzus, ThatGuyUSA, ThatOneGoblin25, thatrandomcanadianguy, TheArturZh, TheBlueYowie, thecopbennet, TheCze, TheDarkElites, thedraccx, TheEmber, TheFlyingSentry, TheIntoxicatedCat, thekilk, themias, theomund, TheProNoob678, TherapyGoth, ThereDrD0, TheShuEd, thetolbean, thevinter, TheWaffleJesus, thinbug0, ThunderBear2006, timothyteakettle, TimrodDX, timurjavid, tin-man-tim, TiniestShark, Titian3, tk-a369, tkdrg, tmtmtl30, ToastEnjoyer, Toby222, TokenStyle, Tollhouse, Toly65, tom-leys, tomasalves8, Tomeno, Tonydatguy, topy, tornado-technology, TornadoTechnology, tosatur, TotallyLemon, ToxicSonicFan04, Tr1bute, travis-g-reid, treytipton, trixxedbit, TrixxedHeart, tropicalhibi, truepaintgit, Truoizys, Tryded, TsjipTsjip, Tunguso4ka, TurboTrackerss14, tyashley, Tyler-IN, TytosB, Tyzemol, UbaserB, ubis1, UBlueberry, uhbg, UKNOWH, UltimateJester, Unbelievable-Salmon, underscorex5, UnicornOnLSD, Unisol, unusualcrow, Uriende, UristMcDorf, user424242420, Utmanarn, Vaaankas, valentfingerov, valquaint, Varen, Vasilis, VasilisThePikachu, veliebm, Velken, VelonacepsCalyxEggs, veprolet, VerinSenpai, veritable-calamity, Veritius, Vermidia, vero5123, verslebas, vexerot, vgskye, viceemargo, VigersRay, violet754, Visne, vitopigno, vitusveit, vlad, vlados1408, VMSolidus, vmzd, VoidMeticulous, voidnull000, volotomite, volundr-, Voomra, Vordenburg, vorkathbruh, Vortebo, vulppine, wachte1, wafehling, walksanatora, Warentan, WarMechanic, Watermelon914, weaversam8, wertanchik, whateverusername0, whatston3, widgetbeck, Will-Oliver-Br, Willhelm53, WilliamECrew, willicassi, Winkarst-cpu, wirdal, wixoaGit, WlarusFromDaSpace, Wolfkey-SomeoneElseTookMyUsername, wrexbe, wtcwr68, xeri7, xkreksx, xprospero, xRiriq, xsainteer, YanehCheck, yathxyz, Ygg01, YotaXP, youarereadingthis, YoungThugSS14, Yousifb26, youtissoum, yunii, YuriyKiss, yuriykiss, zach-hill, Zadeon, Zalycon, zamp, Zandario, Zap527, Zealith-Gamer, ZelteHonor, zero, ZeroDiamond, ZeWaka, zHonys, zionnBE, ZNixian, Zokkie, ZoldorfTheWizard, zonespace27, Zylofan, Zymem, zzylex +0leshe, 0tito, 0x6273, 12rabbits, 1337dakota, 13spacemen, 154942, 2013HORSEMEATSCANDAL, 20kdc, 21Melkuu, 27alaing, 2DSiggy, 3nderall, 4310v343k, 4dplanner, 5tickman, 612git, 778b, 96flo, aaron, abadaba695, Ablankmann, abregado, Absolute-Potato, Absotively, achookh, Acruid, ActiveMammmoth, actually-reb, ada-please, adamsong, Adeinitas, adm2play, Admiral-Obvious-001, adrian, Adrian16199, Ady4ik, Aearo-Deepwater, Aerocrux, Aeshus, Aexolott, Aexxie, africalimedrop, afrokada, AftrLite, AgentSmithRadio, Agoichi, Ahion, aiden, Aidenkrz, Aisu9, ajcm, AJCM-git, AjexRose, Alekshhh, alexalexmax, alexkar598, AlexMorgan3817, alexum418, alexumandxgabriel08x, Alice4267, Alithsko, Alkheemist, alliephante, ALMv1, Alpaccalypse, Alpha-Two, AlphaQwerty, Altoids1, amatwiedle, amylizzle, ancientpower, Andre19926, Andrew-Fall, AndrewEyeke, AndrewFenriz, AndreyCamper, Anzarot121, ApolloVector, Appiah, ar4ill, Arcane-Waffle, archee1, ArchPigeon, ArchRBX, areitpog, Arendian, areyouconfused, arimah, Arkanic, ArkiveDev, armoks, Arteben, ArthurMousatov, ArtisticRoomba, artur, Artxmisery, ArZarLordOfMango, as334, AsikKEsel, AsnDen, asperger-sind, aspiringLich, astriloqua, august-sun, AutoOtter, AverageNotDoingAnythingEnjoyer, avghdev, AwareFoxy, Awlod, azzyisnothere, AzzyIsNotHere, B-Kirill, B3CKDOOR, baa14453, BackeTako, BadaBoomie, Bakke, BananaFlambe, Baptr0b0t, BarryNorfolk, BasedUser, beck-thompson, beesterman, bellwetherlogic, ben, benbryant0, benev0, benjamin-burges, BGare, bhespiritu, bibbly, BigfootBravo, BIGZi0348, bingojohnson, BismarckShuffle, Bixkitts, Blackern5000, Blazeror, blitzthesquishy, bloodrizer, Bloody2372, blueDev2, Boaz1111, BobdaBiscuit, BobTheSleder, boiled-water-tsar, Bokser815, bolantej, Booblesnoot42, Boolean-Buckeye, botanySupremist, brainfood1183, BramvanZijp, Brandon-Huu, breeplayx3, BriBrooo, Bright0, brndd, bryce0110, BubblegumBlue, buletsponge, buntobaggins, bvelliquette, BWTCK, byondfuckery, c0rigin, c4llv07e, CaasGit, Caconym27, Calecute, Callmore, Camdot, capnsockless, CaptainMaru, captainsqrbeard, Carbonhell, Carolyn3114, Carou02, carteblanche4me, catdotjs, catlord, Catofquestionableethics, CatTheSystem, CawsForConcern, Centronias, Chaboricks, chairbender, Chaoticaa, Charlese2, charlie, chartman, ChaseFlorom, chavonadelal, Cheackraze, CheddaCheez, cheesePizza2, CheesePlated, Chief-Engineer, chillyconmor, christhirtle, chromiumboy, Chronophylos, Chubbicous, Chubbygummibear, Ciac32, ciaran, citrea, civilCornball, claustro305, Clement-O, clyf, Clyybber, CMDR-Piboy314, cnv41, coco, cohanna, Cohnway, Cojoke-dot, ColdAutumnRain, Colin-Tel, collinlunn, ComicIronic, Compilatron144, CookieMasterT, coolboy911, CoolioDudio, coolmankid12345, Coolsurf6, cooperwallace, corentt, CormosLemming, CrafterKolyan, CraftyRenter, crazybrain23, Crazydave91920, creadth, CrigCrag, CroilBird, Crotalus, CrudeWax, cryals, CrzyPotato, cubixthree, cutemoongod, Cyberboss, d34d10cc, DadeKuma, Daemon, daerSeebaer, dahnte, dakamakat, DamianX, dan, dangerrevolution, daniel-cr, DanSAussieITS, Daracke, Darkenson, DawBla, Daxxi3, dch-GH, ddeegan, de0rix, Deahaka, dean, DEATHB4DEFEAT, Deatherd, deathride58, DebugOk, Decappi, Decortex, Deeeeja, deepdarkdepths, DeepwaterCreations, Deerstop, degradka, Delete69, deltanedas, DenisShvalov, DerbyX, derek, dersheppard, Deserty0, Detintinto, DevilishMilk, devinschubert14, dexlerxd, dffdff2423, DieselMohawk, DieselMohawkTheSequel, digitalic, Dimastra, DinnerCalzone, DinoWattz, Disp-Dev, DisposableCrewmember42, dissidentbullet, DjfjdfofdjfjD, doc-michael, docnite, Doctor-Cpu, DogZeroX, dolgovmi, dontbetank, Doomsdrayk, Doru991, DoubleRiceEddiedd, DoutorWhite, DR-DOCTOR-EVIL-EVIL, Dragonjspider, dragonryan06, drakewill-CRL, Drayff, dreamlyjack, DrEnzyme, dribblydrone, DrMelon, drongood12, DrSingh, DrSmugleaf, drteaspoon420, DTanxxx, DubiousDoggo, DuckManZach, Duddino, dukevanity, duskyjay, Dutch-VanDerLinde, dvir001, dylanstrategie, dylanwhittingham, Dynexust, Easypoller, echo, eclips_e, eden077, EEASAS, Efruit, efzapa, Ekkosangen, ElectroSR, elsie, elthundercloud, Elysium206, Emisse, emmafornash, EmoGarbage404, Endecc, EnrichedCaramel, Entvari, eoineoineoin, ephememory, eris, erohrs2, ERORR404V1, Errant-4, ertanic, esguard, estacaoespacialpirata, eugene, ewokswagger, exincore, exp111, f0x-n3rd, F1restar4, FacePluslll, Fahasor, FairlySadPanda, farrellka-dev, FATFSAAM2, Feluk6174, ficcialfaint, Fiftyllama, Fildrance, FillerVK, FinnishPaladin, firenamefn, Firewars763, FirinMaLazors, Fishfish458, fl-oz, Flareguy, flashgnash, FlipBrooke, FluffiestFloof, FluffMe, FluidRock, flymo5678, foboscheshir, FoLoKe, fooberticus, ForestNoises, forgotmyotheraccount, forkeyboards, forthbridge, Fortune117, foxhorn, freeman2651, freeze2222, frobnic8, Froffy025, Fromoriss, froozigiusz, FrostMando, FrostRibbon, Funce, FungiFellow, FunTust, Futuristic-OK, GalacticChimp, gamer3107, Gamewar360, gansulalan, GaussiArson, Gaxeer, gbasood, gcoremans, Geekyhobo, genderGeometries, GeneralGaws, Genkail, Gentleman-Bird, geraeumig, Ghagliiarghii, Git-Nivrak, githubuser508, gituhabu, GlassEclipse, GnarpGnarp, GNF54, godisdeadLOL, goet, GoldenCan, Goldminermac, Golinth, golubgik, GoodWheatley, Gorox221, GR1231, gradientvera, graevy, GraniteSidewalk, GreaseMonk, greenrock64, GreyMario, GrownSamoyedDog, GTRsound, gusxyz, Gyrandola, h3half, hamurlik, Hanzdegloker, HappyRoach, Hardly3D, harikattar, Hayden, he1acdvv, Hebi, Helix-ctrl, helm4142, Henry, HerCoyote23, Hi-Im-Shot, HighTechPuddle, Hitlinemoss, hiucko, hivehum, Hmeister-fake, Hmeister-real, Hobbitmax, hobnob, HoidC, Holinka4ever, holyssss, HoofedEar, Hoolny, hord-brayden, hoshizora-sayo, Hreno, Hrosts, htmlsystem, Huaqas, hubismal, Hugal31, Huxellberger, Hyenh, hyperb1, hyperDelegate, hyphenationc, i-justuser-i, iaada, iacore, IamVelcroboy, Ian321, icekot8, icesickleone, iczero, iglov, IgorAnt028, igorsaux, ike709, illersaver, Illiux, Ilushkins33, Ilya246, IlyaElDunaev, imatsoup, IMCB, impubbi, imrenq, imweax, indeano, Injazz, Insineer, insoPL, IntegerTempest, Interrobang01, Intoxicating-Innocence, IProduceWidgets, itsmethom, Itzbenz, iztokbajcar, Jackal298, Jackrost, jacksonzck, Jacktastic09, Jackw2As, jacob, jamessimo, janekvap, Jark255, Jarmer123, Jaskanbe, JasperJRoth, jbox144, JCGWE30, JerryImMouse, jerryimmouse, Jessetriesagain, jessicamaybe, Jezithyr, jicksaw, JiimBob, JimGamemaster, jimmy12or, JIPDawg, jjtParadox, jkwookee, jmcb, JohnGinnane, johnku1, Jophire, joshepvodka, JpegOfAFrog, jproads, JrInventor05, Jrpl, jukereise, juliangiebel, JustArt1m, JustCone14, justdie12, justin, justintether, JustinTrotter, JustinWinningham, justtne, K-Dynamic, k3yw, Kadeo64, Kaga-404, kaiserbirch, KaiShibaa, kalane15, kalanosh, KamTheSythe, Kanashi-Panda, katzenminer, kbailey-git, Keelin, Keer-Sar, KEEYNy, keikiru, Kelrak, kerisargit, keronshb, KIBORG04, KieueCaprie, Killerqu00, Kimpes, KingFroozy, kira-er, kiri-yoshikage, Kirillcas, Kirus59, Kistras, Kit0vras, KittenColony, Kittygyat, klaypexx, Kmc2000, Ko4ergaPunk, kognise, kokoc9n, komunre, KonstantinAngelov, kontakt, kosticia, koteq, kotobdev, Kowlin, KrasnoshchekovPavel, Krosus777, Krunklehorn, Kupie, kxvvv, Kyoth25f, kyupolaris, kzhanik, LaCumbiaDelCoronavirus, lajolico, Lamrr, lanedon, LankLTE, laok233, lapatison, larryrussian, lawdog4817, Lazzi0706, leah, leander-0, leonardo-dabepis, leonidussaks, leonsfriedrich, LeoSantich, LetterN, lettern, Level10Cybermancer, LEVELcat, lever1209, LevitatingTree, Lgibb18, lgruthes, LightVillet, lilazero, liltenhead, linkbro1, linkuyx, Litraxx, little-meow-meow, LittleBuilderJane, LittleNorthStar, LittleNyanCat, lizelive, ljm862, lmsnoise, localcc, lokachop, lolman360, Lomcastar, Lordbrandon12, LordCarve, LordEclipse, lucas, LucasTheDrgn, luckyshotpictures, LudwigVonChesterfield, luegamer, luizwritescode, Lukasz825700516, luminight, lunarcomets, Lusatia, Luxeator, lvvova1, Lyndomen, lyroth001, lzimann, lzk228, M1tht1c, M3739, M4rchy-S, M87S, mac6na6na, MACMAN2003, Macoron, magicalus, magmodius, magnuscrowe, maland1, malchanceux, MaloTV, manelnavola, ManelNavola, Mangohydra, marboww, Markek1, MarkerWicker, marlyn, matt, Matz05, max, MaxNox7, maylokana, MehimoNemo, MeltedPixel, memeproof, MendaxxDev, Menshin, Mephisto72, MerrytheManokit, Mervill, metalgearsloth, MetalSage, MFMessage, mhamsterr, michaelcu, micheel665, mifia, MilenVolf, MilonPL, Minemoder5000, Minty642, minus1over12, Mirino97, mirrorcult, misandrie, MishaUnity, MissKay1994, MisterImp, MisterMecky, Mith-randalf, Mixelz, mjarduk, MjrLandWhale, mkanke-real, MLGTASTICa, mnva0, moderatelyaware, modern-nm, mokiros, momo, Moneyl, monotheonist, Moomoobeef, moony, Morb0, MossyGreySlope, mr-bo-jangles, Mr0maks, MrFippik, mrrobdemo, muburu, MureixloI, murolem, musicmanvr, MWKane, Myakot, Myctai, N3X15, nabegator, nails-n-tape, Nairodian, Naive817, NakataRin, namespace-Memory, Nannek, NazrinNya, neutrino-laser, NickPowers43, nikitosych, nikthechampiongr, Nimfar11, ninruB, Nirnael, NIXC, nkokic, NkoKirkto, nmajask, noctyrnal, noelkathegod, noirogen, nok-ko, NonchalantNoob, NoobyLegion, Nopey, NoreUhh, not-gavnaed, notafet, notquitehadouken, notsodana, noudoit, noverd, Nox38, NuclearWinter, nukashimika, nuke-haus, NULL882, nullarmo, nyeogmi, Nylux, Nyranu, Nyxilath, och-och, OctoRocket, OldDanceJacket, OliverOtter, onesch, OneZerooo0, OnsenCapy, OnyxTheBrave, opl-, Orange-Winds, OrangeMoronage9622, OrbitSystem07, Orsoniks, osjarw, Ostaf, othymer, OttoMaticode, Owai-Seek, packmore, paige404, paigemaeforrest, pali6, Palladinium, Pangogie, panzer-iv1, partyaddict, patrikturi, PaulRitter, pavlockblaine03, peccneck, Peptide90, peptron1, perryprog, PeterFuto, PetMudstone, pewter-wiz, pgraycs, PGrayCS, Pgriha, phantom-lily, pheenty, philingham, Phill101, Phooooooooooooooooooooooooooooooosphate, phunnyguy, PicklOH, PilgrimViis, Pill-U, pinkbat5, Piras314, Pireax, Pissachu, pissdemon, Pixel8-dev, PixeltheAertistContrib, PixelTheKermit, PJB3005, Plasmaguy, plinyvic, Plykiya, poeMota, pofitlo, pointer-to-null, pok27, poklj, PolterTzi, PoorMansDreams, PopGamer45, portfiend, potato1234x, PotentiallyTom, PotRoastPiggy, Princess-Cheeseballs, ProfanedBane, PROG-MohamedDwidar, Prole0, ProPandaBear, PrPleGoo, ps3moira, Pspritechologist, Psychpsyo, psykana, psykzz, PuceTint, pumkin69, PuroSlavKing, PursuitInAshes, Putnam3145, py01, Pyrovi, qrtDaniil, qrwas, Quantum-cross, quasr-9, quatre, QueerNB, QuietlyWhisper, qwerltaz, Radezolid, RadioMull, Radosvik, Radrark, Rainbeon, Rainfey, Raitononai, Ramlik, RamZ, randy10122, Rane, Ranger6012, Rapidgame7, ravage123321, rbertoche, RedBookcase, Redfire1331, Redict, RedlineTriad, redmushie, RednoWCirabrab, ReeZer2, RemberBM, RemieRichards, RemTim, rene-descartes2021, Renlou, retequizzle, rhailrake, rhsvenson, rich-dunne, RieBi, riggleprime, RIKELOLDABOSS, rinary1, Rinkashikachi, riolume, rlebell33, RobbyTheFish, robinthedragon, Rockdtben, Rohesie, rok-povsic, rokudara-sen, rolfero, RomanNovo, rosieposieeee, Roudenn, router, ruddygreat, rumaks, RumiTiger, Ruzihm, S1rFl0, S1ss3l, Saakra, Sadie-silly, saga3152, saintmuntzer, Salex08, sam, samgithubaccount, Samuka-C, SaphireLattice, SapphicOverload, sarahon, sativaleanne, SaveliyM360, sBasalto, ScalyChimp, ScarKy0, ScholarNZL, schrodinger71, scrato, Scribbles0, scrivoy, scruq445, scuffedjays, ScumbagDog, SeamLesss, Segonist, semensponge, sephtasm, ser1-1y, Serkket, sewerpig, SG6732, sh18rw, Shaddap1, ShadeAware, ShadowCommander, shadowtheprotogen546, shaeone, shampunj, shariathotpatrol, SharkSnake98, shibechef, Siginanto, signalsender, SignalWalker, siigiil, silicon14wastaken, Simyon264, sirdragooon, Sirionaut, sirwarock, Sk1tch, SkaldetSkaeg, Skarletto, Skrauz, Skybailey-dev, skye, Skyedra, SlamBamActionman, slarticodefast, Slava0135, sleepyyapril, slimmslamm, Slyfox333, Smugman, snebl, snicket, sniperchance, Snowni, snowsignal, SolidSyn, SolidusSnek, solstar2, SonicHDC, SoulFN, SoulSloth, Soundwavesghost, soupkilove, southbridge-fur, sowelipililimute, Soydium, spacelizard, SpaceLizardSky, SpaceManiac, SpaceRox1244, SpaceyLady, Spangs04, spanky-spanky, Sparlight, spartak, SpartanKadence, spderman3333, SpeltIncorrectyl, Spessmann, SphiraI, SplinterGP, spoogemonster, sporekto, sporkyz, ssdaniel24, stalengd, stanberytrask, Stanislav4ix, StanTheCarpenter, starbuckss14, Stealthbomber16, Steffo99, stellar-novas, stewie523, stomf, Stop-Signs, stopbreaking, stopka-html, StrawberryMoses, Stray-Pyramid, strO0pwafel, Strol20, StStevens, Subversionary, sunbear-dev, supergdpwyl, superjj18, Supernorn, SurrealShibe, SweetAplle, SweptWasTaken, SyaoranFox, Sybil, SYNCHRONIC, Szunti, t, Tainakov, takemysoult, taonewt, tap, TaralGit, Taran, taurie, Tayrtahn, tday93, teamaki, TeenSarlacc, TekuNut, telyonok, TemporalOroboros, tentekal, terezi4real, Terraspark4941, texcruize, Tezzaide, TGODiamond, TGRCdev, tgrkzus, ThatGuyUSA, ThatOneGoblin25, thatrandomcanadianguy, TheArturZh, TheBlueYowie, thecopbennet, TheCze, TheDarkElites, thedraccx, TheEmber, TheFlyingSentry, TheIntoxicatedCat, thekilk, themias, theomund, TheProNoob678, TherapyGoth, ThereDrD0, TheShuEd, thetolbean, thevinter, TheWaffleJesus, thinbug0, ThunderBear2006, timothyteakettle, TimrodDX, timurjavid, tin-man-tim, TiniestShark, Titian3, tk-a369, tkdrg, tmtmtl30, ToastEnjoyer, Toby222, TokenStyle, Tollhouse, Toly65, tom-leys, tomasalves8, Tomeno, Tonydatguy, topy, tornado-technology, TornadoTechnology, tosatur, TotallyLemon, ToxicSonicFan04, Tr1bute, travis-g-reid, treytipton, trixxedbit, TrixxedHeart, tropicalhibi, truepaintgit, Truoizys, Tryded, TsjipTsjip, Tunguso4ka, TurboTrackerss14, tyashley, Tyler-IN, TytosB, Tyzemol, UbaserB, ubis1, UBlueberry, uhbg, UKNOWH, UltimateJester, Unbelievable-Salmon, underscorex5, UnicornOnLSD, Unisol, unusualcrow, Uriende, UristMcDorf, user424242420, Utmanarn, Vaaankas, valentfingerov, valquaint, Varen, Vasilis, VasilisThePikachu, veliebm, Velken, VelonacepsCalyxEggs, veprolet, VerinSenpai, veritable-calamity, Veritius, Vermidia, vero5123, verslebas, vexerot, vgskye, viceemargo, VigersRay, violet754, Visne, vitopigno, vitusveit, vlad, vlados1408, VMSolidus, vmzd, VoidMeticulous, voidnull000, volotomite, volundr-, Voomra, Vordenburg, vorkathbruh, Vortebo, vulppine, wachte1, wafehling, walksanatora, Warentan, WarMechanic, Watermelon914, weaversam8, wertanchik, whateverusername0, whatston3, widgetbeck, Will-Oliver-Br, Willhelm53, WilliamECrew, willicassi, Winkarst-cpu, wirdal, wixoaGit, WlarusFromDaSpace, Wolfkey-SomeoneElseTookMyUsername, wrexbe, wtcwr68, xeri7, xkreksx, xprospero, xRiriq, xsainteer, YanehCheck, yathxyz, Ygg01, YotaXP, youarereadingthis, YoungThugSS14, Yousifb26, youtissoum, yunii, YuriyKiss, yuriykiss, zach-hill, Zadeon, Zalycon, zamp, Zandario, Zap527, Zealith-Gamer, ZelteHonor, zero, ZeroDiamond, ZeWaka, zHonys, zionnBE, ZNixian, Zokkie, ZoldorfTheWizard, zonespace27, Zylofan, Zymem, zzylex diff --git a/Resources/Locale/en-US/escape-menu/ui/options-menu.ftl b/Resources/Locale/en-US/escape-menu/ui/options-menu.ftl index 9869aa1da5..98ee2543c1 100644 --- a/Resources/Locale/en-US/escape-menu/ui/options-menu.ftl +++ b/Resources/Locale/en-US/escape-menu/ui/options-menu.ftl @@ -167,6 +167,9 @@ ui-options-static-storage-ui = Lock storage window to hotbar ui-options-function-smart-equip-backpack = Smart-equip to backpack ui-options-function-smart-equip-belt = Smart-equip to belt +ui-options-function-smart-equip-suit-storage = Smart-equip to suit storage +ui-options-function-smart-equip-pocket1 = Smart-equip to pocket 1 +ui-options-function-smart-equip-pocket2 = Smart-equip to pocket 2 ui-options-function-open-backpack = Open backpack ui-options-function-open-belt = Open belt ui-options-function-throw-item-in-hand = Throw item diff --git a/Resources/Maps/marathon.yml b/Resources/Maps/marathon.yml index fb11cf4f70..42df78c970 100644 --- a/Resources/Maps/marathon.yml +++ b/Resources/Maps/marathon.yml @@ -1,11 +1,11 @@ meta: format: 7 category: Map - engineVersion: 266.0.0 + engineVersion: 267.2.0 forkId: "" forkVersion: "" - time: 08/29/2025 15:07:57 - entityCount: 23830 + time: 10/04/2025 14:51:31 + entityCount: 23828 maps: - 5350 grids: @@ -7592,108 +7592,31 @@ entities: - volume: 2500 temperature: 293.15 moles: - - 21.824879 - - 82.10312 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 21.824879 + Nitrogen: 82.10312 - volume: 2500 temperature: 235 moles: - - 27.225372 - - 102.419266 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 27.225372 + Nitrogen: 102.419266 - volume: 2500 immutable: True - moles: - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + moles: {} + - volume: 2500 + temperature: 293.15 + moles: {} - volume: 2500 temperature: 293.15 moles: - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Plasma: 6666.982 - volume: 2500 temperature: 293.15 moles: - - 0 - - 0 - - 0 - - 6666.982 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Nitrogen: 6666.982 - volume: 2500 temperature: 293.15 moles: - - 0 - - 6666.982 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - volume: 2500 - temperature: 293.15 - moles: - - 6666.982 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 6666.982 chunkSize: 4 - type: BecomesStation id: Marathon @@ -11880,7 +11803,7 @@ entities: pos: 34.5,45.5 parent: 30 - type: Door - secondsUntilStateChange: -25488.797 + secondsUntilStateChange: -25686.977 state: Opening - type: DeviceLinkSource lastSignals: @@ -54307,18 +54230,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 3.4430928 - - 12.952587 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 3.4430928 + Nitrogen: 12.952587 - uid: 21712 components: - type: Transform @@ -54330,18 +54243,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 3.4430928 - - 12.952587 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 3.4430928 + Nitrogen: 12.952587 - proto: ClosetChef entities: - uid: 19558 @@ -54355,18 +54258,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 3.4430928 - - 12.952587 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 3.4430928 + Nitrogen: 12.952587 - proto: ClosetChefFilled entities: - uid: 2228 @@ -54380,18 +54273,8 @@ entities: immutable: False temperature: 293.14673 moles: - - 1.7459903 - - 6.568249 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 1.7459903 + Nitrogen: 6.568249 - type: ContainerContainer containers: entity_storage: !type:Container @@ -54439,18 +54322,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 3.4430928 - - 12.952587 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 3.4430928 + Nitrogen: 12.952587 - uid: 1276 components: - type: Transform @@ -54462,18 +54335,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 3.4430928 - - 12.952587 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 3.4430928 + Nitrogen: 12.952587 - uid: 1346 components: - type: Transform @@ -54485,18 +54348,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 3.4430928 - - 12.952587 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 3.4430928 + Nitrogen: 12.952587 - uid: 1347 components: - type: Transform @@ -54508,18 +54361,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 3.4430928 - - 12.952587 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 3.4430928 + Nitrogen: 12.952587 - uid: 5662 components: - type: Transform @@ -54531,18 +54374,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 3.4430928 - - 12.952587 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 3.4430928 + Nitrogen: 12.952587 - uid: 5727 components: - type: Transform @@ -54554,18 +54387,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 3.4430928 - - 12.952587 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 3.4430928 + Nitrogen: 12.952587 - uid: 6032 components: - type: Transform @@ -54582,18 +54405,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 3.4430928 - - 12.952587 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 3.4430928 + Nitrogen: 12.952587 - uid: 7271 components: - type: Transform @@ -54615,18 +54428,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 3.4430928 - - 12.952587 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 3.4430928 + Nitrogen: 12.952587 - uid: 12817 components: - type: Transform @@ -54648,18 +54451,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 3.4430928 - - 12.952587 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 3.4430928 + Nitrogen: 12.952587 - uid: 15827 components: - type: Transform @@ -54671,18 +54464,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 3.4430928 - - 12.952587 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 3.4430928 + Nitrogen: 12.952587 - uid: 15970 components: - type: Transform @@ -54694,18 +54477,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 3.4430928 - - 12.952587 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 3.4430928 + Nitrogen: 12.952587 - uid: 16114 components: - type: Transform @@ -54717,18 +54490,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 3.4430928 - - 12.952587 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 3.4430928 + Nitrogen: 12.952587 - uid: 16171 components: - type: Transform @@ -54740,18 +54503,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 3.4430928 - - 12.952587 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 3.4430928 + Nitrogen: 12.952587 - uid: 16814 components: - type: Transform @@ -54763,18 +54516,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 3.4430928 - - 12.952587 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 3.4430928 + Nitrogen: 12.952587 - uid: 17340 components: - type: Transform @@ -54786,18 +54529,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 3.4430928 - - 12.952587 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 3.4430928 + Nitrogen: 12.952587 - uid: 17490 components: - type: Transform @@ -54809,18 +54542,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 3.4430928 - - 12.952587 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 3.4430928 + Nitrogen: 12.952587 - uid: 18176 components: - type: Transform @@ -54832,18 +54555,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 3.4430928 - - 12.952587 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 3.4430928 + Nitrogen: 12.952587 - uid: 19242 components: - type: Transform @@ -54865,18 +54578,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 3.4430928 - - 12.952587 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 3.4430928 + Nitrogen: 12.952587 - uid: 21046 components: - type: Transform @@ -54888,18 +54591,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 3.4430928 - - 12.952587 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 3.4430928 + Nitrogen: 12.952587 - uid: 21089 components: - type: Transform @@ -54911,18 +54604,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 3.4430928 - - 12.952587 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 3.4430928 + Nitrogen: 12.952587 - uid: 22508 components: - type: Transform @@ -54934,18 +54617,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 3.4430928 - - 12.952587 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 3.4430928 + Nitrogen: 12.952587 - uid: 23219 components: - type: Transform @@ -54971,18 +54644,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 3.4430928 - - 12.952587 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 3.4430928 + Nitrogen: 12.952587 - uid: 1348 components: - type: Transform @@ -54994,18 +54657,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 3.4430928 - - 12.952587 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 3.4430928 + Nitrogen: 12.952587 - uid: 6366 components: - type: Transform @@ -55017,18 +54670,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 3.4430928 - - 12.952587 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 3.4430928 + Nitrogen: 12.952587 - uid: 8336 components: - type: Transform @@ -55040,18 +54683,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 3.4430928 - - 12.952587 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 3.4430928 + Nitrogen: 12.952587 - uid: 9067 components: - type: Transform @@ -55068,18 +54701,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 3.4430928 - - 12.952587 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 3.4430928 + Nitrogen: 12.952587 - uid: 9243 components: - type: Transform @@ -55091,18 +54714,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 3.4430928 - - 12.952587 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 3.4430928 + Nitrogen: 12.952587 - uid: 10562 components: - type: Transform @@ -55129,18 +54742,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 3.4430928 - - 12.952587 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 3.4430928 + Nitrogen: 12.952587 - uid: 13340 components: - type: Transform @@ -55152,18 +54755,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 3.4430928 - - 12.952587 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 3.4430928 + Nitrogen: 12.952587 - uid: 14329 components: - type: Transform @@ -55180,18 +54773,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 3.4430928 - - 12.952587 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 3.4430928 + Nitrogen: 12.952587 - uid: 16815 components: - type: Transform @@ -55203,18 +54786,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 3.4430928 - - 12.952587 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 3.4430928 + Nitrogen: 12.952587 - uid: 18856 components: - type: Transform @@ -55231,18 +54804,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 3.4430928 - - 12.952587 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 3.4430928 + Nitrogen: 12.952587 - proto: ClosetJanitorFilled entities: - uid: 539 @@ -55256,18 +54819,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 3.4430928 - - 12.952587 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 3.4430928 + Nitrogen: 12.952587 - proto: ClosetL3JanitorFilled entities: - uid: 538 @@ -55281,18 +54834,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 3.4430928 - - 12.952587 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 3.4430928 + Nitrogen: 12.952587 - proto: ClosetL3ScienceFilled entities: - uid: 13356 @@ -55306,18 +54849,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 3.4430928 - - 12.952587 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 3.4430928 + Nitrogen: 12.952587 - proto: ClosetL3SecurityFilled entities: - uid: 2041 @@ -55336,18 +54869,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 3.4430928 - - 12.952587 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 3.4430928 + Nitrogen: 12.952587 - proto: ClosetLegalFilled entities: - uid: 16938 @@ -55361,18 +54884,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 3.4430928 - - 12.952587 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 3.4430928 + Nitrogen: 12.952587 - uid: 21523 components: - type: Transform @@ -55384,18 +54897,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 3.4430928 - - 12.952587 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 3.4430928 + Nitrogen: 12.952587 - proto: ClosetMaintenanceFilledRandom entities: - uid: 729 @@ -55409,18 +54912,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 3.4430928 - - 12.952587 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 3.4430928 + Nitrogen: 12.952587 - uid: 7008 components: - type: Transform @@ -55437,18 +54930,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 3.4430928 - - 12.952587 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 3.4430928 + Nitrogen: 12.952587 - uid: 10161 components: - type: Transform @@ -55465,18 +54948,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 3.4430928 - - 12.952587 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 3.4430928 + Nitrogen: 12.952587 - uid: 16820 components: - type: Transform @@ -55488,18 +54961,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 3.4430928 - - 12.952587 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 3.4430928 + Nitrogen: 12.952587 - uid: 16928 components: - type: Transform @@ -55511,18 +54974,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 3.4430928 - - 12.952587 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 3.4430928 + Nitrogen: 12.952587 - uid: 20494 components: - type: Transform @@ -55534,18 +54987,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 3.4430928 - - 12.952587 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 3.4430928 + Nitrogen: 12.952587 - uid: 23216 components: - type: Transform @@ -55584,18 +55027,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 3.4430928 - - 12.952587 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 3.4430928 + Nitrogen: 12.952587 - uid: 13346 components: - type: Transform @@ -55607,18 +55040,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 3.4430928 - - 12.952587 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 3.4430928 + Nitrogen: 12.952587 - uid: 14333 components: - type: Transform @@ -55637,18 +55060,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 3.4430928 - - 12.952587 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 3.4430928 + Nitrogen: 12.952587 - type: ContainerContainer containers: entity_storage: !type:Container @@ -55671,18 +55084,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 3.4430928 - - 12.952587 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 3.4430928 + Nitrogen: 12.952587 - proto: ClosetToolFilled entities: - uid: 13446 @@ -55696,18 +55099,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 3.4430928 - - 12.952587 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 3.4430928 + Nitrogen: 12.952587 - uid: 15157 components: - type: Transform @@ -55719,18 +55112,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 3.4430928 - - 12.952587 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 3.4430928 + Nitrogen: 12.952587 - proto: ClothingBackpack entities: - uid: 16077 @@ -56744,13 +56127,6 @@ entities: - type: Transform pos: -17.507723,23.466288 parent: 30 -- proto: ClothingUniformJumpskirtColorBlack - entities: - - uid: 6455 - components: - - type: Transform - pos: 21.564045,44.633358 - parent: 30 - proto: ClothingUniformJumpskirtDetective entities: - uid: 15123 @@ -56779,13 +56155,6 @@ entities: - type: Transform pos: 38.459328,30.474371 parent: 30 -- proto: ClothingUniformJumpsuitColorBlack - entities: - - uid: 6454 - components: - - type: Transform - pos: 21.51717,44.539608 - parent: 30 - proto: ClothingUniformJumpsuitCossack entities: - uid: 13662 @@ -58032,18 +57401,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 3.4430928 - - 12.952587 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 3.4430928 + Nitrogen: 12.952587 - proto: CrateCoffin entities: - uid: 20530 @@ -58122,18 +57481,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 3.4430928 - - 12.952587 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 3.4430928 + Nitrogen: 12.952587 - uid: 7840 components: - type: Transform @@ -58160,18 +57509,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 3.4430928 - - 12.952587 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 3.4430928 + Nitrogen: 12.952587 - uid: 22442 components: - type: Transform @@ -58183,18 +57522,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 3.4430928 - - 12.952587 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 3.4430928 + Nitrogen: 12.952587 - proto: CrateEngineeringCableHV entities: - uid: 10211 @@ -58215,18 +57544,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 3.4430928 - - 12.952587 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 3.4430928 + Nitrogen: 12.952587 - proto: CrateFilledSpawner entities: - uid: 3505 @@ -58309,18 +57628,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 3.4430928 - - 12.952587 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 3.4430928 + Nitrogen: 12.952587 - proto: CrateLockBoxEngineering entities: - uid: 21679 @@ -58426,18 +57735,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 3.4430928 - - 12.952587 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 3.4430928 + Nitrogen: 12.952587 - uid: 16170 components: - type: Transform @@ -58449,18 +57748,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 3.4430928 - - 12.952587 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 3.4430928 + Nitrogen: 12.952587 - proto: CrateStoneGrave entities: - uid: 20625 @@ -58554,18 +57843,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 3.4430928 - - 12.952587 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 3.4430928 + Nitrogen: 12.952587 - proto: CrewMonitoringServer entities: - uid: 7439 @@ -105184,11 +104463,15 @@ entities: - type: Transform pos: -10.5,-18.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 10024 components: - type: Transform pos: -7.5,-18.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - proto: InflatableWallStack entities: - uid: 9248 @@ -107359,18 +106642,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 3.4430928 - - 12.952587 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 3.4430928 + Nitrogen: 12.952587 - uid: 9080 components: - type: Transform @@ -107382,18 +106655,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 3.4430928 - - 12.952587 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 3.4430928 + Nitrogen: 12.952587 - uid: 9081 components: - type: Transform @@ -107405,18 +106668,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 3.4430928 - - 12.952587 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 3.4430928 + Nitrogen: 12.952587 - proto: LockerBoozeFilled entities: - uid: 453 @@ -107430,18 +106683,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 3.4430928 - - 12.952587 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 3.4430928 + Nitrogen: 12.952587 - uid: 13719 components: - type: Transform @@ -107453,18 +106696,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 3.4430928 - - 12.952587 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 3.4430928 + Nitrogen: 12.952587 - uid: 20650 components: - type: Transform @@ -107483,18 +106716,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 3.4430928 - - 12.952587 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 3.4430928 + Nitrogen: 12.952587 - uid: 420 components: - type: Transform @@ -107506,18 +106729,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 3.4430928 - - 12.952587 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 3.4430928 + Nitrogen: 12.952587 - uid: 421 components: - type: Transform @@ -107529,18 +106742,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 3.4430928 - - 12.952587 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 3.4430928 + Nitrogen: 12.952587 - proto: LockerCaptainFilledNoLaser entities: - uid: 12238 @@ -107561,18 +106764,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 3.4430928 - - 12.952587 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 3.4430928 + Nitrogen: 12.952587 - proto: LockerChiefEngineerFilled entities: - uid: 11058 @@ -107600,18 +106793,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 3.4430928 - - 12.952587 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 3.4430928 + Nitrogen: 12.952587 - proto: LockerElectricalSuppliesFilled entities: - uid: 11061 @@ -107630,18 +106813,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 3.4430928 - - 12.952587 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 3.4430928 + Nitrogen: 12.952587 - proto: LockerEngineer entities: - uid: 19420 @@ -107706,18 +106879,8 @@ entities: immutable: False temperature: 234.99968 moles: - - 3.4430928 - - 12.952587 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 3.4430928 + Nitrogen: 12.952587 - uid: 477 components: - type: Transform @@ -107729,18 +106892,8 @@ entities: immutable: False temperature: 234.99968 moles: - - 2.0214376 - - 7.6044564 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 2.0214376 + Nitrogen: 7.6044564 - type: ContainerContainer containers: entity_storage: !type:Container @@ -107765,18 +106918,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 3.4430928 - - 12.952587 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 3.4430928 + Nitrogen: 12.952587 - type: ContainerContainer containers: entity_storage: !type:Container @@ -107803,18 +106946,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 3.4430928 - - 12.952587 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 3.4430928 + Nitrogen: 12.952587 - type: ContainerContainer containers: entity_storage: !type:Container @@ -107842,18 +106975,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 3.4430928 - - 12.952587 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 3.4430928 + Nitrogen: 12.952587 - uid: 19537 components: - type: Transform @@ -107865,18 +106988,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 3.4430928 - - 12.952587 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 3.4430928 + Nitrogen: 12.952587 - uid: 19669 components: - type: Transform @@ -107888,18 +107001,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 3.4430928 - - 12.952587 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 3.4430928 + Nitrogen: 12.952587 - proto: LockerFreezerVaultFilled entities: - uid: 5608 @@ -107920,18 +107023,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 3.4430928 - - 12.952587 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 3.4430928 + Nitrogen: 12.952587 - proto: LockerHeadOfSecurityFilled entities: - uid: 2126 @@ -107945,18 +107038,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 3.4430928 - - 12.952587 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 3.4430928 + Nitrogen: 12.952587 - proto: LockerMedicalFilled entities: - uid: 4805 @@ -108087,18 +107170,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 2.0214376 - - 7.6044564 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 2.0214376 + Nitrogen: 7.6044564 - type: ContainerContainer containers: entity_storage: !type:Container @@ -108123,18 +107196,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 3.4430928 - - 12.952587 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 3.4430928 + Nitrogen: 12.952587 - proto: LockerSalvageSpecialistFilledHardsuit entities: - uid: 7253 @@ -108165,18 +107228,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 3.4430928 - - 12.952587 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 3.4430928 + Nitrogen: 12.952587 - uid: 21702 components: - type: Transform @@ -108188,18 +107241,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 3.4430928 - - 12.952587 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 3.4430928 + Nitrogen: 12.952587 - uid: 21703 components: - type: Transform @@ -108211,18 +107254,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 3.4430928 - - 12.952587 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 3.4430928 + Nitrogen: 12.952587 - proto: LockerSecurity entities: - uid: 6567 @@ -108236,18 +107269,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 3.4430928 - - 12.952587 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 3.4430928 + Nitrogen: 12.952587 - uid: 6752 components: - type: Transform @@ -108259,18 +107282,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 3.4430928 - - 12.952587 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 3.4430928 + Nitrogen: 12.952587 - uid: 11245 components: - type: Transform @@ -108282,18 +107295,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 3.4430928 - - 12.952587 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 3.4430928 + Nitrogen: 12.952587 - proto: LockerSecurityFilled entities: - uid: 1072 @@ -108307,18 +107310,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 3.4430928 - - 12.952587 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 3.4430928 + Nitrogen: 12.952587 - uid: 1854 components: - type: Transform @@ -108340,18 +107333,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 3.4430928 - - 12.952587 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 3.4430928 + Nitrogen: 12.952587 - uid: 2080 components: - type: Transform @@ -108363,18 +107346,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 3.4430928 - - 12.952587 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 3.4430928 + Nitrogen: 12.952587 - uid: 2081 components: - type: Transform @@ -108386,18 +107359,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 3.4430928 - - 12.952587 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 3.4430928 + Nitrogen: 12.952587 - uid: 2082 components: - type: Transform @@ -108409,18 +107372,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 3.4430928 - - 12.952587 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 3.4430928 + Nitrogen: 12.952587 - uid: 22430 components: - type: Transform @@ -108451,18 +107404,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 3.4430928 - - 12.952587 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 3.4430928 + Nitrogen: 12.952587 - uid: 9725 components: - type: Transform @@ -108484,18 +107427,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 3.4430928 - - 12.952587 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 3.4430928 + Nitrogen: 12.952587 - proto: MachineAnomalyGenerator entities: - uid: 22436 @@ -109115,18 +108048,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 3.4430928 - - 12.952587 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 3.4430928 + Nitrogen: 12.952587 - uid: 6906 components: - type: Transform @@ -109139,18 +108062,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 3.4430928 - - 12.952587 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 3.4430928 + Nitrogen: 12.952587 - uid: 6907 components: - type: Transform @@ -109163,18 +108076,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 3.4430928 - - 12.952587 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 3.4430928 + Nitrogen: 12.952587 - uid: 6913 components: - type: Transform @@ -109187,18 +108090,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 3.3955739 - - 12.773826 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 3.3955739 + Nitrogen: 12.773826 - uid: 6914 components: - type: Transform @@ -109211,18 +108104,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 3.3955739 - - 12.773826 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 3.3955739 + Nitrogen: 12.773826 - uid: 6915 components: - type: Transform @@ -109235,18 +108118,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 3.3955739 - - 12.773826 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 3.3955739 + Nitrogen: 12.773826 - uid: 6916 components: - type: Transform @@ -109259,18 +108132,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 3.3955739 - - 12.773826 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 3.3955739 + Nitrogen: 12.773826 - uid: 8832 components: - type: Transform @@ -109289,18 +108152,8 @@ entities: immutable: False temperature: 293.14954 moles: - - 3.1239278 - - 11.75192 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 3.1239278 + Nitrogen: 11.75192 - uid: 21242 components: - type: Transform @@ -109313,18 +108166,8 @@ entities: immutable: False temperature: 293.14954 moles: - - 3.1239278 - - 11.75192 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 3.1239278 + Nitrogen: 11.75192 - uid: 21244 components: - type: Transform @@ -109337,18 +108180,8 @@ entities: immutable: False temperature: 293.14954 moles: - - 3.1239278 - - 11.75192 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 3.1239278 + Nitrogen: 11.75192 - uid: 21245 components: - type: Transform @@ -109361,18 +108194,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 3.4430928 - - 12.952587 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 3.4430928 + Nitrogen: 12.952587 - proto: Multitool entities: - uid: 545 @@ -110499,46 +109322,62 @@ entities: rot: 3.141592653589793 rad pos: -40.5,53.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 2091 components: - type: Transform pos: -40.5,54.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 2532 components: - type: Transform pos: -39.5,54.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 2592 components: - type: Transform rot: 1.5707963267948966 rad pos: -39.5,54.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 4595 components: - type: Transform rot: 1.5707963267948966 rad pos: -39.5,53.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 4600 components: - type: Transform rot: 3.141592653589793 rad pos: -39.5,53.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 4781 components: - type: Transform rot: -1.5707963267948966 rad pos: -40.5,54.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 21013 components: - type: Transform rot: -1.5707963267948966 rad pos: -40.5,53.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - proto: PlasmaTank entities: - uid: 23385 @@ -110558,23 +109397,31 @@ entities: - type: Transform pos: -39.5,53.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 1986 components: - type: Transform pos: -40.5,53.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 2407 components: - type: Transform rot: 3.141592653589793 rad pos: -39.5,54.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 4788 components: - type: Transform rot: 3.141592653589793 rad pos: -40.5,54.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - proto: PlasticFlapsAirtightClear entities: - uid: 11228 @@ -117167,6 +116014,13 @@ entities: - type: Transform pos: -43.5,-1.5 parent: 30 +- proto: RandomVendingClothing + entities: + - uid: 6454 + components: + - type: Transform + pos: 20.5,44.5 + parent: 30 - proto: RandomVendingDrinks entities: - uid: 746 @@ -117312,176 +116166,246 @@ entities: - type: Transform pos: 2.5,-57.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 4454 components: - type: Transform pos: 0.5,-58.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 5792 components: - type: Transform pos: 1.5,-57.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 8682 components: - type: Transform pos: 24.5,-34.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 8683 components: - type: Transform pos: 24.5,-32.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 8684 components: - type: Transform pos: 24.5,-30.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 8685 components: - type: Transform pos: 24.5,-28.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 8686 components: - type: Transform pos: 24.5,-26.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 8687 components: - type: Transform pos: 24.5,-24.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 8688 components: - type: Transform pos: 24.5,-22.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 12898 components: - type: Transform pos: 38.5,11.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 12900 components: - type: Transform pos: 37.5,11.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 12901 components: - type: Transform pos: 35.5,11.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 12920 components: - type: Transform pos: 36.5,11.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 12928 components: - type: Transform pos: 38.5,14.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 12931 components: - type: Transform pos: 35.5,14.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 15073 components: - type: Transform pos: 12.5,-38.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 15180 components: - type: Transform pos: 12.5,-42.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 15188 components: - type: Transform pos: 10.5,-40.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 15190 components: - type: Transform pos: 13.5,-38.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 16404 components: - type: Transform pos: -40.5,50.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 17012 components: - type: Transform pos: -60.5,56.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 17013 components: - type: Transform pos: -61.5,57.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 17014 components: - type: Transform pos: -60.5,58.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 17015 components: - type: Transform pos: -59.5,57.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 18190 components: - type: Transform pos: -39.5,50.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 20467 components: - type: Transform pos: 11.5,-38.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 20538 components: - type: Transform pos: 3.5,-57.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 20539 components: - type: Transform pos: 1.5,-61.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 20569 components: - type: Transform pos: 4.5,-58.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 20591 components: - type: Transform pos: 3.5,-61.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 20613 components: - type: Transform pos: 2.5,-61.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 20644 components: - type: Transform pos: 0.5,-60.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 20651 components: - type: Transform pos: 0.5,-59.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 20652 components: - type: Transform pos: 4.5,-60.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - proto: ReinforcedWindow entities: - uid: 66 @@ -117489,3566 +116413,4992 @@ entities: - type: Transform pos: -17.5,4.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 67 components: - type: Transform pos: -16.5,4.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 68 components: - type: Transform pos: -15.5,4.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 69 components: - type: Transform pos: -13.5,4.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 70 components: - type: Transform pos: -14.5,4.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 71 components: - type: Transform pos: -11.5,5.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 72 components: - type: Transform pos: -19.5,8.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 73 components: - type: Transform pos: -21.5,8.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 152 components: - type: Transform pos: 44.5,50.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 301 components: - type: Transform pos: 0.5,24.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 302 components: - type: Transform pos: -1.5,24.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 303 components: - type: Transform pos: -3.5,24.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 304 components: - type: Transform pos: 3.5,24.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 305 components: - type: Transform pos: 5.5,24.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 319 components: - type: Transform pos: -22.5,5.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 327 components: - type: Transform pos: -22.5,7.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 379 components: - type: Transform pos: -56.5,5.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 445 components: - type: Transform pos: 44.5,49.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 479 components: - type: Transform pos: -64.5,12.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 843 components: - type: Transform pos: -46.5,-1.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 872 components: - type: Transform pos: -54.5,5.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 876 components: - type: Transform pos: -60.5,8.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 897 components: - type: Transform pos: -60.5,7.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 902 components: - type: Transform pos: -48.5,4.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 903 components: - type: Transform pos: -46.5,-5.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 911 components: - type: Transform pos: -58.5,9.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 912 components: - type: Transform pos: -58.5,10.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 913 components: - type: Transform pos: -46.5,-2.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 920 components: - type: Transform pos: -46.5,3.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 930 components: - type: Transform pos: -46.5,-4.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 932 components: - type: Transform pos: -59.5,9.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 949 components: - type: Transform pos: -46.5,2.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 952 components: - type: Transform pos: -46.5,-6.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 965 components: - type: Transform pos: -46.5,1.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 1051 components: - type: Transform pos: -41.5,12.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 1053 components: - type: Transform pos: -37.5,11.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 1054 components: - type: Transform pos: -39.5,8.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 1058 components: - type: Transform pos: -39.5,12.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 1060 components: - type: Transform pos: -37.5,9.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 1061 components: - type: Transform pos: -41.5,8.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 1078 components: - type: Transform pos: -56.5,-7.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 1080 components: - type: Transform pos: -50.5,-7.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 1082 components: - type: Transform pos: -57.5,-10.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 1111 components: - type: Transform pos: -58.5,16.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 1112 components: - type: Transform pos: -58.5,17.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 1113 components: - type: Transform pos: -58.5,18.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 1114 components: - type: Transform pos: -58.5,19.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 1116 components: - type: Transform pos: -59.5,20.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 1117 components: - type: Transform pos: -60.5,20.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 1118 components: - type: Transform pos: -61.5,20.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 1119 components: - type: Transform pos: -62.5,20.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 1120 components: - type: Transform pos: -59.5,16.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 1121 components: - type: Transform pos: -61.5,16.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 1122 components: - type: Transform pos: -62.5,16.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 1123 components: - type: Transform pos: -58.5,12.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 1124 components: - type: Transform pos: -59.5,12.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 1125 components: - type: Transform pos: -60.5,12.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 1126 components: - type: Transform pos: -61.5,12.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 1127 components: - type: Transform pos: -62.5,12.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 1128 components: - type: Transform pos: -58.5,14.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 1129 components: - type: Transform pos: -59.5,14.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 1130 components: - type: Transform pos: -61.5,14.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 1131 components: - type: Transform pos: -62.5,14.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 1132 components: - type: Transform pos: -58.5,24.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 1133 components: - type: Transform pos: -59.5,24.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 1134 components: - type: Transform pos: -61.5,24.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 1135 components: - type: Transform pos: -62.5,24.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 1136 components: - type: Transform pos: -62.5,22.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 1137 components: - type: Transform pos: -61.5,22.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 1138 components: - type: Transform pos: -59.5,22.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 1139 components: - type: Transform pos: -58.5,22.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 1145 components: - type: Transform pos: -64.5,14.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 1148 components: - type: Transform pos: -64.5,22.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 1206 components: - type: Transform pos: -58.5,20.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 1291 components: - type: Transform pos: -60.5,5.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 1305 components: - type: Transform pos: -54.5,-7.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 1322 components: - type: Transform pos: -63.5,20.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 1326 components: - type: Transform pos: -47.5,-13.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 1327 components: - type: Transform pos: -47.5,-15.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 1329 components: - type: Transform pos: -47.5,-11.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 1374 components: - type: Transform pos: -40.5,32.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 1375 components: - type: Transform pos: -40.5,31.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 1377 components: - type: Transform pos: -40.5,30.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 1430 components: - type: Transform pos: -42.5,34.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 1489 components: - type: Transform pos: -52.5,34.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 1491 components: - type: Transform pos: -50.5,34.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 1492 components: - type: Transform pos: -48.5,34.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 1549 components: - type: Transform pos: -57.5,34.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 1550 components: - type: Transform pos: -56.5,34.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 1551 components: - type: Transform pos: -55.5,34.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 1553 components: - type: Transform pos: -59.5,28.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 1554 components: - type: Transform pos: -60.5,28.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 1555 components: - type: Transform pos: -61.5,28.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 1559 components: - type: Transform pos: 12.5,36.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 1565 components: - type: Transform pos: 11.5,37.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 1667 components: - type: Transform pos: -40.5,38.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 1668 components: - type: Transform pos: -43.5,38.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 1669 components: - type: Transform pos: -42.5,38.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 1670 components: - type: Transform pos: -44.5,38.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 1671 components: - type: Transform pos: -39.5,38.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 1672 components: - type: Transform pos: -38.5,38.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 1693 components: - type: Transform pos: -35.5,38.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 1694 components: - type: Transform pos: -35.5,41.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 1729 components: - type: Transform pos: -29.5,42.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 1730 components: - type: Transform pos: -29.5,44.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 1758 components: - type: Transform pos: -46.5,-0.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 1772 components: - type: Transform pos: 3.5,38.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 1776 components: - type: Transform pos: -31.5,45.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 1777 components: - type: Transform pos: -33.5,45.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 1790 components: - type: Transform pos: -27.5,48.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 1791 components: - type: Transform pos: -27.5,52.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 1808 components: - type: Transform pos: -20.5,48.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 1809 components: - type: Transform pos: -20.5,50.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 1810 components: - type: Transform pos: -20.5,49.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 1814 components: - type: Transform pos: -20.5,52.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 1815 components: - type: Transform pos: -20.5,51.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 1834 components: - type: Transform pos: -38.5,45.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 1835 components: - type: Transform pos: -36.5,46.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 1836 components: - type: Transform pos: -36.5,48.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 1837 components: - type: Transform pos: -40.5,45.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 1838 components: - type: Transform pos: -41.5,45.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 1840 components: - type: Transform pos: -43.5,45.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 1841 components: - type: Transform pos: -44.5,45.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 1842 components: - type: Transform pos: -45.5,46.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 1843 components: - type: Transform pos: -45.5,48.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 1879 components: - type: Transform pos: -34.5,55.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 1922 components: - type: Transform pos: -26.5,59.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 1925 components: - type: Transform pos: -26.5,58.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 1928 components: - type: Transform pos: -63.5,24.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 1931 components: - type: Transform pos: -63.5,16.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 1941 components: - type: Transform pos: 6.5,37.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 1954 components: - type: Transform pos: 6.5,36.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 1964 components: - type: Transform pos: 35.5,36.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 1967 components: - type: Transform pos: 36.5,36.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 2044 components: - type: Transform pos: -28.5,61.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 2045 components: - type: Transform pos: -29.5,61.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 2046 components: - type: Transform pos: -30.5,61.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 2049 components: - type: Transform pos: -34.5,61.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 2050 components: - type: Transform pos: -33.5,61.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 2051 components: - type: Transform pos: -32.5,61.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 2066 components: - type: Transform pos: -36.5,58.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 2201 components: - type: Transform pos: -49.5,47.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 2267 components: - type: Transform pos: -47.5,70.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 2269 components: - type: Transform pos: -45.5,70.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 2314 components: - type: Transform pos: -55.5,-10.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 2344 components: - type: Transform pos: -45.5,42.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 2588 components: - type: Transform pos: -26.5,57.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 2724 components: - type: Transform pos: -45.5,44.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 3168 components: - type: Transform pos: -63.5,12.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 3186 components: - type: Transform pos: -48.5,-10.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 3199 components: - type: Transform pos: -47.5,4.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 3513 components: - type: Transform pos: -50.5,4.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 3514 components: - type: Transform pos: -49.5,4.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 4406 components: - type: Transform pos: -6.5,-49.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 4410 components: - type: Transform pos: -34.5,-24.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 4491 components: - type: Transform pos: -49.5,70.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 4695 components: - type: Transform pos: -47.5,45.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 4824 components: - type: Transform pos: 41.5,22.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 4847 components: - type: Transform pos: -11.5,28.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 4848 components: - type: Transform pos: -10.5,28.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 4849 components: - type: Transform pos: -9.5,28.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 4850 components: - type: Transform pos: -8.5,28.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 4851 components: - type: Transform pos: -7.5,28.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 5071 components: - type: Transform pos: -18.5,45.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 5072 components: - type: Transform pos: -19.5,45.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 5073 components: - type: Transform pos: -20.5,45.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 5080 components: - type: Transform pos: -21.5,45.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 5248 components: - type: Transform pos: 2.5,-21.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 5250 components: - type: Transform pos: -56.5,-10.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 5277 components: - type: Transform pos: -6.5,30.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 5283 components: - type: Transform pos: -6.5,37.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 5295 components: - type: Transform pos: -11.5,37.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 5303 components: - type: Transform pos: -7.5,37.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 5304 components: - type: Transform pos: -12.5,37.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 5307 components: - type: Transform pos: -8.5,38.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 5308 components: - type: Transform pos: -11.5,38.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 5310 components: - type: Transform pos: -10.5,38.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 5312 components: - type: Transform pos: -7.5,38.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 5326 components: - type: Transform pos: -12.5,30.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 5372 components: - type: Transform pos: 3.5,30.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 5373 components: - type: Transform pos: 0.5,30.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 5375 components: - type: Transform pos: 0.5,28.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 5376 components: - type: Transform pos: 1.5,28.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 5377 components: - type: Transform pos: 2.5,28.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 5378 components: - type: Transform pos: 3.5,28.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 5395 components: - type: Transform pos: 0.5,38.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 5423 components: - type: Transform pos: 12.5,29.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 5424 components: - type: Transform pos: 12.5,30.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 5425 components: - type: Transform pos: 12.5,33.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 5426 components: - type: Transform pos: 12.5,34.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 5430 components: - type: Transform pos: -57.5,-7.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 5433 components: - type: Transform pos: -49.5,-7.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 5434 components: - type: Transform pos: -55.5,-7.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 5436 components: - type: Transform pos: -61.5,-9.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 5437 components: - type: Transform pos: -61.5,-8.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 5438 components: - type: Transform pos: 13.5,39.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 5439 components: - type: Transform pos: 3.5,39.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 5440 components: - type: Transform pos: 12.5,37.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 5442 components: - type: Transform pos: 5.5,37.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 5466 components: - type: Transform pos: 11.5,46.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 5476 components: - type: Transform pos: 9.5,46.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 5488 components: - type: Transform pos: 7.5,37.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 5491 components: - type: Transform pos: -54.5,-10.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 5758 components: - type: Transform pos: -15.5,43.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 5759 components: - type: Transform pos: -14.5,44.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 5760 components: - type: Transform pos: -13.5,46.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 5761 components: - type: Transform pos: -13.5,47.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 5762 components: - type: Transform pos: -12.5,47.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 5763 components: - type: Transform pos: -10.5,47.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 5764 components: - type: Transform pos: -9.5,47.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 5765 components: - type: Transform pos: -8.5,47.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 5766 components: - type: Transform pos: -6.5,47.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 5767 components: - type: Transform pos: -5.5,47.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 5768 components: - type: Transform pos: -5.5,46.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 5769 components: - type: Transform pos: -4.5,44.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 5770 components: - type: Transform pos: -3.5,43.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 5853 components: - type: Transform pos: -36.5,60.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 6290 components: - type: Transform pos: 13.5,28.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 6291 components: - type: Transform pos: 14.5,28.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 6306 components: - type: Transform pos: 15.5,33.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 6307 components: - type: Transform pos: 15.5,34.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 6308 components: - type: Transform pos: 15.5,36.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 6309 components: - type: Transform pos: 15.5,37.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 6310 components: - type: Transform pos: 15.5,39.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 6311 components: - type: Transform pos: 15.5,40.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 6360 components: - type: Transform pos: 24.5,43.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 6363 components: - type: Transform pos: 26.5,43.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 6523 components: - type: Transform pos: 17.5,24.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 6525 components: - type: Transform pos: 19.5,24.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 6553 components: - type: Transform pos: 11.5,21.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 6554 components: - type: Transform pos: 11.5,22.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 6555 components: - type: Transform pos: 12.5,19.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 6556 components: - type: Transform pos: 14.5,19.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 6557 components: - type: Transform pos: 15.5,20.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 6558 components: - type: Transform pos: 15.5,22.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 6577 components: - type: Transform pos: 11.5,18.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 6578 components: - type: Transform pos: 11.5,14.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 6627 components: - type: Transform pos: -32.5,-24.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 6641 components: - type: Transform pos: -10.5,-6.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 6643 components: - type: Transform pos: -9.5,-5.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 6644 components: - type: Transform pos: -5.5,-5.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 6645 components: - type: Transform pos: -7.5,-5.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 6741 components: - type: Transform pos: -17.5,-3.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 6742 components: - type: Transform pos: -19.5,-3.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 6743 components: - type: Transform pos: -15.5,-2.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 6744 components: - type: Transform pos: -15.5,-1.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 6745 components: - type: Transform pos: -15.5,-0.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 6774 components: - type: Transform pos: -14.5,-7.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 6775 components: - type: Transform pos: -15.5,-7.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 6776 components: - type: Transform pos: -13.5,-6.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 6809 components: - type: Transform pos: -16.5,-11.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 6810 components: - type: Transform pos: -26.5,-11.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 6887 components: - type: Transform pos: -28.5,0.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 6972 components: - type: Transform pos: -12.5,-17.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 6981 components: - type: Transform pos: -33.5,-27.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 6987 components: - type: Transform pos: -32.5,-27.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 7018 components: - type: Transform pos: -14.5,-17.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 7210 components: - type: Transform pos: -34.5,-27.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 7240 components: - type: Transform pos: -14.5,-3.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 7380 components: - type: Transform pos: -31.5,-18.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 7381 components: - type: Transform pos: -31.5,-16.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 7420 components: - type: Transform pos: -22.5,-13.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 7421 components: - type: Transform pos: -20.5,-13.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 7450 components: - type: Transform pos: -63.5,42.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 7529 components: - type: Transform pos: -30.5,-14.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 7537 components: - type: Transform pos: -28.5,-14.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 7822 components: - type: Transform pos: -30.5,-8.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 7828 components: - type: Transform pos: -33.5,-24.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 7889 components: - type: Transform pos: -14.5,-13.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 7912 components: - type: Transform pos: 15.5,12.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 7996 components: - type: Transform pos: -12.5,-13.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 8044 components: - type: Transform pos: -24.5,-19.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 8048 components: - type: Transform pos: -26.5,-19.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 8062 components: - type: Transform pos: -25.5,-19.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 8064 components: - type: Transform pos: -28.5,-8.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 8193 components: - type: Transform pos: 38.5,16.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 8273 components: - type: Transform pos: -48.5,-7.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 8314 components: - type: Transform pos: -65.5,42.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 8377 components: - type: Transform pos: -0.5,-24.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 8378 components: - type: Transform pos: 4.5,-23.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 8381 components: - type: Transform pos: -0.5,-23.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 8382 components: - type: Transform pos: 4.5,-24.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 8385 components: - type: Transform pos: 4.5,-25.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 8390 components: - type: Transform pos: 0.5,-21.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 8391 components: - type: Transform pos: -0.5,-22.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 8395 components: - type: Transform pos: -0.5,-25.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 8398 components: - type: Transform pos: 3.5,-26.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 8401 components: - type: Transform pos: 2.5,-26.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 8409 components: - type: Transform pos: 15.5,-16.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 8410 components: - type: Transform pos: 15.5,-14.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 8411 components: - type: Transform pos: 16.5,-12.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 8420 components: - type: Transform pos: 17.5,-16.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 8421 components: - type: Transform pos: 17.5,-14.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 8436 components: - type: Transform pos: 5.5,-22.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 8437 components: - type: Transform pos: 7.5,-22.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 8457 components: - type: Transform pos: 15.5,-0.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 8462 components: - type: Transform pos: 18.5,-7.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 8463 components: - type: Transform pos: 18.5,-5.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 8488 components: - type: Transform pos: 22.5,1.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 8491 components: - type: Transform pos: 19.5,-0.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 8492 components: - type: Transform pos: 21.5,-0.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 8516 components: - type: Transform pos: 5.5,-30.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 8517 components: - type: Transform pos: 7.5,-30.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 8545 components: - type: Transform pos: 18.5,-37.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 8546 components: - type: Transform pos: 22.5,-36.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 8548 components: - type: Transform pos: 20.5,-37.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 8549 components: - type: Transform pos: 22.5,-37.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 8550 components: - type: Transform pos: 21.5,-37.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 8551 components: - type: Transform pos: 22.5,-35.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 8552 components: - type: Transform pos: 22.5,-34.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 8553 components: - type: Transform pos: 22.5,-33.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 8554 components: - type: Transform pos: 22.5,-32.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 8555 components: - type: Transform pos: 22.5,-31.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 8556 components: - type: Transform pos: 22.5,-30.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 8557 components: - type: Transform pos: 22.5,-29.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 8558 components: - type: Transform pos: 22.5,-28.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 8559 components: - type: Transform pos: 22.5,-27.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 8560 components: - type: Transform pos: 22.5,-26.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 8561 components: - type: Transform pos: 22.5,-25.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 8562 components: - type: Transform pos: 22.5,-24.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 8563 components: - type: Transform pos: 22.5,-23.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 8564 components: - type: Transform pos: 22.5,-22.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 8565 components: - type: Transform pos: 22.5,-21.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 8567 components: - type: Transform pos: 8.5,-36.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 8601 components: - type: Transform pos: 5.5,-37.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 8605 components: - type: Transform pos: 1.5,-26.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 8829 components: - type: Transform pos: -63.5,22.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 8838 components: - type: Transform pos: -27.5,-21.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 8933 components: - type: Transform pos: 15.5,-35.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 8980 components: - type: Transform pos: 14.5,-35.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 8982 components: - type: Transform pos: 7.5,-37.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 8996 components: - type: Transform pos: 17.5,-37.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 9004 components: - type: Transform pos: -3.5,-55.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 9005 components: - type: Transform pos: -4.5,-55.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 9012 components: - type: Transform pos: 6.5,-37.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 9042 components: - type: Transform pos: -55.5,5.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 9043 components: - type: Transform pos: -50.5,-10.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 9092 components: - type: Transform pos: 23.5,-14.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 9104 components: - type: Transform pos: 5.5,-49.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 9120 components: - type: Transform pos: -64.5,42.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 9156 components: - type: Transform pos: -1.5,-31.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 9158 components: - type: Transform pos: -3.5,-31.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 9234 components: - type: Transform pos: 1.5,-55.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 9277 components: - type: Transform pos: -1.5,-36.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 9279 components: - type: Transform pos: -3.5,-36.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 9280 components: - type: Transform pos: -0.5,-34.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 9281 components: - type: Transform pos: -0.5,-32.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 9289 components: - type: Transform pos: 3.5,-55.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 9316 components: - type: Transform pos: 13.5,-35.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 9320 components: - type: Transform pos: 16.5,-36.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 9321 components: - type: Transform pos: -6.5,-37.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 9322 components: - type: Transform pos: -8.5,-37.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 9361 components: - type: Transform pos: -49.5,-10.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 9495 components: - type: Transform pos: -16.5,-45.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 9513 components: - type: Transform pos: 5.5,-51.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 9577 components: - type: Transform pos: -6.5,-51.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 9597 components: - type: Transform pos: -37.5,-36.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 9598 components: - type: Transform pos: -38.5,-36.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 9664 components: - type: Transform pos: 4.5,37.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 9681 components: - type: Transform pos: -0.5,-55.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 9691 components: - type: Transform pos: 5.5,-50.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 9702 components: - type: Transform pos: -18.5,-45.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 9706 components: - type: Transform pos: 13.5,37.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 9718 components: - type: Transform pos: 13.5,38.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 9723 components: - type: Transform pos: -63.5,14.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 9801 components: - type: Transform pos: -57.5,5.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 9815 components: - type: Transform pos: -1.5,-42.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 9820 components: - type: Transform pos: 2.5,-42.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 9848 components: - type: Transform pos: -27.5,-17.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 9857 components: - type: Transform pos: -32.5,-5.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 9858 components: - type: Transform pos: -32.5,-7.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 9966 components: - type: Transform pos: -2.5,-55.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 10044 components: - type: Transform pos: 2.5,-55.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 10053 components: - type: Transform pos: -15.5,-57.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 10054 components: - type: Transform pos: -17.5,-57.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 10058 components: - type: Transform pos: -16.5,-57.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 10059 components: - type: Transform pos: -19.5,-57.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 10088 components: - type: Transform pos: -14.5,-57.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 10089 components: - type: Transform pos: 0.5,-26.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 10094 components: - type: Transform pos: -18.5,-57.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 10098 components: - type: Transform pos: 4.5,-40.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 10099 components: - type: Transform pos: 4.5,-38.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 10124 components: - type: Transform pos: -14.5,-31.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 10139 components: - type: Transform pos: -20.5,-57.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 10150 components: - type: Transform pos: -49.5,49.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 10152 components: - type: Transform pos: -14.5,-39.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 10185 components: - type: Transform pos: -14.5,-28.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 10395 components: - type: Transform pos: 23.5,-16.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 10558 components: - type: Transform pos: 10.5,-35.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 10559 components: - type: Transform pos: 12.5,-35.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 10623 components: - type: Transform pos: -14.5,-29.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 10654 components: - type: Transform pos: -35.5,-25.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 10656 components: - type: Transform pos: 16.5,-19.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 10743 components: - type: Transform pos: 3.5,-21.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 11073 components: - type: Transform pos: -9.5,-45.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 11076 components: - type: Transform pos: -16.5,-49.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 11091 components: - type: Transform pos: -9.5,-43.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 11106 components: - type: Transform pos: -12.5,-32.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 11125 components: - type: Transform pos: -18.5,-49.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 11139 components: - type: Transform pos: -7.5,-42.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 11140 components: - type: Transform pos: -5.5,-42.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 11164 components: - type: Transform pos: 16.5,-17.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 11270 components: - type: Transform pos: -11.5,-32.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 11288 components: - type: Transform pos: -6.5,-50.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 11308 components: - type: Transform pos: -14.5,-44.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 11438 components: - type: Transform pos: -64.5,16.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 11448 components: - type: Transform pos: -53.5,37.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 11450 components: - type: Transform pos: -53.5,35.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 11602 components: - type: Transform pos: 24.5,-0.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 11603 components: - type: Transform pos: 25.5,-0.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 11604 components: - type: Transform pos: 26.5,-0.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 11653 components: - type: Transform pos: -39.5,-34.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 11657 components: - type: Transform pos: 26.5,-12.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 11671 components: - type: Transform pos: 30.5,-12.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 11679 components: - type: Transform pos: 33.5,-15.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 11692 components: - type: Transform pos: 25.5,-8.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 11700 components: - type: Transform pos: 18.5,-2.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 11760 components: - type: Transform pos: 1.5,-21.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 11782 components: - type: Transform pos: 33.5,-12.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 11867 components: - type: Transform pos: 36.5,-4.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 12019 components: - type: Transform pos: 37.5,-4.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 12030 components: - type: Transform pos: 38.5,-4.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 12104 components: - type: Transform pos: 28.5,-12.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 12656 components: - type: Transform pos: 15.5,10.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 12695 components: - type: Transform pos: 30.5,15.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 12711 components: - type: Transform pos: 33.5,13.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 12712 components: - type: Transform pos: 31.5,13.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 12729 components: - type: Transform pos: -64.5,24.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 12730 components: - type: Transform pos: -64.5,20.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 12803 components: - type: Transform pos: -39.5,-32.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 12804 components: - type: Transform pos: -39.5,-33.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 12807 components: - type: Transform pos: 27.5,17.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 12837 components: - type: Transform pos: -64.5,-66.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 12857 components: - type: Transform pos: 47.5,27.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 12975 components: - type: Transform pos: 30.5,14.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 13361 components: - type: Transform pos: 29.5,17.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 13379 components: - type: Transform pos: 24.5,15.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 13420 components: - type: Transform pos: 11.5,62.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 13421 components: - type: Transform pos: 10.5,53.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 13422 components: - type: Transform pos: 10.5,59.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 13451 components: - type: Transform pos: 22.5,52.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 13452 components: - type: Transform pos: 22.5,54.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 13454 components: - type: Transform pos: 21.5,47.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 13455 components: - type: Transform pos: 21.5,48.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 13456 components: - type: Transform pos: 21.5,49.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 13474 components: - type: Transform pos: 10.5,57.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 13475 components: - type: Transform pos: 10.5,61.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 13479 components: - type: Transform pos: 28.5,52.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 13481 components: - type: Transform pos: 20.5,60.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 13482 components: - type: Transform pos: 28.5,54.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 13483 components: - type: Transform pos: 30.5,54.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 13484 components: - type: Transform pos: 29.5,50.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 13485 components: - type: Transform pos: 29.5,48.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 13486 components: - type: Transform pos: 29.5,49.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 13488 components: - type: Transform pos: 31.5,48.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 13489 components: - type: Transform pos: 31.5,49.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 13490 components: - type: Transform pos: 31.5,50.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 13510 components: - type: Transform pos: 36.5,46.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 13511 components: - type: Transform pos: 35.5,46.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 13512 components: - type: Transform pos: 39.5,46.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 13513 components: - type: Transform pos: 38.5,46.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 13541 components: - type: Transform pos: 48.5,43.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 13550 components: - type: Transform pos: 47.5,38.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 13551 components: - type: Transform pos: 47.5,37.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 13552 components: - type: Transform pos: 47.5,36.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 13553 components: - type: Transform pos: 47.5,35.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 13554 components: - type: Transform pos: 44.5,39.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 13555 components: - type: Transform pos: 44.5,37.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 13581 components: - type: Transform pos: 34.5,37.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 13582 components: - type: Transform pos: 34.5,39.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 13612 components: - type: Transform pos: 45.5,11.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 13615 components: - type: Transform pos: 51.5,25.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 13616 components: - type: Transform pos: 52.5,25.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 13619 components: - type: Transform pos: 54.5,23.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 13622 components: - type: Transform pos: 54.5,21.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 13652 components: - type: Transform pos: 36.5,24.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 13653 components: - type: Transform pos: 36.5,22.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 13654 components: - type: Transform pos: 36.5,23.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 13661 components: - type: Transform pos: 41.5,23.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 13664 components: - type: Transform pos: 14.5,63.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 13669 components: - type: Transform pos: 41.5,24.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 13712 components: - type: Transform pos: 20.5,59.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 13713 components: - type: Transform pos: 10.5,55.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 13984 components: - type: Transform pos: -6.5,-42.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 14338 components: - type: Transform pos: 28.5,12.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 14339 components: - type: Transform pos: 26.5,12.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 14354 components: - type: Transform pos: 27.5,12.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 14515 components: - type: Transform pos: 49.5,24.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 14723 components: - type: Transform pos: 17.5,63.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 14729 components: - type: Transform pos: 40.5,49.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 14735 components: - type: Transform pos: 15.5,63.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 14798 components: - type: Transform pos: 16.5,63.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 14849 components: - type: Transform pos: 30.5,40.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 14915 components: - type: Transform pos: -22.5,-45.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 15160 components: - type: Transform pos: 40.5,50.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 15241 components: - type: Transform pos: 43.5,50.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 15243 components: - type: Transform pos: 40.5,47.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 15245 components: - type: Transform pos: 41.5,50.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 15328 components: - type: Transform pos: 52.5,29.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 15329 components: - type: Transform pos: 52.5,31.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 15330 components: - type: Transform pos: 54.5,29.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 15331 components: - type: Transform pos: 54.5,31.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 15332 components: - type: Transform pos: 53.5,29.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 15333 components: - type: Transform pos: 53.5,31.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 15759 components: - type: Transform pos: 45.5,5.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 15820 components: - type: Transform pos: 45.5,8.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 16095 components: - type: Transform pos: 24.5,-12.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 16123 components: - type: Transform pos: 23.5,-8.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 16252 components: - type: Transform pos: -68.5,42.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 16254 components: - type: Transform pos: -67.5,42.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 16256 components: - type: Transform pos: -66.5,42.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 16257 components: - type: Transform pos: -66.5,44.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 16258 components: - type: Transform pos: -68.5,44.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 16736 components: - type: Transform pos: -58.5,36.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 16789 components: - type: Transform pos: -56.5,48.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 16803 components: - type: Transform pos: -62.5,-66.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 17039 components: - type: Transform pos: -58.5,48.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 17040 components: - type: Transform pos: -56.5,47.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 17057 components: - type: Transform pos: -58.5,47.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 17075 components: - type: Transform pos: 11.5,-35.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 17076 components: - type: Transform pos: 9.5,-35.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 17098 components: - type: Transform pos: -57.5,53.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 17102 components: - type: Transform pos: -55.5,53.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 17120 components: - type: Transform pos: -47.5,-17.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 17122 components: - type: Transform pos: -47.5,-19.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 17125 components: - type: Transform pos: -49.5,-21.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 17128 components: - type: Transform pos: -56.5,-20.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 17129 components: - type: Transform pos: -57.5,-20.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 17130 components: - type: Transform pos: -58.5,-20.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 17131 components: - type: Transform pos: -60.5,-19.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 17132 components: - type: Transform pos: -61.5,-19.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 17133 components: - type: Transform pos: -62.5,-19.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 17134 components: - type: Transform pos: -64.5,-20.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 17135 components: - type: Transform pos: -64.5,-18.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 17136 components: - type: Transform pos: -62.5,-20.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 17137 components: - type: Transform pos: -62.5,-18.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 17144 components: - type: Transform pos: -48.5,-21.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 17160 components: - type: Transform pos: -65.5,-24.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 17161 components: - type: Transform pos: -66.5,-24.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 17162 components: - type: Transform pos: -66.5,-25.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 17163 components: - type: Transform pos: -67.5,-25.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 17164 components: - type: Transform pos: -67.5,-26.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 17165 components: - type: Transform pos: -67.5,-27.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 17166 components: - type: Transform pos: -67.5,-28.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 17167 components: - type: Transform pos: -67.5,-29.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 17168 components: - type: Transform pos: -68.5,-29.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 17169 components: - type: Transform pos: -68.5,-30.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 17170 components: - type: Transform pos: -69.5,-30.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 17171 components: - type: Transform pos: -69.5,-31.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 17172 components: - type: Transform pos: -69.5,-32.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 17173 components: - type: Transform pos: -70.5,-32.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 17174 components: - type: Transform pos: -70.5,-33.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 17175 components: - type: Transform pos: -71.5,-33.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 17176 components: - type: Transform pos: -71.5,-34.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 17177 components: - type: Transform pos: -73.5,-35.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 17178 components: - type: Transform pos: -73.5,-34.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 17179 components: - type: Transform pos: -72.5,-34.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 17180 components: - type: Transform pos: -74.5,-34.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 17181 components: - type: Transform pos: -75.5,-34.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 17182 components: - type: Transform pos: -48.5,-48.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 17183 components: - type: Transform pos: -48.5,-47.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 17184 components: - type: Transform pos: -48.5,-46.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 17185 components: - type: Transform pos: -48.5,-45.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 17186 components: - type: Transform pos: -48.5,-44.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 17187 components: - type: Transform pos: -48.5,-43.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 17188 components: - type: Transform pos: -48.5,-42.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 17189 components: - type: Transform pos: -48.5,-41.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 17190 components: - type: Transform pos: -48.5,-40.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 17191 components: - type: Transform pos: -49.5,-40.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 17192 components: - type: Transform pos: -50.5,-40.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 17193 components: - type: Transform pos: -52.5,-40.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 17194 components: - type: Transform pos: -50.5,-38.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 17195 components: - type: Transform pos: -51.5,-38.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 17196 components: - type: Transform pos: -51.5,-37.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 17197 components: - type: Transform pos: -51.5,-36.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 17198 components: - type: Transform pos: -51.5,-35.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 17199 components: - type: Transform pos: -52.5,-35.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 17200 components: - type: Transform pos: -52.5,-34.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 17201 components: - type: Transform pos: -52.5,-33.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 17202 components: - type: Transform pos: -53.5,-33.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 17203 components: - type: Transform pos: -53.5,-32.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 17204 components: - type: Transform pos: -54.5,-32.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 17205 components: - type: Transform pos: -54.5,-31.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 17206 components: - type: Transform pos: -54.5,-30.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 17207 components: - type: Transform pos: -55.5,-30.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 17208 components: - type: Transform pos: -55.5,-29.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 17209 components: - type: Transform pos: -56.5,-29.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 17210 components: - type: Transform pos: -56.5,-28.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 17211 components: - type: Transform pos: -56.5,-27.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 17212 components: - type: Transform pos: -56.5,-26.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 17213 components: - type: Transform pos: -50.5,-21.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 17214 components: - type: Transform pos: -51.5,-21.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 17215 components: - type: Transform pos: -52.5,-21.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 17216 components: - type: Transform pos: -53.5,-21.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 17217 components: - type: Transform pos: -54.5,-21.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 17218 components: - type: Transform pos: -54.5,-25.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 17219 components: - type: Transform pos: -53.5,-25.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 17220 components: - type: Transform pos: -52.5,-25.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 17221 components: - type: Transform pos: -51.5,-25.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 17222 components: - type: Transform pos: -50.5,-25.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 17223 components: - type: Transform pos: -49.5,-25.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 17224 components: - type: Transform pos: -48.5,-25.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 17344 components: - type: Transform pos: -48.5,-49.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 17354 components: - type: Transform pos: -52.5,-45.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 17375 components: - type: Transform pos: -70.5,-46.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 17376 components: - type: Transform pos: -71.5,-46.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 17377 components: - type: Transform pos: -72.5,-46.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 17378 components: - type: Transform pos: -73.5,-46.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 17379 components: - type: Transform pos: -73.5,-44.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 17380 components: - type: Transform pos: -71.5,-44.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 17381 components: - type: Transform pos: -70.5,-44.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 17382 components: - type: Transform pos: -72.5,-44.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 17574 components: - type: Transform pos: -83.5,-42.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 17575 components: - type: Transform pos: -85.5,-45.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 17576 components: - type: Transform pos: -83.5,-48.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 17577 components: - type: Transform pos: -79.5,-37.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 17593 components: - type: Transform pos: -3.5,-44.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 18006 components: - type: Transform pos: -35.5,-38.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 18007 components: - type: Transform pos: -36.5,-38.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 18013 components: - type: Transform pos: -37.5,-38.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 18014 components: - type: Transform pos: -35.5,-40.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 18015 components: - type: Transform pos: -37.5,-40.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 18017 components: - type: Transform pos: -36.5,-40.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 18068 components: - type: Transform pos: -36.5,-36.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 18137 components: - type: Transform pos: -82.5,-61.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 18138 components: - type: Transform pos: -83.5,-61.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 18139 components: - type: Transform pos: -84.5,-61.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 18140 components: - type: Transform pos: -85.5,-61.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 18141 components: - type: Transform pos: -85.5,-59.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 18142 components: - type: Transform pos: -76.5,-67.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 18143 components: - type: Transform pos: -76.5,-66.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 18144 components: - type: Transform pos: -77.5,-66.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 18145 components: - type: Transform pos: -78.5,-66.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 18146 components: - type: Transform pos: -78.5,-65.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 18147 components: - type: Transform pos: -73.5,-67.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 18148 components: - type: Transform pos: -73.5,-66.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 18149 components: - type: Transform pos: -72.5,-66.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 18150 components: - type: Transform pos: -71.5,-66.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 18151 components: - type: Transform pos: -71.5,-65.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 18152 components: - type: Transform pos: -75.5,-67.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 18153 components: - type: Transform pos: -74.5,-67.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 18343 components: - type: Transform pos: -52.5,-38.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 18372 components: - type: Transform pos: -63.5,-66.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 18763 components: - type: Transform pos: -85.5,-46.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 18764 components: - type: Transform pos: -85.5,-44.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 19066 components: - type: Transform pos: -51.5,-40.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 19373 components: - type: Transform pos: -24.5,-45.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 19632 components: - type: Transform pos: -23.5,-34.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 19633 components: - type: Transform pos: -22.5,-34.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 19634 components: - type: Transform pos: -26.5,-34.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 19635 components: - type: Transform pos: -25.5,-34.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 19877 components: - type: Transform pos: 4.5,69.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 19878 components: - type: Transform pos: 4.5,70.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 19879 components: - type: Transform pos: 4.5,71.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 19903 components: - type: Transform pos: -5.5,69.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 19904 components: - type: Transform pos: -5.5,70.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 19905 components: - type: Transform pos: -5.5,71.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 19906 components: - type: Transform pos: -4.5,62.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 19907 components: - type: Transform pos: 3.5,62.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 19932 components: - type: Transform pos: -1.5,69.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 19933 components: - type: Transform pos: -1.5,70.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 19934 components: - type: Transform pos: -1.5,71.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 19935 components: - type: Transform pos: 0.5,69.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 19936 components: - type: Transform pos: 0.5,70.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 19937 components: - type: Transform pos: 0.5,71.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 19972 components: - type: Transform pos: -2.5,76.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 19973 components: - type: Transform pos: -1.5,76.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 19974 components: - type: Transform pos: 0.5,76.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 19975 components: - type: Transform pos: 1.5,76.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 20098 components: - type: Transform pos: -35.5,-26.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 20276 components: - type: Transform pos: -31.5,-26.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 20376 components: - type: Transform pos: -37.5,61.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 20443 components: - type: Transform pos: -45.5,-28.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 20712 components: - type: Transform pos: 0.5,37.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 20971 components: - type: Transform pos: 7.5,22.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 20976 components: - type: Transform pos: 7.5,21.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 21052 components: - type: Transform pos: -33.5,-45.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 21055 components: - type: Transform pos: -38.5,-47.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 21056 components: - type: Transform pos: -38.5,-48.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 21057 components: - type: Transform pos: -37.5,-48.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 21058 components: - type: Transform pos: -36.5,-48.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 21059 components: - type: Transform pos: -35.5,-48.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 21063 components: - type: Transform pos: -37.5,-44.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 21064 components: - type: Transform pos: -36.5,-44.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 21065 components: - type: Transform pos: -35.5,-44.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 21068 components: - type: Transform pos: -33.5,-47.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 21075 components: - type: Transform pos: -31.5,-48.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 21120 components: - type: Transform pos: -58.5,53.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 21121 components: - type: Transform pos: -59.5,53.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 21122 components: - type: Transform pos: -59.5,52.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 21123 components: - type: Transform pos: -59.5,51.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 21209 components: - type: Transform pos: -31.5,-25.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 21509 components: - type: Transform pos: 37.5,36.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 21510 components: - type: Transform pos: 38.5,36.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 21512 components: - type: Transform pos: 40.5,36.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 21513 components: - type: Transform pos: 41.5,36.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 21514 components: - type: Transform pos: 42.5,36.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 21515 components: - type: Transform pos: 43.5,36.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 21591 components: - type: Transform pos: -43.5,-28.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 21593 components: - type: Transform pos: -41.5,-28.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 22136 components: - type: Transform pos: 32.5,40.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 22366 components: - type: Transform pos: 18.5,-40.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 22367 components: - type: Transform pos: 19.5,-40.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 22368 components: - type: Transform pos: 20.5,-40.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 22369 components: - type: Transform pos: 20.5,-38.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 22370 components: - type: Transform pos: 18.5,-38.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 22878 components: - type: Transform pos: -6.5,-48.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 22886 components: - type: Transform pos: -4.5,-46.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 22887 components: - type: Transform pos: -5.5,-46.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 22976 components: - type: Transform pos: -6.5,-46.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 22977 components: - type: Transform pos: -7.5,-46.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 22978 components: - type: Transform pos: -8.5,-46.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 23198 components: - type: Transform pos: 44.5,47.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - proto: ResearchAndDevelopmentServer entities: - uid: 12746 @@ -121691,61 +122041,85 @@ entities: - type: Transform pos: -33.5,8.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 543 components: - type: Transform pos: -33.5,7.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 13728 components: - type: Transform pos: 23.5,52.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 13729 components: - type: Transform pos: 24.5,52.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 13730 components: - type: Transform pos: 25.5,52.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 13731 components: - type: Transform pos: 26.5,52.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 13732 components: - type: Transform pos: 27.5,52.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 13733 components: - type: Transform pos: 27.5,54.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 13734 components: - type: Transform pos: 26.5,54.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 13735 components: - type: Transform pos: 25.5,54.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 13736 components: - type: Transform pos: 24.5,54.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 13737 components: - type: Transform pos: 23.5,54.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - proto: ShuttersNormalOpen entities: - uid: 390 @@ -121754,365 +122128,503 @@ entities: rot: 1.5707963267948966 rad pos: -10.5,11.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 391 components: - type: Transform rot: 1.5707963267948966 rad pos: -10.5,9.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 392 components: - type: Transform rot: 1.5707963267948966 rad pos: -10.5,10.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 393 components: - type: Transform rot: 1.5707963267948966 rad pos: -10.5,7.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 394 components: - type: Transform rot: 1.5707963267948966 rad pos: -10.5,8.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 395 components: - type: Transform rot: 1.5707963267948966 rad pos: -10.5,6.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 899 components: - type: Transform pos: 29.5,17.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 3176 components: - type: Transform pos: -42.5,38.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 3177 components: - type: Transform pos: -40.5,38.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 3184 components: - type: Transform pos: -44.5,38.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 3185 components: - type: Transform pos: -43.5,38.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 4438 components: - type: Transform pos: 27.5,17.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 5698 components: - type: Transform pos: -39.5,38.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 5700 components: - type: Transform pos: -38.5,38.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 5738 components: - type: Transform pos: -14.5,36.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 5741 components: - type: Transform pos: -15.5,36.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 6785 components: - type: Transform pos: -8.5,-5.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 6797 components: - type: Transform pos: -9.5,-5.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 6871 components: - type: Transform pos: -23.5,-17.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 6882 components: - type: Transform pos: -28.5,0.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 7164 components: - type: Transform pos: -27.5,-21.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 7829 components: - type: Transform pos: -23.5,-21.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 7876 components: - type: Transform pos: -27.5,-17.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 7971 components: - type: Transform pos: -7.5,-5.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 7972 components: - type: Transform pos: -5.5,-5.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 7991 components: - type: Transform pos: -6.5,-5.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 7992 components: - type: Transform pos: -10.5,-6.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 9238 components: - type: Transform pos: -4.5,12.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 9239 components: - type: Transform pos: -3.5,12.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 11002 components: - type: Transform rot: 1.5707963267948966 rad pos: -40.5,32.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 11006 components: - type: Transform pos: -42.5,34.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 11010 components: - type: Transform rot: 1.5707963267948966 rad pos: -40.5,31.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 11716 components: - type: Transform pos: 26.5,-0.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 11822 components: - type: Transform pos: 24.5,-0.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 11823 components: - type: Transform pos: 25.5,-0.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 12625 components: - type: Transform pos: -5.5,12.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 12810 components: - type: Transform pos: 24.5,15.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 14340 components: - type: Transform pos: 27.5,12.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 14352 components: - type: Transform pos: 28.5,12.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 14355 components: - type: Transform pos: 26.5,12.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 14530 components: - type: Transform rot: -1.5707963267948966 rad pos: 15.5,39.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 14844 components: - type: Transform rot: -1.5707963267948966 rad pos: 15.5,34.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 15075 components: - type: Transform rot: -1.5707963267948966 rad pos: 15.5,40.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 15213 components: - type: Transform rot: -1.5707963267948966 rad pos: 15.5,36.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 15986 components: - type: Transform rot: -1.5707963267948966 rad pos: 15.5,33.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 15987 components: - type: Transform rot: -1.5707963267948966 rad pos: 15.5,37.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 19418 components: - type: Transform pos: 4.5,5.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 19419 components: - type: Transform pos: 5.5,5.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 19795 components: - type: Transform rot: 1.5707963267948966 rad pos: 7.5,8.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 20051 components: - type: Transform pos: -1.5,5.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 20052 components: - type: Transform pos: 1.5,5.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 20053 components: - type: Transform pos: 0.5,5.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 20054 components: - type: Transform rot: 1.5707963267948966 rad pos: 7.5,7.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 20061 components: - type: Transform pos: -9.5,5.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 20062 components: - type: Transform pos: -3.5,5.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 20063 components: - type: Transform pos: -5.5,5.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 20064 components: - type: Transform pos: -2.5,5.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 20065 components: - type: Transform rot: -1.5707963267948966 rad pos: 16.5,16.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 20066 components: - type: Transform rot: -1.5707963267948966 rad pos: 16.5,14.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 20394 components: - type: Transform pos: -3.5,36.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 20395 components: - type: Transform pos: -4.5,36.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 20445 components: - type: Transform pos: -2.5,12.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 20447 components: - type: Transform pos: 0.5,12.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 20448 components: - type: Transform pos: -0.5,12.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 20449 components: - type: Transform pos: -1.5,12.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 21333 components: - type: Transform rot: 1.5707963267948966 rad pos: -40.5,30.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 21722 components: - type: Transform pos: -0.5,28.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 21758 components: - type: Transform rot: -1.5707963267948966 rad pos: 16.5,15.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 22424 components: - type: Transform pos: 4.5,28.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - proto: ShuttersRadiationOpen entities: - uid: 9408 @@ -122120,56 +122632,78 @@ entities: - type: Transform pos: -16.5,-49.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 9410 components: - type: Transform pos: -18.5,-45.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 9411 components: - type: Transform pos: -16.5,-45.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 9415 components: - type: Transform pos: -18.5,-49.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 23813 components: - type: Transform pos: -20.5,-57.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 23814 components: - type: Transform pos: -19.5,-57.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 23815 components: - type: Transform pos: -18.5,-57.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 23816 components: - type: Transform pos: -17.5,-57.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 23817 components: - type: Transform pos: -16.5,-57.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 23818 components: - type: Transform pos: -15.5,-57.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 23819 components: - type: Transform pos: -14.5,-57.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - proto: SignAi entities: - uid: 20306 @@ -130380,11 +130914,6 @@ entities: - type: Transform pos: 11.5,34.5 parent: 30 - - uid: 6453 - components: - - type: Transform - pos: 21.5,44.5 - parent: 30 - uid: 6568 components: - type: Transform @@ -132715,96 +133244,134 @@ entities: - type: Transform pos: -30.5,24.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 290 components: - type: Transform pos: -32.5,24.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 291 components: - type: Transform pos: -33.5,23.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 292 components: - type: Transform pos: -33.5,21.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 7235 components: - type: Transform pos: -19.5,-14.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 7590 components: - type: Transform pos: -15.5,-16.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 7597 components: - type: Transform pos: -19.5,-16.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 7877 components: - type: Transform pos: -15.5,-14.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 17391 components: - type: Transform pos: -67.5,-41.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 18697 components: - type: Transform pos: -47.5,-24.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 18698 components: - type: Transform pos: -55.5,-22.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 18699 components: - type: Transform pos: -55.5,-24.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 18700 components: - type: Transform pos: -47.5,-22.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 19566 components: - type: Transform pos: 9.5,-12.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 19567 components: - type: Transform pos: 8.5,-12.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 21470 components: - type: Transform pos: 7.5,-12.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 21471 components: - type: Transform pos: 10.5,-15.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 21472 components: - type: Transform pos: 10.5,-14.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 22704 components: - type: Transform pos: -10.5,15.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - proto: ToiletDirtyWater entities: - uid: 754 @@ -133869,6 +134436,13 @@ entities: - type: Transform pos: -28.5,13.5 parent: 30 +- proto: VendingMachinePride + entities: + - uid: 6453 + components: + - type: Transform + pos: 21.5,44.5 + parent: 30 - proto: VendingMachineRoboDrobe entities: - uid: 12778 @@ -134028,13 +134602,6 @@ entities: - type: Transform pos: -14.5,-22.5 parent: 30 -- proto: VendingMachineWinter - entities: - - uid: 10040 - components: - - type: Transform - pos: 20.5,44.5 - parent: 30 - proto: VendingMachineYouTool entities: - uid: 1606 @@ -148515,18 +149082,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 3.4430928 - - 12.952587 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 3.4430928 + Nitrogen: 12.952587 - proto: WardrobeCargoFilled entities: - uid: 6362 @@ -148540,18 +149097,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 3.4430928 - - 12.952587 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 3.4430928 + Nitrogen: 12.952587 - uid: 22106 components: - type: Transform @@ -148563,18 +149110,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 3.4430928 - - 12.952587 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 3.4430928 + Nitrogen: 12.952587 - proto: WardrobeChapel entities: - uid: 17952 @@ -148588,18 +149125,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 3.4430928 - - 12.952587 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 3.4430928 + Nitrogen: 12.952587 - uid: 17953 components: - type: Transform @@ -148611,18 +149138,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 3.4430928 - - 12.952587 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 3.4430928 + Nitrogen: 12.952587 - proto: WardrobeChapelFilled entities: - uid: 17622 @@ -148636,18 +149153,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 3.4430928 - - 12.952587 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 3.4430928 + Nitrogen: 12.952587 - proto: WardrobeEngineeringFilled entities: - uid: 7112 @@ -148673,18 +149180,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 3.4430928 - - 12.952587 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 3.4430928 + Nitrogen: 12.952587 - type: ContainerContainer containers: entity_storage: !type:Container @@ -148726,18 +149223,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 3.4430928 - - 12.952587 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 3.4430928 + Nitrogen: 12.952587 - proto: WardrobePrisonFilled entities: - uid: 2734 @@ -148763,18 +149250,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 3.4430928 - - 12.952587 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 3.4430928 + Nitrogen: 12.952587 - proto: WardrobeYellowFilled entities: - uid: 16043 @@ -148788,18 +149265,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 3.4430928 - - 12.952587 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 3.4430928 + Nitrogen: 12.952587 - proto: WarningCO2 entities: - uid: 8666 @@ -149300,58 +149767,78 @@ entities: - type: Transform pos: -20.5,8.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 1918 components: - type: Transform rot: 3.141592653589793 rad pos: -50.5,61.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 2598 components: - type: Transform rot: 3.141592653589793 rad pos: -40.5,41.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 4813 components: - type: Transform rot: 3.141592653589793 rad pos: -42.5,41.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 5066 components: - type: Transform rot: -1.5707963267948966 rad pos: -19.5,34.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 5410 components: - type: Transform pos: 4.5,30.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 11038 components: - type: Transform pos: 4.5,-4.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 20484 components: - type: Transform rot: 1.5707963267948966 rad pos: -35.5,-35.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 20959 components: - type: Transform rot: 3.141592653589793 rad pos: 18.5,24.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 22199 components: - type: Transform rot: -1.5707963267948966 rad pos: -74.5,-55.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - proto: WindoorCargoLocked entities: - uid: 402 @@ -149360,12 +149847,16 @@ entities: rot: -1.5707963267948966 rad pos: 19.5,-3.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 21788 components: - type: Transform rot: 3.141592653589793 rad pos: 31.5,-8.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - proto: WindoorHydroponicsLocked entities: - uid: 322 @@ -149374,6 +149865,8 @@ entities: rot: 3.141592653589793 rad pos: -20.5,8.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - proto: WindoorKitchenHydroponicsLocked entities: - uid: 20701 @@ -149382,6 +149875,8 @@ entities: rot: 1.5707963267948966 rad pos: -18.5,10.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - proto: WindoorSecure entities: - uid: 15983 @@ -149390,12 +149885,16 @@ entities: rot: 3.141592653589793 rad pos: 52.5,20.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 15984 components: - type: Transform rot: 3.141592653589793 rad pos: 51.5,20.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - proto: WindoorSecureArmoryLocked entities: - uid: 1753 @@ -149403,27 +149902,37 @@ entities: - type: Transform pos: -40.5,56.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 2006 components: - type: Transform pos: -38.5,56.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 2216 components: - type: Transform pos: -39.5,56.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 3180 components: - type: Transform pos: -41.5,56.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 4450 components: - type: Transform rot: 3.141592653589793 rad pos: -42.5,45.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - proto: WindoorSecureAtmosphericsLocked entities: - uid: 8394 @@ -149432,18 +149941,24 @@ entities: rot: -1.5707963267948966 rad pos: 4.5,-27.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 11232 components: - type: Transform rot: 1.5707963267948966 rad pos: 3.5,-29.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 12003 components: - type: Transform rot: -1.5707963267948966 rad pos: 4.5,-28.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - proto: WindoorSecureBrigLocked entities: - uid: 2013 @@ -149451,6 +149966,8 @@ entities: - type: Transform pos: -42.5,45.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - proto: WindoorSecureCargoLocked entities: - uid: 8464 @@ -149459,18 +149976,24 @@ entities: rot: 1.5707963267948966 rad pos: 18.5,-1.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 8471 components: - type: Transform rot: 3.141592653589793 rad pos: 16.5,-0.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 8472 components: - type: Transform rot: 3.141592653589793 rad pos: 17.5,-0.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - proto: WindoorSecureChemistryLocked entities: - uid: 6674 @@ -149478,23 +150001,31 @@ entities: - type: Transform pos: -6.5,-5.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 6677 components: - type: Transform pos: -8.5,-5.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 9054 components: - type: Transform rot: 1.5707963267948966 rad pos: -10.5,-9.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 9672 components: - type: Transform rot: 1.5707963267948966 rad pos: -10.5,-8.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - proto: WindoorSecureCommandLocked entities: - uid: 20088 @@ -149503,48 +150034,64 @@ entities: rot: 3.141592653589793 rad pos: 10.5,42.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 20649 components: - type: Transform rot: 3.141592653589793 rad pos: -13.5,16.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 21680 components: - type: Transform rot: 1.5707963267948966 rad pos: -3.5,62.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 21681 components: - type: Transform rot: 1.5707963267948966 rad pos: -3.5,63.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 21682 components: - type: Transform rot: 1.5707963267948966 rad pos: -3.5,64.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 21750 components: - type: Transform rot: 3.141592653589793 rad pos: 4.5,20.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 22223 components: - type: Transform rot: -1.5707963267948966 rad pos: 1.5,75.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 22232 components: - type: Transform rot: 1.5707963267948966 rad pos: -2.5,75.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - proto: WindoorSecureEngineeringLocked entities: - uid: 21294 @@ -149552,6 +150099,8 @@ entities: - type: Transform pos: -24.5,42.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - proto: WindoorSecureHeadOfPersonnelLocked entities: - uid: 5409 @@ -149560,6 +150109,8 @@ entities: rot: 3.141592653589793 rad pos: 4.5,30.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - proto: WindoorSecureMedicalLocked entities: - uid: 7093 @@ -149568,12 +150119,16 @@ entities: rot: -1.5707963267948966 rad pos: -13.5,-5.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 8047 components: - type: Transform rot: -1.5707963267948966 rad pos: -13.5,-4.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - proto: WindoorSecureScienceLocked entities: - uid: 6488 @@ -149581,39 +150136,53 @@ entities: - type: Transform pos: 18.5,24.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 20067 components: - type: Transform rot: -1.5707963267948966 rad pos: 16.5,16.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 20069 components: - type: Transform rot: -1.5707963267948966 rad pos: 16.5,14.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 21708 components: - type: Transform pos: 31.5,18.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 21711 components: - type: Transform pos: 33.5,18.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 21759 components: - type: Transform rot: -1.5707963267948966 rad pos: 16.5,15.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 22235 components: - type: Transform pos: 32.5,18.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - proto: WindoorSecureSecurityLocked entities: - uid: 1052 @@ -149621,42 +150190,56 @@ entities: - type: Transform pos: -40.5,12.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 1059 components: - type: Transform rot: 3.141592653589793 rad pos: -40.5,8.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 1746 components: - type: Transform rot: 1.5707963267948966 rad pos: -33.5,40.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 1747 components: - type: Transform rot: 1.5707963267948966 rad pos: -33.5,39.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 1748 components: - type: Transform rot: 3.141592653589793 rad pos: -32.5,38.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 1749 components: - type: Transform rot: 3.141592653589793 rad pos: -31.5,38.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 1750 components: - type: Transform rot: 3.141592653589793 rad pos: -30.5,38.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - proto: WindoorSecureServiceLocked entities: - uid: 11458 @@ -149665,6 +150248,8 @@ entities: rot: 1.5707963267948966 rad pos: -65.5,-62.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - proto: Window entities: - uid: 5 @@ -149672,411 +150257,575 @@ entities: - type: Transform pos: -0.5,-1.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 6 components: - type: Transform pos: -0.5,-4.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 7 components: - type: Transform pos: -4.5,-4.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 8 components: - type: Transform pos: -4.5,-1.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 57 components: - type: Transform pos: 1.5,-0.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 58 components: - type: Transform pos: 0.5,-0.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 59 components: - type: Transform pos: -5.5,-0.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 60 components: - type: Transform pos: -6.5,-0.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 61 components: - type: Transform pos: -7.5,0.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 62 components: - type: Transform pos: -11.5,0.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 63 components: - type: Transform pos: -5.5,5.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 65 components: - type: Transform pos: -9.5,5.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 80 components: - type: Transform pos: 2.5,0.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 81 components: - type: Transform pos: 6.5,0.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 84 components: - type: Transform pos: 0.5,5.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 85 components: - type: Transform pos: 1.5,5.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 293 components: - type: Transform pos: -28.5,24.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 294 components: - type: Transform pos: -27.5,24.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 296 components: - type: Transform pos: -7.5,24.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 297 components: - type: Transform pos: -8.5,24.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 298 components: - type: Transform pos: -9.5,24.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 299 components: - type: Transform pos: -10.5,24.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 300 components: - type: Transform pos: -11.5,24.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 1000 components: - type: Transform pos: -43.5,0.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 1001 components: - type: Transform pos: -43.5,3.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 1002 components: - type: Transform pos: -37.5,0.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 1003 components: - type: Transform pos: -37.5,3.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 1004 components: - type: Transform pos: -39.5,4.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 1005 components: - type: Transform pos: -41.5,4.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 1267 components: - type: Transform pos: -54.5,22.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 1271 components: - type: Transform pos: -52.5,22.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 1272 components: - type: Transform pos: -52.5,14.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 1273 components: - type: Transform pos: -54.5,14.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 1354 components: - type: Transform pos: -32.5,28.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 1365 components: - type: Transform pos: -38.5,34.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 1367 components: - type: Transform pos: -37.5,32.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 1368 components: - type: Transform pos: -37.5,31.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 1369 components: - type: Transform pos: -37.5,30.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 1595 components: - type: Transform pos: -30.5,28.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 1596 components: - type: Transform pos: -26.5,28.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 1597 components: - type: Transform pos: -24.5,28.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 2239 components: - type: Transform pos: -50.5,57.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 2348 components: - type: Transform pos: -50.5,51.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 2366 components: - type: Transform pos: -50.5,55.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 4576 components: - type: Transform pos: -50.5,53.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 5017 components: - type: Transform pos: -23.5,36.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 6542 components: - type: Transform pos: 28.5,34.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 6543 components: - type: Transform pos: 28.5,35.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 6544 components: - type: Transform pos: 28.5,39.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 6545 components: - type: Transform pos: 28.5,38.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 6625 components: - type: Transform pos: 8.5,0.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 6628 components: - type: Transform pos: -13.5,0.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 8329 components: - type: Transform pos: 10.5,-1.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 8334 components: - type: Transform pos: 10.5,-6.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 9837 components: - type: Transform pos: -39.5,34.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 13579 components: - type: Transform pos: 44.5,35.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 17716 components: - type: Transform pos: -69.5,-52.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 17721 components: - type: Transform pos: -65.5,-58.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 17722 components: - type: Transform pos: -64.5,-58.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 17727 components: - type: Transform pos: -66.5,-57.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 17733 components: - type: Transform pos: -69.5,-56.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 17735 components: - type: Transform pos: -66.5,-56.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 17739 components: - type: Transform pos: -66.5,-52.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 17758 components: - type: Transform pos: -66.5,-51.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 17759 components: - type: Transform pos: -65.5,-50.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 17760 components: - type: Transform pos: -64.5,-50.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 17761 components: - type: Transform pos: -62.5,-50.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 17762 components: - type: Transform pos: -61.5,-50.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 17763 components: - type: Transform pos: -59.5,-50.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 17764 components: - type: Transform pos: -58.5,-50.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 17765 components: - type: Transform pos: -57.5,-51.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 17766 components: - type: Transform pos: -57.5,-52.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 17767 components: - type: Transform pos: -57.5,-56.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 17768 components: - type: Transform pos: -57.5,-57.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 17769 components: - type: Transform pos: -58.5,-58.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 17770 components: - type: Transform pos: -59.5,-58.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 17771 components: - type: Transform pos: -61.5,-58.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 17772 components: - type: Transform pos: -62.5,-58.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 20964 components: - type: Transform pos: 44.5,33.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 21473 components: - type: Transform pos: 9.5,-17.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 21474 components: - type: Transform pos: 7.5,-17.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 21511 components: - type: Transform pos: 34.5,34.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - proto: WindowDirectional entities: - uid: 7523 @@ -150085,68 +150834,92 @@ entities: rot: -1.5707963267948966 rad pos: 6.5,-6.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 7524 components: - type: Transform pos: 3.5,-4.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 8307 components: - type: Transform pos: 5.5,-4.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 10093 components: - type: Transform rot: -1.5707963267948966 rad pos: 6.5,-7.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 11346 components: - type: Transform rot: -1.5707963267948966 rad pos: 6.5,-11.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 11411 components: - type: Transform rot: 1.5707963267948966 rad pos: 2.5,-8.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 11413 components: - type: Transform pos: 2.5,-8.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 13610 components: - type: Transform rot: 3.141592653589793 rad pos: 44.5,11.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 13633 components: - type: Transform pos: 44.5,15.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 22190 components: - type: Transform rot: -1.5707963267948966 rad pos: 34.5,30.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 22191 components: - type: Transform rot: 1.5707963267948966 rad pos: 33.5,30.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 22200 components: - type: Transform rot: 3.141592653589793 rad pos: -74.5,-55.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - proto: WindowFrostedDirectional entities: - uid: 207 @@ -150155,30 +150928,40 @@ entities: rot: -1.5707963267948966 rad pos: -5.5,23.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 4609 components: - type: Transform rot: -1.5707963267948966 rad pos: -49.5,61.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 4610 components: - type: Transform rot: -1.5707963267948966 rad pos: -49.5,60.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 4611 components: - type: Transform rot: -1.5707963267948966 rad pos: -49.5,59.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 4671 components: - type: Transform rot: -1.5707963267948966 rad pos: -49.5,58.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - proto: WindowReinforcedDirectional entities: - uid: 74 @@ -150186,396 +150969,532 @@ entities: - type: Transform pos: -26.5,4.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 75 components: - type: Transform pos: -28.5,4.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 76 components: - type: Transform pos: -27.5,4.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 519 components: - type: Transform pos: -54.5,17.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 1226 components: - type: Transform rot: 1.5707963267948966 rad pos: -52.5,19.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 1227 components: - type: Transform rot: 1.5707963267948966 rad pos: -52.5,18.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 1229 components: - type: Transform rot: 1.5707963267948966 rad pos: -52.5,17.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 1230 components: - type: Transform rot: -1.5707963267948966 rad pos: -54.5,19.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 1231 components: - type: Transform rot: -1.5707963267948966 rad pos: -54.5,18.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 1232 components: - type: Transform rot: -1.5707963267948966 rad pos: -54.5,17.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 1234 components: - type: Transform pos: -53.5,17.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 1235 components: - type: Transform pos: -52.5,17.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 1236 components: - type: Transform rot: 3.141592653589793 rad pos: -54.5,19.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 1237 components: - type: Transform rot: 3.141592653589793 rad pos: -53.5,19.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 1274 components: - type: Transform rot: 3.141592653589793 rad pos: -52.5,19.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 1911 components: - type: Transform rot: -1.5707963267948966 rad pos: -38.5,58.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 1953 components: - type: Transform rot: 1.5707963267948966 rad pos: -38.5,56.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 1977 components: - type: Transform rot: 3.141592653589793 rad pos: 43.5,40.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 1987 components: - type: Transform rot: -1.5707963267948966 rad pos: -41.5,56.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 2063 components: - type: Transform rot: -1.5707963267948966 rad pos: -38.5,60.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 2271 components: - type: Transform rot: 3.141592653589793 rad pos: -38.5,41.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 2672 components: - type: Transform rot: 3.141592653589793 rad pos: -41.5,41.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 2679 components: - type: Transform rot: 3.141592653589793 rad pos: -44.5,39.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 3525 components: - type: Transform rot: 3.141592653589793 rad pos: -44.5,41.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 4526 components: - type: Transform rot: 3.141592653589793 rad pos: -43.5,41.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 4612 components: - type: Transform rot: 3.141592653589793 rad pos: -50.5,67.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 4675 components: - type: Transform rot: 3.141592653589793 rad pos: -45.5,67.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 4688 components: - type: Transform rot: 3.141592653589793 rad pos: -49.5,67.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 4700 components: - type: Transform rot: 3.141592653589793 rad pos: -44.5,67.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 4814 components: - type: Transform rot: 3.141592653589793 rad pos: -39.5,41.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 5641 components: - type: Transform rot: -1.5707963267948966 rad pos: -17.5,43.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 5644 components: - type: Transform rot: -1.5707963267948966 rad pos: -17.5,42.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 5827 components: - type: Transform pos: -8.5,41.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 5828 components: - type: Transform pos: -9.5,41.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 5829 components: - type: Transform pos: -10.5,41.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 5834 components: - type: Transform rot: -1.5707963267948966 rad pos: -10.5,41.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 5835 components: - type: Transform rot: 3.141592653589793 rad pos: -10.5,41.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 5836 components: - type: Transform rot: 3.141592653589793 rad pos: -9.5,41.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 5837 components: - type: Transform rot: 3.141592653589793 rad pos: -8.5,41.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 5838 components: - type: Transform rot: 1.5707963267948966 rad pos: -8.5,41.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 7352 components: - type: Transform rot: 1.5707963267948966 rad pos: -19.5,-21.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 7476 components: - type: Transform rot: 1.5707963267948966 rad pos: -19.5,-22.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 7483 components: - type: Transform rot: -1.5707963267948966 rad pos: -19.5,-19.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 7558 components: - type: Transform rot: -1.5707963267948966 rad pos: -19.5,-21.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 7823 components: - type: Transform rot: 1.5707963267948966 rad pos: -19.5,-18.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 7980 components: - type: Transform rot: -1.5707963267948966 rad pos: -19.5,-18.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 7981 components: - type: Transform rot: 1.5707963267948966 rad pos: -19.5,-19.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 7982 components: - type: Transform rot: 3.141592653589793 rad pos: -19.5,-21.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 7990 components: - type: Transform rot: -1.5707963267948966 rad pos: -19.5,-22.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 7994 components: - type: Transform pos: -19.5,-19.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 8614 components: - type: Transform pos: -25.5,4.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 8615 components: - type: Transform pos: -24.5,4.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 9960 components: - type: Transform pos: -23.5,4.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 12728 components: - type: Transform rot: 3.141592653589793 rad pos: 20.5,19.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 12774 components: - type: Transform rot: -1.5707963267948966 rad pos: 24.5,9.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 12780 components: - type: Transform rot: -1.5707963267948966 rad pos: 24.5,11.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 12788 components: - type: Transform rot: 1.5707963267948966 rad pos: 20.5,18.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 12792 components: - type: Transform rot: 3.141592653589793 rad pos: 17.5,19.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 12795 components: - type: Transform rot: -1.5707963267948966 rad pos: 24.5,10.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 12881 components: - type: Transform rot: 1.5707963267948966 rad pos: 20.5,19.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 13577 components: - type: Transform rot: 1.5707963267948966 rad pos: 42.5,41.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 14356 components: - type: Transform rot: 3.141592653589793 rad pos: 52.5,23.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 15152 components: - type: Transform rot: -1.5707963267948966 rad pos: 14.5,8.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 15153 components: - type: Transform rot: 1.5707963267948966 rad pos: 16.5,8.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 15981 components: - type: Transform rot: 3.141592653589793 rad pos: 50.5,20.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 15982 components: - type: Transform rot: 3.141592653589793 rad pos: 53.5,20.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 16892 components: - type: Transform rot: 3.141592653589793 rad pos: -44.5,24.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 17675 components: - type: Transform rot: 1.5707963267948966 rad pos: -78.5,-38.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 18300 components: - type: Transform @@ -150674,341 +151593,459 @@ entities: - type: Transform pos: -69.5,-29.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 18312 components: - type: Transform rot: 1.5707963267948966 rad pos: -69.5,-29.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 18313 components: - type: Transform pos: -68.5,-28.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 18314 components: - type: Transform rot: 1.5707963267948966 rad pos: -68.5,-28.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 18315 components: - type: Transform rot: 1.5707963267948966 rad pos: -68.5,-27.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 18316 components: - type: Transform rot: 1.5707963267948966 rad pos: -68.5,-26.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 18317 components: - type: Transform rot: 1.5707963267948966 rad pos: -68.5,-25.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 18318 components: - type: Transform pos: -67.5,-24.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 18319 components: - type: Transform rot: 1.5707963267948966 rad pos: -67.5,-24.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 18320 components: - type: Transform pos: -66.5,-23.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 18321 components: - type: Transform pos: -65.5,-23.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 18322 components: - type: Transform rot: -1.5707963267948966 rad pos: -55.5,-26.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 18323 components: - type: Transform rot: -1.5707963267948966 rad pos: -55.5,-27.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 18324 components: - type: Transform rot: -1.5707963267948966 rad pos: -55.5,-28.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 18325 components: - type: Transform pos: -55.5,-28.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 18326 components: - type: Transform rot: -1.5707963267948966 rad pos: -54.5,-29.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 18327 components: - type: Transform pos: -54.5,-29.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 18328 components: - type: Transform pos: -53.5,-31.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 18329 components: - type: Transform rot: -1.5707963267948966 rad pos: -53.5,-31.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 18330 components: - type: Transform rot: -1.5707963267948966 rad pos: -53.5,-30.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 18331 components: - type: Transform rot: -1.5707963267948966 rad pos: -52.5,-32.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 18332 components: - type: Transform rot: -1.5707963267948966 rad pos: -51.5,-34.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 18333 components: - type: Transform rot: -1.5707963267948966 rad pos: -51.5,-33.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 18334 components: - type: Transform rot: -1.5707963267948966 rad pos: -50.5,-37.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 18335 components: - type: Transform rot: -1.5707963267948966 rad pos: -50.5,-36.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 18336 components: - type: Transform rot: -1.5707963267948966 rad pos: -50.5,-35.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 18337 components: - type: Transform pos: -51.5,-34.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 18338 components: - type: Transform pos: -52.5,-32.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 18339 components: - type: Transform pos: -50.5,-37.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 18341 components: - type: Transform rot: -1.5707963267948966 rad pos: -49.5,-38.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 18344 components: - type: Transform rot: -1.5707963267948966 rad pos: -47.5,-40.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 18345 components: - type: Transform rot: -1.5707963267948966 rad pos: -47.5,-49.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 18346 components: - type: Transform rot: -1.5707963267948966 rad pos: -47.5,-48.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 18347 components: - type: Transform rot: -1.5707963267948966 rad pos: -47.5,-47.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 18348 components: - type: Transform rot: -1.5707963267948966 rad pos: -47.5,-46.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 18349 components: - type: Transform rot: -1.5707963267948966 rad pos: -47.5,-45.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 18350 components: - type: Transform rot: -1.5707963267948966 rad pos: -47.5,-44.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 18351 components: - type: Transform rot: -1.5707963267948966 rad pos: -47.5,-43.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 18352 components: - type: Transform rot: -1.5707963267948966 rad pos: -47.5,-42.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 18353 components: - type: Transform rot: -1.5707963267948966 rad pos: -47.5,-41.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 20093 components: - type: Transform pos: 1.5,75.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 20138 components: - type: Transform rot: 3.141592653589793 rad pos: 9.5,42.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 20272 components: - type: Transform rot: 3.141592653589793 rad pos: 11.5,42.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 20278 components: - type: Transform rot: -1.5707963267948966 rad pos: 4.5,20.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 20477 components: - type: Transform rot: 3.141592653589793 rad pos: -38.5,-32.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 20478 components: - type: Transform rot: 3.141592653589793 rad pos: -37.5,-32.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 20479 components: - type: Transform rot: 3.141592653589793 rad pos: -36.5,-32.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 20480 components: - type: Transform rot: 3.141592653589793 rad pos: -35.5,-32.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 20481 components: - type: Transform rot: 1.5707963267948966 rad pos: -35.5,-32.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 20482 components: - type: Transform rot: 1.5707963267948966 rad pos: -35.5,-33.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 20483 components: - type: Transform rot: 1.5707963267948966 rad pos: -35.5,-34.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 20615 components: - type: Transform rot: -1.5707963267948966 rad pos: -23.5,41.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 20748 components: - type: Transform rot: -1.5707963267948966 rad pos: -17.5,44.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 20750 components: - type: Transform rot: 1.5707963267948966 rad pos: -18.5,44.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 21239 components: - type: Transform pos: -2.5,75.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 21745 components: - type: Transform rot: 1.5707963267948966 rad pos: 4.5,20.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 21746 components: - type: Transform pos: 4.5,20.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 22458 components: - type: Transform rot: 1.5707963267948966 rad pos: -18.5,43.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - uid: 22459 components: - type: Transform rot: 1.5707963267948966 rad pos: -18.5,42.5 parent: 30 + - type: DeltaPressure + gridUid: 30 - proto: Wirecutter entities: - uid: 21096 diff --git a/Resources/Prototypes/Entities/Clothing/OuterClothing/suits.yml b/Resources/Prototypes/Entities/Clothing/OuterClothing/suits.yml index 93a209c6be..068ed1a511 100644 --- a/Resources/Prototypes/Entities/Clothing/OuterClothing/suits.yml +++ b/Resources/Prototypes/Entities/Clothing/OuterClothing/suits.yml @@ -288,6 +288,8 @@ tags: - CorgiWearable - WhitelistChameleon + - type: AddAccentClothing + accent: BarkAccent - type: entity parent: ClothingOuterBase diff --git a/Resources/Prototypes/Entities/Effects/emp_effects.yml b/Resources/Prototypes/Entities/Effects/emp_effects.yml index d1096b85f5..6919f776f2 100644 --- a/Resources/Prototypes/Entities/Effects/emp_effects.yml +++ b/Resources/Prototypes/Entities/Effects/emp_effects.yml @@ -8,17 +8,14 @@ drawdepth: Effects noRot: true layers: - - shader: unshaded - map: ["enum.EffectLayers.Unshaded"] - sprite: Effects/emp.rsi - state: emp_pulse + - shader: unshaded + map: ["enum.EffectLayers.Unshaded"] + sprite: Effects/emp.rsi + state: emp_pulse - type: EffectVisuals - type: Tag tags: - - HideContextMenu - - type: EmitSoundOnSpawn - sound: - path: /Audio/Effects/Lightning/lightningbolt.ogg + - HideContextMenu - type: AnimationPlayer - type: entity @@ -31,12 +28,12 @@ drawdepth: Effects noRot: true layers: - - shader: unshaded - map: ["enum.EffectLayers.Unshaded"] - sprite: Effects/emp.rsi - state: emp_disable + - shader: unshaded + map: ["enum.EffectLayers.Unshaded"] + sprite: Effects/emp.rsi + state: emp_disable - type: EffectVisuals - type: Tag tags: - - HideContextMenu + - HideContextMenu - type: AnimationPlayer diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Projectiles/light_rifle.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Projectiles/light_rifle.yml index 43427c1dac..60640bdd2e 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Projectiles/light_rifle.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Projectiles/light_rifle.yml @@ -29,8 +29,8 @@ - type: Projectile damage: types: - Blunt: 3 - Heat: 16 + Piercing: 14 + Heat: 5 - type: entity id: BulletLightRifleUranium diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Projectiles/magnum.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Projectiles/magnum.yml index b4017fd550..124fa4a93e 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Projectiles/magnum.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Projectiles/magnum.yml @@ -29,8 +29,8 @@ - type: Projectile damage: types: - Blunt: 3 - Heat: 32 + Piercing: 26 + Heat: 9 - type: entity id: BulletMagnumAP diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Projectiles/pistol.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Projectiles/pistol.yml index 8d146939b7..53917035cb 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Projectiles/pistol.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Projectiles/pistol.yml @@ -29,8 +29,8 @@ - type: Projectile damage: types: - Blunt: 2 - Heat: 14 + Piercing: 12 + Heat: 4 - type: entity id: BulletPistolUranium diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Projectiles/rifle.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Projectiles/rifle.yml index 497ca9e2a3..84506148b4 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Projectiles/rifle.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Projectiles/rifle.yml @@ -29,8 +29,8 @@ - type: Projectile damage: types: - Blunt: 2 - Heat: 15 + Piercing: 12 + Heat: 5 - type: entity id: BulletRifleUranium diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Projectiles/shotgun.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Projectiles/shotgun.yml index e5120a746f..ebea6dde5e 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Projectiles/shotgun.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Projectiles/shotgun.yml @@ -68,8 +68,8 @@ - type: Projectile damage: types: - Blunt: 3 - Heat: 7 + Piercing: 7 + Heat: 3 - type: IgnitionSource ignited: true diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml index 6c39e112bd..2134ac0cbf 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml @@ -142,7 +142,8 @@ - type: Projectile damage: types: - Blunt: 14 + Piercing: 10 + Heat: 4 - type: PointLight enabled: true color: "#ff4300" diff --git a/Resources/Prototypes/Entities/Structures/Wallmounts/Signs/signs.yml b/Resources/Prototypes/Entities/Structures/Wallmounts/Signs/signs.yml index b77fbc3547..8798e920c7 100644 --- a/Resources/Prototypes/Entities/Structures/Wallmounts/Signs/signs.yml +++ b/Resources/Prototypes/Entities/Structures/Wallmounts/Signs/signs.yml @@ -104,7 +104,15 @@ description: A direction sign, pointing out which way evac is. components: - type: Sprite - state: direction_evac + layers: + - state: direction_evac + - state: direction_evac_glow + shader: unshaded + - state: direction_evac_glow + shader: shaded + #This is a neat trick I found to sort of "hack" an emissive map into ss14. Basically, the direction_evac_glow texture has an alpha channel. + #Alpha doesn't work for unshaded, but for *shaded* it does, and by putting a shaded texture infront of the unshaded, we can dim the unshaded texture, effectively allowing brightness control. + #I am re-using this from my high-vis vest PR, where I go further into detail, https://github.com/space-wizards/space-station-14/pull/37869 - type: entity parent: BaseSignDirectional @@ -288,6 +296,15 @@ - type: Sprite state: armory +- type: entity + parent: BaseSign + id: SignArrivals + name: arrivals sign + description: A sign indicating where the Arrivals shuttle will dock. + components: + - type: Sprite + state: arrivals + - type: entity parent: BaseSign id: SignToolStorage diff --git a/Resources/Prototypes/Recipes/Crafting/Graphs/improvised/makeshiftstunprod.yml b/Resources/Prototypes/Recipes/Crafting/Graphs/improvised/makeshiftstunprod.yml index b5dbdf032a..a82a44b00a 100644 --- a/Resources/Prototypes/Recipes/Crafting/Graphs/improvised/makeshiftstunprod.yml +++ b/Resources/Prototypes/Recipes/Crafting/Graphs/improvised/makeshiftstunprod.yml @@ -5,6 +5,10 @@ - node: start edges: - to: msstunprod + completed: + - !type:AdminLog + message: "Construction" + impact: High steps: - material: MetalRod amount: 1 diff --git a/Resources/Textures/Structures/Wallmounts/signs.rsi/arrivals.png b/Resources/Textures/Structures/Wallmounts/signs.rsi/arrivals.png new file mode 100644 index 0000000000..2a615548a7 Binary files /dev/null and b/Resources/Textures/Structures/Wallmounts/signs.rsi/arrivals.png differ diff --git a/Resources/Textures/Structures/Wallmounts/signs.rsi/direction_evac_glow.png b/Resources/Textures/Structures/Wallmounts/signs.rsi/direction_evac_glow.png new file mode 100644 index 0000000000..d82d60abdd Binary files /dev/null and b/Resources/Textures/Structures/Wallmounts/signs.rsi/direction_evac_glow.png differ diff --git a/Resources/Textures/Structures/Wallmounts/signs.rsi/meta.json b/Resources/Textures/Structures/Wallmounts/signs.rsi/meta.json index 9da6753c35..4833c7b814 100644 --- a/Resources/Textures/Structures/Wallmounts/signs.rsi/meta.json +++ b/Resources/Textures/Structures/Wallmounts/signs.rsi/meta.json @@ -5,7 +5,7 @@ "y": 32 }, "license": "CC-BY-SA-3.0", - "copyright": "Taken from https://github.com/discordia-space/CEV-Eris at commit 4e0bbe682d0a00192d24708fdb7031008aa03f18 and bee station at commit https://github.com/BeeStation/BeeStation-Hornet/commit/13dd5ac712385642574138f6d7b30eea7c2fab9c, Job signs by EmoGarbage404 (github) with inspiration from yogstation and tgstation, 'direction_exam' and 'direction_icu' made by rosieposieeee (github), 'direction_atmos' made by SlamBamActionman, 'vox' based on sprites taken from vgstation13 at https://github.com/vgstation-coders/vgstation13/blob/e7f005f8b8d3f7d89cbee3b87f76c23f9e951c27/icons/obj/decals.dmi, 'direction_pods' derived by WarPigeon from existing directional signs., 'detective' derived by Soupkilove from existing security sign", + "copyright": "Taken from https://github.com/discordia-space/CEV-Eris at commit 4e0bbe682d0a00192d24708fdb7031008aa03f18 and bee station at commit https://github.com/BeeStation/BeeStation-Hornet/commit/13dd5ac712385642574138f6d7b30eea7c2fab9c, Job signs by EmoGarbage404 (github) with inspiration from yogstation and tgstation, 'direction_exam' and 'direction_icu' made by rosieposieeee (github), 'direction_atmos' made by SlamBamActionman, 'vox' based on sprites taken from vgstation13 at https://github.com/vgstation-coders/vgstation13/blob/e7f005f8b8d3f7d89cbee3b87f76c23f9e951c27/icons/obj/decals.dmi, 'direction_pods' derived by WarPigeon from existing directional signs., 'detective' derived by Soupkilove from existing security sign, direction_evac_glow made by moomoobeef based on existing direction_evac, 'arrivals' made by SlamBamActionman", "states": [ { "name": "ai" @@ -28,6 +28,9 @@ { "name": "armory" }, + { + "name": "arrivals" + }, { "name": "barbershop" }, @@ -165,6 +168,10 @@ "name": "direction_evac", "directions": 4 }, + { + "name": "direction_evac_glow", + "directions": 4 + }, { "name": "direction_supply", "directions": 4 diff --git a/Resources/keybinds.yml b/Resources/keybinds.yml index 1d86e4c5e7..870c8e1435 100644 --- a/Resources/keybinds.yml +++ b/Resources/keybinds.yml @@ -255,6 +255,18 @@ binds: type: State key: E mod1: Shift +- function: SmartEquipPocket1 + type: State + key: F + mod1: Shift +- function: SmartEquipPocket2 + type: State + key: G + mod1: Shift +- function: SmartEquipSuitStorage + type: State + key: H + mod1: Shift - function: OpenBackpack type: State key: V