From 2f3db89ca264bc2d0a20717c5f7d372398350e05 Mon Sep 17 00:00:00 2001 From: Admiral-Obvious-001 <89495925+Admiral-Obvious-001@users.noreply.github.com> Date: Sun, 17 Aug 2025 12:42:19 -0700 Subject: [PATCH 001/143] Test First commit --- Content.Shared/Ninja/Components/StunProviderComponent.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Content.Shared/Ninja/Components/StunProviderComponent.cs b/Content.Shared/Ninja/Components/StunProviderComponent.cs index 2da094291d..9614383653 100644 --- a/Content.Shared/Ninja/Components/StunProviderComponent.cs +++ b/Content.Shared/Ninja/Components/StunProviderComponent.cs @@ -49,13 +49,13 @@ public sealed partial class StunProviderComponent : Component /// Time that someone is stunned for, stacks if done multiple times. /// [DataField] - public TimeSpan StunTime = TimeSpan.FromSeconds(5); + public TimeSpan StunTime = TimeSpan.FromSeconds(2); /// /// How long stunning is disabled after stunning something. /// [DataField] - public TimeSpan Cooldown = TimeSpan.FromSeconds(2); + public TimeSpan Cooldown = TimeSpan.FromSeconds(5); /// /// ID of the cooldown use delay. From 5e84fae7727604a1702902a1ad375868d248661a Mon Sep 17 00:00:00 2001 From: Admiral-Obvious-001 <89495925+Admiral-Obvious-001@users.noreply.github.com> Date: Sun, 17 Aug 2025 12:47:57 -0700 Subject: [PATCH 002/143] Commit 2 --- Content.Shared/Ninja/Components/StunProviderComponent.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Content.Shared/Ninja/Components/StunProviderComponent.cs b/Content.Shared/Ninja/Components/StunProviderComponent.cs index 9614383653..3e6bd2cbb1 100644 --- a/Content.Shared/Ninja/Components/StunProviderComponent.cs +++ b/Content.Shared/Ninja/Components/StunProviderComponent.cs @@ -49,13 +49,13 @@ public sealed partial class StunProviderComponent : Component /// Time that someone is stunned for, stacks if done multiple times. /// [DataField] - public TimeSpan StunTime = TimeSpan.FromSeconds(2); + public TimeSpan StunTime = TimeSpan.FromSeconds(5); /// /// How long stunning is disabled after stunning something. /// [DataField] - public TimeSpan Cooldown = TimeSpan.FromSeconds(5); + public TimeSpan Cooldown = TimeSpan.FromSeconds(10); /// /// ID of the cooldown use delay. From c6fc95e32bb17ee64c28bcb1beeb189523e76cb0 Mon Sep 17 00:00:00 2001 From: Admiral-Obvious-001 <89495925+Admiral-Obvious-001@users.noreply.github.com> Date: Sun, 17 Aug 2025 13:41:39 -0700 Subject: [PATCH 003/143] Addressed Requested Changes --- Content.Shared/Ninja/Components/StunProviderComponent.cs | 2 +- Resources/Prototypes/Entities/Clothing/Hands/gloves.yml | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/Content.Shared/Ninja/Components/StunProviderComponent.cs b/Content.Shared/Ninja/Components/StunProviderComponent.cs index 3e6bd2cbb1..2da094291d 100644 --- a/Content.Shared/Ninja/Components/StunProviderComponent.cs +++ b/Content.Shared/Ninja/Components/StunProviderComponent.cs @@ -55,7 +55,7 @@ public sealed partial class StunProviderComponent : Component /// How long stunning is disabled after stunning something. /// [DataField] - public TimeSpan Cooldown = TimeSpan.FromSeconds(10); + public TimeSpan Cooldown = TimeSpan.FromSeconds(2); /// /// ID of the cooldown use delay. diff --git a/Resources/Prototypes/Entities/Clothing/Hands/gloves.yml b/Resources/Prototypes/Entities/Clothing/Hands/gloves.yml index e17e2ba59d..273384a28a 100644 --- a/Resources/Prototypes/Entities/Clothing/Hands/gloves.yml +++ b/Resources/Prototypes/Entities/Clothing/Hands/gloves.yml @@ -241,6 +241,7 @@ - components: - type: BatteryDrainer - type: StunProvider + cooldown: 10 noPowerPopup: ninja-no-power whitelist: components: From 928e6c807903e511a1d20592226406a7e0dec69c Mon Sep 17 00:00:00 2001 From: Princess Cheeseballs <66055347+Princess-Cheeseballs@users.noreply.github.com> Date: Fri, 12 Sep 2025 14:49:12 -0700 Subject: [PATCH 004/143] Edible Sound Specifier Override (#40312) Co-authored-by: Princess Cheeseballs <66055347+Pronana@users.noreply.github.com> --- Content.Shared/Nutrition/Components/EdibleComponent.cs | 8 ++++++++ Content.Shared/Nutrition/EntitySystems/IngestionSystem.cs | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/Content.Shared/Nutrition/Components/EdibleComponent.cs b/Content.Shared/Nutrition/Components/EdibleComponent.cs index 4fcd9770eb..bff56984a1 100644 --- a/Content.Shared/Nutrition/Components/EdibleComponent.cs +++ b/Content.Shared/Nutrition/Components/EdibleComponent.cs @@ -2,6 +2,7 @@ using Content.Shared.FixedPoint; using Content.Shared.Nutrition.EntitySystems; using Content.Shared.Nutrition.Prototypes; +using Robust.Shared.Audio; using Robust.Shared.GameStates; using Robust.Shared.Prototypes; @@ -78,6 +79,13 @@ public sealed partial class EdibleComponent : Component [DataField] public bool RequireDead = true; + /// + /// An optional override for the sound made when consuming this item. + /// Useful for if an edible type doesn't justify a new prototype, like with plushies. + /// + [DataField] + public SoundSpecifier? UseSound; + /// /// Verb, icon, and sound data for our edible. /// diff --git a/Content.Shared/Nutrition/EntitySystems/IngestionSystem.cs b/Content.Shared/Nutrition/EntitySystems/IngestionSystem.cs index 470747fa3f..284bb866f7 100644 --- a/Content.Shared/Nutrition/EntitySystems/IngestionSystem.cs +++ b/Content.Shared/Nutrition/EntitySystems/IngestionSystem.cs @@ -449,7 +449,7 @@ public sealed partial class IngestionSystem : EntitySystem var edible = _proto.Index(entity.Comp.Edible); - _audio.PlayPredicted(edible.UseSound, args.Target, args.User); + _audio.PlayPredicted(entity.Comp.UseSound ?? edible.UseSound, args.Target, args.User); var flavors = _flavorProfile.GetLocalizedFlavorsMessage(entity.Owner, args.Target, args.Split); From 82e7cb020cfd65cad9ebf226b7a3b52897ba7ad4 Mon Sep 17 00:00:00 2001 From: slarticodefast <161409025+slarticodefast@users.noreply.github.com> Date: Sat, 13 Sep 2025 00:26:56 +0200 Subject: [PATCH 005/143] Delete DrinkComponent, migrate prototypes to EdibleComponent (#40308) --- .../Nutrition/EntitySystems/DrinkSystem.cs | 7 - .../Nutrition/Components/BadDrinkComponent.cs | 6 +- .../Nutrition/EntitySystems/DrinkSystem.cs | 63 ------ .../Nutrition/Components/DrinkComponent.cs | 41 ---- .../EntitySystems/IngestionSystem.Utensils.cs | 5 +- .../EntitySystems/IngestionSystem.cs | 16 +- .../EntitySystems/SharedDrinkSystem.cs | 197 ------------------ Resources/Maps/plasma.yml | 28 +-- .../Entities/Clothing/Head/misc.yml | 1 + .../Prototypes/Entities/Effects/puddle.yml | 1 + .../Consumable/Drinks/drinks_metamorphic.yml | 1 - .../Consumable/Food/Containers/bowl.yml | 1 + .../Consumable/Food/Containers/condiments.yml | 41 ++-- .../Objects/Consumable/Food/ingredients.yml | 8 +- .../Objects/Consumable/Food/produce.yml | 28 ++- .../Objects/Specific/Hydroponics/leaves.yml | 14 +- .../Objects/Specific/Janitorial/spray.yml | 10 +- .../Objects/Specific/chemical-containers.yml | 5 +- .../Objects/Specific/chemistry-bottles.yml | 6 +- .../Objects/Specific/chemistry-vials.yml | 5 +- .../Entities/Objects/Specific/chemistry.yml | 10 +- .../Entities/Objects/Tools/bucket.yml | 1 + .../Structures/Specific/Anomaly/anomalies.yml | 5 +- .../Structures/Specific/Janitor/janicart.yml | 10 +- Resources/Prototypes/XenoArch/effects.yml | 5 +- 25 files changed, 139 insertions(+), 376 deletions(-) delete mode 100644 Content.Client/Nutrition/EntitySystems/DrinkSystem.cs delete mode 100644 Content.Server/Nutrition/EntitySystems/DrinkSystem.cs delete mode 100644 Content.Shared/Nutrition/Components/DrinkComponent.cs delete mode 100644 Content.Shared/Nutrition/EntitySystems/SharedDrinkSystem.cs diff --git a/Content.Client/Nutrition/EntitySystems/DrinkSystem.cs b/Content.Client/Nutrition/EntitySystems/DrinkSystem.cs deleted file mode 100644 index 16dbecb793..0000000000 --- a/Content.Client/Nutrition/EntitySystems/DrinkSystem.cs +++ /dev/null @@ -1,7 +0,0 @@ -using Content.Shared.Nutrition.EntitySystems; - -namespace Content.Client.Nutrition.EntitySystems; - -public sealed class DrinkSystem : SharedDrinkSystem -{ -} diff --git a/Content.Server/Nutrition/Components/BadDrinkComponent.cs b/Content.Server/Nutrition/Components/BadDrinkComponent.cs index 5b9e5a6297..f114a104d0 100644 --- a/Content.Server/Nutrition/Components/BadDrinkComponent.cs +++ b/Content.Server/Nutrition/Components/BadDrinkComponent.cs @@ -6,7 +6,5 @@ namespace Content.Server.Nutrition.Components; /// This component prevents NPC mobs like mice or cows from wanting to drink something that shouldn't be drank from. /// Including but not limited to: puddles /// -[RegisterComponent, Access(typeof(DrinkSystem))] -public sealed partial class BadDrinkComponent : Component -{ -} +[RegisterComponent] +public sealed partial class BadDrinkComponent : Component; diff --git a/Content.Server/Nutrition/EntitySystems/DrinkSystem.cs b/Content.Server/Nutrition/EntitySystems/DrinkSystem.cs deleted file mode 100644 index 1677f1d822..0000000000 --- a/Content.Server/Nutrition/EntitySystems/DrinkSystem.cs +++ /dev/null @@ -1,63 +0,0 @@ -using Content.Shared.Chemistry.Components; -using Content.Shared.Chemistry.Components.SolutionManager; -using Content.Shared.Chemistry.EntitySystems; -using Content.Shared.Nutrition.Components; -using Content.Shared.Nutrition.EntitySystems; - - -namespace Content.Server.Nutrition.EntitySystems; - -public sealed class DrinkSystem : SharedDrinkSystem -{ - [Dependency] private readonly SharedAppearanceSystem _appearance = default!; - [Dependency] private readonly SharedSolutionContainerSystem _solutionContainer = default!; - - public override void Initialize() - { - base.Initialize(); - - // TODO add InteractNoHandEvent for entities like mice. - SubscribeLocalEvent(OnSolutionChange); - SubscribeLocalEvent(OnDrinkInit); - // run before inventory so for bucket it always tries to drink before equipping (when empty) - // run after openable so its always open -> drink - } - - private void OnDrinkInit(Entity entity, ref ComponentInit args) - { - if (TryComp(entity, out var existingDrainable)) - { - // Beakers have Drink component but they should use the existing Drainable - entity.Comp.Solution = existingDrainable.Solution; - } - else - { - _solutionContainer.EnsureSolution(entity.Owner, entity.Comp.Solution, out _); - } - - UpdateAppearance(entity, entity.Comp); - - if (TryComp(entity, out RefillableSolutionComponent? refillComp)) - refillComp.Solution = entity.Comp.Solution; - - if (TryComp(entity, out DrainableSolutionComponent? drainComp)) - drainComp.Solution = entity.Comp.Solution; - } - - private void OnSolutionChange(Entity entity, ref SolutionContainerChangedEvent args) - { - UpdateAppearance(entity, entity.Comp); - } - - public void UpdateAppearance(EntityUid uid, DrinkComponent component) - { - if (!TryComp(uid, out var appearance) || - !HasComp(uid)) - { - return; - } - - var drainAvailable = DrinkVolume(uid, component); - _appearance.SetData(uid, FoodVisuals.Visual, drainAvailable.Float(), appearance); - } -} diff --git a/Content.Shared/Nutrition/Components/DrinkComponent.cs b/Content.Shared/Nutrition/Components/DrinkComponent.cs deleted file mode 100644 index a4d1114379..0000000000 --- a/Content.Shared/Nutrition/Components/DrinkComponent.cs +++ /dev/null @@ -1,41 +0,0 @@ -using Content.Shared.Nutrition.EntitySystems; -using Content.Shared.FixedPoint; -using Robust.Shared.Audio; -using Robust.Shared.GameStates; - -namespace Content.Shared.Nutrition.Components; - -[Obsolete("Migration to Content.Shared.Nutrition.Components.EdibleComponent is required")] -[NetworkedComponent, AutoGenerateComponentState] -[RegisterComponent, Access(typeof(SharedDrinkSystem))] -public sealed partial class DrinkComponent : Component -{ - [DataField] - public string Solution = "drink"; - - [DataField, AutoNetworkedField] - public SoundSpecifier UseSound = new SoundPathSpecifier("/Audio/Items/drink.ogg"); - - [DataField, AutoNetworkedField] - public FixedPoint2 TransferAmount = FixedPoint2.New(5); - - /// - /// How long it takes to drink this yourself. - /// - [DataField, AutoNetworkedField] - public float Delay = 1; - - /// - /// If true, trying to drink when empty will not handle the event. - /// This means other systems such as equipping on use can run. - /// Example usecase is the bucket. - /// - [DataField] - public bool IgnoreEmpty; - - /// - /// This is how many seconds it takes to force feed someone this drink. - /// - [DataField, AutoNetworkedField] - public float ForceFeedDelay = 3; -} diff --git a/Content.Shared/Nutrition/EntitySystems/IngestionSystem.Utensils.cs b/Content.Shared/Nutrition/EntitySystems/IngestionSystem.Utensils.cs index 670fdc8dfb..dfdc03cfe6 100644 --- a/Content.Shared/Nutrition/EntitySystems/IngestionSystem.Utensils.cs +++ b/Content.Shared/Nutrition/EntitySystems/IngestionSystem.Utensils.cs @@ -45,7 +45,7 @@ public sealed partial class IngestionSystem //Prevents food usage with a wrong utensil if ((ev.Types & utensil.Comp.Types) == 0) { - _popup.PopupClient(Loc.GetString("ingestion-try-use-wrong-utensil", ("verb", GetEdibleVerb(target)),("food", target), ("utensil", utensil.Owner)), user, user); + _popup.PopupClient(Loc.GetString("ingestion-try-use-wrong-utensil", ("verb", GetEdibleVerb(target)), ("food", target), ("utensil", utensil.Owner)), user, user); return true; } @@ -66,14 +66,13 @@ public sealed partial class IngestionSystem return; // TODO: Once we have predicted randomness delete this for something sane... - var seed = SharedRandomExtensions.HashCodeCombine(new() {(int)_timing.CurTick.Value, GetNetEntity(entity).Id, GetNetEntity(userUid).Id }); + var seed = SharedRandomExtensions.HashCodeCombine(new() { (int)_timing.CurTick.Value, GetNetEntity(entity).Id, GetNetEntity(userUid).Id }); var rand = new System.Random(seed); if (!rand.Prob(entity.Comp.BreakChance)) return; _audio.PlayPredicted(entity.Comp.BreakSound, userUid, userUid, AudioParams.Default.WithVolume(-2f)); - // Not prediced because no random predicted PredictedDel(entity.Owner); } diff --git a/Content.Shared/Nutrition/EntitySystems/IngestionSystem.cs b/Content.Shared/Nutrition/EntitySystems/IngestionSystem.cs index 284bb866f7..caecc2797e 100644 --- a/Content.Shared/Nutrition/EntitySystems/IngestionSystem.cs +++ b/Content.Shared/Nutrition/EntitySystems/IngestionSystem.cs @@ -137,12 +137,12 @@ public sealed partial class IngestionSystem : EntitySystem private void OnEdibleInit(Entity entity, ref ComponentInit args) { - // TODO: When Food and Drink component are kill make sure to nuke both TryComps and just have it update appearance... - // Beakers, Soap and other items have drainable, and we should be able to eat that solution... - // If I could make drainable properly support sound effects and such I'd just have it use TryIngest itself - // Does this exist just to make tests fail? That way you have the proper yaml??? + // Beakers, Soap and other items have drainable, and we should be able to eat that solution. + // This ensures that tests fail when you configured the yaml from and EdibleComponent uses the wrong solution, if (TryComp(entity, out var existingDrainable)) entity.Comp.Solution = existingDrainable.Solution; + else + _solutionContainer.EnsureSolution(entity.Owner, entity.Comp.Solution, out _); UpdateAppearance(entity); @@ -339,7 +339,7 @@ public sealed partial class IngestionSystem : EntitySystem if (!forceFed) return; - _popup.PopupClient(Loc.GetString("ingestion-other-cannot-ingest-any-more", ("target", entity), ("verb", GetEdibleVerb(food))), args.Target.Value, args.User); + _popup.PopupClient(Loc.GetString("ingestion-other-cannot-ingest-any-more", ("target", entity), ("verb", GetEdibleVerb(food))), args.Target.Value, args.User); return; } @@ -354,7 +354,7 @@ public sealed partial class IngestionSystem : EntitySystem if (!forceFed) return; - _popup.PopupClient(Loc.GetString("ingestion-other-cannot-ingest-any-more", ("target", entity), ("verb", GetEdibleVerb(food))), args.Target.Value, args.User); + _popup.PopupClient(Loc.GetString("ingestion-other-cannot-ingest-any-more", ("target", entity), ("verb", GetEdibleVerb(food))), args.Target.Value, args.User); return; } @@ -462,6 +462,7 @@ public sealed partial class IngestionSystem : EntitySystem _popup.PopupClient(Loc.GetString("edible-force-feed-success-user", ("target", targetName), ("verb", edible.Verb)), args.User, args.User); // log successful forced feeding + // TODO: Use correct verb _adminLogger.Add(LogType.ForceFeed, LogImpact.Medium, $"{ToPrettyString(entity):user} forced {ToPrettyString(args.User):target} to eat {ToPrettyString(entity):food}"); } else @@ -472,6 +473,9 @@ public sealed partial class IngestionSystem : EntitySystem args.User); // log successful voluntary eating + // TODO: Use correct verb + // the past tense is tricky here + // localized admin logs when? _adminLogger.Add(LogType.Ingestion, LogImpact.Low, $"{ToPrettyString(args.User):target} ate {ToPrettyString(entity):food}"); } diff --git a/Content.Shared/Nutrition/EntitySystems/SharedDrinkSystem.cs b/Content.Shared/Nutrition/EntitySystems/SharedDrinkSystem.cs deleted file mode 100644 index fe804dd2e6..0000000000 --- a/Content.Shared/Nutrition/EntitySystems/SharedDrinkSystem.cs +++ /dev/null @@ -1,197 +0,0 @@ -using Content.Shared.Administration.Logs; -using Content.Shared.Chemistry.EntitySystems; -using Content.Shared.Database; -using Content.Shared.FixedPoint; -using Content.Shared.Forensics; -using Content.Shared.IdentityManagement; -using Content.Shared.Interaction; -using Content.Shared.Interaction.Events; -using Content.Shared.Inventory; -using Content.Shared.Nutrition.Components; -using Content.Shared.Popups; -using Content.Shared.Verbs; -using Robust.Shared.Audio; -using Robust.Shared.Audio.Systems; -using Robust.Shared.Player; - -namespace Content.Shared.Nutrition.EntitySystems; - -[Obsolete("Migration to Content.Shared.Nutrition.EntitySystems.IngestionSystem is required")] -public abstract partial class SharedDrinkSystem : EntitySystem -{ - [Dependency] private readonly SharedAudioSystem _audio = default!; - [Dependency] private readonly ISharedAdminLogManager _adminLogger = default!; - [Dependency] private readonly FlavorProfileSystem _flavorProfile = default!; - [Dependency] private readonly IngestionSystem _ingestion = default!; - [Dependency] private readonly SharedPopupSystem _popup = default!; - [Dependency] private readonly SharedSolutionContainerSystem _solutionContainer = default!; - - public override void Initialize() - { - base.Initialize(); - - SubscribeLocalEvent(OnUseDrinkInHand, after: new[] { typeof(OpenableSystem), typeof(InventorySystem) }); - SubscribeLocalEvent(OnUseDrink); - - SubscribeLocalEvent(OnAttemptShake); - - SubscribeLocalEvent>(AddDrinkVerb); - - SubscribeLocalEvent(OnBeforeDrinkEaten); - SubscribeLocalEvent(OnDrinkEaten); - - SubscribeLocalEvent(OnDrink); - - SubscribeLocalEvent(OnIsDigestible); - - SubscribeLocalEvent(OnGetEdibleType); - } - - protected void OnAttemptShake(Entity entity, ref AttemptShakeEvent args) - { - if (IsEmpty(entity, entity.Comp)) - args.Cancelled = true; - } - - protected FixedPoint2 DrinkVolume(EntityUid uid, DrinkComponent? component = null) - { - if (!Resolve(uid, ref component)) - return FixedPoint2.Zero; - - if (!_solutionContainer.TryGetSolution(uid, component.Solution, out _, out var sol)) - return FixedPoint2.Zero; - - return sol.Volume; - } - - protected bool IsEmpty(EntityUid uid, DrinkComponent? component = null) - { - if (!Resolve(uid, ref component)) - return true; - - return DrinkVolume(uid, component) <= 0; - } - - /// - /// Eat or drink an item - /// - private void OnUseDrinkInHand(Entity entity, ref UseInHandEvent ev) - { - if (ev.Handled) - return; - - ev.Handled = _ingestion.TryIngest(ev.User, ev.User, entity); - } - - /// - /// Feed someone else - /// - private void OnUseDrink(Entity entity, ref AfterInteractEvent args) - { - if (args.Handled || args.Target == null || !args.CanReach) - return; - - args.Handled = _ingestion.TryIngest(args.User, args.Target.Value, entity); - } - - private void AddDrinkVerb(Entity entity, ref GetVerbsEvent args) - { - var user = args.User; - - if (entity.Owner == user || !args.CanInteract || !args.CanAccess) - return; - - if (!_ingestion.TryGetIngestionVerb(user, entity, IngestionSystem.Drink, out var verb)) - return; - - args.Verbs.Add(verb); - } - - private void OnBeforeDrinkEaten(Entity food, ref BeforeIngestedEvent args) - { - if (args.Cancelled) - return; - - // Set it to transfer amount if it exists, otherwise eat the whole volume if possible. - args.Transfer = food.Comp.TransferAmount; - } - - private void OnDrinkEaten(Entity entity, ref IngestedEvent args) - { - if (args.Handled) - return; - - args.Handled = true; - - _audio.PlayPredicted(entity.Comp.UseSound, args.Target, args.User, AudioParams.Default.WithVolume(-2f).WithVariation(0.25f)); - - var flavors = _flavorProfile.GetLocalizedFlavorsMessage(entity.Owner, args.Target, args.Split); - - if (args.ForceFed) - { - var targetName = Identity.Entity(args.Target, EntityManager); - var userName = Identity.Entity(args.User, EntityManager); - - _popup.PopupEntity(Loc.GetString("edible-force-feed-success", ("user", userName), ("verb", _ingestion.GetProtoVerb(IngestionSystem.Drink)), ("flavors", flavors)), entity, entity); - - _popup.PopupClient(Loc.GetString("edible-force-feed-success-user", ("target", targetName), ("verb", _ingestion.GetProtoVerb(IngestionSystem.Drink))), args.User, args.User); - - // log successful forced drinking - _adminLogger.Add(LogType.ForceFeed, LogImpact.Medium, $"{ToPrettyString(entity.Owner):user} forced {ToPrettyString(args.User):target} to drink {ToPrettyString(entity.Owner):drink}"); - } - else - { - _popup.PopupPredicted(Loc.GetString("edible-slurp", ("flavors", flavors)), - Loc.GetString("edible-slurp-other"), - args.User, - args.User); - - // log successful voluntary drinking - _adminLogger.Add(LogType.Ingestion, LogImpact.Low, $"{ToPrettyString(args.User):target} drank {ToPrettyString(entity.Owner):drink}"); - } - - if (_ingestion.GetUsesRemaining(entity, entity.Comp.Solution, args.Split.Volume) <= 0) - return; - - // Leave some of the consumer's DNA on the consumed item... - var ev = new TransferDnaEvent - { - Donor = args.Target, - Recipient = entity, - CanDnaBeCleaned = false, - }; - RaiseLocalEvent(args.Target, ref ev); - - args.Repeat = !args.ForceFed; - } - - private void OnDrink(Entity drink, ref EdibleEvent args) - { - if (args.Cancelled || args.Solution != null) - return; - - if (!_solutionContainer.TryGetSolution(drink.Owner, drink.Comp.Solution, out args.Solution) || IsEmpty(drink)) - { - args.Cancelled = true; - - _popup.PopupClient(Loc.GetString("ingestion-try-use-is-empty", ("entity", drink)), drink, args.User); - return; - } - - args.Time += TimeSpan.FromSeconds(drink.Comp.Delay); - } - - private void OnIsDigestible(Entity ent, ref IsDigestibleEvent args) - { - // Anyone can drink from puddles on the floor! - args.UniversalDigestion(); - } - - private void OnGetEdibleType(Entity ent, ref GetEdibleTypeEvent args) - { - if (args.Type != null) - return; - - args.SetPrototype(IngestionSystem.Drink); - } -} diff --git a/Resources/Maps/plasma.yml b/Resources/Maps/plasma.yml index b5d76a75e0..b2ae035e04 100644 --- a/Resources/Maps/plasma.yml +++ b/Resources/Maps/plasma.yml @@ -83601,37 +83601,41 @@ entities: - type: Transform pos: -45.5,-61.5 parent: 2 - - type: Drink - useSound: !type:SoundPathSpecifier - path: /Audio/Items/drink.ogg + - type: Edible + edible: Drink solution: pool + destroyOnEmpty: false + utensil: Spoon - uid: 16868 components: - type: Transform pos: -44.5,-61.5 parent: 2 - - type: Drink - useSound: !type:SoundPathSpecifier - path: /Audio/Items/drink.ogg + - type: Edible + edible: Drink solution: pool + destroyOnEmpty: false + utensil: Spoon - uid: 16872 components: - type: Transform pos: -46.5,-61.5 parent: 2 - - type: Drink - useSound: !type:SoundPathSpecifier - path: /Audio/Items/drink.ogg + - type: Edible + edible: Drink solution: pool + destroyOnEmpty: false + utensil: Spoon - uid: 16907 components: - type: Transform pos: -44.5,-60.5 parent: 2 - - type: Drink - useSound: !type:SoundPathSpecifier - path: /Audio/Items/drink.ogg + - type: Edible + edible: Drink solution: pool + destroyOnEmpty: false + utensil: Spoon - uid: 17621 components: - type: Transform diff --git a/Resources/Prototypes/Entities/Clothing/Head/misc.yml b/Resources/Prototypes/Entities/Clothing/Head/misc.yml index da0f17f324..511f1e1980 100644 --- a/Resources/Prototypes/Entities/Clothing/Head/misc.yml +++ b/Resources/Prototypes/Entities/Clothing/Head/misc.yml @@ -320,6 +320,7 @@ solution: drink delay: 0.5 forceFeedDelay: 1.5 + utensil: Spoon - type: FlavorProfile flavors: - water diff --git a/Resources/Prototypes/Entities/Effects/puddle.yml b/Resources/Prototypes/Entities/Effects/puddle.yml index cc3df59c55..4e758e4e1c 100644 --- a/Resources/Prototypes/Entities/Effects/puddle.yml +++ b/Resources/Prototypes/Entities/Effects/puddle.yml @@ -206,6 +206,7 @@ delay: 3 transferAmount: 1 solution: puddle + utensil: None - type: ExaminableSolution solution: puddle locVolume: "examinable-solution-on-examine-volume-puddle" diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Drinks/drinks_metamorphic.yml b/Resources/Prototypes/Entities/Objects/Consumable/Drinks/drinks_metamorphic.yml index 22054741e3..3b7569022b 100644 --- a/Resources/Prototypes/Entities/Objects/Consumable/Drinks/drinks_metamorphic.yml +++ b/Resources/Prototypes/Entities/Objects/Consumable/Drinks/drinks_metamorphic.yml @@ -2122,7 +2122,6 @@ id: DrinkTomatoJuice suffix: tomato juice components: - - type: Drink - type: SolutionContainerManager solutions: drink: diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Food/Containers/bowl.yml b/Resources/Prototypes/Entities/Objects/Consumable/Food/Containers/bowl.yml index 1ac5dce0e8..ce82ba1e1b 100644 --- a/Resources/Prototypes/Entities/Objects/Consumable/Food/Containers/bowl.yml +++ b/Resources/Prototypes/Entities/Objects/Consumable/Food/Containers/bowl.yml @@ -27,6 +27,7 @@ edible: Drink solution: food destroyOnEmpty: false + utensil: Spoon - type: DamageOnLand damage: types: diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Food/Containers/condiments.yml b/Resources/Prototypes/Entities/Objects/Consumable/Food/Containers/condiments.yml index 7c7df07f78..5cfe12d74a 100644 --- a/Resources/Prototypes/Entities/Objects/Consumable/Food/Containers/condiments.yml +++ b/Resources/Prototypes/Entities/Objects/Consumable/Food/Containers/condiments.yml @@ -32,8 +32,11 @@ components: - type: Item size: Tiny - - type: Drink + - type: Edible + edible: Food # usually contains powders like flour or condiments like ketchup solution: food + destroyOnEmpty: false + utensil: Spoon - type: Openable sound: collection: packetOpenSounds @@ -74,6 +77,14 @@ - type: ExaminableSolution exactVolume: true +- type: entity + parent: BaseFoodCondimentPacket + id: BaseFoodCondimentPacketDrink + abstract: true + components: + - type: Edible + edible: Drink # slurping sounds! + - type: entity parent: BaseFoodCondimentPacket id: FoodCondimentPacketAstrotame @@ -103,7 +114,7 @@ fillBaseName: packet-trans- - type: entity - parent: BaseFoodCondimentPacket + parent: BaseFoodCondimentPacketDrink id: FoodCondimentPacketBbq name: BBQ sauce description: Hand wipes not included. @@ -123,7 +134,7 @@ fillBaseName: packet-trans- - type: entity - parent: BaseFoodCondimentPacket + parent: BaseFoodCondimentPacketDrink id: FoodCondimentPacketCornoil name: corn oil description: Corn oil. A delicious oil used in cooking. Made from corn. @@ -143,7 +154,7 @@ fillBaseName: packet-trans- - type: entity - parent: BaseFoodCondimentPacket + parent: BaseFoodCondimentPacketDrink id: FoodCondimentPacketColdsauce name: coldsauce description: Coldsauce. Leaves the tongue numb in its passage. @@ -163,7 +174,7 @@ fillBaseName: packet-trans- - type: entity - parent: BaseFoodCondimentPacket + parent: BaseFoodCondimentPacketDrink id: FoodCondimentPacketHorseradish name: horseradish sauce description: A packet of smelly horseradish sauce. @@ -183,7 +194,7 @@ fillBaseName: packet-solid- - type: entity - parent: BaseFoodCondimentPacket + parent: BaseFoodCondimentPacketDrink id: FoodCondimentPacketHotsauce name: hotsauce description: You can almost TASTE the stomach ulcers now! @@ -203,7 +214,7 @@ fillBaseName: packet-trans- - type: entity - parent: BaseFoodCondimentPacket + parent: BaseFoodCondimentPacketDrink id: FoodCondimentPacketKetchup name: ketchup description: You feel more American already. @@ -223,7 +234,7 @@ fillBaseName: packet-solid- - type: entity - parent: BaseFoodCondimentPacket + parent: BaseFoodCondimentPacketDrink id: FoodCondimentPacketMustard name: mustard description: A condiment made from the ground-up seeds of the Mustard plant. @@ -289,7 +300,7 @@ fillBaseName: packet-solid- - type: entity - parent: BaseFoodCondimentPacket + parent: BaseFoodCondimentPacketDrink id: FoodCondimentPacketSoy name: soy sauce description: A salty soy-based flavoring. @@ -335,8 +346,11 @@ name: condiment bottle description: A thin glass bottle used to store condiments. components: - - type: Drink + - type: Edible + edible: Drink solution: food + destroyOnEmpty: false + utensil: None - type: Openable sound: collection: pop @@ -526,7 +540,7 @@ # Shakers - type: entity - parent: BaseFoodCondiment + parent: BaseFoodCondiment # TODO: This should not inherit TrashOnSolutionEmpty, SpaceGarbage and the price of 0 id: BaseFoodShaker abstract: true name: empty shaker @@ -534,8 +548,11 @@ components: - type: Item size: Tiny - - type: Drink + - type: Edible + edible: Drink solution: food + destroyOnEmpty: false + utensil: None # don't conflict with stirring - type: SolutionContainerManager solutions: food: diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Food/ingredients.yml b/Resources/Prototypes/Entities/Objects/Consumable/Food/ingredients.yml index 76ea3073e5..fda43d65fe 100644 --- a/Resources/Prototypes/Entities/Objects/Consumable/Food/ingredients.yml +++ b/Resources/Prototypes/Entities/Objects/Consumable/Food/ingredients.yml @@ -25,10 +25,10 @@ solution: food - type: DrainableSolution solution: food - - type: Drink + - type: Edible + edible: Food # usually contains powders like flour or condiments like ketchup solution: food - useSound: - collection: eating + utensil: Spoon - type: Damageable damageContainer: Inorganic - type: Spillable @@ -224,6 +224,8 @@ reagents: - ReagentId: OilOlive Quantity: 20 + - type: Edible + edible: Drink # slurping sounds! - type: entity parent: ReagentPacketBase diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Food/produce.yml b/Resources/Prototypes/Entities/Objects/Consumable/Food/produce.yml index 551ea802ca..563a7810d0 100644 --- a/Resources/Prototypes/Entities/Objects/Consumable/Food/produce.yml +++ b/Resources/Prototypes/Entities/Objects/Consumable/Food/produce.yml @@ -9,14 +9,20 @@ - type: SolutionContainerManager - type: Sprite state: produce - # let cows eat raw produce like wheat and oats - - type: Edible - requiresSpecialDigestion: true - type: Produce - type: PotencyVisuals - type: Appearance - type: Extractable grindableSolutionName: food + +- type: entity + parent: ProduceBase + id: ProduceBaseRuminant + abstract: true + components: + # let cows eat raw produce like wheat and oats + - type: Edible + requiresSpecialDigestion: true - type: Tag tags: - Ruminant @@ -43,7 +49,7 @@ name: wheat bushel description: Sigh... wheat... a-grain? id: WheatBushel - parent: ProduceBase + parent: ProduceBaseRuminant components: - type: Sprite sprite: Objects/Specific/Hydroponics/wheat.rsi @@ -66,7 +72,7 @@ name: meatwheat bushel description: Some blood-drenched wheat stalks. You can crush them into what passes for meat if you squint hard enough. id: MeatwheatBushel - parent: ProduceBase + parent: ProduceBaseRuminant components: - type: Sprite sprite: Objects/Specific/Hydroponics/meatwheat.rsi @@ -90,7 +96,7 @@ name: oat bushel description: Eat oats, do squats. id: OatBushel - parent: ProduceBase + parent: ProduceBaseRuminant components: - type: Sprite sprite: Objects/Specific/Hydroponics/oat.rsi @@ -114,7 +120,7 @@ name: sugarcane description: Sickly sweet. id: Sugarcane - parent: ProduceBase + parent: ProduceBaseRuminant components: - type: Sprite sprite: Objects/Specific/Hydroponics/sugarcane.rsi @@ -226,7 +232,7 @@ name: nettle description: Stingy little prick. id: Nettle - parent: ProduceBase + parent: ProduceBaseRuminant components: - type: Sprite sprite: Objects/Specific/Hydroponics/nettle.rsi @@ -1964,7 +1970,7 @@ name: rice bushel description: Can be ground into rice, perfect for pudding or sake. id: RiceBushel - parent: ProduceBase + parent: ProduceBaseRuminant components: - type: Sprite sprite: Objects/Specific/Hydroponics/rice.rsi @@ -1983,7 +1989,7 @@ name: soybeans description: For those who can't stand seeing good old meat. id: FoodSoybeans - parent: ProduceBase + parent: ProduceBaseRuminant components: - type: Sprite sprite: Objects/Specific/Hydroponics/soybeans.rsi @@ -2047,7 +2053,7 @@ name: koibean description: These beans seem a little bit fishy. id: FoodKoibean - parent: ProduceBase + parent: ProduceBaseRuminant components: - type: Sprite sprite: Objects/Specific/Hydroponics/koibean.rsi diff --git a/Resources/Prototypes/Entities/Objects/Specific/Hydroponics/leaves.yml b/Resources/Prototypes/Entities/Objects/Specific/Hydroponics/leaves.yml index 3ef9e99cd2..de3f8e1003 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Hydroponics/leaves.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Hydroponics/leaves.yml @@ -2,7 +2,7 @@ - type: entity name: cannabis leaves - parent: ProduceBase + parent: ProduceBaseRuminant id: LeavesCannabis description: "Recently legalized in most galaxies." components: @@ -167,7 +167,7 @@ - type: entity name: tea leaves - parent: ProduceBase + parent: ProduceBaseRuminant id: LeavesTea description: "Can be dried out to make tea." components: @@ -184,7 +184,7 @@ - type: entity name: dried tea leaves - parent: ProduceBase + parent: ProduceBaseRuminant id: LeavesTeaDried description: "Dried tea leaves, ready to be ground." components: @@ -200,7 +200,7 @@ - type: entity name: tobacco leaves - parent: ProduceBase + parent: ProduceBaseRuminant id: LeavesTobacco description: "Dry them out to make some smokes." components: @@ -208,6 +208,12 @@ sprite: Objects/Specific/Hydroponics/tobacco.rsi - type: Produce seedId: tobacco + - type: SolutionContainerManager + solutions: + food: + reagents: + - ReagentId: Nicotine + Quantity: 2 - type: entity name: dried tobacco leaves diff --git a/Resources/Prototypes/Entities/Objects/Specific/Janitorial/spray.yml b/Resources/Prototypes/Entities/Objects/Specific/Janitorial/spray.yml index 9ed5972754..f335244806 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Janitorial/spray.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Janitorial/spray.yml @@ -5,12 +5,16 @@ suffix: Empty description: A spray bottle with an unscrewable top. components: - - type: Drink + - type: Edible + edible: Drink solution: spray - ignoreEmpty: true + destroyOnEmpty: false + utensil: None + transferAmount: 10 useSound: path: /Audio/Effects/spray3.ogg - transferAmount: 10 + params: + variation: 0.2 - type: Tag tags: - Spray diff --git a/Resources/Prototypes/Entities/Objects/Specific/chemical-containers.yml b/Resources/Prototypes/Entities/Objects/Specific/chemical-containers.yml index 84990b10be..bf3501d604 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/chemical-containers.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/chemical-containers.yml @@ -39,8 +39,11 @@ interfaces: enum.TransferAmountUiKey.Key: type: TransferAmountBoundUserInterface - - type: Drink + - type: Edible + edible: Drink solution: beaker + destroyOnEmpty: false + utensil: Spoon - type: Spillable solution: beaker - type: Appearance diff --git a/Resources/Prototypes/Entities/Objects/Specific/chemistry-bottles.yml b/Resources/Prototypes/Entities/Objects/Specific/chemistry-bottles.yml index c8c275ac23..8f57307760 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/chemistry-bottles.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/chemistry-bottles.yml @@ -24,7 +24,11 @@ - type: SolutionContainerVisuals maxFillLevels: 6 fillBaseName: bottle-1- - - type: Drink + - type: Edible + edible: Drink + solution: drink + destroyOnEmpty: false + utensil: None - type: SolutionContainerManager solutions: drink: # This solution name and target volume is hard-coded in ChemMasterComponent diff --git a/Resources/Prototypes/Entities/Objects/Specific/chemistry-vials.yml b/Resources/Prototypes/Entities/Objects/Specific/chemistry-vials.yml index 21b3742d02..2422d7d712 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/chemistry-vials.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/chemistry-vials.yml @@ -29,8 +29,11 @@ fillBaseName: vial-1- inHandsMaxFillLevels: 4 inHandsFillBaseName: -fill- - - type: Drink + - type: Edible + edible: Drink solution: beaker + destroyOnEmpty: false + utensil: None - type: SolutionContainerManager solutions: beaker: diff --git a/Resources/Prototypes/Entities/Objects/Specific/chemistry.yml b/Resources/Prototypes/Entities/Objects/Specific/chemistry.yml index cd4cbb3834..6a0a23eb65 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/chemistry.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/chemistry.yml @@ -48,8 +48,11 @@ interfaces: enum.TransferAmountUiKey.Key: type: TransferAmountBoundUserInterface - - type: Drink + - type: Edible + edible: Drink solution: beaker + destroyOnEmpty: false + utensil: None - type: Appearance - type: SolutionContainerVisuals maxFillLevels: 6 @@ -145,8 +148,11 @@ interfaces: enum.TransferAmountUiKey.Key: type: TransferAmountBoundUserInterface - - type: Drink + - type: Edible + edible: Drink solution: beaker + destroyOnEmpty: false + utensil: Spoon - type: Appearance - type: SolutionContainerVisuals maxFillLevels: 6 diff --git a/Resources/Prototypes/Entities/Objects/Tools/bucket.yml b/Resources/Prototypes/Entities/Objects/Tools/bucket.yml index d77e6cd2b8..c62b178366 100644 --- a/Resources/Prototypes/Entities/Objects/Tools/bucket.yml +++ b/Resources/Prototypes/Entities/Objects/Tools/bucket.yml @@ -9,6 +9,7 @@ edible: Drink solution: bucket destroyOnEmpty: false + utensil: Spoon - type: Sprite sprite: Objects/Tools/bucket.rsi layers: diff --git a/Resources/Prototypes/Entities/Structures/Specific/Anomaly/anomalies.yml b/Resources/Prototypes/Entities/Structures/Specific/Anomaly/anomalies.yml index cb25f9199b..c1976ba7a8 100644 --- a/Resources/Prototypes/Entities/Structures/Specific/Anomaly/anomalies.yml +++ b/Resources/Prototypes/Entities/Structures/Specific/Anomaly/anomalies.yml @@ -971,8 +971,11 @@ - Honk - Carpetium - JuiceThatMakesYouWeh - - type: Drink + - type: Edible + edible: Drink solution: anomaly + destroyOnEmpty: false + utensil: Spoon - type: DrainableSolution solution: anomaly - type: DrawableSolution diff --git a/Resources/Prototypes/Entities/Structures/Specific/Janitor/janicart.yml b/Resources/Prototypes/Entities/Structures/Specific/Janitor/janicart.yml index 3be6fb7d6f..a24a03da3e 100644 --- a/Resources/Prototypes/Entities/Structures/Specific/Janitor/janicart.yml +++ b/Resources/Prototypes/Entities/Structures/Specific/Janitor/janicart.yml @@ -81,8 +81,11 @@ - type: ReactiveContainer solution: bucket container: item_slot - - type: Drink + - type: Edible + edible: Drink solution: bucket + destroyOnEmpty: false + utensil: Spoon - type: Appearance - type: SolutionContainerVisuals maxFillLevels: 3 @@ -358,8 +361,11 @@ interfaces: enum.StorageUiKey.Key: type: StorageBoundUserInterface - - type: Drink + - type: Edible + edible: Drink solution: bucket + destroyOnEmpty: false + utensil: Spoon - type: ContainerContainer containers: storagebase: !type:Container diff --git a/Resources/Prototypes/XenoArch/effects.yml b/Resources/Prototypes/XenoArch/effects.yml index 027c79550c..1506d94aa0 100644 --- a/Resources/Prototypes/XenoArch/effects.yml +++ b/Resources/Prototypes/XenoArch/effects.yml @@ -267,8 +267,11 @@ solution: beaker - type: SolutionTransfer canChangeTransferAmount: true - - type: Drink + - type: Edible + edible: Drink solution: beaker + destroyOnEmpty: false + utensil: None - type: entity id: XenoArtifactSpeedUp From 71bcda1feccc5cff360506441e9c7ff02aae7aa6 Mon Sep 17 00:00:00 2001 From: SurrealShibe <77357653+SurrealShibe@users.noreply.github.com> Date: Fri, 12 Sep 2025 15:47:21 -0700 Subject: [PATCH 006/143] Toilet fixes: Exception when constructing, proper seat layering (#40313) they call me a plumber the the way i fix da toiler --- .../Entities/Structures/Furniture/toilet.yml | 30 +++++++++---------- 1 file changed, 14 insertions(+), 16 deletions(-) diff --git a/Resources/Prototypes/Entities/Structures/Furniture/toilet.yml b/Resources/Prototypes/Entities/Structures/Furniture/toilet.yml index 6616983240..3af5a9d291 100644 --- a/Resources/Prototypes/Entities/Structures/Furniture/toilet.yml +++ b/Resources/Prototypes/Entities/Structures/Furniture/toilet.yml @@ -1,9 +1,9 @@ - type: entity - name: toilet - id: BaseToilet - parent: [ DisposalUnitBase, SeatBase ] - description: The HT-451, a torque rotation-based, waste disposal unit for small matter. This one seems remarkably clean. abstract: true + parent: [ DisposalUnitBase, SeatBase ] + id: BaseToilet + name: toilet + description: The HT-451, a torque rotation-based, waste disposal unit for small matter. This one seems remarkably clean. components: - type: Sprite sprite: Structures/Furniture/toilet.rsi @@ -24,8 +24,6 @@ map: [ "enum.DisposalUnitVisualLayers.OverlayFull" ] - state: dispover-handle map: [ "enum.DisposalUnitVisualLayers.OverlayEngaged" ] - - map: [ "DoorVisualState.DoorOpen" ] - - map: [ "SeatVisualState.SeatUp" ] - type: Rotatable - type: Transform noRot: false @@ -107,32 +105,32 @@ utensil: Spoon - type: GenericVisualizer visuals: - enum.ToiletVisuals.SeatVisualState: - SeatVisualState.SeatUp: - SeatUp: { state: disposal-up } - SeatDown: { state: disposal-down } enum.ToolOpenableVisuals.ToolOpenableVisualState: ToolOpenableVisualState.StashOpen: Open: { state: disposal-open } Closed: { state: disposal-closed } + enum.ToiletVisuals.SeatVisualState: + SeatVisualState.SeatUp: + SeatUp: { state: disposal-up } + SeatDown: { state: disposal-down } - type: entity + parent: BaseToilet + id: ToiletEmpty name: toilet description: The HT-451, a torque rotation-based, waste disposal unit for small matter. This one seems remarkably clean. - id: ToiletEmpty - parent: BaseToilet suffix: Empty components: - type: Construction graph: Toilet node: toilet -# so theres not actually any way to replenish the gastrotoxin / gold in these. +# so theres not actually any way to replenish the gastrotoxin / gold in these. # I wouldn't add it to the solutionregeneration comp because that doesn't make a lot of sense imo. # I guess we just need to add shitting? - type: entity - id: ToiletDirtyWater parent: ToiletEmpty + id: ToiletDirtyWater suffix: Dirty Water components: - type: SolutionContainerManager @@ -148,8 +146,8 @@ Quantity: 20 - type: entity - id: ToiletGoldenEmpty parent: BaseToilet + id: ToiletGoldenEmpty name: golden toilet description: The HT-451G is the gold version of the device. It says on the side that it is made of the purest Mercurian gold and a real leather seat. suffix: Empty @@ -184,8 +182,8 @@ max: 5 - type: entity - id: ToiletGoldenDirtyWater parent: ToiletGoldenEmpty + id: ToiletGoldenDirtyWater suffix: Dirty Water, StealTarget components: - type: StealTarget From 79a34556e5a8a938cc3d62287705a4b5578f7abf Mon Sep 17 00:00:00 2001 From: PJBot Date: Fri, 12 Sep 2025 22:48:32 +0000 Subject: [PATCH 007/143] Automatic changelog update --- Resources/Changelog/Changelog.yml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 06b7594bd5..fbeda817cf 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: Nyxilath - changes: - - message: Trash bags can be printed by Autolathes again. - type: Fix - id: 8444 - time: '2025-05-09T03:35:49.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/37296 - author: robinthedragon changes: - message: Basic operative bundle, which allows newkies to easily spend all 40 of @@ -3948,3 +3941,10 @@ id: 8955 time: '2025-09-11T19:59:21.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/39879 +- author: SurrealShibe + changes: + - message: Toilet seats are now displayed on the correct layer. + type: Fix + id: 8956 + time: '2025-09-12T22:47:21.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/40313 From ab40b1ab734f664d18f96066e2c6e65a515866c9 Mon Sep 17 00:00:00 2001 From: Princess Cheeseballs <66055347+Princess-Cheeseballs@users.noreply.github.com> Date: Fri, 12 Sep 2025 16:23:57 -0700 Subject: [PATCH 008/143] Chameleon Projector Physics Fix (#37960) * One commit * Move files --------- Co-authored-by: Princess Cheeseballs <66055347+Pronana@users.noreply.github.com> --- .../Movement/Systems/SharedMoverController.Input.cs | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/Content.Shared/Movement/Systems/SharedMoverController.Input.cs b/Content.Shared/Movement/Systems/SharedMoverController.Input.cs index 2560f33e9c..1189280616 100644 --- a/Content.Shared/Movement/Systems/SharedMoverController.Input.cs +++ b/Content.Shared/Movement/Systems/SharedMoverController.Input.cs @@ -9,6 +9,7 @@ using Robust.Shared.GameStates; using Robust.Shared.Input; using Robust.Shared.Input.Binding; using Robust.Shared.Map.Components; +using Robust.Shared.Physics; using Robust.Shared.Player; using Robust.Shared.Prototypes; using Robust.Shared.Serialization; @@ -57,6 +58,7 @@ namespace Content.Shared.Movement.Systems SubscribeLocalEvent(OnMoverGetState); SubscribeLocalEvent(OnMoverHandleState); SubscribeLocalEvent(OnInputParentChange); + SubscribeLocalEvent(OnAnchorState); SubscribeLocalEvent(OnFollowedParentChange); @@ -296,6 +298,12 @@ namespace Content.Shared.Movement.Systems Dirty(entity.Owner, entity.Comp); } + private void OnAnchorState(Entity entity, ref AnchorStateChangedEvent args) + { + if (!args.Anchored) + PhysicsSystem.SetBodyType(entity, BodyType.KinematicController); + } + private void HandleDirChange(EntityUid entity, Direction dir, ushort subTick, bool state) { // Relayed movement just uses the same keybinds given we're moving the relayed entity From 0ba1a7c4dd2c7fffbfce1ae276bc69cfe87c1afc Mon Sep 17 00:00:00 2001 From: PJBot Date: Fri, 12 Sep 2025 23:25:05 +0000 Subject: [PATCH 009/143] Automatic changelog update --- Resources/Changelog/Changelog.yml | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index fbeda817cf..aa23234c9b 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,12 +1,4 @@ Entries: -- author: robinthedragon - changes: - - message: Basic operative bundle, which allows newkies to easily spend all 40 of - their TC on straightforwardly useful items. - type: Add - id: 8445 - time: '2025-05-09T11:32:30.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/37290 - author: Errant changes: - message: Borgs can no longer craft items using up their tools as an ingredient, @@ -3948,3 +3940,11 @@ id: 8956 time: '2025-09-12T22:47:21.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/40313 +- author: Princess-Cheeseballs + changes: + - message: Chameleon Projector will no longer cause you to be permanently slowed + down + type: Fix + id: 8957 + time: '2025-09-12T23:23:58.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/37960 From bcc30813e96087a3b5b434655fce3c7be0ee47de Mon Sep 17 00:00:00 2001 From: FungiFellow <151778459+FungiFellow@users.noreply.github.com> Date: Sat, 13 Sep 2025 03:01:13 -0400 Subject: [PATCH 010/143] Cockroach Gib when Stepped on (#40103) * Cockroach Gib * Prevent Cockroaches From Gibbing Eachother * Added - type: RandomChanceTriggerCondition * Update animals.yml * Named SuccessChance Datafield * successChance * Revert Change * Uncapitalize C * RECAPITALIZE THE C --- Resources/Prototypes/Entities/Mobs/NPCs/animals.yml | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml b/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml index c8bf6f23c3..7fa2583b52 100644 --- a/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml +++ b/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml @@ -341,7 +341,7 @@ - type: TimedDespawn #delete the egg after the chicken spawns lifetime: 21 -- type: entity # TODO: figure out how to make these guys gib when stepped on +- type: entity name: cockroach parent: SimpleMobBase id: MobCockroach @@ -426,6 +426,13 @@ - !type:GibBehavior recursive: false - type: NonSpreaderZombie + - type: StepTrigger + requiredTriggeredSpeed: 1 + - type: TriggerOnStepTrigger + - type: RandomChanceTriggerCondition + successChance: 0.2 + - type: GibOnTrigger + - type: ProtectedFromStepTriggers - type: MeleeWeapon soundHit: path: /Audio/Effects/bite.ogg From 659648b03d5872d3353afcacabded20541df1e89 Mon Sep 17 00:00:00 2001 From: PJBot Date: Sat, 13 Sep 2025 07:02:21 +0000 Subject: [PATCH 011/143] Automatic changelog update --- Resources/Changelog/Changelog.yml | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index aa23234c9b..f548270c42 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,12 +1,4 @@ Entries: -- author: Errant - changes: - - message: Borgs can no longer craft items using up their tools as an ingredient, - losing them forever. - type: Fix - id: 8446 - time: '2025-05-09T12:43:38.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/37292 - author: murolem changes: - message: Silo can now accept diamonds. Shiny! @@ -3948,3 +3940,10 @@ id: 8957 time: '2025-09-12T23:23:58.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/37960 +- author: FungiFellow + changes: + - message: Cockroaches can Gib when Stepped on + type: Add + id: 8958 + time: '2025-09-13T07:01:14.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/40103 From a4b7cd73c5b53b67a99b60a6bcb7050e35171d57 Mon Sep 17 00:00:00 2001 From: IProduceWidgets <107586145+IProduceWidgets@users.noreply.github.com> Date: Sat, 13 Sep 2025 03:15:10 -0400 Subject: [PATCH 012/143] +1 Spam mail (#40310) * 2nd edition * remove OOC * oop * double oops --- Resources/Locale/en-US/delivery/delivery-spam.ftl | 12 ++++++++++++ Resources/Prototypes/Datasets/deliveries.yml | 2 +- .../Entities/Objects/Misc/books_author.yml | 4 +++- 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/Resources/Locale/en-US/delivery/delivery-spam.ftl b/Resources/Locale/en-US/delivery/delivery-spam.ftl index 11bee52929..c5161bb19f 100644 --- a/Resources/Locale/en-US/delivery/delivery-spam.ftl +++ b/Resources/Locale/en-US/delivery/delivery-spam.ftl @@ -266,3 +266,15 @@ delivery-spam-12 = Join us on the maiden voyage! {"[italic]*Phosphorus lakes are not for swimming, you waive all rights to legal representations with Relaxination Destinations upon landing on Galimar.[/italic]"} {"[italic]**Eye of the Cosmos must not be looked at for longer than five seconds at a time. You do not hear the call of the Eye.[/italic]"} {"[italic]***Must sign safety waiver before landing, Relaxination Destinations does not guarantee the safety of the Agatharian ruins. Disappearances of tour groups are down to an acceptable margin of 0.23% of all tour groups that visit the ruins.[/italic]"} + +delivery-spam-13 = paper + .desc = A letter to the editor. + .content = To whom it may concern, + + The famous Adventures of Ian and Renault book series is one that is enjoyed by young children and at least one severely dyslexic lizard (don't worry, I got better). However, there was an error in the publication, as Ian and Renault would never make a mistake writing. It appears that in The Adventures of Ian and Renault: An Arctic Journey of Courage and Friendship, two lines from The Adventures of Ian and Renault: Exploring the City were used. + This made no sense. How did Ian and Renault find a little kitten in the Arctic? What was the little kitten doing there? Why were Ian and Renault doing more than average today? And the worst offender is the second misplaced line, which is "As the day turned to night, they were exhausted abut happy from their adventure in the city" (Ian and Renault, 1). OH, SORRY!!! I'M NOT AWARE THAT THERE'S A CITY IN THE ARCTIC!!! THAT THEY JUST STOPPED AT. YOU KNOW. FOR A COFFEE. OH WAIT!! COFFEE KILLS DOGS AND FOXES!!!!!!!!! WHO WOULD PUBLISH THIS!!!!! YOU'VE JUST KILLED IAN AND RENAULT!!!!!!!!!!!!!!!!!!! HOW COULD YOU!!!!!!!!!!!!!!!!!!! YOU MONSTER!!!!!!!!!!!!!!!!! + And what did you get for killing Ian and Renault. Hmm? A slightly longer book? You need that longer book, don't you? Longer books sell for more, do they? You wanted to make more money? + LOOK AT WHERE THAT GOT YOU. YOU'VE KILLED THE TWO. CONGRATS. + THERE WILL BE NO MORE SEQUELS NOW. + HOW'S THAT FOR MAKING MONEY???? IT SUCKS???? + {"["}bold]WELL YOU SHOULDN'T HAVE KILLED THEM!!!!!!!!!!!!!!![/bold] diff --git a/Resources/Prototypes/Datasets/deliveries.yml b/Resources/Prototypes/Datasets/deliveries.yml index 10584f219b..3d3f79d71f 100644 --- a/Resources/Prototypes/Datasets/deliveries.yml +++ b/Resources/Prototypes/Datasets/deliveries.yml @@ -2,4 +2,4 @@ id: DeliverySpamLetters values: prefix: delivery-spam- - count: 12 + count: 13 diff --git a/Resources/Prototypes/Entities/Objects/Misc/books_author.yml b/Resources/Prototypes/Entities/Objects/Misc/books_author.yml index 47e5a91630..2d908de3b4 100644 --- a/Resources/Prototypes/Entities/Objects/Misc/books_author.yml +++ b/Resources/Prototypes/Entities/Objects/Misc/books_author.yml @@ -358,7 +358,9 @@ parent: BookBase id: BookIanArctic name: the adventures of ian and renault - an arctic journey of courage and friendship - description: The book looks new and adventurous, with a picture of Ian and Renault standing in front of an icy landscape with snowflakes falling all around them. The title, "The Adventures of Ian and Renault," is written in bold letters at the top, with a subtitle that reads, "An Arctic Journey of Courage and Friendship." + description: | + The book looks new and adventurous, with a picture of Ian and Renault standing in front of an icy landscape with snowflakes falling all around them. The title, "The Adventures of Ian and Renault," is written in bold letters at the top, with a subtitle that reads, "An Arctic Journey of Courage and Friendship." + 2nd Edition. components: - type: Sprite sprite: Objects/Misc/books.rsi From d17182c16256b08cfaea22201ae73e2be4059755 Mon Sep 17 00:00:00 2001 From: slarticodefast <161409025+slarticodefast@users.noreply.github.com> Date: Sat, 13 Sep 2025 17:53:48 +0200 Subject: [PATCH 013/143] Change listplayers command permissions to require the PII flag (#40324) --- Resources/engineCommandPerms.yml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/Resources/engineCommandPerms.yml b/Resources/engineCommandPerms.yml index 5af33603f9..194d05d13d 100644 --- a/Resources/engineCommandPerms.yml +++ b/Resources/engineCommandPerms.yml @@ -16,7 +16,6 @@ - inrangeunoccluded - lsgrid - lsmap - - listplayers - loc - mem - netaudit @@ -71,7 +70,6 @@ - pvs_override_info - merge_grids - - Flags: MAPPING Commands: - addmap @@ -91,10 +89,13 @@ - Flags: ADMIN Commands: - - listplayers - tp - tpto +- Flags: PII + Commands: + - listplayers + - Flags: FUN Commands: - tippy From 6768ff1e9125f758196cf873ad5b91362cc2c62f Mon Sep 17 00:00:00 2001 From: PJBot Date: Sat, 13 Sep 2025 15:54:55 +0000 Subject: [PATCH 014/143] Automatic changelog update --- Resources/Changelog/Admin.yml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/Resources/Changelog/Admin.yml b/Resources/Changelog/Admin.yml index d14f1dbf7f..eac8a22cbd 100644 --- a/Resources/Changelog/Admin.yml +++ b/Resources/Changelog/Admin.yml @@ -1387,5 +1387,13 @@ Entries: id: 168 time: '2025-09-11T22:07:37.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/39046 +- author: slarticodefast + changes: + - message: The listplayers command now requires PII permissions due to showing IP + addresses. + type: Tweak + id: 169 + time: '2025-09-13T15:53:48.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/40324 Name: Admin Order: 2 From f1ae8ecdfefaef0086bc1d8bae1d917cdcc1f95a Mon Sep 17 00:00:00 2001 From: Huaqas Date: Sun, 14 Sep 2025 01:36:28 +0800 Subject: [PATCH 015/143] Add Undergarments to Vulpkanin (#40321) Putting underwear on dogs. --- .../Locale/en-US/markings/undergarment.ftl | 33 +++++++ .../Customization/Markings/undergarments.yml | 92 ++++++++++++++++++ .../undergarments.rsi/binder_vulpkanin.png | Bin 0 -> 3118 bytes .../undergarments.rsi/boxers_vulpkanin.png | Bin 0 -> 2975 bytes .../undergarments.rsi/briefs_vulpkanin.png | Bin 0 -> 2871 bytes .../undergarments.rsi/classic_vulpkanin.png | Bin 0 -> 2940 bytes .../Customization/undergarments.rsi/meta.json | 28 ++++++ .../undergarments.rsi/satin_vulpkanin.png | Bin 0 -> 3023 bytes .../undergarments.rsi/sports_vulpkanin.png | Bin 0 -> 2956 bytes .../undergarments.rsi/tanktop_vulpkanin.png | Bin 0 -> 3224 bytes 10 files changed, 153 insertions(+) create mode 100644 Resources/Textures/Mobs/Customization/undergarments.rsi/binder_vulpkanin.png create mode 100644 Resources/Textures/Mobs/Customization/undergarments.rsi/boxers_vulpkanin.png create mode 100644 Resources/Textures/Mobs/Customization/undergarments.rsi/briefs_vulpkanin.png create mode 100644 Resources/Textures/Mobs/Customization/undergarments.rsi/classic_vulpkanin.png create mode 100644 Resources/Textures/Mobs/Customization/undergarments.rsi/satin_vulpkanin.png create mode 100644 Resources/Textures/Mobs/Customization/undergarments.rsi/sports_vulpkanin.png create mode 100644 Resources/Textures/Mobs/Customization/undergarments.rsi/tanktop_vulpkanin.png diff --git a/Resources/Locale/en-US/markings/undergarment.ftl b/Resources/Locale/en-US/markings/undergarment.ftl index 3740d0573d..4eebee641a 100644 --- a/Resources/Locale/en-US/markings/undergarment.ftl +++ b/Resources/Locale/en-US/markings/undergarment.ftl @@ -1,21 +1,54 @@ marking-UndergarmentTopTanktop = Tanktop +marking-UndergarmentTopTanktop-tanktop = Tanktop marking-UndergarmentTopBinder = Binder +marking-UndergarmentTopBinder-binder = Binder marking-UndergarmentTopBra = Classic Bra +marking-UndergarmentTopBra-classic = Classic Bra marking-UndergarmentTopSportsbra = Sports Bra +marking-UndergarmentTopSportsbra-sports = Sports Bra marking-UndergarmentBottomBoxers = Boxers +marking-UndergarmentBottomBoxers-boxers = Boxers marking-UndergarmentBottomBriefs = Briefs +marking-UndergarmentBottomBriefs-briefs = Briefs marking-UndergarmentBottomSatin = Satin +marking-UndergarmentBottomSatin-satin = Satin marking-UndergarmentTopTanktopVox = Tanktop +marking-UndergarmentTopTanktopVox-tanktop_vox = Tanktop marking-UndergarmentTopBinderVox = Binder +marking-UndergarmentTopBinderVox-binder_vox = Binder marking-UndergarmentTopBraVox = Classic Bra +marking-UndergarmentTopBraVox-classic_vox = Classic Bra marking-UndergarmentTopSportsbraVox = Sports Bra +marking-UndergarmentTopSportsbraVox-sports_vox = Sports Bra marking-UndergarmentBottomBoxersVox = Boxers +marking-UndergarmentBottomBoxersVox_boxers_vox = Boxers marking-UndergarmentBottomBriefsVox = Briefs +marking-UndergarmentBottomBriefsVox-briefs_vox = Briefs marking-UndergarmentBottomSatinVox = Satin +marking-UndergarmentBottomSatinVox-satin_vox = Satin marking-UndergarmentBottomBoxersReptilian = Boxers +marking-UndergarmentBottomBoxersReptilian-boxers_reptilian = Boxers marking-UndergarmentBottomBriefsReptilian = Briefs +marking-UndergarmentBottomBriefsReptilian-briefs_reptilian = Briefs marking-UndergarmentBottomSatinReptilian = Satin +marking-UndergarmentBottomSatinReptilian-satin_reptilian = Satin + +marking-UndergarmentTopTanktopVulpkanin = Tanktop +marking-UndergarmentTopTanktopVulpkanin-tanktop_vulpkanin = Tanktop +marking-UndergarmentTopBinderVulpkanin = Binder +marking-UndergarmentTopBinderVulpkanin-binder_vulpkanin = Binder +marking-UndergarmentTopBraVulpkanin = Classic Bra +marking-UndergarmentTopBraVulpkanin-classic_vulpkanin = Classic Bra +marking-UndergarmentTopSportsbraVulpkanin = Sports Bra +marking-UndergarmentTopSportsbraVulpkanin-sports_vulpkanin = Sports Bra + +marking-UndergarmentBottomBoxersVulpkanin = Boxers +marking-UndergarmentBottomBoxersVulpkanin-boxers_vulpkanin = Boxers +marking-UndergarmentBottomBriefsVulpkanin = Briefs +marking-UndergarmentBottomBriefsVulpkanin-briefs_vulpkanin = Briefs +marking-UndergarmentBottomSatinVulpkanin = Satin +marking-UndergarmentBottomSatinVulpkanin-satin_vulpkanin = Satin \ No newline at end of file diff --git a/Resources/Prototypes/Entities/Mobs/Customization/Markings/undergarments.yml b/Resources/Prototypes/Entities/Mobs/Customization/Markings/undergarments.yml index b7f62290e1..f711264bcf 100644 --- a/Resources/Prototypes/Entities/Mobs/Customization/Markings/undergarments.yml +++ b/Resources/Prototypes/Entities/Mobs/Customization/Markings/undergarments.yml @@ -221,3 +221,95 @@ sprites: - sprite: Mobs/Customization/undergarments.rsi state: satin_reptilian + +- type: marking + id: UndergarmentBottomBoxersVulpkanin + bodyPart: UndergarmentBottom + markingCategory: UndergarmentBottom + speciesRestriction: [Vulpkanin] + coloring: + default: + type: null + fallbackColor: '#FFFFFF' + sprites: + - sprite: Mobs/Customization/undergarments.rsi + state: boxers_vulpkanin + +- type: marking + id: UndergarmentBottomBriefsVulpkanin + bodyPart: UndergarmentBottom + markingCategory: UndergarmentBottom + speciesRestriction: [Vulpkanin] + coloring: + default: + type: null + fallbackColor: '#FFFFFF' + sprites: + - sprite: Mobs/Customization/undergarments.rsi + state: briefs_vulpkanin + +- type: marking + id: UndergarmentBottomSatinVulpkanin + bodyPart: UndergarmentBottom + markingCategory: UndergarmentBottom + speciesRestriction: [Vulpkanin] + coloring: + default: + type: null + fallbackColor: '#FFFFFF' + sprites: + - sprite: Mobs/Customization/undergarments.rsi + state: satin_vulpkanin + +- type: marking + id: UndergarmentTopBraVulpkanin + bodyPart: UndergarmentTop + markingCategory: UndergarmentTop + speciesRestriction: [Vulpkanin] + coloring: + default: + type: null + fallbackColor: '#FFFFFF' + sprites: + - sprite: Mobs/Customization/undergarments.rsi + state: classic_vulpkanin + +- type: marking + id: UndergarmentTopSportsbraVulpkanin + bodyPart: UndergarmentTop + markingCategory: UndergarmentTop + speciesRestriction: [Vulpkanin] + coloring: + default: + type: null + fallbackColor: '#FFFFFF' + sprites: + - sprite: Mobs/Customization/undergarments.rsi + state: sports_vulpkanin + +- type: marking + id: UndergarmentTopBinderVulpkanin + bodyPart: UndergarmentTop + markingCategory: UndergarmentTop + speciesRestriction: [Vulpkanin] + coloring: + default: + type: null + fallbackColor: '#FFFFFF' + sprites: + - sprite: Mobs/Customization/undergarments.rsi + state: binder_vulpkanin + +- type: marking + id: UndergarmentTopTanktopVulpkanin + bodyPart: UndergarmentTop + markingCategory: UndergarmentTop + speciesRestriction: [Vulpkanin] + coloring: + default: + type: null + fallbackColor: '#FFFFFF' + sprites: + - sprite: Mobs/Customization/undergarments.rsi + state: tanktop_vulpkanin + \ No newline at end of file diff --git a/Resources/Textures/Mobs/Customization/undergarments.rsi/binder_vulpkanin.png b/Resources/Textures/Mobs/Customization/undergarments.rsi/binder_vulpkanin.png new file mode 100644 index 0000000000000000000000000000000000000000..5462b644dfb5f05b7ca4c171e130fc5a9143508d GIT binary patch literal 3118 zcmV+}4AJw6P)*-S^(FQ9 zpc)FEHp!=b&Y9$13NFYN3jk2Xoh5>7fr57cz?wX{Pym310zh$|NSF_RT?YW8EP1vF z0DGgT%@*=<0dO=$TqfkF1K?}{fF_NO;sW4i0FY>DU+|PKxJ?2p&I^Cl#={IoT4PxBy_X=g&}6Xv+@r<2u>7I5}C_Tibmh z)PG(4n^1T=$zDc&_6%Wl{So`CyqsD9&KLl;;g48K6+p`>0FAqU#EfH@VU-_aR zmSSGgWipAYjZJ=jzO_imw^j)HJN{?F-@q5=Su3{tT^_ctFqJ3IlCc%K@pH0r+=D(Cgl8}cuVDf~5F$cH7>FjKhZrN4h&{qV zJP{tTr>@xj~1du=z6pgtwj%_&FC5QGI|5;L!Y5z7+_S4h3R8f7zg8G z;aCEeib=60SP52v)nbiU8`g@ALfW8m00E1VlH5H}mg$IZtr!L7qpj>KkO@z~g9>M@&j7TJE5-o}D#Bd^yC?ggVtB41Qr-;48LE;+{m83_qC;5{S zNMh0oQU&P%=_IL_G(?&ptB{S!uHBiE7J$XCdNnhkraoOgMty;Ljrs}oJ{HC@VFj_WSY@ok ztedQNQ*@?yPZ3U8JEd_-@04+ksTy7yLX8rQCXE{!?=;z(ewvw@8#P-rA86sUEVLrE z^0jtoozohb%AD#pl|Qv)>fxz(wNY&g?I`Vq+IzISw8wOGbpmuGI#oJnbw+eqx?Z{& zx|?-R>JIBM^gQ%LdYko5={;quv%T3_>`HbAdsJUrKTuz;zgxdsf5O1jV79>ugC>Iq zh7?1NVXEO~!*;__BR!)qqeVsyMt6#^WZYCb1@~O)+fZcZ@gm}i=AH@|9uS~yyyThv%wu|zGMEJc>vEqkWnr@2fMPph4F z%Zg^@ZIx%$VAXHUvJSOgVclZ=+{VZz!DgdPr_D!ON82phI@^18YIebPE9~0rezmu- z=iArVUw5E8_&Y3hXmxlo-Ez8c`i|+h9T|>cj;kHp9X~iZJ4u}yorax_oRgimIp5+i zIT4(7oC_{^7ay0UF2`Nox;nYaTo1ec;%4QR>2|>F$qdsO!Wnfl2HXwYdG5R2`#jhl z$sW5r`aJbLd7ibNkGu@M1YUc+hP=(aGrSLaKlicqk@_6<8Rxok7jsYhV!i>sCBEH$ zYJRi*s{J1N8~CUBH~5bRI0h^XI30)&3<=yAcq>RJh#yoRG#cz2yg0ZcgcdR@q&nnL zs70tWv@Hw`3l7^9c7LYvO!3T?a0m|y-xU5J!Zc!j#P^Ye$cV_A$j4E3QH!EFXEA0a z%{nmab+k`(S@gZxX0zq9+hdet5@YIP#$$bB%VYcEY~mKjU5?j^7saA3Ir+cPXq>qTWqH58LjKGYY8RMDZnfo$7 zWyNMSWs|a#vyX|@#F^rb9NnA+IXx0fNwK7FzU%xg^GBs2(!IGz?%do~8B->ab;-@- ztK|K89(gr+Z}MaEk1SAKAYRZ_U{SEPV5rc)@au)Rh5Uu>i}V*QU(~hf7JetdguE31KJ158qfxL!|=hxgIB-t{ie0is&RJ{tEu!59FiY;`fc*JHxGv# zZa=~~()gY6ciWCKj+Qhd%>~V)E$Jm89D-RDBiT{!Q5{%ogr=cxr z=TggMr_0S5EUlu6wEZa^I`zuiD2V#vZ=TemyZ>@<#K`{?0k26!K~#90?V8Jx!Y~j-$6F-gt3x0KG8)bhktPL) z;G+no_p)Mzp}?|`r*`RA<%4BY-LyVX8i^1>2qAJt?J6oV1LV%f7>F-Kj1|Vi8ec#`-_kAz>{r>t+ z*LAB6y&~xx4u@;o<#M^Umr@i!p7uP1)GH#=?Axc&_NW7rzf%38DKL&>)$>|f=zsho zSUg-+6_4iIIF52YpW99TM*77cc=lV{a`9`W|JEsx|2b-bs=m}OrFsNx(d*Bs_4DzI zAOr9=;0*)tHsB2d@HXHL1MoKB4Fm8t;0*)tHsB2d@HXHL1MoKB4Fm8t;0*)tHsDQB zZ7^{>9`mhO*KOh4%jtA#?iWp=2lMypwj8IibR*y*cO-W+u`Z=w!X$Ub! z0Ju4+vbHEwwFcxxh8UO$Q literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Customization/undergarments.rsi/boxers_vulpkanin.png b/Resources/Textures/Mobs/Customization/undergarments.rsi/boxers_vulpkanin.png new file mode 100644 index 0000000000000000000000000000000000000000..39960b57c72336294fdc0a1df79e7b480587262b GIT binary patch literal 2975 zcmV;Q3t;q#P)*-S^(FQ9 zpc)FEHp!=b&Y9$13NFYN3jk2Xoh5>7fr57cz?wX{Pym310zh$|NSF_RT?YW8EP1vF z0DGgT%@*=<0dO=$TqfkF1K?}{fF_NO;sW4i0FY>DU+|PKxJ?2p&I^Cl#={IoT4PxBy_X=g&}6Xv+@r<2u>7I5}C_Tibmh z)PG(4n^1T=$zDc&_6%Wl{So`CyqsD9&KLl;;g48K6+p`>0FAqU#EfH@VU-_aR zmSSGgWipAYjZJ=jzO_imw^j)HJN{?F-@q5=Su3{tT^_ctFqJ3IlCc%K@pH0r+=D(Cgl8}cuVDf~5F$cH7>FjKhZrN4h&{qV zJP{tTr>@xj~1du=z6pgtwj%_&FC5QGI|5;L!Y5z7+_S4h3R8f7zg8G z;aCEeib=60SP52v)nbiU8`g@ALfW8m00E1VlH5H}mg$IZtr!L7qpj>KkO@z~g9>M@&j7TJE5-o}D#Bd^yC?ggVtB41Qr-;48LE;+{m83_qC;5{S zNMh0oQU&P%=_IL_G(?&ptB{S!uHBiE7J$XCdNnhkraoOgMty;Ljrs}oJ{HC@VFj_WSY@ok ztedQNQ*@?yPZ3U8JEd_-@04+ksTy7yLX8rQCXE{!?=;z(ewvw@8#P-rA86sUEVLrE z^0jtoozohb%AD#pl|Qv)>fxz(wNY&g?I`Vq+IzISw8wOGbpmuGI#oJnbw+eqx?Z{& zx|?-R>JIBM^gQ%LdYko5={;quv%T3_>`HbAdsJUrKTuz;zgxdsf5O1jV79>ugC>Iq zh7?1NVXEO~!*;__BR!)qqeVsyMt6#^WZYCb1@~O)+fZcZ@gm}i=AH@|9uS~yyyThv%wu|zGMEJc>vEqkWnr@2fMPph4F z%Zg^@ZIx%$VAXHUvJSOgVclZ=+{VZz!DgdPr_D!ON82phI@^18YIebPE9~0rezmu- z=iArVUw5E8_&Y3hXmxlo-Ez8c`i|+h9T|>cj;kHp9X~iZJ4u}yorax_oRgimIp5+i zIT4(7oC_{^7ay0UF2`Nox;nYaTo1ec;%4QR>2|>F$qdsO!Wnfl2HXwYdG5R2`#jhl z$sW5r`aJbLd7ibNkGu@M1YUc+hP=(aGrSLaKlicqk@_6<8Rxok7jsYhV!i>sCBEH$ zYJRi*s{J1N8~CUBH~5bRI0h^XI30)&3<=yAcq>RJh#yoRG#cz2yg0ZcgcdR@q&nnL zs70tWv@Hw`3l7^9c7LYvO!3T?a0m|y-xU5J!Zc!j#P^Ye$cV_A$j4E3QH!EFXEA0a z%{nmab+k`(S@gZxX0zq9+hdet5@YIP#$$bB%VYcEY~mKjU5?j^7saA3Ir+cPXq>qTWqH58LjKGYY8RMDZnfo$7 zWyNMSWs|a#vyX|@#F^rb9NnA+IXx0fNwK7FzU%xg^GBs2(!IGz?%do~8B->ab;-@- ztK|K89(gr+Z}MaEk1SAKAYRZ_U{SEPV5rc)@au)Rh5Uu>i}V*QU(~hf7JetdguE31KJ158qfxL!|=hxgIB-t{ie0is&RJ{tEu!59FiY;`fc*JHxGv# zZa=~~()gY6ciWCKj+Qhd%>~V)E$Jm89D-RDBiT{!Q5{%ogr=cxr z=TggMr_0S5EUlu6wEZa^I`zuiD2V#vZ=TemyZ>@<#K`{?0U$|4K~#90?b0000000000@W$qOPV+pUKA(G4-m3BVPfDp%_5vPx?`0T}__HcgP*Ez%EuE3?m008j+d;*pE VjDh*-S^(FQ9 zpc)FEHp!=b&Y9$13NFYN3jk2Xoh5>7fr57cz?wX{Pym310zh$|NSF_RT?YW8EP1vF z0DGgT%@*=<0dO=$TqfkF1K?}{fF_NO;sW4i0FY>DU+|PKxJ?2p&I^Cl#={IoT4PxBy_X=g&}6Xv+@r<2u>7I5}C_Tibmh z)PG(4n^1T=$zDc&_6%Wl{So`CyqsD9&KLl;;g48K6+p`>0FAqU#EfH@VU-_aR zmSSGgWipAYjZJ=jzO_imw^j)HJN{?F-@q5=Su3{tT^_ctFqJ3IlCc%K@pH0r+=D(Cgl8}cuVDf~5F$cH7>FjKhZrN4h&{qV zJP{tTr>@xj~1du=z6pgtwj%_&FC5QGI|5;L!Y5z7+_S4h3R8f7zg8G z;aCEeib=60SP52v)nbiU8`g@ALfW8m00E1VlH5H}mg$IZtr!L7qpj>KkO@z~g9>M@&j7TJE5-o}D#Bd^yC?ggVtB41Qr-;48LE;+{m83_qC;5{S zNMh0oQU&P%=_IL_G(?&ptB{S!uHBiE7J$XCdNnhkraoOgMty;Ljrs}oJ{HC@VFj_WSY@ok ztedQNQ*@?yPZ3U8JEd_-@04+ksTy7yLX8rQCXE{!?=;z(ewvw@8#P-rA86sUEVLrE z^0jtoozohb%AD#pl|Qv)>fxz(wNY&g?I`Vq+IzISw8wOGbpmuGI#oJnbw+eqx?Z{& zx|?-R>JIBM^gQ%LdYko5={;quv%T3_>`HbAdsJUrKTuz;zgxdsf5O1jV79>ugC>Iq zh7?1NVXEO~!*;__BR!)qqeVsyMt6#^WZYCb1@~O)+fZcZ@gm}i=AH@|9uS~yyyThv%wu|zGMEJc>vEqkWnr@2fMPph4F z%Zg^@ZIx%$VAXHUvJSOgVclZ=+{VZz!DgdPr_D!ON82phI@^18YIebPE9~0rezmu- z=iArVUw5E8_&Y3hXmxlo-Ez8c`i|+h9T|>cj;kHp9X~iZJ4u}yorax_oRgimIp5+i zIT4(7oC_{^7ay0UF2`Nox;nYaTo1ec;%4QR>2|>F$qdsO!Wnfl2HXwYdG5R2`#jhl z$sW5r`aJbLd7ibNkGu@M1YUc+hP=(aGrSLaKlicqk@_6<8Rxok7jsYhV!i>sCBEH$ zYJRi*s{J1N8~CUBH~5bRI0h^XI30)&3<=yAcq>RJh#yoRG#cz2yg0ZcgcdR@q&nnL zs70tWv@Hw`3l7^9c7LYvO!3T?a0m|y-xU5J!Zc!j#P^Ye$cV_A$j4E3QH!EFXEA0a z%{nmab+k`(S@gZxX0zq9+hdet5@YIP#$$bB%VYcEY~mKjU5?j^7saA3Ir+cPXq>qTWqH58LjKGYY8RMDZnfo$7 zWyNMSWs|a#vyX|@#F^rb9NnA+IXx0fNwK7FzU%xg^GBs2(!IGz?%do~8B->ab;-@- ztK|K89(gr+Z}MaEk1SAKAYRZ_U{SEPV5rc)@au)Rh5Uu>i}V*QU(~hf7JetdguE31KJ158qfxL!|=hxgIB-t{ie0is&RJ{tEu!59FiY;`fc*JHxGv# zZa=~~()gY6ciWCKj+Qhd%>~V)E$Jm89D-RDBiT{!Q5{%ogr=cxr z=TggMr_0S5EUlu6wEZa^I`zuiD2V#vZ=TemyZ>@<#K`{?0Jup+K~#90?b@*ogD?<<;Y*Z7+%f_)Fp&pfqMLyc zt~8^(R3Hn{U<6T;|LbhYes|Z}W&i*H00000fPFb-XKHw~7E(`p9LMH+TDZHWX#h1qGr|P>bnf36m{-Cki4&k=oO${Gu9smIRj5iaj Vi_9kNlP>@O002ovPDHLkV1kP@iC_Q# literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Customization/undergarments.rsi/classic_vulpkanin.png b/Resources/Textures/Mobs/Customization/undergarments.rsi/classic_vulpkanin.png new file mode 100644 index 0000000000000000000000000000000000000000..957e50c145d12209b4a6234f82d5c383b88cb758 GIT binary patch literal 2940 zcmV-?3xo8DP)*-S^(FQ9 zpc)FEHp!=b&Y9$13NFYN3jk2Xoh5>7fr57cz?wX{Pym310zh$|NSF_RT?YW8EP1vF z0DGgT%@*=<0dO=$TqfkF1K?}{fF_NO;sW4i0FY>DU+|PKxJ?2p&I^Cl#={IoT4PxBy_X=g&}6Xv+@r<2u>7I5}C_Tibmh z)PG(4n^1T=$zDc&_6%Wl{So`CyqsD9&KLl;;g48K6+p`>0FAqU#EfH@VU-_aR zmSSGgWipAYjZJ=jzO_imw^j)HJN{?F-@q5=Su3{tT^_ctFqJ3IlCc%K@pH0r+=D(Cgl8}cuVDf~5F$cH7>FjKhZrN4h&{qV zJP{tTr>@xj~1du=z6pgtwj%_&FC5QGI|5;L!Y5z7+_S4h3R8f7zg8G z;aCEeib=60SP52v)nbiU8`g@ALfW8m00E1VlH5H}mg$IZtr!L7qpj>KkO@z~g9>M@&j7TJE5-o}D#Bd^yC?ggVtB41Qr-;48LE;+{m83_qC;5{S zNMh0oQU&P%=_IL_G(?&ptB{S!uHBiE7J$XCdNnhkraoOgMty;Ljrs}oJ{HC@VFj_WSY@ok ztedQNQ*@?yPZ3U8JEd_-@04+ksTy7yLX8rQCXE{!?=;z(ewvw@8#P-rA86sUEVLrE z^0jtoozohb%AD#pl|Qv)>fxz(wNY&g?I`Vq+IzISw8wOGbpmuGI#oJnbw+eqx?Z{& zx|?-R>JIBM^gQ%LdYko5={;quv%T3_>`HbAdsJUrKTuz;zgxdsf5O1jV79>ugC>Iq zh7?1NVXEO~!*;__BR!)qqeVsyMt6#^WZYCb1@~O)+fZcZ@gm}i=AH@|9uS~yyyThv%wu|zGMEJc>vEqkWnr@2fMPph4F z%Zg^@ZIx%$VAXHUvJSOgVclZ=+{VZz!DgdPr_D!ON82phI@^18YIebPE9~0rezmu- z=iArVUw5E8_&Y3hXmxlo-Ez8c`i|+h9T|>cj;kHp9X~iZJ4u}yorax_oRgimIp5+i zIT4(7oC_{^7ay0UF2`Nox;nYaTo1ec;%4QR>2|>F$qdsO!Wnfl2HXwYdG5R2`#jhl z$sW5r`aJbLd7ibNkGu@M1YUc+hP=(aGrSLaKlicqk@_6<8Rxok7jsYhV!i>sCBEH$ zYJRi*s{J1N8~CUBH~5bRI0h^XI30)&3<=yAcq>RJh#yoRG#cz2yg0ZcgcdR@q&nnL zs70tWv@Hw`3l7^9c7LYvO!3T?a0m|y-xU5J!Zc!j#P^Ye$cV_A$j4E3QH!EFXEA0a z%{nmab+k`(S@gZxX0zq9+hdet5@YIP#$$bB%VYcEY~mKjU5?j^7saA3Ir+cPXq>qTWqH58LjKGYY8RMDZnfo$7 zWyNMSWs|a#vyX|@#F^rb9NnA+IXx0fNwK7FzU%xg^GBs2(!IGz?%do~8B->ab;-@- ztK|K89(gr+Z}MaEk1SAKAYRZ_U{SEPV5rc)@au)Rh5Uu>i}V*QU(~hf7JetdguE31KJ158qfxL!|=hxgIB-t{ie0is&RJ{tEu!59FiY;`fc*JHxGv# zZa=~~()gY6ciWCKj+Qhd%>~V)E$Jm89D-RDBiT{!Q5{%ogr=cxr z=TggMr_0S5EUlu6wEZa^I`zuiD2V#vZ=TemyZ>@<#K`{?0R2fsK~#90?b^X{gfI++VQnUjm@;U=u80Dtf-+tW zl%ZCXlXo(NOu{Z0Hu=Ak#|9(|-z+l#007`uB*m8btH*zPI-?gy0Umj2dE8nZ|I*-S^(FQ9 zpc)FEHp!=b&Y9$13NFYN3jk2Xoh5>7fr57cz?wX{Pym310zh$|NSF_RT?YW8EP1vF z0DGgT%@*=<0dO=$TqfkF1K?}{fF_NO;sW4i0FY>DU+|PKxJ?2p&I^Cl#={IoT4PxBy_X=g&}6Xv+@r<2u>7I5}C_Tibmh z)PG(4n^1T=$zDc&_6%Wl{So`CyqsD9&KLl;;g48K6+p`>0FAqU#EfH@VU-_aR zmSSGgWipAYjZJ=jzO_imw^j)HJN{?F-@q5=Su3{tT^_ctFqJ3IlCc%K@pH0r+=D(Cgl8}cuVDf~5F$cH7>FjKhZrN4h&{qV zJP{tTr>@xj~1du=z6pgtwj%_&FC5QGI|5;L!Y5z7+_S4h3R8f7zg8G z;aCEeib=60SP52v)nbiU8`g@ALfW8m00E1VlH5H}mg$IZtr!L7qpj>KkO@z~g9>M@&j7TJE5-o}D#Bd^yC?ggVtB41Qr-;48LE;+{m83_qC;5{S zNMh0oQU&P%=_IL_G(?&ptB{S!uHBiE7J$XCdNnhkraoOgMty;Ljrs}oJ{HC@VFj_WSY@ok ztedQNQ*@?yPZ3U8JEd_-@04+ksTy7yLX8rQCXE{!?=;z(ewvw@8#P-rA86sUEVLrE z^0jtoozohb%AD#pl|Qv)>fxz(wNY&g?I`Vq+IzISw8wOGbpmuGI#oJnbw+eqx?Z{& zx|?-R>JIBM^gQ%LdYko5={;quv%T3_>`HbAdsJUrKTuz;zgxdsf5O1jV79>ugC>Iq zh7?1NVXEO~!*;__BR!)qqeVsyMt6#^WZYCb1@~O)+fZcZ@gm}i=AH@|9uS~yyyThv%wu|zGMEJc>vEqkWnr@2fMPph4F z%Zg^@ZIx%$VAXHUvJSOgVclZ=+{VZz!DgdPr_D!ON82phI@^18YIebPE9~0rezmu- z=iArVUw5E8_&Y3hXmxlo-Ez8c`i|+h9T|>cj;kHp9X~iZJ4u}yorax_oRgimIp5+i zIT4(7oC_{^7ay0UF2`Nox;nYaTo1ec;%4QR>2|>F$qdsO!Wnfl2HXwYdG5R2`#jhl z$sW5r`aJbLd7ibNkGu@M1YUc+hP=(aGrSLaKlicqk@_6<8Rxok7jsYhV!i>sCBEH$ zYJRi*s{J1N8~CUBH~5bRI0h^XI30)&3<=yAcq>RJh#yoRG#cz2yg0ZcgcdR@q&nnL zs70tWv@Hw`3l7^9c7LYvO!3T?a0m|y-xU5J!Zc!j#P^Ye$cV_A$j4E3QH!EFXEA0a z%{nmab+k`(S@gZxX0zq9+hdet5@YIP#$$bB%VYcEY~mKjU5?j^7saA3Ir+cPXq>qTWqH58LjKGYY8RMDZnfo$7 zWyNMSWs|a#vyX|@#F^rb9NnA+IXx0fNwK7FzU%xg^GBs2(!IGz?%do~8B->ab;-@- ztK|K89(gr+Z}MaEk1SAKAYRZ_U{SEPV5rc)@au)Rh5Uu>i}V*QU(~hf7JetdguE31KJ158qfxL!|=hxgIB-t{ie0is&RJ{tEu!59FiY;`fc*JHxGv# zZa=~~()gY6ciWCKj+Qhd%>~V)E$Jm89D-RDBiT{!Q5{%ogr=cxr z=TggMr_0S5EUlu6wEZa^I`zuiD2V#vZ=TemyZ>@<#K`{?0Z>UqK~#90?b^X@#2^#|&~ZB9N(r<;8+5@LS3wy| z3zXn1rI3rgQZ~xr+Z&If%)6~+!7y4MYyd<=L_|bHL_|bH{*lFU^W*WD0N}lcbMAS4 zjDc<2006yr)0jpxr33)q<_CaUE7o;2&2PGS&Itg>InR_5oO2jspw?<0>#PvM^xgw| z3CH5MZ9|N4Sr%K2Qw3lzA%uY5yLp_eLJ0HqT8wc4fZGZ<w7#4tpN6il!G1tb^taN zzz)Es0@wlAQ~)~wn+jkDU^5k9-FLg&nS7U5H1{3T*4l5M4R{J6%oroEpAB%%nYYCc zmmh)F8pasMHu)`j?-*mCwRUOoIP(wqVT*j;c}8GAmoQ5yr_Kb3h=_;)z$ac7W6BJe R7~%i`002ovPDHLkV1kb9$&LU3 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Customization/undergarments.rsi/sports_vulpkanin.png b/Resources/Textures/Mobs/Customization/undergarments.rsi/sports_vulpkanin.png new file mode 100644 index 0000000000000000000000000000000000000000..cb18450f7267df1ffc4e49e1b822c7cc482cf4c8 GIT binary patch literal 2956 zcmV;73v={|P)*-S^(FQ9 zpc)FEHp!=b&Y9$13NFYN3jk2Xoh5>7fr57cz?wX{Pym310zh$|NSF_RT?YW8EP1vF z0DGgT%@*=<0dO=$TqfkF1K?}{fF_NO;sW4i0FY>DU+|PKxJ?2p&I^Cl#={IoT4PxBy_X=g&}6Xv+@r<2u>7I5}C_Tibmh z)PG(4n^1T=$zDc&_6%Wl{So`CyqsD9&KLl;;g48K6+p`>0FAqU#EfH@VU-_aR zmSSGgWipAYjZJ=jzO_imw^j)HJN{?F-@q5=Su3{tT^_ctFqJ3IlCc%K@pH0r+=D(Cgl8}cuVDf~5F$cH7>FjKhZrN4h&{qV zJP{tTr>@xj~1du=z6pgtwj%_&FC5QGI|5;L!Y5z7+_S4h3R8f7zg8G z;aCEeib=60SP52v)nbiU8`g@ALfW8m00E1VlH5H}mg$IZtr!L7qpj>KkO@z~g9>M@&j7TJE5-o}D#Bd^yC?ggVtB41Qr-;48LE;+{m83_qC;5{S zNMh0oQU&P%=_IL_G(?&ptB{S!uHBiE7J$XCdNnhkraoOgMty;Ljrs}oJ{HC@VFj_WSY@ok ztedQNQ*@?yPZ3U8JEd_-@04+ksTy7yLX8rQCXE{!?=;z(ewvw@8#P-rA86sUEVLrE z^0jtoozohb%AD#pl|Qv)>fxz(wNY&g?I`Vq+IzISw8wOGbpmuGI#oJnbw+eqx?Z{& zx|?-R>JIBM^gQ%LdYko5={;quv%T3_>`HbAdsJUrKTuz;zgxdsf5O1jV79>ugC>Iq zh7?1NVXEO~!*;__BR!)qqeVsyMt6#^WZYCb1@~O)+fZcZ@gm}i=AH@|9uS~yyyThv%wu|zGMEJc>vEqkWnr@2fMPph4F z%Zg^@ZIx%$VAXHUvJSOgVclZ=+{VZz!DgdPr_D!ON82phI@^18YIebPE9~0rezmu- z=iArVUw5E8_&Y3hXmxlo-Ez8c`i|+h9T|>cj;kHp9X~iZJ4u}yorax_oRgimIp5+i zIT4(7oC_{^7ay0UF2`Nox;nYaTo1ec;%4QR>2|>F$qdsO!Wnfl2HXwYdG5R2`#jhl z$sW5r`aJbLd7ibNkGu@M1YUc+hP=(aGrSLaKlicqk@_6<8Rxok7jsYhV!i>sCBEH$ zYJRi*s{J1N8~CUBH~5bRI0h^XI30)&3<=yAcq>RJh#yoRG#cz2yg0ZcgcdR@q&nnL zs70tWv@Hw`3l7^9c7LYvO!3T?a0m|y-xU5J!Zc!j#P^Ye$cV_A$j4E3QH!EFXEA0a z%{nmab+k`(S@gZxX0zq9+hdet5@YIP#$$bB%VYcEY~mKjU5?j^7saA3Ir+cPXq>qTWqH58LjKGYY8RMDZnfo$7 zWyNMSWs|a#vyX|@#F^rb9NnA+IXx0fNwK7FzU%xg^GBs2(!IGz?%do~8B->ab;-@- ztK|K89(gr+Z}MaEk1SAKAYRZ_U{SEPV5rc)@au)Rh5Uu>i}V*QU(~hf7JetdguE31KJ158qfxL!|=hxgIB-t{ie0is&RJ{tEu!59FiY;`fc*JHxGv# zZa=~~()gY6ciWCKj+Qhd%>~V)E$Jm89D-RDBiT{!Q5{%ogr=cxr z=TggMr_0S5EUlu6wEZa^I`zuiD2V#vZ=TemyZ>@<#K`{?0S!q+K~#90?b^$Y!ypiV;mK+nF-Mo+8e9c|p(t4ef=QzM-_7_j;}O^gMg#x=0CnX`W{h5t*jx7~l6@L_|UevaV~@Gi&7>LI}rLK5mKKGy}?) z&&Rn4XUZ>sD}Fv-TZHNYl$C#E{4Cc+XjN5!|JM45?|`a`s>-q~FNqHT000000002+ z(V8|g%l-Ln+fLmKeY;#<*&I>2*C;VMk0Y5F*-S^(FQ9 zpc)FEHp!=b&Y9$13NFYN3jk2Xoh5>7fr57cz?wX{Pym310zh$|NSF_RT?YW8EP1vF z0DGgT%@*=<0dO=$TqfkF1K?}{fF_NO;sW4i0FY>DU+|PKxJ?2p&I^Cl#={IoT4PxBy_X=g&}6Xv+@r<2u>7I5}C_Tibmh z)PG(4n^1T=$zDc&_6%Wl{So`CyqsD9&KLl;;g48K6+p`>0FAqU#EfH@VU-_aR zmSSGgWipAYjZJ=jzO_imw^j)HJN{?F-@q5=Su3{tT^_ctFqJ3IlCc%K@pH0r+=D(Cgl8}cuVDf~5F$cH7>FjKhZrN4h&{qV zJP{tTr>@xj~1du=z6pgtwj%_&FC5QGI|5;L!Y5z7+_S4h3R8f7zg8G z;aCEeib=60SP52v)nbiU8`g@ALfW8m00E1VlH5H}mg$IZtr!L7qpj>KkO@z~g9>M@&j7TJE5-o}D#Bd^yC?ggVtB41Qr-;48LE;+{m83_qC;5{S zNMh0oQU&P%=_IL_G(?&ptB{S!uHBiE7J$XCdNnhkraoOgMty;Ljrs}oJ{HC@VFj_WSY@ok ztedQNQ*@?yPZ3U8JEd_-@04+ksTy7yLX8rQCXE{!?=;z(ewvw@8#P-rA86sUEVLrE z^0jtoozohb%AD#pl|Qv)>fxz(wNY&g?I`Vq+IzISw8wOGbpmuGI#oJnbw+eqx?Z{& zx|?-R>JIBM^gQ%LdYko5={;quv%T3_>`HbAdsJUrKTuz;zgxdsf5O1jV79>ugC>Iq zh7?1NVXEO~!*;__BR!)qqeVsyMt6#^WZYCb1@~O)+fZcZ@gm}i=AH@|9uS~yyyThv%wu|zGMEJc>vEqkWnr@2fMPph4F z%Zg^@ZIx%$VAXHUvJSOgVclZ=+{VZz!DgdPr_D!ON82phI@^18YIebPE9~0rezmu- z=iArVUw5E8_&Y3hXmxlo-Ez8c`i|+h9T|>cj;kHp9X~iZJ4u}yorax_oRgimIp5+i zIT4(7oC_{^7ay0UF2`Nox;nYaTo1ec;%4QR>2|>F$qdsO!Wnfl2HXwYdG5R2`#jhl z$sW5r`aJbLd7ibNkGu@M1YUc+hP=(aGrSLaKlicqk@_6<8Rxok7jsYhV!i>sCBEH$ zYJRi*s{J1N8~CUBH~5bRI0h^XI30)&3<=yAcq>RJh#yoRG#cz2yg0ZcgcdR@q&nnL zs70tWv@Hw`3l7^9c7LYvO!3T?a0m|y-xU5J!Zc!j#P^Ye$cV_A$j4E3QH!EFXEA0a z%{nmab+k`(S@gZxX0zq9+hdet5@YIP#$$bB%VYcEY~mKjU5?j^7saA3Ir+cPXq>qTWqH58LjKGYY8RMDZnfo$7 zWyNMSWs|a#vyX|@#F^rb9NnA+IXx0fNwK7FzU%xg^GBs2(!IGz?%do~8B->ab;-@- ztK|K89(gr+Z}MaEk1SAKAYRZ_U{SEPV5rc)@au)Rh5Uu>i}V*QU(~hf7JetdguE31KJ158qfxL!|=hxgIB-t{ie0is&RJ{tEu!59FiY;`fc*JHxGv# zZa=~~()gY6ciWCKj+Qhd%>~V)E$Jm89D-RDBiT{!Q5{%ogr=cxr z=TggMr_0S5EUlu6wEZa^I`zuiD2V#vZ=TemyZ>@<#K`{?0vSm}K~#90?V7=jgD?<9ht(E93qD1132q@Bk(M}) zTSy5=xqyUnN&y^lnLT998bY$M9W%RPo@6Ny;s5i&#*qg=5ClOG1VIpfg@~Z4Dndje zA|N6F06;{ls*2okPJDgmDMkMygU5fxXUs)fYp~W5-0nVTt>Jh)0({?*qA1>M^9N(h zsE>$Xtp%-hbbrAC7-K*wH94o00%HtVYhl0NN1F-3*Xg=$6-_`yYTK5UXxo+$kr0tp zKeW%FIlw*UvEQeXLx1y=U{nC}G3OtzF$X-;4<#x9r4)2sH@5ktn46_ZIF_i_V5;a} zA~=AiX`pGEJZ>2DgH|lBE;Vy4gkI4P)!zJDAbJjP88wr5h z05=i0B!@^NC4ahxRC(34R9j?a2w!80^l~ljRX*S!QpTq|8vZK+`B+Tn)}Hv z>Ix%Va|H|8g=hFh5q`_glAznQ&98pL-w93)AZQ4<;s?Ju*4!!bwI2D&!aQwPpX2uI z^QupLjP(Gk4uK^hzhEJ+`ozar6fyUnKk=Omt%{M6Uyg2;3d;_ve>}Noaf4 zkHcwxKY_77BYbPj7gI_Vr_+fpmrJyPSkC7&T(4Ky?RMkL7gM2@yb>IS0m`yW?IxJA zEMXXi Date: Sat, 13 Sep 2025 17:37:36 +0000 Subject: [PATCH 016/143] Automatic changelog update --- Resources/Changelog/Changelog.yml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index f548270c42..1bf3a544f8 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: murolem - changes: - - message: Silo can now accept diamonds. Shiny! - type: Tweak - id: 8447 - time: '2025-05-09T15:41:45.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/37305 - author: GaMEWAR360 changes: - message: 'Added new bounties for: Rings, Goliath Plates, Hivelord Remains' @@ -3947,3 +3940,10 @@ id: 8958 time: '2025-09-13T07:01:14.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/40103 +- author: Huaqas + changes: + - message: Vulpkanin now have Undergarments. + type: Add + id: 8959 + time: '2025-09-13T17:36:28.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/40321 From 3aece8d46ccfd3e34b4263221010ef9644125dd0 Mon Sep 17 00:00:00 2001 From: Winkarst-cpu <74284083+Winkarst-cpu@users.noreply.github.com> Date: Sat, 13 Sep 2025 22:51:13 +0300 Subject: [PATCH 017/143] Fix throwing objects causing pushback on the player who threw them in a not weightless environment (#40335) * Fix * Update Content.Shared/Gravity/SharedGravitySystem.cs Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com> * Update --------- Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com> --- Content.Shared/Gravity/SharedGravitySystem.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Content.Shared/Gravity/SharedGravitySystem.cs b/Content.Shared/Gravity/SharedGravitySystem.cs index a8f1be8287..d9a0a70d94 100644 --- a/Content.Shared/Gravity/SharedGravitySystem.cs +++ b/Content.Shared/Gravity/SharedGravitySystem.cs @@ -228,12 +228,12 @@ public abstract partial class SharedGravitySystem : EntitySystem private void OnThrowerImpulse(Entity entity, ref ThrowerImpulseEvent args) { - args.Push = true; + args.Push |= IsWeightless((entity.Owner, entity.Comp)); } private void OnShooterImpulse(Entity entity, ref ShooterImpulseEvent args) { - args.Push = true; + args.Push |= IsWeightless((entity.Owner, entity.Comp)); } } From e7dc6ae990c8c9d7e9f52b4d643af82b6b520c3f Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sun, 14 Sep 2025 03:18:18 +0200 Subject: [PATCH 018/143] Update Credits (#40342) Co-authored-by: PJBot --- Resources/Credits/GitHub.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Resources/Credits/GitHub.txt b/Resources/Credits/GitHub.txt index 89ab56e595..d776432727 100644 --- a/Resources/Credits/GitHub.txt +++ b/Resources/Credits/GitHub.txt @@ -1 +1 @@ -0leshe, 0tito, 0x6273, 12rabbits, 1337dakota, 13spacemen, 154942, 2013HORSEMEATSCANDAL, 20kdc, 21Melkuu, 3nderall, 4310v343k, 4dplanner, 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, alex, 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, 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, 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, he1acdvv, Hebi, Helix-ctrl, helm4142, Henry, HerCoyote23, HighTechPuddle, Hitlinemoss, hiucko, hivehum, Hmeister-fake, Hmeister-real, Hobbitmax, hobnob, HoidC, Holinka4ever, holyssss, HoofedEar, Hoolny, hord-brayden, Hoshizora, Hreno, Hrosts, htmlsystem, 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, liltenhead, linkbro1, LinkUyx, Litraxx, little-meow-meow, LittleBuilderJane, LittleNorthStar, LittleNyanCat, lizelive, ljm862, lmsnoise, localcc, lokachop, lolman360, Lomcastar, LordCarve, LordEclipse, lucas, LucasTheDrgn, luckyshotpictures, LudwigVonChesterfield, 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, OnyxTheBrave, opl-, Orange-Winds, OrangeMoronage9622, 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, 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, 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, SignalWalker, siigiil, silicon14wastaken, Simyon264, sirdragooon, Sirionaut, 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, stellar-novas, stewie523, stomf, Stop-Signs, stopbreaking, stopka-html, StrawberryMoses, Stray-Pyramid, strO0pwafel, Strol20, StStevens, Subversionary, sunbear-dev, supergdpwyl, superjj18, Supernorn, 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, 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, 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, alex, 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, 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, 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, HighTechPuddle, Hitlinemoss, hiucko, hivehum, Hmeister-fake, Hmeister-real, Hobbitmax, hobnob, HoidC, Holinka4ever, holyssss, HoofedEar, Hoolny, hord-brayden, Hoshizora, 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, liltenhead, linkbro1, linkuyx, Litraxx, little-meow-meow, LittleBuilderJane, LittleNorthStar, LittleNyanCat, lizelive, ljm862, lmsnoise, localcc, lokachop, lolman360, Lomcastar, 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, 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, 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, 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, SignalWalker, siigiil, silicon14wastaken, Simyon264, sirdragooon, Sirionaut, 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, 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, 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 From c317fa984002ea886cdf32f559951f0512835b20 Mon Sep 17 00:00:00 2001 From: MissKay1994 <15877268+MissKay1994@users.noreply.github.com> Date: Sun, 14 Sep 2025 01:44:32 -0400 Subject: [PATCH 019/143] Massively reduce how lethal Man-O-War shuttle is (#40339) no longer nukies in disguise --- .../Maps/Shuttles/ShuttleEvent/manowar.yml | 148 ++++++++---------- 1 file changed, 69 insertions(+), 79 deletions(-) diff --git a/Resources/Maps/Shuttles/ShuttleEvent/manowar.yml b/Resources/Maps/Shuttles/ShuttleEvent/manowar.yml index 3b0683a8e5..07ff870364 100644 --- a/Resources/Maps/Shuttles/ShuttleEvent/manowar.yml +++ b/Resources/Maps/Shuttles/ShuttleEvent/manowar.yml @@ -1,11 +1,11 @@ meta: format: 7 category: Grid - engineVersion: 250.0.0 - forkId: "" - forkVersion: "" - time: 03/29/2025 03:19:37 - entityCount: 448 + engineVersion: 266.0.0 + forkId: wizards + forkVersion: fc36a7a7c8904bde1bcfdb10dcce31e44b81a6d3 + time: 09/13/2025 22:03:45 + entityCount: 444 maps: [] grids: - 1 @@ -34,20 +34,20 @@ entities: chunks: 0,0: ind: 0,0 - tiles: fgAAAAABfgAAAAADfgAAAAAAfgAAAAACgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAABfgAAAAABgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAACfgAAAAACfgAAAAABfgAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAABfgAAAAAAfgAAAAAAfgAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAABfgAAAAAAfgAAAAACfgAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAABfgAAAAABfgAAAAADfgAAAAABgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAfQAAAAADgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAABfQAAAAACfQAAAAACgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAABfQAAAAABgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - version: 6 + tiles: fgAAAAABAH4AAAAAAwB+AAAAAAAAfgAAAAACAIEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH4AAAAAAAB+AAAAAAAAfgAAAAABAH4AAAAAAQCBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+AAAAAAIAfgAAAAACAH4AAAAAAQB+AAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAABAH4AAAAAAAB+AAAAAAAAfgAAAAAAAIEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH4AAAAAAQB+AAAAAAAAfgAAAAACAH4AAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+AAAAAAEAfgAAAAABAH4AAAAAAwB+AAAAAAEAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAH0AAAAAAwCBAAAAAAAAgQAAAAAAAIEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH0AAAAAAQB9AAAAAAIAfQAAAAACAIEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB9AAAAAAEAfQAAAAABAIEAAAAAAACBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAAIEAAAAAAACBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIEAAAAAAACBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== + version: 7 0,-1: ind: 0,-1 - tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAACfQAAAAADfQAAAAABgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAfQAAAAADfQAAAAABgQAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAADfgAAAAABfgAAAAACfgAAAAADgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAACfgAAAAAAfgAAAAABgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - version: 6 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIEAAAAAAACBAAAAAAAAgQAAAAAAAIEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB9AAAAAAIAfQAAAAADAH0AAAAAAQCBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAH0AAAAAAwB9AAAAAAEAgQAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH0AAAAAAACBAAAAAAAAgQAAAAAAAIEAAAAAAACBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+AAAAAAMAfgAAAAABAH4AAAAAAgB+AAAAAAMAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAH4AAAAAAgB+AAAAAAAAfgAAAAABAIEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== + version: 7 -1,-1: ind: -1,-1 - tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAfQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgQAAAAAAfQAAAAABfQAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAfgAAAAAAfgAAAAABfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAfgAAAAAAfgAAAAAAfgAAAAAB - version: 6 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACBAAAAAAAAgQAAAAAAAIEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAAH0AAAAAAAB9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAIEAAAAAAAB9AAAAAAEAfQAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIEAAAAAAACBAAAAAAAAgQAAAAAAAIEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACBAAAAAAAAfgAAAAAAAH4AAAAAAQB+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAAH4AAAAAAAB+AAAAAAAAfgAAAAABAA== + version: 7 -1,0: ind: -1,0 - tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAfgAAAAADfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAfgAAAAACfgAAAAABfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAfgAAAAAAfgAAAAADfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAfgAAAAADfgAAAAABfgAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAfgAAAAACfgAAAAAAfgAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAfgAAAAADfgAAAAAAfgAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAfQAAAAADfQAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - version: 6 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAAH4AAAAAAwB+AAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIEAAAAAAAB+AAAAAAIAfgAAAAABAH4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAfgAAAAAAAH4AAAAAAwB+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAAH4AAAAAAwB+AAAAAAEAfgAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAB+AAAAAAIAfgAAAAAAAH4AAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACBAAAAAAAAfgAAAAADAH4AAAAAAAB+AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAAIEAAAAAAACBAAAAAAAAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACBAAAAAAAAfQAAAAADAH0AAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAAIEAAAAAAAB9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACBAAAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== + version: 7 - type: Broadphase - type: Physics bodyStatus: InAir @@ -60,6 +60,7 @@ entities: - type: OccluderTree - type: SpreaderGrid - type: Shuttle + dampingModifier: 0.25 - type: GridPathfinding - type: Gravity gravityShakeSound: !type:SoundPathSpecifier @@ -73,7 +74,8 @@ entities: data: tiles: 0,0: - 0: 65535 + 0: 61439 + 1: 4096 0,-1: 0: 65287 -1,0: @@ -87,7 +89,7 @@ entities: -1,2: 0: 8 0,3: - 1: 256 + 2: 256 1,0: 0: 256 1,1: @@ -98,9 +100,9 @@ entities: 0: 49152 -1,-1: 0: 60940 - 1: 1 + 2: 1 1,-1: - 1: 1 + 2: 1 uniqueMixes: - volume: 2500 temperature: 293.15 @@ -117,6 +119,21 @@ entities: - 0 - 0 - 0 + - volume: 2500 + temperature: 293.15 + moles: + - 21.813705 + - 82.06108 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 - volume: 2500 immutable: True moles: @@ -135,6 +152,7 @@ entities: chunkSize: 4 - type: GasTileOverlay - type: RadiationGridResistance + - type: ImplicitRoof - proto: AirCanister entities: - uid: 295 @@ -178,6 +196,8 @@ entities: - type: Transform pos: -2.5,6.5 parent: 1 + - type: Fixtures + fixtures: {} - proto: ArrowRegular entities: - uid: 131 @@ -616,6 +636,14 @@ entities: rot: -1.5707963267948966 rad pos: 1.5,3.5 parent: 1 +- proto: BaseComputerAiAccess + entities: + - uid: 90 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -0.5,8.5 + parent: 1 - proto: Bed entities: - uid: 79 @@ -1522,44 +1550,6 @@ entities: - type: Physics canCollide: False - type: InsideEntityStorage -- proto: CombatMedipen - entities: - - uid: 98 - components: - - type: Transform - parent: 97 - - type: Physics - canCollide: False - - type: InsideEntityStorage - - uid: 108 - components: - - type: Transform - parent: 97 - - type: Physics - canCollide: False - - type: InsideEntityStorage - - uid: 109 - components: - - type: Transform - parent: 97 - - type: Physics - canCollide: False - - type: InsideEntityStorage - - uid: 111 - components: - - type: Transform - parent: 97 - - type: Physics - canCollide: False - - type: InsideEntityStorage -- proto: ComputerIFFSyndicate - entities: - - uid: 90 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -0.5,8.5 - parent: 1 - proto: ComputerRadar entities: - uid: 91 @@ -1620,8 +1610,8 @@ entities: immutable: False temperature: 293.14673 moles: - - 1.8856695 - - 7.0937095 + - 1.8968438 + - 7.1357465 - 0 - 0 - 0 @@ -1638,26 +1628,22 @@ entities: showEnts: False occludes: True ents: - - 101 - 100 - - 99 - - 98 - - 117 - - 116 - - 115 - - 114 - - 113 - - 112 - - 111 - - 110 - - 109 - - 108 - - 107 - - 106 - - 105 - - 104 - - 103 - 102 + - 103 + - 104 + - 105 + - 106 + - 107 + - 110 + - 112 + - 113 + - 114 + - 115 + - 116 + - 117 + - 99 + - 101 paper_label: !type:ContainerSlot showEnts: False occludes: True @@ -2439,15 +2425,17 @@ entities: - type: Transform pos: -2.6831818,-1.096235 parent: 1 - - uid: 360 +- proto: MedkitFilled + entities: + - uid: 98 components: - type: Transform - pos: 3.4418182,-1.0545683 + pos: 3.5848064,-1.0725303 parent: 1 - - uid: 361 + - uid: 108 components: - type: Transform - pos: 3.4522347,0.5183484 + pos: 3.4902766,0.476461 parent: 1 - proto: MiningWindow entities: @@ -2520,6 +2508,8 @@ entities: - type: Transform pos: 0.5,10.5 parent: 1 + - type: Fixtures + fixtures: {} - proto: Railing entities: - uid: 57 From 29da03b4e478213a3e5553fc5bd80e42ccb33109 Mon Sep 17 00:00:00 2001 From: PJBot Date: Sun, 14 Sep 2025 05:45:42 +0000 Subject: [PATCH 020/143] Automatic changelog update --- Resources/Changelog/Changelog.yml | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 1bf3a544f8..caa091a255 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,13 +1,4 @@ Entries: -- author: GaMEWAR360 - changes: - - message: 'Added new bounties for: Rings, Goliath Plates, Hivelord Remains' - type: Add - - message: 'Increased bounty prices for: Sharkminnow Teeth and Spacecarp Teeth' - type: Tweak - id: 8448 - time: '2025-05-09T15:52:30.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/34926 - author: sowelipililimute changes: - message: Reagent dispensers (Chem Dispenser, Booze Dispenser, Soda Dispenser) @@ -3947,3 +3938,10 @@ id: 8959 time: '2025-09-13T17:36:28.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/40321 +- author: MissKay1994 + changes: + - message: Greatly reduced lethality of Man-O-War shuttle + type: Tweak + id: 8960 + time: '2025-09-14T05:44:32.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/40339 From fdd4789d32ec4d9e35a02b33d64bf28b3e322a91 Mon Sep 17 00:00:00 2001 From: ScarKy0 <106310278+ScarKy0@users.noreply.github.com> Date: Sun, 14 Sep 2025 09:39:38 +0200 Subject: [PATCH 021/143] Give vulps correct undergarments (#40341) init --- Resources/Prototypes/Entities/Mobs/Species/vulpkanin.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Resources/Prototypes/Entities/Mobs/Species/vulpkanin.yml b/Resources/Prototypes/Entities/Mobs/Species/vulpkanin.yml index 2a44c70270..37a3366e3a 100644 --- a/Resources/Prototypes/Entities/Mobs/Species/vulpkanin.yml +++ b/Resources/Prototypes/Entities/Mobs/Species/vulpkanin.yml @@ -111,6 +111,8 @@ visible: false - type: HumanoidAppearance species: Vulpkanin + undergarmentTop: UndergarmentTopTanktopVulpkanin + undergarmentBottom: UndergarmentBottomBoxersVulpkanin hideLayersOnEquip: - Snout - SnoutCover From 1908317e3cffd83c8e80e51de16c9176f1d5f0e8 Mon Sep 17 00:00:00 2001 From: PJBot Date: Sun, 14 Sep 2025 07:40:46 +0000 Subject: [PATCH 022/143] Automatic changelog update --- Resources/Changelog/Changelog.yml | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index caa091a255..fcdaf8e414 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,12 +1,4 @@ Entries: -- author: sowelipililimute - changes: - - message: Reagent dispensers (Chem Dispenser, Booze Dispenser, Soda Dispenser) - now use a grid inventory for their internal storage - type: Tweak - id: 8449 - time: '2025-05-10T03:49:05.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/34205 - author: B-Kirill changes: - message: Meteors no longer slow down during flight. @@ -3945,3 +3937,11 @@ id: 8960 time: '2025-09-14T05:44:32.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/40339 +- author: ScarKy0 + changes: + - message: Vulpkanin now use the corrent undergarments when "Censor character nudity" + is enabled. + type: Fix + id: 8961 + time: '2025-09-14T07:39:38.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/40341 From 7616b9aa1cd4be8c64b3bbe1c7f176aa27bc1fd9 Mon Sep 17 00:00:00 2001 From: Huaqas Date: Sun, 14 Sep 2025 23:18:48 +0800 Subject: [PATCH 023/143] Fix Heterochromia for Vulpkanin (#40320) * Add More Holy Books * Revert "Add More Holy Books" This reverts commit 665eb0de10fe0784d634f9eaf672e60f18a62995. * Fix eyes * Add the undergarments and ftl designations. * Missed something. * second edited line didnt save for some reason * Im tired dont judge me * Fix eyes * Reverting stuff * fix markings * Its joever * Update meta.json * small tweak --------- Co-authored-by: ScarKy0 --- Resources/Locale/en-US/markings/tattoos.ftl | 6 ++++ .../Mobs/Customization/Markings/tattoos.yml | 32 ++++++++++++++++-- .../Mobs/Customization/tattoos.rsi/meta.json | 8 +++++ .../tattoos.rsi/tattoo_eye_vulpkanin_l.png | Bin 0 -> 146 bytes .../tattoos.rsi/tattoo_eye_vulpkanin_r.png | Bin 0 -> 148 bytes .../Mobs/Species/Vulpkanin/parts.rsi/eyes.png | Bin 143 -> 156 bytes 6 files changed, 44 insertions(+), 2 deletions(-) create mode 100644 Resources/Textures/Mobs/Customization/tattoos.rsi/tattoo_eye_vulpkanin_l.png create mode 100644 Resources/Textures/Mobs/Customization/tattoos.rsi/tattoo_eye_vulpkanin_r.png diff --git a/Resources/Locale/en-US/markings/tattoos.ftl b/Resources/Locale/en-US/markings/tattoos.ftl index c47f8ae962..188ae2ee85 100644 --- a/Resources/Locale/en-US/markings/tattoos.ftl +++ b/Resources/Locale/en-US/markings/tattoos.ftl @@ -34,6 +34,12 @@ marking-TattooEyeMothRight = Right Eye marking-TattooEyeMothLeft-tattoo_eye_moth_l = Left Eye marking-TattooEyeMothLeft = Left Eye +marking-TattooEyeVulpkaninRight-tattoo_eye_vulpkanin_r = Right Eye +marking-TattooEyeVulpkaninRight = Right Eye + +marking-TattooEyeVulpkaninLeft-tattoo_eye_vulpkanin_l = Left Eye +marking-TattooEyeVulpkaninLeft = Left Eye + marking-TattooEyeVoxRight-tattoo_eye_vox_r = Right Eye marking-TattooEyeVoxRight = Right Eye diff --git a/Resources/Prototypes/Entities/Mobs/Customization/Markings/tattoos.yml b/Resources/Prototypes/Entities/Mobs/Customization/Markings/tattoos.yml index f4b7e2aca2..b38d954cc8 100644 --- a/Resources/Prototypes/Entities/Mobs/Customization/Markings/tattoos.yml +++ b/Resources/Prototypes/Entities/Mobs/Customization/Markings/tattoos.yml @@ -114,7 +114,7 @@ id: TattooEyeRight bodyPart: Eyes markingCategory: [Head] - speciesRestriction: [Human, SlimePerson, Reptilian, Dwarf, Vulpkanin] + speciesRestriction: [Human, SlimePerson, Reptilian, Dwarf] coloring: default: type: @@ -128,7 +128,7 @@ id: TattooEyeLeft bodyPart: Eyes markingCategory: Head - speciesRestriction: [Human, SlimePerson, Reptilian, Dwarf, Vulpkanin] + speciesRestriction: [Human, SlimePerson, Reptilian, Dwarf] coloring: default: type: @@ -166,6 +166,34 @@ - sprite: Mobs/Customization/tattoos.rsi state: tattoo_eye_moth_l +- type: marking + id: TattooEyeVulpkaninRight + bodyPart: Eyes + markingCategory: [Head] + speciesRestriction: [Vulpkanin] + coloring: + default: + type: + !type:EyeColoring + negative: true + sprites: + - sprite: Mobs/Customization/tattoos.rsi + state: tattoo_eye_vulpkanin_r + +- type: marking + id: TattooEyeVulpkaninLeft + bodyPart: Eyes + markingCategory: Head + speciesRestriction: [Vulpkanin] + coloring: + default: + type: + !type:EyeColoring + negative: true + sprites: + - sprite: Mobs/Customization/tattoos.rsi + state: tattoo_eye_vulpkanin_l + - type: marking id: TattooEyeshadowUpper # there are a lot of deliberate limitations with this marking that should be pointed out. some of them may seem overly restrictive on the surface, but most of them are fully intentional. diff --git a/Resources/Textures/Mobs/Customization/tattoos.rsi/meta.json b/Resources/Textures/Mobs/Customization/tattoos.rsi/meta.json index fbaf3ae193..ccb852c5da 100644 --- a/Resources/Textures/Mobs/Customization/tattoos.rsi/meta.json +++ b/Resources/Textures/Mobs/Customization/tattoos.rsi/meta.json @@ -55,6 +55,14 @@ "name": "tattoo_eye_moth_l", "directions": 4 }, + { + "name": "tattoo_eye_vulpkanin_r", + "directions": 4 + }, + { + "name": "tattoo_eye_vulpkanin_l", + "directions": 4 + }, { "name": "eyeshadow_upper", "directions": 4 diff --git a/Resources/Textures/Mobs/Customization/tattoos.rsi/tattoo_eye_vulpkanin_l.png b/Resources/Textures/Mobs/Customization/tattoos.rsi/tattoo_eye_vulpkanin_l.png new file mode 100644 index 0000000000000000000000000000000000000000..7f24544eec7c95827ae8264c10a78acba55bd499 GIT binary patch literal 146 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=oCO|{#S9GG!XV7ZFl&wkP|(HG z#WAE}&f8mtTnq|4%nrYQ*+mx?>p2C!i<^)mX~f1bCH2{zT|jLRQ2)`Bfg!Ks9fRm| hwyugzOhC~K8H|~X0!li&=G_FT@pScbS?83{1OS70CH?>a literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Customization/tattoos.rsi/tattoo_eye_vulpkanin_r.png b/Resources/Textures/Mobs/Customization/tattoos.rsi/tattoo_eye_vulpkanin_r.png new file mode 100644 index 0000000000000000000000000000000000000000..9cb9407d037cc3eda596b552cfdb6069d4bd33dc GIT binary patch literal 148 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=oCO|{#S9GG!XV7ZFl&wkP|(fO z#WAE}&f8mxd<+Ua%nsjv*;X(3pb+8lE+qB2niU&^%t}?`)w|h&NFVdQ&MBb@03IhO>;M1& literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Species/Vulpkanin/parts.rsi/eyes.png b/Resources/Textures/Mobs/Species/Vulpkanin/parts.rsi/eyes.png index a4f647ba15dfad5da7894c2d4befc7ddf9cd8446..963d350db24570459922e9ad0ccea21a97f47ad5 100644 GIT binary patch delta 106 zcmeBYoWnT5GTG15#WAE}&f8lXc@G$Hus9goCf{CIJo^M^SIKpUpCuypYz%jd^k-UT zuaDei%*X%%?{EEPiof8=z~I;Mj=}$peZUcYe~^rn?lNUrr|QI)8$diyS3j3^P6 Date: Sun, 14 Sep 2025 15:19:56 +0000 Subject: [PATCH 024/143] Automatic changelog update --- Resources/Changelog/Changelog.yml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index fcdaf8e414..2ffdac36c2 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: B-Kirill - changes: - - message: Meteors no longer slow down during flight. - type: Fix - id: 8450 - time: '2025-05-10T03:55:35.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/37320 - author: Pronana changes: - message: You can no longer grind the smite snail @@ -3945,3 +3938,10 @@ id: 8961 time: '2025-09-14T07:39:38.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/40341 +- author: Huaqas + changes: + - message: Vulpkanin eye tattoos now correctly changes the color of the entire eye. + type: Fix + id: 8962 + time: '2025-09-14T15:18:49.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/40320 From 8c67c5b5a2f889efe7f65819761e55d65f733b02 Mon Sep 17 00:00:00 2001 From: Stefano Pigozzi Date: Sun, 14 Sep 2025 20:27:10 +0200 Subject: [PATCH 025/143] Add myself to credits (#40345) Co-authored-by: Steffo99 <1540885+Steffo99@users.noreply.github.com> From 9c3af67cd1535c3d9060bc74ec14b5c712ed783b Mon Sep 17 00:00:00 2001 From: Winkarst-cpu <74284083+Winkarst-cpu@users.noreply.github.com> Date: Sun, 14 Sep 2025 22:26:42 +0300 Subject: [PATCH 026/143] Fix wizard's recharge spell not adding charges to wands that use LimitedChargesComponent (#40347) * Fix * Update --- Content.Shared/Magic/SharedMagicSystem.cs | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/Content.Shared/Magic/SharedMagicSystem.cs b/Content.Shared/Magic/SharedMagicSystem.cs index 19d649d1f3..6afba65a39 100644 --- a/Content.Shared/Magic/SharedMagicSystem.cs +++ b/Content.Shared/Magic/SharedMagicSystem.cs @@ -1,6 +1,8 @@ using System.Numerics; using Content.Shared.Body.Components; using Content.Shared.Body.Systems; +using Content.Shared.Charges.Components; +using Content.Shared.Charges.Systems; using Content.Shared.Coordinates.Helpers; using Content.Shared.Doors.Components; using Content.Shared.Doors.Systems; @@ -63,6 +65,7 @@ public abstract class SharedMagicSystem : EntitySystem [Dependency] private readonly SharedMindSystem _mind = default!; [Dependency] private readonly SharedStunSystem _stun = default!; [Dependency] private readonly TurfSystem _turf = default!; + [Dependency] private readonly SharedChargesSystem _charges = default!; private static readonly ProtoId InvalidForGlobalSpawnSpellTag = "InvalidForGlobalSpawnSpell"; @@ -444,10 +447,13 @@ public abstract class SharedMagicSystem : EntitySystem ev.Handled = true; - if (wand == null || !TryComp(wand, out var basicAmmoComp) || basicAmmoComp.Count == null) + if (wand == null) return; - _gunSystem.UpdateBasicEntityAmmoCount(wand.Value, basicAmmoComp.Count.Value + ev.Charge, basicAmmoComp); + if (TryComp(wand, out var basicAmmoComp) && basicAmmoComp.Count != null) + _gunSystem.UpdateBasicEntityAmmoCount(wand.Value, basicAmmoComp.Count.Value + ev.Charge, basicAmmoComp); + else if (TryComp(wand, out var charges)) + _charges.AddCharges((wand.Value, charges), ev.Charge); } // End Charge Spells #endregion From cc6aa626da1cef7074399b763eb08c36147d48ae Mon Sep 17 00:00:00 2001 From: PJBot Date: Sun, 14 Sep 2025 19:27:49 +0000 Subject: [PATCH 027/143] Automatic changelog update --- Resources/Changelog/Changelog.yml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 2ffdac36c2..1475a2126b 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: Pronana - changes: - - message: You can no longer grind the smite snail - type: Fix - id: 8451 - time: '2025-05-10T05:06:19.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/37020 - author: PotentiallyTom changes: - message: Changed the gold requirement for the recipies of the Laser Cannon, X-Ray @@ -3945,3 +3938,10 @@ id: 8962 time: '2025-09-14T15:18:49.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/40320 +- author: Winkarst-cpu + changes: + - message: Fixed the wizard's recharge spell not working on some wands. + type: Fix + id: 8963 + time: '2025-09-14T19:26:42.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/40347 From 2ffe0db61f25701b5f1bc839b4705b85d377c5b0 Mon Sep 17 00:00:00 2001 From: ToastEnjoyer Date: Sun, 14 Sep 2025 18:46:03 -0500 Subject: [PATCH 028/143] Linked radiation shields on bagel (#40358) --- Resources/Maps/bagel.yml | 4801 +++++++++++++++++++++++++++----------- 1 file changed, 3417 insertions(+), 1384 deletions(-) diff --git a/Resources/Maps/bagel.yml b/Resources/Maps/bagel.yml index 5a47956c85..6fb0c12ab9 100644 --- a/Resources/Maps/bagel.yml +++ b/Resources/Maps/bagel.yml @@ -4,7 +4,7 @@ meta: engineVersion: 266.0.0 forkId: "" forkVersion: "" - time: 08/29/2025 14:48:28 + time: 09/14/2025 23:31:09 entityCount: 25523 maps: - 943 @@ -9294,108 +9294,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 immutable: True - moles: - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + moles: {} - 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 temperature: 293.15 moles: - - 0 - - 0 - - 0 - - 6666.982 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Plasma: 6666.982 - volume: 2500 temperature: 293.15 moles: - - 0 - - 6666.982 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Nitrogen: 6666.982 - volume: 2500 temperature: 293.15 moles: - - 6666.982 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 6666.982 - volume: 2500 temperature: 293.15 - moles: - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + moles: {} chunkSize: 4 - type: OccluderTree - type: Shuttle @@ -9621,34 +9544,12 @@ entities: uniqueMixes: - volume: 2500 immutable: True - moles: - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + moles: {} - 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 chunkSize: 4 - type: GasTileOverlay - type: RadiationGridResistance @@ -17085,18 +16986,8 @@ entities: immutable: False temperature: 293.14963 moles: - - 1.7459903 - - 6.568249 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 1.7459903 + Nitrogen: 6.568249 - type: Foldable folded: True - proto: BookHowToCookForFortySpaceman @@ -60233,18 +60124,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 1.6495836 - - 6.2055764 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 1.6495836 + Nitrogen: 6.2055764 - uid: 3380 components: - type: Transform @@ -60256,18 +60137,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 1.6495836 - - 6.2055764 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 1.6495836 + Nitrogen: 6.2055764 - uid: 3607 components: - type: Transform @@ -60279,18 +60150,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 1.6495836 - - 6.2055764 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 1.6495836 + Nitrogen: 6.2055764 - uid: 3853 components: - type: Transform @@ -60302,18 +60163,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 1.6495836 - - 6.2055764 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 1.6495836 + Nitrogen: 6.2055764 - uid: 4093 components: - type: Transform @@ -60325,18 +60176,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 1.6495836 - - 6.2055764 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 1.6495836 + Nitrogen: 6.2055764 - uid: 4095 components: - type: Transform @@ -60348,18 +60189,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 1.6495836 - - 6.2055764 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 1.6495836 + Nitrogen: 6.2055764 - uid: 4096 components: - type: Transform @@ -60371,18 +60202,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 1.6495836 - - 6.2055764 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 1.6495836 + Nitrogen: 6.2055764 - uid: 4617 components: - type: Transform @@ -60394,18 +60215,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 1.6495836 - - 6.2055764 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 1.6495836 + Nitrogen: 6.2055764 - uid: 5320 components: - type: Transform @@ -60417,18 +60228,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 1.6495836 - - 6.2055764 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 1.6495836 + Nitrogen: 6.2055764 - uid: 5772 components: - type: Transform @@ -60440,18 +60241,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 1.6495836 - - 6.2055764 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 1.6495836 + Nitrogen: 6.2055764 - uid: 9051 components: - type: Transform @@ -60468,18 +60259,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 1.6495836 - - 6.2055764 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 1.6495836 + Nitrogen: 6.2055764 - uid: 17783 components: - type: Transform @@ -60491,18 +60272,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 1.6495836 - - 6.2055764 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 1.6495836 + Nitrogen: 6.2055764 - uid: 17901 components: - type: Transform @@ -60514,18 +60285,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 1.6495836 - - 6.2055764 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 1.6495836 + Nitrogen: 6.2055764 - uid: 18492 components: - type: Transform @@ -60537,18 +60298,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 1.6495836 - - 6.2055764 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 1.6495836 + Nitrogen: 6.2055764 - uid: 19085 components: - type: Transform @@ -60560,18 +60311,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 1.6495836 - - 6.2055764 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 1.6495836 + Nitrogen: 6.2055764 - uid: 19687 components: - type: Transform @@ -60588,18 +60329,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 1.6495836 - - 6.2055764 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 1.6495836 + Nitrogen: 6.2055764 - uid: 19892 components: - type: Transform @@ -60611,18 +60342,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 1.6495836 - - 6.2055764 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 1.6495836 + Nitrogen: 6.2055764 - uid: 21980 components: - type: Transform @@ -60693,18 +60414,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 1.6495836 - - 6.2055764 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 1.6495836 + Nitrogen: 6.2055764 - uid: 4019 components: - type: Transform @@ -60716,18 +60427,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 1.6495836 - - 6.2055764 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 1.6495836 + Nitrogen: 6.2055764 - uid: 4099 components: - type: Transform @@ -60739,18 +60440,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 1.6495836 - - 6.2055764 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 1.6495836 + Nitrogen: 6.2055764 - uid: 5321 components: - type: Transform @@ -60762,18 +60453,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 1.6495836 - - 6.2055764 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 1.6495836 + Nitrogen: 6.2055764 - uid: 5624 components: - type: Transform @@ -60785,18 +60466,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 1.6495836 - - 6.2055764 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 1.6495836 + Nitrogen: 6.2055764 - uid: 7101 components: - type: Transform @@ -60808,18 +60479,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 1.6495836 - - 6.2055764 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 1.6495836 + Nitrogen: 6.2055764 - uid: 12851 components: - type: Transform @@ -60831,18 +60492,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 1.6495836 - - 6.2055764 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 1.6495836 + Nitrogen: 6.2055764 - uid: 15156 components: - type: Transform @@ -60864,18 +60515,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 1.6495836 - - 6.2055764 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 1.6495836 + Nitrogen: 6.2055764 - uid: 19893 components: - type: Transform @@ -60887,18 +60528,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 1.6495836 - - 6.2055764 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 1.6495836 + Nitrogen: 6.2055764 - uid: 22009 components: - type: Transform @@ -60942,18 +60573,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 1.6495836 - - 6.2055764 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 1.6495836 + Nitrogen: 6.2055764 - proto: ClosetL3JanitorFilled entities: - uid: 4101 @@ -60967,18 +60588,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 1.6495836 - - 6.2055764 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 1.6495836 + Nitrogen: 6.2055764 - proto: ClosetL3SecurityFilled entities: - uid: 1578 @@ -60999,18 +60610,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 1.6495836 - - 6.2055764 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 1.6495836 + Nitrogen: 6.2055764 - uid: 2964 components: - type: Transform @@ -61022,18 +60623,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 1.6495836 - - 6.2055764 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 1.6495836 + Nitrogen: 6.2055764 - uid: 3036 components: - type: Transform @@ -61045,18 +60636,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 1.6495836 - - 6.2055764 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 1.6495836 + Nitrogen: 6.2055764 - uid: 3037 components: - type: Transform @@ -61068,18 +60649,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 1.6495836 - - 6.2055764 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 1.6495836 + Nitrogen: 6.2055764 - proto: ClosetLegalFilled entities: - uid: 4210 @@ -61100,18 +60671,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 1.6495836 - - 6.2055764 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 1.6495836 + Nitrogen: 6.2055764 - proto: ClosetMaintenanceFilledRandom entities: - uid: 1973 @@ -61130,18 +60691,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 1.6495836 - - 6.2055764 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 1.6495836 + Nitrogen: 6.2055764 - uid: 4100 components: - type: Transform @@ -61153,18 +60704,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 1.6495836 - - 6.2055764 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 1.6495836 + Nitrogen: 6.2055764 - uid: 4102 components: - type: Transform @@ -61176,18 +60717,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 1.6495836 - - 6.2055764 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 1.6495836 + Nitrogen: 6.2055764 - uid: 5322 components: - type: Transform @@ -61199,18 +60730,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 1.6495836 - - 6.2055764 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 1.6495836 + Nitrogen: 6.2055764 - uid: 5323 components: - type: Transform @@ -61222,18 +60743,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 1.6495836 - - 6.2055764 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 1.6495836 + Nitrogen: 6.2055764 - uid: 9077 components: - type: Transform @@ -61245,18 +60756,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 1.6495836 - - 6.2055764 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 1.6495836 + Nitrogen: 6.2055764 - uid: 13607 components: - type: Transform @@ -61273,18 +60774,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 1.6495836 - - 6.2055764 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 1.6495836 + Nitrogen: 6.2055764 - uid: 19728 components: - type: Transform @@ -61296,18 +60787,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 1.6495836 - - 6.2055764 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 1.6495836 + Nitrogen: 6.2055764 - uid: 24328 components: - type: Transform @@ -61319,18 +60800,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 1.6495836 - - 6.2055764 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 1.6495836 + Nitrogen: 6.2055764 - proto: ClosetRadiationSuitFilled entities: - uid: 9589 @@ -61344,18 +60815,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 1.6495836 - - 6.2055764 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 1.6495836 + Nitrogen: 6.2055764 - uid: 11403 components: - type: Transform @@ -61372,18 +60833,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 1.6495836 - - 6.2055764 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 1.6495836 + Nitrogen: 6.2055764 - uid: 15543 components: - type: Transform @@ -61395,18 +60846,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 1.6495836 - - 6.2055764 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 1.6495836 + Nitrogen: 6.2055764 - uid: 16026 components: - type: Transform @@ -61438,18 +60879,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 1.6495836 - - 6.2055764 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 1.6495836 + Nitrogen: 6.2055764 - uid: 24329 components: - type: Transform @@ -61461,18 +60892,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 1.6495836 - - 6.2055764 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 1.6495836 + Nitrogen: 6.2055764 - proto: ClosetSteelBase entities: - uid: 3502 @@ -61486,18 +60907,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 1.6495836 - - 6.2055764 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 1.6495836 + Nitrogen: 6.2055764 - uid: 4007 components: - type: Transform @@ -61509,18 +60920,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 1.6495836 - - 6.2055764 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 1.6495836 + Nitrogen: 6.2055764 - uid: 6448 components: - type: Transform @@ -61532,18 +60933,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 1.6495836 - - 6.2055764 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 1.6495836 + Nitrogen: 6.2055764 - type: ContainerContainer containers: entity_storage: !type:Container @@ -61566,18 +60957,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 1.6495836 - - 6.2055764 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 1.6495836 + Nitrogen: 6.2055764 - uid: 11485 components: - type: Transform @@ -61589,18 +60970,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 1.6495836 - - 6.2055764 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 1.6495836 + Nitrogen: 6.2055764 - uid: 17902 components: - type: Transform @@ -61612,18 +60983,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 1.6495836 - - 6.2055764 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 1.6495836 + Nitrogen: 6.2055764 - proto: ClosetTool entities: - uid: 4103 @@ -61637,18 +60998,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 1.6495836 - - 6.2055764 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 1.6495836 + Nitrogen: 6.2055764 - proto: ClosetToolFilled entities: - uid: 4052 @@ -61662,18 +61013,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 1.6495836 - - 6.2055764 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 1.6495836 + Nitrogen: 6.2055764 - uid: 8714 components: - type: Transform @@ -61695,18 +61036,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 1.6495836 - - 6.2055764 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 1.6495836 + Nitrogen: 6.2055764 - proto: ClosetWallAtmospherics entities: - uid: 439 @@ -61720,18 +61051,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 1.6495836 - - 6.2055764 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 1.6495836 + Nitrogen: 6.2055764 - type: Fixtures fixtures: {} - uid: 15583 @@ -64321,18 +63642,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 1.6495836 - - 6.2055764 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 1.6495836 + Nitrogen: 6.2055764 - proto: CrateCoffin entities: - uid: 14213 @@ -64416,18 +63727,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 1.6495836 - - 6.2055764 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 1.6495836 + Nitrogen: 6.2055764 - uid: 3600 components: - type: Transform @@ -64439,18 +63740,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 1.6495836 - - 6.2055764 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 1.6495836 + Nitrogen: 6.2055764 - uid: 13604 components: - type: Transform @@ -64472,18 +63763,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 1.6495836 - - 6.2055764 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 1.6495836 + Nitrogen: 6.2055764 - proto: CrateEngineeringCableHV entities: - uid: 3440 @@ -64497,18 +63778,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 1.6495836 - - 6.2055764 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 1.6495836 + Nitrogen: 6.2055764 - uid: 11479 components: - type: Transform @@ -64520,18 +63791,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 1.6495836 - - 6.2055764 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 1.6495836 + Nitrogen: 6.2055764 - uid: 20420 components: - type: Transform @@ -64543,18 +63804,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 1.6495836 - - 6.2055764 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 1.6495836 + Nitrogen: 6.2055764 - proto: CrateEngineeringCableLV entities: - uid: 2034 @@ -64568,18 +63819,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 1.6495836 - - 6.2055764 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 1.6495836 + Nitrogen: 6.2055764 - proto: CrateEngineeringCableMV entities: - uid: 3756 @@ -64593,18 +63834,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 1.6495836 - - 6.2055764 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 1.6495836 + Nitrogen: 6.2055764 - uid: 11680 components: - type: Transform @@ -64616,18 +63847,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 1.6495836 - - 6.2055764 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 1.6495836 + Nitrogen: 6.2055764 - uid: 19314 components: - type: Transform @@ -64639,18 +63860,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 1.6495836 - - 6.2055764 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 1.6495836 + Nitrogen: 6.2055764 - proto: CrateEngineeringFoamGrenade entities: - uid: 13103 @@ -64732,18 +63943,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 1.6495836 - - 6.2055764 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 1.6495836 + Nitrogen: 6.2055764 - uid: 4598 components: - type: Transform @@ -64760,18 +63961,8 @@ entities: immutable: False temperature: 293.1496 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 @@ -64863,18 +64054,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 1.6495836 - - 6.2055764 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 1.6495836 + Nitrogen: 6.2055764 - proto: CrateNPCChicken entities: - uid: 5597 @@ -64909,18 +64090,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 1.8962268 - - 7.133425 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 1.8962268 + Nitrogen: 7.133425 - type: ContainerContainer containers: entity_storage: !type:Container @@ -64950,18 +64121,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 1.6495836 - - 6.2055764 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 1.6495836 + Nitrogen: 6.2055764 - proto: CrateSecurityRiot entities: - uid: 1137 @@ -64989,18 +64150,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 1.6495836 - - 6.2055764 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 1.6495836 + Nitrogen: 6.2055764 - proto: CrateTrashCart entities: - uid: 13600 @@ -65066,18 +64217,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 1.6495836 - - 6.2055764 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 1.6495836 + Nitrogen: 6.2055764 - proto: CrewMonitoringServer entities: - uid: 21479 @@ -112746,6 +111887,8 @@ entities: - type: Transform pos: -40.5,-33.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - proto: InflatableWallStack entities: - uid: 15194 @@ -113627,18 +112770,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 1.6495836 - - 6.2055764 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 1.6495836 + Nitrogen: 6.2055764 - uid: 2173 components: - type: Transform @@ -113650,18 +112783,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 1.6495836 - - 6.2055764 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 1.6495836 + Nitrogen: 6.2055764 - proto: LockerBotanistFilled entities: - uid: 2199 @@ -113722,18 +112845,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 1.6495836 - - 6.2055764 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 1.6495836 + Nitrogen: 6.2055764 - proto: LockerElectricalSuppliesFilled entities: - uid: 827 @@ -113757,18 +112870,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 1.6495836 - - 6.2055764 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 1.6495836 + Nitrogen: 6.2055764 - uid: 13483 components: - type: Transform @@ -113780,18 +112883,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 1.6495836 - - 6.2055764 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 1.6495836 + Nitrogen: 6.2055764 - uid: 19149 components: - type: Transform @@ -113803,18 +112896,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 1.6495836 - - 6.2055764 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 1.6495836 + Nitrogen: 6.2055764 - proto: LockerEngineerFilledHardsuit entities: - uid: 6543 @@ -113860,18 +112943,8 @@ entities: immutable: False temperature: 234.99966 moles: - - 1.877957 - - 7.0646954 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 1.877957 + Nitrogen: 7.0646954 - type: ContainerContainer containers: entity_storage: !type:Container @@ -113905,18 +112978,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 1.877957 - - 7.0646954 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 1.877957 + Nitrogen: 7.0646954 - type: ContainerContainer containers: entity_storage: !type:Container @@ -114060,18 +113123,8 @@ entities: immutable: False temperature: 293.1496 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 @@ -114162,18 +113215,8 @@ entities: immutable: False temperature: 293.1434 moles: - - 0.8599783 - - 3.235156 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 0.8599783 + Nitrogen: 3.235156 - type: ContainerContainer containers: entity_storage: !type:Container @@ -114218,18 +113261,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 1.6495836 - - 6.2055764 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 1.6495836 + Nitrogen: 6.2055764 - uid: 3524 components: - type: Transform @@ -114261,18 +113294,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 1.6495836 - - 6.2055764 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 1.6495836 + Nitrogen: 6.2055764 - uid: 21621 components: - type: Transform @@ -114284,18 +113307,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 1.6495836 - - 6.2055764 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 1.6495836 + Nitrogen: 6.2055764 - proto: LogicGateOr entities: - uid: 15846 @@ -115095,18 +114108,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 1.6495836 - - 6.2055764 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 1.6495836 + Nitrogen: 6.2055764 - uid: 319 components: - type: Transform @@ -115119,18 +114122,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 1.6495836 - - 6.2055764 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 1.6495836 + Nitrogen: 6.2055764 - uid: 325 components: - type: Transform @@ -115143,18 +114136,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 1.6495836 - - 6.2055764 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 1.6495836 + Nitrogen: 6.2055764 - uid: 1638 components: - type: Transform @@ -115172,18 +114155,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 1.6495836 - - 6.2055764 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 1.6495836 + Nitrogen: 6.2055764 - uid: 9177 components: - type: Transform @@ -115196,18 +114169,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 1.6495836 - - 6.2055764 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 1.6495836 + Nitrogen: 6.2055764 - uid: 9196 components: - type: Transform @@ -115220,18 +114183,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 1.6495836 - - 6.2055764 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 1.6495836 + Nitrogen: 6.2055764 - uid: 9197 components: - type: Transform @@ -115244,18 +114197,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 1.6495836 - - 6.2055764 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 1.6495836 + Nitrogen: 6.2055764 - uid: 9201 components: - type: Transform @@ -115268,18 +114211,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 1.6495836 - - 6.2055764 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 1.6495836 + Nitrogen: 6.2055764 - uid: 9490 components: - type: Transform @@ -115292,18 +114225,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 1.6495836 - - 6.2055764 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 1.6495836 + Nitrogen: 6.2055764 - uid: 11882 components: - type: Transform @@ -115316,18 +114239,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 1.6495836 - - 6.2055764 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 1.6495836 + Nitrogen: 6.2055764 - uid: 11883 components: - type: Transform @@ -115340,18 +114253,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 1.6495836 - - 6.2055764 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 1.6495836 + Nitrogen: 6.2055764 - uid: 12869 components: - type: Transform @@ -115364,18 +114267,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 1.6495836 - - 6.2055764 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 1.6495836 + Nitrogen: 6.2055764 - proto: MouseTimedSpawner entities: - uid: 8930 @@ -116600,35 +115493,47 @@ entities: - type: Transform pos: 48.5,-26.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 3007 components: - type: Transform pos: 49.5,-26.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 3008 components: - type: Transform rot: -1.5707963267948966 rad pos: 50.5,-28.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 3009 components: - type: Transform rot: -1.5707963267948966 rad pos: 50.5,-27.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 3010 components: - type: Transform rot: -1.5707963267948966 rad pos: 50.5,-29.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 23865 components: - type: Transform rot: -1.5707963267948966 rad pos: -54.5,-3.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - proto: PlasmaWindoorSecureScienceLocked entities: - uid: 23868 @@ -116636,16 +115541,22 @@ entities: - type: Transform pos: -57.5,-2.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 23869 components: - type: Transform pos: -56.5,-2.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 23870 components: - type: Transform pos: -55.5,-2.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - proto: PlasticFlapsAirtightClear entities: - uid: 1873 @@ -123619,262 +122530,362 @@ entities: - type: Transform pos: -53.5,51.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 7333 components: - type: Transform pos: -53.5,49.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 7777 components: - type: Transform pos: 67.5,-27.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 7778 components: - type: Transform pos: 68.5,-26.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 7779 components: - type: Transform pos: 69.5,-27.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 7783 components: - type: Transform pos: 68.5,-28.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 7942 components: - type: Transform pos: -12.5,-4.5 parent: 7536 + - type: DeltaPressure + gridUid: 7536 - uid: 7943 components: - type: Transform pos: -10.5,-4.5 parent: 7536 + - type: DeltaPressure + gridUid: 7536 - uid: 7944 components: - type: Transform pos: -10.5,-0.5 parent: 7536 + - type: DeltaPressure + gridUid: 7536 - uid: 7945 components: - type: Transform pos: -12.5,-0.5 parent: 7536 + - type: DeltaPressure + gridUid: 7536 - uid: 7946 components: - type: Transform pos: -4.5,-4.5 parent: 7536 + - type: DeltaPressure + gridUid: 7536 - uid: 7947 components: - type: Transform pos: -0.5,-4.5 parent: 7536 + - type: DeltaPressure + gridUid: 7536 - uid: 7948 components: - type: Transform pos: 3.5,-4.5 parent: 7536 + - type: DeltaPressure + gridUid: 7536 - uid: 7949 components: - type: Transform pos: 2.5,-0.5 parent: 7536 + - type: DeltaPressure + gridUid: 7536 - uid: 7950 components: - type: Transform pos: 3.5,-0.5 parent: 7536 + - type: DeltaPressure + gridUid: 7536 - uid: 7951 components: - type: Transform pos: 4.5,-0.5 parent: 7536 + - type: DeltaPressure + gridUid: 7536 - uid: 7952 components: - type: Transform pos: 12.5,-4.5 parent: 7536 + - type: DeltaPressure + gridUid: 7536 - uid: 7953 components: - type: Transform pos: 14.5,-2.5 parent: 7536 + - type: DeltaPressure + gridUid: 7536 - uid: 7954 components: - type: Transform pos: 12.5,-0.5 parent: 7536 + - type: DeltaPressure + gridUid: 7536 - uid: 9376 components: - type: Transform pos: -56.5,4.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 12602 components: - type: Transform pos: -56.5,3.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 12610 components: - type: Transform pos: -56.5,2.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 14807 components: - type: Transform pos: -30.5,44.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 14808 components: - type: Transform pos: -33.5,45.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 14820 components: - type: Transform pos: -42.5,38.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 14959 components: - type: Transform pos: -42.5,44.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 14963 components: - type: Transform pos: -42.5,36.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 14970 components: - type: Transform pos: -31.5,44.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 14975 components: - type: Transform pos: -33.5,46.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 15031 components: - type: Transform pos: -42.5,42.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 15037 components: - type: Transform pos: -42.5,40.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 15040 components: - type: Transform pos: -42.5,34.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 15043 components: - type: Transform pos: -29.5,46.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 15046 components: - type: Transform pos: -32.5,44.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 15051 components: - type: Transform pos: -42.5,32.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 15052 components: - type: Transform pos: -29.5,45.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 15174 components: - type: Transform rot: 1.5707963267948966 rad pos: -19.5,50.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 15273 components: - type: Transform pos: -29.5,47.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 15276 components: - type: Transform pos: -33.5,47.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 15336 components: - type: Transform rot: 1.5707963267948966 rad pos: -20.5,50.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 15390 components: - type: Transform rot: 1.5707963267948966 rad pos: -20.5,54.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 15422 components: - type: Transform rot: 1.5707963267948966 rad pos: -21.5,50.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 15427 components: - type: Transform rot: 1.5707963267948966 rad pos: -22.5,51.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 15451 components: - type: Transform rot: 1.5707963267948966 rad pos: -21.5,54.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 15499 components: - type: Transform rot: 1.5707963267948966 rad pos: -22.5,52.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 15500 components: - type: Transform rot: 1.5707963267948966 rad pos: -22.5,53.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 16957 components: - type: Transform rot: 1.5707963267948966 rad pos: -18.5,51.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 16961 components: - type: Transform rot: 1.5707963267948966 rad pos: -18.5,53.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 16966 components: - type: Transform rot: 1.5707963267948966 rad pos: -19.5,54.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 23455 components: - type: Transform pos: -60.5,41.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - proto: ReinforcedWindow entities: - uid: 10 @@ -123882,4168 +122893,5826 @@ entities: - type: Transform pos: -25.5,-12.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 209 components: - type: Transform pos: 7.5,-18.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 256 components: - type: Transform pos: 57.5,-5.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 260 components: - type: Transform pos: 57.5,-6.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 320 components: - type: Transform pos: 57.5,-7.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 385 components: - type: Transform pos: -1.5,-14.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 386 components: - type: Transform pos: -1.5,-13.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 387 components: - type: Transform pos: 2.5,-13.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 388 components: - type: Transform pos: 2.5,-14.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 389 components: - type: Transform pos: 2.5,-16.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 390 components: - type: Transform pos: 2.5,-17.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 391 components: - type: Transform pos: -1.5,-16.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 392 components: - type: Transform pos: -1.5,-17.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 393 components: - type: Transform pos: -1.5,-19.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 394 components: - type: Transform pos: -1.5,-20.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 395 components: - type: Transform pos: 2.5,-19.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 396 components: - type: Transform pos: 2.5,-20.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 404 components: - type: Transform pos: 20.5,2.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 408 components: - type: Transform pos: 20.5,1.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 493 components: - type: Transform pos: -29.5,-12.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 524 components: - type: Transform pos: -5.5,7.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 525 components: - type: Transform pos: 5.5,7.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 563 components: - type: Transform pos: -68.5,11.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 603 components: - type: Transform pos: 14.5,-4.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 604 components: - type: Transform pos: -4.5,7.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 605 components: - type: Transform pos: -2.5,8.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 607 components: - type: Transform pos: -1.5,8.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 608 components: - type: Transform pos: -0.5,8.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 609 components: - type: Transform pos: 1.5,8.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 610 components: - type: Transform pos: 2.5,8.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 611 components: - type: Transform pos: 3.5,8.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 613 components: - type: Transform pos: 6.5,7.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 637 components: - type: Transform pos: -9.5,1.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 646 components: - type: Transform pos: 6.5,-18.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 665 components: - type: Transform pos: 5.5,-20.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 768 components: - type: Transform pos: 5.5,-19.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 797 components: - type: Transform pos: -17.5,12.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 798 components: - type: Transform pos: -17.5,11.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 813 components: - type: Transform rot: -1.5707963267948966 rad pos: -16.5,-21.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 845 components: - type: Transform rot: -1.5707963267948966 rad pos: -15.5,-21.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 993 components: - type: Transform rot: 1.5707963267948966 rad pos: -21.5,-17.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 1126 components: - type: Transform rot: 1.5707963267948966 rad pos: -14.5,-3.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 1131 components: - type: Transform pos: -17.5,-10.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 1133 components: - type: Transform rot: 1.5707963267948966 rad pos: -14.5,-2.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 1139 components: - type: Transform rot: 1.5707963267948966 rad pos: -14.5,-1.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 1140 components: - type: Transform rot: 1.5707963267948966 rad pos: -14.5,-0.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 1156 components: - type: Transform rot: 1.5707963267948966 rad pos: -7.5,-13.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 1158 components: - type: Transform rot: 1.5707963267948966 rad pos: -7.5,-14.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 1174 components: - type: Transform rot: 1.5707963267948966 rad pos: -19.5,-10.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 1192 components: - type: Transform pos: -6.5,-32.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 1193 components: - type: Transform pos: -7.5,-32.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 1194 components: - type: Transform pos: -8.5,-32.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 1337 components: - type: Transform pos: 6.5,-26.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 1338 components: - type: Transform pos: 5.5,-26.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 1442 components: - type: Transform pos: 9.5,-17.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 1444 components: - type: Transform pos: 9.5,-15.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 1450 components: - type: Transform pos: 2.5,-36.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 1474 components: - type: Transform rot: 1.5707963267948966 rad pos: -20.5,-10.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 1550 components: - type: Transform pos: -21.5,-18.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 1551 components: - type: Transform pos: -21.5,-19.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 1552 components: - type: Transform pos: -22.5,-2.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 1676 components: - type: Transform pos: -23.5,-25.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 1723 components: - type: Transform pos: -25.5,-25.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 1813 components: - type: Transform rot: 1.5707963267948966 rad pos: -7.5,-12.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 1836 components: - type: Transform pos: -28.5,-1.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 1838 components: - type: Transform pos: -29.5,-1.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 1916 components: - type: Transform rot: 1.5707963267948966 rad pos: -5.5,-16.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 1926 components: - type: Transform rot: -1.5707963267948966 rad pos: -11.5,-10.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 1927 components: - type: Transform rot: -1.5707963267948966 rad pos: -11.5,-9.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 2057 components: - type: Transform pos: -30.5,-27.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 2063 components: - type: Transform pos: -9.5,-33.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 2112 components: - type: Transform rot: -1.5707963267948966 rad pos: -25.5,-15.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 2139 components: - type: Transform pos: 38.5,-15.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 2152 components: - type: Transform pos: 32.5,-15.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 2153 components: - type: Transform pos: 34.5,-15.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 2155 components: - type: Transform pos: 35.5,-15.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 2411 components: - type: Transform pos: 36.5,-28.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 2517 components: - type: Transform pos: 42.5,-32.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 2542 components: - type: Transform pos: 10.5,-10.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 2591 components: - type: Transform pos: -69.5,-17.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 2657 components: - type: Transform pos: 36.5,-22.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 2663 components: - type: Transform pos: 42.5,-28.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 2668 components: - type: Transform pos: 42.5,-26.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 2683 components: - type: Transform pos: 41.5,-25.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 2739 components: - type: Transform pos: 26.5,-42.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 2740 components: - type: Transform pos: 27.5,-42.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 2741 components: - type: Transform pos: 35.5,-42.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 2742 components: - type: Transform pos: 36.5,-42.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 2744 components: - type: Transform pos: 30.5,-41.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 2745 components: - type: Transform pos: 31.5,-41.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 2746 components: - type: Transform pos: 32.5,-41.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 2767 components: - type: Transform pos: 36.5,-24.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 2975 components: - type: Transform pos: 53.5,-25.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 2976 components: - type: Transform pos: 53.5,-26.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 2977 components: - type: Transform pos: 53.5,-27.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 2978 components: - type: Transform pos: 53.5,-28.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 3032 components: - type: Transform pos: -62.5,-24.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 3040 components: - type: Transform pos: 46.5,-22.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 3084 components: - type: Transform pos: 50.5,-12.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 3101 components: - type: Transform pos: 51.5,-19.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 3102 components: - type: Transform pos: 49.5,-19.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 3105 components: - type: Transform pos: 48.5,-19.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 3131 components: - type: Transform pos: 32.5,-59.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 3132 components: - type: Transform pos: 30.5,-59.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 3140 components: - type: Transform pos: -64.5,-9.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 3213 components: - type: Transform pos: 47.5,-19.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 3326 components: - type: Transform pos: 30.5,-58.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 3359 components: - type: Transform pos: -54.5,-30.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 3360 components: - type: Transform pos: -68.5,7.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 3371 components: - type: Transform pos: -64.5,-2.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 3388 components: - type: Transform pos: -64.5,-13.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 3400 components: - type: Transform pos: -59.5,-25.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 3439 components: - type: Transform pos: 56.5,-26.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 3442 components: - type: Transform pos: 50.5,-16.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 3443 components: - type: Transform pos: 56.5,-27.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 3444 components: - type: Transform pos: 50.5,-14.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 3445 components: - type: Transform pos: 50.5,-13.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 3450 components: - type: Transform pos: 56.5,-31.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 3470 components: - type: Transform pos: 60.5,-35.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 3501 components: - type: Transform pos: 55.5,-33.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 3503 components: - type: Transform pos: 54.5,-33.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 3701 components: - type: Transform pos: 57.5,-12.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 3704 components: - type: Transform pos: 57.5,-11.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 3739 components: - type: Transform pos: 54.5,19.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 3796 components: - type: Transform pos: -1.5,-33.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 3797 components: - type: Transform pos: -1.5,-34.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 3809 components: - type: Transform pos: -16.5,-39.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 3810 components: - type: Transform pos: -16.5,-40.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 3811 components: - type: Transform pos: -16.5,-41.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 3824 components: - type: Transform pos: -1.5,-38.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 3825 components: - type: Transform pos: -1.5,-37.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 3851 components: - type: Transform pos: -18.5,-44.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 3877 components: - type: Transform pos: -11.5,-38.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 3878 components: - type: Transform pos: -12.5,-38.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 3879 components: - type: Transform pos: -10.5,-38.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 3902 components: - type: Transform pos: -8.5,-36.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 3903 components: - type: Transform pos: -7.5,-36.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 3904 components: - type: Transform pos: -6.5,-36.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 3908 components: - type: Transform pos: -11.5,-35.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 4056 components: - type: Transform pos: -36.5,-29.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 4067 components: - type: Transform pos: -36.5,-25.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 4068 components: - type: Transform pos: -35.5,-25.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 4069 components: - type: Transform pos: -34.5,-25.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 4070 components: - type: Transform pos: -34.5,-29.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 4071 components: - type: Transform pos: -35.5,-29.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 4075 components: - type: Transform pos: 29.5,-56.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 4084 components: - type: Transform pos: -40.5,-27.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 4088 components: - type: Transform pos: 46.5,-20.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 4091 components: - type: Transform pos: 39.5,-21.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 4301 components: - type: Transform pos: -51.5,-35.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 4341 components: - type: Transform pos: -52.5,-33.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 4342 components: - type: Transform pos: -50.5,-27.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 4343 components: - type: Transform pos: -51.5,-27.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 4344 components: - type: Transform pos: -52.5,-28.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 4446 components: - type: Transform pos: -55.5,-30.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 4447 components: - type: Transform pos: -56.5,-32.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 4454 components: - type: Transform pos: -66.5,-2.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 4456 components: - type: Transform pos: -67.5,-1.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 4466 components: - type: Transform pos: -52.5,-29.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 4493 components: - type: Transform pos: 42.5,-16.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 4512 components: - type: Transform pos: 8.5,-18.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 4518 components: - type: Transform pos: 40.5,-25.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 4531 components: - type: Transform pos: 14.5,-13.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 4549 components: - type: Transform pos: -62.5,-6.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 4599 components: - type: Transform pos: 59.5,-19.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 4600 components: - type: Transform pos: 59.5,-18.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 4601 components: - type: Transform pos: 59.5,-17.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 4623 components: - type: Transform pos: 2.5,-35.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 4750 components: - type: Transform pos: -19.5,-52.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 4751 components: - type: Transform pos: -18.5,-52.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 4752 components: - type: Transform pos: -17.5,-52.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 4868 components: - type: Transform pos: -11.5,-56.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 4869 components: - type: Transform pos: -10.5,-56.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 4871 components: - type: Transform pos: -9.5,-56.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 4880 components: - type: Transform pos: -3.5,-72.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 4881 components: - type: Transform pos: -3.5,-73.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 4882 components: - type: Transform pos: -12.5,-56.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 4883 components: - type: Transform pos: -13.5,-56.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 4893 components: - type: Transform pos: 10.5,-56.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 4900 components: - type: Transform pos: -21.5,-53.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 5035 components: - type: Transform pos: -15.5,-56.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 5038 components: - type: Transform pos: -18.5,-56.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 5039 components: - type: Transform pos: -8.5,-56.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 5041 components: - type: Transform pos: -7.5,-56.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 5052 components: - type: Transform pos: -16.5,-56.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 5080 components: - type: Transform pos: -21.5,-55.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 5114 components: - type: Transform pos: 1.5,-79.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 5120 components: - type: Transform pos: 13.5,-55.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 5140 components: - type: Transform pos: -20.5,-53.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 5151 components: - type: Transform pos: 11.5,-55.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 5152 components: - type: Transform pos: 11.5,-53.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 5153 components: - type: Transform pos: 4.5,-71.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 5154 components: - type: Transform pos: 5.5,-71.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 5156 components: - type: Transform pos: 4.5,-73.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 5157 components: - type: Transform pos: 4.5,-72.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 5158 components: - type: Transform pos: 6.5,-71.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 5163 components: - type: Transform pos: 5.5,-69.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 5238 components: - type: Transform pos: 9.5,-56.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 5243 components: - type: Transform pos: -61.5,30.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 5257 components: - type: Transform pos: -23.5,-35.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 5259 components: - type: Transform pos: -23.5,-36.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 5261 components: - type: Transform pos: -25.5,-36.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 5262 components: - type: Transform pos: -23.5,-34.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 5276 components: - type: Transform pos: -64.5,-12.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 5308 components: - type: Transform pos: 66.5,-37.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 5332 components: - type: Transform pos: -25.5,-35.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 5347 components: - type: Transform pos: 9.5,2.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 5348 components: - type: Transform pos: 10.5,6.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 5349 components: - type: Transform pos: 8.5,5.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 5353 components: - type: Transform pos: 10.5,1.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 5354 components: - type: Transform pos: 8.5,4.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 5355 components: - type: Transform pos: 8.5,3.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 5356 components: - type: Transform pos: 11.5,1.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 5357 components: - type: Transform pos: 12.5,1.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 5362 components: - type: Transform pos: 13.5,2.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 5363 components: - type: Transform pos: 13.5,6.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 5371 components: - type: Transform pos: 9.5,6.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 5372 components: - type: Transform pos: 14.5,3.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 5373 components: - type: Transform pos: 14.5,5.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 5374 components: - type: Transform pos: 12.5,6.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 5457 components: - type: Transform pos: 14.5,-3.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 5458 components: - type: Transform pos: 14.5,-2.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 5519 components: - type: Transform pos: -45.5,8.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 5520 components: - type: Transform pos: -45.5,9.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 5521 components: - type: Transform pos: -45.5,7.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 5548 components: - type: Transform pos: -39.5,3.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 5555 components: - type: Transform pos: -39.5,4.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 5566 components: - type: Transform pos: -45.5,2.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 5580 components: - type: Transform pos: -45.5,4.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 5588 components: - type: Transform pos: -48.5,7.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 5591 components: - type: Transform pos: -48.5,8.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 5592 components: - type: Transform pos: -48.5,9.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 5631 components: - type: Transform pos: -19.5,10.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 5635 components: - type: Transform pos: -17.5,13.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 5637 components: - type: Transform pos: -21.5,12.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 5638 components: - type: Transform pos: -21.5,13.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 5641 components: - type: Transform pos: -19.5,14.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 5793 components: - type: Transform pos: -63.5,28.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 5804 components: - type: Transform pos: 66.5,-39.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 5868 components: - type: Transform pos: -25.5,-34.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 5926 components: - type: Transform pos: 43.5,-25.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 6055 components: - type: Transform pos: -55.5,-24.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 6061 components: - type: Transform pos: -53.5,-24.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 6118 components: - type: Transform pos: -47.5,10.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 6169 components: - type: Transform pos: -3.5,-69.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 6183 components: - type: Transform pos: 26.5,2.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 6188 components: - type: Transform pos: 26.5,1.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 6211 components: - type: Transform pos: -19.5,-56.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 6389 components: - type: Transform pos: -67.5,5.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 6414 components: - type: Transform pos: 4.5,-69.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 6439 components: - type: Transform pos: 16.5,-51.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 6440 components: - type: Transform pos: 17.5,-51.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 6441 components: - type: Transform pos: 18.5,-51.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 6463 components: - type: Transform pos: 57.5,-13.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 6520 components: - type: Transform pos: 4.5,16.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 6521 components: - type: Transform pos: 6.5,16.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 6523 components: - type: Transform pos: 7.5,18.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 6529 components: - type: Transform pos: 7.5,20.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 6538 components: - type: Transform pos: 12.5,21.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 6539 components: - type: Transform pos: 13.5,21.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 6607 components: - type: Transform pos: 8.5,22.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 6659 components: - type: Transform pos: 28.5,1.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 6720 components: - type: Transform pos: 14.5,23.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 6726 components: - type: Transform pos: 14.5,25.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 6728 components: - type: Transform pos: 14.5,24.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 6805 components: - type: Transform pos: 17.5,29.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 6917 components: - type: Transform pos: 15.5,29.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 6950 components: - type: Transform pos: -56.5,-30.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 6951 components: - type: Transform pos: -55.5,-32.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 6959 components: - type: Transform pos: -53.5,-32.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 6960 components: - type: Transform pos: -54.5,-32.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 6965 components: - type: Transform pos: -53.5,-30.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 6969 components: - type: Transform pos: 26.5,0.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 6984 components: - type: Transform pos: 45.5,-25.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 7068 components: - type: Transform pos: -47.5,6.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 7075 components: - type: Transform pos: -46.5,6.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 7094 components: - type: Transform pos: -40.5,-6.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 7096 components: - type: Transform pos: -40.5,-7.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 7106 components: - type: Transform pos: -2.5,-59.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 7126 components: - type: Transform pos: 3.5,-74.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 7193 components: - type: Transform pos: 9.5,-12.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 7199 components: - type: Transform pos: 9.5,-13.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 7223 components: - type: Transform pos: 12.5,-9.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 7224 components: - type: Transform pos: 10.5,-14.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 7244 components: - type: Transform pos: 3.5,-59.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 7245 components: - type: Transform pos: -50.5,-35.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 7246 components: - type: Transform pos: -52.5,-34.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 7247 components: - type: Transform pos: -49.5,-35.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 7248 components: - type: Transform pos: -45.5,-35.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 7249 components: - type: Transform pos: -44.5,-35.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 7251 components: - type: Transform pos: -43.5,-35.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 7252 components: - type: Transform pos: -45.5,-27.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 7253 components: - type: Transform pos: -49.5,-27.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 7318 components: - type: Transform pos: -46.5,-39.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 7319 components: - type: Transform pos: -48.5,-39.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 7320 components: - type: Transform pos: -48.5,-38.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 7321 components: - type: Transform pos: -48.5,-37.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 7322 components: - type: Transform pos: -48.5,-36.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 7323 components: - type: Transform pos: -46.5,-38.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 7324 components: - type: Transform pos: -46.5,-37.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 7325 components: - type: Transform pos: -46.5,-36.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 7346 components: - type: Transform pos: -5.5,-71.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 7353 components: - type: Transform pos: 20.5,0.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 7361 components: - type: Transform pos: -0.5,-80.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 7365 components: - type: Transform pos: 3.5,-76.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 7375 components: - type: Transform pos: 2.5,-78.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 7376 components: - type: Transform pos: -1.5,-78.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 7377 components: - type: Transform pos: 1.5,-78.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 7389 components: - type: Transform pos: -2.5,-75.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 7390 components: - type: Transform pos: 3.5,-77.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 7391 components: - type: Transform pos: -0.5,-79.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 7392 components: - type: Transform pos: -0.5,-78.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 7393 components: - type: Transform pos: 1.5,-80.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 7409 components: - type: Transform pos: -2.5,-77.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 7410 components: - type: Transform pos: -2.5,-76.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 7415 components: - type: Transform pos: -2.5,-74.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 7417 components: - type: Transform pos: -5.5,-69.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 7418 components: - type: Transform pos: -4.5,-71.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 7419 components: - type: Transform pos: -3.5,-71.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 7442 components: - type: Transform pos: -3.5,-64.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 7445 components: - type: Transform pos: -4.5,-64.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 7446 components: - type: Transform pos: -5.5,-64.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 7452 components: - type: Transform pos: -4.5,-69.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 7462 components: - type: Transform pos: 3.5,-75.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 7468 components: - type: Transform pos: 6.5,-64.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 7470 components: - type: Transform pos: 6.5,-69.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 7477 components: - type: Transform pos: 5.5,-64.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 7486 components: - type: Transform pos: 4.5,-64.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 7487 components: - type: Transform pos: 13.5,-53.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 7504 components: - type: Transform pos: -23.5,-53.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 7506 components: - type: Transform pos: -20.5,-55.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 7508 components: - type: Transform pos: -22.5,-53.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 7521 components: - type: Transform pos: -22.5,-55.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 7522 components: - type: Transform pos: -23.5,-55.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 7561 components: - type: Transform pos: 60.5,-45.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 7623 components: - type: Transform pos: 65.5,-37.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 7631 components: - type: Transform pos: -67.5,0.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 7641 components: - type: Transform pos: -69.5,-19.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 7665 components: - type: Transform pos: 42.5,-22.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 7726 components: - type: Transform pos: -16.5,-44.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 7730 components: - type: Transform pos: -17.5,-44.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 7731 components: - type: Transform pos: -17.5,-42.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 7734 components: - type: Transform pos: -19.5,-38.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 7739 components: - type: Transform pos: -19.5,-35.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 7801 components: - type: Transform pos: 46.5,-48.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 7803 components: - type: Transform pos: 51.5,-48.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 7807 components: - type: Transform pos: 55.5,-48.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 7810 components: - type: Transform pos: 48.5,-48.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 7816 components: - type: Transform pos: -63.5,14.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 7839 components: - type: Transform pos: -65.5,14.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 8039 components: - type: Transform pos: 11.5,-9.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 8194 components: - type: Transform pos: 30.5,-25.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 8361 components: - type: Transform pos: 50.5,-17.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 8362 components: - type: Transform pos: 50.5,-18.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 8363 components: - type: Transform pos: 52.5,18.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 8780 components: - type: Transform pos: 30.5,-57.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 8781 components: - type: Transform pos: 30.5,-56.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 8782 components: - type: Transform pos: 32.5,-58.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 8783 components: - type: Transform pos: 32.5,-57.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 8784 components: - type: Transform pos: 32.5,-56.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 8881 components: - type: Transform pos: 24.5,-1.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 8882 components: - type: Transform pos: 23.5,-1.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 8885 components: - type: Transform pos: 22.5,-1.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 8910 components: - type: Transform pos: 23.5,-3.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 8953 components: - type: Transform pos: -66.5,-20.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 8954 components: - type: Transform pos: -66.5,-19.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 9231 components: - type: Transform pos: 57.5,13.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 9235 components: - type: Transform pos: -64.5,-6.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 9311 components: - type: Transform pos: -50.5,-8.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 9321 components: - type: Transform pos: -55.5,-8.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 9331 components: - type: Transform pos: -50.5,-2.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 9332 components: - type: Transform pos: -50.5,-1.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 9333 components: - type: Transform pos: -50.5,-0.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 9344 components: - type: Transform pos: -52.5,-7.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 9361 components: - type: Transform pos: 38.5,-21.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 9374 components: - type: Transform pos: -53.5,-7.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 9378 components: - type: Transform pos: -51.5,0.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 9379 components: - type: Transform pos: -53.5,0.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 9416 components: - type: Transform pos: 40.5,-21.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 9446 components: - type: Transform pos: -52.5,16.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 9483 components: - type: Transform pos: -35.5,12.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 9485 components: - type: Transform pos: -35.5,14.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 9488 components: - type: Transform rot: 1.5707963267948966 rad pos: -5.5,-17.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 9514 components: - type: Transform pos: -51.5,15.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 9572 components: - type: Transform pos: -56.5,16.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 9643 components: - type: Transform pos: -46.5,10.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 9645 components: - type: Transform pos: -52.5,-9.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 9646 components: - type: Transform pos: -53.5,-9.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 10582 components: - type: Transform pos: 24.5,3.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 10583 components: - type: Transform pos: 22.5,3.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 11438 components: - type: Transform pos: -4.5,1.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 11468 components: - type: Transform pos: -49.5,15.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 11531 components: - type: Transform pos: -6.5,4.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 11701 components: - type: Transform pos: 15.5,30.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 11719 components: - type: Transform pos: 58.5,16.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 11728 components: - type: Transform pos: 58.5,36.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 11729 components: - type: Transform pos: 57.5,36.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 11730 components: - type: Transform pos: 56.5,36.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 11740 components: - type: Transform pos: 58.5,38.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 11741 components: - type: Transform pos: 57.5,38.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 11742 components: - type: Transform pos: 56.5,38.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 11743 components: - type: Transform pos: 58.5,40.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 11744 components: - type: Transform pos: 57.5,40.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 11745 components: - type: Transform pos: 56.5,40.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 11748 components: - type: Transform pos: 52.5,40.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 11749 components: - type: Transform pos: 64.5,-39.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 11751 components: - type: Transform pos: 50.5,40.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 11752 components: - type: Transform pos: 51.5,40.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 11762 components: - type: Transform pos: 59.5,13.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 11767 components: - type: Transform pos: 52.5,38.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 11806 components: - type: Transform pos: 50.5,38.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 11808 components: - type: Transform pos: 64.5,-36.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 11809 components: - type: Transform pos: 51.5,38.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 11810 components: - type: Transform pos: 52.5,36.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 11832 components: - type: Transform pos: 45.5,11.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 11835 components: - type: Transform pos: 64.5,-37.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 11836 components: - type: Transform pos: 51.5,36.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 11839 components: - type: Transform pos: 50.5,36.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 11840 components: - type: Transform pos: 53.5,-14.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 11842 components: - type: Transform pos: 19.5,5.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 11857 components: - type: Transform pos: 52.5,44.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 11863 components: - type: Transform pos: 53.5,-16.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 11874 components: - type: Transform pos: 51.5,44.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 11878 components: - type: Transform pos: 50.5,44.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 11879 components: - type: Transform pos: 50.5,46.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 11880 components: - type: Transform pos: 52.5,46.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 11961 components: - type: Transform pos: 51.5,46.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 11962 components: - type: Transform pos: 52.5,48.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 11966 components: - type: Transform pos: 51.5,48.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 11971 components: - type: Transform pos: 50.5,48.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 11972 components: - type: Transform pos: 45.5,17.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 11976 components: - type: Transform pos: 56.5,48.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 11977 components: - type: Transform pos: 58.5,48.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 11979 components: - type: Transform pos: 57.5,48.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 11980 components: - type: Transform pos: 58.5,46.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 11981 components: - type: Transform pos: 57.5,46.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 12008 components: - type: Transform pos: 56.5,46.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 12009 components: - type: Transform pos: 42.5,10.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 12011 components: - type: Transform pos: 56.5,44.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 12012 components: - type: Transform pos: 58.5,44.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 12013 components: - type: Transform pos: 57.5,44.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 12014 components: - type: Transform pos: 38.5,36.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 12016 components: - type: Transform pos: 58.5,13.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 12035 components: - type: Transform pos: -6.5,3.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 12039 components: - type: Transform pos: 37.5,36.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 12195 components: - type: Transform pos: -25.5,27.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 12281 components: - type: Transform pos: 36.5,36.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 12290 components: - type: Transform pos: 36.5,38.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 12291 components: - type: Transform pos: 37.5,38.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 12299 components: - type: Transform pos: 40.5,-15.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 12320 components: - type: Transform pos: 42.5,-20.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 12327 components: - type: Transform pos: 38.5,38.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 12399 components: - type: Transform pos: 38.5,40.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 12405 components: - type: Transform pos: 36.5,40.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 12406 components: - type: Transform pos: 37.5,40.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 12407 components: - type: Transform pos: 32.5,40.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 12408 components: - type: Transform pos: 31.5,40.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 12409 components: - type: Transform pos: 30.5,40.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 12410 components: - type: Transform pos: 32.5,38.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 12563 components: - type: Transform pos: 30.5,38.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 12564 components: - type: Transform pos: 31.5,38.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 12565 components: - type: Transform pos: 32.5,36.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 12566 components: - type: Transform pos: 31.5,36.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 12567 components: - type: Transform pos: 30.5,36.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 12568 components: - type: Transform pos: 32.5,44.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 12605 components: - type: Transform pos: 30.5,44.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 12621 components: - type: Transform pos: 31.5,44.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 12638 components: - type: Transform pos: 32.5,46.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 12644 components: - type: Transform pos: 30.5,46.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 12652 components: - type: Transform pos: 31.5,46.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 12656 components: - type: Transform pos: 64.5,-40.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 12657 components: - type: Transform pos: 30.5,48.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 12669 components: - type: Transform pos: 43.5,19.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 12697 components: - type: Transform pos: 43.5,11.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 12707 components: - type: Transform pos: 55.5,-1.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 12710 components: - type: Transform pos: 52.5,-1.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 12712 components: - type: Transform pos: 32.5,48.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 12713 components: - type: Transform pos: 31.5,48.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 12731 components: - type: Transform pos: 36.5,48.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 12749 components: - type: Transform pos: 38.5,48.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 12753 components: - type: Transform pos: 37.5,48.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 12754 components: - type: Transform pos: 38.5,46.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 12755 components: - type: Transform pos: 56.5,-30.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 12789 components: - type: Transform pos: 37.5,46.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 12802 components: - type: Transform pos: -62.5,20.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 12803 components: - type: Transform pos: -64.5,20.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 12805 components: - type: Transform pos: -64.5,-20.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 12808 components: - type: Transform pos: -66.5,-16.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 12809 components: - type: Transform pos: -66.5,-17.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 12810 components: - type: Transform pos: -67.5,-17.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 12812 components: - type: Transform pos: -68.5,-19.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 12816 components: - type: Transform pos: -68.5,-17.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 12858 components: - type: Transform pos: -67.5,-19.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 12861 components: - type: Transform pos: -66.5,4.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 12864 components: - type: Transform pos: 36.5,46.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 12865 components: - type: Transform pos: 36.5,44.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 12866 components: - type: Transform pos: 37.5,44.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 12886 components: - type: Transform pos: 38.5,44.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 12929 components: - type: Transform pos: -58.5,-25.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 12977 components: - type: Transform pos: -64.5,16.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 12982 components: - type: Transform pos: -65.5,18.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 13090 components: - type: Transform pos: 45.5,19.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 13094 components: - type: Transform pos: 43.5,17.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 13097 components: - type: Transform pos: 46.5,18.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 13190 components: - type: Transform pos: 44.5,19.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 13191 components: - type: Transform pos: 42.5,18.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 13196 components: - type: Transform pos: 44.5,17.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 13207 components: - type: Transform pos: 53.5,19.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 13208 components: - type: Transform pos: 54.5,16.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 13209 components: - type: Transform pos: 55.5,19.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 13211 components: - type: Transform pos: 52.5,17.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 13219 components: - type: Transform pos: 55.5,16.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 13220 components: - type: Transform pos: 53.5,16.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 13223 components: - type: Transform pos: 21.5,12.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 13446 components: - type: Transform pos: 32.5,34.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 13547 components: - type: Transform pos: 65.5,-39.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 13625 components: - type: Transform pos: -25.5,29.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 13632 components: - type: Transform pos: -9.5,6.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 13789 components: - type: Transform rot: -1.5707963267948966 rad pos: -25.5,-19.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 13813 components: - type: Transform pos: 7.5,17.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 13816 components: - type: Transform pos: -0.5,12.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 13896 components: - type: Transform pos: -48.5,16.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 13900 components: - type: Transform pos: -48.5,17.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 13941 components: - type: Transform pos: -29.5,29.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 13942 components: - type: Transform pos: -27.5,29.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 13946 components: - type: Transform pos: -22.5,27.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 13950 components: - type: Transform pos: -14.5,26.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 13964 components: - type: Transform pos: -20.5,27.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 13976 components: - type: Transform pos: 32.5,35.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 13977 components: - type: Transform pos: 36.5,34.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 14040 components: - type: Transform pos: 36.5,35.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 14060 components: - type: Transform pos: 1.5,12.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 14524 components: - type: Transform pos: -21.5,11.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 14647 components: - type: Transform pos: -33.5,27.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 14648 components: - type: Transform pos: -35.5,27.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 14649 components: - type: Transform pos: -13.5,27.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 14650 components: - type: Transform pos: -13.5,29.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 14654 components: - type: Transform pos: -27.5,27.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 14657 components: - type: Transform pos: -29.5,27.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 14661 components: - type: Transform pos: -37.5,27.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 14697 components: - type: Transform pos: -22.5,-4.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 14732 components: - type: Transform pos: 37.5,41.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 14733 components: - type: Transform pos: 37.5,43.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 14756 components: - type: Transform pos: -36.5,29.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 14780 components: - type: Transform pos: -27.5,43.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 14783 components: - type: Transform pos: -33.5,29.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 14792 components: - type: Transform pos: -40.5,36.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 14796 components: - type: Transform pos: -40.5,33.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 14816 components: - type: Transform pos: -40.5,38.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 14819 components: - type: Transform pos: -27.5,45.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 14822 components: - type: Transform pos: -29.5,42.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 14830 components: - type: Transform pos: -35.5,44.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 14836 components: - type: Transform pos: -40.5,31.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 14838 components: - type: Transform pos: -40.5,45.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 14843 components: - type: Transform pos: -40.5,41.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 14844 components: - type: Transform pos: -38.5,29.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 14851 components: - type: Transform pos: -31.5,42.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 14861 components: - type: Transform pos: -40.5,47.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 14865 components: - type: Transform pos: 37.5,42.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 14872 components: - type: Transform pos: -40.5,43.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 14875 components: - type: Transform pos: -35.5,46.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 14901 components: - type: Transform pos: -40.5,30.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 14917 components: - type: Transform pos: -40.5,35.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 14945 components: - type: Transform pos: -40.5,37.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 14946 components: - type: Transform pos: -27.5,46.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 14949 components: - type: Transform pos: -40.5,32.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 14950 components: - type: Transform pos: -28.5,42.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 14953 components: - type: Transform pos: -37.5,29.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 14954 components: - type: Transform pos: -32.5,42.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 14957 components: - type: Transform pos: -32.5,29.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 14958 components: - type: Transform pos: -35.5,45.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 14966 components: - type: Transform pos: -40.5,46.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 14971 components: - type: Transform pos: -40.5,42.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 14974 components: - type: Transform pos: -40.5,39.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 14977 components: - type: Transform pos: -35.5,29.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 14986 components: - type: Transform pos: -34.5,29.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 14988 components: - type: Transform pos: -40.5,34.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 15016 components: - type: Transform pos: -27.5,44.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 15021 components: - type: Transform pos: -30.5,42.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 15033 components: - type: Transform pos: -34.5,42.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 15038 components: - type: Transform pos: -35.5,43.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 15044 components: - type: Transform pos: -40.5,44.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 15045 components: - type: Transform pos: -40.5,40.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 15097 components: - type: Transform pos: -19.5,34.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 15121 components: - type: Transform pos: -39.5,29.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 15190 components: - type: Transform pos: 42.5,-24.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 15191 components: - type: Transform pos: 31.5,41.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 15265 components: - type: Transform pos: 31.5,42.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 15275 components: - type: Transform pos: 31.5,43.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 15299 components: - type: Transform pos: -14.5,48.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 15300 components: - type: Transform pos: -14.5,49.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 15341 components: - type: Transform rot: -1.5707963267948966 rad pos: -22.5,47.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 15342 components: - type: Transform pos: -20.5,47.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 15360 components: - type: Transform pos: -12.5,47.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 15361 components: - type: Transform pos: -38.5,48.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 15362 components: - type: Transform pos: -13.5,47.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 15402 components: - type: Transform pos: -15.5,36.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 15429 components: - type: Transform pos: 52.5,34.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 15435 components: - type: Transform pos: 52.5,35.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 15443 components: - type: Transform rot: -1.5707963267948966 rad pos: -28.5,-21.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 15491 components: - type: Transform pos: -15.5,31.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 15508 components: - type: Transform pos: -11.5,47.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 15510 components: - type: Transform pos: -40.5,48.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 15511 components: - type: Transform pos: -39.5,48.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 15528 components: - type: Transform pos: -21.5,47.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 15534 components: - type: Transform pos: -19.5,47.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 15535 components: - type: Transform rot: -1.5707963267948966 rad pos: -10.5,47.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 15540 components: - type: Transform pos: -36.5,48.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 15553 components: - type: Transform rot: -1.5707963267948966 rad pos: -27.5,-21.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 15577 components: - type: Transform pos: -27.5,40.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 15591 components: - type: Transform pos: 56.5,34.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 15602 components: - type: Transform pos: -17.5,36.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 15636 components: - type: Transform pos: 56.5,35.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 15715 components: - type: Transform pos: 10.5,22.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 15725 components: - type: Transform pos: -19.5,35.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 15849 components: - type: Transform pos: -53.5,15.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 16001 components: - type: Transform pos: -13.5,35.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 16022 components: - type: Transform pos: 3.5,27.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 16023 components: - type: Transform pos: 3.5,28.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 16024 components: - type: Transform pos: 3.5,29.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 16027 components: - type: Transform pos: -2.5,44.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 16081 components: - type: Transform pos: -55.5,15.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 16105 components: - type: Transform pos: 57.5,41.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 16327 components: - type: Transform pos: -2.5,43.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 16357 components: - type: Transform pos: -3.5,44.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 16359 components: - type: Transform pos: -1.5,43.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 16361 components: - type: Transform pos: -0.5,43.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 16362 components: - type: Transform pos: 0.5,43.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 16366 components: - type: Transform pos: 1.5,43.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 16367 components: - type: Transform pos: 2.5,43.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 16368 components: - type: Transform pos: 4.5,44.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 16369 components: - type: Transform pos: 5.5,44.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 16374 components: - type: Transform pos: 11.5,25.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 16375 components: - type: Transform pos: 11.5,24.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 16390 components: - type: Transform pos: -0.5,34.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 16391 components: - type: Transform pos: 1.5,34.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 16392 components: - type: Transform pos: 1.5,30.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 16394 components: - type: Transform pos: -0.5,30.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 16421 components: - type: Transform pos: 6.5,44.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 16449 components: - type: Transform pos: -5.5,44.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 16452 components: - type: Transform pos: -4.5,44.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 16465 components: - type: Transform pos: 11.5,28.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 16466 components: - type: Transform pos: 11.5,27.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 16467 components: - type: Transform pos: 11.5,26.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 16521 components: - type: Transform pos: 3.5,43.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 16540 components: - type: Transform pos: 57.5,42.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 16561 components: - type: Transform pos: 57.5,43.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 16845 components: - type: Transform pos: -37.5,48.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 16927 components: - type: Transform pos: -35.5,47.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 16992 components: - type: Transform pos: -56.5,17.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 17133 components: - type: Transform pos: 3.5,44.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 17145 components: - type: Transform pos: 51.5,41.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 17146 components: - type: Transform pos: 51.5,42.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 17147 components: - type: Transform pos: 51.5,43.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 17148 components: - type: Transform pos: 44.5,26.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 17239 components: - type: Transform pos: 43.5,26.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 17240 components: - type: Transform pos: 42.5,26.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 17247 components: - type: Transform pos: -22.5,33.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 17248 components: - type: Transform pos: -20.5,33.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 17254 components: - type: Transform pos: -10.5,33.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 17255 components: - type: Transform pos: -17.5,31.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 17256 components: - type: Transform pos: -16.5,31.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 17257 components: - type: Transform pos: -12.5,33.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 17259 components: - type: Transform pos: 12.5,-53.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 17299 components: - type: Transform pos: 45.5,26.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 17303 components: - type: Transform pos: -49.5,18.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 17305 components: - type: Transform pos: -51.5,18.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 17306 components: - type: Transform pos: -52.5,19.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 17307 components: - type: Transform pos: -52.5,20.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 17308 components: - type: Transform pos: -52.5,21.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 17309 components: - type: Transform pos: -48.5,19.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 17310 components: - type: Transform pos: -48.5,20.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 17311 components: - type: Transform pos: -48.5,21.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 17312 components: - type: Transform pos: -48.5,23.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 17313 components: - type: Transform pos: -48.5,24.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 17314 components: - type: Transform pos: -48.5,25.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 17315 components: - type: Transform pos: -52.5,23.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 17316 components: - type: Transform pos: -52.5,24.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 17317 components: - type: Transform pos: -52.5,25.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 17341 components: - type: Transform pos: 46.5,26.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 17343 components: - type: Transform pos: 40.5,26.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 17461 components: - type: Transform pos: 37.5,32.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 17503 components: - type: Transform pos: 39.5,26.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 17504 components: - type: Transform pos: 48.5,26.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 17505 components: - type: Transform pos: 49.5,26.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 17545 components: - type: Transform pos: 37.5,31.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 17600 components: - type: Transform pos: 31.5,32.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 17615 components: - type: Transform pos: 31.5,30.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 17740 components: - type: Transform pos: -62.5,30.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 17787 components: - type: Transform pos: -46.5,-4.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 17939 components: - type: Transform pos: 1.5,4.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 17942 components: - type: Transform pos: 0.5,4.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 17976 components: - type: Transform pos: 2.5,4.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 17984 components: - type: Transform pos: 3.5,4.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 18058 components: - type: Transform pos: -0.5,4.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 18059 components: - type: Transform pos: -1.5,4.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 18060 components: - type: Transform pos: -2.5,4.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 18083 components: - type: Transform pos: -4.5,0.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 18085 components: - type: Transform pos: -3.5,3.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 18086 components: - type: Transform pos: -3.5,4.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 18087 components: - type: Transform pos: 4.5,3.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 18088 components: - type: Transform pos: 4.5,4.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 18089 components: - type: Transform pos: 5.5,1.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 18090 components: - type: Transform pos: 5.5,0.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 18138 components: - type: Transform pos: -9.5,-4.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 18413 components: - type: Transform pos: -0.5,-8.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 18414 components: - type: Transform pos: 1.5,-8.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 18415 components: - type: Transform pos: 1.5,-1.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 18416 components: - type: Transform pos: -0.5,-1.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 18436 components: - type: Transform pos: -9.5,-3.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 18437 components: - type: Transform pos: -9.5,-5.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 18679 components: - type: Transform pos: -46.5,-7.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 18710 components: - type: Transform pos: 39.5,-15.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 18901 components: - type: Transform pos: 55.5,1.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 18905 components: - type: Transform pos: 52.5,1.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 18919 components: - type: Transform pos: 20.5,26.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 18920 components: - type: Transform pos: 19.5,26.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 18921 components: - type: Transform pos: 21.5,26.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 18922 components: - type: Transform pos: 23.5,26.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 18923 components: - type: Transform pos: 24.5,26.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 18924 components: - type: Transform pos: 25.5,26.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 18925 components: - type: Transform pos: 27.5,26.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 18926 components: - type: Transform pos: 28.5,26.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 18927 components: - type: Transform pos: 29.5,26.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 18932 components: - type: Transform pos: 58.5,25.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 18933 components: - type: Transform pos: 59.5,21.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 18934 components: - type: Transform pos: 59.5,20.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 19021 components: - type: Transform pos: 58.5,20.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 19032 components: - type: Transform pos: 42.5,5.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 19060 components: - type: Transform pos: 58.5,19.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 19061 components: - type: Transform pos: 57.5,19.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 19062 components: - type: Transform pos: 58.5,26.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 19063 components: - type: Transform pos: 59.5,22.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 19064 components: - type: Transform pos: 59.5,23.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 19067 components: - type: Transform pos: 59.5,24.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 19068 components: - type: Transform pos: 59.5,25.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 19069 components: - type: Transform pos: 57.5,26.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 19082 components: - type: Transform pos: 17.5,30.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 19083 components: - type: Transform pos: 17.5,31.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 19113 components: - type: Transform pos: 23.5,10.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 19114 components: - type: Transform pos: 22.5,10.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 19115 components: - type: Transform pos: 24.5,10.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 19116 components: - type: Transform pos: 22.5,13.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 19117 components: - type: Transform pos: 23.5,13.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 19118 components: - type: Transform pos: 24.5,13.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 19141 components: - type: Transform pos: 25.5,12.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 19157 components: - type: Transform pos: -46.5,-6.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 19640 components: - type: Transform pos: 31.5,49.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 19641 components: - type: Transform pos: 31.5,50.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 19642 components: - type: Transform pos: 31.5,51.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 19643 components: - type: Transform pos: 32.5,51.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 19644 components: - type: Transform pos: 32.5,52.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 19691 components: - type: Transform pos: 34.5,52.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 19692 components: - type: Transform pos: 33.5,52.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 19695 components: - type: Transform pos: 36.5,52.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 19698 components: - type: Transform pos: 12.5,-55.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 19747 components: - type: Transform pos: 35.5,52.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 19770 components: - type: Transform pos: 27.5,5.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 19771 components: - type: Transform pos: -21.5,-34.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 19772 components: - type: Transform pos: 20.5,-3.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 19775 components: - type: Transform pos: 18.5,1.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 19803 components: - type: Transform pos: -13.5,34.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 19813 components: - type: Transform pos: 26.5,-3.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 19821 components: - type: Transform pos: 36.5,51.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 19823 components: - type: Transform pos: 37.5,51.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 19827 components: - type: Transform pos: 37.5,50.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 19829 components: - type: Transform pos: -16.5,26.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 20512 components: - type: Transform pos: -27.5,60.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 20515 components: - type: Transform pos: -23.5,60.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 20981 components: - type: Transform pos: 37.5,49.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 20982 components: - type: Transform pos: 51.5,49.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 20987 components: - type: Transform pos: 51.5,51.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 20988 components: - type: Transform pos: 51.5,50.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 20990 components: - type: Transform pos: 52.5,51.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 20999 components: - type: Transform pos: 52.5,52.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 21000 components: - type: Transform pos: 54.5,52.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 21009 components: - type: Transform pos: 55.5,52.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 21034 components: - type: Transform pos: 56.5,52.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 21035 components: - type: Transform pos: 53.5,52.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 21036 components: - type: Transform pos: 56.5,51.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 21037 components: - type: Transform pos: 57.5,51.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 21038 components: - type: Transform pos: 57.5,49.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 21039 components: - type: Transform pos: 57.5,50.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 21059 components: - type: Transform pos: 46.5,-10.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 21155 components: - type: Transform pos: 60.5,-42.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 21189 components: - type: Transform pos: -63.5,16.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 21190 components: - type: Transform pos: -66.5,18.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 21192 components: - type: Transform pos: -64.5,18.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 21196 components: - type: Transform pos: -65.5,16.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 21197 components: - type: Transform pos: -63.5,18.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 21198 components: - type: Transform pos: -66.5,16.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 21303 components: - type: Transform pos: 46.5,-8.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 21344 components: - type: Transform pos: 4.5,-26.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 21423 components: - type: Transform pos: -5.5,-37.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 21424 components: - type: Transform pos: -5.5,-38.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 21443 components: - type: Transform pos: -12.5,-35.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 21445 components: - type: Transform pos: -9.5,-34.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 21446 components: - type: Transform pos: -10.5,-35.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 21473 components: - type: Transform pos: 33.5,-56.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 21856 components: - type: Transform pos: -115.5,9.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 21857 components: - type: Transform pos: -115.5,10.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 21858 components: - type: Transform pos: -115.5,11.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 21871 components: - type: Transform pos: -107.5,9.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 21872 components: - type: Transform pos: -107.5,11.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 21873 components: - type: Transform pos: -107.5,10.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22461 components: - type: Transform pos: -111.5,27.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 23760 components: - type: Transform pos: 52.5,-11.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 23950 components: - type: Transform pos: 37.5,30.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 23951 components: - type: Transform pos: 31.5,31.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 23952 components: - type: Transform pos: 31.5,29.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 23953 components: - type: Transform pos: 37.5,29.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 24000 components: - type: Transform pos: 51.5,29.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 24001 components: - type: Transform pos: 51.5,30.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 24002 components: - type: Transform pos: 51.5,31.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 24003 components: - type: Transform pos: 51.5,32.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 24004 components: - type: Transform pos: 57.5,29.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 24005 components: - type: Transform pos: 57.5,30.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 24006 components: - type: Transform pos: 57.5,31.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 24007 components: - type: Transform pos: 57.5,32.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 24087 components: - type: Transform pos: 13.5,-9.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 24271 components: - type: Transform pos: 9.5,-11.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 24540 components: - type: Transform pos: -62.5,26.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 24541 components: - type: Transform pos: -64.5,26.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 24545 components: - type: Transform pos: -66.5,24.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 24547 components: - type: Transform pos: -62.5,-3.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 24659 components: - type: Transform pos: 59.5,9.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 24661 components: - type: Transform pos: 59.5,7.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 24667 components: - type: Transform pos: -66.5,22.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 25632 components: - type: Transform pos: 15.5,31.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - proto: RemoteSignaller entities: - uid: 3017 @@ -128775,6 +129444,8 @@ entities: - type: Transform pos: -55.5,0.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - type: DeviceLinkSink invokeCounter: 2 - uid: 914 @@ -128782,31 +129453,43 @@ entities: - type: Transform pos: -3.5,-25.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 920 components: - type: Transform pos: -2.5,-25.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 5626 components: - type: Transform pos: -32.5,10.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 5627 components: - type: Transform pos: -33.5,10.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 5628 components: - type: Transform pos: -31.5,10.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 7697 components: - type: Transform pos: -4.5,-25.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - proto: ShuttersNormalOpen entities: - uid: 147 @@ -128815,280 +129498,380 @@ entities: rot: 1.5707963267948966 rad pos: 42.5,-32.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 1454 components: - type: Transform pos: 41.5,-25.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 1631 components: - type: Transform rot: -1.5707963267948966 rad pos: 7.5,-26.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 2250 components: - type: Transform rot: 1.5707963267948966 rad pos: 26.5,2.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 2381 components: - type: Transform pos: 24.5,-1.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 3106 components: - type: Transform rot: -1.5707963267948966 rad pos: 20.5,0.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 3200 components: - type: Transform pos: 40.5,-25.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 3208 components: - type: Transform pos: 38.5,-15.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 3844 components: - type: Transform rot: 1.5707963267948966 rad pos: 27.5,-31.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 3845 components: - type: Transform rot: 1.5707963267948966 rad pos: 27.5,-30.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 4034 components: - type: Transform rot: 1.5707963267948966 rad pos: 42.5,-28.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 4045 components: - type: Transform rot: -1.5707963267948966 rad pos: 20.5,2.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 4109 components: - type: Transform rot: 1.5707963267948966 rad pos: 27.5,-32.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 4355 components: - type: Transform pos: 35.5,-15.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 4487 components: - type: Transform pos: 32.5,-15.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 4496 components: - type: Transform pos: 34.5,-15.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 4670 components: - type: Transform rot: 1.5707963267948966 rad pos: 27.5,-33.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 4679 components: - type: Transform rot: 1.5707963267948966 rad pos: 15.5,-36.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 5149 components: - type: Transform pos: -11.5,-52.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 5560 components: - type: Transform rot: 1.5707963267948966 rad pos: -40.5,-6.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 6207 components: - type: Transform pos: -25.5,-25.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 6522 components: - type: Transform rot: -1.5707963267948966 rad pos: 7.5,17.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 6524 components: - type: Transform rot: -1.5707963267948966 rad pos: 7.5,20.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 6526 components: - type: Transform rot: -1.5707963267948966 rad pos: 7.5,18.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 6772 components: - type: Transform rot: -1.5707963267948966 rad pos: 22.5,-33.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 6773 components: - type: Transform rot: -1.5707963267948966 rad pos: 22.5,-30.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 6774 components: - type: Transform rot: -1.5707963267948966 rad pos: 22.5,-31.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 6775 components: - type: Transform rot: -1.5707963267948966 rad pos: 22.5,-34.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 7131 components: - type: Transform rot: 1.5707963267948966 rad pos: -40.5,-7.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 7132 components: - type: Transform rot: 1.5707963267948966 rad pos: -40.5,-4.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 7664 components: - type: Transform pos: 39.5,-15.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 8381 components: - type: Transform pos: -13.5,-52.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 8382 components: - type: Transform pos: -12.5,-52.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 9167 components: - type: Transform rot: 3.141592653589793 rad pos: 14.5,-29.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 10577 components: - type: Transform rot: 3.141592653589793 rad pos: 12.5,-29.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 12303 components: - type: Transform pos: 23.5,-1.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 12509 components: - type: Transform rot: 1.5707963267948966 rad pos: 42.5,-26.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 14208 components: - type: Transform rot: 1.5707963267948966 rad pos: 26.5,1.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 14548 components: - type: Transform pos: -36.5,10.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 15575 components: - type: Transform pos: 13.5,21.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 16058 components: - type: Transform pos: 12.5,21.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 16129 components: - type: Transform rot: 1.5707963267948966 rad pos: 26.5,0.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 16134 components: - type: Transform pos: 22.5,-1.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 16735 components: - type: Transform pos: 8.5,22.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 17671 components: - type: Transform rot: -1.5707963267948966 rad pos: 20.5,1.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 18517 components: - type: Transform rot: -1.5707963267948966 rad pos: -9.5,-5.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 18518 components: - type: Transform rot: -1.5707963267948966 rad pos: -9.5,-4.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 18519 components: - type: Transform rot: -1.5707963267948966 rad pos: -9.5,-3.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 21085 components: - type: Transform pos: 44.5,17.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 21186 components: - type: Transform pos: 43.5,17.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - type: DeviceLinkSink invokeCounter: 1 - uid: 21334 @@ -129096,81 +129879,113 @@ entities: - type: Transform pos: 40.5,-15.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 21340 components: - type: Transform pos: 4.5,-26.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 21341 components: - type: Transform pos: 5.5,-26.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 21342 components: - type: Transform pos: 6.5,-26.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 21753 components: - type: Transform pos: 43.5,11.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 21754 components: - type: Transform pos: 45.5,17.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 21755 components: - type: Transform pos: 45.5,11.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22463 components: - type: Transform pos: -111.5,27.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22464 components: - type: Transform pos: -111.5,20.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 24366 components: - type: Transform pos: 38.5,-21.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 24367 components: - type: Transform pos: 39.5,-21.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 24368 components: - type: Transform pos: 40.5,-21.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 24369 components: - type: Transform pos: 42.5,-20.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 24372 components: - type: Transform pos: 42.5,-16.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 25409 components: - type: Transform pos: -23.5,-25.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 25417 components: - type: Transform pos: 10.5,22.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - proto: ShuttersRadiationOpen entities: - uid: 16043 @@ -129178,21 +129993,29 @@ entities: - type: Transform pos: -0.5,30.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 16302 components: - type: Transform pos: 1.5,34.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 16303 components: - type: Transform pos: 1.5,30.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 16463 components: - type: Transform pos: -0.5,34.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - proto: ShuttersWindow entities: - uid: 11583 @@ -129200,36 +130023,50 @@ entities: - type: Transform pos: -51.5,26.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 11628 components: - type: Transform pos: -51.5,28.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 11629 components: - type: Transform pos: -49.5,28.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 12021 components: - type: Transform pos: -49.5,26.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 13616 components: - type: Transform pos: -50.5,26.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 13618 components: - type: Transform pos: -50.5,28.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 13639 components: - type: Transform pos: -52.5,17.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - proto: ShuttersWindowOpen entities: - uid: 3978 @@ -129238,79 +130075,107 @@ entities: rot: 1.5707963267948966 rad pos: 15.5,-31.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 4513 components: - type: Transform rot: 1.5707963267948966 rad pos: 15.5,-34.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 4671 components: - type: Transform rot: 1.5707963267948966 rad pos: 15.5,-35.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 4673 components: - type: Transform rot: 1.5707963267948966 rad pos: 15.5,-32.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 4677 components: - type: Transform rot: 1.5707963267948966 rad pos: 15.5,-33.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 6771 components: - type: Transform rot: -1.5707963267948966 rad pos: 22.5,-32.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 8389 components: - type: Transform rot: 3.141592653589793 rad pos: 13.5,-29.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 14547 components: - type: Transform pos: -37.5,10.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 16527 components: - type: Transform pos: 42.5,-27.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 17379 components: - type: Transform rot: 1.5707963267948966 rad pos: 38.5,-25.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 17491 components: - type: Transform rot: -1.5707963267948966 rad pos: 39.5,-25.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 19158 components: - type: Transform pos: 32.5,-25.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 19159 components: - type: Transform pos: 31.5,-25.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 21068 components: - type: Transform pos: -40.5,-5.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - proto: SignAi entities: - uid: 16533 @@ -129863,6 +130728,20 @@ entities: - type: Transform pos: 1.5,34.5 parent: 60 + - type: DeviceLinkSource + linkedPorts: + 16463: + - - Pressed + - Toggle + 16302: + - - Pressed + - Toggle + 16303: + - - Pressed + - Toggle + 16043: + - - Pressed + - Toggle - type: Fixtures fixtures: {} - uid: 16396 @@ -141842,91 +142721,127 @@ entities: - type: Transform pos: 31.5,-16.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 3223 components: - type: Transform pos: 31.5,-20.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 3346 components: - type: Transform pos: -57.5,-12.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 3510 components: - type: Transform pos: 51.5,-43.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 4242 components: - type: Transform pos: -51.5,-17.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 4254 components: - type: Transform pos: -51.5,-19.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 7071 components: - type: Transform pos: 18.5,-16.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 7077 components: - type: Transform pos: 55.5,-43.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 8354 components: - type: Transform pos: -55.5,-12.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 9492 components: - type: Transform pos: -43.5,12.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 9622 components: - type: Transform pos: -43.5,11.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 9753 components: - type: Transform pos: -51.5,-18.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 11735 components: - type: Transform pos: 38.5,17.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 11766 components: - type: Transform pos: 38.5,13.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 12301 components: - type: Transform pos: 31.5,-12.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 13682 components: - type: Transform pos: 50.5,19.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 14516 components: - type: Transform pos: -19.5,20.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 16411 components: - type: Transform pos: 18.5,-19.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - proto: TobaccoSeeds entities: - uid: 3263 @@ -158264,18 +159179,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 1.6495836 - - 6.2055764 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 1.6495836 + Nitrogen: 6.2055764 - proto: WardrobeCargoFilled entities: - uid: 24219 @@ -158289,18 +159194,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 1.6495836 - - 6.2055764 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 1.6495836 + Nitrogen: 6.2055764 - proto: WardrobeMixedFilled entities: - uid: 3394 @@ -158314,18 +159209,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 1.6495836 - - 6.2055764 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 1.6495836 + Nitrogen: 6.2055764 - proto: WardrobePrisonFilled entities: - uid: 1933 @@ -158351,18 +159236,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 1.6495836 - - 6.2055764 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 1.6495836 + Nitrogen: 6.2055764 - proto: WardrobeVirology entities: - uid: 3073 @@ -158376,18 +159251,8 @@ entities: immutable: False temperature: 293.1496 moles: - - 1.6495836 - - 6.2055764 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 1.6495836 + Nitrogen: 6.2055764 - proto: WarningAir entities: - uid: 9123 @@ -158875,74 +159740,100 @@ entities: rot: 3.141592653589793 rad pos: 39.5,-25.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 1341 components: - type: Transform rot: 3.141592653589793 rad pos: 7.5,-26.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 1349 components: - type: Transform pos: 8.5,-24.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 1350 components: - type: Transform pos: 3.5,-24.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 2519 components: - type: Transform rot: 1.5707963267948966 rad pos: 42.5,-27.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 6821 components: - type: Transform rot: 3.141592653589793 rad pos: 38.5,-25.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 10854 components: - type: Transform pos: 0.5,-69.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 10855 components: - type: Transform rot: 3.141592653589793 rad pos: 0.5,-64.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 14127 components: - type: Transform pos: -7.5,20.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 14129 components: - type: Transform rot: -1.5707963267948966 rad pos: -8.5,21.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 16409 components: - type: Transform rot: 3.141592653589793 rad pos: 34.5,15.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 19886 components: - type: Transform rot: -1.5707963267948966 rad pos: 14.5,4.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 19910 components: - type: Transform rot: 1.5707963267948966 rad pos: 22.5,-4.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - proto: WindoorBarLocked entities: - uid: 2235 @@ -158951,6 +159842,8 @@ entities: rot: 3.141592653589793 rad pos: 12.5,-29.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - proto: WindoorCargoLocked entities: - uid: 11870 @@ -158959,6 +159852,8 @@ entities: rot: -1.5707963267948966 rad pos: 43.5,7.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - proto: WindoorHydroponicsLocked entities: - uid: 2452 @@ -158966,17 +159861,23 @@ entities: - type: Transform pos: 32.5,-25.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 2453 components: - type: Transform pos: 31.5,-25.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 5815 components: - type: Transform rot: -1.5707963267948966 rad pos: 36.5,-29.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - proto: WindoorSecure entities: - uid: 3269 @@ -158985,91 +159886,123 @@ entities: rot: -1.5707963267948966 rad pos: 23.5,-46.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 3911 components: - type: Transform rot: -1.5707963267948966 rad pos: -9.5,-41.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 6181 components: - type: Transform rot: -1.5707963267948966 rad pos: -49.5,-31.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 7291 components: - type: Transform rot: 3.141592653589793 rad pos: -47.5,-33.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 8083 components: - type: Transform pos: -11.5,-44.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 8109 components: - type: Transform rot: 3.141592653589793 rad pos: -3.5,-2.5 parent: 7536 + - type: DeltaPressure + gridUid: 7536 - uid: 8111 components: - type: Transform rot: 3.141592653589793 rad pos: -5.5,-2.5 parent: 7536 + - type: DeltaPressure + gridUid: 7536 - uid: 11002 components: - type: Transform rot: 1.5707963267948966 rad pos: 39.5,-46.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22014 components: - type: Transform rot: 3.141592653589793 rad pos: -120.5,34.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22015 components: - type: Transform rot: 3.141592653589793 rad pos: -102.5,34.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22016 components: - type: Transform rot: 3.141592653589793 rad pos: -123.5,15.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22017 components: - type: Transform pos: -123.5,19.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22018 components: - type: Transform pos: -99.5,19.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22019 components: - type: Transform pos: -118.5,5.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22051 components: - type: Transform pos: -104.5,5.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22088 components: - type: Transform rot: 3.141592653589793 rad pos: -99.5,15.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - proto: WindoorSecureArmoryLocked entities: - uid: 246 @@ -159078,50 +160011,68 @@ entities: rot: 1.5707963267948966 rad pos: -27.5,-6.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 776 components: - type: Transform pos: -26.5,-6.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 796 components: - type: Transform pos: -26.5,-14.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 1556 components: - type: Transform pos: -28.5,-14.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 1750 components: - type: Transform rot: -1.5707963267948966 rad pos: -25.5,-17.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 1976 components: - type: Transform pos: -27.5,-14.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 8278 components: - type: Transform rot: 1.5707963267948966 rad pos: -31.5,-8.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 8420 components: - type: Transform rot: -1.5707963267948966 rad pos: -25.5,-16.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 13642 components: - type: Transform rot: -1.5707963267948966 rad pos: -25.5,-18.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - proto: WindoorSecureAtmosphericsLocked entities: - uid: 13959 @@ -159129,12 +160080,16 @@ entities: - type: Transform pos: -17.5,27.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 19416 components: - type: Transform rot: 3.141592653589793 rad pos: -15.5,26.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - proto: WindoorSecureBrigLocked entities: - uid: 4198 @@ -159142,24 +160097,32 @@ entities: - type: Transform pos: -43.5,-18.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 8277 components: - type: Transform rot: 1.5707963267948966 rad pos: -35.5,-0.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 8424 components: - type: Transform rot: 1.5707963267948966 rad pos: -35.5,-1.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 8437 components: - type: Transform rot: 1.5707963267948966 rad pos: -35.5,0.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - proto: WindoorSecureCargoLocked entities: - uid: 13104 @@ -159168,42 +160131,56 @@ entities: rot: 1.5707963267948966 rad pos: 42.5,8.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 13105 components: - type: Transform rot: 1.5707963267948966 rad pos: 42.5,9.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 19107 components: - type: Transform rot: 1.5707963267948966 rad pos: 56.5,7.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 19108 components: - type: Transform rot: 1.5707963267948966 rad pos: 56.5,9.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 19405 components: - type: Transform rot: 3.141592653589793 rad pos: 53.5,5.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 19414 components: - type: Transform rot: 3.141592653589793 rad pos: 54.5,5.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 24814 components: - type: Transform rot: 3.141592653589793 rad pos: 43.5,3.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - proto: WindoorSecureChapelLocked entities: - uid: 14513 @@ -159212,6 +160189,8 @@ entities: rot: 3.141592653589793 rad pos: -20.5,16.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - proto: WindoorSecureChemistryLocked entities: - uid: 2684 @@ -159219,29 +160198,39 @@ entities: - type: Transform pos: 39.5,-25.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 2685 components: - type: Transform pos: 38.5,-25.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 5814 components: - type: Transform rot: 1.5707963267948966 rad pos: 36.5,-29.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 8895 components: - type: Transform rot: -1.5707963267948966 rad pos: 42.5,-27.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 18548 components: - type: Transform rot: -1.5707963267948966 rad pos: 42.5,-30.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - proto: WindoorSecureCommandLocked entities: - uid: 18007 @@ -159250,78 +160239,104 @@ entities: rot: -1.5707963267948966 rad pos: -74.5,17.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 18105 components: - type: Transform rot: 1.5707963267948966 rad pos: -11.5,2.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 18327 components: - type: Transform rot: 1.5707963267948966 rad pos: -94.5,17.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 23052 components: - type: Transform rot: -1.5707963267948966 rad pos: -112.5,26.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 23053 components: - type: Transform rot: 1.5707963267948966 rad pos: -110.5,26.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 23079 components: - type: Transform rot: 1.5707963267948966 rad pos: -116.5,26.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 23080 components: - type: Transform rot: -1.5707963267948966 rad pos: -106.5,26.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 25384 components: - type: Transform rot: 3.141592653589793 rad pos: -113.5,8.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 25385 components: - type: Transform rot: 3.141592653589793 rad pos: -112.5,8.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 25386 components: - type: Transform rot: 3.141592653589793 rad pos: -110.5,8.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 25387 components: - type: Transform rot: 3.141592653589793 rad pos: -109.5,8.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 25390 components: - type: Transform rot: -1.5707963267948966 rad pos: -112.5,11.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 25391 components: - type: Transform rot: 1.5707963267948966 rad pos: -110.5,11.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - proto: WindoorSecureEngineeringLocked entities: - uid: 13804 @@ -159329,18 +160344,24 @@ entities: - type: Transform pos: -3.5,17.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 21766 components: - type: Transform rot: 3.141592653589793 rad pos: 3.5,12.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 21767 components: - type: Transform rot: 3.141592653589793 rad pos: 4.5,12.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - proto: WindoorSecureHeadOfPersonnelLocked entities: - uid: 1340 @@ -159348,12 +160369,16 @@ entities: - type: Transform pos: 7.5,-26.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 4691 components: - type: Transform rot: 3.141592653589793 rad pos: 4.5,-38.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - proto: WindoorSecureMedicalLocked entities: - uid: 3005 @@ -159361,18 +160386,24 @@ entities: - type: Transform pos: 47.5,-26.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 11101 components: - type: Transform rot: 1.5707963267948966 rad pos: 46.5,-18.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 11102 components: - type: Transform rot: -1.5707963267948966 rad pos: 46.5,-17.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - proto: WindoorSecureSalvageLocked entities: - uid: 19006 @@ -159380,6 +160411,8 @@ entities: - type: Transform pos: 53.5,3.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - type: DeviceLinkSink invokeCounter: 1 - type: DeviceLinkSource @@ -159392,6 +160425,8 @@ entities: - type: Transform pos: 54.5,3.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - type: DeviceLinkSink invokeCounter: 1 - type: DeviceLinkSource @@ -159405,12 +160440,16 @@ entities: rot: 3.141592653589793 rad pos: 44.5,3.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 19024 components: - type: Transform rot: 3.141592653589793 rad pos: 45.5,3.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - proto: WindoorSecureScienceLocked entities: - uid: 7057 @@ -159419,6 +160458,8 @@ entities: rot: -1.5707963267948966 rad pos: -40.5,-5.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 7097 components: - type: MetaData @@ -159426,6 +160467,8 @@ entities: - type: Transform pos: -37.5,10.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 7142 components: - type: MetaData @@ -159433,17 +160476,23 @@ entities: - type: Transform pos: -36.5,10.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 9359 components: - type: Transform pos: -45.5,15.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 19029 components: - type: Transform rot: 1.5707963267948966 rad pos: -41.5,-4.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - proto: WindoorSecureSecurityLocked entities: - uid: 4298 @@ -159452,12 +160501,16 @@ entities: rot: 1.5707963267948966 rad pos: -42.5,-15.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 8280 components: - type: Transform rot: -1.5707963267948966 rad pos: -31.5,-8.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - proto: Window entities: - uid: 1 @@ -159465,256 +160518,358 @@ entities: - type: Transform pos: -64.5,1.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 1285 components: - type: Transform pos: -60.5,-8.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 2132 components: - type: Transform pos: -39.5,-19.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 2386 components: - type: Transform pos: 19.5,-25.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 2564 components: - type: Transform pos: 20.5,-25.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 2568 components: - type: Transform pos: 21.5,-25.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 2570 components: - type: Transform pos: 17.5,-25.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 2597 components: - type: Transform pos: 15.5,-25.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 3347 components: - type: Transform pos: -56.5,-15.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 3455 components: - type: Transform pos: 49.5,-39.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 3459 components: - type: Transform pos: 47.5,-39.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 3520 components: - type: Transform pos: 55.5,-39.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 3548 components: - type: Transform pos: 48.5,-43.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 3690 components: - type: Transform pos: -40.5,21.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 5508 components: - type: Transform pos: 46.5,-43.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 5855 components: - type: Transform pos: -10.5,10.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 5857 components: - type: Transform pos: -13.5,15.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 6255 components: - type: Transform pos: 14.5,11.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 6256 components: - type: Transform pos: 14.5,15.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 6257 components: - type: Transform pos: 14.5,14.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 6258 components: - type: Transform pos: 14.5,12.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 7719 components: - type: Transform pos: -8.5,10.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 8001 components: - type: Transform pos: -65.5,1.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 8300 components: - type: Transform pos: 47.5,9.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 8734 components: - type: Transform pos: -63.5,1.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 11789 components: - type: Transform pos: -59.5,18.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 11795 components: - type: Transform pos: -57.5,18.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 13671 components: - type: Transform pos: 50.5,15.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 13751 components: - type: Transform pos: -40.5,20.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 13821 components: - type: Transform pos: -13.5,17.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 13909 components: - type: Transform pos: -60.5,21.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 17285 components: - type: Transform pos: -39.5,22.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 17332 components: - type: Transform pos: 32.5,16.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 17349 components: - type: Transform pos: -60.5,24.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 17350 components: - type: Transform pos: -60.5,25.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 17465 components: - type: Transform pos: -40.5,19.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 18793 components: - type: Transform pos: 57.5,-36.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 19825 components: - type: Transform pos: -59.5,35.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 19846 components: - type: Transform pos: -57.5,35.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 20995 components: - type: Transform pos: -56.5,38.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 21131 components: - type: Transform pos: -55.5,43.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 21136 components: - type: Transform pos: -55.5,42.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 21138 components: - type: Transform pos: -55.5,41.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 21141 components: - type: Transform pos: -55.5,40.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 21143 components: - type: Transform pos: -55.5,49.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 23400 components: - type: Transform pos: -55.5,50.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 23401 components: - type: Transform pos: -55.5,51.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 23413 components: - type: Transform pos: -55.5,52.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 23414 components: - type: Transform pos: -56.5,36.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 23415 components: - type: Transform pos: -56.5,37.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 23717 components: - type: Transform pos: -39.5,-21.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - proto: WindowDirectional entities: - uid: 3146 @@ -159723,56 +160878,76 @@ entities: rot: -1.5707963267948966 rad pos: 26.5,-51.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 3152 components: - type: Transform rot: 1.5707963267948966 rad pos: 28.5,-51.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 4051 components: - type: Transform rot: -1.5707963267948966 rad pos: -33.5,-30.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 4579 components: - type: Transform rot: 1.5707963267948966 rad pos: -37.5,-30.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 7287 components: - type: Transform rot: 1.5707963267948966 rad pos: -48.5,-34.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 7608 components: - type: Transform rot: 3.141592653589793 rad pos: -51.5,-32.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 21347 components: - type: Transform pos: -67.5,9.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 21358 components: - type: Transform pos: -66.5,9.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 21359 components: - type: Transform pos: -64.5,9.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 21360 components: - type: Transform pos: -63.5,9.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - proto: WindowFrostedDirectional entities: - uid: 2394 @@ -159781,183 +160956,247 @@ entities: rot: 1.5707963267948966 rad pos: 38.5,-39.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 2756 components: - type: Transform rot: -1.5707963267948966 rad pos: 36.5,-39.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 5172 components: - type: Transform pos: -51.5,-30.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 5173 components: - type: Transform pos: -50.5,-30.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 7292 components: - type: Transform rot: -1.5707963267948966 rad pos: -46.5,-34.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 7296 components: - type: Transform rot: -1.5707963267948966 rad pos: -46.5,-33.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 7310 components: - type: Transform rot: 1.5707963267948966 rad pos: -48.5,-33.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 7524 components: - type: Transform rot: 3.141592653589793 rad pos: -50.5,-32.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 9511 components: - type: Transform rot: 3.141592653589793 rad pos: -42.5,12.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 17730 components: - type: Transform rot: 1.5707963267948966 rad pos: -39.5,12.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 18014 components: - type: Transform rot: 1.5707963267948966 rad pos: -39.5,11.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 18544 components: - type: Transform rot: 3.141592653589793 rad pos: 37.5,15.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 18546 components: - type: Transform rot: 3.141592653589793 rad pos: 36.5,15.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 18683 components: - type: Transform rot: 3.141592653589793 rad pos: 35.5,15.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 21618 components: - type: Transform rot: 1.5707963267948966 rad pos: 19.5,14.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 24028 components: - type: Transform pos: -30.5,18.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 25164 components: - type: Transform rot: 3.141592653589793 rad pos: 43.5,22.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 25181 components: - type: Transform rot: -1.5707963267948966 rad pos: 43.5,22.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 25184 components: - type: Transform pos: 43.5,22.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 25304 components: - type: Transform pos: 44.5,22.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 25305 components: - type: Transform pos: 45.5,22.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 25306 components: - type: Transform rot: 1.5707963267948966 rad pos: 45.5,22.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 25307 components: - type: Transform rot: 3.141592653589793 rad pos: 45.5,22.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 25308 components: - type: Transform rot: 3.141592653589793 rad pos: 44.5,22.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 25316 components: - type: Transform rot: -1.5707963267948966 rad pos: 49.5,22.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 25317 components: - type: Transform rot: 1.5707963267948966 rad pos: 51.5,22.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 25318 components: - type: Transform pos: 51.5,22.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 25319 components: - type: Transform pos: 50.5,22.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 25320 components: - type: Transform pos: 49.5,22.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 25321 components: - type: Transform rot: 3.141592653589793 rad pos: 49.5,22.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 25322 components: - type: Transform rot: 3.141592653589793 rad pos: 50.5,22.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 25323 components: - type: Transform rot: 3.141592653589793 rad pos: 51.5,22.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - proto: WindowReinforcedDirectional entities: - uid: 521 @@ -159965,2272 +161204,3066 @@ entities: - type: Transform pos: 10.5,-9.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 836 components: - type: Transform pos: -34.5,-17.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 837 components: - type: Transform pos: -33.5,-17.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 1345 components: - type: Transform pos: 4.5,-24.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 1346 components: - type: Transform pos: 5.5,-24.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 1347 components: - type: Transform pos: 6.5,-24.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 1348 components: - type: Transform pos: 7.5,-24.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 2417 components: - type: Transform pos: 34.5,-25.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 2445 components: - type: Transform pos: 35.5,-25.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 2446 components: - type: Transform pos: 33.5,-25.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 2447 components: - type: Transform rot: -1.5707963267948966 rad pos: 33.5,-25.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 2448 components: - type: Transform rot: 1.5707963267948966 rad pos: 35.5,-25.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 2552 components: - type: Transform rot: 3.141592653589793 rad pos: 33.5,-25.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 2555 components: - type: Transform rot: 3.141592653589793 rad pos: 34.5,-25.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 2556 components: - type: Transform rot: 3.141592653589793 rad pos: 35.5,-25.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 3398 components: - type: Transform rot: 3.141592653589793 rad pos: 3.5,-38.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 3910 components: - type: Transform rot: -1.5707963267948966 rad pos: -9.5,-40.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 3912 components: - type: Transform rot: -1.5707963267948966 rad pos: -9.5,-42.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 4192 components: - type: Transform pos: -46.5,-18.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 4193 components: - type: Transform pos: -45.5,-18.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 4194 components: - type: Transform pos: -44.5,-18.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 4197 components: - type: Transform pos: -40.5,-18.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 4199 components: - type: Transform pos: -41.5,-18.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 4204 components: - type: Transform pos: -42.5,-18.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 4231 components: - type: Transform rot: 3.141592653589793 rad pos: -40.5,-16.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 4232 components: - type: Transform rot: 3.141592653589793 rad pos: -41.5,-16.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 4470 components: - type: Transform pos: -13.5,-44.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 4731 components: - type: Transform rot: 1.5707963267948966 rad pos: -4.5,-68.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 4732 components: - type: Transform rot: 1.5707963267948966 rad pos: -4.5,-66.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 4733 components: - type: Transform rot: -1.5707963267948966 rad pos: 5.5,-68.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 4734 components: - type: Transform rot: -1.5707963267948966 rad pos: 5.5,-66.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 4959 components: - type: Transform rot: 1.5707963267948966 rad pos: 1.5,-65.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 4996 components: - type: Transform rot: 1.5707963267948966 rad pos: 1.5,-66.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 5002 components: - type: Transform rot: -1.5707963267948966 rad pos: -0.5,-69.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 5008 components: - type: Transform rot: 1.5707963267948966 rad pos: 1.5,-69.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 5013 components: - type: Transform rot: -1.5707963267948966 rad pos: -0.5,-65.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 5027 components: - type: Transform rot: 3.141592653589793 rad pos: 5.5,-38.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 5076 components: - type: Transform rot: -1.5707963267948966 rad pos: 6.5,-67.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 5077 components: - type: Transform rot: -1.5707963267948966 rad pos: 6.5,-68.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 5095 components: - type: Transform rot: 1.5707963267948966 rad pos: 1.5,-67.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 5656 components: - type: Transform rot: 3.141592653589793 rad pos: 13.5,1.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 5657 components: - type: Transform rot: 1.5707963267948966 rad pos: 8.5,2.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 5658 components: - type: Transform rot: 3.141592653589793 rad pos: 9.5,1.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 5769 components: - type: Transform pos: -15.5,-44.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 6478 components: - type: Transform rot: -1.5707963267948966 rad pos: 6.5,-66.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 6480 components: - type: Transform rot: -1.5707963267948966 rad pos: 6.5,-65.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 6481 components: - type: Transform rot: 1.5707963267948966 rad pos: 6.5,-65.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 6485 components: - type: Transform rot: 1.5707963267948966 rad pos: 6.5,-66.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 6528 components: - type: Transform rot: 1.5707963267948966 rad pos: 6.5,-67.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 6555 components: - type: Transform rot: 1.5707963267948966 rad pos: 6.5,-68.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 6594 components: - type: Transform rot: 1.5707963267948966 rad pos: 1.5,-64.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 6595 components: - type: Transform rot: -1.5707963267948966 rad pos: -0.5,-67.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 6599 components: - type: Transform rot: -1.5707963267948966 rad pos: -0.5,-66.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 6637 components: - type: Transform rot: -1.5707963267948966 rad pos: -0.5,-64.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 6751 components: - type: Transform rot: -1.5707963267948966 rad pos: -0.5,-68.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 7049 components: - type: Transform pos: -14.5,-44.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 7226 components: - type: Transform rot: 1.5707963267948966 rad pos: 9.5,-10.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 7436 components: - type: Transform rot: -1.5707963267948966 rad pos: -5.5,-66.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 7437 components: - type: Transform rot: -1.5707963267948966 rad pos: -5.5,-65.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 7438 components: - type: Transform rot: 1.5707963267948966 rad pos: -5.5,-65.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 7439 components: - type: Transform rot: 1.5707963267948966 rad pos: -5.5,-66.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 7440 components: - type: Transform rot: 1.5707963267948966 rad pos: -5.5,-67.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 7441 components: - type: Transform rot: 1.5707963267948966 rad pos: -5.5,-68.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 7443 components: - type: Transform rot: 3.141592653589793 rad pos: -113.5,10.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 7448 components: - type: Transform rot: -1.5707963267948966 rad pos: -5.5,-68.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 7451 components: - type: Transform rot: -1.5707963267948966 rad pos: -5.5,-67.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 7456 components: - type: Transform rot: 3.141592653589793 rad pos: -109.5,10.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 7469 components: - type: Transform rot: 1.5707963267948966 rad pos: -4.5,-67.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 7474 components: - type: Transform rot: -1.5707963267948966 rad pos: 5.5,-67.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 7475 components: - type: Transform rot: -1.5707963267948966 rad pos: 5.5,-65.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 7489 components: - type: Transform rot: 1.5707963267948966 rad pos: -4.5,-65.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 7499 components: - type: Transform rot: 1.5707963267948966 rad pos: 1.5,-68.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 7500 components: - type: Transform pos: -109.5,12.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 7505 components: - type: Transform rot: 1.5707963267948966 rad pos: -114.5,11.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 7704 components: - type: Transform rot: -1.5707963267948966 rad pos: -108.5,11.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 7836 components: - type: Transform pos: -113.5,12.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 8159 components: - type: Transform pos: -12.5,-44.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 8160 components: - type: Transform pos: -10.5,-44.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 8385 components: - type: Transform rot: 3.141592653589793 rad pos: -40.5,-15.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 9023 components: - type: Transform rot: -1.5707963267948966 rad pos: 46.5,-16.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 10850 components: - type: Transform rot: 3.141592653589793 rad pos: -0.5,-64.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 10851 components: - type: Transform rot: 3.141592653589793 rad pos: 1.5,-64.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 10852 components: - type: Transform pos: 1.5,-69.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 10853 components: - type: Transform pos: -0.5,-69.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 11099 components: - type: Transform pos: 46.5,-17.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 11253 components: - type: Transform rot: -1.5707963267948966 rad pos: 15.5,-30.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 12599 components: - type: Transform pos: -46.5,15.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 12601 components: - type: Transform pos: -47.5,15.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 13043 components: - type: Transform rot: 3.141592653589793 rad pos: -81.5,15.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 13801 components: - type: Transform pos: -2.5,17.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 13803 components: - type: Transform pos: -4.5,17.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 13969 components: - type: Transform rot: 1.5707963267948966 rad pos: 56.5,8.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 14114 components: - type: Transform rot: -1.5707963267948966 rad pos: -8.5,20.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 14115 components: - type: Transform pos: -8.5,20.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 14116 components: - type: Transform rot: -1.5707963267948966 rad pos: -8.5,22.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 14130 components: - type: Transform pos: -6.5,20.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 14511 components: - type: Transform rot: 3.141592653589793 rad pos: -18.5,16.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 14512 components: - type: Transform rot: 3.141592653589793 rad pos: -19.5,16.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 15728 components: - type: Transform rot: 3.141592653589793 rad pos: -0.5,26.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 15730 components: - type: Transform pos: 1.5,26.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 15734 components: - type: Transform pos: 0.5,26.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 15742 components: - type: Transform pos: -0.5,26.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 15743 components: - type: Transform rot: 3.141592653589793 rad pos: 0.5,26.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 15996 components: - type: Transform rot: 3.141592653589793 rad pos: 1.5,26.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 15997 components: - type: Transform rot: 1.5707963267948966 rad pos: 1.5,26.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 15998 components: - type: Transform rot: -1.5707963267948966 rad pos: -0.5,26.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 16005 components: - type: Transform rot: 3.141592653589793 rad pos: 0.5,22.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 16358 components: - type: Transform rot: 3.141592653589793 rad pos: -82.5,15.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 16616 components: - type: Transform rot: 3.141592653589793 rad pos: 1.5,22.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 16714 components: - type: Transform rot: 3.141592653589793 rad pos: -0.5,22.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 17018 components: - type: Transform rot: 3.141592653589793 rad pos: -85.5,15.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 17700 components: - type: Transform rot: 3.141592653589793 rad pos: -83.5,15.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 17701 components: - type: Transform rot: 3.141592653589793 rad pos: -86.5,15.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 17702 components: - type: Transform rot: 3.141592653589793 rad pos: -92.5,15.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 17703 components: - type: Transform pos: -89.5,19.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 17704 components: - type: Transform pos: -91.5,19.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 17705 components: - type: Transform pos: -86.5,19.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 17706 components: - type: Transform pos: -81.5,19.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 17707 components: - type: Transform pos: -83.5,19.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 17708 components: - type: Transform pos: -78.5,19.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 17709 components: - type: Transform pos: -80.5,19.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 17710 components: - type: Transform rot: 3.141592653589793 rad pos: -80.5,15.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 17843 components: - type: Transform rot: 1.5707963267948966 rad pos: -11.5,5.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 17845 components: - type: Transform rot: 1.5707963267948966 rad pos: -11.5,4.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 17910 components: - type: Transform rot: 1.5707963267948966 rad pos: -11.5,3.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 18209 components: - type: Transform rot: -1.5707963267948966 rad pos: -5.5,-5.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 18211 components: - type: Transform pos: -5.5,-6.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 18579 components: - type: Transform rot: 3.141592653589793 rad pos: -76.5,15.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 18586 components: - type: Transform rot: 1.5707963267948966 rad pos: -5.5,-5.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 18587 components: - type: Transform rot: 1.5707963267948966 rad pos: -5.5,-6.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 18588 components: - type: Transform rot: 3.141592653589793 rad pos: -5.5,-5.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 18589 components: - type: Transform rot: -1.5707963267948966 rad pos: -5.5,-6.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 18870 components: - type: Transform rot: 1.5707963267948966 rad pos: 56.5,6.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 19907 components: - type: Transform rot: 1.5707963267948966 rad pos: 22.5,-7.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 19908 components: - type: Transform rot: 1.5707963267948966 rad pos: 22.5,-6.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 19909 components: - type: Transform rot: 1.5707963267948966 rad pos: 22.5,-5.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 19996 components: - type: Transform pos: -47.5,5.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 21152 components: - type: Transform pos: -46.5,5.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 21191 components: - type: Transform rot: 3.141592653589793 rad pos: -77.5,15.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 21195 components: - type: Transform rot: 3.141592653589793 rad pos: -78.5,15.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 21208 components: - type: Transform pos: -82.5,19.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 21212 components: - type: Transform pos: -85.5,19.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 21213 components: - type: Transform pos: -87.5,19.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 21222 components: - type: Transform pos: -90.5,19.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 21223 components: - type: Transform pos: -92.5,19.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 21228 components: - type: Transform rot: 3.141592653589793 rad pos: -90.5,15.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 21229 components: - type: Transform rot: 3.141592653589793 rad pos: -87.5,15.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 21230 components: - type: Transform rot: 3.141592653589793 rad pos: -89.5,15.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 21231 components: - type: Transform rot: 3.141592653589793 rad pos: -91.5,15.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 21244 components: - type: Transform rot: -1.5707963267948966 rad pos: -74.5,18.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 21246 components: - type: Transform rot: -1.5707963267948966 rad pos: -74.5,16.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 21957 components: - type: Transform pos: -95.5,19.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 21958 components: - type: Transform pos: -96.5,19.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 21959 components: - type: Transform pos: -97.5,19.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 21960 components: - type: Transform rot: 3.141592653589793 rad pos: -97.5,19.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 21961 components: - type: Transform rot: 3.141592653589793 rad pos: -96.5,19.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 21962 components: - type: Transform rot: 3.141592653589793 rad pos: -95.5,19.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 21963 components: - type: Transform pos: -96.5,22.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 21964 components: - type: Transform pos: -95.5,22.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 21969 components: - type: Transform pos: -93.5,19.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 21970 components: - type: Transform rot: 1.5707963267948966 rad pos: -94.5,16.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 21971 components: - type: Transform rot: 3.141592653589793 rad pos: -93.5,15.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 21972 components: - type: Transform rot: 3.141592653589793 rad pos: -95.5,15.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 21973 components: - type: Transform rot: 3.141592653589793 rad pos: -96.5,15.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 21974 components: - type: Transform rot: 3.141592653589793 rad pos: -97.5,15.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 21975 components: - type: Transform rot: 3.141592653589793 rad pos: -98.5,15.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 21977 components: - type: Transform rot: 1.5707963267948966 rad pos: -94.5,18.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 21981 components: - type: Transform rot: 3.141592653589793 rad pos: -100.5,15.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 21983 components: - type: Transform pos: -100.5,19.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 21993 components: - type: Transform pos: -101.5,23.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 21994 components: - type: Transform pos: -100.5,23.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 21995 components: - type: Transform pos: -99.5,23.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 21999 components: - type: Transform rot: 1.5707963267948966 rad pos: -100.5,19.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22000 components: - type: Transform rot: 1.5707963267948966 rad pos: -100.5,20.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22001 components: - type: Transform rot: 1.5707963267948966 rad pos: -100.5,21.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22002 components: - type: Transform rot: 3.141592653589793 rad pos: -100.5,21.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22003 components: - type: Transform rot: 3.141592653589793 rad pos: -101.5,21.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22004 components: - type: Transform rot: 3.141592653589793 rad pos: -102.5,21.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22020 components: - type: Transform pos: -77.5,19.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22021 components: - type: Transform rot: 1.5707963267948966 rad pos: -103.5,34.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22022 components: - type: Transform rot: 1.5707963267948966 rad pos: -103.5,33.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22023 components: - type: Transform rot: 1.5707963267948966 rad pos: -103.5,32.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22024 components: - type: Transform rot: 1.5707963267948966 rad pos: -103.5,31.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22025 components: - type: Transform rot: 1.5707963267948966 rad pos: -103.5,30.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22026 components: - type: Transform rot: 1.5707963267948966 rad pos: -103.5,29.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22027 components: - type: Transform rot: 1.5707963267948966 rad pos: -103.5,28.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22028 components: - type: Transform rot: 1.5707963267948966 rad pos: -103.5,27.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22029 components: - type: Transform rot: 1.5707963267948966 rad pos: -103.5,26.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22030 components: - type: Transform rot: 1.5707963267948966 rad pos: -103.5,25.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22031 components: - type: Transform rot: 1.5707963267948966 rad pos: -103.5,24.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22032 components: - type: Transform rot: 1.5707963267948966 rad pos: -103.5,23.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22033 components: - type: Transform rot: 1.5707963267948966 rad pos: -103.5,22.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22034 components: - type: Transform rot: -1.5707963267948966 rad pos: -101.5,23.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22035 components: - type: Transform rot: -1.5707963267948966 rad pos: -101.5,24.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22036 components: - type: Transform rot: -1.5707963267948966 rad pos: -101.5,25.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22037 components: - type: Transform rot: -1.5707963267948966 rad pos: -101.5,26.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22038 components: - type: Transform rot: -1.5707963267948966 rad pos: -101.5,27.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22039 components: - type: Transform rot: -1.5707963267948966 rad pos: -101.5,28.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22040 components: - type: Transform rot: -1.5707963267948966 rad pos: -101.5,29.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22041 components: - type: Transform rot: -1.5707963267948966 rad pos: -101.5,30.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22042 components: - type: Transform rot: -1.5707963267948966 rad pos: -101.5,31.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22043 components: - type: Transform rot: -1.5707963267948966 rad pos: -101.5,32.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22044 components: - type: Transform rot: -1.5707963267948966 rad pos: -101.5,33.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22045 components: - type: Transform rot: -1.5707963267948966 rad pos: -101.5,34.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22046 components: - type: Transform rot: -1.5707963267948966 rad pos: -101.5,35.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22047 components: - type: Transform pos: -76.5,19.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22048 components: - type: Transform pos: -75.5,19.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22049 components: - type: Transform rot: 3.141592653589793 rad pos: -113.5,1.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22050 components: - type: Transform rot: 3.141592653589793 rad pos: -112.5,1.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22060 components: - type: Transform rot: 3.141592653589793 rad pos: -103.5,34.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22061 components: - type: Transform rot: 3.141592653589793 rad pos: -104.5,34.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22062 components: - type: Transform rot: 3.141592653589793 rad pos: -105.5,34.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22063 components: - type: Transform rot: 3.141592653589793 rad pos: -106.5,34.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22064 components: - type: Transform rot: 3.141592653589793 rad pos: -107.5,34.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22065 components: - type: Transform rot: 3.141592653589793 rad pos: -108.5,34.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22066 components: - type: Transform rot: 3.141592653589793 rad pos: -109.5,34.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22067 components: - type: Transform rot: 3.141592653589793 rad pos: -110.5,34.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22068 components: - type: Transform rot: 3.141592653589793 rad pos: -111.5,34.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22069 components: - type: Transform rot: 3.141592653589793 rad pos: -112.5,34.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22070 components: - type: Transform rot: 3.141592653589793 rad pos: -113.5,34.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22071 components: - type: Transform rot: 3.141592653589793 rad pos: -114.5,34.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22072 components: - type: Transform rot: 3.141592653589793 rad pos: -115.5,34.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22073 components: - type: Transform rot: 3.141592653589793 rad pos: -116.5,34.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22074 components: - type: Transform rot: 3.141592653589793 rad pos: -117.5,34.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22075 components: - type: Transform rot: 3.141592653589793 rad pos: -118.5,34.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22076 components: - type: Transform rot: 3.141592653589793 rad pos: -119.5,34.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22094 components: - type: Transform pos: -102.5,36.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22095 components: - type: Transform pos: -103.5,36.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22096 components: - type: Transform pos: -104.5,36.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22097 components: - type: Transform pos: -105.5,36.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22098 components: - type: Transform pos: -106.5,36.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22099 components: - type: Transform pos: -107.5,36.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22100 components: - type: Transform pos: -108.5,36.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22108 components: - type: Transform rot: -1.5707963267948966 rad pos: -108.5,36.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22109 components: - type: Transform rot: -1.5707963267948966 rad pos: -108.5,37.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22112 components: - type: Transform rot: 1.5707963267948966 rad pos: -114.5,36.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22113 components: - type: Transform rot: 1.5707963267948966 rad pos: -114.5,37.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22121 components: - type: Transform pos: -109.5,38.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22122 components: - type: Transform pos: -110.5,38.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22123 components: - type: Transform pos: -111.5,38.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22124 components: - type: Transform pos: -112.5,38.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22125 components: - type: Transform pos: -113.5,38.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22126 components: - type: Transform pos: -114.5,36.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22127 components: - type: Transform pos: -115.5,36.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22128 components: - type: Transform pos: -116.5,36.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22129 components: - type: Transform pos: -117.5,36.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22130 components: - type: Transform pos: -118.5,36.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22131 components: - type: Transform pos: -119.5,36.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22132 components: - type: Transform pos: -120.5,36.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22140 components: - type: Transform rot: 1.5707963267948966 rad pos: -121.5,35.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22141 components: - type: Transform rot: 1.5707963267948966 rad pos: -121.5,34.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22142 components: - type: Transform rot: 1.5707963267948966 rad pos: -121.5,33.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22143 components: - type: Transform rot: 1.5707963267948966 rad pos: -121.5,32.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22144 components: - type: Transform rot: 1.5707963267948966 rad pos: -121.5,31.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22145 components: - type: Transform rot: 1.5707963267948966 rad pos: -121.5,30.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22146 components: - type: Transform rot: 1.5707963267948966 rad pos: -121.5,29.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22147 components: - type: Transform rot: 1.5707963267948966 rad pos: -121.5,28.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22148 components: - type: Transform rot: 1.5707963267948966 rad pos: -121.5,27.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22149 components: - type: Transform rot: 1.5707963267948966 rad pos: -121.5,26.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22150 components: - type: Transform rot: 1.5707963267948966 rad pos: -121.5,25.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22151 components: - type: Transform rot: 1.5707963267948966 rad pos: -121.5,24.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22152 components: - type: Transform rot: 1.5707963267948966 rad pos: -121.5,23.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22166 components: - type: Transform rot: -1.5707963267948966 rad pos: -119.5,34.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22167 components: - type: Transform rot: -1.5707963267948966 rad pos: -119.5,33.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22168 components: - type: Transform rot: -1.5707963267948966 rad pos: -119.5,32.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22169 components: - type: Transform rot: -1.5707963267948966 rad pos: -119.5,31.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22170 components: - type: Transform rot: -1.5707963267948966 rad pos: -119.5,30.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22171 components: - type: Transform rot: -1.5707963267948966 rad pos: -119.5,29.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22172 components: - type: Transform rot: -1.5707963267948966 rad pos: -119.5,28.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22173 components: - type: Transform rot: -1.5707963267948966 rad pos: -119.5,27.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22174 components: - type: Transform rot: -1.5707963267948966 rad pos: -119.5,26.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22175 components: - type: Transform rot: -1.5707963267948966 rad pos: -119.5,25.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22176 components: - type: Transform rot: -1.5707963267948966 rad pos: -119.5,24.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22177 components: - type: Transform rot: -1.5707963267948966 rad pos: -119.5,23.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22178 components: - type: Transform rot: -1.5707963267948966 rad pos: -119.5,22.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22192 components: - type: Transform rot: 1.5707963267948966 rad pos: -124.5,22.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22193 components: - type: Transform rot: 1.5707963267948966 rad pos: -124.5,21.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22194 components: - type: Transform rot: 1.5707963267948966 rad pos: -124.5,20.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22195 components: - type: Transform rot: 1.5707963267948966 rad pos: -124.5,19.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22196 components: - type: Transform rot: 1.5707963267948966 rad pos: -124.5,18.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22197 components: - type: Transform rot: 1.5707963267948966 rad pos: -124.5,17.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22198 components: - type: Transform rot: 1.5707963267948966 rad pos: -124.5,16.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22199 components: - type: Transform rot: 1.5707963267948966 rad pos: -124.5,15.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22200 components: - type: Transform rot: 1.5707963267948966 rad pos: -124.5,14.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22201 components: - type: Transform rot: 1.5707963267948966 rad pos: -124.5,13.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22202 components: - type: Transform rot: 1.5707963267948966 rad pos: -124.5,12.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22217 components: - type: Transform pos: -121.5,23.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22218 components: - type: Transform pos: -122.5,23.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22219 components: - type: Transform pos: -123.5,23.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22223 components: - type: Transform rot: 3.141592653589793 rad pos: -122.5,21.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22224 components: - type: Transform rot: 3.141592653589793 rad pos: -121.5,21.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22225 components: - type: Transform rot: 3.141592653589793 rad pos: -120.5,21.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22226 components: - type: Transform rot: -1.5707963267948966 rad pos: -122.5,19.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22227 components: - type: Transform rot: -1.5707963267948966 rad pos: -122.5,20.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22228 components: - type: Transform rot: -1.5707963267948966 rad pos: -122.5,21.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22232 components: - type: Transform pos: -122.5,19.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22234 components: - type: Transform rot: 3.141592653589793 rad pos: -122.5,15.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22236 components: - type: Transform rot: -1.5707963267948966 rad pos: -122.5,15.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22237 components: - type: Transform rot: -1.5707963267948966 rad pos: -122.5,14.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22238 components: - type: Transform rot: -1.5707963267948966 rad pos: -122.5,13.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22242 components: - type: Transform rot: 3.141592653589793 rad pos: -123.5,11.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22243 components: - type: Transform rot: 3.141592653589793 rad pos: -122.5,11.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22244 components: - type: Transform rot: 3.141592653589793 rad pos: -121.5,11.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22245 components: - type: Transform rot: 3.141592653589793 rad pos: -120.5,11.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22246 components: - type: Transform rot: 3.141592653589793 rad pos: -119.5,11.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22252 components: - type: Transform pos: -122.5,13.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22253 components: - type: Transform pos: -121.5,13.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22254 components: - type: Transform pos: -120.5,13.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22255 components: - type: Transform pos: -119.5,13.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22256 components: - type: Transform pos: -118.5,13.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22262 components: - type: Transform rot: -1.5707963267948966 rad pos: -117.5,12.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22263 components: - type: Transform rot: -1.5707963267948966 rad pos: -117.5,11.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22264 components: - type: Transform rot: -1.5707963267948966 rad pos: -117.5,10.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22265 components: - type: Transform rot: -1.5707963267948966 rad pos: -117.5,9.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22266 components: - type: Transform rot: -1.5707963267948966 rad pos: -117.5,8.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22267 components: - type: Transform rot: -1.5707963267948966 rad pos: -117.5,7.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22268 components: - type: Transform rot: -1.5707963267948966 rad pos: -117.5,6.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22269 components: - type: Transform rot: -1.5707963267948966 rad pos: -117.5,5.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22278 components: - type: Transform rot: 1.5707963267948966 rad pos: -119.5,11.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22279 components: - type: Transform rot: 1.5707963267948966 rad pos: -119.5,10.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22280 components: - type: Transform rot: 1.5707963267948966 rad pos: -119.5,9.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22281 components: - type: Transform rot: 1.5707963267948966 rad pos: -119.5,8.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22282 components: - type: Transform rot: 1.5707963267948966 rad pos: -119.5,7.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22283 components: - type: Transform rot: 1.5707963267948966 rad pos: -119.5,6.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22284 components: - type: Transform rot: 1.5707963267948966 rad pos: -119.5,5.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22285 components: - type: Transform rot: 1.5707963267948966 rad pos: -119.5,4.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22294 components: - type: Transform rot: 3.141592653589793 rad pos: -118.5,3.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22295 components: - type: Transform rot: 3.141592653589793 rad pos: -117.5,3.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22296 components: - type: Transform rot: 3.141592653589793 rad pos: -116.5,3.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22297 components: - type: Transform rot: 3.141592653589793 rad pos: -115.5,3.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22298 components: - type: Transform rot: 3.141592653589793 rad pos: -114.5,3.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22304 components: - type: Transform pos: -117.5,5.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22305 components: - type: Transform pos: -116.5,5.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22306 components: - type: Transform pos: -115.5,5.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22307 components: - type: Transform pos: -114.5,5.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22308 components: - type: Transform pos: -113.5,5.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22309 components: - type: Transform pos: -112.5,5.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22316 components: - type: Transform rot: 1.5707963267948966 rad pos: -114.5,2.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22317 components: - type: Transform rot: 1.5707963267948966 rad pos: -114.5,3.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22322 components: - type: Transform rot: 3.141592653589793 rad pos: -111.5,1.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22323 components: - type: Transform rot: 3.141592653589793 rad pos: -110.5,1.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22324 components: - type: Transform rot: 3.141592653589793 rad pos: -109.5,1.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22330 components: - type: Transform rot: -1.5707963267948966 rad pos: -108.5,2.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22331 components: - type: Transform rot: -1.5707963267948966 rad pos: -108.5,3.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22334 components: - type: Transform rot: 1.5707963267948966 rad pos: -112.5,5.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22335 components: - type: Transform rot: -1.5707963267948966 rad pos: -110.5,5.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22344 components: - type: Transform pos: -110.5,5.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22345 components: - type: Transform pos: -109.5,5.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22346 components: - type: Transform pos: -108.5,5.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22347 components: - type: Transform pos: -107.5,5.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22348 components: - type: Transform pos: -106.5,5.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22349 components: - type: Transform pos: -105.5,5.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22350 components: - type: Transform rot: 3.141592653589793 rad pos: -108.5,3.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22351 components: - type: Transform rot: 3.141592653589793 rad pos: -107.5,3.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22352 components: - type: Transform rot: 3.141592653589793 rad pos: -106.5,3.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22353 components: - type: Transform rot: 3.141592653589793 rad pos: -105.5,3.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22354 components: - type: Transform rot: 3.141592653589793 rad pos: -104.5,3.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22360 components: - type: Transform rot: -1.5707963267948966 rad pos: -103.5,4.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22361 components: - type: Transform rot: -1.5707963267948966 rad pos: -103.5,5.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22362 components: - type: Transform rot: -1.5707963267948966 rad pos: -103.5,6.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22363 components: - type: Transform rot: -1.5707963267948966 rad pos: -103.5,7.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22364 components: - type: Transform rot: -1.5707963267948966 rad pos: -103.5,8.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22365 components: - type: Transform rot: -1.5707963267948966 rad pos: -103.5,9.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22366 components: - type: Transform rot: -1.5707963267948966 rad pos: -103.5,10.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22367 components: - type: Transform rot: -1.5707963267948966 rad pos: -103.5,11.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22384 components: - type: Transform rot: 1.5707963267948966 rad pos: -105.5,5.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22385 components: - type: Transform rot: 1.5707963267948966 rad pos: -105.5,6.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22386 components: - type: Transform rot: 1.5707963267948966 rad pos: -105.5,7.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22387 components: - type: Transform rot: 1.5707963267948966 rad pos: -105.5,8.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22388 components: - type: Transform rot: 1.5707963267948966 rad pos: -105.5,9.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22389 components: - type: Transform rot: 1.5707963267948966 rad pos: -105.5,10.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22390 components: - type: Transform rot: 1.5707963267948966 rad pos: -105.5,11.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22391 components: - type: Transform rot: 1.5707963267948966 rad pos: -105.5,12.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22392 components: - type: Transform pos: -104.5,13.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22393 components: - type: Transform pos: -103.5,13.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22394 components: - type: Transform pos: -102.5,13.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22395 components: - type: Transform pos: -101.5,13.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22396 components: - type: Transform pos: -100.5,13.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22402 components: - type: Transform rot: 1.5707963267948966 rad pos: -100.5,13.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22403 components: - type: Transform rot: 1.5707963267948966 rad pos: -100.5,14.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22404 components: - type: Transform rot: 1.5707963267948966 rad pos: -100.5,15.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22408 components: - type: Transform rot: -1.5707963267948966 rad pos: -98.5,15.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22409 components: - type: Transform rot: -1.5707963267948966 rad pos: -98.5,14.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22410 components: - type: Transform rot: -1.5707963267948966 rad pos: -98.5,13.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22411 components: - type: Transform rot: -1.5707963267948966 rad pos: -98.5,12.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22416 components: - type: Transform rot: 3.141592653589793 rad pos: -99.5,11.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22417 components: - type: Transform rot: 3.141592653589793 rad pos: -100.5,11.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22418 components: - type: Transform rot: 3.141592653589793 rad pos: -101.5,11.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22419 components: - type: Transform rot: 3.141592653589793 rad pos: -102.5,11.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 22420 components: - type: Transform rot: 3.141592653589793 rad pos: -103.5,11.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 24660 components: - type: Transform rot: -1.5707963267948966 rad pos: -0.5,22.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 24663 components: - type: Transform pos: -0.5,22.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 24666 components: - type: Transform pos: 0.5,22.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 24675 components: - type: Transform pos: 1.5,22.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 24676 components: - type: Transform rot: 1.5707963267948966 rad pos: 1.5,22.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 25388 components: - type: Transform rot: -1.5707963267948966 rad pos: -110.5,8.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - uid: 25389 components: - type: Transform rot: 1.5707963267948966 rad pos: -112.5,8.5 parent: 60 + - type: DeltaPressure + gridUid: 60 - proto: Wirecutter entities: - uid: 19191 From b4f4d6e2955bfa9b5be1b5cbd999c0392f2ece57 Mon Sep 17 00:00:00 2001 From: PJBot Date: Sun, 14 Sep 2025 23:47:14 +0000 Subject: [PATCH 029/143] Automatic changelog update --- Resources/Changelog/Maps.yml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Resources/Changelog/Maps.yml b/Resources/Changelog/Maps.yml index 24c4c8ced9..15346d9851 100644 --- a/Resources/Changelog/Maps.yml +++ b/Resources/Changelog/Maps.yml @@ -665,4 +665,11 @@ id: 79 time: '2025-09-11T01:46:55.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/40199 +- author: ToastEnjoyer + changes: + - message: On bagel, fixed some unlinked radiation shutters at engineering. + type: Fix + id: 80 + time: '2025-09-14T23:46:04.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/40358 Order: 1 From 97d4153d84c46417c301ee8406d3c91ac7b007b4 Mon Sep 17 00:00:00 2001 From: SlamBamActionman <83650252+SlamBamActionman@users.noreply.github.com> Date: Mon, 15 Sep 2025 02:36:47 +0200 Subject: [PATCH 030/143] Add jetpacks to the Nukie Infiltrator (#39887) --- Resources/Maps/Shuttles/infiltrator.yml | 272 ++++++++++++++---------- 1 file changed, 157 insertions(+), 115 deletions(-) diff --git a/Resources/Maps/Shuttles/infiltrator.yml b/Resources/Maps/Shuttles/infiltrator.yml index d8b50e99ab..0730d648c2 100644 --- a/Resources/Maps/Shuttles/infiltrator.yml +++ b/Resources/Maps/Shuttles/infiltrator.yml @@ -4,8 +4,8 @@ meta: engineVersion: 266.0.0 forkId: "" forkVersion: "" - time: 08/18/2025 05:46:30 - entityCount: 822 + time: 08/25/2025 16:10:34 + entityCount: 828 maps: [] grids: - 1 @@ -75,91 +75,88 @@ entities: version: 2 data: tiles: - -1,-4: - 0: 65535 - -1,-3: - 0: 65535 - -1,-2: - 0: 65535 - -1,-1: - 0: 61439 - 0,-4: - 0: 65535 - 0,-3: - 0: 65535 - 0,-2: - 0: 65535 - 0,-1: - 0: 65535 - 1,-4: - 0: 30591 - 1,-3: - 0: 21879 - 1: 512 - 1,-2: - 0: 30325 - 2: 256 - 1,-1: - 0: 55 - 0,-5: - 0: 65535 - 1,-5: - 0: 65399 - -1,-5: - 0: 65535 - -3,-4: - 0: 12 - -2,-4: - 0: 61439 - -2,-2: - 0: 65516 - -2,-1: - 0: 2287 - -2,-3: - 0: 35054 - 1: 1536 - -1,0: - 0: 8 -3,-5: - 0: 52224 - -2,-8: - 0: 65504 - -2,-7: - 0: 65535 - -2,-6: - 0: 65535 + 0: 49152 -2,-5: - 0: 65535 - -1,-8: - 0: 65526 - -1,-7: - 0: 65535 - -1,-6: - 0: 65535 - 0,-8: - 0: 65523 - 0,-7: - 0: 61303 - 3: 4096 - 4: 136 - 0,-6: - 3: 1 - 0: 65534 - 1,-8: - 0: 30512 - 1,-7: - 0: 30549 - 5: 34 - 1,-6: - 0: 30583 - -1,-9: - 0: 26112 - 0,-9: - 0: 13056 - 2,-4: - 0: 1 - 2,-5: + 0: 64012 + 1: 1 + -2,-4: + 0: 52362 + 1: 256 + -2,-3: + 1: 36384 + 0: 136 + -2,-2: + 0: 52224 + 1: 4 + -2,-1: + 1: 32 + 0: 8 + -1,-4: + 0: 61071 + -1,-3: + 1: 256 + 0: 52430 + -1,-2: + 0: 65528 + -1,-1: + 0: 239 + -1,-5: + 0: 65421 + 0,-4: + 0: 48015 + 0,-3: + 0: 4507 + 1: 35840 + 0,-2: + 0: 48944 + 0,-1: + 0: 59 + 0,-5: + 0: 65295 + 1,-4: + 0: 4354 + 1: 1024 + 1,-3: + 1: 800 + 1,-2: + 1: 1 0: 4352 + 1,-5: + 0: 61953 + 1: 4 + 1,-1: + 1: 32 + 2,-5: + 0: 4096 + -2,-7: + 0: 61166 + -2,-6: + 0: 52974 + -2,-8: + 1: 704 + -1,-8: + 1: 8752 + -1,-7: + 0: 55296 + 1: 238 + -1,-6: + 0: 64925 + 0,-7: + 1: 51 + 0: 53248 + 2: 136 + 0,-6: + 0: 65421 + 0,-8: + 1: 8928 + 1,-8: + 1: 528 + 1,-7: + 0: 12288 + 3: 34 + 1,-6: + 0: 4867 uniqueMixes: - volume: 2500 temperature: 293.15 @@ -177,7 +174,7 @@ entities: - 0 - 0 - volume: 2500 - temperature: 293.15 + immutable: True moles: - 0 - 0 @@ -191,36 +188,6 @@ entities: - 0 - 0 - 0 - - volume: 2500 - temperature: 293.14996 - moles: - - 20.078888 - - 75.53487 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - volume: 2500 - temperature: 293.15 - moles: - - 20.619795 - - 77.56971 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - volume: 2500 temperature: 293.15 moles: @@ -3541,6 +3508,43 @@ entities: - type: Transform pos: 3.5,-3.5 parent: 1 +- proto: JetpackBlackFilled + entities: + - uid: 313 + components: + - type: Transform + parent: 45 + - type: Physics + canCollide: False + - type: InsideEntityStorage + - uid: 501 + components: + - type: Transform + parent: 45 + - type: Physics + canCollide: False + - type: InsideEntityStorage + - uid: 502 + components: + - type: Transform + parent: 45 + - type: Physics + canCollide: False + - type: InsideEntityStorage + - uid: 511 + components: + - type: Transform + parent: 45 + - type: Physics + canCollide: False + - type: InsideEntityStorage + - uid: 512 + components: + - type: Transform + parent: 45 + - type: Physics + canCollide: False + - type: InsideEntityStorage - proto: KnifePlastic entities: - uid: 498 @@ -3598,6 +3602,44 @@ entities: showEnts: False occludes: True ent: null + - uid: 45 + components: + - type: Transform + pos: -1.5,-17.5 + parent: 1 + - type: EntityStorage + air: + volume: 200 + immutable: False + temperature: 293.14673 + moles: + - 1.7459903 + - 6.568249 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - type: ContainerContainer + containers: + entity_storage: !type:Container + showEnts: False + occludes: True + ents: + - 313 + - 501 + - 502 + - 511 + - 512 + paper_label: !type:ContainerSlot + showEnts: False + occludes: True + ent: null - proto: MedicalBed entities: - uid: 500 From f1d52e0c13a7d40265073efb0817615e38968175 Mon Sep 17 00:00:00 2001 From: Nox Date: Sun, 14 Sep 2025 17:37:41 -0700 Subject: [PATCH 031/143] Plasma Armory Restock (#39763) * made some tweaks and fixes to the equipment in armory, security, and genpop. Signed-off-by: Nox38 * implemented minor fixes Signed-off-by: Nox38 * Added changes from #40012 Signed-off-by: Nox38 * Removed warden gun, tweaked some things, fixed camera coverage and atmos devices etc Signed-off-by: Nox38 * Got comp to sign off on changes, finished everything up, good to merge! Signed-off-by: Nox38 * Tested for issues and fixed Signed-off-by: Nox38 --------- Signed-off-by: Nox38 --- Resources/Maps/plasma.yml | 2722 ++++++++++++++++++++++++++----------- 1 file changed, 1922 insertions(+), 800 deletions(-) diff --git a/Resources/Maps/plasma.yml b/Resources/Maps/plasma.yml index b2ae035e04..c676f8b611 100644 --- a/Resources/Maps/plasma.yml +++ b/Resources/Maps/plasma.yml @@ -4,8 +4,8 @@ meta: engineVersion: 266.0.0 forkId: "" forkVersion: "" - time: 08/31/2025 08:36:21 - entityCount: 26386 + time: 09/03/2025 00:56:56 + entityCount: 26486 maps: - 1 grids: @@ -126,7 +126,7 @@ entities: version: 7 -6,0: ind: -6,0 - tiles: AwAAAAAAAAMAAAAAAAADAAAAAAMAgwAAAAAAAAcAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAADAAAAAAAAAQAAAAAAgAMAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAAMAAAAAAgADAAAAAAIAAwAAAAADAIMAAAAAAAAHAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAAwAAAAAAAAEAAAAAAAADAAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAAADAAAAAAAAAwAAAAACAAMAAAAAAgCDAAAAAAAABwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAAAMAAAAAAAABAAAAAADAAwAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAAQAAAAAAwAEAAAAAAIABAAAAAADAAMAAAAAAQCDAAAAAAAAAwAAAAAAAAQAAAAAAwAEAAAAAAEAAwAAAAABAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAAAHAAAAAAcAgwAAAAAAAIMAAAAAAAAEAAAAAAAABAAAAAABAAQAAAAAAgADAAAAAAAAgwAAAAAAAAMAAAAAAAAEAAAAAAEABAAAAAADAAMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAABwAAAAAAAIMAAAAAAACDAAAAAAAAAwAAAAAAAAQAAAAAAQAEAAAAAAAAAwAAAAABAIMAAAAAAAADAAAAAAAABAAAAAADAAQAAAAAAwADAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAEAAAAAAEABAAAAAADAAMAAAAAAACDAAAAAAAAAwAAAAACAAQAAAAAAgAEAAAAAAIABAAAAAADAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAMABAAAAAADAAQAAAAAAQADAAAAAAAAgwAAAAAAAAMAAAAAAwAEAAAAAAMABAAAAAAAAAMAAAAAAQCDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAABAAQAAAAAAAAEAAAAAAAAAwAAAAAAAIMAAAAAAAADAAAAAAAABAAAAAAAAAQAAAAAAgADAAAAAAEAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAIMAAAAAAAAEAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAAQAAAAAAQAEAAAAAAEAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAMABAAAAAADAAQAAAAAAQAEAAAAAAMABAAAAAAAAAQAAAAAAQAEAAAAAAIACgAAAAAAAAoAAAAAAAAHAAAAAAAABwAAAAAJAIMAAAAAAACDAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAIgAAAAACACIAAAAAAAAEAAAAAAAACgAAAAAAAAoAAAAAAAAKAAAAAAAABwAAAAAJAAcAAAAAAAAHAAAAAAMABwAAAAAAAAcAAAAAAACDAAAAAAAAgwAAAAAAAAEAAAAAAAABAAAAAAAAAAAAAAAAAA== + tiles: AwAAAAAAAAMAAAAAAAADAAAAAAMAgwAAAAAAAAcAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAADAAAAAAAAAQAAAAAAgAMAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAAMAAAAAAgADAAAAAAIAAwAAAAADAIMAAAAAAAAHAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAAwAAAAAAAAEAAAAAAAADAAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAAADAAAAAAAAAwAAAAACAAMAAAAAAgCDAAAAAAAABwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAAAMAAAAAAAABAAAAAADAAwAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAAQAAAAAAwAEAAAAAAIABAAAAAADAAMAAAAAAQCDAAAAAAAAAwAAAAAAAAQAAAAAAwAEAAAAAAEAAwAAAAABAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAAAHAAAAAAcAgwAAAAAAAIMAAAAAAAAEAAAAAAAABAAAAAABAAQAAAAAAgADAAAAAAAAgwAAAAAAAAMAAAAAAAAEAAAAAAEABAAAAAADAAMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAABwAAAAAAAIMAAAAAAACDAAAAAAAAAwAAAAAAAAQAAAAAAQAEAAAAAAAAAwAAAAABAIMAAAAAAAADAAAAAAAABAAAAAADAAQAAAAAAwADAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAAcAAAAAAACDAAAAAAAAgwAAAAAAAAMAAAAAAAAEAAAAAAEABAAAAAADAAMAAAAAAACDAAAAAAAAAwAAAAACAAQAAAAAAgAEAAAAAAIABAAAAAADAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAMABAAAAAADAAQAAAAAAQADAAAAAAAAgwAAAAAAAAMAAAAAAwAEAAAAAAMABAAAAAAAAAMAAAAAAQCDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAABAAQAAAAAAAAEAAAAAAAAAwAAAAAAAIMAAAAAAAADAAAAAAAABAAAAAAAAAQAAAAAAgADAAAAAAEAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAIMAAAAAAAAEAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAAQAAAAAAQAEAAAAAAEAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAMABAAAAAADAAQAAAAAAQAEAAAAAAMABAAAAAAAAAQAAAAAAQAEAAAAAAIACgAAAAAAAAoAAAAAAAAHAAAAAAAABwAAAAAJAIMAAAAAAACDAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAIgAAAAACACIAAAAAAAAEAAAAAAAACgAAAAAAAAoAAAAAAAAKAAAAAAAABwAAAAAJAAcAAAAAAAAHAAAAAAMABwAAAAAAAAcAAAAAAACDAAAAAAAAgwAAAAAAAAEAAAAAAAABAAAAAAAAAAAAAAAAAA== version: 7 -4,-1: ind: -4,-1 @@ -142,7 +142,7 @@ entities: version: 7 -5,0: ind: -5,0 - tiles: gwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAAwAAAAACAAMAAAAAAACDAAAAAAAABAAAAAADAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAAsAAAAAAAALAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAAADAAAAAAEAAwAAAAAAAAMAAAAAAwADAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAAADAAAAAAEAAwAAAAACAAMAAAAAAAADAAAAAAEAAwAAAAADAIMAAAAAAACDAAAAAAAABwAAAAAEAAcAAAAABgAHAAAAAAAABwAAAAAAAAcAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAACDAAAAAAAAAwAAAAACAAMAAAAAAgAjAAAAAAAAIwAAAAABAAMAAAAAAACDAAAAAAAAgwAAAAAAAAcAAAAAAAAHAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAgwAAAAAAAAMAAAAAAAADAAAAAAMAIwAAAAABACMAAAAAAAADAAAAAAEAgwAAAAAAAIMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAIMAAAAAAAADAAAAAAEAAwAAAAADAAMAAAAAAwADAAAAAAAAAwAAAAAAAIMAAAAAAACDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAACDAAAAAAAAAwAAAAABAAMAAAAAAQADAAAAAAMAAwAAAAACAAMAAAAAAgCDAAAAAAAAgwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAABAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAgwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== + tiles: gwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAAwAAAAACAAMAAAAAAACDAAAAAAAABAAAAAADAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAAsAAAAAAAALAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAAADAAAAAAEAAwAAAAAAAAMAAAAAAwADAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAAADAAAAAAEAAwAAAAACAAMAAAAAAAADAAAAAAEAAwAAAAADAIMAAAAAAACDAAAAAAAABwAAAAAEAAcAAAAABgAHAAAAAAAABwAAAAAAAAcAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAACDAAAAAAAAAwAAAAACAAMAAAAAAgAjAAAAAAAAIwAAAAABAAMAAAAAAACDAAAAAAAAgwAAAAAAAAcAAAAAAAAHAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAgwAAAAAAAAMAAAAAAAADAAAAAAMAIwAAAAABACMAAAAAAAADAAAAAAEAgwAAAAAAAIMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAIMAAAAAAAADAAAAAAEAAwAAAAADAAMAAAAAAwADAAAAAAAAAwAAAAAAAIMAAAAAAACDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAACDAAAAAAAAAwAAAAABAAMAAAAAAQADAAAAAAMAAwAAAAACAAMAAAAAAgCDAAAAAAAAgwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAABAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAgwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== version: 7 -6,-1: ind: -6,-1 @@ -150,7 +150,7 @@ entities: version: 7 -6,-4: ind: -6,-4 - tiles: gwAAAAAAAAcAAAAAAAAWAAAAAAAAFgAAAAAAABYAAAAAAAAWAAAAAAAAKQAAAAAAABYAAAAAAQAWAAAAAAAAFgAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAALAAcAAAAACQAHAAAAAAAABwAAAAAAAIMAAAAAAAAHAAAAAAAAFgAAAAAAABYAAAAAAAAWAAAAAAMAFgAAAAADACkAAAAAAAAWAAAAAAAAFgAAAAAAABYAAAAAAAAHAAAAAAIABwAAAAAAAAcAAAAABgAHAAAAAAAABwAAAAAAAAcAAAAAAgCDAAAAAAAABwAAAAAEAAcAAAAACwApAAAAAAAAKQAAAAAAABYAAAAAAAApAAAAAAAAFgAAAAAAABYAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAoABwAAAAAAAAcAAAAAAAAHAAAAAAAAgwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAACkAAAAAAAAWAAAAAAAAKQAAAAAAABYAAAAAAAAWAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAALAAcAAAAAAAAHAAAAAAAABwAAAAAAAIMAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAACDAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAKAAcAAAAABAAHAAAAAAAACwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAABwAHAAAAAAsABwAAAAAAAAcAAAAABwAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAsAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAALAAAAAAAABwAAAAACAAcAAAAABgAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAMAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAwAgwAAAAAAAAcAAAAAAAAHAAAAAAMABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAgAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAgABwAAAAAFAAcAAAAAAAAHAAAAAAAABwAAAAALAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAAQAAAAAAgADAAAAAAAAAwAAAAADAIMAAAAAAAAsAAAAAAEALAAAAAABACwAAAAAAwAsAAAAAAIALAAAAAACACwAAAAAAAAvAAAAAAAALwAAAAAAAC8AAAAAAAAvAAAAAAAALwAAAAAAAC8AAAAAAAAEAAAAAAIAAwAAAAADAAMAAAAAAgCDAAAAAAAALAAAAAAAACwAAAAAAgAsAAAAAAAALAAAAAABACwAAAAAAQAsAAAAAAAALwAAAAAAAC8AAAAAAAAvAAAAAAAALwAAAAAAAC8AAAAAAAAvAAAAAAgAgwAAAAAAAAMAAAAAAwADAAAAAAMAgwAAAAAAACwAAAAAAAAsAAAAAAMALAAAAAAAACwAAAAAAQAsAAAAAAIALAAAAAAAAC8AAAAAAAAvAAAAAAcALwAAAAAAAC8AAAAAAAAvAAAAAAIALwAAAAAAAA== + tiles: gwAAAAAAAAcAAAAAAAAWAAAAAAAAFgAAAAAAABYAAAAAAAAWAAAAAAAAKQAAAAAAABYAAAAAAQAWAAAAAAAAFgAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAALAAcAAAAACQAHAAAAAAAABwAAAAAAAIMAAAAAAAAHAAAAAAAAFgAAAAAAABYAAAAAAAAWAAAAAAMAFgAAAAADACkAAAAAAAAWAAAAAAAAFgAAAAAAABYAAAAAAAAHAAAAAAIABwAAAAAAAAcAAAAABgAHAAAAAAAABwAAAAAAAAcAAAAAAgCDAAAAAAAABwAAAAAEAAcAAAAACwApAAAAAAAAKQAAAAAAABYAAAAAAAApAAAAAAAAFgAAAAAAABYAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAoABwAAAAAAAAcAAAAAAAAHAAAAAAAAgwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAACkAAAAAAAAWAAAAAAAAKQAAAAAAABYAAAAAAAAWAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAALAAcAAAAAAAAHAAAAAAAABwAAAAAAAIMAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAACDAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAKAAcAAAAABAAHAAAAAAAACwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAABwAHAAAAAAsABwAAAAAAAAcAAAAABwAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAsAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAALAAAAAAAABwAAAAACAAcAAAAABgAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAMAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAwAgwAAAAAAAAcAAAAAAAAHAAAAAAMABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAgAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAgABwAAAAAFAAcAAAAAAAAHAAAAAAAABwAAAAALAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAAADAAAAAAAAAwAAAAADAIMAAAAAAAAsAAAAAAEALAAAAAABACwAAAAAAwAsAAAAAAIALAAAAAACACwAAAAAAAAvAAAAAAAALwAAAAAAAC8AAAAAAAAvAAAAAAAALwAAAAAAAC8AAAAAAACDAAAAAAAAAwAAAAADAAMAAAAAAgCDAAAAAAAALAAAAAAAACwAAAAAAgAsAAAAAAAALAAAAAABACwAAAAAAQAsAAAAAAAALwAAAAAAAC8AAAAAAAAvAAAAAAAALwAAAAAAAC8AAAAAAAAvAAAAAAgAgwAAAAAAAAMAAAAAAwADAAAAAAMAgwAAAAAAACwAAAAAAAAsAAAAAAMALAAAAAAAACwAAAAAAQAsAAAAAAIALAAAAAAAAC8AAAAAAAAvAAAAAAcALwAAAAAAAC8AAAAAAAAvAAAAAAIALwAAAAAAAA== version: 7 -3,-2: ind: -3,-2 @@ -182,7 +182,7 @@ entities: version: 7 -6,-2: ind: -6,-2 - tiles: BAAAAAADAAMAAAAAAwADAAAAAAIAAwAAAAAAAAMAAAAAAAAEAAAAAAMAgwAAAAAAAAMAAAAAAwADAAAAAAIAAwAAAAACAIMAAAAAAAADAAAAAAMAAwAAAAACAAMAAAAAAAADAAAAAAIAAwAAAAADAAQAAAAAAQADAAAAAAEAAwAAAAAAAAMAAAAAAwADAAAAAAEABAAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAAADAAAAAAEAgwAAAAAAAIMAAAAAAAAEAAAAAAAAAwAAAAABAAMAAAAAAQADAAAAAAAAAwAAAAABAAQAAAAAAwCDAAAAAAAAAwAAAAADAAMAAAAAAQADAAAAAAIAAwAAAAACAAMAAAAAAQADAAAAAAAAAwAAAAABAAMAAAAAAQADAAAAAAAABAAAAAAAAAMAAAAAAQADAAAAAAIAAwAAAAADAAMAAAAAAAAEAAAAAAIAgwAAAAAAAAMAAAAAAgADAAAAAAAAAwAAAAABAAMAAAAAAgADAAAAAAAAAwAAAAABAAMAAAAAAAADAAAAAAAAAwAAAAADAAQAAAAAAAADAAAAAAEAAwAAAAACAAMAAAAAAgADAAAAAAIABAAAAAADAAMAAAAAAAADAAAAAAEAAwAAAAABAAMAAAAAAwADAAAAAAIAAwAAAAACAAMAAAAAAgADAAAAAAEAAwAAAAABAAMAAAAAAgAEAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAABAAQAAAAAAwCDAAAAAAAAAwAAAAADAAMAAAAAAgADAAAAAAMAAwAAAAABAAMAAAAAAQADAAAAAAIAAwAAAAADAAMAAAAAAwADAAAAAAIABAAAAAABAAQAAAAAAAAEAAAAAAIABAAAAAACAAQAAAAAAwAEAAAAAAIAgwAAAAAAAAMAAAAAAQADAAAAAAIAAwAAAAADAAMAAAAAAAADAAAAAAEAAwAAAAADAAMAAAAAAgADAAAAAAMAAwAAAAADAAQAAAAAAAAEAAAAAAEABAAAAAACAAQAAAAAAgAEAAAAAAAABAAAAAACAIMAAAAAAACDAAAAAAAABAAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAAALAAAAAAAAgwAAAAAAAIMAAAAAAAAEAAAAAAIABAAAAAAAAIMAAAAAAAAEAAAAAAIABAAAAAADAAQAAAAAAwAEAAAAAAEABAAAAAADAAQAAAAAAAAEAAAAAAEAgwAAAAAAABIAAAAAAAASAAAAAAAAEgAAAAAAABIAAAAAAAASAAAAAAAABAAAAAAAAAQAAAAAAwCDAAAAAAAABAAAAAABAAQAAAAAAwAEAAAAAAEABAAAAAACAAQAAAAAAgAEAAAAAAIABAAAAAABAIMAAAAAAAASAAAAAAAAEgAAAAAAABIAAAAAAAASAAAAAAAAEgAAAAAAAAsAAAAAAAALAAAAAAAAgwAAAAAAAAQAAAAAAQAEAAAAAAAABAAAAAACAAQAAAAAAwAEAAAAAAIABAAAAAACAAQAAAAAAQALAAAAAAAAEgAAAAAAABIAAAAAAAASAAAAAAAAEgAAAAAAABIAAAAAAACDAAAAAAAABAAAAAADAIMAAAAAAAAEAAAAAAMABAAAAAAAAAQAAAAAAAAEAAAAAAIABAAAAAACAAQAAAAAAgAEAAAAAAAAgwAAAAAAABIAAAAAAAASAAAAAAAAEgAAAAAAABIAAAAAAAASAAAAAAAABAAAAAACAAQAAAAAAwCDAAAAAAAABAAAAAAAAAQAAAAAAQAEAAAAAAMAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAAASAAAAAAAAEgAAAAAAABIAAAAAAAASAAAAAAAAEgAAAAAAAAQAAAAAAQAEAAAAAAAABAAAAAABAAQAAAAAAgAEAAAAAAMABAAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAEgAAAAAAABIAAAAAAAASAAAAAAAAEgAAAAAAABIAAAAAAAAEAAAAAAIABAAAAAADAIMAAAAAAAAEAAAAAAAABAAAAAABAAQAAAAAAwCDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAAQAAAAAAwCDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAA== + tiles: BAAAAAADAAMAAAAAAwADAAAAAAIAAwAAAAAAAAMAAAAAAAAEAAAAAAMAgwAAAAAAAAMAAAAAAwADAAAAAAIAAwAAAAACAIMAAAAAAAADAAAAAAMAAwAAAAACAAMAAAAAAAADAAAAAAIAAwAAAAADAAQAAAAAAQADAAAAAAEAAwAAAAAAAAMAAAAAAwADAAAAAAEABAAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAAADAAAAAAEAgwAAAAAAAIMAAAAAAAAEAAAAAAAAAwAAAAABAAMAAAAAAQADAAAAAAAAAwAAAAABAAQAAAAAAwCDAAAAAAAAAwAAAAADAAMAAAAAAQADAAAAAAIAAwAAAAACAAMAAAAAAQADAAAAAAAAAwAAAAABAAMAAAAAAQADAAAAAAAABAAAAAAAAAMAAAAAAQADAAAAAAIAAwAAAAADAAMAAAAAAAAEAAAAAAIAgwAAAAAAAAMAAAAAAgADAAAAAAAAAwAAAAABAAMAAAAAAgADAAAAAAAAAwAAAAABAAMAAAAAAAADAAAAAAAAAwAAAAADAAQAAAAAAAADAAAAAAEAAwAAAAACAAMAAAAAAgADAAAAAAIABAAAAAADAAMAAAAAAAADAAAAAAEAAwAAAAABAAMAAAAAAwADAAAAAAIAAwAAAAACAAMAAAAAAgADAAAAAAEAAwAAAAABAAMAAAAAAgAEAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAABAAQAAAAAAwCDAAAAAAAAAwAAAAADAAMAAAAAAgADAAAAAAMAAwAAAAABAAMAAAAAAQADAAAAAAIAAwAAAAADAAMAAAAAAwADAAAAAAIABAAAAAABAAQAAAAAAAAEAAAAAAIABAAAAAACAAQAAAAAAwAEAAAAAAIAgwAAAAAAAAMAAAAAAQADAAAAAAIAAwAAAAADAAMAAAAAAAADAAAAAAEAAwAAAAADAAMAAAAAAgADAAAAAAMAAwAAAAADAAQAAAAAAAAEAAAAAAEAgwAAAAAAAAQAAAAAAgAEAAAAAAAABAAAAAACAIMAAAAAAACDAAAAAAAABAAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAAALAAAAAAAAgwAAAAAAAIMAAAAAAAAEAAAAAAIABAAAAAAAAIMAAAAAAAAEAAAAAAIABAAAAAADAAQAAAAAAwAEAAAAAAEABAAAAAADAAQAAAAAAAAEAAAAAAEAgwAAAAAAABIAAAAAAAASAAAAAAAAEgAAAAAAABIAAAAAAAASAAAAAAAABAAAAAAAAAQAAAAAAwCDAAAAAAAABAAAAAABAAQAAAAAAwAEAAAAAAEABAAAAAACAAQAAAAAAgAEAAAAAAIABAAAAAABAIMAAAAAAAASAAAAAAAAEgAAAAAAABIAAAAAAAASAAAAAAAAEgAAAAAAAAsAAAAAAAALAAAAAAAAgwAAAAAAAAQAAAAAAQAEAAAAAAAABAAAAAACAAQAAAAAAwAEAAAAAAIABAAAAAACAAQAAAAAAQALAAAAAAAAEgAAAAAAABIAAAAAAAASAAAAAAAAEgAAAAAAABIAAAAAAACDAAAAAAAABAAAAAADAIMAAAAAAAAEAAAAAAMABAAAAAAAAAQAAAAAAAAEAAAAAAIABAAAAAACAAQAAAAAAgAEAAAAAAAAgwAAAAAAABIAAAAAAAASAAAAAAAAEgAAAAAAABIAAAAAAAASAAAAAAAABAAAAAACAAQAAAAAAwCDAAAAAAAABAAAAAAAAAQAAAAAAQAEAAAAAAMAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAAASAAAAAAAAEgAAAAAAABIAAAAAAAASAAAAAAAAEgAAAAAAAAQAAAAAAQAEAAAAAAAABAAAAAABAAQAAAAAAgAEAAAAAAMABAAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAEgAAAAAAABIAAAAAAAASAAAAAAAAEgAAAAAAABIAAAAAAAAEAAAAAAIABAAAAAADAIMAAAAAAAAEAAAAAAAABAAAAAABAAQAAAAAAwCDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAAQAAAAAAwCDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAA== version: 7 -5,-4: ind: -5,-4 @@ -190,7 +190,7 @@ entities: version: 7 -6,-3: ind: -6,-3 - tiles: BAAAAAADAAMAAAAAAAADAAAAAAAALAAAAAACACwAAAAAAwAsAAAAAAIALAAAAAADACwAAAAAAAAsAAAAAAAALAAAAAABAC8AAAAAAAAvAAAAAAsALwAAAAAAAC8AAAAAAAAvAAAAAAAALwAAAAAAAAQAAAAAAgADAAAAAAAAAwAAAAABAIMAAAAAAAAEAAAAAAEALAAAAAACACwAAAAAAgAsAAAAAAAALAAAAAACACwAAAAAAwAvAAAAAAAALwAAAAAIAC8AAAAAAAAvAAAAAAAALwAAAAAAAC8AAAAAAACDAAAAAAAAgwAAAAAAAAQAAAAAAAAEAAAAAAEABAAAAAACAAQAAAAAAgAEAAAAAAEABAAAAAABAAQAAAAAAgAEAAAAAAAABAAAAAABAC8AAAAAAQAvAAAAAAAALwAAAAAAAC8AAAAABgAvAAAAAAAABAAAAAADAAQAAAAAAAAEAAAAAAAABAAAAAACAAQAAAAAAAAEAAAAAAIACwAAAAAAAAQAAAAAAgAEAAAAAAMABAAAAAABAAQAAAAAAQAEAAAAAAAABAAAAAAAAAQAAAAAAgAEAAAAAAEABAAAAAAAAAQAAAAAAgAEAAAAAAEABAAAAAAAAAQAAAAAAAAEAAAAAAIABAAAAAACAAQAAAAAAAAEAAAAAAIABAAAAAACAAQAAAAAAwAEAAAAAAAABAAAAAACAAQAAAAAAAAEAAAAAAIABAAAAAADAAQAAAAAAAAEAAAAAAEABAAAAAADAAQAAAAAAwAEAAAAAAIABAAAAAAAAAQAAAAAAwALAAAAAAAABAAAAAABAAQAAAAAAwAEAAAAAAMABAAAAAADAAQAAAAAAgAEAAAAAAEABAAAAAADAAQAAAAAAgAEAAAAAAEAgwAAAAAAAC4AAAAAAgCDAAAAAAAABAAAAAACAAQAAAAAAgAEAAAAAAIAgwAAAAAAABwAAAAAAAAEAAAAAAIABAAAAAABAAQAAAAAAwAEAAAAAAMABAAAAAAAAAQAAAAAAgAEAAAAAAIABAAAAAADAAQAAAAAAAAEAAAAAAEAgwAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAABAIMAAAAAAAAcAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAEABAAAAAABAAQAAAAAAAAEAAAAAAMABAAAAAACAAQAAAAAAwAEAAAAAAEABAAAAAAAAAMAAAAAAgAEAAAAAAMABAAAAAAAAAQAAAAAAwAuAAAAAAMAHAAAAAAAAAQAAAAAAQAEAAAAAAEABAAAAAAAAAQAAAAAAgAEAAAAAAIAgwAAAAAAAAQAAAAAAQCDAAAAAAAABAAAAAACAAQAAAAAAgADAAAAAAAABAAAAAACAAQAAAAAAgAEAAAAAAAAgwAAAAAAAAQAAAAAAAAEAAAAAAIABAAAAAABAAQAAAAAAwAEAAAAAAIABAAAAAACABEAAAAAAQARAAAAAAMAAwAAAAABAAQAAAAAAAAEAAAAAAMAAwAAAAADAAQAAAAAAAAEAAAAAAIABAAAAAADAAQAAAAAAAAIAAAAAAAACAAAAAAAAAQAAAAAAwAEAAAAAAIABAAAAAADAAQAAAAAAQARAAAAAAIAEQAAAAADAAQAAAAAAQAEAAAAAAIABAAAAAADAIMAAAAAAAALAAAAAAAACwAAAAAAAAsAAAAAAACDAAAAAAAACAAAAAAAAAgAAAAAAAAEAAAAAAIAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAABAAAAAACAAQAAAAAAwCDAAAAAAAAgwAAAAAAAC4AAAAAAgCDAAAAAAAAgwAAAAAAAAMAAAAAAQADAAAAAAEAAwAAAAABAIMAAAAAAAAFAAAAAAAABQAAAAADAAUAAAAAAgAFAAAAAAAABQAAAAAAAAQAAAAAAAAEAAAAAAMABAAAAAADAAQAAAAAAQAEAAAAAAIABAAAAAABAIMAAAAAAAADAAAAAAMAAwAAAAACAAMAAAAAAgCDAAAAAAAABQAAAAADAAUAAAAAAAAFAAAAAAEABQAAAAADAAUAAAAAAQAEAAAAAAAABAAAAAADAAQAAAAAAgAEAAAAAAEABAAAAAABAAQAAAAAAAAEAAAAAAIAAwAAAAAAAAMAAAAAAgADAAAAAAMAgwAAAAAAAAUAAAAAAQAFAAAAAAEABQAAAAADAAUAAAAAAwAFAAAAAAMABAAAAAACAAMAAAAAAgADAAAAAAEAAwAAAAACAAMAAAAAAAAEAAAAAAMAgwAAAAAAAAMAAAAAAQADAAAAAAMAAwAAAAABAIMAAAAAAAAFAAAAAAEABQAAAAABAAUAAAAAAgAFAAAAAAAABQAAAAAAAA== + tiles: gwAAAAAAAAMAAAAAAAADAAAAAAAALAAAAAACACwAAAAAAwAsAAAAAAIALAAAAAADACwAAAAAAAAsAAAAAAAALAAAAAABAC8AAAAAAAAvAAAAAAsALwAAAAAAAC8AAAAAAAAvAAAAAAAALwAAAAAAAIMAAAAAAAADAAAAAAAAAwAAAAABAIMAAAAAAAAEAAAAAAEALAAAAAACACwAAAAAAgAsAAAAAAAALAAAAAACACwAAAAAAwAvAAAAAAAALwAAAAAIAC8AAAAAAAAvAAAAAAAALwAAAAAAAC8AAAAAAACDAAAAAAAAgwAAAAAAAAQAAAAAAAAEAAAAAAEABAAAAAACAAQAAAAAAgAEAAAAAAEABAAAAAABAAQAAAAAAgAEAAAAAAAABAAAAAABAC8AAAAAAQAvAAAAAAAALwAAAAAAAC8AAAAABgAvAAAAAAAABAAAAAADAAQAAAAAAAAEAAAAAAAABAAAAAACAAQAAAAAAAAEAAAAAAIACwAAAAAAAAQAAAAAAgAEAAAAAAMABAAAAAABAAQAAAAAAQAEAAAAAAAABAAAAAAAAAQAAAAAAgAEAAAAAAEABAAAAAAAAAQAAAAAAgAEAAAAAAEABAAAAAAAAAQAAAAAAAAEAAAAAAIABAAAAAACAAQAAAAAAAAEAAAAAAIABAAAAAACAAQAAAAAAwAEAAAAAAAABAAAAAACAAQAAAAAAAAEAAAAAAIABAAAAAADAAQAAAAAAAAEAAAAAAEABAAAAAADAAQAAAAAAwAEAAAAAAIABAAAAAAAAAQAAAAAAwALAAAAAAAABAAAAAABAAQAAAAAAwAEAAAAAAMABAAAAAADAAQAAAAAAgAEAAAAAAEABAAAAAADAAQAAAAAAgAEAAAAAAEAgwAAAAAAAC4AAAAAAgCDAAAAAAAABAAAAAACAAQAAAAAAgAEAAAAAAIAgwAAAAAAABwAAAAAAAAEAAAAAAIABAAAAAABAAQAAAAAAwAEAAAAAAMABAAAAAAAAAQAAAAAAgAEAAAAAAIABAAAAAADAAQAAAAAAAAEAAAAAAEAgwAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAABAIMAAAAAAAAcAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAEABAAAAAABAAQAAAAAAAAEAAAAAAMABAAAAAACAAQAAAAAAwAEAAAAAAEABAAAAAAAAAMAAAAAAgAEAAAAAAMABAAAAAAAAAQAAAAAAwAuAAAAAAMAHAAAAAAAAAQAAAAAAQAEAAAAAAEABAAAAAAAAAQAAAAAAgAEAAAAAAIAgwAAAAAAAAQAAAAAAQCDAAAAAAAABAAAAAACAAQAAAAAAgADAAAAAAAABAAAAAACAAQAAAAAAgAEAAAAAAAAgwAAAAAAAAQAAAAAAAAEAAAAAAIABAAAAAABAAQAAAAAAwAEAAAAAAIABAAAAAACABEAAAAAAQARAAAAAAMAAwAAAAABAAQAAAAAAAAEAAAAAAMAAwAAAAADAAQAAAAAAAAEAAAAAAIABAAAAAADAAQAAAAAAAAIAAAAAAAACAAAAAAAAAQAAAAAAwAEAAAAAAIABAAAAAADAAQAAAAAAQARAAAAAAIAEQAAAAADAAQAAAAAAQAEAAAAAAIABAAAAAADAIMAAAAAAAALAAAAAAAACwAAAAAAAAsAAAAAAACDAAAAAAAACAAAAAAAAAgAAAAAAAAEAAAAAAIAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAABAAAAAACAAQAAAAAAwCDAAAAAAAAgwAAAAAAAC4AAAAAAgCDAAAAAAAAgwAAAAAAAAMAAAAAAQADAAAAAAEAAwAAAAABAIMAAAAAAAAFAAAAAAAABQAAAAADAAUAAAAAAgAFAAAAAAAABQAAAAAAAAQAAAAAAAAEAAAAAAMABAAAAAADAAQAAAAAAQAEAAAAAAIABAAAAAABAIMAAAAAAAADAAAAAAMAAwAAAAACAAMAAAAAAgCDAAAAAAAABQAAAAADAAUAAAAAAAAFAAAAAAEABQAAAAADAAUAAAAAAQAEAAAAAAAABAAAAAADAAQAAAAAAgAEAAAAAAEABAAAAAABAAQAAAAAAAAEAAAAAAIAAwAAAAAAAAMAAAAAAgADAAAAAAMAgwAAAAAAAAUAAAAAAQAFAAAAAAEABQAAAAADAAUAAAAAAwAFAAAAAAMABAAAAAACAAMAAAAAAgADAAAAAAEAAwAAAAACAAMAAAAAAAAEAAAAAAMAgwAAAAAAAAMAAAAAAQADAAAAAAMAAwAAAAABAIMAAAAAAAAFAAAAAAEABQAAAAABAAUAAAAAAgAFAAAAAAAABQAAAAAAAA== version: 7 -5,-3: ind: -5,-3 @@ -222,7 +222,7 @@ entities: version: 7 -1,-4: ind: -1,-4 - tiles: gwAAAAAAAIMAAAAAAACDAAAAAAAABwAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAHAAAAAAAAgwAAAAAAAAcAAAAAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAABwAAAAABAIMAAAAAAAAHAAAAAAAABwAAAAAIAAAAAAAAAAABAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAcAAAAAAACDAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAHAAAAAAAAgwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAcAAAAADAAHAAAAAAYABwAAAAAHAAcAAAAAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAHAAAAAAAABwAAAAAEAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAQABwAAAAAAAAcAAAAAAAAHAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAEAAcAAAAAAAAHAAAAAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAJAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAADAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAcAAAAABgAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAwABwAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAQABwAAAAAGAAcAAAAAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAABwAAAAAMAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAEABwAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAACAAcAAAAACwAHAAAAAAIABwAAAAALAAcAAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== + tiles: gwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAHAAAAAAAAgwAAAAAAAAcAAAAAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAABwAAAAABAIMAAAAAAAAHAAAAAAAABwAAAAAIAAAAAAAAAAABAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAcAAAAAAACDAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAHAAAAAAAAgwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAcAAAAADAAHAAAAAAYABwAAAAAHAAcAAAAAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAHAAAAAAAABwAAAAAEAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAQABwAAAAAAAAcAAAAAAAAHAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAEAAcAAAAAAAAHAAAAAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAJAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAADAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAcAAAAABgAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAwABwAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAQABwAAAAAGAAcAAAAAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAABwAAAAAMAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAEABwAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAACAAcAAAAACwAHAAAAAAIABwAAAAALAAcAAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== version: 7 -7,-4: ind: -7,-4 @@ -306,7 +306,7 @@ entities: version: 7 -9,1: ind: -9,1 - tiles: gwAAAAAAAAEAAAAAAACDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACDAAAAAAAABwAAAAADAAIAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAAABAAAAAAAAgwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgwAAAAAAAAcAAAAAAAACAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAACDAAAAAAAAAQAAAAAAAIMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIMAAAAAAAAHAAAAAAAAAgAAAAAAAAcAAAAACQAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAMAgwAAAAAAAAEAAAAAAACDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACDAAAAAAAABwAAAAAAAAIAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAABAAHAAAAAAAABwAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgwAAAAAAAAcAAAAAAAACAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAKAAcAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAAAHAAAAAAQAAgAAAAAAAAcAAAAACwAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAAcAAAAAAwAHAAAAAAQABAAAAAAAAAQAAAAAAgAEAAAAAAMAgwAAAAAAAIMAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAAAHAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAABAAAAAADAIMAAAAAAACDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAABwAAAAAHABgAAAAAAAAYAAAAAAAAGAAAAAAAAAQAAAAAAwCDAAAAAAAAgwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAAcAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAHAAAAAAAAgwAAAAAAAIMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAEAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAEABwAAAAAAAIMAAAAAAACDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAACDAAAAAAAAgwAAAAAAAA== + tiles: gwAAAAAAAAEAAAAAAACDAAAAAAAAAAAAAAAAAIMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACDAAAAAAAABwAAAAADAAIAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAAABAAAAAAAAgwAAAAAAAAAAAAAAAACDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgwAAAAAAAAcAAAAAAAACAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAACDAAAAAAAAAQAAAAAAAIMAAAAAAAAAAAAAAAAAgwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIMAAAAAAAAHAAAAAAAAAgAAAAAAAAcAAAAACQAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAMAgwAAAAAAAAEAAAAAAACDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACDAAAAAAAABwAAAAAAAAIAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAABAAHAAAAAAAABwAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgwAAAAAAAAcAAAAAAAACAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAKAAcAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAAAHAAAAAAQAAgAAAAAAAAcAAAAACwAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAAcAAAAAAwAHAAAAAAQABAAAAAAAAAQAAAAAAgAEAAAAAAMAgwAAAAAAAIMAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAAAHAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAABAAAAAADAIMAAAAAAACDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAABwAAAAAHABgAAAAAAAAYAAAAAAAAGAAAAAAAAAQAAAAAAwCDAAAAAAAAgwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAAcAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAHAAAAAAAAgwAAAAAAAIMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAEAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAEABwAAAAAAAIMAAAAAAACDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAACDAAAAAAAAgwAAAAAAAA== version: 7 -10,-3: ind: -10,-3 @@ -378,7 +378,7 @@ entities: version: 7 -1,-5: ind: -1,-5 - tiles: AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgwAAAAAAAIMAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIMAAAAAAACDAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACDAAAAAAAAgwAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== + tiles: AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgwAAAAAAAIMAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIMAAAAAAACDAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACDAAAAAAAAgwAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIMAAAAAAACDAAAAAAAAgwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACDAAAAAAAAgwAAAAAAAIMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgwAAAAAAAIMAAAAAAACDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== version: 7 -2,-6: ind: -2,-6 @@ -2253,6 +2253,8 @@ entities: 6923: -127,-55 7077: -87,-26 8076: -98,-37 + 8532: -81,-28 + 8535: -92,-45 - node: angle: 1.5707963267948966 rad color: '#FFFFFFFF' @@ -2559,6 +2561,7 @@ entities: 8314: -95,-44 8315: -92,-45 8316: -91,-43 + 8533: -91,-27 - node: color: '#FFFFFFFF' id: DirtLight @@ -2919,7 +2922,6 @@ entities: 7966: -101,-37 7982: -92,-27 7987: -96,-34 - 8013: -94,-25 8030: -93,-48 8031: -93,-49 8032: -93,-47 @@ -3314,7 +3316,6 @@ entities: 3360: -128,-24 3423: -93,-26 3424: -92,-26 - 3425: -91,-27 3428: -94,-27 3430: -96,-27 3433: -96,-28 @@ -6007,7 +6008,6 @@ entities: 1690: -95,-19 1691: -95,-20 1733: -91,-26 - 1734: -91,-27 1735: -91,-28 1736: -91,-29 1737: -91,-30 @@ -6033,6 +6033,7 @@ entities: 8274: -95,-25 8275: -95,-24 8276: -95,-23 + 8534: -91,-27 - node: color: '#EFB34196' id: QuarterTileOverlayGreyscale180 @@ -6153,7 +6154,6 @@ entities: color: '#DE3A3A96' id: QuarterTileOverlayGreyscale90 decals: - 8012: -94,-25 8285: -91,-38 8286: -91,-39 8288: -91,-41 @@ -8156,7 +8156,8 @@ entities: -24,-16: 1: 2252 -24,-12: - 1: 61550 + 1: 45166 + 3: 16384 -24,-17: 1: 52424 -23,-16: @@ -8428,11 +8429,14 @@ entities: -20,-6: 1: 10914 -21,-6: - 1: 65535 + 1: 30591 + 3: 34944 -20,-5: 1: 34 -21,-5: - 1: 255 + 1: 7 + 3: 216 + 4: 32 -19,-7: 1: 65532 -19,-6: @@ -8488,9 +8492,11 @@ entities: -23,-7: 1: 15295 -23,-6: - 1: 65535 + 1: 32767 + 3: 32768 -23,-5: - 1: 2995 + 1: 947 + 3: 2048 -23,-9: 1: 49073 -22,-8: @@ -8498,7 +8504,8 @@ entities: -22,-7: 1: 8191 -22,-6: - 1: 48059 + 1: 48027 + 3: 32 -22,-5: 1: 953 -22,-9: @@ -8542,7 +8549,8 @@ entities: -22,-11: 1: 65535 -22,-10: - 1: 8143 + 1: 8135 + 3: 8 -21,-11: 1: 65535 -21,-10: @@ -8872,16 +8880,16 @@ entities: -26,0: 1: 30711 -28,0: - 3: 21840 - 4: 8736 + 5: 21840 + 6: 8736 -28,1: 1: 208 0: 32 - 3: 28672 + 5: 28672 -29,1: 1: 21973 -28,2: - 3: 119 + 5: 119 1: 61440 -29,2: 1: 54613 @@ -9007,7 +9015,7 @@ entities: 1: 61695 -32,0: 1: 4 - 3: 4112 + 5: 4112 0: 17472 -31,-3: 1: 65535 @@ -9028,21 +9036,21 @@ entities: -29,0: 1: 21845 -33,0: - 3: 49344 + 5: 49344 1: 4369 -32,1: - 3: 4112 + 5: 4112 0: 17476 -33,1: - 3: 49344 + 5: 49344 1: 4369 -32,2: - 5: 16 - 6: 4096 + 7: 16 + 8: 4096 0: 17476 -33,2: - 5: 192 - 6: 49152 + 7: 192 + 8: 49152 1: 4369 -32,3: 1: 29712 @@ -9257,7 +9265,7 @@ entities: 1: 221 -37,0: 0: 34952 - 3: 13104 + 5: 13104 -36,1: 0: 8955 1: 20480 @@ -9455,7 +9463,7 @@ entities: 0: 65535 -38,0: 0: 13107 - 3: 34944 + 5: 34944 -32,-14: 1: 20206 -32,-12: @@ -9893,6 +9901,36 @@ entities: - 0 - 0 - 0 + - volume: 2500 + temperature: 293.14975 + moles: + - 20.078888 + - 75.53487 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - volume: 2500 + temperature: 293.1495 + moles: + - 20.078888 + - 75.53487 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 - volume: 2500 temperature: 293.15 moles: @@ -9977,51 +10015,13 @@ entities: - uid: 6841 components: - type: Transform - pos: -89.47948,-23.456642 + pos: -89.49506,-22.368973 parent: 2 - uid: 24353 components: - type: Transform pos: -131.49832,-18.377594 parent: 2 -- proto: ActionToggleBlock - entities: - - uid: 6684 - mapInit: true - paused: true - components: - - type: Transform - parent: 13722 - - type: Action - originalIconColor: '#FFFFFFFF' - container: 13722 - - uid: 6685 - mapInit: true - paused: true - components: - - type: Transform - parent: 13803 - - type: Action - originalIconColor: '#FFFFFFFF' - container: 13803 - - uid: 6753 - mapInit: true - paused: true - components: - - type: Transform - parent: 11228 - - type: Action - originalIconColor: '#FFFFFFFF' - container: 11228 - - uid: 6768 - mapInit: true - paused: true - components: - - type: Transform - parent: 13506 - - type: Action - originalIconColor: '#FFFFFFFF' - container: 13506 - proto: ActionToggleInternals entities: - uid: 6670 @@ -10033,6 +10033,15 @@ entities: - type: Action originalIconColor: '#FFFFFFFF' container: 4309 + - uid: 23594 + mapInit: true + paused: true + components: + - type: Transform + parent: 23345 + - type: Action + originalIconColor: '#FFFFFFFF' + container: 23345 - proto: ActionToggleLight entities: - uid: 3278 @@ -10266,11 +10275,11 @@ entities: - type: DeviceList devices: - 18741 - - 734 - 11068 - 11179 - 16988 - 16991 + - 26429 - type: Fixtures fixtures: {} - uid: 4214 @@ -10660,17 +10669,41 @@ entities: - 16418 - type: Fixtures fixtures: {} - - uid: 9624 + - uid: 9587 + components: + - type: MetaData + name: Warden Office Air Alarm + - type: Transform + pos: -91.5,-16.5 + parent: 2 + - type: DeviceList + devices: + - 13628 + - 17988 + - 17989 + - 18012 + - 18024 + - 18708 + - 26396 + - 13539 + - 26404 + - 13538 + - 18710 + - type: Fixtures + fixtures: {} + - uid: 10458 components: - type: MetaData name: Armory Air Alarm - type: Transform - rot: 1.5707963267948966 rad - pos: -85.5,-20.5 + rot: -1.5707963267948966 rad + pos: -79.5,-19.5 parent: 2 - type: DeviceList devices: - - 9476 + - 26427 + - 26426 + - 13486 - type: Fixtures fixtures: {} - uid: 11242 @@ -11115,22 +11148,6 @@ entities: - 11829 - type: Fixtures fixtures: {} - - uid: 18696 - components: - - type: MetaData - name: Warden Office Air Alarm - - type: Transform - pos: -89.5,-19.5 - parent: 2 - - type: DeviceList - devices: - - 17988 - - 17989 - - 18024 - - 18012 - - 18708 - - type: Fixtures - fixtures: {} - uid: 18697 components: - type: MetaData @@ -11145,6 +11162,7 @@ entities: - 18037 - 18038 - 18048 + - 13538 - type: Fixtures fixtures: {} - uid: 18703 @@ -11334,6 +11352,8 @@ entities: - type: DeviceList devices: - 19298 + - 16386 + - 15462 - type: Fixtures fixtures: {} - uid: 19570 @@ -12780,7 +12800,7 @@ entities: invokeCounter: 1 - type: DeviceLinkSource linkedPorts: - 23005: + 26459: - - DoorStatus - DoorBolt - uid: 8300 @@ -12903,6 +12923,18 @@ entities: 8718: - - DoorStatus - DoorBolt + - uid: 4563 + components: + - type: Transform + pos: -94.5,36.5 + parent: 2 + - type: DeviceLinkSink + invokeCounter: 1 + - type: DeviceLinkSource + linkedPorts: + 21370: + - - DoorStatus + - DoorBolt - uid: 10565 components: - type: Transform @@ -12929,6 +12961,18 @@ entities: 10564: - - DoorStatus - DoorBolt + - uid: 21370 + components: + - type: Transform + pos: -94.5,39.5 + parent: 2 + - type: DeviceLinkSink + invokeCounter: 1 + - type: DeviceLinkSource + linkedPorts: + 4563: + - - DoorStatus + - DoorBolt - proto: AirlockExternalGlassCommandLocked entities: - uid: 1880 @@ -13059,6 +13103,11 @@ entities: rot: -1.5707963267948966 rad pos: -139.5,13.5 parent: 2 + - type: DeviceLinkSource + linkedPorts: + 6974: + - - DoorStatus + - DoorBolt - type: DeviceLinkSink invokeCounter: 1 - uid: 6974 @@ -13067,6 +13116,13 @@ entities: rot: -1.5707963267948966 rad pos: -141.5,13.5 parent: 2 + - type: DeviceLinkSink + invokeCounter: 1 + - type: DeviceLinkSource + linkedPorts: + 5606: + - - DoorStatus + - DoorBolt - uid: 7384 components: - type: Transform @@ -13103,30 +13159,6 @@ entities: 10487: - - DoorStatus - DoorBolt - - uid: 9984 - components: - - type: Transform - pos: -94.5,36.5 - parent: 2 - - type: DeviceLinkSink - invokeCounter: 1 - - type: DeviceLinkSource - linkedPorts: - 9985: - - - DoorStatus - - DoorBolt - - uid: 9985 - components: - - type: Transform - pos: -94.5,39.5 - parent: 2 - - type: DeviceLinkSink - invokeCounter: 1 - - type: DeviceLinkSource - linkedPorts: - 9984: - - - DoorStatus - - DoorBolt - uid: 10185 components: - type: Transform @@ -13159,19 +13191,6 @@ entities: parent: 2 - type: DeviceLinkSink invokeCounter: 1 - - uid: 23005 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -80.5,8.5 - parent: 2 - - type: DeviceLinkSink - invokeCounter: 1 - - type: DeviceLinkSource - linkedPorts: - 1771: - - - DoorStatus - - DoorBolt - uid: 24228 components: - type: Transform @@ -13184,6 +13203,18 @@ entities: 24227: - - DoorStatus - DoorBolt + - uid: 26459 + components: + - type: Transform + pos: -80.5,9.5 + parent: 2 + - type: DeviceLinkSink + invokeCounter: 1 + - type: DeviceLinkSource + linkedPorts: + 1771: + - - DoorStatus + - DoorBolt - proto: AirlockExternalGlassShuttleArrivals entities: - uid: 8647 @@ -14687,7 +14718,7 @@ entities: pos: -131.5,-45.5 parent: 2 - type: Door - secondsUntilStateChange: -52623.953 + secondsUntilStateChange: -61365.79 state: Opening - type: DeviceLinkSource lastSignals: @@ -14971,14 +15002,6 @@ entities: - type: DeviceNetwork deviceLists: - 19286 - - uid: 734 - components: - - type: Transform - pos: -99.5,-29.5 - parent: 2 - - type: DeviceNetwork - deviceLists: - - 4080 - uid: 788 components: - type: Transform @@ -15087,6 +15110,15 @@ entities: deviceLists: - 19910 - 12768 + - uid: 13538 + components: + - type: Transform + pos: -82.5,-27.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 18697 + - 9587 - uid: 14272 components: - type: Transform @@ -15272,7 +15304,7 @@ entities: parent: 2 - type: DeviceNetwork deviceLists: - - 18696 + - 9587 - uid: 18709 components: - type: Transform @@ -15290,6 +15322,7 @@ entities: deviceLists: - 6929 - 26265 + - 9587 - uid: 18721 components: - type: Transform @@ -15858,6 +15891,22 @@ entities: - type: DeviceNetwork deviceLists: - 19286 + - uid: 26427 + components: + - type: Transform + pos: -83.5,-21.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 10458 + - uid: 26429 + components: + - type: Transform + pos: -98.5,-29.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 4080 - proto: AlertsComputerCircuitboard entities: - uid: 4266 @@ -22021,11 +22070,6 @@ entities: - type: Transform pos: -11.5,-60.5 parent: 2 - - uid: 25791 - components: - - type: Transform - pos: -12.5,-63.5 - parent: 2 - uid: 25833 components: - type: Transform @@ -25472,6 +25516,14 @@ entities: parent: 2 - type: DeviceLinkSink invokeCounter: 1 +- proto: BlockGameArcade + entities: + - uid: 16181 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -88.5,-39.5 + parent: 2 - proto: Bloodpack entities: - uid: 21013 @@ -25688,16 +25740,6 @@ entities: - type: Transform pos: -69.69247,-26.289198 parent: 2 - - uid: 16442 - components: - - type: Transform - pos: -82.87048,-20.536572 - parent: 2 - - uid: 25883 - components: - - type: Transform - pos: -82.79236,-20.302197 - parent: 2 - proto: BoxBodyBag entities: - uid: 6473 @@ -25705,6 +25747,11 @@ entities: - type: Transform pos: -40.496006,-33.367466 parent: 2 + - uid: 7052 + components: + - type: Transform + pos: -88.33291,-22.33253 + parent: 2 - proto: BoxBottle entities: - uid: 6472 @@ -25717,6 +25764,13 @@ entities: - type: Transform pos: -35.350494,-30.40701 parent: 2 +- proto: BoxFlashbang + entities: + - uid: 26391 + components: + - type: Transform + pos: -81.24515,-25.23147 + parent: 2 - proto: BoxFolderBlue entities: - uid: 6020 @@ -25812,18 +25866,6 @@ entities: - type: Transform pos: -40.462494,-21.347675 parent: 2 -- proto: BoxHandcuff - entities: - - uid: 6835 - components: - - type: Transform - pos: -80.98839,-25.448616 - parent: 2 - - uid: 20808 - components: - - type: Transform - pos: -96.45238,-36.35173 - parent: 2 - proto: BoxingBell entities: - uid: 20947 @@ -25840,6 +25882,22 @@ entities: - type: Transform pos: -22.202202,-48.277267 parent: 2 +- proto: BoxLethalshot + entities: + - uid: 17784 + components: + - type: Transform + parent: 17779 + - type: Physics + canCollide: False + - type: InsideEntityStorage + - uid: 18359 + components: + - type: Transform + parent: 17779 + - type: Physics + canCollide: False + - type: InsideEntityStorage - proto: BoxLightbulb entities: - uid: 3383 @@ -25854,6 +25912,13 @@ entities: - type: Transform pos: -27.5,-72.5 parent: 2 + - uid: 6673 + components: + - type: Transform + parent: 26277 + - type: Physics + canCollide: False + - type: InsideEntityStorage - uid: 23769 components: - type: Transform @@ -25866,6 +25931,13 @@ entities: - type: Transform pos: -17.356392,-5.218974 parent: 2 +- proto: BoxMagazinePistol + entities: + - uid: 20442 + components: + - type: Transform + pos: -80.5853,-25.211357 + parent: 2 - proto: BoxMouthSwab entities: - uid: 4182 @@ -25901,6 +25973,13 @@ entities: - type: Transform pos: -34.443893,-27.24779 parent: 2 +- proto: BoxStinger + entities: + - uid: 26418 + components: + - type: Transform + pos: -80.95123,-25.4053 + parent: 2 - proto: BoxSyringe entities: - uid: 4187 @@ -25918,6 +25997,13 @@ entities: - type: Transform pos: -36.615356,-18.119762 parent: 2 +- proto: BoxTearGas + entities: + - uid: 26414 + components: + - type: Transform + pos: -81.54117,-25.434595 + parent: 2 - proto: BoxTrashbag entities: - uid: 25672 @@ -26219,6 +26305,12 @@ entities: rot: -1.5707963267948966 rad pos: -87.5,13.5 parent: 2 + - uid: 22120 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -101.5,-22.5 + parent: 2 - uid: 22377 components: - type: Transform @@ -26245,6 +26337,11 @@ entities: rot: 3.141592653589793 rad pos: -122.5,-42.5 parent: 2 + - uid: 14239 + components: + - type: Transform + pos: -91.099884,-17.238651 + parent: 2 - uid: 25627 components: - type: Transform @@ -26272,12 +26369,6 @@ entities: rot: 3.141592653589793 rad pos: -98.5,12.5 parent: 2 - - uid: 25664 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -93.5,-20.5 - parent: 2 - proto: CableApcExtension entities: - uid: 7 @@ -28530,6 +28621,11 @@ entities: - type: Transform pos: -57.5,-68.5 parent: 2 + - uid: 9476 + components: + - type: Transform + pos: -37.5,-13.5 + parent: 2 - uid: 9527 components: - type: Transform @@ -40115,6 +40211,141 @@ entities: - type: Transform pos: -104.5,-25.5 parent: 2 + - uid: 26430 + components: + - type: Transform + pos: -36.5,-13.5 + parent: 2 + - uid: 26431 + components: + - type: Transform + pos: -35.5,-13.5 + parent: 2 + - uid: 26432 + components: + - type: Transform + pos: -34.5,-13.5 + parent: 2 + - uid: 26433 + components: + - type: Transform + pos: -33.5,-13.5 + parent: 2 + - uid: 26434 + components: + - type: Transform + pos: -32.5,-13.5 + parent: 2 + - uid: 26435 + components: + - type: Transform + pos: -31.5,-13.5 + parent: 2 + - uid: 26436 + components: + - type: Transform + pos: -30.5,-13.5 + parent: 2 + - uid: 26437 + components: + - type: Transform + pos: -23.5,-13.5 + parent: 2 + - uid: 26438 + components: + - type: Transform + pos: -28.5,-13.5 + parent: 2 + - uid: 26439 + components: + - type: Transform + pos: -27.5,-13.5 + parent: 2 + - uid: 26440 + components: + - type: Transform + pos: -26.5,-13.5 + parent: 2 + - uid: 26441 + components: + - type: Transform + pos: -24.5,-13.5 + parent: 2 + - uid: 26442 + components: + - type: Transform + pos: -25.5,-13.5 + parent: 2 + - uid: 26443 + components: + - type: Transform + pos: -22.5,-13.5 + parent: 2 + - uid: 26444 + components: + - type: Transform + pos: -21.5,-13.5 + parent: 2 + - uid: 26445 + components: + - type: Transform + pos: -29.5,1.5 + parent: 2 + - uid: 26446 + components: + - type: Transform + pos: -29.5,0.5 + parent: 2 + - uid: 26447 + components: + - type: Transform + pos: -29.5,-0.5 + parent: 2 + - uid: 26448 + components: + - type: Transform + pos: -29.5,-1.5 + parent: 2 + - uid: 26449 + components: + - type: Transform + pos: -29.5,-2.5 + parent: 2 + - uid: 26450 + components: + - type: Transform + pos: -29.5,-3.5 + parent: 2 + - uid: 26451 + components: + - type: Transform + pos: -29.5,-4.5 + parent: 2 + - uid: 26452 + components: + - type: Transform + pos: -29.5,-5.5 + parent: 2 + - uid: 26453 + components: + - type: Transform + pos: -29.5,-6.5 + parent: 2 + - uid: 26454 + components: + - type: Transform + pos: -29.5,-7.5 + parent: 2 + - uid: 26455 + components: + - type: Transform + pos: -29.5,-8.5 + parent: 2 + - uid: 26457 + components: + - type: Transform + pos: -104.5,-33.5 + parent: 2 - proto: CableApcStack entities: - uid: 4360 @@ -40452,11 +40683,6 @@ entities: - type: Transform pos: -66.5,-3.5 parent: 2 - - uid: 2117 - components: - - type: Transform - pos: -87.5,-17.5 - parent: 2 - uid: 2118 components: - type: Transform @@ -43062,11 +43288,6 @@ entities: - type: Transform pos: -126.5,-22.5 parent: 2 - - uid: 6439 - components: - - type: Transform - pos: -88.5,-18.5 - parent: 2 - uid: 6447 components: - type: Transform @@ -43122,15 +43343,10 @@ entities: - type: Transform pos: -144.5,-10.5 parent: 2 - - uid: 6486 - components: - - type: Transform - pos: -89.5,-18.5 - parent: 2 - uid: 6488 components: - type: Transform - pos: -90.5,-18.5 + pos: -91.5,-19.5 parent: 2 - uid: 6491 components: @@ -43367,11 +43583,6 @@ entities: - type: Transform pos: -83.5,-52.5 parent: 2 - - uid: 7052 - components: - - type: Transform - pos: -99.5,-31.5 - parent: 2 - uid: 7057 components: - type: Transform @@ -43652,6 +43863,11 @@ entities: - type: Transform pos: -128.5,-4.5 parent: 2 + - uid: 7628 + components: + - type: Transform + pos: -91.5,-21.5 + parent: 2 - uid: 7665 components: - type: Transform @@ -43717,6 +43933,11 @@ entities: - type: Transform pos: -106.5,7.5 parent: 2 + - uid: 7816 + components: + - type: Transform + pos: -91.5,-20.5 + parent: 2 - uid: 7909 components: - type: Transform @@ -44227,11 +44448,6 @@ entities: - type: Transform pos: -141.5,18.5 parent: 2 - - uid: 11133 - components: - - type: Transform - pos: -100.5,-33.5 - parent: 2 - uid: 11159 components: - type: Transform @@ -44242,11 +44458,6 @@ entities: - type: Transform pos: -76.5,-35.5 parent: 2 - - uid: 11176 - components: - - type: Transform - pos: -101.5,-33.5 - parent: 2 - uid: 11282 components: - type: Transform @@ -44257,11 +44468,6 @@ entities: - type: Transform pos: -16.5,-8.5 parent: 2 - - uid: 11330 - components: - - type: Transform - pos: -99.5,-33.5 - parent: 2 - uid: 11361 components: - type: Transform @@ -44782,11 +44988,6 @@ entities: - type: Transform pos: -17.5,2.5 parent: 2 - - uid: 11783 - components: - - type: Transform - pos: -99.5,-32.5 - parent: 2 - uid: 11793 components: - type: Transform @@ -48792,6 +48993,11 @@ entities: - type: Transform pos: -15.5,-71.5 parent: 2 + - uid: 25864 + components: + - type: Transform + pos: -90.5,-21.5 + parent: 2 - uid: 25957 components: - type: Transform @@ -48847,6 +49053,41 @@ entities: - type: Transform pos: -153.5,19.5 parent: 2 + - uid: 26420 + components: + - type: Transform + pos: -89.5,-21.5 + parent: 2 + - uid: 26421 + components: + - type: Transform + pos: -88.5,-21.5 + parent: 2 + - uid: 26422 + components: + - type: Transform + pos: -87.5,-21.5 + parent: 2 + - uid: 26423 + components: + - type: Transform + pos: -87.5,-20.5 + parent: 2 + - uid: 26424 + components: + - type: Transform + pos: -87.5,-19.5 + parent: 2 + - uid: 26456 + components: + - type: Transform + pos: -104.5,-33.5 + parent: 2 + - uid: 26480 + components: + - type: Transform + pos: -87.5,-17.5 + parent: 2 - proto: CableHVStack entities: - uid: 4380 @@ -51043,6 +51284,11 @@ entities: - type: Transform pos: -7.5,-6.5 parent: 2 + - uid: 11613 + components: + - type: Transform + pos: -86.5,-17.5 + parent: 2 - uid: 11791 components: - type: Transform @@ -52868,11 +53114,6 @@ entities: - type: Transform pos: -87.5,-18.5 parent: 2 - - uid: 18469 - components: - - type: Transform - pos: -87.5,-17.5 - parent: 2 - uid: 18470 components: - type: Transform @@ -55572,6 +55813,12 @@ entities: parent: 2 - proto: CableTerminal entities: + - uid: 1886 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -87.5,-18.5 + parent: 2 - uid: 2019 components: - type: Transform @@ -55584,12 +55831,6 @@ entities: rot: 3.141592653589793 rad pos: -72.5,-9.5 parent: 2 - - uid: 4018 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -87.5,-17.5 - parent: 2 - uid: 4409 components: - type: Transform @@ -57145,11 +57386,6 @@ entities: rot: 1.5707963267948966 rad pos: -92.5,15.5 parent: 2 - - uid: 1686 - components: - - type: Transform - pos: -104.5,-32.5 - parent: 2 - uid: 1745 components: - type: Transform @@ -57160,11 +57396,6 @@ entities: - type: Transform pos: -74.5,-57.5 parent: 2 - - uid: 1886 - components: - - type: Transform - pos: -104.5,-32.5 - parent: 2 - uid: 1902 components: - type: Transform @@ -57210,6 +57441,12 @@ entities: - type: Transform pos: -103.5,-25.5 parent: 2 + - uid: 2110 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -104.5,-32.5 + parent: 2 - uid: 2180 components: - type: Transform @@ -58519,11 +58756,6 @@ entities: rot: 1.5707963267948966 rad pos: -93.5,-13.5 parent: 2 - - uid: 13748 - components: - - type: Transform - pos: -104.5,-32.5 - parent: 2 - uid: 13749 components: - type: Transform @@ -63225,12 +63457,6 @@ entities: rot: 1.5707963267948966 rad pos: -97.5,-17.5 parent: 2 - - uid: 6752 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -91.5,-50.5 - parent: 2 - uid: 6834 components: - type: Transform @@ -64784,6 +65010,11 @@ entities: - type: Transform pos: -50.5,-26.5 parent: 2 + - uid: 20783 + components: + - type: Transform + pos: -91.5,-50.5 + parent: 2 - proto: ClosetEmergency entities: - uid: 20259 @@ -64908,6 +65139,11 @@ entities: - type: Transform pos: -7.5,-37.5 parent: 2 + - uid: 25797 + components: + - type: Transform + pos: -79.5,8.5 + parent: 2 - uid: 26112 components: - type: Transform @@ -65315,18 +65551,36 @@ entities: parent: 2 - proto: ClosetTool entities: - - uid: 13537 + - uid: 6752 components: - type: Transform pos: -88.5,-17.5 parent: 2 + - type: EntityStorage + air: + volume: 200 + immutable: False + temperature: 293.14673 + moles: + - 1.7459903 + - 6.568249 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 - type: ContainerContainer containers: entity_storage: !type:Container showEnts: False occludes: True ents: - - 13538 + - 4018 paper_label: !type:ContainerSlot showEnts: False occludes: True @@ -65431,13 +65685,6 @@ entities: - type: InsideEntityStorage - proto: ClothingBeltUtilityEngineering entities: - - uid: 13538 - components: - - type: Transform - parent: 13537 - - type: Physics - canCollide: False - - type: InsideEntityStorage - uid: 18770 components: - type: Transform @@ -65445,6 +65692,13 @@ entities: parent: 2 - proto: ClothingBeltUtilityFilled entities: + - uid: 4018 + components: + - type: Transform + parent: 6752 + - type: Physics + canCollide: False + - type: InsideEntityStorage - uid: 24497 components: - type: Transform @@ -65522,6 +65776,13 @@ entities: - type: Transform pos: -70.57546,-42.33612 parent: 2 +- proto: ClothingHeadHatBeretWarden + entities: + - uid: 26482 + components: + - type: Transform + pos: -92.698074,-20.512661 + parent: 2 - proto: ClothingHeadHatCone entities: - uid: 22975 @@ -65577,15 +65838,20 @@ entities: parent: 2 - proto: ClothingHeadHelmetRiot entities: - - uid: 14777 + - uid: 6722 components: - type: Transform - pos: -82.7771,-22.25187 + pos: -82.73248,-22.260286 parent: 2 - - uid: 22120 + - uid: 26403 components: - type: Transform - pos: -82.77625,-22.53312 + pos: -82.73248,-22.40612 + parent: 2 + - uid: 26407 + components: + - type: Transform + pos: -82.73248,-22.551954 parent: 2 - proto: ClothingMaskGasAtmos entities: @@ -65656,27 +65922,54 @@ entities: - type: InsideEntityStorage - proto: ClothingOuterArmorBulletproof entities: - - uid: 25881 + - uid: 2372 components: - type: Transform - pos: -82.54188,-22.22062 + pos: -82.73037,-20.520702 parent: 2 - - uid: 25882 + - uid: 6684 components: - type: Transform - pos: -82.495,-22.50187 + pos: -82.73037,-20.416536 + parent: 2 + - uid: 20808 + components: + - type: Transform + pos: -82.719955,-20.301952 + parent: 2 +- proto: ClothingOuterArmorReflective + entities: + - uid: 1906 + components: + - type: Transform + pos: -82.30329,-20.34362 + parent: 2 + - uid: 2157 + components: + - type: Transform + pos: -82.30329,-20.447786 + parent: 2 + - uid: 3260 + components: + - type: Transform + pos: -82.31581,-20.510286 parent: 2 - proto: ClothingOuterArmorRiot entities: - - uid: 14730 + - uid: 6685 components: - type: Transform - pos: -82.19813,-22.59562 + pos: -82.31581,-22.40612 parent: 2 - - uid: 14987 + - uid: 6753 components: - type: Transform - pos: -82.21375,-22.267494 + pos: -82.31581,-22.62487 + parent: 2 + - uid: 26408 + components: + - type: Transform + pos: -82.32623,-22.489454 parent: 2 - proto: ClothingOuterCoatPirate entities: @@ -65685,6 +65978,36 @@ entities: - type: Transform pos: -24.922953,-70.55348 parent: 2 +- proto: ClothingOuterHardsuitSecurity + entities: + - uid: 25882 + components: + - type: Transform + parent: 3274 + - type: Physics + canCollide: False + - type: InsideEntityStorage + - uid: 26278 + components: + - type: Transform + parent: 3275 + - type: Physics + canCollide: False + - type: InsideEntityStorage + - uid: 26384 + components: + - type: Transform + parent: 7406 + - type: Physics + canCollide: False + - type: InsideEntityStorage + - uid: 26387 + components: + - type: Transform + parent: 26353 + - type: Physics + canCollide: False + - type: InsideEntityStorage - proto: ClothingOuterVestHazard entities: - uid: 25848 @@ -65937,6 +66260,11 @@ entities: rot: 3.141592653589793 rad pos: -123.5,-17.5 parent: 2 + - uid: 6518 + components: + - type: Transform + pos: -86.5,-48.5 + parent: 2 - uid: 7601 components: - type: Transform @@ -65977,11 +66305,6 @@ entities: rot: 3.141592653589793 rad pos: -60.5,-24.5 parent: 2 - - uid: 20783 - components: - - type: Transform - pos: -86.5,-48.5 - parent: 2 - proto: CommandmentCircuitBoard entities: - uid: 24950 @@ -66280,6 +66603,12 @@ entities: parent: 2 - proto: ComputerCriminalRecords entities: + - uid: 2117 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -91.5,-44.5 + parent: 2 - uid: 2681 components: - type: Transform @@ -66297,6 +66626,12 @@ entities: rot: -1.5707963267948966 rad pos: -81.5,-34.5 parent: 2 + - uid: 6835 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -90.5,-25.5 + parent: 2 - uid: 6918 components: - type: Transform @@ -66314,12 +66649,6 @@ entities: rot: 3.141592653589793 rad pos: -26.5,5.5 parent: 2 - - uid: 9619 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -90.5,-25.5 - parent: 2 - proto: ComputerFrame entities: - uid: 1159 @@ -66481,6 +66810,12 @@ entities: rot: 3.141592653589793 rad pos: -123.5,-18.5 parent: 2 + - uid: 6669 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -90.5,-22.5 + parent: 2 - uid: 9054 components: - type: Transform @@ -66682,6 +67017,11 @@ entities: rot: -1.5707963267948966 rad pos: -86.5,-50.5 parent: 2 + - uid: 22057 + components: + - type: Transform + pos: -89.5,-20.5 + parent: 2 - uid: 22267 components: - type: Transform @@ -67335,13 +67675,6 @@ entities: showEnts: False occludes: True ent: 26097 -- proto: CrateContrabandStorageSecure - entities: - - uid: 6914 - components: - - type: Transform - pos: -84.5,-22.5 - parent: 2 - proto: CrateEmergencyInternals entities: - uid: 1304 @@ -67480,6 +67813,13 @@ entities: - type: Transform pos: -114.5,36.5 parent: 2 +- proto: CrateEngineeringSolar + entities: + - uid: 20830 + components: + - type: Transform + pos: -10.5,5.5 + parent: 2 - proto: CrateFilledSpawner entities: - uid: 609 @@ -67848,10 +68188,10 @@ entities: parent: 2 - proto: CrateLockBoxSecurity entities: - - uid: 23594 + - uid: 6768 components: - type: Transform - pos: -88.5,-20.5 + pos: -84.5,-22.5 parent: 2 - proto: CrateLockBoxService entities: @@ -68012,6 +68352,35 @@ entities: - type: Transform pos: -84.5,-39.5 parent: 2 + - type: EntityStorage + air: + volume: 200 + immutable: False + temperature: 293.14673 + moles: + - 1.7459903 + - 6.568249 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - type: ContainerContainer + containers: + entity_storage: !type:Container + showEnts: False + occludes: True + ents: + - 6673 + paper_label: !type:ContainerSlot + showEnts: False + occludes: True + ent: null - proto: CrateTrashCartFilled entities: - uid: 20942 @@ -68312,10 +68681,10 @@ entities: parent: 2 - proto: DefaultStationBeaconArmory entities: - - uid: 22147 + - uid: 26425 components: - type: Transform - pos: -82.5,-21.5 + pos: -82.5,-20.5 parent: 2 - proto: DefaultStationBeaconArrivals entities: @@ -68359,6 +68728,13 @@ entities: - type: Transform pos: -61.5,3.5 parent: 2 +- proto: DefaultStationBeaconBrig + entities: + - uid: 22147 + components: + - type: Transform + pos: -84.5,-43.5 + parent: 2 - proto: DefaultStationBeaconCaptainsQuarters entities: - uid: 22155 @@ -68436,10 +68812,10 @@ entities: parent: 2 - proto: DefaultStationBeaconDetectiveRoom entities: - - uid: 22164 + - uid: 734 components: - type: Transform - pos: -97.5,-39.5 + pos: -99.5,-29.5 parent: 2 - proto: DefaultStationBeaconDisposals entities: @@ -68489,28 +68865,41 @@ entities: text: 'Plasma Pit #046' - type: WarpPoint location: 'Plasma Pit #046' -- proto: DefaultStationBeaconEscapePod +- proto: DefaultStationBeaconEscapePodN entities: - - uid: 4563 + - uid: 26465 + components: + - type: Transform + pos: -79.5,7.5 + parent: 2 +- proto: DefaultStationBeaconEscapePodNW + entities: + - uid: 9984 components: - type: Transform pos: -137.5,14.5 parent: 2 - - uid: 7628 - components: - - type: Transform - pos: -14.5,-65.5 - parent: 2 - - uid: 7816 - components: - - type: Transform - pos: -134.5,-57.5 - parent: 2 +- proto: DefaultStationBeaconEscapePodS + entities: - uid: 18225 components: - type: Transform pos: -107.5,-62.5 parent: 2 +- proto: DefaultStationBeaconEscapePodSE + entities: + - uid: 9985 + components: + - type: Transform + pos: -14.5,-65.5 + parent: 2 +- proto: DefaultStationBeaconEscapePodSW + entities: + - uid: 10164 + components: + - type: Transform + pos: -134.5,-57.5 + parent: 2 - proto: DefaultStationBeaconEvac entities: - uid: 22143 @@ -68678,17 +69067,21 @@ entities: - type: Transform pos: -140.5,13.5 parent: 2 - - uid: 24349 - components: - - type: Transform - pos: -11.5,6.5 - parent: 2 - uid: 25821 components: - type: Transform pos: -18.5,-65.5 parent: 2 - - uid: 25864 +- proto: DefaultStationBeaconSolarsNE + entities: + - uid: 22164 + components: + - type: Transform + pos: -11.5,6.5 + parent: 2 +- proto: DefaultStationBeaconSolarsW + entities: + - uid: 20831 components: - type: Transform pos: -137.5,-27.5 @@ -68744,6 +69137,14 @@ entities: parent: 2 - proto: DefibrillatorCabinetFilled entities: + - uid: 3176 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -85.5,-23.5 + parent: 2 + - type: Fixtures + fixtures: {} - uid: 4009 components: - type: Transform @@ -68797,20 +69198,20 @@ entities: - type: Transform pos: -93.5,-34.5 parent: 2 - - uid: 1730 - components: - - type: Transform - pos: -77.5,-27.5 - parent: 2 - uid: 9571 components: - type: Transform pos: -77.5,-28.5 parent: 2 - - uid: 9587 + - uid: 9619 components: - type: Transform - pos: -78.5,-28.5 + pos: -94.5,-34.5 + parent: 2 + - uid: 16178 + components: + - type: Transform + pos: -77.5,-27.5 parent: 2 - uid: 20191 components: @@ -68829,11 +69230,6 @@ entities: - type: Transform pos: -48.519993,-9.44313 parent: 2 - - uid: 6518 - components: - - type: Transform - pos: -92.52145,-24.442335 - parent: 2 - uid: 22354 components: - type: Transform @@ -68847,7 +69243,7 @@ entities: - uid: 22986 components: - type: Transform - pos: -93.50802,-18.397871 + pos: -93.435005,-18.2236 parent: 2 - uid: 26229 components: @@ -68889,6 +69285,11 @@ entities: - type: Transform pos: -20.523346,-4.445061 parent: 2 + - uid: 26410 + components: + - type: Transform + pos: -91.83441,-24.376225 + parent: 2 - proto: DiceBag entities: - uid: 20507 @@ -76255,18 +76656,6 @@ entities: rot: 1.5707963267948966 rad pos: -115.5,-27.5 parent: 2 - - uid: 21855 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -105.5,-27.5 - parent: 2 - - uid: 21856 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -104.5,-27.5 - parent: 2 - uid: 21871 components: - type: Transform @@ -76919,6 +77308,12 @@ entities: - type: Transform pos: -43.5,-68.5 parent: 2 + - uid: 20897 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -105.5,-27.5 + parent: 2 - proto: DisposalRouter entities: - uid: 14444 @@ -77767,6 +78162,13 @@ entities: - type: Transform pos: -136.5,-52.5 parent: 2 +- proto: DresserWardenFilled + entities: + - uid: 17821 + components: + - type: Transform + pos: -88.5,-20.5 + parent: 2 - proto: DrinkBahamaMama entities: - uid: 19095 @@ -78006,11 +78408,11 @@ entities: rot: 3.141592653589793 rad pos: -81.5,-23.5 parent: 2 - - uid: 13582 + - uid: 26483 components: - type: Transform rot: 1.5707963267948966 rad - pos: -92.5,-20.5 + pos: -92.5,-21.5 parent: 2 - proto: EmergencyNitrogenTankFilled entities: @@ -78305,6 +78707,13 @@ entities: - type: FaxMachine name: Engineering - type: Label + - uid: 19229 + components: + - type: Transform + pos: -87.5,-50.5 + parent: 2 + - type: FaxMachine + name: Brig - uid: 19887 components: - type: Transform @@ -78322,6 +78731,11 @@ entities: - type: FaxMachine name: TEG - type: Label + - uid: 22009 + components: + - type: Transform + pos: -80.5,-31.5 + parent: 2 - uid: 22303 components: - type: MetaData @@ -78472,11 +78886,6 @@ entities: - type: Transform pos: -17.5,-21.5 parent: 2 - - uid: 23350 - components: - - type: Transform - pos: -80.5,-31.5 - parent: 2 - proto: filingCabinetRandom entities: - uid: 776 @@ -78489,11 +78898,6 @@ entities: - type: Transform pos: -50.5,-6.5 parent: 2 - - uid: 4087 - components: - - type: Transform - pos: -92.5,-17.5 - parent: 2 - uid: 4498 components: - type: Transform @@ -78514,6 +78918,11 @@ entities: - type: Transform pos: -101.5,13.5 parent: 2 + - uid: 8624 + components: + - type: Transform + pos: -90.5,-26.5 + parent: 2 - uid: 9042 components: - type: Transform @@ -81056,6 +81465,9 @@ entities: rot: 3.141592653589793 rad pos: -91.5,-24.5 parent: 2 + - type: DeviceNetwork + deviceLists: + - 9587 - uid: 14353 components: - type: Transform @@ -81385,6 +81797,24 @@ entities: deviceLists: - 17850 - 25641 + - uid: 26396 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -92.5,-24.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 9587 + - uid: 26404 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -90.5,-24.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 9587 - proto: FirelockGlass entities: - uid: 431 @@ -81831,11 +82261,6 @@ entities: - 23681 - 12769 - 24300 - - uid: 10164 - components: - - type: Transform - pos: -94.5,36.5 - parent: 2 - uid: 11743 components: - type: Transform @@ -82102,6 +82527,9 @@ entities: - type: Transform pos: -87.5,-24.5 parent: 2 + - type: DeviceNetwork + deviceLists: + - 9587 - uid: 13765 components: - type: Transform @@ -83769,14 +84197,14 @@ entities: - uid: 6932 components: - type: Transform - pos: -89.14516,-50.315605 + pos: -89.800385,-50.300064 parent: 2 - proto: FoodBakedGrilledCheeseSandwichCotton entities: - uid: 18698 components: - type: Transform - pos: -89.73477,-50.31411 + pos: -89.237785,-50.26776 parent: 2 - proto: FoodBoxDonut entities: @@ -83935,15 +84363,15 @@ entities: parent: 2 - proto: FoodPlateSmall entities: - - uid: 22009 + - uid: 26485 components: - type: Transform - pos: -89.53578,-50.54998 + pos: -89.769135,-50.487564 parent: 2 - - uid: 22057 + - uid: 26486 components: - type: Transform - pos: -89.56703,-50.440605 + pos: -89.31591,-50.502136 parent: 2 - proto: FoodPoppy entities: @@ -108957,14 +109385,6 @@ entities: parent: 2 - type: AtmosPipeColor color: '#0055CCFF' - - uid: 21370 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -12.5,6.5 - parent: 2 - - type: AtmosPipeColor - color: '#0055CCFF' - uid: 21496 components: - type: Transform @@ -109011,6 +109431,13 @@ entities: parent: 2 - type: AtmosPipeColor color: '#0055CCFF' + - uid: 21856 + components: + - type: Transform + pos: -82.5,-20.5 + parent: 2 + - type: AtmosPipeColor + color: '#0055CCFF' - uid: 21881 components: - type: Transform @@ -115801,16 +116228,6 @@ entities: - 346 - type: AtmosPipeColor color: '#0055CCFF' - - uid: 9476 - components: - - type: Transform - pos: -82.5,-20.5 - parent: 2 - - type: DeviceNetwork - deviceLists: - - 9624 - - type: AtmosPipeColor - color: '#0055CCFF' - uid: 9730 components: - type: Transform @@ -116650,6 +117067,9 @@ entities: rot: 3.141592653589793 rad pos: -151.5,-11.5 parent: 2 + - type: DeviceNetwork + deviceLists: + - 19297 - type: AtmosPipeColor color: '#0055CCFF' - uid: 15582 @@ -116849,7 +117269,7 @@ entities: parent: 2 - type: DeviceNetwork deviceLists: - - 18696 + - 9587 - type: AtmosPipeColor color: '#0055CCFF' - uid: 18012 @@ -116859,7 +117279,7 @@ entities: parent: 2 - type: DeviceNetwork deviceLists: - - 18696 + - 9587 - type: AtmosPipeColor color: '#0055CCFF' - uid: 18037 @@ -117307,14 +117727,6 @@ entities: - 23457 - type: AtmosPipeColor color: '#0055CCFF' - - uid: 21363 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -11.5,6.5 - parent: 2 - - type: AtmosPipeColor - color: '#0055CCFF' - uid: 21495 components: - type: Transform @@ -117326,6 +117738,14 @@ entities: - 12151 - type: AtmosPipeColor color: '#0055CCFF' + - uid: 21855 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -12.5,6.5 + parent: 2 + - type: AtmosPipeColor + color: '#0055CCFF' - uid: 22131 components: - type: Transform @@ -117646,6 +118066,16 @@ entities: - 19286 - type: AtmosPipeColor color: '#0055CCFF' + - uid: 26426 + components: + - type: Transform + pos: -82.5,-19.5 + parent: 2 + - type: AtmosPipeColor + color: '#0055CCFF' + - type: DeviceNetwork + deviceLists: + - 10458 - proto: GasVentScrubber entities: - uid: 466 @@ -118331,6 +118761,9 @@ entities: - type: Transform pos: -82.5,-23.5 parent: 2 + - type: DeviceNetwork + deviceLists: + - 10458 - type: AtmosPipeColor color: '#990000FF' - uid: 13762 @@ -118543,6 +118976,9 @@ entities: rot: 1.5707963267948966 rad pos: -143.5,-11.5 parent: 2 + - type: DeviceNetwork + deviceLists: + - 19297 - type: AtmosPipeColor color: '#990000FF' - uid: 16455 @@ -118707,7 +119143,7 @@ entities: parent: 2 - type: DeviceNetwork deviceLists: - - 18696 + - 9587 - type: AtmosPipeColor color: '#990000FF' - uid: 17994 @@ -118729,7 +119165,7 @@ entities: parent: 2 - type: DeviceNetwork deviceLists: - - 18696 + - 9587 - type: AtmosPipeColor color: '#990000FF' - uid: 18046 @@ -122234,11 +122670,6 @@ entities: - type: Transform pos: -29.5,18.5 parent: 2 - - uid: 9513 - components: - - type: Transform - pos: -101.5,-33.5 - parent: 2 - uid: 9988 components: - type: Transform @@ -125139,16 +125570,6 @@ entities: - type: Transform pos: -8.5,-63.5 parent: 2 - - uid: 25797 - components: - - type: Transform - pos: -9.5,-63.5 - parent: 2 - - uid: 25799 - components: - - type: Transform - pos: -11.5,-63.5 - parent: 2 - uid: 25987 components: - type: Transform @@ -125468,6 +125889,12 @@ entities: - type: Transform pos: -86.5,38.5 parent: 2 + - uid: 23005 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -9.5,-63.5 + parent: 2 - uid: 24946 components: - type: Transform @@ -125558,11 +125985,6 @@ entities: - type: Transform pos: -7.5,-76.5 parent: 2 - - uid: 25798 - components: - - type: Transform - pos: -10.5,-63.5 - parent: 2 - uid: 25800 components: - type: Transform @@ -125608,44 +126030,205 @@ entities: entities: - uid: 19261 components: + - type: MetaData + name: disabler safe (5) - type: Transform pos: -86.5,-25.5 parent: 2 + - type: Label + currentLabel: 5 + - type: NameModifier + baseName: disabler safe - proto: GunSafeLaserCarbine entities: - uid: 1890 components: + - type: MetaData + name: laser safe (4) - type: Transform pos: -81.5,-18.5 parent: 2 + - type: EntityStorage + air: + volume: 200 + immutable: False + temperature: 293.14673 + moles: + - 1.7459903 + - 6.568249 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - type: ContainerContainer + containers: + entity_storage: !type:Container + showEnts: False + occludes: True + ents: + - 6914 + paper_label: !type:ContainerSlot + showEnts: False + occludes: True + ent: null + - type: Label + currentLabel: 4 + - type: NameModifier + baseName: laser safe - proto: GunSafePistolMk58 entities: - - uid: 19229 + - uid: 9513 components: + - type: MetaData + name: mk58 safe (4) - type: Transform pos: -86.5,-20.5 parent: 2 + - type: Label + currentLabel: 4 + - type: NameModifier + baseName: mk58 safe - proto: GunSafeRifleLecter entities: - uid: 1852 components: + - type: MetaData + name: lecter safe (4) - type: Transform pos: -80.5,-18.5 parent: 2 + - type: EntityStorage + air: + volume: 200 + immutable: False + temperature: 293.14673 + moles: + - 1.7459903 + - 6.568249 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - type: ContainerContainer + containers: + entity_storage: !type:Container + showEnts: False + occludes: True + ents: + - 13722 + - 13140 + - 11228 + - 13435 + - 13506 + - 13803 + paper_label: !type:ContainerSlot + showEnts: False + occludes: True + ent: null + - type: Label + currentLabel: 4 + - type: NameModifier + baseName: lecter safe - proto: GunSafeShotgunKammerer entities: - - uid: 3260 - components: - - type: Transform - pos: -82.5,-18.5 - parent: 2 -- proto: GunSafeSubMachineGunDrozd - entities: - - uid: 1906 + - uid: 17779 components: + - type: MetaData + name: kammerer safe (3) - type: Transform pos: -83.5,-18.5 parent: 2 + - type: EntityStorage + air: + volume: 200 + immutable: False + temperature: 293.14673 + moles: + - 1.7459903 + - 6.568249 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - type: ContainerContainer + containers: + entity_storage: !type:Container + showEnts: False + occludes: True + ents: + - 18359 + - 17785 + - 17784 + paper_label: !type:ContainerSlot + showEnts: False + occludes: True + ent: null + - type: Label + currentLabel: 3 + - type: NameModifier + baseName: kammerer safe +- proto: GunSafeSubMachineGunDrozd + entities: + - uid: 14730 + components: + - type: MetaData + name: drozd safe (3) + - type: Transform + pos: -82.5,-18.5 + parent: 2 + - type: EntityStorage + air: + volume: 200 + immutable: False + temperature: 293.1465 + moles: + - 1.7459903 + - 6.568249 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - type: ContainerContainer + containers: + entity_storage: !type:Container + showEnts: False + occludes: True + ents: + - 16442 + - 14987 + - 14777 + paper_label: !type:ContainerSlot + showEnts: False + occludes: True + ent: null + - type: Label + currentLabel: 3 + - type: NameModifier + baseName: drozd safe - proto: GyroscopeMachineCircuitboard entities: - uid: 1180 @@ -125684,6 +126267,11 @@ entities: parent: 2 - proto: HandheldHealthAnalyzer entities: + - uid: 13537 + components: + - type: Transform + pos: -88.59218,-22.57853 + parent: 2 - uid: 22315 components: - type: Transform @@ -125759,6 +126347,13 @@ entities: - type: Transform pos: -54.422913,-30.442062 parent: 2 + - uid: 26479 + components: + - type: Transform + pos: -89.43579,-22.85111 + parent: 2 + - type: HandLabeler + assignedLabel: Security Substation - proto: HeatExchanger entities: - uid: 6018 @@ -126139,6 +126734,13 @@ entities: - type: Transform pos: -120.5,-51.5 parent: 2 +- proto: HolopadSecurityArmory + entities: + - uid: 26428 + components: + - type: Transform + pos: -81.5,-21.5 + parent: 2 - proto: HolopadSecurityBreakroom entities: - uid: 9304 @@ -126443,6 +127045,11 @@ entities: - type: Transform pos: -80.51659,-65.392166 parent: 2 + - uid: 20828 + components: + - type: Transform + pos: -86.39371,-47.231388 + parent: 2 - proto: HydroponicsToolMiniHoe entities: - uid: 6172 @@ -126856,6 +127463,14 @@ entities: parent: 2 - type: Fixtures fixtures: {} + - uid: 4087 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -91.5,-17.5 + parent: 2 + - type: Fixtures + fixtures: {} - uid: 18421 components: - type: Transform @@ -126871,13 +127486,6 @@ entities: parent: 2 - type: Fixtures fixtures: {} - - uid: 23345 - components: - - type: Transform - pos: -91.5,-16.5 - parent: 2 - - type: Fixtures - fixtures: {} - uid: 23349 components: - type: Transform @@ -127064,6 +127672,36 @@ entities: - type: Transform pos: -35.350365,-4.2252345 parent: 2 +- proto: JetpackSecurityFilled + entities: + - uid: 25881 + components: + - type: Transform + parent: 3274 + - type: Physics + canCollide: False + - type: InsideEntityStorage + - uid: 26382 + components: + - type: Transform + parent: 3275 + - type: Physics + canCollide: False + - type: InsideEntityStorage + - uid: 26385 + components: + - type: Transform + parent: 7406 + - type: Physics + canCollide: False + - type: InsideEntityStorage + - uid: 26388 + components: + - type: Transform + parent: 26353 + - type: Physics + canCollide: False + - type: InsideEntityStorage - proto: Jukebox entities: - uid: 20510 @@ -127523,7 +128161,7 @@ entities: - uid: 1099 components: - type: MetaData - name: lockable button (Perma Lockdown) + name: lockable button (Brig Lockdown) - type: Transform rot: 1.5707963267948966 rad pos: -93.5,-21.7 @@ -127572,9 +128210,15 @@ entities: 4026: - - Pressed - DoorBolt - 16040: + 17813: - - Pressed - - DoorBolt + - Toggle + 17814: + - - Pressed + - Toggle + 9642: + - - Pressed + - Toggle - type: Label currentLabel: Entrance Lockdown - type: NameModifier @@ -128147,6 +128791,36 @@ entities: allowedDepartments: - Security severity: Syndicate +- proto: LockerWallMedicalFilled + entities: + - uid: 18473 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -85.5,-22.5 + parent: 2 + - type: EntityStorage + air: + volume: 200 + immutable: False + temperature: 293.14673 + moles: + - 1.7459903 + - 6.568249 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - type: Lock + locked: False + - type: Fixtures + fixtures: {} - proto: LockerWardenFilled entities: - uid: 3276 @@ -128729,23 +129403,22 @@ entities: - type: Transform pos: -112.5,-38.5 parent: 2 -- proto: MagazinePistol +- proto: MagazinePistolSubMachineGun entities: - - uid: 4573 + - uid: 14777 components: - type: Transform - pos: -88.47877,-22.559776 - parent: 2 - - uid: 7611 + parent: 14730 + - type: Physics + canCollide: False + - type: InsideEntityStorage + - uid: 16442 components: - type: Transform - pos: -88.24439,-22.544151 - parent: 2 - - uid: 22083 - components: - - type: Transform - pos: -88.74439,-22.559776 - parent: 2 + parent: 14730 + - type: Physics + canCollide: False + - type: InsideEntityStorage - proto: MagazinePistolSubMachineGunTopMounted entities: - uid: 8276 @@ -128758,6 +129431,36 @@ entities: - type: Transform pos: -77.369835,-33.429184 parent: 2 +- proto: MagazineRifle + entities: + - uid: 11228 + components: + - type: Transform + parent: 1852 + - type: Physics + canCollide: False + - type: InsideEntityStorage + - uid: 13140 + components: + - type: Transform + parent: 1852 + - type: Physics + canCollide: False + - type: InsideEntityStorage + - uid: 13435 + components: + - type: Transform + parent: 1852 + - type: Physics + canCollide: False + - type: InsideEntityStorage + - uid: 13803 + components: + - type: Transform + parent: 1852 + - type: Physics + canCollide: False + - type: InsideEntityStorage - proto: MailingUnit entities: - uid: 3680 @@ -129108,11 +129811,6 @@ entities: - type: Transform pos: -35.5,-57.5 parent: 2 - - uid: 22276 - components: - - type: Transform - pos: -89.49908,-23.118275 - parent: 2 - proto: MedkitOxygenFilled entities: - uid: 2104 @@ -129339,11 +130037,6 @@ entities: - type: Transform pos: -81.52969,-67.45853 parent: 2 - - uid: 26278 - components: - - type: Transform - pos: -86.64557,-46.522392 - parent: 2 - proto: Morgue entities: - uid: 3887 @@ -129545,6 +130238,44 @@ entities: - type: Transform pos: -37.5,-2.5 parent: 2 +- proto: NitrogenTankFilled + entities: + - uid: 23345 + components: + - type: Transform + parent: 3274 + - type: GasTank + toggleActionEntity: 23594 + - type: Physics + canCollide: False + - type: ActionsContainer + - type: ContainerContainer + containers: + actions: !type:Container + ents: + - 23594 + - type: InsideEntityStorage + - uid: 25883 + components: + - type: Transform + parent: 3275 + - type: Physics + canCollide: False + - type: InsideEntityStorage + - uid: 26383 + components: + - type: Transform + parent: 7406 + - type: Physics + canCollide: False + - type: InsideEntityStorage + - uid: 26386 + components: + - type: Transform + parent: 26353 + - type: Physics + canCollide: False + - type: InsideEntityStorage - proto: NitrousOxideCanister entities: - uid: 5275 @@ -129873,7 +130604,10 @@ entities: [head=1]Aussec Security Suite[/head] - Congratulations on the installation of your [bold]Aussec Security Suite[/bold]. This short guide will run you through the functions of each button. + Congratulations on the installation of your [bold]Aussec Security Suite[/bold]. This short guide will run you through the functions of each button, sorted from north to south. + + + [bold]Janitor Light[/bold] toggles the exterior janitor light, to alert custodians that theres been another accident. [bold]Desk Shutters[/bold] operates the exterior shutters of the front desk, useful for silencing rioters who complain. @@ -129882,16 +130616,13 @@ entities: [bold]Open Doors[/bold] operates the front doors to allow civilians entrance into security - or exit, if you're feeling inclined. - [bold]Janitor Light[/bold] toggles the exterior janitor light, to alert the janitor that you have another blood spill. + [bold]Visitation Shutters[/bold] operates the shutters in the brig visitation room, in case one of those visitors is looking a bit sketchy, or you just feel like denying your prisoners rights. [bold]Entrance Lockdown[/bold] toggles the entrance blast doors, for the most extreme circumstances where security is at risk of being overrun. - [bold]Cell Shutters[/bold] toggles the holding cell shutters to prevent criminal scum from communicating with their accomplices. - - - [bold]Perma Lockdown[/bold] toggles the permabrig blast doors, for containing the most extreme prison riots. + [bold]Brig Lockdown[/bold] toggles the brig blast doors, for containing the most extreme prison riots. editingDisabled: True - type: Label currentLabel: Aussec Security Suite @@ -131081,13 +131812,18 @@ entities: - uid: 2394 components: - type: Transform + anchored: False pos: -78.5,-27.5 parent: 2 - - uid: 17790 + - type: TriggerOnProximity + enabled: False + - type: Physics + bodyType: Dynamic + - uid: 7611 components: - type: Transform anchored: False - pos: -89.5,-20.5 + pos: -78.5,-28.5 parent: 2 - type: TriggerOnProximity enabled: False @@ -131611,13 +132347,22 @@ entities: fixtures: {} - proto: PosterLegitSafetyReport entities: - - uid: 23068 + - uid: 6874 components: - type: Transform + rot: -1.5707963267948966 rad pos: -89.5,-24.5 parent: 2 - type: Fixtures fixtures: {} + - uid: 25799 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -96.5,-28.5 + parent: 2 + - type: Fixtures + fixtures: {} - proto: PosterLegitSecWatch entities: - uid: 18598 @@ -131910,6 +132655,18 @@ entities: - type: Transform pos: -30.5,-66.5 parent: 2 + - uid: 22082 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -90.5,-24.5 + parent: 2 + - uid: 22276 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -88.5,-25.5 + parent: 2 - uid: 22991 components: - type: Transform @@ -131940,6 +132697,12 @@ entities: rot: -1.5707963267948966 rad pos: -8.5,-18.5 parent: 2 + - uid: 26417 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -89.5,-23.5 + parent: 2 - proto: PowerCellSmallPrinted entities: - uid: 23931 @@ -134190,11 +134953,6 @@ entities: rot: 1.5707963267948966 rad pos: -97.5,-18.5 parent: 2 - - uid: 13531 - components: - - type: Transform - pos: -91.5,-17.5 - parent: 2 - uid: 13535 components: - type: Transform @@ -134674,6 +135432,11 @@ entities: - type: Transform pos: -76.5,-21.5 parent: 2 + - uid: 26484 + components: + - type: Transform + pos: -90.5,-17.5 + parent: 2 - proto: PoweredStrobeLightEmpty entities: - uid: 3985 @@ -134896,16 +135659,6 @@ entities: - type: Transform pos: -37.5,0.5 parent: 2 - - uid: 16178 - components: - - type: Transform - pos: -88.5,-22.5 - parent: 2 - - uid: 18359 - components: - - type: Transform - pos: -96.5,-36.5 - parent: 2 - uid: 18750 components: - type: Transform @@ -134972,6 +135725,16 @@ entities: - type: Transform pos: -119.5,-65.5 parent: 2 + - uid: 26402 + components: + - type: Transform + pos: -80.5,-23.5 + parent: 2 + - uid: 26477 + components: + - type: Transform + pos: -88.5,-22.5 + parent: 2 - proto: RagItem entities: - uid: 24446 @@ -135652,16 +136415,6 @@ entities: - type: Transform pos: -21.5,14.5 parent: 2 - - uid: 16179 - components: - - type: Transform - pos: -88.5,-39.5 - parent: 2 - - uid: 16181 - components: - - type: Transform - pos: -88.5,-40.5 - parent: 2 - uid: 22382 components: - type: Transform @@ -138763,60 +139516,55 @@ entities: parent: 2 - proto: RiotBulletShield entities: - - uid: 13722 + - uid: 26395 components: - type: Transform - pos: -82.10486,-20.286572 + pos: -80.20954,-23.46862 parent: 2 - - type: Blocking - blockingToggleActionEntity: 6684 - - type: ActionsContainer - - type: ContainerContainer - containers: - actions: !type:Container - ents: - - 6684 - - uid: 13803 + - uid: 26399 components: - type: Transform - pos: -82.19861,-20.661572 + pos: -80.219955,-23.604038 + parent: 2 + - uid: 26401 + components: + - type: Transform + pos: -80.20954,-23.333204 + parent: 2 +- proto: RiotLaserShield + entities: + - uid: 4573 + components: + - type: Transform + pos: -80.719955,-23.416538 + parent: 2 + - uid: 26397 + components: + - type: Transform + pos: -80.719955,-23.614452 + parent: 2 + - uid: 26406 + components: + - type: Transform + pos: -80.73037,-23.301954 parent: 2 - - type: Blocking - blockingToggleActionEntity: 6685 - - type: ActionsContainer - - type: ContainerContainer - containers: - actions: !type:Container - ents: - - 6685 - proto: RiotShield entities: - - uid: 11228 + - uid: 26394 components: - type: Transform - pos: -82.46423,-20.286572 + pos: -80.42829,-23.395704 parent: 2 - - type: Blocking - blockingToggleActionEntity: 6753 - - type: ActionsContainer - - type: ContainerContainer - containers: - actions: !type:Container - ents: - - 6753 - - uid: 13506 + - uid: 26398 components: - type: Transform - pos: -82.46423,-20.661572 + pos: -80.42829,-23.604038 + parent: 2 + - uid: 26400 + components: + - type: Transform + pos: -80.42829,-23.28112 parent: 2 - - type: Blocking - blockingToggleActionEntity: 6768 - - type: ActionsContainer - - type: ContainerContainer - containers: - actions: !type:Container - ents: - - 6768 - proto: RobocopCircuitBoard entities: - uid: 24948 @@ -139204,6 +139952,11 @@ entities: parent: 2 - proto: SheetPlastic entities: + - uid: 13582 + components: + - type: Transform + pos: -84.48793,-18.395533 + parent: 2 - uid: 20464 components: - type: Transform @@ -139216,6 +139969,11 @@ entities: parent: 2 - proto: SheetSteel entities: + - uid: 18696 + components: + - type: Transform + pos: -84.45668,-18.489283 + parent: 2 - uid: 18790 components: - type: Transform @@ -139338,15 +140096,6 @@ entities: - type: Transform pos: -90.44827,-72.54804 parent: 2 -- proto: ShotGunCabinetFilled - entities: - - uid: 17779 - components: - - type: Transform - pos: -88.5,-19.5 - parent: 2 - - type: Fixtures - fixtures: {} - proto: ShotGunCabinetOpen entities: - uid: 23750 @@ -139448,6 +140197,30 @@ entities: - type: Transform pos: -33.5,-68.5 parent: 2 + - uid: 11133 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -95.5,-47.5 + parent: 2 + - uid: 11176 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -95.5,-46.5 + parent: 2 + - uid: 11330 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -95.5,-50.5 + parent: 2 + - uid: 11783 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -95.5,-49.5 + parent: 2 - uid: 15252 components: - type: Transform @@ -139864,30 +140637,6 @@ entities: - type: Transform pos: -87.5,26.5 parent: 2 - - uid: 20827 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -95.5,-47.5 - parent: 2 - - uid: 20828 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -95.5,-46.5 - parent: 2 - - uid: 20830 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -95.5,-49.5 - parent: 2 - - uid: 20831 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -95.5,-50.5 - parent: 2 - uid: 22373 components: - type: Transform @@ -140100,39 +140849,6 @@ entities: baseName: signal button - type: Fixtures fixtures: {} - - uid: 13140 - components: - - type: Transform - pos: -99.5,-26.5 - parent: 2 - - type: DeviceLinkSource - linkedPorts: - 13038: - - - Pressed - - Toggle - 13042: - - - Pressed - - Toggle - - type: Fixtures - fixtures: {} - - uid: 13435 - components: - - type: MetaData - name: signal button (Shutters) - - type: Transform - rot: 1.5707963267948966 rad - pos: -101.5,-22.5 - parent: 2 - - type: DeviceLinkSource - linkedPorts: - 8901: - - - Pressed - - Toggle - 1763: - - - Pressed - - Toggle - - type: Fixtures - fixtures: {} - uid: 17823 components: - type: MetaData @@ -140155,30 +140871,6 @@ entities: baseName: signal button - type: Fixtures fixtures: {} - - uid: 20897 - components: - - type: MetaData - name: signal button (Visitation Shutters) - - type: Transform - rot: 1.5707963267948966 rad - pos: -93.5,-20.95 - parent: 2 - - type: DeviceLinkSource - linkedPorts: - 20828: - - - Pressed - - Toggle - 20827: - - - Pressed - - Toggle - 20830: - - - Pressed - - Toggle - 20831: - - - Pressed - - Toggle - - type: Fixtures - fixtures: {} - proto: SignalButtonDirectional entities: - uid: 1481 @@ -140590,6 +141282,37 @@ entities: - Close - type: Fixtures fixtures: {} + - uid: 2068 + components: + - type: MetaData + name: signal switch (North Hallway Shutters) + - type: Transform + rot: 1.5707963267948966 rad + pos: -26.55,7.89 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 11620: + - - On + - Open + - - Off + - Close + 11618: + - - On + - Open + - - Off + - Close + 11621: + - - On + - Open + - - Off + - Close + - type: Fixtures + fixtures: {} + - type: Label + currentLabel: North Hallway Shutters + - type: NameModifier + baseName: signal switch - uid: 2791 components: - type: MetaData @@ -140873,42 +141596,14 @@ entities: baseName: signal switch - type: Fixtures fixtures: {} - - uid: 8624 + - uid: 11614 components: + - type: MetaData + name: signal switch (South Hallway Shutters) - type: Transform rot: 1.5707963267948966 rad - pos: -26.5,7.5 + pos: -26.55,7.42 parent: 2 - - type: SignalSwitch - state: True - - type: DeviceLinkSource - linkedPorts: - 11622: - - - On - - Open - - - Off - - Close - 11623: - - - On - - Open - - - Off - - Close - 11624: - - - On - - Open - - - Off - - Close - lastSignals: - Status: True - - type: Fixtures - fixtures: {} - - uid: 11613 - components: - - type: Transform - pos: -26.5,7.5 - parent: 2 - - type: SignalSwitch - state: True - type: DeviceLinkSource linkedPorts: 11619: @@ -140926,39 +141621,43 @@ entities: - Open - - Off - Close - lastSignals: - Status: True - type: Fixtures fixtures: {} - - uid: 11614 + - type: Label + currentLabel: South Hallway Shutters + - type: NameModifier + baseName: signal switch + - uid: 13748 components: + - type: MetaData + name: signal switch (Desk Shutters) - type: Transform - rot: 3.141592653589793 rad - pos: -26.5,7.5 + rot: 1.5707963267948966 rad + pos: -26.55,7.65 parent: 2 - - type: SignalSwitch - state: True - type: DeviceLinkSource linkedPorts: - 11620: + 11622: - - On - Open - - Off - Close - 11618: + 11623: - - On - Open - - Off - Close - 11621: + 11624: - - On - Open - - Off - Close - lastSignals: - Status: True - type: Fixtures fixtures: {} + - type: Label + currentLabel: Desk Shutters + - type: NameModifier + baseName: signal switch - uid: 17822 components: - type: MetaData @@ -140994,6 +141693,31 @@ entities: baseName: signal switch - type: Fixtures fixtures: {} + - uid: 22083 + components: + - type: MetaData + name: signal switch (Shutters) + - type: Transform + pos: -99.5,-26.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 13038: + - - On + - Open + - - Off + - Close + 13042: + - - On + - Open + - - Off + - Close + - type: Fixtures + fixtures: {} + - type: Label + currentLabel: Shutters + - type: NameModifier + baseName: signal switch - uid: 22376 components: - type: Transform @@ -141019,27 +141743,32 @@ entities: - Close - type: Fixtures fixtures: {} - - uid: 25663 + - uid: 26393 components: - type: MetaData - name: signal switch (Janitor Light) + name: signal switch (Shutters) - type: Transform rot: 1.5707963267948966 rad - pos: -93.5,-20.5 + pos: -101.5,-22.5 parent: 2 - type: DeviceLinkSource linkedPorts: - 18983: + 8901: - - On - - On + - Open - - Off - - Off - - type: Label - currentLabel: Janitor Light - - type: NameModifier - baseName: signal switch + - Close + 1763: + - - On + - Open + - - Off + - Close - type: Fixtures fixtures: {} + - type: Label + currentLabel: Shutters + - type: NameModifier + baseName: signal switch - proto: SignalSwitchDirectional entities: - uid: 280 @@ -141431,6 +142160,42 @@ entities: baseName: signal switch - type: Fixtures fixtures: {} + - uid: 20827 + components: + - type: MetaData + name: signal switch (Visitation Shutters) + - type: Transform + rot: 1.5707963267948966 rad + pos: -93.49833,-20.951355 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 11330: + - - On + - Open + - - Off + - Close + 11783: + - - On + - Open + - - Off + - Close + 11133: + - - On + - Open + - - Off + - Close + 11176: + - - On + - Open + - - Off + - Close + - type: Fixtures + fixtures: {} + - type: Label + currentLabel: Visitation Shutters + - type: NameModifier + baseName: signal switch - uid: 24320 components: - type: MetaData @@ -141684,6 +142449,26 @@ entities: Status: True - type: Fixtures fixtures: {} + - uid: 26411 + components: + - type: MetaData + name: signal switch (Janitoral Service Light) + - type: Transform + pos: -91.099884,-17.238651 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 18983: + - - On + - On + - - Off + - Off + - type: Fixtures + fixtures: {} + - type: Label + currentLabel: Janitoral Service Light + - type: NameModifier + baseName: signal switch - proto: SignalTimer entities: - uid: 4662 @@ -142882,6 +143667,9 @@ entities: entities: - uid: 6892 components: + - type: MetaData + desc: Real or back-water fake? You be the judge. + name: Lawyer's Diploma - type: Transform pos: -97.5,-23.5 parent: 2 @@ -143545,6 +144333,13 @@ entities: - type: Transform pos: -71.5,-8.5 parent: 2 + - uid: 1686 + components: + - type: MetaData + name: Security SMES + - type: Transform + pos: -87.5,-17.5 + parent: 2 - uid: 2028 components: - type: MetaData @@ -143552,13 +144347,6 @@ entities: - type: Transform pos: -72.5,-8.5 parent: 2 - - uid: 2110 - components: - - type: MetaData - name: Security Deterance SMES - - type: Transform - pos: -86.5,-17.5 - parent: 2 - uid: 4397 components: - type: MetaData @@ -145444,6 +146232,12 @@ entities: rot: -1.5707963267948966 rad pos: -115.5,20.5 parent: 2 + - uid: 16179 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -88.5,-40.5 + parent: 2 - proto: SpawnMechRipley entities: - uid: 19753 @@ -145732,35 +146526,45 @@ entities: parent: 2 - proto: SpawnPointLatejoin entities: - - uid: 20082 + - uid: 26469 components: - type: Transform - pos: -30.5,17.5 + pos: -27.5,20.5 parent: 2 - - uid: 26382 + - uid: 26470 components: - type: Transform - pos: -29.5,17.5 + pos: -28.5,20.5 parent: 2 - - uid: 26383 + - uid: 26471 components: - type: Transform - pos: -28.5,17.5 + pos: -30.5,20.5 parent: 2 - - uid: 26384 + - uid: 26472 components: - type: Transform - pos: -28.5,14.5 + pos: -31.5,20.5 parent: 2 - - uid: 26385 + - uid: 26473 components: - type: Transform - pos: -29.5,14.5 + pos: -31.5,11.5 parent: 2 - - uid: 26386 + - uid: 26474 components: - type: Transform - pos: -30.5,14.5 + pos: -30.5,11.5 + parent: 2 + - uid: 26475 + components: + - type: Transform + pos: -28.5,11.5 + parent: 2 + - uid: 26476 + components: + - type: Transform + pos: -27.5,11.5 parent: 2 - proto: SpawnPointLawyer entities: @@ -146078,6 +146882,16 @@ entities: - type: Transform pos: -85.5,-28.5 parent: 2 + - uid: 26413 + components: + - type: Transform + pos: -86.5,-26.5 + parent: 2 + - uid: 26415 + components: + - type: Transform + pos: -86.5,-28.5 + parent: 2 - proto: SpawnPointServiceWorker entities: - uid: 22110 @@ -146386,12 +147200,6 @@ entities: fixtures: {} - proto: SteelBench entities: - - uid: 14239 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -95.5,-28.5 - parent: 2 - uid: 14240 components: - type: Transform @@ -146416,6 +147224,12 @@ entities: rot: 1.5707963267948966 rad pos: -88.5,-43.5 parent: 2 + - uid: 25664 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -95.5,-28.5 + parent: 2 - proto: Stool entities: - uid: 3652 @@ -146530,6 +147344,12 @@ entities: rot: -1.5707963267948966 rad pos: -94.5,-47.5 parent: 2 + - uid: 26466 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -12.498405,5.608446 + parent: 2 - proto: StoolBar entities: - uid: 3422 @@ -146747,18 +147567,6 @@ entities: - type: Transform pos: -129.5,3.5 parent: 2 -- proto: Stunbaton - entities: - - uid: 17784 - components: - - type: Transform - pos: -81.55603,-25.39786 - parent: 2 - - uid: 17785 - components: - - type: Transform - pos: -81.30603,-25.42911 - parent: 2 - proto: SubstationBasic entities: - uid: 2020 @@ -146768,13 +147576,6 @@ entities: - type: Transform pos: -70.5,-8.5 parent: 2 - - uid: 2068 - components: - - type: MetaData - name: Security Substation - - type: Transform - pos: -87.5,-17.5 - parent: 2 - uid: 4396 components: - type: MetaData @@ -146831,6 +147632,17 @@ entities: - type: Transform pos: -17.5,-64.5 parent: 2 + - uid: 18469 + components: + - type: MetaData + name: Security Substation (Security Substation) + - type: Transform + pos: -86.5,-17.5 + parent: 2 + - type: Label + currentLabel: Security Substation + - type: NameModifier + baseName: Security Substation - uid: 19799 components: - type: MetaData @@ -146998,6 +147810,24 @@ entities: - type: Transform pos: -93.5,-44.5 parent: 2 + - type: EntityStorage + air: + volume: 200 + immutable: False + temperature: 293.14673 + moles: + - 1.7459903 + - 6.568249 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 - proto: SuitStorageHOS entities: - uid: 6775 @@ -147036,31 +147866,158 @@ entities: parent: 2 - proto: SuitStorageSec entities: - - uid: 2157 - components: - - type: Transform - pos: -80.5,-23.5 - parent: 2 - uid: 3274 components: + - type: MetaData + name: suit storage unit (Double, Jetpack) - type: Transform pos: -80.5,-19.5 parent: 2 + - type: EntityStorage + air: + volume: 200 + immutable: False + temperature: 293.14673 + moles: + - 1.7459903 + - 6.568249 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - type: ContainerContainer + containers: + entity_storage: !type:Container + showEnts: False + occludes: True + ents: + - 25882 + - 25881 + - 23345 + - type: Label + currentLabel: Double, Jetpack + - type: NameModifier + baseName: suit storage unit - uid: 3275 components: + - type: MetaData + name: suit storage unit (Double, Jetpack) - type: Transform pos: -80.5,-21.5 parent: 2 + - type: EntityStorage + air: + volume: 200 + immutable: False + temperature: 293.14673 + moles: + - 1.7459903 + - 6.568249 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - type: ContainerContainer + containers: + entity_storage: !type:Container + showEnts: False + occludes: True + ents: + - 25883 + - 26278 + - 26382 + - type: Label + currentLabel: Double, Jetpack + - type: NameModifier + baseName: suit storage unit - uid: 7406 components: + - type: MetaData + name: suit storage unit (Double, Jetpack) - type: Transform pos: -80.5,-22.5 parent: 2 + - type: EntityStorage + air: + volume: 200 + immutable: False + temperature: 293.14673 + moles: + - 1.7459903 + - 6.568249 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - type: ContainerContainer + containers: + entity_storage: !type:Container + showEnts: False + occludes: True + ents: + - 26384 + - 26385 + - 26383 + - type: Label + currentLabel: Double, Jetpack + - type: NameModifier + baseName: suit storage unit - uid: 26353 components: + - type: MetaData + name: suit storage unit (Double, Jetpack) - type: Transform pos: -80.5,-20.5 parent: 2 + - type: EntityStorage + air: + volume: 200 + immutable: False + temperature: 293.14673 + moles: + - 1.7459903 + - 6.568249 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - type: ContainerContainer + containers: + entity_storage: !type:Container + showEnts: False + occludes: True + ents: + - 26387 + - 26388 + - 26386 + - type: Label + currentLabel: Double, Jetpack + - type: NameModifier + baseName: suit storage unit - proto: SuitStorageWarden entities: - uid: 4004 @@ -148655,6 +149612,16 @@ entities: - SurveillanceCameraSecurity nameSet: True id: Breakroom + - uid: 25663 + components: + - type: Transform + pos: -95.5,-15.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraSecurity + nameSet: True + id: Entrance - proto: SurveillanceCameraService entities: - uid: 23712 @@ -149844,6 +150811,12 @@ entities: - type: Transform pos: -75.5,-3.5 parent: 2 + - uid: 13531 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -92.5,-17.5 + parent: 2 - uid: 13831 components: - type: Transform @@ -150009,11 +150982,6 @@ entities: - type: Transform pos: -40.5,-21.5 parent: 2 - - uid: 17821 - components: - - type: Transform - pos: -91.5,-17.5 - parent: 2 - uid: 18291 components: - type: Transform @@ -150304,6 +151272,11 @@ entities: - type: Transform pos: -73.5,-0.5 parent: 2 + - uid: 26389 + components: + - type: Transform + pos: -91.5,-17.5 + parent: 2 - proto: TableCarpet entities: - uid: 8784 @@ -151448,6 +152421,11 @@ entities: - type: Transform pos: -117.5,-76.5 parent: 2 + - uid: 23350 + components: + - type: Transform + pos: -80.5,-31.5 + parent: 2 - uid: 23366 components: - type: Transform @@ -151704,11 +152682,6 @@ entities: - type: Transform pos: -22.5,-20.5 parent: 2 - - uid: 10458 - components: - - type: Transform - pos: -101.5,-33.5 - parent: 2 - uid: 11000 components: - type: Transform @@ -151911,6 +152884,13 @@ entities: - type: Transform pos: -35.631615,-5.6210203 parent: 2 +- proto: TowelColorOrange + entities: + - uid: 26405 + components: + - type: Transform + pos: -86.3342,-46.265816 + parent: 2 - proto: TowelColorWhite entities: - uid: 9843 @@ -152043,6 +153023,11 @@ entities: parent: 7826 - type: Physics canCollide: False + - uid: 26412 + components: + - type: Transform + pos: -86.74045,-46.56269 + parent: 2 - proto: trayScanner entities: - uid: 2532 @@ -153199,6 +154184,13 @@ entities: - type: Transform pos: -115.5,22.5 parent: 2 +- proto: VendingMachineRestockSecTech + entities: + - uid: 26392 + components: + - type: Transform + pos: -80.36655,-25.476982 + parent: 2 - proto: VendingMachineRoboDrobe entities: - uid: 2483 @@ -153374,10 +154366,17 @@ entities: parent: 2 - type: Fixtures fixtures: {} - - uid: 18473 + - uid: 26416 components: - type: Transform - pos: -91.5,-17.5 + pos: -92.5,-27.5 + parent: 2 + - type: Fixtures + fixtures: {} + - uid: 26481 + components: + - type: Transform + pos: -92.5,-17.5 parent: 2 - type: Fixtures fixtures: {} @@ -158261,7 +159260,7 @@ entities: - uid: 14 components: - type: Transform - pos: -79.5,8.5 + pos: -12.5,-67.5 parent: 2 - uid: 124 components: @@ -160781,7 +161780,7 @@ entities: - uid: 2055 components: - type: Transform - pos: -101.5,-34.5 + pos: -101.5,-33.5 parent: 2 - uid: 2060 components: @@ -162018,11 +163017,21 @@ entities: - type: Transform pos: -100.5,-67.5 parent: 2 + - uid: 6439 + components: + - type: Transform + pos: -78.5,9.5 + parent: 2 - uid: 6484 components: - type: Transform pos: -79.5,-34.5 parent: 2 + - uid: 6486 + components: + - type: Transform + pos: -11.5,-63.5 + parent: 2 - uid: 6521 components: - type: Transform @@ -163918,6 +164927,11 @@ entities: - type: Transform pos: -14.5,-63.5 parent: 2 + - uid: 21363 + components: + - type: Transform + pos: -139.5,17.5 + parent: 2 - uid: 21668 components: - type: Transform @@ -164048,6 +165062,11 @@ entities: - type: Transform pos: -89.5,28.5 parent: 2 + - uid: 23068 + components: + - type: Transform + pos: -12.5,-63.5 + parent: 2 - uid: 23117 components: - type: Transform @@ -164163,6 +165182,11 @@ entities: - type: Transform pos: -26.5,-69.5 parent: 2 + - uid: 24349 + components: + - type: Transform + pos: -10.5,-63.5 + parent: 2 - uid: 24362 components: - type: Transform @@ -164248,11 +165272,61 @@ entities: - type: Transform pos: -12.5,-62.5 parent: 2 + - uid: 25798 + components: + - type: Transform + pos: -139.5,16.5 + parent: 2 - uid: 26270 components: - type: Transform pos: -134.5,-30.5 parent: 2 + - uid: 26409 + components: + - type: Transform + pos: -101.5,-34.5 + parent: 2 + - uid: 26458 + components: + - type: Transform + pos: -139.5,18.5 + parent: 2 + - uid: 26460 + components: + - type: Transform + pos: -77.5,9.5 + parent: 2 + - uid: 26461 + components: + - type: Transform + pos: -76.5,9.5 + parent: 2 + - uid: 26462 + components: + - type: Transform + pos: -75.5,9.5 + parent: 2 + - uid: 26463 + components: + - type: Transform + pos: -79.5,9.5 + parent: 2 + - uid: 26464 + components: + - type: Transform + pos: -81.5,9.5 + parent: 2 + - uid: 26467 + components: + - type: Transform + pos: -11.5,-67.5 + parent: 2 + - uid: 26468 + components: + - type: Transform + pos: -10.5,-67.5 + parent: 2 - proto: WallShuttle entities: - uid: 3581 @@ -169098,6 +170172,38 @@ entities: - type: Transform pos: -81.5,3.5 parent: 2 +- proto: WallWeaponCapacitorRecharger + entities: + - uid: 17790 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -93.5,-20.5 + parent: 2 + - uid: 20082 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -79.5,-23.5 + parent: 2 + - uid: 25791 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -79.5,-25.5 + parent: 2 + - uid: 26390 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -96.5,-32.5 + parent: 2 + - uid: 26419 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -85.5,-19.5 + parent: 2 - proto: WardrobeCargoFilled entities: - uid: 4638 @@ -169546,61 +170652,34 @@ entities: - type: Transform pos: -95.5,-38.5 parent: 2 + - uid: 4005 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -88.5,-26.5 + parent: 2 - uid: 4277 components: - type: Transform pos: -111.5,-29.5 parent: 2 - - uid: 6673 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -90.5,-24.5 - parent: 2 - - uid: 6722 - components: - - type: Transform - pos: -88.5,-26.5 - parent: 2 - uid: 6786 components: - type: Transform pos: -67.5,7.5 parent: 2 - - uid: 6874 - components: - - type: Transform - pos: -88.5,-25.5 - parent: 2 - uid: 14543 components: - type: Transform rot: 3.141592653589793 rad pos: -26.5,8.5 parent: 2 - - uid: 22082 - components: - - type: Transform - pos: -89.5,-22.5 - parent: 2 - uid: 22969 components: - type: Transform rot: -1.5707963267948966 rad pos: -2.5,-6.5 parent: 2 -- proto: WeaponDisabler - entities: - - uid: 2372 - components: - - type: Transform - pos: -80.39978,-25.538485 - parent: 2 - - uid: 20442 - components: - - type: Transform - pos: -80.52478,-25.319735 - parent: 2 - proto: WeaponEnergyTurretAI entities: - uid: 25851 @@ -169680,7 +170759,7 @@ entities: parent: 2 - type: DeviceNetwork deviceLists: - - 6669 + - 1730 - uid: 26371 components: - type: Transform @@ -169715,6 +170794,15 @@ entities: - 5916 - proto: WeaponEnergyTurretSecurityControlPanel entities: + - uid: 1730 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -85.5,-20.5 + parent: 2 + - type: DeviceList + devices: + - 4564 - uid: 5916 components: - type: Transform @@ -169727,15 +170815,40 @@ entities: - 26372 - 26374 - 26371 - - uid: 6669 +- proto: WeaponLaserCarbine + entities: + - uid: 6914 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -85.5,-22.5 - parent: 2 - - type: DeviceList - devices: - - 4564 + parent: 1890 + - type: Physics + canCollide: False + - type: InsideEntityStorage +- proto: WeaponRifleLecter + entities: + - uid: 13506 + components: + - type: Transform + parent: 1852 + - type: Physics + canCollide: False + - type: InsideEntityStorage + - uid: 13722 + components: + - type: Transform + parent: 1852 + - type: Physics + canCollide: False + - type: InsideEntityStorage +- proto: WeaponShotgunKammerer + entities: + - uid: 17785 + components: + - type: Transform + parent: 17779 + - type: Physics + canCollide: False + - type: InsideEntityStorage - proto: WeaponSprayNozzle entities: - uid: 3376 @@ -169745,6 +170858,15 @@ entities: - type: Physics canCollide: False - type: InsideEntityStorage +- proto: WeaponSubMachineGunDrozd + entities: + - uid: 14987 + components: + - type: Transform + parent: 14730 + - type: Physics + canCollide: False + - type: InsideEntityStorage - proto: WeaponSubMachineGunWt550 entities: - uid: 14639 @@ -169896,6 +171018,19 @@ entities: 2966: - - DoorStatus - Close + - uid: 16040 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -93.5,-18.5 + parent: 2 + - type: DeviceLinkSink + invokeCounter: 1 + - type: DeviceLinkSource + linkedPorts: + 4026: + - - DoorStatus + - Close - uid: 18341 components: - type: Transform @@ -169914,7 +171049,7 @@ entities: lastSignals: DoorStatus: True - type: Door - secondsUntilStateChange: -252730.69 + secondsUntilStateChange: -261472.55 state: Opening - type: Airlock autoClose: False @@ -169958,19 +171093,6 @@ entities: 24033: - - DoorStatus - Close - - uid: 16040 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -93.5,-18.5 - parent: 2 - - type: DeviceLinkSink - invokeCounter: 1 - - type: DeviceLinkSource - linkedPorts: - 4026: - - - DoorStatus - - Close - proto: WindoorSecureArmoryLocked entities: - uid: 4026 @@ -169980,7 +171102,7 @@ entities: pos: -93.5,-18.5 parent: 2 - type: DeviceLinkSink - invokeCounter: 2 + invokeCounter: 1 - type: DeviceLinkSource linkedPorts: 16040: @@ -169992,6 +171114,18 @@ entities: rot: 3.141592653589793 rad pos: -91.5,-24.5 parent: 2 + - uid: 9624 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -90.5,-24.5 + parent: 2 + - uid: 26478 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -92.5,-24.5 + parent: 2 - proto: WindoorSecureAtmosphericsLocked entities: - uid: 2090 @@ -170741,18 +171875,6 @@ entities: - type: Transform pos: -62.5,5.5 parent: 2 - - uid: 3176 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -92.5,-24.5 - parent: 2 - - uid: 4005 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -90.5,-24.5 - parent: 2 - uid: 5727 components: - type: Transform From e05d9e944bd604e3ed021565de92d41b0a66c57e Mon Sep 17 00:00:00 2001 From: PJBot Date: Mon, 15 Sep 2025 00:37:56 +0000 Subject: [PATCH 032/143] Automatic changelog update --- Resources/Changelog/Maps.yml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Resources/Changelog/Maps.yml b/Resources/Changelog/Maps.yml index 15346d9851..bdb1dd73b9 100644 --- a/Resources/Changelog/Maps.yml +++ b/Resources/Changelog/Maps.yml @@ -672,4 +672,11 @@ id: 80 time: '2025-09-14T23:46:04.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/40358 +- author: SlamBamActionman + changes: + - message: The Nukie Infiltrator now has a locker containing 5 jetpacks. + type: Tweak + id: 81 + time: '2025-09-15T00:36:47.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/39887 Order: 1 From 9313c0792486e1800b14f3d0340f1f926fc7d12a Mon Sep 17 00:00:00 2001 From: ToastEnjoyer Date: Sun, 14 Sep 2025 20:13:12 -0500 Subject: [PATCH 033/143] Replaced incendiary AK ammo with normal AK ammo, bagel. (#40359) --- Resources/Maps/bagel.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Resources/Maps/bagel.yml b/Resources/Maps/bagel.yml index 6fb0c12ab9..e94fcdd711 100644 --- a/Resources/Maps/bagel.yml +++ b/Resources/Maps/bagel.yml @@ -4,7 +4,7 @@ meta: engineVersion: 266.0.0 forkId: "" forkVersion: "" - time: 09/14/2025 23:31:09 + time: 09/15/2025 00:43:45 entityCount: 25523 maps: - 943 @@ -113516,17 +113516,17 @@ entities: - type: Transform pos: -51.5,-4.5 parent: 60 -- proto: MagazineLightRifleIncendiary +- proto: MagazineLightRifle entities: - uid: 1138 components: - type: Transform - pos: -26.673944,-6.3476434 + pos: -26.262257,-6.317416 parent: 60 - uid: 1547 components: - type: Transform - pos: -26.37181,-6.331765 + pos: -26.668507,-6.333041 parent: 60 - proto: MagazinePistolSubMachineGunTopMounted entities: From 31d30f24f99c4a280f5a5d7f335a5504df2b94dc Mon Sep 17 00:00:00 2001 From: PJBot Date: Mon, 15 Sep 2025 01:14:21 +0000 Subject: [PATCH 034/143] Automatic changelog update --- Resources/Changelog/Maps.yml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Resources/Changelog/Maps.yml b/Resources/Changelog/Maps.yml index bdb1dd73b9..1aff15ae3f 100644 --- a/Resources/Changelog/Maps.yml +++ b/Resources/Changelog/Maps.yml @@ -679,4 +679,11 @@ id: 81 time: '2025-09-15T00:36:47.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/39887 +- author: ToastEnjoyer + changes: + - message: On bagel, replaced the mapped incendiary AK47 ammo for normal AK ammo. + type: Remove + id: 82 + time: '2025-09-15T01:13:12.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/40359 Order: 1 From fd20cc2a00a9976203616d37749a620e01ee0bbf Mon Sep 17 00:00:00 2001 From: SharkSnake98 Date: Sun, 14 Sep 2025 21:30:12 -0400 Subject: [PATCH 035/143] Dark/Light Grass & Desert Astrotiles (#37867) * Added Waterjug, a low-mid pop map with a tropical theme and custom evac shuttle * Fixed postmapinittest issues (Hopefully) * Actually fixed the afformentioned issue. * Added Warden Spawnpoint which I forgot * Named APCs, Substations, & Cameras, added some more decals * Decorated some more, notably the bar. * Minor adjustments, added cans, slightly reworked salv and maints bar * Fixed some small issues, notably weird closed doors, added a few small things (shutters mostly) * Added 2 new astrotiles, dark grass and desert sand. * Removed map. Fixing issue. Please hold. * Forgot to remove a comma, please god forgive me maptainers. I blame Rider IDE for it's autoaddition of all changes made even on seperate branches. * Added localization for stacks. * Actually fixed the loc. issue. Maybe. Please. * Hopefully fixed the last localization issue. * Added Light Astro-tiles, and edited the names of the inhand png's for the dark grass astrotiles to be more internally consistant * Fixed some issues caused by another PR I made, added more maints stuff * Made some small decorative and practical changes * Fixed, changed, and added a ton of stuff. I don't think I can list it all, honestly. * Removed shields to try to fix an issue with the test * Hopefully fixed issues relating to a failed test. * Replaced grass/flora decals with randomized ones, readded shields to armory * Fixed some YML issues, whitelisted files for flora decal spawners * Added a bridge-beach, added some misc. items and objects. * Small changes to buttons, fixed wires and flooring * Fixed AME-Holopad issue. * Added a Custom Waterjug Parallax, made it so the parallaxes actually work, and made some minor adjustments to the map * Fixed an accidental adjustment to CoreStation's parallax prototype YML * Changed some Salvage and Cargo stuff * Fixed some merge issues, updated Adriatic with a locker and added some little details to Waterjug * Fixed some stuff, added docking arm near evac * meta json fix tiles * fixed again * fixed once more * Removed all the waterjug stuff. * fix spacing * fix unnecessary formatting --------- Co-authored-by: SharkSnake98 Co-authored-by: ArtisticRoomba <145879011+ArtisticRoomba@users.noreply.github.com> --- Resources/Locale/en-US/stack/stacks.ftl | 3 ++ Resources/Locale/en-US/tiles/tiles.ftl | 3 ++ .../Markers/Spawners/Random/Decals/flora.yml | 3 ++ .../Entities/Objects/Misc/tiles.yml | 51 ++++++++++++++++++ .../Recipes/Lathes/Packs/science.yml | 3 ++ Resources/Prototypes/Recipes/Lathes/misc.yml | 15 ++++++ .../Prototypes/Research/civilianservices.yml | 3 ++ .../Prototypes/Stacks/floor_tile_stacks.yml | 18 +++++++ Resources/Prototypes/Tiles/floors.yml | 28 ++++++++++ .../Tiles/tile.rsi/desertsand-inhand-left.png | Bin 0 -> 474 bytes .../tile.rsi/desertsand-inhand-right.png | Bin 0 -> 474 bytes .../Objects/Tiles/tile.rsi/desertsand.png | Bin 0 -> 648 bytes .../Tiles/tile.rsi/grassdark-inhand-left.png | Bin 0 -> 444 bytes .../Tiles/tile.rsi/grassdark-inhand-right.png | Bin 0 -> 453 bytes .../Objects/Tiles/tile.rsi/grassdark.png | Bin 0 -> 405 bytes .../Tiles/tile.rsi/grasslight-inhand-left.png | Bin 0 -> 450 bytes .../tile.rsi/grasslight-inhand-right.png | Bin 0 -> 459 bytes .../Objects/Tiles/tile.rsi/grasslight.png | Bin 0 -> 408 bytes .../Textures/Objects/Tiles/tile.rsi/meta.json | 33 ++++++++++++ 19 files changed, 160 insertions(+) create mode 100644 Resources/Textures/Objects/Tiles/tile.rsi/desertsand-inhand-left.png create mode 100644 Resources/Textures/Objects/Tiles/tile.rsi/desertsand-inhand-right.png create mode 100644 Resources/Textures/Objects/Tiles/tile.rsi/desertsand.png create mode 100644 Resources/Textures/Objects/Tiles/tile.rsi/grassdark-inhand-left.png create mode 100644 Resources/Textures/Objects/Tiles/tile.rsi/grassdark-inhand-right.png create mode 100644 Resources/Textures/Objects/Tiles/tile.rsi/grassdark.png create mode 100644 Resources/Textures/Objects/Tiles/tile.rsi/grasslight-inhand-left.png create mode 100644 Resources/Textures/Objects/Tiles/tile.rsi/grasslight-inhand-right.png create mode 100644 Resources/Textures/Objects/Tiles/tile.rsi/grasslight.png diff --git a/Resources/Locale/en-US/stack/stacks.ftl b/Resources/Locale/en-US/stack/stacks.ftl index 818ac954c5..acc7cdba64 100644 --- a/Resources/Locale/en-US/stack/stacks.ftl +++ b/Resources/Locale/en-US/stack/stacks.ftl @@ -224,6 +224,8 @@ stack-steel-maint-floor = steel maint floor stack-grating-maint-floor = grating maint floor stack-web-tile = web tile stack-astro-grass-floor = astro-grass floor +stack-dark-astro-grass-floor = dark astro-grass floor +stack-light-astro-grass-floor = light astro-grass floor stack-mowed-astro-grass-floor = mowed astro-grass floor stack-jungle-astro-grass-floor = jungle astro-grass floor stack-astro-ice-floor = astro-ice floor @@ -231,6 +233,7 @@ stack-astro-snow-floor = astro-snow floor stack-large-wood-floor = large wood floor stack-red-circuit-floor = red-circuit floor stack-asteroid-astro-sand-floor = asteroid astro-sand floor +stack-desert-astro-sand-floor = desert astro-sand floor stack-xeno-floor = xeno floor stack-xeno-steel = xeno steel tile stack-xeno-steel-corner = xeno steel corner tile diff --git a/Resources/Locale/en-US/tiles/tiles.ftl b/Resources/Locale/en-US/tiles/tiles.ftl index 6295712722..d9fe984c51 100644 --- a/Resources/Locale/en-US/tiles/tiles.ftl +++ b/Resources/Locale/en-US/tiles/tiles.ftl @@ -128,12 +128,15 @@ tiles-hull-reinforced = exterior reinforced hull plating tiles-web = web tile tiles-chromite = chromite tiles-astro-grass = astro-grass +tiles-dark-astro-grass = dark astro-grass +tiles-light-astro-grass = light astro-grass tiles-mowed-astro-grass = mowed astro-grass tiles-jungle-astro-grass = jungle astro-grass tiles-astro-ice = astro-ice tiles-astro-snow = astro-snow tiles-astro-asteroid-sand = asteroid astro-sand tiles-astro-asteroid-sand-borderless = borderless asteroid astro-sand +tiles-desert-astro-sand = desert astro-sand tiles-wood-large = large wood tiles-xeno-floor = xeno floor tiles-xeno-steel = xeno steel tile diff --git a/Resources/Prototypes/Entities/Markers/Spawners/Random/Decals/flora.yml b/Resources/Prototypes/Entities/Markers/Spawners/Random/Decals/flora.yml index aacad99bdd..313a27ae95 100644 --- a/Resources/Prototypes/Entities/Markers/Spawners/Random/Decals/flora.yml +++ b/Resources/Prototypes/Entities/Markers/Spawners/Random/Decals/flora.yml @@ -11,6 +11,9 @@ - FloorAstroGrass - FloorMowedAstroGrass - FloorJungleAstroGrass + - FloorDarkAstroGrass + - FloorLightAstroGrass + - FloorDesertAstroSand - FloorAstroIce - FloorAstroSnow - FloorAstroAsteroidSand diff --git a/Resources/Prototypes/Entities/Objects/Misc/tiles.yml b/Resources/Prototypes/Entities/Objects/Misc/tiles.yml index 6670114bdf..b92626e6a1 100644 --- a/Resources/Prototypes/Entities/Objects/Misc/tiles.yml +++ b/Resources/Prototypes/Entities/Objects/Misc/tiles.yml @@ -1533,6 +1533,40 @@ - type: Stack stackType: FloorTileAstroGrass +- type: entity + parent: FloorTileItemBase + id: FloorTileItemDarkAstroGrass + name: dark astro-grass + description: Fake grass that covers up wires and even comes with realistic NanoTrimmings! + components: + - type: Sprite + state: grassdark + - type: Item + heldPrefix: darkgrass + - type: FloorTile + outputs: + - Plating + - FloorDarkAstroGrass + - type: Stack + stackType: FloorTileDarkAstroGrass + +- type: entity + parent: FloorTileItemBase + id: FloorTileItemLightAstroGrass + name: light astro-grass + description: Fake grass that covers up wires and even comes with realistic NanoTrimmings! + components: + - type: Sprite + state: grasslight + - type: Item + heldPrefix: lightgrass + - type: FloorTile + outputs: + - Plating + - FloorLightAstroGrass + - type: Stack + stackType: FloorTileLightAstroGrass + - type: entity id: FloorTileItemAstroIce parent: FloorTileItemBase @@ -1601,6 +1635,23 @@ - type: Stack stackType: FloorTileAstroAsteroidSand +- type: entity + parent: FloorTileItemBase + id: FloorTileItemDesertAstroSand + name: desert astro-sand + description: Fake sand, designed to be fine. + components: + - type: Sprite + state: desertsand + - type: Item + heldPrefix: desertsand + - type: FloorTile + outputs: + - Plating + - FloorDesertAstroSand + - type: Stack + stackType: FloorTileDesertAstroSand + - type: entity name: large wood floor parent: FloorTileItemBase diff --git a/Resources/Prototypes/Recipes/Lathes/Packs/science.yml b/Resources/Prototypes/Recipes/Lathes/Packs/science.yml index 164a85dc44..ae8dab762d 100644 --- a/Resources/Prototypes/Recipes/Lathes/Packs/science.yml +++ b/Resources/Prototypes/Recipes/Lathes/Packs/science.yml @@ -68,9 +68,12 @@ - FauxTileAstroGrass - FauxTileMowedAstroGrass - FauxTileJungleAstroGrass + - FauxTileDarkAstroGrass + - FauxTileLightAstroGrass - FauxTileAstroIce - FauxTileAstroSnow - FauxTileAstroAsteroidSand + - FauxTileDesertAstroSand # Only contains parts for making basic modular grenades, no actual explosives - type: latheRecipePack diff --git a/Resources/Prototypes/Recipes/Lathes/misc.yml b/Resources/Prototypes/Recipes/Lathes/misc.yml index 53b5f4a4e7..1633811124 100644 --- a/Resources/Prototypes/Recipes/Lathes/misc.yml +++ b/Resources/Prototypes/Recipes/Lathes/misc.yml @@ -200,6 +200,16 @@ id: FauxTileJungleAstroGrass result: FloorTileItemJungleAstroGrass +- type: latheRecipe + parent: BaseFauxTileRecipe + id: FauxTileDarkAstroGrass + result: FloorTileItemDarkAstroGrass + +- type: latheRecipe + parent: BaseFauxTileRecipe + id: FauxTileLightAstroGrass + result: FloorTileItemLightAstroGrass + - type: latheRecipe parent: BaseFauxTileRecipe id: FauxTileAstroIce @@ -220,6 +230,11 @@ id: FauxTileAstroAsteroidSandBorderless result: FloorTileItemAstroAsteroidSandBorderless +- type: latheRecipe + parent: BaseFauxTileRecipe + id: FauxTileDesertAstroSand + result: FloorTileItemDesertAstroSand + - type: latheRecipe id: FloorGreenCircuit result: FloorTileItemGCircuit4 diff --git a/Resources/Prototypes/Research/civilianservices.yml b/Resources/Prototypes/Research/civilianservices.yml index c32169051c..50bfcc0f57 100644 --- a/Resources/Prototypes/Research/civilianservices.yml +++ b/Resources/Prototypes/Research/civilianservices.yml @@ -98,9 +98,12 @@ - FauxTileAstroGrass - FauxTileMowedAstroGrass - FauxTileJungleAstroGrass + - FauxTileDarkAstroGrass + - FauxTileLightAstroGrass - FauxTileAstroIce - FauxTileAstroSnow - FauxTileAstroAsteroidSand + - FauxTileDesertAstroSand - type: technology id: BiochemicalStasis diff --git a/Resources/Prototypes/Stacks/floor_tile_stacks.yml b/Resources/Prototypes/Stacks/floor_tile_stacks.yml index 6e1ccd45bc..a41282ff71 100644 --- a/Resources/Prototypes/Stacks/floor_tile_stacks.yml +++ b/Resources/Prototypes/Stacks/floor_tile_stacks.yml @@ -617,6 +617,18 @@ spawn: FloorTileItemJungleAstroGrass maxCount: 30 +- type: stack + id: FloorTileDarkAstroGrass + name: stack-dark-astro-grass-floor + spawn: FloorTileItemDarkAstroGrass + maxCount: 30 + +- type: stack + id: FloorTileLightAstroGrass + name: stack-light-astro-grass-floor + spawn: FloorTileItemLightAstroGrass + maxCount: 30 + - type: stack id: FloorTileAstroIce name: stack-astro-ice-floor @@ -635,6 +647,12 @@ spawn: FloorTileItemAstroAsteroidSand maxCount: 30 +- type: stack + id: FloorTileDesertAstroSand + name: stack-desert-astro-sand-floor + spawn: FloorTileItemDesertAstroSand + maxCount: 30 + - type: stack id: FloorTileWoodLarge name: stack-large-wood-floor diff --git a/Resources/Prototypes/Tiles/floors.yml b/Resources/Prototypes/Tiles/floors.yml index 7c1f39aa54..d0d9f403b3 100644 --- a/Resources/Prototypes/Tiles/floors.yml +++ b/Resources/Prototypes/Tiles/floors.yml @@ -1999,6 +1999,24 @@ deconstructTools: [ Cutting ] itemDrop: FloorTileItemJungleAstroGrass +- type: tile + parent: FloorGrassDark + id: FloorDarkAstroGrass + name: tiles-dark-astro-grass + baseTurf: Plating + isSubfloor: false + deconstructTools: [ Cutting ] + itemDrop: FloorTileItemDarkAstroGrass + +- type: tile + parent: FloorGrassLight + id: FloorLightAstroGrass + name: tiles-light-astro-grass + baseTurf: Plating + isSubfloor: false + deconstructTools: [ Cutting ] + itemDrop: FloorTileItemLightAstroGrass + # Ice - type: tile id: FloorAstroIce @@ -2043,6 +2061,16 @@ itemDrop: FloorTileItemAstroAsteroidSand weather: false +- type: tile + parent: FloorDesert + id: FloorDesertAstroSand + name: tiles-desert-astro-sand + baseTurf: Plating + isSubfloor: false + deconstructTools: [ Prying ] + itemDrop: FloorTileItemDesertAstroSand + weather: false + - type: tile id: FloorWoodLarge name: tiles-wood-large diff --git a/Resources/Textures/Objects/Tiles/tile.rsi/desertsand-inhand-left.png b/Resources/Textures/Objects/Tiles/tile.rsi/desertsand-inhand-left.png new file mode 100644 index 0000000000000000000000000000000000000000..1d96f6939172dcb537f839b7e955a84168c3aebd GIT binary patch literal 474 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D%zCwsa$hE&A8 zoweVODN*3accDYB|Bko_NpW-QX!dkoJamYC;|I+bE8e`QWfqESZaUT$5s{Uc-PFnG z+Qa#z%lm|B@%Oum2KO&aeKR34P_5qv!Ec0HQGfrT(QC}eV;SNJolN4ib!*doB zrg_p1|CwN%*+vIypO;BKfA{UzOvmScYolUka(hp<(E7KgHe>V4>3jG5ovGb$dGe&I zuR^P<{*|1Xxa`^?#x>pNgKGjS1zLI;I;_Q~IakZ-5*>65pyEx2g0 zsoCpp+v4za2J`E>v+MnHjeZu$EnUmtVRxmJU1Z|(`-}_N-$m{DAiE)(DbSXwfn($G zrwrftlxvF^l#a+vXTD+G^W`LChd^}67wcP54l-{Y=$FC&mY_9^I&WX1v^)i;Ll-?WEJ5e5?&N>Xsr5le+azyPmqo t><}$?l$Aj+ssA+N8(Ftsd&&=R{b8EqXtmpt1sGQhp00i_>zopr7y#BW$I<`* literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Tiles/tile.rsi/desertsand-inhand-right.png b/Resources/Textures/Objects/Tiles/tile.rsi/desertsand-inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..69031fbc18a323f1be7f8f19cd4b09163eb367e0 GIT binary patch literal 474 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D%zCwsa$hE&A8 zowYHGDNw{^y}*gKH8(mmb%JIXwfY`7bm+dopXM(wgKj?64*H=erpc5Uw8W=NM69cK z#g0aYLu_KxSk2#`EB?8D zafm6y*=wz?%P0EIx8q|Eun{>dbAsP~x}u-?-HV>W3?_kQwyF(llQQ;uG0f7KJx}OB znBkUqRR-TFzW$sEt0iu&7iv&DwQM=dhESfj;hYY_sh5M9ZfLcATg|edbJI&r#vD=S z-=RzwTyB1u!Z5#Usd)cS?n{r#<=3vVc|En^&AZx)-#@;`ZD6=`mV5fs=2am(&$O2_ zNnB4`zyKz?l6az(4H$TA-@d+>&Gw_q*hZg$C)8@0yXu1(C6Zg}8RzQvJ1%Ft;tz}~ O22WQ%mvv4FO$-2Z>BWu! literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Tiles/tile.rsi/desertsand.png b/Resources/Textures/Objects/Tiles/tile.rsi/desertsand.png new file mode 100644 index 0000000000000000000000000000000000000000..37f98745dc51ba5b7240989bd91fd7115f506a57 GIT binary patch literal 648 zcmV;30(bq1P)Px%KuJVFR9Hvtmd}dQP!z_$d;*`tohx@fhi~9w zKos2y{sqwi1;-JGj<%iFagu3rZzAWE8#;qb#boFvXLFMf?(h4)drpXjC6~2iJ}LoK z0#yPF6S#l(PWHc}dhfx*h5H}-0>N+Jx(W*x!Z3s%_^c%g_u&WieEqih2}&iXd38(= z_VIf!gw_gMeThXP{z*U-Mhs8l1WLsWry{W921rxI_XMAefAO^t5?{WfxPa@|F7Sp@ z${bE$+ZGVA#&F|0j;Gj*JhU4bR!*KAc$WdLFKIikEMH7Ej>jjZ1J`htHd0pNEfzyX@MyH_i#J zRg5?9C*=#Eb0_BpJ{Sv}YHE(%6v2gb%S)iYy$Q>?Vd#xg?RFOqxcbAzS!V~(`t$gDZ8JKow{8m36CVbbEbEW z;Z&svSi90i5{KM?qv42Sx1APNSL)noR7T*ud&jL|{qehU5+L};&k0)f0e3w$9Kjve z17NfBqwqLM@buY-;sVb14mTS)HqJ>HfvFm;4g$~P_{qH#0*}^T7Z=d$%)W4D%nY15 zJxetU_#0elUCt3u0#wab0>K0%-FN!Krn z^HuA$jg1fA-gtM@nfYPQe)%#yX*k1~!D3|IFl~XGgYpDR#$JbKY!}uyKsg6C^IVWD z)&G8H`F$mcl2_kXzv9wc^iri35Cce?yoA5{LylwsJuuKT}S#3ha^jGuJ*H1?a6 zv0s_^{3*i)ZhPIh-+Vtz8du0MI<(w)T*Oe_KGDvSK`^QRG~*jtw_i^fTsmy^*f*3* zyqwG|p!jWv%z=A}OZ@q8E5293{=@dr^gmqF?`9%K1ZRp?kr$zFnGH9xvXPx$e@R3^RCr$PnlTE(P!L4dQo+JPY(%gSuOPNw!CQG1J8N6<3SuFMjaXO&VyUbW zkbvKOm_UXre>=M={`H^rN zP%Iy8R-gUCBmwyHf#19P1_sO4NGNU53GlrkUp`>k8mR?9mFB;Jb)HfmKdk00000NkvXXu0mjfR|3P^ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Tiles/tile.rsi/grassdark.png b/Resources/Textures/Objects/Tiles/tile.rsi/grassdark.png new file mode 100644 index 0000000000000000000000000000000000000000..8ffe2c575fb52c718ba9e10899f4eb3495c817e8 GIT binary patch literal 405 zcmV;G0c!qPx$PDw;TR9Hvtma&S$Komt^$`vdu78?;P#9vsp%`fBUznQ0tj%)N8ooi{10=TY>mZ`nX5kO?#r7|e!$UAOA>P&GdP=?xH{epNP~ znC(wym)+RD%X2-)z;%qx`hJ~r8vgycT9b*F3{Xr>;2Mp<*yrM08&Wgt)$n}-<+7@U zxLTTkAO^)bS3<{apaJ6N%JCh;8_{xwlmG;P6+*gN3K2U?pk)a$@G%-Z1dk+WO6$&2 z@wbo?z<^>#jaA%>Y9K>H=mV!ENNrKvA4Wivt-XNwAx1Ks<1>VSX26Hgm%>vDBft!# zuxt7~oiG9_qWe6x^)#^mvJKhi{kf3ph#>^D5wXS$nl>E z0j#vw_kpf2B5nTH_{P%aVO{Rc1~P%(3ETkOa!@b?-vV*~0000`WozLkLcGd|qSSl1VNj09~U7)%`@B&AQpM&y*os3_!7eF}$ zn#?@$ZeKOazs9jO`~9tpjy>4A)$`3!{^R`Le#P8Kv)&ZJu+s9@m0Ok!;`^hfZM*HC z^DW}Wb$1(v^PhiafBS2^@zn=$Rw2h791Y7|f5w++F`R$w|DIt-Y3!exEKlVNtS4q$ zEckiphU^8`d8?Tn^!IG9cy9gR9?POC76!qj{?m+aWZix}VQ}fN)nngKF7a|Qvw-5a z9Wn>*B`)#jb7;BoxQL;;eWINuZp9VvWgmR!cwWEH%ziOj5MxDjv~1NxC&mXQUXQP< zEELx?Vfdq<{A^MSlfx-pLDq(6i@0}sytHN5@-#4p0dALmHMPx$g-Jv~RCr$PnlX#QP!NPSO~B6L8VeDuw7&M>et?bs6o1xLXX6hLY^}8tjw{kw zq!VnERRR+5nFkZd@Ww6}hI!x4Zi=^=CH~72Kfeip5|B6nwLszl&=6D$s09)ypcY6x z0Qw531=IqG6Hp7h3PAqdzgGWUHYFXXrv6_Z%mwm~p3S}r`(5>o2||qbAb`cZwEe%? z@o!+4)0qN-AKrbhw*woG3Onq=#R~$Me3thvU<2U3-7^G0Q=zVWOse?%;ip4;+rGgB z)DOil2cCytlOaww-O))C05nlHJtcsxVraig0GcS9o)W-TF|=PL08NxlPYGbF7}~EA zfF{bOrv$K74DDA5Koe!tQv%p3hW4ujpoy~SDFJL1L;F<%&_vnvlz^Cu`NiY&1!?^` zMyo6DMkSzHKKNNa_6w5);L8Vo@9rBIEL$U?v_&Vt_lA7=fN5)_6#z}PFS^p_Pylr? zhOH480EUXjdW@O@vEmHx3jjlv+VrRdv`Lpi`vwK3h(YmAbDRJG002ovPDHLkV1lU? B!|nh8 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Tiles/tile.rsi/grasslight.png b/Resources/Textures/Objects/Tiles/tile.rsi/grasslight.png new file mode 100644 index 0000000000000000000000000000000000000000..6dc00a21978f93072681afc8fabe7e952e5978a7 GIT binary patch literal 408 zcmV;J0cZY+P)Px$P)S5VR9HvtmN9DrK@^0a&4HbTjfDuQk~(d`ACN|WsW$!qA+5Ek0+QmI6xRi8 zlsOp~A4^Wp7q;1LT+j1n_ItB$Z(y0nAhW&|1BE~#&`F@0k4}BJ>T%n2KL5`fApZQ? z*vr&x|84elnArPU-Oe#^9b@xxxz0HaAAf$W%fw9vD5fTGjYeSXX;!y})XZuKbElofWgW{Ykq0e2Q0pjP%@g2h((Q<{900e*)Lb_TC5j#tuWeG7*jfYpkBMF+) zy0cXLEu;i6pqNo(75AbV$j}h_z-b9mTNL+)5zu67FCc!1kqqbf3?ZNy@FDc2@RY&` zFas& Date: Mon, 15 Sep 2025 01:31:19 +0000 Subject: [PATCH 036/143] Automatic changelog update --- Resources/Changelog/Changelog.yml | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 1475a2126b..7f7c1d6454 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,14 +1,4 @@ Entries: -- author: PotentiallyTom - changes: - - message: Changed the gold requirement for the recipies of the Laser Cannon, X-Ray - Cannon, and Advanced Laser Pistol. - type: Tweak - - message: The Advanced Laser Pistol now requires uranium to make. - type: Tweak - id: 8452 - time: '2025-05-10T09:58:03.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/37308 - author: EmoGarbage404 changes: - message: Omnizine no longer "wastes" healing when administered to patients without @@ -3945,3 +3935,10 @@ id: 8963 time: '2025-09-14T19:26:42.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/40347 +- author: SharkSnake98 + changes: + - message: Added 3 new Astrotiles for dark grass, light grass, and desert sand. + type: Add + id: 8964 + time: '2025-09-15T01:30:12.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/37867 From ff94d3e7ad1ba0fcf105f9a040f154a583a7331f Mon Sep 17 00:00:00 2001 From: ToastEnjoyer Date: Sun, 14 Sep 2025 20:42:46 -0500 Subject: [PATCH 037/143] Added spanky to mapping codeowners (#40362) --- .github/CODEOWNERS | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index f099682b6a..14f591ec87 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -8,8 +8,8 @@ /Resources/ServerInfo/ @crazybrain23 /Resources/ServerInfo/Guidebook/ServerRules/ @crazybrain23 -/Resources/Prototypes/Maps/** @Emisse @ArtisticRoomba -/Resources/Maps/** @Emisse @ArtisticRoomba +/Resources/Prototypes/Maps/** @Emisse @ArtisticRoomba @spanky-spanky +/Resources/Maps/** @Emisse @ArtisticRoomba @spanky-spanky /Resources/Prototypes/Body/ @DrSmugleaf # suffering /Resources/Prototypes/Entities/Mobs/Player/ @DrSmugleaf From 02061592ddb4993812d0c53ead0ee540731026c5 Mon Sep 17 00:00:00 2001 From: chromiumboy <50505512+chromiumboy@users.noreply.github.com> Date: Mon, 15 Sep 2025 02:19:25 -0500 Subject: [PATCH 038/143] Devices with access restrictions list those restrictions in their examination description (#37712) --- .../Tests/Access/AccessReaderTest.cs | 16 +- .../Access/Systems/AccessOverriderSystem.cs | 2 +- .../Systems/DoorElectronicsSystem.cs | 2 +- .../Components/AccessReaderComponent.cs | 38 ++- .../ShowAccessReaderSettingsComponent.cs | 16 ++ .../Access/Systems/AccessReaderSystem.cs | 262 +++++++++++++++++- .../ContentLocalizationManager.cs | 2 +- .../access/systems/access-reader-system.ftl | 5 + Resources/Locale/en-US/generic.ftl | 3 + .../Prototypes/Entities/Clothing/Eyes/hud.yml | 1 + .../Structures/Doors/Firelocks/firelock.yml | 1 + .../Entities/Structures/Machines/holopad.yml | 1 + .../Storage/Closets/Lockers/lockers.yml | 1 + .../Structures/cryogenic_sleep_unit.yml | 1 + 14 files changed, 324 insertions(+), 27 deletions(-) create mode 100644 Content.Shared/Access/Components/ShowAccessReaderSettingsComponent.cs diff --git a/Content.IntegrationTests/Tests/Access/AccessReaderTest.cs b/Content.IntegrationTests/Tests/Access/AccessReaderTest.cs index b98f030b06..a0c8c775b1 100644 --- a/Content.IntegrationTests/Tests/Access/AccessReaderTest.cs +++ b/Content.IntegrationTests/Tests/Access/AccessReaderTest.cs @@ -54,7 +54,7 @@ namespace Content.IntegrationTests.Tests.Access system.ClearDenyTags(reader); // test one list - system.AddAccess(reader, "A"); + system.TryAddAccess(reader, "A"); Assert.Multiple(() => { Assert.That(system.AreAccessTagsAllowed(new List> { "A" }, reader), Is.True); @@ -62,10 +62,10 @@ namespace Content.IntegrationTests.Tests.Access Assert.That(system.AreAccessTagsAllowed(new List> { "A", "B" }, reader), Is.True); Assert.That(system.AreAccessTagsAllowed(Array.Empty>(), reader), Is.False); }); - system.ClearAccesses(reader); + system.TryClearAccesses(reader); // test one list - two items - system.AddAccess(reader, new HashSet> { "A", "B" }); + system.TryAddAccess(reader, new HashSet> { "A", "B" }); Assert.Multiple(() => { Assert.That(system.AreAccessTagsAllowed(new List> { "A" }, reader), Is.False); @@ -73,14 +73,14 @@ namespace Content.IntegrationTests.Tests.Access Assert.That(system.AreAccessTagsAllowed(new List> { "A", "B" }, reader), Is.True); Assert.That(system.AreAccessTagsAllowed(Array.Empty>(), reader), Is.False); }); - system.ClearAccesses(reader); + system.TryClearAccesses(reader); // test two list var accesses = new List>>() { new HashSet> () { "A" }, new HashSet> () { "B", "C" } }; - system.AddAccesses(reader, accesses); + system.TryAddAccesses(reader, accesses); Assert.Multiple(() => { Assert.That(system.AreAccessTagsAllowed(new List> { "A" }, reader), Is.True); @@ -90,10 +90,10 @@ namespace Content.IntegrationTests.Tests.Access Assert.That(system.AreAccessTagsAllowed(new List> { "C", "B", "A" }, reader), Is.True); Assert.That(system.AreAccessTagsAllowed(Array.Empty>(), reader), Is.False); }); - system.ClearAccesses(reader); + system.TryClearAccesses(reader); // test deny list - system.AddAccess(reader, new HashSet> { "A" }); + system.TryAddAccess(reader, new HashSet> { "A" }); system.AddDenyTag(reader, "B"); Assert.Multiple(() => { @@ -102,7 +102,7 @@ namespace Content.IntegrationTests.Tests.Access Assert.That(system.AreAccessTagsAllowed(new List> { "A", "B" }, reader), Is.False); Assert.That(system.AreAccessTagsAllowed(Array.Empty>(), reader), Is.False); }); - system.ClearAccesses(reader); + system.TryClearAccesses(reader); system.ClearDenyTags(reader); }); await pair.CleanReturnAsync(); diff --git a/Content.Server/Access/Systems/AccessOverriderSystem.cs b/Content.Server/Access/Systems/AccessOverriderSystem.cs index 68bdd6b9a9..4eaf3c0419 100644 --- a/Content.Server/Access/Systems/AccessOverriderSystem.cs +++ b/Content.Server/Access/Systems/AccessOverriderSystem.cs @@ -229,7 +229,7 @@ public sealed class AccessOverriderSystem : SharedAccessOverriderSystem _adminLogger.Add(LogType.Action, LogImpact.High, $"{ToPrettyString(player):player} has modified {ToPrettyString(accessReaderEnt.Value):entity} with the following allowed access level holders: [{string.Join(", ", addedTags.Union(removedTags))}] [{string.Join(", ", newAccessList)}]"); - _accessReader.SetAccesses(accessReaderEnt.Value, newAccessList); + _accessReader.TrySetAccesses(accessReaderEnt.Value, newAccessList); var ev = new OnAccessOverriderAccessUpdatedEvent(player); RaiseLocalEvent(component.TargetAccessReaderId, ref ev); diff --git a/Content.Server/Doors/Electronics/Systems/DoorElectronicsSystem.cs b/Content.Server/Doors/Electronics/Systems/DoorElectronicsSystem.cs index af2738d105..5579bc5988 100644 --- a/Content.Server/Doors/Electronics/Systems/DoorElectronicsSystem.cs +++ b/Content.Server/Doors/Electronics/Systems/DoorElectronicsSystem.cs @@ -48,7 +48,7 @@ public sealed class DoorElectronicsSystem : EntitySystem DoorElectronicsUpdateConfigurationMessage args) { var accessReader = EnsureComp(uid); - _accessReader.SetAccesses((uid, accessReader), args.AccessList); + _accessReader.TrySetAccesses((uid, accessReader), args.AccessList); } private void OnAccessReaderChanged( diff --git a/Content.Shared/Access/Components/AccessReaderComponent.cs b/Content.Shared/Access/Components/AccessReaderComponent.cs index 6c2416fdf4..c261c7deca 100644 --- a/Content.Shared/Access/Components/AccessReaderComponent.cs +++ b/Content.Shared/Access/Components/AccessReaderComponent.cs @@ -34,6 +34,15 @@ public sealed partial class AccessReaderComponent : Component [DataField("access")] public List>> AccessLists = new(); + /// + /// An unmodified copy of the original list of the access groups that grant access to this reader. + /// + /// + /// If null, the access lists of this entity have not been modified yet. + /// + [DataField] + public List>>? AccessListsOriginal = null; + /// /// A list of s that grant access. Only a single matching key is required to gain access. /// @@ -76,6 +85,16 @@ public sealed partial class AccessReaderComponent : Component /// [DataField] public bool BreakOnAccessBreaker = true; + + /// + /// The examination text associated with this component. + /// + /// + /// The text can be supplied with the 'access' variable to populate it + /// with a comma separated list of the access levels contained in . + /// + [DataField] + public LocId ExaminationText = "access-reader-examination"; } [DataDefinition, Serializable, NetSerializable] @@ -96,19 +115,36 @@ public sealed class AccessReaderComponentState : ComponentState public bool Enabled; public HashSet> DenyTags; public List>> AccessLists; + public List>>? AccessListsOriginal; public List<(NetEntity, uint)> AccessKeys; public Queue AccessLog; public int AccessLogLimit; - public AccessReaderComponentState(bool enabled, HashSet> denyTags, List>> accessLists, List<(NetEntity, uint)> accessKeys, Queue accessLog, int accessLogLimit) + public AccessReaderComponentState( + bool enabled, + HashSet> denyTags, + List>> accessLists, + List>>? accessListsOriginal, + List<(NetEntity, uint)> accessKeys, + Queue accessLog, + int accessLogLimit) { Enabled = enabled; DenyTags = denyTags; AccessLists = accessLists; + AccessListsOriginal = accessListsOriginal; AccessKeys = accessKeys; AccessLog = accessLog; AccessLogLimit = accessLogLimit; } } +/// +/// Raised after the settings on the access reader are changed. +/// public sealed class AccessReaderConfigurationChangedEvent : EntityEventArgs; + +/// +/// Raised before the settings on the access reader are changed. Can be cancelled. +/// +public sealed class AccessReaderConfigurationAttemptEvent : CancellableEntityEventArgs; diff --git a/Content.Shared/Access/Components/ShowAccessReaderSettingsComponent.cs b/Content.Shared/Access/Components/ShowAccessReaderSettingsComponent.cs new file mode 100644 index 0000000000..6f72a41f94 --- /dev/null +++ b/Content.Shared/Access/Components/ShowAccessReaderSettingsComponent.cs @@ -0,0 +1,16 @@ +using Content.Shared.Inventory; +using Robust.Shared.GameStates; + +namespace Content.Shared.Access.Components; + +/// +/// This component allows you to see whether an access reader's settings have been modified. +/// +[RegisterComponent, NetworkedComponent] +public sealed partial class ShowAccessReaderSettingsComponent : Component, IClothingSlots +{ + /// + /// Determines from which equipment slots this entity can provide its benefits. + /// + public SlotFlags Slots { get; set; } = ~SlotFlags.POCKET; +} diff --git a/Content.Shared/Access/Systems/AccessReaderSystem.cs b/Content.Shared/Access/Systems/AccessReaderSystem.cs index 186aef5305..56aa0550cf 100644 --- a/Content.Shared/Access/Systems/AccessReaderSystem.cs +++ b/Content.Shared/Access/Systems/AccessReaderSystem.cs @@ -1,12 +1,15 @@ using System.Diagnostics.CodeAnalysis; using System.Linq; +using System.Text; using Content.Shared.Access.Components; using Content.Shared.DeviceLinking.Events; using Content.Shared.Emag.Systems; +using Content.Shared.Examine; using Content.Shared.GameTicking; using Content.Shared.Hands.EntitySystems; using Content.Shared.IdentityManagement; using Content.Shared.Inventory; +using Content.Shared.Localizations; using Content.Shared.NameIdentifier; using Content.Shared.PDA; using Content.Shared.StationRecords; @@ -37,17 +40,74 @@ public sealed class AccessReaderSystem : EntitySystem { base.Initialize(); + SubscribeLocalEvent(OnExamined); SubscribeLocalEvent(OnEmagged); SubscribeLocalEvent(OnLinkAttempt); + SubscribeLocalEvent(OnConfigurationAttempt); SubscribeLocalEvent(OnGetState); SubscribeLocalEvent(OnHandleState); } + private void OnExamined(Entity ent, ref ExaminedEvent args) + { + if (!GetMainAccessReader(ent, out var mainAccessReader)) + return; + + mainAccessReader.Value.Comp.AccessListsOriginal ??= new(mainAccessReader.Value.Comp.AccessLists); + + var accessHasBeenModified = mainAccessReader.Value.Comp.AccessLists.Count != mainAccessReader.Value.Comp.AccessListsOriginal.Count; + + if (!accessHasBeenModified) + { + foreach (var accessSubgroup in mainAccessReader.Value.Comp.AccessLists) + { + if (!mainAccessReader.Value.Comp.AccessListsOriginal.Any(y => y.SetEquals(accessSubgroup))) + { + accessHasBeenModified = true; + break; + } + } + } + + var canSeeAccessModification = accessHasBeenModified && + (HasComp(ent) || + _inventorySystem.TryGetInventoryEntity(args.Examiner, out _)); + + if (canSeeAccessModification) + { + var localizedCurrentNames = GetLocalizedAccessNames(mainAccessReader.Value.Comp.AccessLists); + var accessesFormatted = ContentLocalizationManager.FormatListToOr(localizedCurrentNames); + var currentSettingsMessage = localizedCurrentNames.Count > 0 + ? Loc.GetString("access-reader-access-settings-modified-message", ("access", accessesFormatted)) + : Loc.GetString("access-reader-access-settings-removed-message"); + + args.PushMarkup(currentSettingsMessage); + + return; + } + + var localizedOriginalNames = GetLocalizedAccessNames(mainAccessReader.Value.Comp.AccessListsOriginal); + + // If the string list is empty either there were no access restrictions or the localized names were invalid + if (localizedOriginalNames.Count == 0) + return; + + var originalAccessesFormatted = ContentLocalizationManager.FormatListToOr(localizedOriginalNames); + var originalSettingsMessage = Loc.GetString(mainAccessReader.Value.Comp.ExaminationText, ("access", originalAccessesFormatted)); + args.PushMarkup(originalSettingsMessage); + } + private void OnGetState(EntityUid uid, AccessReaderComponent component, ref ComponentGetState args) { - args.State = new AccessReaderComponentState(component.Enabled, component.DenyTags, component.AccessLists, - _recordsSystem.Convert(component.AccessKeys), component.AccessLog, component.AccessLogLimit); + args.State = new AccessReaderComponentState( + component.Enabled, + component.DenyTags, + component.AccessLists, + component.AccessListsOriginal, + _recordsSystem.Convert(component.AccessKeys), + component.AccessLog, + component.AccessLogLimit); } private void OnHandleState(EntityUid uid, AccessReaderComponent component, ref ComponentHandleState args) @@ -66,6 +126,7 @@ public sealed class AccessReaderSystem : EntitySystem } component.AccessLists = new(state.AccessLists); + component.AccessListsOriginal = state.AccessListsOriginal == null ? null : new(state.AccessListsOriginal); component.DenyTags = new(state.DenyTags); component.AccessLog = new(state.AccessLog); component.AccessLogLimit = state.AccessLogLimit; @@ -100,6 +161,13 @@ public sealed class AccessReaderSystem : EntitySystem Dirty(uid, reader); } + private void OnConfigurationAttempt(Entity ent, ref AccessReaderConfigurationAttemptEvent args) + { + // The first time that the access list of the reader is modified, + // make a copy of the original settings + ent.Comp.AccessListsOriginal ??= new(ent.Comp.AccessLists); + } + /// /// Searches the source for access tags /// then compares it with the all targets accesses to see if it is allowed. @@ -348,11 +416,23 @@ public sealed class AccessReaderSystem : EntitySystem #region: AccessLists API + /// + /// Tries to clear the entity's . + /// + /// The access reader entity which is having its access permissions cleared. + public void TryClearAccesses(Entity ent) + { + if (CanConfigureAccessReader(ent)) + { + ClearAccesses(ent); + } + } + /// /// Clears the entity's . /// /// The access reader entity which is having its access permissions cleared. - public void ClearAccesses(Entity ent) + private void ClearAccesses(Entity ent) { ent.Comp.AccessLists.Clear(); @@ -360,32 +440,65 @@ public sealed class AccessReaderSystem : EntitySystem RaiseLocalEvent(ent, new AccessReaderConfigurationChangedEvent()); } + /// + /// Tries to replace the access permissions in an entity's with a supplied list. + /// + /// The access reader entity which is having its list of access permissions replaced. + /// The list of access permissions replacing the original one. + public void TrySetAccesses(Entity ent, List>> accesses) + { + if (CanConfigureAccessReader(ent)) + { + SetAccesses(ent, accesses); + } + } + /// /// Replaces the access permissions in an entity's with a supplied list. /// /// The access reader entity which is having its list of access permissions replaced. /// The list of access permissions replacing the original one. - public void SetAccesses(Entity ent, List>> accesses) + private void SetAccesses(Entity ent, List>> accesses) { ent.Comp.AccessLists.Clear(); - AddAccesses(ent, accesses); } + /// + public void TrySetAccesses(Entity ent, List> accesses) + { + if (CanConfigureAccessReader(ent)) + { + SetAccesses(ent, accesses); + } + } + /// - public void SetAccesses(Entity ent, List> accesses) + private void SetAccesses(Entity ent, List> accesses) { ent.Comp.AccessLists.Clear(); - AddAccesses(ent, accesses); } + /// + /// Tries to add a collection of access permissions to an access reader entity's + /// + /// The access reader entity to which the new access permissions are being added. + /// The list of access permissions being added. + public void TryAddAccesses(Entity ent, List>> accesses) + { + if (CanConfigureAccessReader(ent)) + { + AddAccesses(ent, accesses); + } + } + /// /// Adds a collection of access permissions to an access reader entity's /// /// The access reader entity to which the new access permissions are being added. /// The list of access permissions being added. - public void AddAccesses(Entity ent, List>> accesses) + private void AddAccesses(Entity ent, List>> accesses) { foreach (var access in accesses) { @@ -396,8 +509,17 @@ public sealed class AccessReaderSystem : EntitySystem RaiseLocalEvent(ent, new AccessReaderConfigurationChangedEvent()); } + /// + public void TryAddAccesses(Entity ent, List> accesses) + { + if (CanConfigureAccessReader(ent)) + { + AddAccesses(ent, accesses); + } + } + /// - public void AddAccesses(Entity ent, List> accesses) + private void AddAccesses(Entity ent, List> accesses) { foreach (var access in accesses) { @@ -408,13 +530,27 @@ public sealed class AccessReaderSystem : EntitySystem RaiseLocalEvent(ent, new AccessReaderConfigurationChangedEvent()); } + /// + /// Tries to add an access permission to an access reader entity's + /// + /// The access reader entity to which the access permission is being added. + /// The access permission being added. + /// If true, the component will be marked as changed afterward. + public void TryAddAccess(Entity ent, HashSet> access) + { + if (CanConfigureAccessReader(ent)) + { + AddAccess(ent, access); + } + } + /// /// Adds an access permission to an access reader entity's /// /// The access reader entity to which the access permission is being added. /// The access permission being added. /// If true, the component will be marked as changed afterward. - public void AddAccess(Entity ent, HashSet> access, bool dirty = true) + private void AddAccess(Entity ent, HashSet> access, bool dirty = true) { ent.Comp.AccessLists.Add(access); @@ -425,18 +561,40 @@ public sealed class AccessReaderSystem : EntitySystem RaiseLocalEvent(ent, new AccessReaderConfigurationChangedEvent()); } + /// + public void TryAddAccess(Entity ent, ProtoId access) + { + if (CanConfigureAccessReader(ent)) + { + AddAccess(ent, access); + } + } + /// - public void AddAccess(Entity ent, ProtoId access, bool dirty = true) + private void AddAccess(Entity ent, ProtoId access, bool dirty = true) { AddAccess(ent, new HashSet>() { access }, dirty); } + /// + /// Tries to remove a collection of access permissions from an access reader entity's + /// + /// The access reader entity from which the access permissions are being removed. + /// The list of access permissions being removed. + public void TryRemoveAccesses(Entity ent, List>> accesses) + { + if (CanConfigureAccessReader(ent)) + { + RemoveAccesses(ent, accesses); + } + } + /// /// Removes a collection of access permissions from an access reader entity's /// /// The access reader entity from which the access permissions are being removed. /// The list of access permissions being removed. - public void RemoveAccesses(Entity ent, List>> accesses) + private void RemoveAccesses(Entity ent, List>> accesses) { foreach (var access in accesses) { @@ -447,8 +605,17 @@ public sealed class AccessReaderSystem : EntitySystem RaiseLocalEvent(ent, new AccessReaderConfigurationChangedEvent()); } + /// + public void TryRemoveAccesses(Entity ent, List> accesses) + { + if (CanConfigureAccessReader(ent)) + { + RemoveAccesses(ent, accesses); + } + } + /// - public void RemoveAccesses(Entity ent, List> accesses) + private void RemoveAccesses(Entity ent, List> accesses) { foreach (var access in accesses) { @@ -459,13 +626,27 @@ public sealed class AccessReaderSystem : EntitySystem RaiseLocalEvent(ent, new AccessReaderConfigurationChangedEvent()); } + /// + /// Tries to removes an access permission from an access reader entity's + /// + /// The access reader entity from which the access permission is being removed. + /// The access permission being removed. + /// If true, the component will be marked as changed afterward. + public void TryRemoveAccess(Entity ent, HashSet> access) + { + if (CanConfigureAccessReader(ent)) + { + RemoveAccess(ent, access); + } + } + /// /// Removes an access permission from an access reader entity's /// /// The access reader entity from which the access permission is being removed. /// The access permission being removed. /// If true, the component will be marked as changed afterward. - public void RemoveAccess(Entity ent, HashSet> access, bool dirty = true) + private void RemoveAccess(Entity ent, HashSet> access, bool dirty = true) { for (int i = ent.Comp.AccessLists.Count - 1; i >= 0; i--) { @@ -482,12 +663,29 @@ public sealed class AccessReaderSystem : EntitySystem RaiseLocalEvent(ent, new AccessReaderConfigurationChangedEvent()); } + /// + public void TryRemoveAccess(Entity ent, ProtoId access) + { + if (CanConfigureAccessReader(ent)) + { + RemoveAccess(ent, new HashSet>() { access }); + } + } + /// - public void RemoveAccess(Entity ent, ProtoId access, bool dirty = true) + private void RemoveAccess(Entity ent, ProtoId access, bool dirty = true) { RemoveAccess(ent, new HashSet>() { access }, dirty); } + private bool CanConfigureAccessReader(Entity ent) + { + var ev = new AccessReaderConfigurationAttemptEvent(); + RaiseLocalEvent(ent, ev); + + return !ev.Cancelled; + } + #endregion #region: AccessKeys API @@ -727,4 +925,38 @@ public sealed class AccessReaderSystem : EntitySystem Dirty(ent); } + + private List GetLocalizedAccessNames(List>> accessLists) + { + var localizedNames = new List(); + string? andSeparator = null; + + foreach (var accessHashSet in accessLists) + { + var sb = new StringBuilder(); + var accessSubset = accessHashSet.ToList(); + + // Combine the names of all access levels in the subset into a single string + foreach (var access in accessSubset) + { + var accessName = Loc.GetString("access-reader-unknown-id"); + + if (_prototype.Resolve(access, out var accessProto) && !string.IsNullOrWhiteSpace(accessProto.Name)) + accessName = Loc.GetString(accessProto.Name); + + sb.Append(Loc.GetString("access-reader-access-label", ("access", accessName))); + + if (accessSubset.IndexOf(access) < (accessSubset.Count - 1)) + { + andSeparator ??= " " + Loc.GetString("generic-and") + " "; + sb.Append(andSeparator); + } + } + + // Add this string to the list + localizedNames.Add(sb.ToString()); + } + + return localizedNames; + } } diff --git a/Content.Shared/Localizations/ContentLocalizationManager.cs b/Content.Shared/Localizations/ContentLocalizationManager.cs index 3cfe3f2a3d..7af34f01d8 100644 --- a/Content.Shared/Localizations/ContentLocalizationManager.cs +++ b/Content.Shared/Localizations/ContentLocalizationManager.cs @@ -132,7 +132,7 @@ namespace Content.Shared.Localizations <= 0 => string.Empty, 1 => list[0], 2 => $"{list[0]} or {list[1]}", - _ => $"{string.Join(" or ", list)}" + _ => $"{string.Join(", ", list.GetRange(0, list.Count - 1))}, or {list[^1]}" }; } diff --git a/Resources/Locale/en-US/access/systems/access-reader-system.ftl b/Resources/Locale/en-US/access/systems/access-reader-system.ftl index d66989f6cf..bf3bfe4d96 100644 --- a/Resources/Locale/en-US/access/systems/access-reader-system.ftl +++ b/Resources/Locale/en-US/access/systems/access-reader-system.ftl @@ -1 +1,6 @@ access-reader-unknown-id = Unknown +access-reader-access-label = [color=yellow]{$access}[/color] +access-reader-examination = Access is generally restricted to personnel with {$access} access. +access-reader-examination-functionality-restricted = {$access} access may be required to use certain functions. +access-reader-access-settings-modified-message = [italic]The access reader has been modified to accept personnel with {$access} access.[/italic] +access-reader-access-settings-removed-message = [italic]The settings on the access reader have been deleted.[/italic] \ No newline at end of file diff --git a/Resources/Locale/en-US/generic.ftl b/Resources/Locale/en-US/generic.ftl index 3504097885..cdca0f2493 100644 --- a/Resources/Locale/en-US/generic.ftl +++ b/Resources/Locale/en-US/generic.ftl @@ -4,6 +4,9 @@ generic-not-available-shorthand = N/A generic-article-a = a generic-article-an = an +generic-and = and +generic-or = or + generic-unknown = unknown generic-unknown-title = Unknown generic-error = error diff --git a/Resources/Prototypes/Entities/Clothing/Eyes/hud.yml b/Resources/Prototypes/Entities/Clothing/Eyes/hud.yml index b35109ce17..5ecabc41eb 100644 --- a/Resources/Prototypes/Entities/Clothing/Eyes/hud.yml +++ b/Resources/Prototypes/Entities/Clothing/Eyes/hud.yml @@ -30,6 +30,7 @@ damageContainers: - Inorganic - Silicon + - type: ShowAccessReaderSettings - type: entity parent: [ClothingEyesBase, ShowMedicalIcons] diff --git a/Resources/Prototypes/Entities/Structures/Doors/Firelocks/firelock.yml b/Resources/Prototypes/Entities/Structures/Doors/Firelocks/firelock.yml index 489411bc28..bde406f5cb 100644 --- a/Resources/Prototypes/Entities/Structures/Doors/Firelocks/firelock.yml +++ b/Resources/Prototypes/Entities/Structures/Doors/Firelocks/firelock.yml @@ -132,6 +132,7 @@ price: 150 - type: AccessReader access: [ [ "Engineering" ] ] + examinationText: access-reader-examination-functionality-restricted - type: PryUnpowered pryModifier: 0.5 - type: PointLight diff --git a/Resources/Prototypes/Entities/Structures/Machines/holopad.yml b/Resources/Prototypes/Entities/Structures/Machines/holopad.yml index 95a1fba489..8c68710d76 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/holopad.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/holopad.yml @@ -76,6 +76,7 @@ speakerVolume: Speak - type: AccessReader access: [[ "Command" ]] + examinationText: access-reader-examination-functionality-restricted - type: ActivatableUI key: enum.HolopadUiKey.InteractionWindow - type: ActivatableUIRequiresPower diff --git a/Resources/Prototypes/Entities/Structures/Storage/Closets/Lockers/lockers.yml b/Resources/Prototypes/Entities/Structures/Storage/Closets/Lockers/lockers.yml index 52f29168fd..0fd9f1fab5 100644 --- a/Resources/Prototypes/Entities/Structures/Storage/Closets/Lockers/lockers.yml +++ b/Resources/Prototypes/Entities/Structures/Storage/Closets/Lockers/lockers.yml @@ -416,6 +416,7 @@ type: GenpopLockerBoundUserInterface - type: AccessReader # note! this access is for the UI, not the door. door access is handled on GenpopLocker access: [["Security"]] + examinationText: access-reader-examination-functionality-restricted - type: Lock locked: false useAccess: false diff --git a/Resources/Prototypes/Entities/Structures/cryogenic_sleep_unit.yml b/Resources/Prototypes/Entities/Structures/cryogenic_sleep_unit.yml index 7458cd2b69..131caec4a3 100644 --- a/Resources/Prototypes/Entities/Structures/cryogenic_sleep_unit.yml +++ b/Resources/Prototypes/Entities/Structures/cryogenic_sleep_unit.yml @@ -23,6 +23,7 @@ - type: AccessReader breakOnAccessBreaker: false access: [["Cryogenics"]] + examinationText: access-reader-examination-functionality-restricted - type: InteractionOutline - type: Cryostorage - type: Fixtures From e27576929f4e729ab233bef51d5d87d6e6039a06 Mon Sep 17 00:00:00 2001 From: PJBot Date: Mon, 15 Sep 2025 07:20:35 +0000 Subject: [PATCH 039/143] Automatic changelog update --- Resources/Changelog/Changelog.yml | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 7f7c1d6454..4c36cb1d79 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,12 +1,4 @@ Entries: -- author: EmoGarbage404 - changes: - - message: Omnizine no longer "wastes" healing when administered to patients without - even amounts of all damage types. - type: Tweak - id: 8453 - time: '2025-05-10T12:51:28.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/37129 - author: Nukesthestation changes: - message: The maximum character limit for paper has been increased to 10,000, hop @@ -3942,3 +3934,14 @@ id: 8964 time: '2025-09-15T01:30:12.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/37867 +- author: chromiumboy + changes: + - message: Devices with access restrictions now list those restrictions in their + examination description + type: Add + - message: Wearing a diagnostic HUD will reveal if a device's access restrictions + have been modified and in what way + type: Add + id: 8965 + time: '2025-09-15T07:19:25.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/37712 From 7444c8ea4abeaf33c3fd151537d925ce69d4878a Mon Sep 17 00:00:00 2001 From: chromiumboy <50505512+chromiumboy@users.noreply.github.com> Date: Mon, 15 Sep 2025 09:18:32 -0500 Subject: [PATCH 040/143] The station AI can be destroyed (#39588) * Initial commit * Fixing merge conflict * Merge conflict fixed * Anchorable entities can now be marked as 'unanchorable' * Revert "Anchorable entities can now be marked as 'unanchorable'" This reverts commit 6a502e62a703cf06bd36ed3bdefe655fc074cfc5 This functionality will be made into a separate PR * Error sprite * Update AI core appearance with sustained damage, spawn scrap on destroyed * Added intellicard sprite * AI damage overlays * Added fixtures * AI core accent changes when damaged or low on power * Bug fix and pop up messages for inserting AIs into inoperable cores * Updated 'dead' sprite * Destroying the AI core reduces the number of AI job slots available * AI battery duration set to 10 minutes * Initial commit * Allow MMIs used in the construction of AI cores to take them over * Initial resources commit * Initial code commit * Sprite update * Bug fixes and updates * Basic console UI * Code refactor * Added lock screen * Added all outstanding UI features * Added purge sprites * Better appearance handling * Fixed issue with purge sprite * Finalized UI design * Major components finalized * Bit of clean up * Removed some code that was used for testing * Tweaked some text * Removed extra space * Added the circuitboard to the RD's locker * Addressed reviewer comments plus tweaks * Addressed reviewer comments plus tweaks * Removed instances of granular damage * Various improvements * Removed testing code * Fixed issue with disabled buttons * Finalized code * Addressed review comments * Added a spare Station AI core electronics to the research director's locker * Fixing build failure * Addressed review comments * Addressed review comments * Added reverse path for construction graph * Removed unneeded reference * Parts can be purchased through cargo * Fixing merge conflict * Merge conflict resolved * Fixing merge conflict * Code update * Code updates * Increased AI core health and gave it a sell price to fix test fail * Added screen static sprite * Added better support for ghosted AI players plus code tweaks * Various improvements and clean up * Increased purge duration to 60 seconds * Fixed needless complication * Addressed reviewer comments part 1 * Addressed reviewer comments part 2 * Further fixes * Trying lower battery values to see if it fixes the test fail * Adjusted power values again * Addressed review comments * Addressed review comments * Fixed test fail * Fixed bug with endless rebooting. Using rejuvenation on an AI core revives the AI inside. * Added pop up text * Bug fix * Tweaks and fixes * Fixed restoration console not updating when the AI finishes rebooting * Update SharedStationAiSystem.Held.cs --------- Co-authored-by: ScarKy0 --- ...StationAiFixerConsoleBoundUserInterface.cs | 42 ++ ...ationAiFixerConsoleConfirmationDialog.xaml | 22 + ...onAiFixerConsoleConfirmationDialog.xaml.cs | 30 ++ .../StationAi/StationAiFixerConsoleSystem.cs | 24 + .../StationAiFixerConsoleWindow.xaml | 172 ++++++++ .../StationAiFixerConsoleWindow.xaml.cs | 198 +++++++++ .../Silicons/StationAi/StationAiSystem.cs | 6 +- Content.Server/Holopad/HolopadSystem.cs | 48 +- .../StationAi/StationAiFixerConsoleSystem.cs | 64 +++ .../Silicons/StationAi/StationAiSystem.cs | 307 ++++++++++++- .../ContainerSpawnPointSystem.cs | 12 +- .../SharedStationAiFixerConsoleSystem.cs | 411 ++++++++++++++++++ .../SharedStationAiSystem.Customization.cs | 85 +++- .../StationAi/SharedStationAiSystem.Held.cs | 47 +- .../StationAi/SharedStationAiSystem.cs | 183 +++++--- .../StationAi/StationAiCoreComponent.cs | 10 +- .../StationAiCustomizationComponent.cs | 12 + .../StationAiFixerConsoleComponent.cs | 144 ++++++ Resources/Locale/en-US/generic.ftl | 1 + Resources/Locale/en-US/recipes/components.ftl | 1 + Resources/Locale/en-US/recipes/tags.ftl | 1 + .../silicons/station-ai-fixer-console.ftl | 37 ++ .../Locale/en-US/silicons/station-ai.ftl | 4 + .../Catalog/Cargo/cargo_science.yml | 10 + .../Catalog/Fills/Crates/science.yml | 16 + .../Catalog/Fills/Lockers/heads.yml | 1 + Resources/Prototypes/Chat/notifications.yml | 14 + .../Entities/Mobs/Player/silicon.yml | 172 +++++++- .../Devices/Circuitboards/computer.yml | 13 +- .../Devices/Electronics/station_ai_core.yml | 14 + .../Objects/Specific/Robotics/mmi.yml | 2 + .../Weapons/Guns/Turrets/turrets_base.yml | 4 +- .../Machines/Computers/computers.yml | 83 ++++ .../Graphs/structures/station_ai_core.yml | 144 ++++++ .../Recipes/Construction/structures.yml | 13 + Resources/Prototypes/tags.yml | 3 + .../Mobs/Silicon/station_ai.rsi/ai_dead.png | Bin 4405 -> 7247 bytes .../Mobs/Silicon/station_ai.rsi/ai_error.png | Bin 0 -> 312 bytes .../Mobs/Silicon/station_ai.rsi/ai_fuzz.png | Bin 0 -> 7062 bytes .../Silicon/station_ai.rsi/ai_unpowered.png | Bin 0 -> 2273 bytes .../Mobs/Silicon/station_ai.rsi/frame_0.png | Bin 0 -> 593 bytes .../Mobs/Silicon/station_ai.rsi/frame_1.png | Bin 0 -> 611 bytes .../Mobs/Silicon/station_ai.rsi/frame_2.png | Bin 0 -> 611 bytes .../Mobs/Silicon/station_ai.rsi/frame_3.png | Bin 0 -> 763 bytes .../Mobs/Silicon/station_ai.rsi/frame_3b.png | Bin 0 -> 1149 bytes .../Mobs/Silicon/station_ai.rsi/frame_4.png | Bin 0 -> 452 bytes .../Mobs/Silicon/station_ai.rsi/meta.json | 43 ++ .../DamageOverlay_100.png | Bin 0 -> 276 bytes .../DamageOverlay_125.png | Bin 0 -> 331 bytes .../DamageOverlay_150.png | Bin 0 -> 404 bytes .../DamageOverlay_175.png | Bin 0 -> 496 bytes .../DamageOverlay_25.png | Bin 0 -> 101 bytes .../DamageOverlay_50.png | Bin 0 -> 143 bytes .../DamageOverlay_75.png | Bin 0 -> 231 bytes .../Silicon/station_ai_cracks.rsi/meta.json | 39 ++ .../Objects/Devices/ai_card.rsi/dead.png | Bin 0 -> 283 bytes .../Objects/Devices/ai_card.rsi/meta.json | 9 + .../Specific/Robotics/mmi.rsi/meta.json | 3 + .../Specific/Robotics/mmi.rsi/mmi_icon.png | Bin 0 -> 912 bytes .../Machines/computers.rsi/ai-fixer-404.png | Bin 270 -> 621 bytes .../Machines/computers.rsi/ai-fixer-empty.png | Bin 371 -> 909 bytes .../Machines/computers.rsi/ai-fixer-full.png | Bin 594 -> 921 bytes .../computers.rsi/ai-fixer-progress-0.png | Bin 0 -> 2553 bytes .../computers.rsi/ai-fixer-progress-1.png | Bin 0 -> 2577 bytes .../computers.rsi/ai-fixer-progress-2.png | Bin 0 -> 2576 bytes .../computers.rsi/ai-fixer-progress-3.png | Bin 0 -> 2545 bytes .../computers.rsi/ai-fixer-purge-0.png | Bin 0 -> 2319 bytes .../computers.rsi/ai-fixer-purge-1.png | Bin 0 -> 2366 bytes .../computers.rsi/ai-fixer-purge-2.png | Bin 0 -> 2406 bytes .../computers.rsi/ai-fixer-purge-3.png | Bin 0 -> 2373 bytes .../Machines/computers.rsi/ai-fixer.png | Bin 635 -> 569 bytes .../Machines/computers.rsi/meta.json | 242 ++++++++++- 72 files changed, 2553 insertions(+), 133 deletions(-) create mode 100644 Content.Client/Silicons/StationAi/StationAiFixerConsoleBoundUserInterface.cs create mode 100644 Content.Client/Silicons/StationAi/StationAiFixerConsoleConfirmationDialog.xaml create mode 100644 Content.Client/Silicons/StationAi/StationAiFixerConsoleConfirmationDialog.xaml.cs create mode 100644 Content.Client/Silicons/StationAi/StationAiFixerConsoleSystem.cs create mode 100644 Content.Client/Silicons/StationAi/StationAiFixerConsoleWindow.xaml create mode 100644 Content.Client/Silicons/StationAi/StationAiFixerConsoleWindow.xaml.cs create mode 100644 Content.Server/Silicons/StationAi/StationAiFixerConsoleSystem.cs create mode 100644 Content.Shared/Silicons/StationAi/SharedStationAiFixerConsoleSystem.cs create mode 100644 Content.Shared/Silicons/StationAi/StationAiFixerConsoleComponent.cs create mode 100644 Resources/Locale/en-US/silicons/station-ai-fixer-console.ftl create mode 100644 Resources/Prototypes/Entities/Objects/Devices/Electronics/station_ai_core.yml create mode 100644 Resources/Prototypes/Recipes/Construction/Graphs/structures/station_ai_core.yml create mode 100644 Resources/Textures/Mobs/Silicon/station_ai.rsi/ai_error.png create mode 100644 Resources/Textures/Mobs/Silicon/station_ai.rsi/ai_fuzz.png create mode 100644 Resources/Textures/Mobs/Silicon/station_ai.rsi/ai_unpowered.png create mode 100644 Resources/Textures/Mobs/Silicon/station_ai.rsi/frame_0.png create mode 100644 Resources/Textures/Mobs/Silicon/station_ai.rsi/frame_1.png create mode 100644 Resources/Textures/Mobs/Silicon/station_ai.rsi/frame_2.png create mode 100644 Resources/Textures/Mobs/Silicon/station_ai.rsi/frame_3.png create mode 100644 Resources/Textures/Mobs/Silicon/station_ai.rsi/frame_3b.png create mode 100644 Resources/Textures/Mobs/Silicon/station_ai.rsi/frame_4.png create mode 100644 Resources/Textures/Mobs/Silicon/station_ai_cracks.rsi/DamageOverlay_100.png create mode 100644 Resources/Textures/Mobs/Silicon/station_ai_cracks.rsi/DamageOverlay_125.png create mode 100644 Resources/Textures/Mobs/Silicon/station_ai_cracks.rsi/DamageOverlay_150.png create mode 100644 Resources/Textures/Mobs/Silicon/station_ai_cracks.rsi/DamageOverlay_175.png create mode 100644 Resources/Textures/Mobs/Silicon/station_ai_cracks.rsi/DamageOverlay_25.png create mode 100644 Resources/Textures/Mobs/Silicon/station_ai_cracks.rsi/DamageOverlay_50.png create mode 100644 Resources/Textures/Mobs/Silicon/station_ai_cracks.rsi/DamageOverlay_75.png create mode 100644 Resources/Textures/Mobs/Silicon/station_ai_cracks.rsi/meta.json create mode 100644 Resources/Textures/Objects/Devices/ai_card.rsi/dead.png create mode 100644 Resources/Textures/Objects/Specific/Robotics/mmi.rsi/mmi_icon.png create mode 100644 Resources/Textures/Structures/Machines/computers.rsi/ai-fixer-progress-0.png create mode 100644 Resources/Textures/Structures/Machines/computers.rsi/ai-fixer-progress-1.png create mode 100644 Resources/Textures/Structures/Machines/computers.rsi/ai-fixer-progress-2.png create mode 100644 Resources/Textures/Structures/Machines/computers.rsi/ai-fixer-progress-3.png create mode 100644 Resources/Textures/Structures/Machines/computers.rsi/ai-fixer-purge-0.png create mode 100644 Resources/Textures/Structures/Machines/computers.rsi/ai-fixer-purge-1.png create mode 100644 Resources/Textures/Structures/Machines/computers.rsi/ai-fixer-purge-2.png create mode 100644 Resources/Textures/Structures/Machines/computers.rsi/ai-fixer-purge-3.png diff --git a/Content.Client/Silicons/StationAi/StationAiFixerConsoleBoundUserInterface.cs b/Content.Client/Silicons/StationAi/StationAiFixerConsoleBoundUserInterface.cs new file mode 100644 index 0000000000..63183c2334 --- /dev/null +++ b/Content.Client/Silicons/StationAi/StationAiFixerConsoleBoundUserInterface.cs @@ -0,0 +1,42 @@ +using Content.Shared.Silicons.StationAi; +using Robust.Client.UserInterface; + +namespace Content.Client.Silicons.StationAi; + +public sealed class StationAiFixerConsoleBoundUserInterface(EntityUid owner, Enum uiKey) : BoundUserInterface(owner, uiKey) +{ + private StationAiFixerConsoleWindow? _window; + + protected override void Open() + { + base.Open(); + + _window = this.CreateWindow(); + _window.SetOwner(Owner); + + _window.SendStationAiFixerConsoleMessageAction += SendStationAiFixerConsoleMessage; + _window.OpenConfirmationDialogAction += OpenConfirmationDialog; + } + + public override void Update() + { + base.Update(); + _window?.UpdateState(); + } + + private void OpenConfirmationDialog() + { + if (_window == null) + return; + + _window.ConfirmationDialog?.Close(); + _window.ConfirmationDialog = new StationAiFixerConsoleConfirmationDialog(); + _window.ConfirmationDialog.OpenCentered(); + _window.ConfirmationDialog.SendStationAiFixerConsoleMessageAction += SendStationAiFixerConsoleMessage; + } + + private void SendStationAiFixerConsoleMessage(StationAiFixerConsoleAction action) + { + SendPredictedMessage(new StationAiFixerConsoleMessage(action)); + } +} diff --git a/Content.Client/Silicons/StationAi/StationAiFixerConsoleConfirmationDialog.xaml b/Content.Client/Silicons/StationAi/StationAiFixerConsoleConfirmationDialog.xaml new file mode 100644 index 0000000000..fa61d614e0 --- /dev/null +++ b/Content.Client/Silicons/StationAi/StationAiFixerConsoleConfirmationDialog.xaml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Content.Client/Silicons/StationAi/StationAiFixerConsoleWindow.xaml.cs b/Content.Client/Silicons/StationAi/StationAiFixerConsoleWindow.xaml.cs new file mode 100644 index 0000000000..0c3140a13e --- /dev/null +++ b/Content.Client/Silicons/StationAi/StationAiFixerConsoleWindow.xaml.cs @@ -0,0 +1,198 @@ +using Content.Client.UserInterface.Controls; +using Content.Shared.Lock; +using Content.Shared.Silicons.StationAi; +using Robust.Client.AutoGenerated; +using Robust.Client.Graphics; +using Robust.Client.UserInterface.XAML; +using Robust.Shared.Timing; +using Robust.Shared.Utility; +using System.Numerics; + +namespace Content.Client.Silicons.StationAi; + +[GenerateTypedNameReferences] +public sealed partial class StationAiFixerConsoleWindow : FancyWindow +{ + [Dependency] private readonly IEntityManager _entManager = default!; + [Dependency] private readonly IGameTiming _timing = default!; + + private readonly StationAiFixerConsoleSystem _stationAiFixerConsole; + private readonly SharedStationAiSystem _stationAi; + + private EntityUid? _owner; + + private readonly SpriteSpecifier.Rsi _emptyPortrait = new(new("Mobs/Silicon/station_ai.rsi"), "ai_empty"); + private readonly SpriteSpecifier.Rsi _rebootingPortrait = new(new("Mobs/Silicon/station_ai.rsi"), "ai_fuzz"); + private SpriteSpecifier? _currentPortrait; + + public event Action? SendStationAiFixerConsoleMessageAction; + public event Action? OpenConfirmationDialogAction; + + public StationAiFixerConsoleConfirmationDialog? ConfirmationDialog; + + private readonly Dictionary _statusColors = new() + { + [StationAiState.Empty] = Color.FromHex("#464966"), + [StationAiState.Occupied] = Color.FromHex("#3E6C45"), + [StationAiState.Rebooting] = Color.FromHex("#A5762F"), + [StationAiState.Dead] = Color.FromHex("#BB3232"), + }; + + public StationAiFixerConsoleWindow() + { + RobustXamlLoader.Load(this); + IoCManager.InjectDependencies(this); + + _stationAiFixerConsole = _entManager.System(); + _stationAi = _entManager.System(); + + StationAiPortraitTexture.DisplayRect.TextureScale = new Vector2(4f, 4f); + + CancelButton.OnButtonDown += _ => OnSendStationAiFixerConsoleMessage(StationAiFixerConsoleAction.Cancel); + EjectButton.OnButtonDown += _ => OnSendStationAiFixerConsoleMessage(StationAiFixerConsoleAction.Eject); + RepairButton.OnButtonDown += _ => OnSendStationAiFixerConsoleMessage(StationAiFixerConsoleAction.Repair); + PurgeButton.OnButtonDown += _ => OnOpenConfirmationDialog(); + + CancelButton.Label.HorizontalAlignment = HAlignment.Left; + EjectButton.Label.HorizontalAlignment = HAlignment.Left; + RepairButton.Label.HorizontalAlignment = HAlignment.Left; + PurgeButton.Label.HorizontalAlignment = HAlignment.Left; + + CancelButton.Label.Margin = new Thickness(40, 0, 0, 0); + EjectButton.Label.Margin = new Thickness(40, 0, 0, 0); + RepairButton.Label.Margin = new Thickness(40, 0, 0, 0); + PurgeButton.Label.Margin = new Thickness(40, 0, 0, 0); + } + + public void OnSendStationAiFixerConsoleMessage(StationAiFixerConsoleAction action) + { + SendStationAiFixerConsoleMessageAction?.Invoke(action); + } + + public void OnOpenConfirmationDialog() + { + OpenConfirmationDialogAction?.Invoke(); + } + + public override void Close() + { + base.Close(); + ConfirmationDialog?.Close(); + } + + public void SetOwner(EntityUid owner) + { + _owner = owner; + UpdateState(); + } + + public void UpdateState() + { + if (!_entManager.TryGetComponent(_owner, out var stationAiFixerConsole)) + return; + + var ent = (_owner.Value, stationAiFixerConsole); + var isLocked = _entManager.TryGetComponent(_owner, out var lockable) && lockable.Locked; + + var stationAiHolderInserted = _stationAiFixerConsole.IsStationAiHolderInserted((_owner.Value, stationAiFixerConsole)); + var stationAi = stationAiFixerConsole.ActionTarget; + var stationAiState = StationAiState.Empty; + + if (_entManager.TryGetComponent(stationAi, out var stationAiCustomization)) + { + stationAiState = stationAiCustomization.State; + } + + // Set subscreen visibility + LockScreen.Visible = isLocked; + MainControls.Visible = !isLocked && !_stationAiFixerConsole.IsActionInProgress(ent); + ActionProgressScreen.Visible = !isLocked && _stationAiFixerConsole.IsActionInProgress(ent); + + // Update station AI name + StationAiNameLabel.Text = GetStationAiName(stationAi); + StationAiStatusLabel.Text = Loc.GetString("station-ai-fixer-console-window-no-station-ai-status"); + + // Update station AI portrait + var portrait = _emptyPortrait; + var statusColor = _statusColors[StationAiState.Empty]; + + if (stationAiState == StationAiState.Rebooting) + { + portrait = _rebootingPortrait; + StationAiStatusLabel.Text = Loc.GetString("station-ai-fixer-console-window-station-ai-rebooting"); + _statusColors.TryGetValue(StationAiState.Rebooting, out statusColor); + } + else if (stationAi != null && + stationAiCustomization != null && + _stationAi.TryGetCustomizedAppearanceData((stationAi.Value, stationAiCustomization), out var layerData)) + { + StationAiStatusLabel.Text = stationAiState == StationAiState.Occupied ? + Loc.GetString("station-ai-fixer-console-window-station-ai-online") : + Loc.GetString("station-ai-fixer-console-window-station-ai-offline"); + + if (layerData.TryGetValue(stationAiState.ToString(), out var stateData) && stateData is { RsiPath: not null, State: not null }) + { + portrait = new SpriteSpecifier.Rsi(new ResPath(stateData.RsiPath), stateData.State); + } + + _statusColors.TryGetValue(stationAiState, out statusColor); + } + + if (_currentPortrait == null || !_currentPortrait.Equals(portrait)) + { + StationAiPortraitTexture.SetFromSpriteSpecifier(portrait); + _currentPortrait = portrait; + } + + StationAiStatus.PanelOverride = new StyleBoxFlat + { + BackgroundColor = statusColor, + }; + + // Update buttons + EjectButton.Disabled = !stationAiHolderInserted; + RepairButton.Disabled = !stationAiHolderInserted || stationAiState != StationAiState.Dead; + PurgeButton.Disabled = !stationAiHolderInserted || stationAiState == StationAiState.Empty; + + // Update progress bar + if (ActionProgressScreen.Visible) + UpdateProgressBar(ent); + } + + public void UpdateProgressBar(Entity ent) + { + ActionInProgressLabel.Text = ent.Comp.ActionType == StationAiFixerConsoleAction.Repair ? + Loc.GetString("station-ai-fixer-console-window-action-progress-repair") : + Loc.GetString("station-ai-fixer-console-window-action-progress-purge"); + + var fullTimeSpan = ent.Comp.ActionEndTime - ent.Comp.ActionStartTime; + var remainingTimeSpan = ent.Comp.ActionEndTime - _timing.CurTime; + + var time = remainingTimeSpan.TotalSeconds > 60 ? remainingTimeSpan.TotalMinutes : remainingTimeSpan.TotalSeconds; + var units = remainingTimeSpan.TotalSeconds > 60 ? Loc.GetString("generic-minutes") : Loc.GetString("generic-seconds"); + ActionProgressEtaLabel.Text = Loc.GetString("station-ai-fixer-console-window-action-progress-eta", ("time", (int)time), ("units", units)); + + ActionProgressBar.Value = 1f - (float)remainingTimeSpan.Divide(fullTimeSpan); + } + + private string GetStationAiName(EntityUid? uid) + { + if (_entManager.TryGetComponent(uid, out var metadata)) + { + return metadata.EntityName; + } + + return Loc.GetString("station-ai-fixer-console-window-no-station-ai"); + } + + protected override void FrameUpdate(FrameEventArgs args) + { + if (!ActionProgressScreen.Visible) + return; + + if (!_entManager.TryGetComponent(_owner, out var stationAiFixerConsole)) + return; + + UpdateProgressBar((_owner.Value, stationAiFixerConsole)); + } +} diff --git a/Content.Client/Silicons/StationAi/StationAiSystem.cs b/Content.Client/Silicons/StationAi/StationAiSystem.cs index 9b0a9fb7ea..d4a8b9dbd8 100644 --- a/Content.Client/Silicons/StationAi/StationAiSystem.cs +++ b/Content.Client/Silicons/StationAi/StationAiSystem.cs @@ -81,10 +81,10 @@ public sealed partial class StationAiSystem : SharedStationAiSystem if (args.Sprite == null) return; - if (_appearance.TryGetData(entity.Owner, StationAiVisualState.Key, out var layerData, args.Component)) - _sprite.LayerSetData((entity.Owner, args.Sprite), StationAiVisualState.Key, layerData); + if (_appearance.TryGetData(entity.Owner, StationAiVisualLayers.Icon, out var layerData, args.Component)) + _sprite.LayerSetData((entity.Owner, args.Sprite), StationAiVisualLayers.Icon, layerData); - _sprite.LayerSetVisible((entity.Owner, args.Sprite), StationAiVisualState.Key, layerData != null); + _sprite.LayerSetVisible((entity.Owner, args.Sprite), StationAiVisualLayers.Icon, layerData != null); } public override void Shutdown() diff --git a/Content.Server/Holopad/HolopadSystem.cs b/Content.Server/Holopad/HolopadSystem.cs index 884fb3ae71..0cba4824db 100644 --- a/Content.Server/Holopad/HolopadSystem.cs +++ b/Content.Server/Holopad/HolopadSystem.cs @@ -8,6 +8,8 @@ using Content.Shared.Chat.TypingIndicator; using Content.Shared.Holopad; using Content.Shared.IdentityManagement; using Content.Shared.Labels.Components; +using Content.Shared.Mobs; +using Content.Shared.Mobs.Systems; using Content.Shared.Power; using Content.Shared.Silicons.StationAi; using Content.Shared.Speech; @@ -38,6 +40,7 @@ public sealed class HolopadSystem : SharedHolopadSystem [Dependency] private readonly PopupSystem _popupSystem = default!; [Dependency] private readonly IGameTiming _timing = default!; [Dependency] private readonly PvsOverrideSystem _pvs = default!; + [Dependency] private readonly MobStateSystem _mobState = default!; private float _updateTimer = 1.0f; private const float UpdateTime = 1.0f; @@ -77,6 +80,8 @@ public sealed class HolopadSystem : SharedHolopadSystem SubscribeLocalEvent(OnAiRemove); SubscribeLocalEvent(OnParentChanged); SubscribeLocalEvent(OnPowerChanged); + SubscribeLocalEvent(OnMobStateChanged); + } #region: Holopad UI bound user interface messages @@ -226,7 +231,7 @@ public sealed class HolopadSystem : SharedHolopadSystem if (!_stationAiSystem.TryGetHeld((receiver, receiverStationAiCore), out var insertedAi)) continue; - if (_userInterfaceSystem.TryOpenUi(receiverUid, HolopadUiKey.AiRequestWindow, insertedAi)) + if (_userInterfaceSystem.TryOpenUi(receiverUid, HolopadUiKey.AiRequestWindow, insertedAi.Value)) LinkHolopadToUser(entity, args.Actor); } @@ -446,6 +451,17 @@ public sealed class HolopadSystem : SharedHolopadSystem UpdateHolopadControlLockoutStartTime(entity); } + private void OnMobStateChanged(Entity ent, ref MobStateChangedEvent args) + { + if (!HasComp(ent)) + return; + + foreach (var holopad in ent.Comp.LinkedHolopads) + { + ShutDownHolopad(holopad); + } + } + #endregion public override void Update(float frameTime) @@ -605,25 +621,23 @@ public sealed class HolopadSystem : SharedHolopadSystem if (entity.Comp.Hologram != null) DeleteHologram(entity.Comp.Hologram.Value, entity); - if (entity.Comp.User != null) + // Check if the associated holopad user is an AI + if (HasComp(entity.Comp.User) && + _stationAiSystem.TryGetCore(entity.Comp.User.Value, out var stationAiCore)) { - // Check if the associated holopad user is an AI - if (TryComp(entity.Comp.User, out var stationAiHeld) && - _stationAiSystem.TryGetCore(entity.Comp.User.Value, out var stationAiCore)) + // Return the AI eye to free roaming + _stationAiSystem.SwitchRemoteEntityMode(stationAiCore, true); + + // If the AI core is still broadcasting, end its calls + if (TryComp(stationAiCore, out var stationAiCoreTelephone) && + _telephoneSystem.IsTelephoneEngaged((stationAiCore.Owner, stationAiCoreTelephone))) { - // Return the AI eye to free roaming - _stationAiSystem.SwitchRemoteEntityMode(stationAiCore, true); - - // If the AI core is still broadcasting, end its calls - if (entity.Owner != stationAiCore.Owner && - TryComp(stationAiCore, out var stationAiCoreTelephone) && - _telephoneSystem.IsTelephoneEngaged((stationAiCore.Owner, stationAiCoreTelephone))) - { - _telephoneSystem.EndTelephoneCalls((stationAiCore.Owner, stationAiCoreTelephone)); - } + _telephoneSystem.EndTelephoneCalls((stationAiCore.Owner, stationAiCoreTelephone)); } - - UnlinkHolopadFromUser(entity, entity.Comp.User.Value); + } + else + { + UnlinkHolopadFromUser(entity, entity.Comp.User); } Dirty(entity); diff --git a/Content.Server/Silicons/StationAi/StationAiFixerConsoleSystem.cs b/Content.Server/Silicons/StationAi/StationAiFixerConsoleSystem.cs new file mode 100644 index 0000000000..cc6f54c446 --- /dev/null +++ b/Content.Server/Silicons/StationAi/StationAiFixerConsoleSystem.cs @@ -0,0 +1,64 @@ +using Content.Shared.Silicons.StationAi; +using Content.Server.EUI; +using Content.Server.Ghost; +using Content.Server.Mind; +using Robust.Shared.Audio.Systems; +using Robust.Server.Player; +using Content.Shared.Popups; + +namespace Content.Server.Silicons.StationAi; + +public sealed partial class StationAiFixerConsoleSystem : SharedStationAiFixerConsoleSystem +{ + [Dependency] private readonly EuiManager _eui = default!; + [Dependency] private readonly IPlayerManager _player = default!; + [Dependency] private readonly MindSystem _mind = default!; + [Dependency] private readonly SharedAudioSystem _audio = default!; + [Dependency] private readonly SharedPopupSystem _popup = default!; + + protected override void FinalizeAction(Entity ent) + { + if (IsActionInProgress(ent) && ent.Comp.ActionTarget != null) + { + switch (ent.Comp.ActionType) + { + case StationAiFixerConsoleAction.Repair: + + // Send message to disembodied player that they are being revived + if (_mind.TryGetMind(ent.Comp.ActionTarget.Value, out _, out var mind) && + mind.IsVisitingEntity && + _player.TryGetSessionById(mind.UserId, out var session)) + { + _eui.OpenEui(new ReturnToBodyEui(mind, _mind, _player), session); + _popup.PopupEntity(Loc.GetString("station-ai-fixer-console-repair-finished"), ent); + } + else + { + _popup.PopupEntity(Loc.GetString("station-ai-fixer-console-repair-successful"), ent); + } + + // TODO: make predicted once a user is not required + if (ent.Comp.RepairFinishedSound != null) + { + _audio.PlayPvs(ent.Comp.RepairFinishedSound, ent); + } + + break; + + case StationAiFixerConsoleAction.Purge: + + _popup.PopupEntity(Loc.GetString("station-ai-fixer-console-purge-successful"), ent); + + // TODO: make predicted once a user is not required + if (ent.Comp.PurgeFinishedSound != null) + { + _audio.PlayPvs(ent.Comp.PurgeFinishedSound, ent); + } + + break; + } + } + + base.FinalizeAction(ent); + } +} diff --git a/Content.Server/Silicons/StationAi/StationAiSystem.cs b/Content.Server/Silicons/StationAi/StationAiSystem.cs index 45b3dda431..73c5670c1e 100644 --- a/Content.Server/Silicons/StationAi/StationAiSystem.cs +++ b/Content.Server/Silicons/StationAi/StationAiSystem.cs @@ -1,10 +1,34 @@ using Content.Server.Chat.Systems; +using Content.Server.Construction; +using Content.Server.Destructible; +using Content.Server.Ghost; +using Content.Server.Mind; +using Content.Server.Power.Components; +using Content.Server.Power.EntitySystems; +using Content.Server.Roles; +using Content.Server.Spawners.Components; +using Content.Server.Spawners.EntitySystems; +using Content.Server.Station.Systems; +using Content.Shared.Alert; using Content.Shared.Chat.Prototypes; +using Content.Shared.Containers.ItemSlots; +using Content.Shared.Damage; +using Content.Shared.Destructible; using Content.Shared.DeviceNetwork.Components; +using Content.Shared.DoAfter; +using Content.Shared.Mobs; +using Content.Shared.Mobs.Systems; +using Content.Shared.Popups; +using Content.Shared.Power.Components; +using Content.Shared.Rejuvenate; +using Content.Shared.Roles; using Content.Shared.Silicons.StationAi; +using Content.Shared.Speech.Components; using Content.Shared.StationAi; using Content.Shared.Turrets; using Content.Shared.Weapons.Ranged.Events; +using Robust.Server.Containers; +using Robust.Shared.Containers; using Robust.Shared.Map.Components; using Robust.Shared.Player; using Robust.Shared.Prototypes; @@ -16,19 +40,300 @@ public sealed class StationAiSystem : SharedStationAiSystem { [Dependency] private readonly EntityLookupSystem _lookup = default!; [Dependency] private readonly SharedTransformSystem _xforms = default!; + [Dependency] private readonly ContainerSystem _container = default!; + [Dependency] private readonly MindSystem _mind = default!; + [Dependency] private readonly RoleSystem _roles = default!; + [Dependency] private readonly ItemSlotsSystem _slots = default!; + [Dependency] private readonly GhostSystem _ghost = default!; + [Dependency] private readonly AlertsSystem _alerts = default!; + [Dependency] private readonly DestructibleSystem _destructible = default!; + [Dependency] private readonly BatterySystem _battery = default!; + [Dependency] private readonly DamageableSystem _damageable = default!; + [Dependency] private readonly SharedPopupSystem _popups = default!; + [Dependency] private readonly StationSystem _station = default!; + [Dependency] private readonly StationJobsSystem _stationJobs = default!; + [Dependency] private readonly IPrototypeManager _proto = default!; + [Dependency] private readonly MobStateSystem _mobState = default!; + [Dependency] private readonly SharedAppearanceSystem _appearance = default!; private readonly HashSet> _stationAiCores = new(); + private readonly ProtoId _turretIsAttackingChatNotificationPrototype = "TurretIsAttacking"; private readonly ProtoId _aiWireSnippedChatNotificationPrototype = "AiWireSnipped"; + private readonly ProtoId _aiLosingPowerChatNotificationPrototype = "AiLosingPower"; + private readonly ProtoId _aiCriticalPowerChatNotificationPrototype = "AiCriticalPower"; + + private readonly ProtoId _stationAiJob = "StationAi"; + private readonly EntProtoId _stationAiBrain = "StationAiBrain"; + + private readonly ProtoId _batteryAlert = "BorgBattery"; + private readonly ProtoId _damageAlert = "BorgHealth"; public override void Initialize() { base.Initialize(); + SubscribeLocalEvent(AfterConstructionChangeEntity); + SubscribeLocalEvent(OnContainerSpawn); + SubscribeLocalEvent(OnApcBatteryChanged); + SubscribeLocalEvent(OnChargeChanged); + SubscribeLocalEvent(OnDamageChanged); + SubscribeLocalEvent(OnDestruction); + SubscribeLocalEvent>(OnDoAfterAttempt); + SubscribeLocalEvent(OnRejuvenate); + SubscribeLocalEvent(OnExpandICChatRecipients); SubscribeLocalEvent(OnAmmoShot); } + private void AfterConstructionChangeEntity(Entity ent, ref AfterConstructionChangeEntityEvent args) + { + if (!_container.TryGetContainer(ent, StationAiCoreComponent.BrainContainer, out var container) || + container.Count == 0) + { + return; + } + + var brain = container.ContainedEntities[0]; + + if (_mind.TryGetMind(brain, out var mindId, out var mind)) + { + // Found an existing mind to transfer into the AI core + var aiBrain = Spawn(_stationAiBrain, Transform(ent.Owner).Coordinates); + _roles.MindAddJobRole(mindId, mind, false, _stationAiJob); + _mind.TransferTo(mindId, aiBrain); + + if (!TryComp(ent, out var targetHolder) || + !_slots.TryInsert(ent, targetHolder.Slot, aiBrain, null)) + { + QueueDel(aiBrain); + } + } + + // TODO: We should consider keeping the borg brain inside the AI core. + // When the core is destroyed, the station AI can be transferred into the brain, + // then dropped on the ground. The deceased AI can then be revived later, + // instead of being lost forever. + QueueDel(brain); + } + + private void OnContainerSpawn(Entity ent, ref ContainerSpawnEvent args) + { + // Ensure that players that recently joined the round will spawn + // into an AI core that has a full battery and full integrity. + if (TryComp(ent, out var battery)) + { + _battery.SetCharge(ent, battery.MaxCharge); + } + + if (TryComp(ent, out var damageable)) + { + _damageable.SetAllDamage(ent, damageable, 0); + } + } + + protected override void OnAiInsert(Entity ent, ref EntInsertedIntoContainerMessage args) + { + base.OnAiInsert(ent, ref args); + + UpdateBatteryAlert(ent); + UpdateCoreIntegrityAlert(ent); + UpdateDamagedAccent(ent); + } + + protected override void OnAiRemove(Entity ent, ref EntRemovedFromContainerMessage args) + { + base.OnAiRemove(ent, ref args); + + _alerts.ClearAlert(args.Entity, _batteryAlert); + _alerts.ClearAlert(args.Entity, _damageAlert); + + if (TryComp(args.Entity, out var accent)) + { + accent.OverrideChargeLevel = null; + accent.OverrideTotalDamage = null; + accent.DamageAtMaxCorruption = null; + } + } + + protected override void OnMobStateChanged(Entity ent, ref MobStateChangedEvent args) + { + if (args.NewMobState != MobState.Alive) + { + SetStationAiState(ent, StationAiState.Dead); + return; + } + + var state = StationAiState.Rebooting; + + if (_mind.TryGetMind(ent, out var _, out var mind) && !mind.IsVisitingEntity) + { + state = StationAiState.Occupied; + } + + if (TryGetCore(ent, out var aiCore) && aiCore.Comp != null) + { + var aiCoreEnt = (aiCore.Owner, aiCore.Comp); + + if (SetupEye(aiCoreEnt)) + AttachEye(aiCoreEnt); + } + + SetStationAiState(ent, state); + } + + private void OnDestruction(Entity ent, ref DestructionEventArgs args) + { + var station = _station.GetOwningStation(ent); + + if (station == null) + return; + + if (!HasComp(ent)) + return; + + // If the destroyed core could act as a player spawn point, + // reduce the number of available AI jobs by one + _stationJobs.TryAdjustJobSlot(station.Value, _stationAiJob, -1, false, true); + } + + private void OnApcBatteryChanged(Entity ent, ref ApcPowerReceiverBatteryChangedEvent args) + { + if (!args.Enabled) + return; + + if (!TryGetHeld((ent.Owner, ent.Comp), out var held)) + return; + + var ev = new ChatNotificationEvent(_aiLosingPowerChatNotificationPrototype, ent); + RaiseLocalEvent(held.Value, ref ev); + } + + private void OnChargeChanged(Entity entity, ref ChargeChangedEvent args) + { + UpdateBatteryAlert(entity); + UpdateDamagedAccent(entity); + } + + private void OnDamageChanged(Entity entity, ref DamageChangedEvent args) + { + UpdateCoreIntegrityAlert(entity); + UpdateDamagedAccent(entity); + } + + private void UpdateDamagedAccent(Entity ent) + { + if (!TryGetHeld((ent.Owner, ent.Comp), out var held)) + return; + + if (!TryComp(held, out var accent)) + return; + + if (TryComp(ent, out var battery)) + accent.OverrideChargeLevel = battery.CurrentCharge / battery.MaxCharge; + + if (TryComp(ent, out var damageable)) + accent.OverrideTotalDamage = damageable.TotalDamage; + + if (TryComp(ent, out var destructible)) + accent.DamageAtMaxCorruption = _destructible.DestroyedAt(ent, destructible); + + Dirty(held.Value, accent); + } + + private void UpdateBatteryAlert(Entity ent) + { + if (!TryComp(ent, out var battery)) + return; + + if (!TryGetHeld((ent.Owner, ent.Comp), out var held)) + return; + + if (!_proto.TryIndex(_batteryAlert, out var proto)) + return; + + var chargePercent = battery.CurrentCharge / battery.MaxCharge; + var chargeLevel = Math.Round(chargePercent * proto.MaxSeverity); + + _alerts.ShowAlert(held.Value, _batteryAlert, (short)Math.Clamp(chargeLevel, 0, proto.MaxSeverity)); + + if (TryComp(ent, out var apcBattery) && + apcBattery.Enabled && + chargePercent < 0.2) + { + var ev = new ChatNotificationEvent(_aiCriticalPowerChatNotificationPrototype, ent); + RaiseLocalEvent(held.Value, ref ev); + } + } + + private void UpdateCoreIntegrityAlert(Entity ent) + { + if (!TryComp(ent, out var damageable)) + return; + + if (!TryComp(ent, out var destructible)) + return; + + if (!TryGetHeld((ent.Owner, ent.Comp), out var held)) + return; + + if (!_proto.TryIndex(_damageAlert, out var proto)) + return; + + var damagePercent = damageable.TotalDamage / _destructible.DestroyedAt(ent, destructible); + var damageLevel = Math.Round(damagePercent.Float() * proto.MaxSeverity); + + _alerts.ShowAlert(held.Value, _damageAlert, (short)Math.Clamp(damageLevel, 0, proto.MaxSeverity)); + } + + private void OnDoAfterAttempt(Entity ent, ref DoAfterAttemptEvent args) + { + if (TryGetHeld((ent.Owner, ent.Comp), out _)) + return; + + // Prevent AIs from being uploaded into an unpowered or broken AI core. + + if (TryComp(ent, out var apcPower) && !apcPower.Powered) + { + _popups.PopupEntity(Loc.GetString("station-ai-has-no-power-for-upload"), ent, args.Event.User); + args.Cancel(); + } + else if (TryComp(ent, out var destructible) && destructible.IsBroken) + { + _popups.PopupEntity(Loc.GetString("station-ai-is-too-damaged-for-upload"), ent, args.Event.User); + args.Cancel(); + } + } + + public override void KillHeldAi(Entity ent) + { + base.KillHeldAi(ent); + + if (TryGetHeld((ent.Owner, ent.Comp), out var held) && + _mind.TryGetMind(held.Value, out var mindId, out var mind)) + { + _ghost.OnGhostAttempt(mindId, canReturnGlobal: true, mind: mind); + RemComp(held.Value); + } + + ClearEye(ent); + } + + private void OnRejuvenate(Entity ent, ref RejuvenateEvent args) + { + if (TryGetHeld((ent.Owner, ent.Comp), out var held)) + { + _mobState.ChangeMobState(held.Value, MobState.Alive); + EnsureComp(held.Value); + } + + if (TryComp(ent, out var holder)) + { + _appearance.SetData(ent, StationAiVisuals.Broken, false); + UpdateAppearance((ent, holder)); + } + } + private void OnExpandICChatRecipients(ExpandICChatRecipientsEvent ev) { var xformQuery = GetEntityQuery(); @@ -147,7 +452,7 @@ public sealed class StationAiSystem : SharedStationAiSystem if (!TryGetHeld((stationAiCore, stationAiCore.Comp), out var insertedAi)) continue; - hashSet.Add(insertedAi); + hashSet.Add(insertedAi.Value); } return hashSet; diff --git a/Content.Server/Spawners/EntitySystems/ContainerSpawnPointSystem.cs b/Content.Server/Spawners/EntitySystems/ContainerSpawnPointSystem.cs index 1a592b9929..1763d5f6a1 100644 --- a/Content.Server/Spawners/EntitySystems/ContainerSpawnPointSystem.cs +++ b/Content.Server/Spawners/EntitySystems/ContainerSpawnPointSystem.cs @@ -1,8 +1,7 @@ -using Content.Server.GameTicking; +using Content.Server.GameTicking; using Content.Server.Spawners.Components; using Content.Server.Station.Systems; using Content.Shared.Preferences; -using Content.Shared.Roles; using Robust.Server.Containers; using Robust.Shared.Containers; using Robust.Shared.Prototypes; @@ -87,6 +86,9 @@ public sealed class ContainerSpawnPointSystem : EntitySystem if (!_container.Insert(args.SpawnResult.Value, container, containerXform: xform)) continue; + var ev = new ContainerSpawnEvent(args.SpawnResult.Value); + RaiseLocalEvent(uid, ref ev); + return; } @@ -94,3 +96,9 @@ public sealed class ContainerSpawnPointSystem : EntitySystem args.SpawnResult = null; } } + +/// +/// Raised on a container when a player is spawned into it. +/// +[ByRefEvent] +public record struct ContainerSpawnEvent(EntityUid Player); diff --git a/Content.Shared/Silicons/StationAi/SharedStationAiFixerConsoleSystem.cs b/Content.Shared/Silicons/StationAi/SharedStationAiFixerConsoleSystem.cs new file mode 100644 index 0000000000..1abafd7cb2 --- /dev/null +++ b/Content.Shared/Silicons/StationAi/SharedStationAiFixerConsoleSystem.cs @@ -0,0 +1,411 @@ +using Content.Shared.Administration.Logs; +using Content.Shared.Containers.ItemSlots; +using Content.Shared.Database; +using Content.Shared.Examine; +using Content.Shared.Lock; +using Content.Shared.Mobs; +using Content.Shared.Mobs.Components; +using Content.Shared.Mobs.Systems; +using Content.Shared.Power; +using Robust.Shared.Containers; +using Robust.Shared.Timing; +using System.Diagnostics.CodeAnalysis; + +namespace Content.Shared.Silicons.StationAi; + +/// +/// This system is used to handle the actions of AI Restoration Consoles. +/// These consoles can be used to revive dead station AIs, or destroy them. +/// +public abstract partial class SharedStationAiFixerConsoleSystem : EntitySystem +{ + [Dependency] private readonly SharedUserInterfaceSystem _userInterface = default!; + [Dependency] private readonly ItemSlotsSystem _itemSlots = default!; + [Dependency] private readonly SharedContainerSystem _container = default!; + [Dependency] private readonly MobStateSystem _mobState = default!; + [Dependency] private readonly IGameTiming _timing = default!; + [Dependency] private readonly SharedAppearanceSystem _appearance = default!; + [Dependency] private readonly ISharedAdminLogManager _adminLogger = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnInserted); + SubscribeLocalEvent(OnRemoved); + SubscribeLocalEvent(OnLockToggle); + SubscribeLocalEvent(OnMessage); + SubscribeLocalEvent(OnPowerChanged); + SubscribeLocalEvent(OnExamined); + + SubscribeLocalEvent(OnStationAiCustomizationStateChanged); + } + + private void OnInserted(Entity ent, ref EntInsertedIntoContainerMessage args) + { + if (args.Container.ID != ent.Comp.StationAiHolderSlot) + return; + + if (TryGetTarget(ent, out var target)) + { + ent.Comp.ActionTarget = target; + Dirty(ent); + } + + UpdateAppearance(ent); + } + + private void OnRemoved(Entity ent, ref EntRemovedFromContainerMessage args) + { + if (args.Container.ID != ent.Comp.StationAiHolderSlot) + return; + + ent.Comp.ActionTarget = null; + + StopAction(ent); + } + + private void OnLockToggle(Entity ent, ref LockToggledEvent args) + { + if (_userInterface.TryGetOpenUi(ent.Owner, StationAiFixerConsoleUiKey.Key, out var bui)) + bui.Update(); + } + + private void OnMessage(Entity ent, ref StationAiFixerConsoleMessage args) + { + if (TryComp(ent, out var lockable) && lockable.Locked) + return; + + switch (args.Action) + { + case StationAiFixerConsoleAction.Eject: + EjectStationAiHolder(ent, args.Actor); + break; + case StationAiFixerConsoleAction.Repair: + RepairStationAi(ent, args.Actor); + break; + case StationAiFixerConsoleAction.Purge: + PurgeStationAi(ent, args.Actor); + break; + case StationAiFixerConsoleAction.Cancel: + CancelAction(ent, args.Actor); + break; + } + } + + private void OnPowerChanged(Entity ent, ref PowerChangedEvent args) + { + if (args.Powered) + return; + + StopAction(ent); + } + + private void OnExamined(Entity ent, ref ExaminedEvent args) + { + var message = TryGetStationAiHolder(ent, out var holder) ? + Loc.GetString("station-ai-fixer-console-examination-station-ai-holder-present", ("holder", Name(holder.Value))) : + Loc.GetString("station-ai-fixer-console-examination-station-ai-holder-absent"); + + args.PushMarkup(message); + } + + private void OnStationAiCustomizationStateChanged(Entity ent, ref StationAiCustomizationStateChanged args) + { + if (_container.TryGetOuterContainer(ent, Transform(ent), out var outerContainer) && + TryComp(outerContainer.Owner, out var stationAiFixerConsole)) + { + UpdateAppearance((outerContainer.Owner, stationAiFixerConsole)); + } + } + + private void EjectStationAiHolder(Entity ent, EntityUid user) + { + if (!TryComp(ent, out var slots)) + return; + + if (!_itemSlots.TryGetSlot(ent, ent.Comp.StationAiHolderSlot, out var holderSlot, slots)) + return; + + if (_itemSlots.TryEjectToHands(ent, holderSlot, user, true)) + _adminLogger.Add(LogType.Action, LogImpact.Medium, $"{ToPrettyString(user):user} ejected a station AI holder from AI restoration console ({ToPrettyString(ent.Owner)})"); + } + + private void RepairStationAi(Entity ent, EntityUid user) + { + if (ent.Comp.ActionTarget == null) + return; + + _adminLogger.Add(LogType.Action, LogImpact.Medium, $"{ToPrettyString(user):user} started a repair of {ToPrettyString(ent.Comp.ActionTarget)} using an AI restoration console ({ToPrettyString(ent.Owner)})"); + StartAction(ent, StationAiFixerConsoleAction.Repair); + } + + private void PurgeStationAi(Entity ent, EntityUid user) + { + if (ent.Comp.ActionTarget == null) + return; + + _adminLogger.Add(LogType.Action, LogImpact.High, $"{ToPrettyString(user):user} started a purge of {ToPrettyString(ent.Comp.ActionTarget)} using {ToPrettyString(ent.Owner)}"); + StartAction(ent, StationAiFixerConsoleAction.Purge); + } + + private void CancelAction(Entity ent, EntityUid user) + { + if (!IsActionInProgress(ent)) + return; + + _adminLogger.Add(LogType.Action, LogImpact.Medium, $"{ToPrettyString(user):user} canceled operation involving {ToPrettyString(ent.Comp.ActionTarget)} and {ToPrettyString(ent.Owner)} ({ent.Comp.ActionType} action)"); + StopAction(ent); + } + + /// + /// Initiates an action upon a target entity by the specified console. + /// + /// The console. + /// The action to be enacted on the target. + private void StartAction(Entity ent, StationAiFixerConsoleAction actionType) + { + if (IsActionInProgress(ent)) + { + StopAction(ent); + } + + if (IsTargetValid(ent, actionType)) + { + var duration = actionType == StationAiFixerConsoleAction.Repair ? + ent.Comp.RepairDuration : + ent.Comp.PurgeDuration; + + ent.Comp.ActionType = actionType; + ent.Comp.ActionStartTime = _timing.CurTime; + ent.Comp.ActionEndTime = _timing.CurTime + duration; + ent.Comp.CurrentActionStage = 0; + Dirty(ent); + } + + UpdateAppearance(ent); + } + + /// + /// Updates the current action being conducted by the specified console. + /// + /// The console. + private void UpdateAction(Entity ent) + { + if (IsActionInProgress(ent)) + { + if (ent.Comp.ActionTarget == null) + { + StopAction(ent); + return; + } + + if (_timing.CurTime >= ent.Comp.ActionEndTime) + { + FinalizeAction(ent); + return; + } + + var currentStage = CalculateActionStage(ent); + + if (currentStage != ent.Comp.CurrentActionStage) + { + ent.Comp.CurrentActionStage = currentStage; + Dirty(ent); + } + } + + UpdateAppearance(ent); + } + + /// + /// Terminates any action being conducted by the specified console. + /// + /// The console. + private void StopAction(Entity ent) + { + ent.Comp.ActionType = StationAiFixerConsoleAction.None; + Dirty(ent); + + UpdateAppearance(ent); + } + + /// + /// Finalizes the action being conducted by the specified console + /// (i.e., repairing or purging a target). + /// + /// The console. + protected virtual void FinalizeAction(Entity ent) + { + if (IsActionInProgress(ent) && ent.Comp.ActionTarget != null) + { + if (ent.Comp.ActionType == StationAiFixerConsoleAction.Repair) + { + _mobState.ChangeMobState(ent.Comp.ActionTarget.Value, MobState.Alive); + } + else if (ent.Comp.ActionType == StationAiFixerConsoleAction.Purge && + TryGetStationAiHolder(ent, out var holder)) + { + _container.RemoveEntity(holder.Value, ent.Comp.ActionTarget.Value, force: true); + PredictedQueueDel(ent.Comp.ActionTarget); + + ent.Comp.ActionTarget = null; + Dirty(ent); + } + } + + StopAction(ent); + } + + /// + /// Updates the appearance of the specified console based on its current state. + /// + /// The console. + private void UpdateAppearance(Entity ent) + { + if (!TryComp(ent, out var appearance)) + return; + + if (IsActionInProgress(ent)) + { + var currentStage = ent.Comp.ActionType + ent.Comp.CurrentActionStage.ToString(); + + if (!_appearance.TryGetData(ent, StationAiFixerConsoleVisuals.Key, out string oldStage, appearance) || + oldStage != currentStage) + { + _appearance.SetData(ent, StationAiFixerConsoleVisuals.Key, currentStage, appearance); + } + + return; + } + + var target = ent.Comp.ActionTarget; + var state = StationAiState.Empty; + + if (TryComp(target, out var customization) && !EntityManager.IsQueuedForDeletion(target.Value)) + { + state = customization.State; + } + + _appearance.SetData(ent, StationAiFixerConsoleVisuals.Key, state.ToString(), appearance); + } + + /// + /// Calculates the current stage of any in-progress actions. + /// + /// The console. + /// The current stage. + private int CalculateActionStage(Entity ent) + { + var completionPercentage = (_timing.CurTime - ent.Comp.ActionStartTime) / (ent.Comp.ActionEndTime - ent.Comp.ActionStartTime); + + return (int)(completionPercentage * ent.Comp.ActionStageCount); + } + + /// + /// Try to find a valid target being stored inside the specified console. + /// + /// The console. + /// The found target. + /// True if a valid target was found. + public bool TryGetTarget(Entity ent, [NotNullWhen(true)] out EntityUid? target) + { + target = null; + + if (!TryGetStationAiHolder(ent, out var holder)) + return false; + + if (!_container.TryGetContainer(holder.Value, ent.Comp.StationAiMindSlot, out var stationAiMindSlot) || stationAiMindSlot.Count == 0) + return false; + + var stationAi = stationAiMindSlot.ContainedEntities[0]; + + if (!HasComp(stationAi)) + return false; + + target = stationAi; + + return !EntityManager.IsQueuedForDeletion(target.Value); + } + + /// + /// Try to find a station AI holder being stored inside the specified console. + /// + /// The console. + /// The found holder. + /// True if a valid holder was found. + public bool TryGetStationAiHolder(Entity ent, [NotNullWhen(true)] out EntityUid? holder) + { + holder = null; + + if (!_container.TryGetContainer(ent, ent.Comp.StationAiHolderSlot, out var holderContainer) || + holderContainer.Count == 0) + { + return false; + } + + holder = holderContainer.ContainedEntities[0]; + + return true; + } + + /// + /// Determines if the specified console can act upon its action target. + /// + /// The console. + /// The action to be enacted on the target. + /// True, if the target is valid for the specified console action. + public bool IsTargetValid(Entity ent, StationAiFixerConsoleAction actionType) + { + if (ent.Comp.ActionTarget == null) + return false; + + if (actionType == StationAiFixerConsoleAction.Purge) + return true; + + if (actionType == StationAiFixerConsoleAction.Repair && + _mobState.IsDead(ent.Comp.ActionTarget.Value)) + { + return true; + } + + return false; + } + + /// + /// Returns whether an station AI holder is inserted into the specified console. + /// + /// The console. + /// True if a station AI holder is inserted. + public bool IsStationAiHolderInserted(Entity ent) + { + return TryGetStationAiHolder(ent, out var _); + } + + /// + /// Returns whether the specified console has an action in progress. + /// + /// The console. + /// Ture, if an action is in progress. + public bool IsActionInProgress(Entity ent) + { + return ent.Comp.ActionType != StationAiFixerConsoleAction.None; + } + + public override void Update(float frameTime) + { + base.Update(frameTime); + + var query = AllEntityQuery(); + + while (query.MoveNext(out var uid, out var stationAiFixerConsole)) + { + var ent = (uid, stationAiFixerConsole); + + if (!IsActionInProgress(ent)) + continue; + + UpdateAction(ent); + } + } +} diff --git a/Content.Shared/Silicons/StationAi/SharedStationAiSystem.Customization.cs b/Content.Shared/Silicons/StationAi/SharedStationAiSystem.Customization.cs index 7a5131c9a1..4361b86d12 100644 --- a/Content.Shared/Silicons/StationAi/SharedStationAiSystem.Customization.cs +++ b/Content.Shared/Silicons/StationAi/SharedStationAiSystem.Customization.cs @@ -1,5 +1,9 @@ using Content.Shared.Holopad; +using Content.Shared.Mobs; +using Robust.Shared.Player; using Robust.Shared.Prototypes; +using Robust.Shared.Utility; +using System.Diagnostics.CodeAnalysis; namespace Content.Shared.Silicons.StationAi; @@ -8,9 +12,15 @@ public abstract partial class SharedStationAiSystem private ProtoId _stationAiCoreCustomGroupProtoId = "StationAiCoreIconography"; private ProtoId _stationAiHologramCustomGroupProtoId = "StationAiHolograms"; + private readonly SpriteSpecifier.Rsi _stationAiRebooting = new(new ResPath("Mobs/Silicon/station_ai.rsi"), "ai_fuzz"); + private void InitializeCustomization() { SubscribeLocalEvent(OnStationAiCustomization); + + SubscribeLocalEvent(OnPlayerAttached); + SubscribeLocalEvent(OnPlayerDetached); + SubscribeLocalEvent(OnMobStateChanged); } private void OnStationAiCustomization(Entity entity, ref StationAiCustomizationMessage args) @@ -29,17 +39,53 @@ public abstract partial class SharedStationAiSystem stationAiCustomization.ProtoIds[args.GroupProtoId] = args.CustomizationProtoId; - Dirty(held, stationAiCustomization); + Dirty(held.Value, stationAiCustomization); // Update hologram if (groupPrototype.Category == StationAiCustomizationType.Hologram) - UpdateHolographicAvatar((held, stationAiCustomization)); + UpdateHolographicAvatar((held.Value, stationAiCustomization)); // Update core iconography if (groupPrototype.Category == StationAiCustomizationType.CoreIconography && TryComp(entity, out var stationAiHolder)) UpdateAppearance((entity, stationAiHolder)); } + private void OnPlayerAttached(Entity ent, ref PlayerAttachedEvent args) + { + var state = _mobState.IsDead(ent) ? StationAiState.Dead : StationAiState.Occupied; + SetStationAiState(ent, state); + } + + private void OnPlayerDetached(Entity ent, ref PlayerDetachedEvent args) + { + var state = _mobState.IsDead(ent) ? StationAiState.Dead : StationAiState.Rebooting; + SetStationAiState(ent, state); + } + + protected virtual void OnMobStateChanged(Entity ent, ref MobStateChangedEvent args) + { + var state = (args.NewMobState == MobState.Dead) ? StationAiState.Dead : StationAiState.Rebooting; + SetStationAiState(ent, state); + } + + protected void SetStationAiState(Entity ent, StationAiState state) + { + if (ent.Comp.State != state) + { + ent.Comp.State = state; + Dirty(ent); + + var ev = new StationAiCustomizationStateChanged(state); + RaiseLocalEvent(ent, ref ev); + } + + if (_containers.TryGetContainingContainer(ent.Owner, out var container) && + TryComp(container.Owner, out var holder)) + { + UpdateAppearance((container.Owner, holder)); + } + } + private void UpdateHolographicAvatar(Entity entity) { if (!TryComp(entity, out var avatar)) @@ -62,21 +108,36 @@ public abstract partial class SharedStationAiSystem { var stationAi = GetInsertedAI(entity); - if (stationAi == null) - { - _appearance.RemoveData(entity.Owner, StationAiVisualState.Key); - return; - } - if (!TryComp(stationAi, out var stationAiCustomization) || - !stationAiCustomization.ProtoIds.TryGetValue(_stationAiCoreCustomGroupProtoId, out var protoId) || - !_protoManager.Resolve(protoId, out var prototype) || - !prototype.LayerData.TryGetValue(state.ToString(), out var layerData)) + !TryGetCustomizedAppearanceData((stationAi.Value, stationAiCustomization), out var layerData) || + !layerData.TryGetValue(state.ToString(), out var stateData)) { return; } // This data is handled manually in the client StationAiSystem - _appearance.SetData(entity.Owner, StationAiVisualState.Key, layerData); + _appearance.SetData(entity.Owner, StationAiVisualLayers.Icon, stateData); + } + + /// + /// Returns a dictionary containing the station AI's appearance for different states. + /// + /// The station AI. + /// The apperance data, indexed by possible AI states. + /// True if the apperance data was found. + public bool TryGetCustomizedAppearanceData(Entity entity, [NotNullWhen(true)] out Dictionary? layerData) + { + layerData = null; + + if (!entity.Comp.ProtoIds.TryGetValue(_stationAiCoreCustomGroupProtoId, out var protoId) || + !_protoManager.Resolve(protoId, out var prototype) || + prototype.LayerData.Count == 0) + { + return false; + } + + layerData = prototype.LayerData; + + return true; } } diff --git a/Content.Shared/Silicons/StationAi/SharedStationAiSystem.Held.cs b/Content.Shared/Silicons/StationAi/SharedStationAiSystem.Held.cs index 1c9c57dccf..c82e92b451 100644 --- a/Content.Shared/Silicons/StationAi/SharedStationAiSystem.Held.cs +++ b/Content.Shared/Silicons/StationAi/SharedStationAiSystem.Held.cs @@ -5,6 +5,7 @@ using Content.Shared.Popups; using Content.Shared.Verbs; using Robust.Shared.Serialization; using Robust.Shared.Utility; +using System.Diagnostics.CodeAnalysis; namespace Content.Shared.Silicons.StationAi; @@ -26,6 +27,7 @@ public abstract partial class SharedStationAiSystem SubscribeLocalEvent(OnHeldInteraction); SubscribeLocalEvent(OnHeldRelay); SubscribeLocalEvent(OnCoreJump); + SubscribeLocalEvent(OnTryGetIdentityShortInfo); } @@ -49,20 +51,23 @@ public abstract partial class SharedStationAiSystem if (!TryGetCore(ent.Owner, out var core) || core.Comp?.RemoteEntity == null) return; - _xforms.DropNextTo(core.Comp.RemoteEntity.Value, core.Owner) ; + _xforms.DropNextTo(core.Comp.RemoteEntity.Value, core.Owner); } /// - /// Tries to get the entity held in the AI core using StationAiCore. + /// Tries to find an AI being held in by an entity using . /// - public bool TryGetHeld(Entity entity, out EntityUid held) + /// The station AI holder. + /// The found AI. + /// True if an AI is found. + public bool TryGetHeld(Entity entity, [NotNullWhen(true)] out EntityUid? held) { held = EntityUid.Invalid; if (!Resolve(entity.Owner, ref entity.Comp)) return false; - if (!_containers.TryGetContainer(entity.Owner, StationAiCoreComponent.Container, out var container) || + if (!_containers.TryGetContainer(entity.Owner, StationAiHolderComponent.Container, out var container) || container.ContainedEntities.Count == 0) return false; @@ -70,26 +75,32 @@ public abstract partial class SharedStationAiSystem return true; } - /// - /// Tries to get the entity held in the AI using StationAiHolder. - /// - public bool TryGetHeld(Entity entity, out EntityUid held) - { - TryComp(entity.Owner, out var stationAiCore); - return TryGetHeld((entity.Owner, stationAiCore), out held); + /// + /// Tries to find an AI being held in by an entity using . + /// + /// The station AI core. + /// The found AI. + /// True if an AI is found. + public bool TryGetHeld(Entity entity, [NotNullWhen(true)] out EntityUid? held) + { + held = null; + + return TryComp(entity.Owner, out var holder) && + TryGetHeld((entity, holder), out held); } + /// + /// Tries to find the station AI core holding an AI. + /// + /// The AI. + /// The found AI core. + /// True if an AI core is found. public bool TryGetCore(EntityUid entity, out Entity core) { - var xform = Transform(entity); - var meta = MetaData(entity); - var ent = new Entity(entity, xform, meta); - - if (!_containers.TryGetContainingContainer(ent, out var container) || + if (!_containers.TryGetContainingContainer(entity, out var container) || container.ID != StationAiCoreComponent.Container || - !TryComp(container.Owner, out StationAiCoreComponent? coreComp) || - coreComp.RemoteEntity == null) + !TryComp(container.Owner, out StationAiCoreComponent? coreComp)) { core = (EntityUid.Invalid, null); return false; diff --git a/Content.Shared/Silicons/StationAi/SharedStationAiSystem.cs b/Content.Shared/Silicons/StationAi/SharedStationAiSystem.cs index 1a3d4c788e..e109c23fe6 100644 --- a/Content.Shared/Silicons/StationAi/SharedStationAiSystem.cs +++ b/Content.Shared/Silicons/StationAi/SharedStationAiSystem.cs @@ -4,6 +4,7 @@ using Content.Shared.Administration.Managers; using Content.Shared.Chat.Prototypes; using Content.Shared.Containers.ItemSlots; using Content.Shared.Database; +using Content.Shared.Destructible; using Content.Shared.Doors.Systems; using Content.Shared.DoAfter; using Content.Shared.Electrocution; @@ -11,11 +12,14 @@ using Content.Shared.Intellicard; using Content.Shared.Interaction; using Content.Shared.Item.ItemToggle; using Content.Shared.Mind; +using Content.Shared.Mobs; +using Content.Shared.Mobs.Systems; using Content.Shared.Movement.Components; using Content.Shared.Movement.Systems; using Content.Shared.Popups; using Content.Shared.Power; using Content.Shared.Power.EntitySystems; +using Content.Shared.Repairable; using Content.Shared.StationAi; using Content.Shared.Verbs; using Robust.Shared.Audio.Systems; @@ -28,36 +32,36 @@ using Robust.Shared.Prototypes; using Robust.Shared.Serialization; using Robust.Shared.Timing; using Robust.Shared.Utility; -using System.Diagnostics.CodeAnalysis; namespace Content.Shared.Silicons.StationAi; public abstract partial class SharedStationAiSystem : EntitySystem { - [Dependency] private readonly ISharedAdminManager _admin = default!; - [Dependency] private readonly IGameTiming _timing = default!; - [Dependency] private readonly INetManager _net = default!; - [Dependency] private readonly ItemSlotsSystem _slots = default!; - [Dependency] private readonly ItemToggleSystem _toggles = default!; - [Dependency] private readonly ActionBlockerSystem _blocker = default!; - [Dependency] private readonly MetaDataSystem _metadata = default!; - [Dependency] private readonly SharedAirlockSystem _airlocks = default!; - [Dependency] private readonly SharedAppearanceSystem _appearance = default!; - [Dependency] private readonly SharedAudioSystem _audio = default!; - [Dependency] private readonly SharedContainerSystem _containers = default!; - [Dependency] private readonly SharedDoorSystem _doors = default!; - [Dependency] private readonly SharedDoAfterSystem _doAfter = default!; - [Dependency] private readonly SharedElectrocutionSystem _electrify = default!; - [Dependency] private readonly SharedEyeSystem _eye = default!; + [Dependency] private readonly ISharedAdminManager _admin = default!; + [Dependency] private readonly IGameTiming _timing = default!; + [Dependency] private readonly INetManager _net = default!; + [Dependency] private readonly ItemSlotsSystem _slots = default!; + [Dependency] private readonly ItemToggleSystem _toggles = default!; + [Dependency] private readonly ActionBlockerSystem _blocker = default!; + [Dependency] private readonly MetaDataSystem _metadata = default!; + [Dependency] private readonly SharedAirlockSystem _airlocks = default!; + [Dependency] private readonly SharedAppearanceSystem _appearance = default!; + [Dependency] private readonly SharedAudioSystem _audio = default!; + [Dependency] private readonly SharedContainerSystem _containers = default!; + [Dependency] private readonly SharedDoorSystem _doors = default!; + [Dependency] private readonly SharedDoAfterSystem _doAfter = default!; + [Dependency] private readonly SharedElectrocutionSystem _electrify = default!; + [Dependency] private readonly SharedEyeSystem _eye = default!; [Dependency] protected readonly SharedMapSystem Maps = default!; - [Dependency] private readonly SharedMindSystem _mind = default!; - [Dependency] private readonly SharedMoverController _mover = default!; - [Dependency] private readonly SharedPopupSystem _popup = default!; - [Dependency] private readonly SharedPowerReceiverSystem PowerReceiver = default!; - [Dependency] private readonly SharedTransformSystem _xforms = default!; - [Dependency] private readonly SharedUserInterfaceSystem _uiSystem = default!; - [Dependency] private readonly StationAiVisionSystem _vision = default!; - [Dependency] private readonly IPrototypeManager _protoManager = default!; + [Dependency] private readonly SharedMindSystem _mind = default!; + [Dependency] private readonly SharedMoverController _mover = default!; + [Dependency] private readonly SharedPopupSystem _popup = default!; + [Dependency] private readonly SharedPowerReceiverSystem PowerReceiver = default!; + [Dependency] private readonly SharedTransformSystem _xforms = default!; + [Dependency] private readonly SharedUserInterfaceSystem _uiSystem = default!; + [Dependency] private readonly StationAiVisionSystem _vision = default!; + [Dependency] private readonly IPrototypeManager _protoManager = default!; + [Dependency] private readonly MobStateSystem _mobState = default!; // StationAiHeld is added to anything inside of an AI core. // StationAiHolder indicates it can hold an AI positronic brain (e.g. holocard / core). @@ -72,8 +76,6 @@ public abstract partial class SharedStationAiSystem : EntitySystem private static readonly EntProtoId DefaultAi = "StationAiBrain"; private readonly ProtoId _downloadChatNotificationPrototype = "IntellicardDownload"; - private const float MaxVisionMultiplier = 5f; - public override void Initialize() { base.Initialize(); @@ -102,10 +104,12 @@ public abstract partial class SharedStationAiSystem : EntitySystem SubscribeLocalEvent(OnAiInsert); SubscribeLocalEvent(OnAiRemove); - SubscribeLocalEvent(OnAiMapInit); SubscribeLocalEvent(OnAiShutdown); SubscribeLocalEvent(OnCorePower); SubscribeLocalEvent>(OnCoreVerbs); + + SubscribeLocalEvent(OnBroken); + SubscribeLocalEvent(OnRepaired); } private void OnCoreVerbs(Entity ent, ref GetVerbsEvent args) @@ -137,7 +141,7 @@ public abstract partial class SharedStationAiSystem : EntitySystem args.Verbs.Add(new Verb() { Text = Loc.GetString("station-ai-customization-menu"), - Act = () => _uiSystem.TryOpenUi(ent.Owner, StationAiCustomizationUiKey.Key, insertedAi), + Act = () => _uiSystem.TryOpenUi(ent.Owner, StationAiCustomizationUiKey.Key, insertedAi.Value), Icon = new SpriteSpecifier.Texture(new("/Textures/Interface/emotes.svg.192dpi.png")), }); } @@ -271,8 +275,8 @@ public abstract partial class SharedStationAiSystem : EntitySystem if (!TryComp(args.Used, out IntellicardComponent? intelliComp)) return; - var cardHasAi = _slots.CanEject(ent.Owner, args.User, ent.Comp.Slot); - var coreHasAi = _slots.CanEject(args.Target.Value, args.User, targetHolder.Slot); + var cardHasAi = ent.Comp.Slot.Item != null; + var coreHasAi = targetHolder.Slot.Item != null; if (cardHasAi && coreHasAi) { @@ -290,7 +294,7 @@ public abstract partial class SharedStationAiSystem : EntitySystem if (TryGetHeld((args.Target.Value, targetHolder), out var held)) { var ev = new ChatNotificationEvent(_downloadChatNotificationPrototype, args.Used, args.User); - RaiseLocalEvent(held, ref ev); + RaiseLocalEvent(held.Value, ref ev); } var doAfterArgs = new DoAfterArgs(EntityManager, args.User, cardHasAi ? intelliComp.UploadTime : intelliComp.DownloadTime, new IntellicardDoAfterEvent(), args.Target, ent.Owner) @@ -298,7 +302,8 @@ public abstract partial class SharedStationAiSystem : EntitySystem BreakOnDamage = true, BreakOnMove = true, NeedHand = true, - BreakOnDropItem = true + BreakOnDropItem = true, + AttemptFrequency = AttemptFrequency.EveryTick, }; _doAfter.TryStartDoAfter(doAfterArgs); @@ -327,7 +332,7 @@ public abstract partial class SharedStationAiSystem : EntitySystem private void OnHolderMapInit(Entity ent, ref MapInitEvent args) { - UpdateAppearance(ent.Owner); + UpdateAppearance((ent.Owner, ent.Comp)); } private void OnAiShutdown(Entity ent, ref ComponentShutdown args) @@ -342,24 +347,32 @@ public abstract partial class SharedStationAiSystem : EntitySystem private void OnCorePower(Entity ent, ref PowerChangedEvent args) { - // TODO: I think in 13 they just straightup die so maybe implement that - if (args.Powered) + if (!args.Powered) { - if (!SetupEye(ent)) - return; - - AttachEye(ent); - } - else - { - ClearEye(ent); + KillHeldAi(ent); } } - private void OnAiMapInit(Entity ent, ref MapInitEvent args) + private void OnBroken(Entity ent, ref BreakageEventArgs args) { - SetupEye(ent); - AttachEye(ent); + KillHeldAi(ent); + + if (TryComp(ent, out var appearance)) + _appearance.SetData(ent, StationAiVisuals.Broken, true, appearance); + } + + private void OnRepaired(Entity ent, ref RepairedEvent args) + { + if (TryComp(ent, out var appearance)) + _appearance.SetData(ent, StationAiVisuals.Broken, false, appearance); + } + + public virtual void KillHeldAi(Entity ent) + { + if (TryGetHeld((ent.Owner, ent.Comp), out var held)) + { + _mobState.ChangeMobState(held.Value, MobState.Dead); + } } public void SwitchRemoteEntityMode(Entity entity, bool isRemote) @@ -395,7 +408,7 @@ public abstract partial class SharedStationAiSystem : EntitySystem _eye.SetDrawFov(user.Value, !isRemote); } - private bool SetupEye(Entity ent, EntityCoordinates? coords = null) + protected bool SetupEye(Entity ent, EntityCoordinates? coords = null) { if (_net.IsClient) return false; @@ -420,7 +433,7 @@ public abstract partial class SharedStationAiSystem : EntitySystem return true; } - private void ClearEye(Entity ent) + protected void ClearEye(Entity ent) { if (_net.IsClient) return; @@ -428,9 +441,16 @@ public abstract partial class SharedStationAiSystem : EntitySystem QueueDel(ent.Comp.RemoteEntity); ent.Comp.RemoteEntity = null; Dirty(ent); + + if (TryGetHeld((ent, ent.Comp), out var held) && + TryComp(held, out EyeComponent? eyeComp)) + { + _eye.SetDrawFov(held.Value, true, eyeComp); + _eye.SetTarget(held.Value, null, eyeComp); + } } - private void AttachEye(Entity ent) + protected void AttachEye(Entity ent) { if (ent.Comp.RemoteEntity == null) return; @@ -467,7 +487,7 @@ public abstract partial class SharedStationAiSystem : EntitySystem return container.ContainedEntities[0]; } - private void OnAiInsert(Entity ent, ref EntInsertedIntoContainerMessage args) + protected virtual void OnAiInsert(Entity ent, ref EntInsertedIntoContainerMessage args) { if (args.Container.ID != StationAiCoreComponent.Container) return; @@ -475,17 +495,21 @@ public abstract partial class SharedStationAiSystem : EntitySystem if (_timing.ApplyingState) return; + ClearEye(ent); ent.Comp.Remote = true; - SetupEye(ent); // Just so text and the likes works properly _metadata.SetEntityName(ent.Owner, MetaData(args.Entity).EntityName); - AttachEye(ent); + if (SetupEye(ent)) + AttachEye(ent); } - private void OnAiRemove(Entity ent, ref EntRemovedFromContainerMessage args) + protected virtual void OnAiRemove(Entity ent, ref EntRemovedFromContainerMessage args) { + if (args.Container.ID != StationAiCoreComponent.Container) + return; + if (_timing.ApplyingState) return; @@ -506,26 +530,49 @@ public abstract partial class SharedStationAiSystem : EntitySystem ClearEye(ent); } - private void UpdateAppearance(Entity entity) + protected void UpdateAppearance(Entity entity) { if (!Resolve(entity.Owner, ref entity.Comp, false)) return; - // Todo: when AIs can die, add a check to see if the AI is in the 'dead' state var state = StationAiState.Empty; - if (_containers.TryGetContainer(entity.Owner, StationAiHolderComponent.Container, out var container) && container.Count > 0) - state = StationAiState.Occupied; - - // If the entity is a station AI core, attempt to customize its appearance - if (TryComp(entity, out var stationAiCore)) + // Get what visual state the held AI holder is in + if (TryGetHeld(entity, out var stationAi) && + TryComp(stationAi, out var customization)) { - CustomizeAppearance((entity, stationAiCore), state); + state = customization.State; + } + + // If the entity is not an AI core, let generic visualizers handle the appearance update + if (!TryComp(entity, out var stationAiCore)) + { + _appearance.SetData(entity.Owner, StationAiVisualLayers.Icon, state); return; } - // Otherwise let generic visualizers handle the appearance update - _appearance.SetData(entity.Owner, StationAiVisualState.Key, state); + // The AI core is empty + if (state == StationAiState.Empty) + { + _appearance.RemoveData(entity.Owner, StationAiVisualLayers.Icon); + return; + } + + // The AI core is rebooting + if (state == StationAiState.Rebooting) + { + var rebootingData = new PrototypeLayerData() + { + RsiPath = _stationAiRebooting.RsiPath.ToString(), + State = _stationAiRebooting.RsiState, + }; + + _appearance.SetData(entity.Owner, StationAiVisualLayers.Icon, rebootingData); + return; + } + + // Otherwise attempt to set the AI core's appearance + CustomizeAppearance((entity, stationAiCore), state); } public virtual bool SetVisionEnabled(Entity entity, bool enabled, bool announce = false) @@ -573,15 +620,16 @@ public sealed partial class JumpToCoreEvent : InstantActionEvent public sealed partial class IntellicardDoAfterEvent : SimpleDoAfterEvent; [Serializable, NetSerializable] -public enum StationAiVisualState : byte +public enum StationAiVisualLayers : byte { - Key, + Base, + Icon, } [Serializable, NetSerializable] -public enum StationAiSpriteState : byte +public enum StationAiVisuals : byte { - Key, + Broken, } [Serializable, NetSerializable] @@ -590,5 +638,6 @@ public enum StationAiState : byte Empty, Occupied, Dead, + Rebooting, Hologram, } diff --git a/Content.Shared/Silicons/StationAi/StationAiCoreComponent.cs b/Content.Shared/Silicons/StationAi/StationAiCoreComponent.cs index a795c9eda6..ec3f308104 100644 --- a/Content.Shared/Silicons/StationAi/StationAiCoreComponent.cs +++ b/Content.Shared/Silicons/StationAi/StationAiCoreComponent.cs @@ -38,11 +38,19 @@ public sealed partial class StationAiCoreComponent : Component [DataField(readOnly: true)] public EntProtoId? PhysicalEntityProto = "StationAiHoloLocal"; + /// + /// Name of the container slot that holds the inhabiting AI's mind + /// public const string Container = "station_ai_mind_slot"; + + /// + /// Name of the container slot that holds the 'brain' used to construct the AI core + /// + public const string BrainContainer = "station_ai_brain_slot"; } /// -/// This event is raised on a station AI 'eye' that is being replaced with a new one +/// This event is raised on a station AI 'eye' that is being replaced with a new one /// /// The entity UID of the replacement entity [ByRefEvent] diff --git a/Content.Shared/Silicons/StationAi/StationAiCustomizationComponent.cs b/Content.Shared/Silicons/StationAi/StationAiCustomizationComponent.cs index a2b713edfe..520b7f98c5 100644 --- a/Content.Shared/Silicons/StationAi/StationAiCustomizationComponent.cs +++ b/Content.Shared/Silicons/StationAi/StationAiCustomizationComponent.cs @@ -15,6 +15,12 @@ public sealed partial class StationAiCustomizationComponent : Component /// [DataField, AutoNetworkedField] public Dictionary, ProtoId> ProtoIds = new(); + + /// + /// The current visual state of the associated entity. + /// + [DataField, AutoNetworkedField] + public StationAiState State = StationAiState.Occupied; } /// @@ -33,6 +39,12 @@ public sealed class StationAiCustomizationMessage : BoundUserInterfaceMessage } } +/// +/// Event raised when the station AI customization visual state changes +/// +[ByRefEvent] +public record StationAiCustomizationStateChanged(StationAiState NewState); + /// /// Key for opening the station AI customization UI /// diff --git a/Content.Shared/Silicons/StationAi/StationAiFixerConsoleComponent.cs b/Content.Shared/Silicons/StationAi/StationAiFixerConsoleComponent.cs new file mode 100644 index 0000000000..0b872b1b05 --- /dev/null +++ b/Content.Shared/Silicons/StationAi/StationAiFixerConsoleComponent.cs @@ -0,0 +1,144 @@ +using Robust.Shared.Audio; +using Robust.Shared.GameStates; +using Robust.Shared.Serialization; + +namespace Content.Shared.Silicons.StationAi; + +/// +/// This component holds data needed for AI Restoration Consoles to function. +/// +[RegisterComponent, NetworkedComponent, AutoGenerateComponentState, AutoGenerateComponentPause] +[Access(typeof(SharedStationAiFixerConsoleSystem))] +public sealed partial class StationAiFixerConsoleComponent : Component +{ + /// + /// Determines how long a repair takes to complete (in seconds). + /// + [DataField] + public TimeSpan RepairDuration = TimeSpan.FromSeconds(30); + + /// + /// Determines how long a purge takes to complete (in seconds). + /// + [DataField] + public TimeSpan PurgeDuration = TimeSpan.FromSeconds(30); + + /// + /// The number of stages that a console action (repair or purge) + /// progresses through before it concludes. Each stage has an equal + /// duration. The appearance data of the entity is updated with + /// each new stage reached. + /// + [DataField] + public int ActionStageCount = 4; + + /// + /// The time at which the current action commenced. + /// + [DataField, AutoNetworkedField, AutoPausedField] + public TimeSpan ActionStartTime = TimeSpan.FromSeconds(0); + + /// + /// The time at which the current action will end. + /// + [DataField, AutoNetworkedField, AutoPausedField] + public TimeSpan ActionEndTime = TimeSpan.FromSeconds(0); + + /// + /// The type of action that is currently in progress. + /// + [DataField, AutoNetworkedField] + public StationAiFixerConsoleAction ActionType = StationAiFixerConsoleAction.None; + + /// + /// The target of the current action. + /// + [DataField, AutoNetworkedField] + public EntityUid? ActionTarget; + + /// + /// The current stage of the action in progress. + /// + [DataField, AutoNetworkedField] + public int CurrentActionStage; + + /// + /// Sound clip that is played when a repair is completed. + /// + [DataField] + public SoundSpecifier? RepairFinishedSound = new SoundPathSpecifier("/Audio/Items/beep.ogg"); + + /// + /// Sound clip that is played when a repair is completed. + /// + [DataField] + public SoundSpecifier? PurgeFinishedSound = new SoundPathSpecifier("/Audio/Machines/beep.ogg"); + + /// + /// The name of the console slot which is used to contain station AI holders. + /// + [DataField] + public string StationAiHolderSlot = "station_ai_holder"; + + /// + /// The name of the station AI holder slot which actually contains the station AI. + /// + [DataField] + public string StationAiMindSlot = "station_ai_mind_slot"; +} + +/// +/// Message sent from the server to the client to update the UI of AI Restoration Consoles. +/// +[Serializable, NetSerializable] +public sealed class StationAiFixerConsoleBoundUserInterfaceState : BoundUserInterfaceState; + +/// +/// Message sent from the client to the server to handle player UI inputs from AI Restoration Consoles. +/// +[Serializable, NetSerializable] +public sealed class StationAiFixerConsoleMessage : BoundUserInterfaceMessage +{ + public StationAiFixerConsoleAction Action; + + public StationAiFixerConsoleMessage(StationAiFixerConsoleAction action) + { + Action = action; + } +} + +/// +/// Potential actions that AI Restoration Consoles can perform. +/// +[Serializable, NetSerializable] +public enum StationAiFixerConsoleAction +{ + None, + Eject, + Repair, + Purge, + Cancel, +} + +/// +/// Appearance keys for AI Restoration Consoles. +/// +[Serializable, NetSerializable] +public enum StationAiFixerConsoleVisuals : byte +{ + Key, + ActionProgress, + MobState, + RepairProgress, + PurgeProgress, +} + +/// +/// Interactable UI key for AI Restoration Consoles. +/// +[Serializable, NetSerializable] +public enum StationAiFixerConsoleUiKey +{ + Key, +} + diff --git a/Resources/Locale/en-US/generic.ftl b/Resources/Locale/en-US/generic.ftl index cdca0f2493..c963f0e0fb 100644 --- a/Resources/Locale/en-US/generic.ftl +++ b/Resources/Locale/en-US/generic.ftl @@ -14,6 +14,7 @@ generic-invalid = invalid generic-hours = hours generic-minutes = minutes +generic-seconds = seconds generic-playtime-title = Playtime diff --git a/Resources/Locale/en-US/recipes/components.ftl b/Resources/Locale/en-US/recipes/components.ftl index 236097532c..d67c661ecd 100644 --- a/Resources/Locale/en-US/recipes/components.ftl +++ b/Resources/Locale/en-US/recipes/components.ftl @@ -5,3 +5,4 @@ construction-graph-component-second-flash = second flash construction-graph-component-power-cell = power cell construction-graph-component-apc-electronics = APC electronics construction-graph-component-payload-trigger = trigger +construction-graph-component-borg-brain = MMI or positronic brain diff --git a/Resources/Locale/en-US/recipes/tags.ftl b/Resources/Locale/en-US/recipes/tags.ftl index 34eadc37d8..96c0729881 100644 --- a/Resources/Locale/en-US/recipes/tags.ftl +++ b/Resources/Locale/en-US/recipes/tags.ftl @@ -103,6 +103,7 @@ construction-graph-tag-ripley-peripherals-control-module = ripley peripherals co construction-graph-tag-door-electronics-circuit-board = door electronics circuit board construction-graph-tag-firelock-electronics-circuit-board = firelock electronics circuit board construction-graph-tag-conveyor-belt-assembly = conveyor belt assembly +construction-graph-tag-station-ai-core-electronics = station AI core electronics # tools construction-graph-tag-multitool = a multitool diff --git a/Resources/Locale/en-US/silicons/station-ai-fixer-console.ftl b/Resources/Locale/en-US/silicons/station-ai-fixer-console.ftl new file mode 100644 index 0000000000..a6940f2306 --- /dev/null +++ b/Resources/Locale/en-US/silicons/station-ai-fixer-console.ftl @@ -0,0 +1,37 @@ +# System +station-ai-fixer-console-is-locked = The console is locked. +station-ai-fixer-console-station-ai-holder-required = Only AI storage units can be inserted into the console. +station-ai-fixer-console-examination-station-ai-holder-present = There is {INDEFINITE($holder)} [color=cyan]{$holder}[/color] inserted in the console. +station-ai-fixer-console-examination-station-ai-holder-absent = There is an unoccupied slot for an [color=cyan]AI storage unit[/color]. +station-ai-fixer-console-repair-finished = Repair complete. Attempting to reboot AI... +station-ai-fixer-console-repair-successful = Repair complete. AI successfully rebooted. +station-ai-fixer-console-purge-successful = Purge complete. AI successfully deleted. + +# UI +station-ai-fixer-console-window = AI restoration console +station-ai-fixer-console-window-no-station-ai = No AI detected +station-ai-fixer-console-window-no-station-ai-status = Waiting +station-ai-fixer-console-window-station-ai-online = Online +station-ai-fixer-console-window-station-ai-offline = Offline +station-ai-fixer-console-window-station-ai-rebooting = Rebooting... + +station-ai-fixer-console-window-controls-locked = Controls locked + +station-ai-fixer-console-window-station-ai-eject = Eject storage unit +station-ai-fixer-console-window-station-ai-repair = Run repair tool +station-ai-fixer-console-window-station-ai-purge = Initiate AI purge + +station-ai-fixer-console-window-action-progress-repair = Repair in progress... +station-ai-fixer-console-window-action-progress-purge = Purge in progress... +station-ai-fixer-console-window-action-progress-eta = Time remaining: {$time} {$units} + +station-ai-fixer-console-window-flavor-left = Lock this console when it is not in use +station-ai-fixer-console-window-flavor-right = v4.0.4 + +station-ai-fixer-console-window-continue-action = Continue +station-ai-fixer-console-window-cancel-action = Cancel + +station-ai-fixer-console-window-purge-warning-title = Initiating AI purge +station-ai-fixer-console-window-purge-warning-1 = You are about to permanently delete an artifical intelligence. +station-ai-fixer-console-window-purge-warning-2 = Once this operation is complete, the intelligence will be gone and cannot be revived. +station-ai-fixer-console-window-purge-warning-3 = Do you wish to proceed? \ No newline at end of file diff --git a/Resources/Locale/en-US/silicons/station-ai.ftl b/Resources/Locale/en-US/silicons/station-ai.ftl index 442782f9a1..11c51ddea4 100644 --- a/Resources/Locale/en-US/silicons/station-ai.ftl +++ b/Resources/Locale/en-US/silicons/station-ai.ftl @@ -4,6 +4,10 @@ wire-name-ai-vision-light = AIV wire-name-ai-act-light = AIA station-ai-takeover = AI takeover station-ai-eye-name = AI eye - {$name} +station-ai-has-no-power-for-upload = Upload failed - the AI core is unpowered. +station-ai-is-too-damaged-for-upload = Upload failed - the AI core must be repaired. +station-ai-core-losing-power = Your AI core is now running on reserve battery power. +station-ai-core-critical-power = Your AI core is critically low on power. External power must be re-established or severe data corruption may occur! # Radial actions ai-open = Open actions diff --git a/Resources/Prototypes/Catalog/Cargo/cargo_science.yml b/Resources/Prototypes/Catalog/Cargo/cargo_science.yml index aa428b7d55..cefcca5fab 100644 --- a/Resources/Prototypes/Catalog/Cargo/cargo_science.yml +++ b/Resources/Prototypes/Catalog/Cargo/cargo_science.yml @@ -47,3 +47,13 @@ cost: 2000 category: cargoproduct-category-name-science group: market + +- type: cargoProduct + id: StationAiCore + icon: + sprite: Mobs/Silicon/station_ai.rsi + state: frame_4 + product: CrateStationAiCore + cost: 10000 + category: cargoproduct-category-name-science + group: market \ No newline at end of file diff --git a/Resources/Prototypes/Catalog/Fills/Crates/science.yml b/Resources/Prototypes/Catalog/Fills/Crates/science.yml index 6adf5942a4..4ed07d607f 100644 --- a/Resources/Prototypes/Catalog/Fills/Crates/science.yml +++ b/Resources/Prototypes/Catalog/Fills/Crates/science.yml @@ -24,3 +24,19 @@ - id: CrewMonitoringServerFlatpack - id: CrewMonitoringComputerFlatpack amount: 3 + +- type: entity + id: CrateStationAiCore + parent: CrateScienceSecure + name: station AI core crate + description: Contains the components for constructing a station AI core. Positronic brain not included. Requires Science access to open. + components: + - type: StorageFill + contents: + - id: StationAiCoreElectronics + - id: SheetPlasteel1 + amount: 4 + - id: CableApcStack1 + amount: 1 + - id: SheetRGlass1 + amount: 2 \ No newline at end of file diff --git a/Resources/Prototypes/Catalog/Fills/Lockers/heads.yml b/Resources/Prototypes/Catalog/Fills/Lockers/heads.yml index 6b1efddad1..ae904f7f95 100644 --- a/Resources/Prototypes/Catalog/Fills/Lockers/heads.yml +++ b/Resources/Prototypes/Catalog/Fills/Lockers/heads.yml @@ -282,6 +282,7 @@ - id: ProtolatheMachineCircuitboard - id: ResearchComputerCircuitboard - id: CargoRequestScienceComputerCircuitboard + - id: StationAiFixerCircuitboard - id: RubberStampRd # Hardsuit table, used for suit storage as well diff --git a/Resources/Prototypes/Chat/notifications.yml b/Resources/Prototypes/Chat/notifications.yml index c1aee755c6..cea67fa0ee 100644 --- a/Resources/Prototypes/Chat/notifications.yml +++ b/Resources/Prototypes/Chat/notifications.yml @@ -19,3 +19,17 @@ color: Pink nextDelay: 12 notifyBySource: true + +- type: chatNotification + id: AiLosingPower + message: station-ai-core-losing-power + sound: /Audio/Misc/notice2.ogg + color: Orange + nextDelay: 30 + +- type: chatNotification + id: AiCriticalPower + message: station-ai-core-critical-power + sound: /Audio/Effects/alert.ogg + color: Red + nextDelay: 120 \ No newline at end of file diff --git a/Resources/Prototypes/Entities/Mobs/Player/silicon.yml b/Resources/Prototypes/Entities/Mobs/Player/silicon.yml index e18100ab8a..845971be35 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/silicon.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/silicon.yml @@ -144,10 +144,12 @@ - type: Appearance - type: GenericVisualizer visuals: - enum.StationAiVisualState.Key: + enum.StationAiVisualLayers.Icon: unshaded: Empty: { state: empty } Occupied: { state: full } + Rebooting: { state: dead } + Dead: { state: dead } - type: Intellicard - type: entity @@ -161,6 +163,7 @@ - state: ai shader: unshaded +# Empty AI core - type: entity id: PlayerStationAiEmpty name: AI Core @@ -178,23 +181,69 @@ blacklist: tags: - GhostOnlyWarp + - type: Fixtures + fixtures: + fix1: + shape: + !type:PhysShapeAabb + bounds: "-0.5,-0.5,0.5,0.5" + mask: + - MachineMask + layer: + - MachineLayer + density: 200 - type: ContainerComp proto: AiHeld container: station_ai_mind_slot + - type: Damageable + damageModifierSet: StrongMetallic + - type: Repairable + doAfterDelay: 10 + allowSelfRepair: false - type: Destructible thresholds: - trigger: !type:DamageTrigger - damage: 100 + damage: 400 behaviors: - !type:PlaySoundBehavior sound: collection: MetalBreak - !type:DoActsBehavior - acts: [ "Destruction" ] + acts: [ "Breakage" ] + - trigger: + !type:DamageTrigger + damage: 800 + behaviors: + - !type:PlaySoundBehavior + sound: + collection: MetalBreak + - !type:SpawnEntitiesBehavior + spawn: + ShardGlassReinforced: + min: 1 + max: 2 + SheetPlasteel: + min: 2 + max: 2 + - !type:DoActsBehavior + acts: ["Destruction"] + - type: DamageVisuals + thresholds: [25, 50, 75, 100, 125, 150, 175] + damageDivisor: 4 + trackAllDamage: true + damageOverlay: + sprite: Mobs/Silicon/station_ai_cracks.rsi - type: ApcPowerReceiver - powerLoad: 1000 - needsPower: false + powerLoad: 500 + - type: ExtensionCableReceiver + - type: Battery + maxCharge: 300000 + startingCharge: 300000 + - type: ApcPowerReceiverBattery + idleLoad: 500 + batteryRechargeRate: 1000 + batteryRechargeEfficiency: 0 # Setting to zero until the light flickering issue associated with dynamic power loads is fixed - type: StationAiCore - type: StationAiVision - type: InteractionOutline @@ -204,12 +253,26 @@ layers: - state: base - state: ai_empty + map: ["enum.StationAiVisualLayers.Base"] shader: unshaded - state: ai - map: ["enum.StationAiVisualState.Key"] + map: ["enum.StationAiVisualLayers.Icon"] shader: unshaded visible: false + - state: ai_unpowered + map: ["enum.PowerDeviceVisualLayers.Powered"] + visible: false - type: Appearance + - type: GenericVisualizer + visuals: + enum.PowerDeviceVisuals.Powered: + enum.PowerDeviceVisualLayers.Powered: + False: { visible: true } + True: { visible: false } + enum.StationAiVisuals.Broken: + enum.StationAiVisualLayers.Base: + False: { state: ai_empty } + True: { state: ai_error } - type: InteractionPopup interactSuccessString: petting-success-station-ai interactFailureString: petting-failure-station-ai @@ -234,7 +297,22 @@ type: HolopadBoundUserInterface enum.StationAiCustomizationUiKey.Key: type: StationAiCustomizationBoundUserInterface - + - type: Construction + graph: StationAiCore + node: stationAiCore + - type: ContainerContainer + containers: + board: !type:Container + station_ai_brain_slot: !type:Container + station_ai_mind_slot: !type:ContainerSlot + showEnts: true + - type: ContainerFill + containers: + board: + - StationAiCoreElectronics + - type: StaticPrice + price: 5000 + # The job-ready version of an AI spawn. - type: entity id: PlayerStationAi @@ -245,6 +323,77 @@ containerId: station_ai_mind_slot job: StationAi +# The station AI core assembly +- type: entity + parent: BaseStructure + id: PlayerStationAiAssembly + name: AI Core Assembly + description: An unfinished computer core for housing an artifical intelligence. + components: + - type: Anchorable + flags: + - Anchorable + - type: Rotatable + - type: Sprite + snapCardinals: true + sprite: Mobs/Silicon/station_ai.rsi + layers: + - state: frame_0 + map: [ "enum.ConstructionVisuals.Layer" ] + - type: Appearance + - type: GenericVisualizer + visuals: + enum.ConstructionVisuals.Key: + enum.ConstructionVisuals.Layer: + frame: { state: frame_0 } + frameWithElectronics: { state: frame_1 } + frameWithSecuredElectronics: { state: frame_2 } + frameWithWires: { state: frame_3 } + frameWithBrain: { state: frame_3b } + frameWithBrainFinished: { state: frame_4 } + frameWithoutBrainFinished: { state: frame_4 } + - type: InteractionOutline + - type: Fixtures + fixtures: + fix1: + shape: + !type:PhysShapeAabb + bounds: "-0.5,-0.5,0.5,0.5" + mask: + - MachineMask + layer: + - MachineLayer + density: 200 + - type: Damageable + damageModifierSet: StrongMetallic + - type: Destructible + thresholds: + - trigger: + !type:DamageTrigger + damage: 400 + behaviors: + - !type:PlaySoundBehavior + sound: + collection: MetalBreak + - !type:SpawnEntitiesBehavior + spawn: + SheetPlasteel: + min: 2 + max: 4 + - !type:EmptyContainersBehaviour + containers: + - station_ai_brain_slot + - board + - !type:DoActsBehavior + acts: ["Destruction"] + - type: Construction + graph: StationAiCore + node: frame + - type: ContainerContainer + containers: + board: !type:Container + station_ai_brain_slot: !type:Container + # The actual brain inside the core - type: entity id: StationAiBrain @@ -254,8 +403,6 @@ - type: Sprite # Once it's in a core it's pretty much an abstract entity at that point. visible: false - - type: BlockMovement - blockInteraction: false - type: SiliconLawProvider laws: Crewsimov - type: SiliconLawBound @@ -277,9 +424,16 @@ drawFov: false - type: Examiner - type: InputMover + - type: BlockMovement + blockInteraction: false + - type: GhostOnMove + mustBeDead: true - type: Speech speechVerb: Robotic speechSounds: Borg + - type: DamagedSiliconAccent + startPowerCorruptionAtCharIdx: 4 + maxPowerCorruptionAtCharIdx: 20 - type: Tag tags: - HideContextMenu diff --git a/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/computer.yml b/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/computer.yml index 459030d8a9..8c90308417 100644 --- a/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/computer.yml +++ b/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/computer.yml @@ -554,9 +554,20 @@ parent: BaseComputerCircuitboard id: StationAiUploadCircuitboard name: AI upload console board - description: A computer printed circuit board for a AI upload console. + description: A computer printed circuit board for an AI upload console. components: - type: Sprite state: cpu_science - type: ComputerBoard prototype: StationAiUploadComputer + +- type: entity + parent: BaseComputerCircuitboard + id: StationAiFixerCircuitboard + name: AI restoration console + description: A computer printed circuit board for an AI restoration console console. + components: + - type: Sprite + state: cpu_science + - type: ComputerBoard + prototype: StationAiFixerComputer \ No newline at end of file diff --git a/Resources/Prototypes/Entities/Objects/Devices/Electronics/station_ai_core.yml b/Resources/Prototypes/Entities/Objects/Devices/Electronics/station_ai_core.yml new file mode 100644 index 0000000000..637d7e6a54 --- /dev/null +++ b/Resources/Prototypes/Entities/Objects/Devices/Electronics/station_ai_core.yml @@ -0,0 +1,14 @@ +- type: entity + id: StationAiCoreElectronics + parent: BaseElectronics + name: station AI core electronics + description: An electronics board used in station AI cores. + components: + - type: Sprite + sprite: Objects/Misc/module.rsi + state: mainboard + - type: Tag + tags: + - StationAiCoreElectronics + - type: StaticPrice + price: 404 diff --git a/Resources/Prototypes/Entities/Objects/Specific/Robotics/mmi.yml b/Resources/Prototypes/Entities/Objects/Specific/Robotics/mmi.yml index 8f181900b7..4d27a0f07a 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Robotics/mmi.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Robotics/mmi.yml @@ -115,9 +115,11 @@ proto: robot - type: Speech speechSounds: Pai + - type: Alerts - type: MobState allowedStates: - Alive + - Dead - type: Appearance - type: Tag tags: diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Turrets/turrets_base.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Turrets/turrets_base.yml index 0e412b014b..f60297d223 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Turrets/turrets_base.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Turrets/turrets_base.yml @@ -125,7 +125,7 @@ fireCost: 100 - type: Battery maxCharge: 2000 - startingCharge: 0 + startingCharge: 2000 - type: ApcPowerReceiverBattery idleLoad: 5 batteryRechargeRate: 200 @@ -136,3 +136,5 @@ - type: HTN rootTask: task: EnergyTurretCompound + - type: StaticPrice + price: 200 \ No newline at end of file diff --git a/Resources/Prototypes/Entities/Structures/Machines/Computers/computers.yml b/Resources/Prototypes/Entities/Structures/Machines/Computers/computers.yml index f6538ba64e..e275bef0e9 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/Computers/computers.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/Computers/computers.yml @@ -1636,3 +1636,86 @@ containers: circuit_holder: !type:ContainerSlot board: !type:Container + +- type: entity + id: StationAiFixerComputer + parent: BaseComputer + name: AI restoration console + description: Used to repair damaged artifical intelligences. + components: + - type: Sprite + layers: + - map: [ "computerLayerBody" ] + state: computer + - map: [ "computerLayerKeyboard" ] + state: generic_keyboard + - map: [ "computerLayerScreen" ] + state: ai-fixer-empty + - map: [ "computerLayerKeys" ] + state: rd_key + - map: [ "enum.WiresVisualLayers.MaintenancePanel" ] + state: generic_panel_open + - type: Appearance + - type: GenericVisualizer + visuals: + enum.ComputerVisuals.Powered: + computerLayerScreen: + True: { visible: true, shader: unshaded } + False: { visible: false } + computerLayerKeys: + True: { visible: true, shader: unshaded } + False: { visible: true, shader: shaded } + enum.StationAiFixerConsoleVisuals.Key: + computerLayerScreen: + Repair0: { state: ai-fixer-progress-0 } + Repair1: { state: ai-fixer-progress-1 } + Repair2: { state: ai-fixer-progress-2 } + Repair3: { state: ai-fixer-progress-3 } + Purge0: { state: ai-fixer-purge-0 } + Purge1: { state: ai-fixer-purge-1 } + Purge2: { state: ai-fixer-purge-2 } + Purge3: { state: ai-fixer-purge-3 } + Empty: { state: ai-fixer-empty } + Occupied: { state: ai-fixer-full } + Rebooting: { state: ai-fixer-404 } + Dead: { state: ai-fixer-404 } + enum.WiresVisuals.MaintenancePanelState: + enum.WiresVisualLayers.MaintenancePanel: + True: { visible: false } + False: { visible: true } + - type: ApcPowerReceiver + powerLoad: 1000 + - type: Computer + board: StationAiFixerCircuitboard + - type: AccessReader + access: [ [ "ResearchDirector" ] ] + - type: Lock + unlockOnClick: false + - type: StationAiFixerConsole + - type: ItemSlotsLock + slots: + - station_ai_holder + - type: ItemSlotRequiresPower + - type: ItemSlots + slots: + station_ai_holder: + ejectOnBreak: true + lockedFailPopup: station-ai-fixer-console-is-locked + whitelistFailPopup: station-ai-fixer-console-station-ai-holder-required + whitelist: + requireAll: true + components: + - StationAiHolder + - Item + - type: ContainerContainer + containers: + station_ai_holder: !type:ContainerSlot + board: !type:Container + - type: ActivatableUI + key: enum.StationAiFixerConsoleUiKey.Key + - type: UserInterface + interfaces: + enum.StationAiFixerConsoleUiKey.Key: + type: StationAiFixerConsoleBoundUserInterface + enum.WiresUiKey.Key: + type: WiresBoundUserInterface \ No newline at end of file diff --git a/Resources/Prototypes/Recipes/Construction/Graphs/structures/station_ai_core.yml b/Resources/Prototypes/Recipes/Construction/Graphs/structures/station_ai_core.yml new file mode 100644 index 0000000000..a04c9b009f --- /dev/null +++ b/Resources/Prototypes/Recipes/Construction/Graphs/structures/station_ai_core.yml @@ -0,0 +1,144 @@ +- type: constructionGraph + id: StationAiCore + start: start + graph: + - node: start + edges: + - to: frame + steps: + - material: Plasteel + amount: 4 + doAfter: 4 + + - node: frame + entity: PlayerStationAiAssembly + actions: + - !type:AppearanceChange + edges: + - to: frameWithElectronics + steps: + - tag: StationAiCoreElectronics + name: construction-graph-tag-station-ai-core-electronics + store: board + icon: + sprite: "Objects/Misc/module.rsi" + state: "mainboard" + - to: start + completed: + - !type:SpawnPrototype + prototype: SheetPlasteel1 + amount: 4 + - !type:DeleteEntity {} + steps: + - tool: Welding + doAfter: 8 + + - node: frameWithElectronics + actions: + - !type:AppearanceChange + edges: + - to: frameWithSecuredElectronics + steps: + - tool: Screwing + doAfter: 2 + - to: frame + completed: + - !type:EmptyContainer + container: board + steps: + - tool: Prying + doAfter: 2 + + - node: frameWithSecuredElectronics + actions: + - !type:AppearanceChange + edges: + - to: frameWithWires + steps: + - material: Cable + amount: 1 + doAfter: 1 + - to: frameWithElectronics + steps: + - tool: Screwing + doAfter: 2 + + - node: frameWithWires + actions: + - !type:AppearanceChange + edges: + - to: frameWithBrain + steps: + - component: BorgBrain + name: construction-graph-component-borg-brain + store: station_ai_brain_slot + icon: + sprite: "Objects/Specific/Robotics/mmi.rsi" + state: "mmi_icon" + - to: frameWithoutBrainFinished + steps: + - material: ReinforcedGlass + amount: 2 + doAfter: 2 + - to: frameWithSecuredElectronics + completed: + - !type:SpawnPrototype + prototype: CableApcStack1 + amount: 1 + steps: + - tool: Cutting + doAfter: 2 + + - node: frameWithBrain + actions: + - !type:AppearanceChange + edges: + - to: frameWithBrainFinished + steps: + - material: ReinforcedGlass + amount: 2 + doAfter: 2 + - to: frameWithWires + completed: + - !type:EmptyContainer + container: station_ai_brain_slot + steps: + - tool: Prying + doAfter: 4 + + - node: frameWithBrainFinished + actions: + - !type:AppearanceChange + edges: + - to: stationAiCore + steps: + - tool: Screwing + doAfter: 2 + - to: frameWithBrain + completed: + - !type:SpawnPrototype + prototype: SheetRGlass1 + amount: 2 + steps: + - tool: Prying + doAfter: 4 + + - node: frameWithoutBrainFinished + actions: + - !type:AppearanceChange + edges: + - to: stationAiCore + steps: + - tool: Screwing + doAfter: 2 + - to: frameWithWires + completed: + - !type:SpawnPrototype + prototype: SheetRGlass1 + amount: 2 + steps: + - tool: Prying + doAfter: 4 + + - node: stationAiCore + entity: PlayerStationAiEmpty \ No newline at end of file diff --git a/Resources/Prototypes/Recipes/Construction/structures.yml b/Resources/Prototypes/Recipes/Construction/structures.yml index ed533bcc52..1f568a1629 100644 --- a/Resources/Prototypes/Recipes/Construction/structures.yml +++ b/Resources/Prototypes/Recipes/Construction/structures.yml @@ -1315,3 +1315,16 @@ canBuildInImpassable: false conditions: - !type:TileNotBlocked + +- type: construction + id: StationAiCore + graph: StationAiCore + startNode: start + targetNode: stationAiCore + category: construction-category-structures + objectType: Structure + placementMode: SnapgridCenter + canRotate: false + canBuildInImpassable: false + conditions: + - !type:TileNotBlocked \ No newline at end of file diff --git a/Resources/Prototypes/tags.yml b/Resources/Prototypes/tags.yml index 174374beb8..14dfa9499e 100644 --- a/Resources/Prototypes/tags.yml +++ b/Resources/Prototypes/tags.yml @@ -1343,6 +1343,9 @@ - type: Tag id: StationAi +- type: Tag + id: StationAiCoreElectronics + - type: Tag id: StationMapElectronics diff --git a/Resources/Textures/Mobs/Silicon/station_ai.rsi/ai_dead.png b/Resources/Textures/Mobs/Silicon/station_ai.rsi/ai_dead.png index eb74655e027f45f7ce830da6a337dcf2aa74c248..b015ef9a8a438e085de2f9c743585b33ee4caf65 100644 GIT binary patch delta 3557 zcmai#cTf}97REyf0TCrql@>!NA|ZtUNdzgO7YR)fU4(=rL_$kKSA#SWlwza`B7%S@ zpwdAW5#1o5Akr+fMcRsjpt2asL-%c&H~V()KX=ZZ-}jyQ?zuC!7TSYNQ{{k)BVFCu z&fZ~=AZ8$y&Y(cp5kV9PC7ezL0K#95xF4%~r@3RDCT%1fD;YBZF!TGoJ@VJu`20NB zOoZcrW5|8d0r?`{Xk^-*jg=GPn{66;H}_We_u1kWpTO(;gI!XWU##GiBMMeDen?&9 z(+%IKz_x=c*&DZ~aybgAoE6|RJD!rUw(HDiFGFMBRgcymwb^3Op^n;Kzrs+s`P?bV zD&SZ8pp!?2mDEr8s>tf%t7GG(!3tA;OI-`vi&xQaiMGj5CH`?oU`MNB*<{Jjd1b5S ziU*-stEN@q9jhIVyx7ANG8z0I)_m50(pod&4<1zOcCCM%2!ETJ&rzvMR)M{^Z+B)7 zt=awa&pw;EbP4Lan#vi$tjw;m=CCypDbVpl{Ms18BIQlj!96K^AT&Xy(KITkdzciH z1)navYnAMGf|f@_m1YPJU8Y_)I&9-?$4vn+?x{S#L{tUFoL3)LyHL`s6Wry0?9Bz4 z7(Eg-$z2;i=q9Z^N$LyA+`zc}Y!rrt>h z#B}6Idz9F_0uDLoC@fgNVM&#;gFfzH8~A zRJ2e3bIXEjJ>6Vd4%#onCBoPlv53a%#f~aR1^{*WWm`--6bwT`!di?T&Wu1Sck|0?agc^JS{8{p#r8P2sPd8ISE*GKjwgOKfcHCCY(r}*tN;x{IY3REjOC$@Z1i@ejB!n!dx+Ma_xXV+hHtzS~AIK_c-ChdN4|?2=kvb0|Fw z2;DY-{4A$Y=;;>?G+91B^{Aq=Hu4;bc0mIUxa+j6E zVE!C|Ln-?#dT~#Wl!bXj%cR(O$qRBrS`iR+Sy)X;gqx?)#rq;^h9!9ZCH>yJyE{Rc z^P>Ewz_he8!4fJ)iH)Cru{5Lj9T)btweva)rSkWs9$~D%e@Ya&pCDUhKa$#ZuVF_q zxZuI;YR!D({QD`np~Vs5R;FB*Q+i&nuXdrECI@=pMqBitI*o8J_jT)ROe){)23eYh zsq#;KIFdnyH3gZ5=JyE5ol&`ITYBN}krH_wiFJmP_0Y%bkjAfL`{k!gV|e97$6VIT z?mx^_S6=Y_$)x;oVsfGQc2&!hI&HYjk14)!R+P%=*NTfxawxUeXOq+SYLY|M zJ+nBY;~ekapFnnngxld#^}tpl$ftW}Z_RRr>6NtXvUB~eo%`&#NAxL#g3*bgd2#DX zcZKtIbsp%}TK{Btsu(;Gcc*`ldThKEi*K?sDXJxT5>3)k%H8EVE%Wu`HHuPbR{*hG zK~kM5FuEO*uO&WJ&`ip3%JE7CK0kHo8RZG;o$j&n{podwU`pUhj@WEnSL`&$^S#LzygNpD86t8!2;0zrH*9 zMfSzSm1~ynTHy!o^5Da|vr7=SaCp%*FCMF8EnTgD>C!Uiw6Q? zHN95_dpjK#sw)G`Q!>Z2WUPNYpo$OxsDSCY8fg0xWq#i4u(F$R4x?JSk6-p=#V$;6 zI-V@>RX-We=XF(cHxWU%Fa0vWAzWXr5e~f&FOk!TyY~DUvRNbhYwuv*McSULN#&9C zwrE4+i=$~FA(1MlpPGnA2et=1jS^&>u084(C4Sc*0|bV=lHNRFE3&%{=SzGMP*>n- zSq;AxuF%qK<74e(BNq4m{(!2^ZKm8s%VW(mbGnldVnB>>hQdMVwVYx20B2Jr3SnR< zy5Tu5H=W=JY&}0x<#_<)Rj6s-z8~JXO;s;{LjG#lj?EKMuZ$xEDsJk-zP1A3*s z3hM6w00MDz0)c2lApHJ)Z++T%r_+tB+f5W7pKz(Q(Ap6y34TJ%*G@{p+R7w*71qdj zgdiI~5q$g7iW{(;ZIwWfvFxoKI?tN$4clVIL5a=d#j{Yg4aB~h#E;_*DhnTsK8y;O zwRF2ylNE`2UDl7uB>j4*h$r}w__%S>7E@ASf@tXc|*;bJxd2yW@eq1)P+t# zKWe{_NDj{rk9^UGTaY?;)W$in=e(6f6Xc`n5G892E2kvO38xNs6i+9%KO)_|IHgZj zBdA@4rf8O1u9^)};+JJqn6|nmR>P)-(f&t9(0$rS=drMP z%Zod)8?Z(nrhjxgSy`qmP0{#Qm9-Cp+V+PUYzpOjS4po`+D*LVeES)E{&1awM)c=~E*xVa5)HM8Igz>=mZT7`(UTmoI~F zcymH&g_W5B(Xj-tV(XWF$_qQ{R=zCcP&vkDA2Tbo_*Rnu0Jxz#K~O*dLl0t;EyCGG zP+vAX2#-K~t91gIGz5$7gRt2uFya0|TL1!$L}KAcG#rgXaHE9IY6LMtSbwMjSUMpr z%D1EMT80l5u_Z&GbdX#XVFT`(5R!XXxCw^VL+g?Zbg^)XfdK`M(WQ{#IBz6r%ae*S zz!~636n%Xz21w-Q1C2HH^tWiVE)u1;wXo1_5D3J|#({`GOkuLHMizk~m9a;DJeEH*R3=5JETZiW0K)}LT? zu84>Lw@u_Y42i^1C}bQJjzm&@wr<}54aefhR5%8$kJ88bU@$l&l4}aG+NB5I8Z`>- ziqgfS4Dc8OD1zH8LV}@@SY0%gih+|bNL@I_hm3{eNK_=8LMD6bQAlL$md!W4WI?b2u7#8r4{r?91&B2~drUbD5vH4#SL&Ud-XHKbp0x}Sl6?#%M2mk;? zNOo4{Tl>~pB{XxmvXaW2IZ*v8z{)xG`w;WmkO$aX{M!TblO@3~c* zmH0MEyiB6yTytD;QnQWDG|w=t!0y|X36}f7&@dqoC}sXwK|mKP#qQeVnp^f}-T5ZX zK&`K)=F#2>-Xg-v?e^w$V50S4RCS}K6=J;Q$c@XMtdQE*L{QW{Md!9x^rI{5Q`Qy1 z&cV;2m>lTsc!pdz`q+V%A4OLL|V@q9lBa++G-2BTvWm1#h) zxtK8}^C8K#||F+gKbj JuQc2wngH delta 1017 zcmVBYyzJdQ@0+Qek%>aB^>EX>4U6ba`-PAZ2)IW&i+q+HFw54Z|=9 z{4+&Iz(5>4j?<)4H|Y2UL!zYVNj?LI&KTG}?-x8AR0L$2wYFN(AWa%|3lsx=a6uV7 zKq*;%sly?VmDp~MRBQI{^>P@*)h(J%M*2))xe86vUw@49AyD>-e2O)VS{gBhP|~2s zx3D&y&tF(Jyh7uE(~_=ZBE07^+xFJU-eIDR3!^c!!~pC^fV%~1Tv)u(8oc7nTyqjz z$iF@9fG;@$SC*an{wrRS*OpAkGd>iY`*(|B^zB7!Qv7@!fqNci#a*qrz0P zD+;KZWu)RUF`HWzdtMPhKZ2OSpu|i)kzUNeb9~*y$Je_E&+ocD=CtRyMK=fo2RU6A;Z>$1yloQn<%JTqiuQuD+iVzJo4atE`Lp%PCM zhZR+$d?D+y!g-6cTB)(tJ^2fRd2J=lb(*7yV+jc)AwotCWmI4xLaRoKi4^U}Jp3b$ zKS?f`TxBqFET9S%lH-2||AXJ%nuV!JHz^ncx?gPjV+`oo1)6o+{yw(t<_X|`2ClTW zzuExiK1r{)weS%zunk;Xw>5bWxZDATpLEHP9LY~pC=`JAGy0|+Fmwy_uDQLn_Hp_E zWT>m<8{ps&7%x)xy2rZ%oxS~grq$mMzcq5jT?(rs000ekX;hPE3ICI(3U!lt3ow&U z3o4VT3%VpYG%;j2H8(IVIAmfrEi_>GBY+bFg7tZH#9LeG&CX#ARr(|Nlj2XR%LQ?X>V>lA~G&9FfKDRlUEI#qYV!M zlgkkyv*Hpz2o{zrt-$~Q00v@9M??Vs0RI60puMM)lQ$b4f9MDf4Fe?knk)PO007@f zL_t(o!|hhV4Z|P|G=WbiaGz||tdJ?1ZbP=>StjTU(MJ>ng_fk1L8>?j2{6i$JKG6B zM@M6@csaW|w6o_GY4A!+ev4K^5|<7AKtu=9tpf;#bPf?+RsqgAt^a|tA(y{^wU*UV zI^-H!m!XLKe?JJN7C#@y%b{E|#<03cC<{s03PZ_)O=hK*xAWZD*I1%-^*->61>qZ) z6v(Nx>tnRt%$)A)hNfvm_&5Uqz*Yrbfoxe2A>{hH3ic*kx8RTk#!MB+Cn%SpCScZu nPDo1r;n||}&(_iL_jm%eX8Ur@lvkzz0000hoRx@jy9ccP zcNDt^x>4|zFdTIX)?C3m9!DOFaj^CM&h0T8XDvP0000< KMNUMnLSTZl*o2b+ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Silicon/station_ai.rsi/ai_fuzz.png b/Resources/Textures/Mobs/Silicon/station_ai.rsi/ai_fuzz.png new file mode 100644 index 0000000000000000000000000000000000000000..dcc48a40eca7ca86496ececd1963d987c421dde1 GIT binary patch literal 7062 zcmYjWdpy&7++XFgB&k$OLXt*eSX$0<%hVi%gAg*egCsi0oe+g6m0U{YRwzP9qL^^b zj?mK5lC(!s$m@Avchyl)?;tt|I0mynep5D3ee`%G-`w;}$x z5ykL&`*H9`0%3y-)5OR&?B!?_@0h@$dNh8k`l6ml=9b#i*%`E-fz6XY*z>1yvi%%W ziau`K7Z)fJ=o&G+y>R8W&qBNA;6$aeMFE~4o;V-&T731JFTQ>%Y?u}(IPX*}`0?b)SxIK*S+Di3hYnen+FEH`IybzlTAl4z zYh2#f8qw4qP`@X)dF%OejB!^0#!S1meJ5vgXqoEt}y2LJ;iB<@4gv*v&JFC+aiB`Am zt<^4mJb5%AK$@`?6Y8AK$;&Zu zWo6l2-eJ+vj9Mo~{xI!|<;T!QntTRDatXuw8d<{AQ7m2Xh9>3DZx7acjFRl{ULE^` zJrszl#S3UJ0_yQ2Js}(Gj(F5MojX|KD=|17M3=8}P^XY2-`v-*FJEI;yb7;TgB^W+ zcugJ-@2vjxc9HpwKLX{%`E?WH;{;yFO2*1~#W(?t$d*oMAvBLA42NIt{_|A9sbdY2 z4C_F>D{i?e7z#drLjgIyLb#9nbzu0s_>b%%!3O{`Cjjg3=lr8^`jeZdW~IW{Nmw1<~Yi z=CJ&|jRU4N{UU^~5xeCw_GXuyR_DA4msdHz6xBP{(B@a$8rt}HB20wvk4L=XS@D>; zs4sCp7b-W46Htf70VRt+KHg8~j+j)56WBw)Zd6vLlb&}pa6fWQ3lUuScQ{)DB zX?T7iPsplrxJFL--&4E~m-=?dg;(WTiKAGR_u*5UR(DUL8;6>sjL;uBDU|4p>5@$4 z>tqScpQmFIExmUnxN}K!^g^TK-_`2mlz3$(C9g|5Y17(NQSX}d-{YnhJzu8lKsw2AR?%FJtJYOb!X8cA{L9CY)OsbM8=PkCRwI)`Gh`smT4`1Jb~ zn^Tm==@?i=;$mec&}N$D_3rOX<(42h5u><)faAMF0Lu~KTE-$5-VjYHQ~5-N5R*kt zSqw~-mA#G9-^^Tv%JNtMqqIm*$d$}>oGq7(=2XB=Uzxq_$t;pgbf= zv9PEplVTfG>#KoB_$K0FQj(E4izJrbu{j_hfRbb0x#Q<-cWjJ<_%pxS0%wgq(jsP_ zSzhP%2FfMl;R6BU`NKhxk;~ErILbNYr811`xq!C%+GXSP6^>b;p7F8RpK}7eYxd=v z(mgyKO@H3xj=YJ|$LUy&1FaOvh!%1RI@cUE8-J`J&Aa9_)dF>@RxcF#*7N6Wh$v*2 zcfwHMsRD8!c#UcS=mPI=Y3<%MM)mxY6++S((^CQxK+fawfG)=@R!u)Dk8aVs@#gWF znXp|VsD4-1a#Wf{$~ISVP+yCph36*-XeQPo3~L}p?V<$0mw)vte#DI=rp$~drvMGX z7X5W+0_r2RL_oN*XT);5R8X5=98{(T{>7Nv71i`h0)+xvBI^`tG8>hy%zP9i=jm9I zJxr65>u8Ex_Tydpe9S{DyEVz|MHpqAm2ihYibFmb)(OiO@4x^{-D_+Fk~=5m>W&nW zB|e4zhT(kdZnVC?T76$;Vz19v7V$2B)HqWa7wh*otxr>C65|QEC7Zhcx>vDmaC#GS z6|OfnceBrrB$W&ZC$Sz;E#8Gou_?H#r(^q}*!joN4n(bWo`0*Sdw_j8)i`DrXNxlr z_)HYgNEsb?r(6f>cgg@x=NjRe~fv^-2#ptja3zKXz0q-=7nJHZ>oO?m!FE* zh@Rn;PPdI^7$Qc5{Nd8|9`(OSQ=QW~6nIZ=aeaOLV^3`(YZ>w-4loHdspnts^>J%( zF6j5S2|_DxE(B0z$rsI@Z4xtzV-Lj%g@@BRJc9K${tzDe`JE#2-&914R6Td3=VC_% zZS6D)ouY(B{O!4zUpG<*cIfWzhF(Fca!Wu?%X>*j5Gn%I$>O|!EDhFZ9^+aR`O0Dx-qK6~#6pK|@Kr>UJP6cZ zH$jz)h?3o|4o z{d&%5Xtw1IE4z!bbzqU0hZz%LY0wxh6}((gQK6A+c-wxP#u}Y}rwETG>8&fm@{<*b z7w!Q%!{JauP!!3PNt@OfF*B{I*ny`*8!Z|zfKX*{^Sz2x ziezc|?yKFf19@E^1kzwv+yZs3bvo0d&=CaQvz8GJ%kK!Iw@*&$=;kf=tChu>qx6$Y zd@+s}%}&0wa^b=Jh;yl$Nrc0$N$gE;X-VW18ShVPtJG7EJrf8vw^Bqpf^aMN7f2k; z!TpNWv{u=s)Uyr`2Q`6cb&heC*IDJInab8gh>#*NQ2#0`R|U_4OAyd(bF>cd$EMNv z5?>o*$@n*WR@`f7P%YuA_Wj_GW~o^vsV$8s!1oCC@NekpiJjBa(`a~?_xabmINA_f zMPf{Z{!e+O^ChbIJn+s_>dCS)v7 ze$T9G<4n>Uc6S6p6Dx!^9wlUn50kr;nMx$}6eZ_FhYAPBxON|Zu}(|O!>uwxwlR?a zYF#`yttETL&2epmbz!feTn9xmf!#0Pu;x7Tef8VTfk3V{I zo2cRTDZp5fh#7^1az}tTOgTzz!M)>j8;0k7X>zhSD(RRtQXlp5M)d#tnoss7cmD-L z&{=IByp#QsVU25a1k@*#mD$E?7iEPU2KXt)&uLqj@k4<#ES=!v#}C{|9}lC0;VzhM z`A^v~p-uK0m~@g}+k9)AXP8(=kjeLjF1OfMlB3g+XiY>@x=pFcBe5l$9e=;&E8A-g zj;C5UWQjtO^sW$Bz=eWtIq$z*`no91bCKaYF`)=gxZ~U0ZW)GAVXxwAn=CI_g7?Qx z)6%WW`+7!#;hh3$a$t5){FI74+rzn*B7c#HGSg#5`Ql5v0iZa$M;Q)uPvj z`ett7{gP9HY^Q^Ec0nN_qFgHU_uM(CtGQQ|gVnOGvqQA>rAe0D3orQ7ZX?r_7NC&c zJux@-&_n;~W{$Rmrq~@o=K{wo{;8K^JBPCjcY}{vS&Pvgp3Di0Pt8Wplkew8%$KM58567Wc|k1W77Z>oCqw4RPvH@>n>4@7}lr$_Ig3^NCkyMFX`QQ?K(d8 zxNVhW!Ji6`tJNPgH4V+quAiL!p{)X=ojMSZoR_x&E)sf@EJd)vnDc_nQ-;1jHljn)~#aT-7_Yi+0t$fd5Xk4>dUwzGH{*c zeG-MeL>4JC4l$uENRnR%57HorXi6Fmmr0h)ipa77@`JrT>eSgu-nY985;IPnH+78BZOaoIOS)C0SF}o8=F~PAH#pqh1^i_o?T@ z48Sf*i=3FDm56ybM3veqNx0bcUCqv!&Mt-I^6O5o`4+9v<-IycZuJ^{`HYnvTIXoy zy{$8C2tyDn6Kj*Sx)NWo^~^n~K$ms#idLq7(pkken<5Toc|B-uR${JtO0ZX3gTh0b zDUz64w7FV6;Rqkb&m=9%Q#d7ygap;Ca!^e7K!|{YIo4qQcI(>3=1LuBh04r3{r){Z z)aHb77hZARJGL}h4lr2BoV*8JgKRt(?f?;kg{P)=v{DjTB&bds?;^(wFm&M|S;9^I za)u?ULthk55;!~3(!9oCAAEmi>$OoNZLX@O#3R^^1dn5?_hc&54Gh@R(YEDwB1Yqf z|LswT{b3C+NzJoZwLy#b=Z{zDNQKb0^l^}RfoXdi#WqVogVF2=3XF}-z)Z4;FX~(< zXKWe=#0Z#4wWrM&$E({qGIjQ(b_ldEM=gD@uf?bGWNIuXH#vRX|!~$E0(Iy z9g5eAEJ6x^YA7=UT`q++Dl=iy&{T{Km&?^uWw0sAAHPpboRd%wJ(bWBmpu$uBYp1( z-$d}IV^WJ-+)&^?1)m1zRsSxqh|h!}!Hq6(%5dU9{AegZKR!NgxcFlM8S`7!A(+VS z6nD%5?BU-Z4sIQJRhejrIF&yvV+m8abLUQ(bl58x4JaX^tIRd?7qi>7ULpto3MWbx z_>RkQAXJExEIcuDin_?IunPo17GmzNSR^8J;-EpH@r zbaZ5F(Z0pyhHONLq)3uejP>ZDnUk}ZJ*yEGr9}``m6;F-kmyoXs>S9HA2WBzE{ByJ z2-tg{fOr}inR?>}a`+Dym+m&J6)RSJT?x!H-~Cy$9*$Xi)}0861SgYI_KmbS=k`6V zJF?o~C||c!SFQuBZP?_xwYM#_5&4^9F?lI5(@6U4rz=bEwo;VCrGEEek=$u=?s`{N zEj*H_cDkK38)bPR9FTAtb0_|o9lk2MdRI;fGk|`@^0fX@-MpgL-mhN4fY$W4xmV%Q z9oTb3eeM!QxVFJoa#?5q2Km; z+~1?SsI@56T82fHg>eN4GKEm8Lx=3_GN0I~tpV*h-8LQyVrOj+0kVfED%a^nEz!L6`SvaDE#|>$%IUBemgt)sYQgy#g|lr{B4LsxK)CmxXYRy2yw!onbr~-Zxz<*QE=j zyPiB+X(a7qm3r|RAcTF^vvmM8^j7U;&VwwYcR_ML6Nyc~zc}9Lg3uftH#P^P&(w~F z{=RC;wK5q3gsq9+-hL~cgd$Syw{7iIqLDP*OaUL;8{b^G36<7|G4p1H;rYWuLqjK2 zEVG~A>-BjvF@XrSQs*n{w}0hJ%G9nXZ#KYiukyq;EZyVNbR_mHvKhPOGrnHq@eX8{ zEXCnVZC`IuiJ>yAi7A>F%|!0P*Fk5&t7Fqx7TMYrYh8wW2NsswVqV;<;OR{6M(ss`Ps?>p%B4PD42am5ucSrlU)3T>`skis?lnCZjVfa?<3Xxx@WyA|f1*&0M!FutnVY=<&cg~`c4uy~1PvC4^s_Lw7uIV+^xYY01lr7WU z1U6glS3_}6JjEg<%Id89b1X{#s_IG|_XAw2GV{wHs}@w@VAFbi6799QI`XZWCF3hr}5!#AvP8WGg?)P}1u*Y*d#~1`ZKJnp0lGv@ByTx$Rba^gWf3uYa z(-Q!=UZw^bw8*Fq^R~?+r(o-G_ONc_gMomN@RS0)6^`%xHGw7r|h^ENg!-QD)nQD>X z<%m>>m^Bq~Mb%<_N_YVK16~NT^w>E$uRrV`&VSqRd2Gx#SeK)nyYMz#9?6kHGL#m9 zD{mc~p4+{pG@$->f@+5$S!I(=Qya@6BSa_%3Tczhmq-JY}T9v`VOd+ld8ZTM{CkY*; zcds_+^gecjtEzWJiqNy~vhcp`n&-lhn`LI-;}q&jywmvA;d|cZSw3!>_YATvkz8$-HF+KSh$E@URhJ-KzLZhRXTgz1ONB51l73spjzLi+c zrlbHK%ko~oe*LkI#rMyq3Hh=oPHQ>@wYBwq5@RWqE7-XkH2vGxXV>C zVI)`&5&6IHIy2!@rD7O5qoVGOHFj6FE zt8Si!*|GZ-K;)h*FVxY6$2|MDeYj)RuXQVk#IH7`-#;|`x)T5OuZ`tYghkmhHU%pM zBz0$A@sg!%Y1n{t!C9I2V`=-h3qu==*>jx^0?{9X*L`7{kuvJKJ!$^#51ci))hAK- z?UaM;mWsCNmqS-`uhY_zZUg`ND*KYW}z~#xcwPJVN(%fwQ&PjS! zQVXe!G;)>XP)!r^2kE>unu}OHDBV3MG|a0 zaB^>EX>4U6ba`-PAZ2)IW&i+q+O1e^cIzk%{m&|92_O)H|mBZR~WlVo3wd( zjT=kIM2LHZz%}E)f2a8e9|{spU`a8@Xz>X-WGYaSJwAEeoek^0KC~a9eP=h<1A@sz z`lBgj_b;&X#}CdiT)nrOw4YGgj`oAoq1Tahw0;{T>~z>&*pBizl$ev;hFW*1ZFgLu z>~GypS48$`n_EK=pwt-yd7|N+x9gsc2)usT7s#~k8U391(48l<#5q?0ayPwGT6+u7 z9muCCE5#qbx9=j>_Dam=oS2t?z~ zs0Fq=-JoLy9;regH#2BykJh4V6pXZQQ3XumR~%3^kc|l z2{|KuI{-u&n-PrjV8BKsyo=5XkvIn&69_7ZoP3}P1{^bW1WCdBNJc1;j*Z`lTYZTs zlA2MQKm_~f1>9s`KvoEh{E?85LxnvDW{xbJ3}-IU#}GNjC{c@C5idblqKG8PQj$+0 zaf(S&N;#EG*`o$>j#+ZbIhR7FV4wnD1^o*wm8!3ya*b7Ls=1bi^l71Si%nW;xs^`c zca(`9yY$p^FTR4@+cFzHvJ5fXPh$A%(GmqZC1Zrf54jCtkGgh`^m)` ztVZN?;k2Bvat6jII4~~C01}#%Gn-rpq|7O2HWL;F6M|&r#&oBQfx<8x@pKn=AI!bP zo8j~lZ}by$MydM^<_xI&%G(3hy6$srF?Os%#ngJNz8R=cHN*FUJGE=4WeapPw_4}6jYd6&ooh4X9lVcsDEG2!N zs~^-#n>yE?;bbt8 zEo!T(7)=N&9krmO%X%5HJqD}0zyl4HfZg`!f;koIa)*yz3PX?BC(5VbpT&-S$VxX2 zYtuz_h7(QdvGy476FgjjDO-BLEQ|DSr1`1Cl4+EDMVmXyLhjNy>*&&p@U*7vAoOT8 zg;^TarJzf;ID~VTT9$ke@{wH{wRt7%SETt8_86Im6O}NG3Jj6a(mO9jBQKM)JHuWx zlxkjx`lX=E8(3>j?syUTj?E~znpIcqE20zM2U&6Cp^|ea&1b{w68lvsWpvgTs%Eff zNGQ|Rqj;V<%%c)LT6`^0#o4p=z9cMR^)`gGL6clrh-jgGOPV`F8mbheWdyuH2fOV? zOQpWW&3>iq3GV{XER;dOT5x9)p^Yv7NEe*iu7&-LG(UCN637y6ssh|vfivLoC_SWb zVQPA62dHie+X4RC(EA&!|Ea|BLk~VhUygyQzBTqcXtmHCwF1B{tnQNb zz!iqI&|=e9QI;pM{-HDA8m!eaF&9z zHSWk%Bnj4GG(`93jJg%>QLMXesgfa}z7Fjq}*<`y-Yfpi~C?m(7^)%-1LSEZG zrcX6v(bCoU8~ryNt?8JfqP{#UA>H=1+R)z6cgx&2-*1`Uaf5@_mxq|^tSC&!)IQA> zhqP+fX#?l)c-u1f&G%d8cifE zX>4Tx0C=2zkv&MmKp2MKrixW6igplj$WWauh>AE$6^me@v=v%)FuC*(nlvOSE{=k0 z!NH%!s)LKOt`4q(Aov5~E;uQ=NQvJig%&X$+}*=_-}`d+9U#=pOf@?u09CV$WGpIX zva4d(D+1`o0ImHJGxd0CF%8f0bq^ok?;`u_(bA4rW+RV2Jy_MrE}gV z4zZ%75T6r|8+1Y9N3P2*zi}=&Ebz>bkxtGNhls^O8_R9XiiS!&O&nHKjq-(z%L?Z$ z&T6^Jn)l={4Cb_z6xV5vAciHxk$?ypRg_SMg$V5$DJGJ19`*1KJN^W@WO9|j$gzM5 zR7j2={11Nj*33^$x=Fz((D`E9AEQ9mF3_mi_V=-EH%AOrG<}x zzHQ**x~0i`z~v4w^rTCMppK`;WB3+F|aW#F8T2~bKAhGDPD z@=-7EHOAN%mZexFNkUB3f086bMZtQCPWYL0Jpd8}K_AC4T-RMxg0AaORTYE~L}BH5 z{t*Gr`SVF24RuAW1ar+~UlJ_s{iYHq0(VQWwEq9E5vd1hNeP;!LEE+y32Y?+0KynE zl7O6ZqGm#C@Irx7x;i+e6hlYtwaW|unx@g7%@Pno;8q^|1~><*t1N8`y$YMw&vhYV}Ty$Z; z#nDLzolIC#1ym{(2!%qX4b^bgVNx*s=u0O+5CpgtJxa|3 zPVn#?fW1vmUjVAgX0u8y?TCQ4rz0f_JNkXVEr~HtR(gZM5Aj>i_1e71vcDHaA_9CG6m3w1pFjHVR+%#xoX%W`2y$Z(p=!TifDwu@- zwGrWZHw(A67qIL!8#M(g=BME_*;si6bg4@LMgdPnZ5jR*=mULelV*Mc!`rPLSScJS zz^af*gjzZa%m|0Wq%4=q%yxrgb~+t%0WY;0j6<umw(91TX$ zJy5FKFyr+C!!VKt?$|D0&efTL>B6w4QYkn-nSyxiMPd&G0#K{f z3c1Z($CyV|;xd>I^3K&lfl8K^pW)_u8Z2iPu^}%mF#_?}y>Wk z8d9xb_|cb0fYa%OE85D{tY8GUj~>`sv33NYs$??B)e?pXczf96qOdOB2h4&OfVn@q z`~ss=Fgd@^`Al>K;H1!+f>0Om=m0|lrRGK^4FXF)&wem`Fp3I)aQy8CQ4oBahmmCK-oY$gMG xko{YZcLF0XCK3VUreZX_09=n|f!A{|lV48g*8hH~+a3S_002ovPDHLkV1l0t1rGoK literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Silicon/station_ai.rsi/frame_2.png b/Resources/Textures/Mobs/Silicon/station_ai.rsi/frame_2.png new file mode 100644 index 0000000000000000000000000000000000000000..21ecc5e71caae1462a2b1c72223fb27d8177dce0 GIT binary patch literal 611 zcmV-p0-XJcP)gPRG9iw-VgqCrPV+`1q&F%JBVsEH0jLP|n{gAOj*cTIuPQraSI{3Y#O^LqEb zd++Yrqq5oT510rQ3Wdz{4;0>-&88{N?RGma0GW2VVA5tY#PLVF4ezxYsdogRb2J!1 z??9g+f8nAkFgg^gI?Fnl21$CX<2VlUYc_UnF+F-w%yOLtcO!kw}C%M(XuC zqsTd6rfa}pL@OTbp@(bdV*PaD?O)CHZ002ovPDHLkV1l&Y32p!Y literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Silicon/station_ai.rsi/frame_3.png b/Resources/Textures/Mobs/Silicon/station_ai.rsi/frame_3.png new file mode 100644 index 0000000000000000000000000000000000000000..afddf9f5197a1c0f2b28699397ae2346af6b06d2 GIT binary patch literal 763 zcmV!1;kf+mWO8{^@m!qQ#3v(g&+nxd2Lu;KrUtI}I7sA?TG-&I|Nvf`W@z{&SA`J!u zxd1l|R_<0RCNa?O_i1l+Z`z^5%2{W<+*vls`FNn9;P4e-*aIu}`{k9-^yc*`NPc?zqAb$}P0o`tw^7*`{1Hx(5cv>Na^9_mygdbcE0oiPpUg;^;N;$&j zr+g!X2=0UXy~N7fkBfBcYHBI~s_OMRYi&9@M?p%5?S22Jz zY}sj$LAeMyz2*`k-T^YZ%$FaecfqVE6fD<B^(atgxqSi z$^sax%F0kE2=hWbIWd92@UYZQ3Se^Xm=9m#ny*h` z-+uy4M@|^d==_din1RF3Tsi@zrKR}AT|lh@UD&kBnOHK2{fnL-Pojp}4>XP&zB(n< z-`yIMA1Ffn8efchDz_h(w zO+lMxP>nJ$O2k{Y)noF{`-mff*FJei2-}@-Qr&m`ikub_(U3s|`{opUxcL-uo|_fG ziy}1zrxl}pR94zz2-Cq;v8WJZefLoONi81yaTE46YY}@nicwE5EGtV;`31143+N!5 z#BZn5R)1D0aJgLgmTTpn+q^e6QF-|;f&3Lkz+&0#&4`$^OH>SD=0+JN>5yxl7)F3? z$(Pm-w+9CY%~N2r*`$s;u_f4Qd4sb*T%|iV>W?17t`Y&$i5Ubu9%;-p2~shAQ$W6z z`orVW{qfdzss8@!14&;{1em5k6y;f!Q{mRZ&t1y-5W|!>hGnkTh|R1u_B5IFOVvfss|FBPUKaJ${Q+;RId325e!?+GFBD@Q1T@px3~w^GF3 zh9mN9iUj=r{BhFP1@e`88mbXCOo8?cP>t-Og$BleF5ZICWPen!AS`O;rfDzO(*{R- zd)j2O-UUYI_aoZt91ULScEO6Jj&+CxUf@|MEIoe&W6bFwGJAvdQDHLQs#!HzPmZ2bGG$*y}GCxra(s3dlhGc27{wmO~Lk$ zo`WfMDc~sZTT#?5s=0ui(dUvOxeDfBE_Kow*MJ&@7N;}$EN)pU)%PH$A-;jmh93DV zq^R~&1Z!#L8GLaXE-Gor1k**R(%S-FUEc^7&9l3$yJ3boeUkCJAX_*bvTMKJeAQ@u zMj{bo0e=k*VJ`6Y_Tv8_<7YYl6U^t2NtyulPi4L#3E=&hEAa0*a*6){g0iMW@VxP4 P00000NkvXXu0mjf@&F)! literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Silicon/station_ai.rsi/frame_4.png b/Resources/Textures/Mobs/Silicon/station_ai.rsi/frame_4.png new file mode 100644 index 0000000000000000000000000000000000000000..70c4834a3e9850520847e3ae717af25138262c9b GIT binary patch literal 452 zcmV;#0XzPQP)XJT{QHPQb-E*#14fA76J-WgF8eSt<9K@jNV zgMp7UO|`%s$5|Rc9Zn{2Fdi!be=r8`i$yzL89+Ers8D~QMt|aDI)$Pr28ElZ2}zRB z2KsVccV|ddRa@_}EF-@q4RmnJvV;)!%XE!KBgpeyY#@$f@O>X_+vea*a$R8fk;NJC zJP+<45Xi5X4OEnm&&P0eVXY0It1t|k(F|1R?diIS!XsxOr~HdUpkm7!1L2rKqQv} zi~{}@Wp+dq92v;!7A>U)e%fZJe)u;<8o>6cYfN?lQc%&(5=KDO!^swB;AK8n0wvpW uyc4Lrm~0v7ZYrwP8o>RiOL#p8o%#lyHLb8QkC(mx0000?)WDzEdIOv|2tbXF)=YVM#skg+SBw>)vn4+5?xA literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Silicon/station_ai_cracks.rsi/DamageOverlay_125.png b/Resources/Textures/Mobs/Silicon/station_ai_cracks.rsi/DamageOverlay_125.png new file mode 100644 index 0000000000000000000000000000000000000000..642132e99e650ff7a7a8472199353a71854faabf GIT binary patch literal 331 zcmV-R0kr;!P)y} zcWIv3kmKLU#q~b}0|SGryT^Y6L!rftz`(!&vz%POM2_WbY-|j$ z_!blrqA2KzP6J4J{NIjkTbUW?4UkJYY623Xfblvl9KcAN?}@8e=u))~nR9 zwT94Q-nz(H&V-zE&pmTz09v$YQ3GbqrI+>F&VLY50h!|!6~Hy+fQzq`S_F&@Gq_*e z4L452KZKaCysEKb2I)1^o~#r5Ebl*ahfvjYx^FFtqGm#8+LLush^pz#uxyreU{^3J z&48-uY%maV`gDj^p|7{xJXmLTI(=_u%RAfz!_o_CZK2_xptB`2$L67a_D79gX~~A`01m zF`Y61fRocRnsqqs0xCi-2*S4Ck}T6A#JL3|6TY~;*|v^S+D((!VtsPT?Hf#atIs)z yxaTsxE_n*FT`Y|}FdDt*n|Nq+phb%oe~d4U3y@H;6EH6T0000O{T7H3BZegIYWL6E)>Q4KNQJ^}=10-A7R#o#aG$6(RT%;c&QI1nq|{S! z{5eLi+aWSFr9+r67(C#c0D$>?F0CpF@;%6FKg?2@Gsehp&?hbdP1C?R_Y|nw_KXtx z5|*8fA#}sH>BoG*5Sh~q-e2F4Or@Zwbv!kjUh`%6oWxG2z$L*2&-sg(rLq73#uyYu z0RT)V6C_h9F&y-1(X&6rRTbIu>`%jS5>YIbo^ttuA#N)b0RWd**CKcv+q1ooVOVob(>%YAbzSVzcq@U` zAQnx_Yt(JGJnI-^Yt7yC9~42;%|8YG1ft#{l7onR%Xl4?1c|o$@QWpEX6&8*FakmM myo}@rC36T+#E22&pYaQkx7BGb!r4Xu0000kch)?&pYxmIB>8SUWq-h yzpJ>BbJE`}Y-+)*3^EnA_F{cUAAe^!FqPHRh@G+X&XrD}J_b)$KbLh*2~7a+#vMff literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Silicon/station_ai_cracks.rsi/DamageOverlay_50.png b/Resources/Textures/Mobs/Silicon/station_ai_cracks.rsi/DamageOverlay_50.png new file mode 100644 index 0000000000000000000000000000000000000000..54d2b3bf9c58ff1ac1b8f0f7d667cb687b3e7a24 GIT binary patch literal 143 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=ffJFi#i9kch*{2@p#pP&C^)?p7%gUuT@SQr4on|nK(Qx814ef93+^Ar4X oe4N#m_Jj1g9n_Fu-NMAcl_tDtviYQMKpPl5UHx3vIVCg!0BaaBRR910 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Mobs/Silicon/station_ai_cracks.rsi/DamageOverlay_75.png b/Resources/Textures/Mobs/Silicon/station_ai_cracks.rsi/DamageOverlay_75.png new file mode 100644 index 0000000000000000000000000000000000000000..4dea5cb6e4f33442b0c8601ea2bb08a7286d86fb GIT binary patch literal 231 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=ffJb)GJcArXg@6C_v{Cy4YkP2`hU znHfv)iA02YodNyv$ht?~kBDC_lHUPFYdm-;?Lg{rmj>{(kuv z&luFjug~99v}t;N%=H8;JLd4CWlccrxZi08e%u$zr}Je#*r-H zFCqZ;4D*4r9^he!5r)4$J?ZBU~ei5=%+jI#RJP6bzto};D(0Eb__<;0RR910H8mB{=m-r z1ABdxMhg?}tCt(QDSd-NolIU2B$sCHS}Zb*hyqC#E6=u<1)n_NzoQPUo(0@jq`D~> hW3m7(8UO&u&J#K8skm^ysM!Dj002ovPDHLkV1gxSb{zl! literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Devices/ai_card.rsi/meta.json b/Resources/Textures/Objects/Devices/ai_card.rsi/meta.json index 140b77fbee..8a12aec8cf 100644 --- a/Resources/Textures/Objects/Devices/ai_card.rsi/meta.json +++ b/Resources/Textures/Objects/Devices/ai_card.rsi/meta.json @@ -63,6 +63,15 @@ ] ] }, + { + "name": "dead", + "delays": [ + [ + 0.4, + 0.4 + ] + ] + }, { "name": "full", "delays": [ diff --git a/Resources/Textures/Objects/Specific/Robotics/mmi.rsi/meta.json b/Resources/Textures/Objects/Specific/Robotics/mmi.rsi/meta.json index fcdd9e1b26..1192d1a208 100644 --- a/Resources/Textures/Objects/Specific/Robotics/mmi.rsi/meta.json +++ b/Resources/Textures/Objects/Specific/Robotics/mmi.rsi/meta.json @@ -7,6 +7,9 @@ "y": 32 }, "states": [ + { + "name": "mmi_icon" + }, { "name": "mmi_off" }, diff --git a/Resources/Textures/Objects/Specific/Robotics/mmi.rsi/mmi_icon.png b/Resources/Textures/Objects/Specific/Robotics/mmi.rsi/mmi_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..e109ee0f318c882c503cfef20e09714a2cb8bcbd GIT binary patch literal 912 zcmV;B18@9^P) zU1$?o7>1veWRhrg3~g;mT0|)Iuhc@LE0ySlDE>e}*W%TRB6{IUm69T;>y2jVf-Lxh zNG($6NDWopa`!^S0GG#}nv}6JH@cVkTZoUGK7(Mh!wIka%cZLbRvQ+p4ffW` zMunJ-5O4c&H^?Pa&tTqIzjSn~PsWGJuNBRAPH=~H0xsYp#70i3s2Y}qs#fyPH#zMi* z8ExMPKsXd+-!U)R9x+sc!-dP`8b=9y$y`gG4A)?o5nvwhdiWW68>--o8#Rs+06CQt zX&o3TE7B3W2E)2}^@7E8e|S41W@7w3xqE5=*mAwaSQCn(C~G%+d)z}*UIurcscVWj zW$a3F$@TXTv7M`#DsmGVdaB!3k|a|~2SibneT~fk^p-6pT33!ZIYC}x0_WC}8ICC9 zj&LI8yS!u8)-VJ8-S`@t2?To53y>tq)OM#yogZ-IBcAW$W7`nUt;H;u zjNz=@MDe<6q>DePanFC0hYV3IN-=vG(AnkZddoJ?`lt({j37CE?jHvpuVdefGaJJ z$W6o;4~Fr0JP?U}t$8Gd$Kzo<7$!Fn<4VgTmHb+3N6PF|eu_m=ly~kvgxkFqr_;&) zz1sm;RZ$H<<={)*O{k2OZXf9HRudQ<9VHOxF(zO(5r8U0k|a~|ani0SS!W{8co}I$ z06HO(@0~vOIv0__BlBYy%kNkl8+_6on6~ln5zEp^6;Ig{z6+AyN=&(#<>Y z8oUM#a*flca&@sq`S1&H32TlE~L9(r8mj&0V+}ufq$sfS-ML*=YStg8<;=N z0Ra8Q_|0LS>oONMf71FH05BR|y%*r_B*1aDes`_toDH@qSe2p_v=X3b;-&-Uck^?k zkF)igsMi%C6V}#&X3Ay(GsiB&hk6ds`Wd6qRjCV#98h=C`NcIaWImmavo%ztkZcp{ zfK?VCYpkr%ynh4QbV2?;n|91VeU!SDQlM;G6M-mQ1M>Z;{OxYoUDx#dcGH- zvi@zKF{%jL#pe))VHk#C7=~dOhG7_n`6_(YcSF}>sa+aVkwQF;y^9b}W2#c5ZA}0G z5P|S2LOhMBYJs*@0s4zEL?FDRgA65!Kr}ACHm(l$7k^`@Na1ogbSA>(a7ZdrtyG?y zRfcB5YyM}Ip*mHkRvfT-+IX%1_ZMSqo;H3Qupb;w%HR8Q!0P@dl5K+h;NV_>o0scX z5j>FfyB{2I^Ky+p`0X|YmaFAi1Ycy6U#^xux+emNWGLx&G9lNy!0lv0r|p;i9gfjj z6F{W3CQcbj=K{!3k~s!X&);+&glhrJzP-Jdm{IU0fcKZO%n3dO=*%0buQi}k-v`_~ jfMFPhVHk#Cm^qM6vg<~8!00000NkvXXu0mjfHwhQL delta 243 zcmVI!54=E?p;m?7K)q6rcN6e%%< z|GPqzC)@af2mk=UL%sGNnH7!|&i$9ScK~mv3ZOcP>eM=mi^qQgpQ9I4CkbKrO+W}k z^H6nC!}4iOdAFN(qX{VG71_&tyCsDIu$YCa8u0@#dHaq?^+`wFQGp|WVoj0EeSgOB-=pG=u+ieQ-F7&_M tZ~9i!ci5Zn{#o(b0ln`80001RA79IVf?w7G&pH4A002ovPDHLkV1lhaZ2QhG>QImp0|_O=O_^X z000000N~Q7C2bt`hmp*SJ=>EO@)tf$UMDq~W4ZOqq?xwk;eX|UOw&x<=UOg#wnt9S z$s{&;ok$m2tQV;}RzQOqCn23m4_k$0AhucnpTc14xf*{yOpfE&IM2>HE z2H1{fpY|nfljTtVr~?Ynmo0%=Nh*QOV-cA2I4J_hH{*SzZAY^YQFp2lWQ<>=zHqE; z22PjLqsO_Hn}00>vYzPSK=VYt4*Ftpk2^A6&bFf&dA3LX!vB=Lhd~qs0o{GOE64${ z2viw`-1_m?$-d8F_KH%fJOliNPfpKCt-K1IX#E19I4Q+v;%|@Jlmt|PA96OezU5E_ZL1nBd7BEmCk_qYR=mK zuR_0B<|UrW*1TnVy=x0}d5o`0KeYsv)gON<)~5U42n?vwucuw(iU}rZ$+msy+1w-!$>%oh^T#aMStJkO6$Mp*4KhC45LP)5j7f(h~q{~g?^>) z0}R8c6*0F|MPD0+{b9uQQG^cqTEK09i+2D30Dk}g0000000000fV1aZdi6QT-5V;} zv$?*PnOi?E^}K`6`UTpmjnApi>VRQ?7&$$MtvQxkpVa}^olfN09^2r#^|hG;L}wgV zgDkf``y9}^AJBX?XFGXreRc=DxKHFSe6|i{Zhh7gB+`D_UX!)y(jWR=>WOpfYmotB z@Ni!(&L|3Qebx+Ew%7FQ`C0mxE?|7c8DMR?tS5dB#?N&fF50rgFpNa6{H5q?GY1F^ z!(d&Qz^%{b0M~L^2hXj~T7oz~0_N7&!U3184*&oF00000002-?{sDRV@$1X^x5XV?y-A6-TyJ$ zRf*5@{Zh5JtbY5nl7DggE-_nl?SFUX-m;%}(k$Mu-5M5^U4Fm1-li$+l5~Fd+BxT+ zD;}@W*el-lR8`H^jsXT5Ci+g-jLM&RuKvRsi_-3O)1qGM?&Ns+hrK$SeYtl3^;NGxfiju zf3`H}^WsZKSGrqVd-C*O!K9 oU%B-2<4cqMpECoEI#6HBy!`X$AG>#NTM9DS)78&qol`;+0C{<&cmMzZ diff --git a/Resources/Textures/Structures/Machines/computers.rsi/ai-fixer-full.png b/Resources/Textures/Structures/Machines/computers.rsi/ai-fixer-full.png index da7937d84d73c0ff45b158a96e5a3f62386ac43b..fe7d222f1cef82ddd9233fd0e90d307e98910e1b 100644 GIT binary patch delta 899 zcmV-}1AP3_1ephrBYy*6Nkl0|y1d&}G9MWBM;l&D# zGnabQix3ozQQmt~)&ej32Mh)dM-jF>CAuLIUUcC_cQ%_)izJ6$WJIBkoM-cNp<8O3 z?96%2wC4l6*g5At@AH1&@AIDb>={511VIqQ|B5QzLAH(+vwvyKS-7k_;=?=w%K=rP z382Yz;?s?GT&yU?mCkkm!2IMZe2>Q9=vXpesLooomho0H}0Z4}A_EJCiAJY1WUpAYvz;005L|icnIbLTpFG zqN7!^145AydVgQ{W|acjrl3^PrC`Ps_#G8dTBgGIqrDlveSZYeEfGcAoBue#Wpkxw zddnF+H0xW=U{1lhY_9CC+jpSWTqvY2&I6CYA zL~uRbshAxdcC3B*Dt!?wtx#b%k-%(V9sqEiy$p4c2AlENu@12eG?*0t}eruswJRM}Obx>;v+#2xaO&+dYO9VGD5| zLJ$N&5ClOG1VIo4K@ew!)B4>|?pV~hHsmZEyv<(4MesIzMJYwvya@mRjG0kX1aGrf zlv<$8s{oa5D;P7QNII}}tjL&|6Bl3ACk>?1ZGQ!4;h;AdWD`MeFo>Lm%S+{1lWRjh z%!6?XgxmJ1<-nYs5h2lz#PYd-7dcXf#rZ| z(AuW>i_oC8P1!#_uyw3Byd;Wp?*xaJM6qDrNZC48b^!|MbvzZ+dF+cI2!bF8f*{T* Ze*pRRSS@~~-J$>h002ovPDHLkV1lI&qHX{H delta 570 zcmV-A0>%BA2hs$PBYy%JNklLBz#up=4_C4I&+!JGCivNq>OQ5FA8^L;nE-0YNM#P{gVzJ|8i;@8viYHy>!5 zr(hI;@aA|j&ylok|7WD9aC7RAL|Hvjw*l-QS~4|_-FNQ;*9Cq88>=O#wuim9ui<|Ffc8&?jnxvO zC(m>{_pUfSegd8X3`57FJu9)_XAQ~R+aZ>}bi$bS~3?kLGso06+GrS2$6WD7D^ z6A3#%A|fIpA|fIpA|fIpqG4slt$}%O3niC)O=J*?V8t!Thw=ECuZh$h6>1TzxFvN* z9jX9<^8tTjsbOMtc|DXCwBnYGF0W&$5jf+~`viVhKV5PAUVwDPm2Pz5fjgkQQ`Rz5 zGY4JXH8Yv18I*U*;Z3cDbqNj1B@7^(-_XEpo`{Huh=_*LFX~6%Do!pI(EtDd07*qo IM6N<$g7LBaxc~qF diff --git a/Resources/Textures/Structures/Machines/computers.rsi/ai-fixer-progress-0.png b/Resources/Textures/Structures/Machines/computers.rsi/ai-fixer-progress-0.png new file mode 100644 index 0000000000000000000000000000000000000000..1bd832bc63589ef8e365dd8e5822e5f95568c4d7 GIT binary patch literal 2553 zcmZ`*S5y-S77e2GCMYm;6va^~Iw%;FUIZyp0|Y4|(u+gYkbp?p-Lq$Yc0b;IKkvME&b_ZCKeRCB=aJw6008_Z_YJI1e9TYd z;yA%xE%#vnfVp=mwen$IKGYvq?O+2uDMEnY*Si`lK(Jcw%7awF?1Ki zXdr+ZH_r@G!8iSvw1C8c9)R<1?MO|-4jYA`g z1?x=hRpGpMT_V`BcVzqWHX|I))A;&}|FGEI)%wT-Br053%x0&2cVl_noz%dhYYxAy&ee5VxW}GY+RlYioN;h=n(I&o{Qb; zOz=d$XDIc>pPUwU9??_TZEwZRi-ytOq~S9Z2K|(2*&d91FOcToX})A7$DFjq2oQeqSlpuBJf9O;U(m;F+i!kiC(|;9%biiO8dKRN4N_~8y~Edk`EfR^u|$EcCD;P2XsclL zUE1GwoKuUCo6UNBo37Oj7L)OqkC_r6p48KzLItwd(G}|`?(b$XjvZ+);2dB2)!wr_ zPZ8f7-5gzrsKzcqYRX03=S20=!$Ce=ZR3etVib`CovaN_DQnf3^N}!&=&nSGaB;21 zN-T1V3B)FtP$0p8DipZMKc$@9olEId&+HS}25A76oDyH7xm{%M6xfd@uCB=p!_OAm z@+JW;44b?8H#z_>hbmOZ(%WW?cIx*8=C<5RL3mhrCC>b)r7`lAJ>}Yx-moS{PO_Sg z5YriA@Z~{Q5+Pri1_Iork6wkF?Y6(=*wyTczUMCNMIN(WxRO&v>?CziWxumTZfCR^ zmDgqvK#>v!{%|3LTzYdnKD6-sh$2Knmz$v@ZPRUsune*z=a zA39bwlRHl-eqInH7*w@bbL{VT+%a|7PE{HiO!nw6)NQrpcZm4%_FGurNFlgL{lcGJ zOyjSiUfr863Js}MgMAFOy}A3V^2utg0voAX8H7dZ9UZ$njJpnuF+A^oCi357`M=;8 zJy_`;y$6d2ae`<)y)A?(-aREs z@s6R%+Y@}EM6lkz(*}*R8gd$SU_W7k4H~p&d&3s1Q8%9X47Zw zf{>!@xxRKN>xXy>mYD;5&>KmvT^1q>+0gheYVnRqr+mO?J<2^^lD{{PP)lC5)J*`J zBe7bU*y=Cp@6VhKQ27w2WG5TrihEq4aJ3QR(bXYhDBBw-fbs5GOAKjKQZ23}F7AyS z?1}>+^1WZvyvADJ?Z&*LpyTw=&0pH+IODhZM$d?s#5piFepik!Ma)y!YfM>I@Wg2n zzT<{Un(t(CnpSXJwzDD)E4Jw@Zb@t5tEPcEgE?$g$rNqjQN$|Br={r^vi5+Sf0>wO z?>%pa8TFUBot$syeZz-}=Mdz5+cwgrq_XI}lJkr(bx$b?ajw3gtS;_WJk5EVx&B9&GZdc<$-t zDJMU?2cPOY+e%w(&cW7kd17we_^Wg_qsnRSTu&?C%@3xQETuZ9R$?2EOW+L3wGd)h z8!Jwo=ovO0-Vo{sluO*yGEuUtbP{ztNwdvsN*#7CuP>oiSzF3zSJ&g#&R3S@Sbx$= z>JfLdo#LS?b)WcbyA&*Pov5xns{!y#ooEM~aKv5;VMC$s0{(lU|5*jcy901WGzJz1 zS@q0URFr)%dqUd@!%gZkCkh1YRR%@l*4b1!#O<8OeDZn(9WL2dj z0-vQ%{$$!2w(({oXjBshTp%rXuniGtDh>6+GwR2uPq{(9G@d#$ar*vG5&CQ z1DwQ*Mv!rmX#R*7z68ZJaFTrQ`mP6B>9G?`HDgt$A)(0gK1~P?$%bb~xk&k3$Z>`tq`_8LX=2$y1 z9?Tf#zEk!iL===y_tZS{eZNrIin;RpYHnd1jN^}JX@ir8MjgcBkW#L<91}|Nm#M9c z)@rysiJ6#HA!YP3bHrxXryk)N39IGUk1|%Dj(P0SUyb97U8>>Qh5^$HxVq&5n?N=o s>-1GGL>dEVSDyNX54_ z)77s=uo2Zf9))ey`cW6?71X4c!SY((`--=`7o*FoVxiT#R2AJwn*_>J?((k5K2FUE zN;n9UMiLMmmGFKc#Ab^t8jK$8xgF6k4gn23l91BR2*X8 zkYCJ3H~e4&M{Sv8el2+IUUPdv&=w>6y{#{=#oe`;^5}t*DaRFvUAvM{H2x!*Z=Q*=h0VvcCH zF<``y?idlh7Mh!x3s`7VS}ug44g9k1JD;v62#~o02MhWyKKEG2J2v@#afVuIM`e(F zq(&@=>S(%}#ES1w>q{A|ieElbxV0(N(FnJ~JGv1Uo>|#RT&csI6T5S8$ye&K_B?{j zzN{0XsvpJLA~%`s?o>Fnbs}_8t51C2PwDW~8}JIq^HP?+`yy*YWvE`k;5#42BS|*; z{I)$POhO6g@KlEfHW4L;+nM~D9=r4y!?EohN_#Gsj$COe?~#o)^#VmD0K*1FY(a2? zpE{g7iy2Pbk}|6wc#*LJOVq3Sv;q%?a=rQ7POC*TD4xrr%3$w0V+a?|?kZ*m-N^_6 zXCp@utT&IBUj!mF<+i0+G4GM<$0K^5maajChO3G*&;@*dMzWzn0i|C`LPK6?o|=fl zq}73G=4|~P2ct}-On*r=i$*+;=r*MlfEjWK(%P`|?lc2S+jknJIbBBG0#2r}Gw?N- z^FzuTI=kleWjM)I7+ra;Jtwl7LIG8#%xii@2#kj%pzodwcq&Oy6(DU?dSXnEhf83G z&zd6u2h9WDj^m(Zo&jo)zv(N>x*;Z5;X|=%`Ir{E_t7CtCIgw$HAMOMTBAh` z9*rfR>eMUp*X&$UjxBI3#O>)vp$+S|spB-Chz;|hjCga&i2OcP>dFrAu<(l${B-I! znTCCx4eXm9GD4T_w02Ol?TbjcM9dRHmdFFBqg^LgWCHLyS+liBd%309x4J^JwH~Re z9&Z=;g`jtl<8*U3F=6g}@qt!|AEde~`rH+=dG*UTLNzxu)m5h#=me_R%g!Jww3#eE zCG_9!{7;MipU@F`jb3O{BK%!SL+4(zH!Loeoc`Cmqj4?q<}h70^}`fUx_b^(8{Jl{ z7bh@;6LV{P?})<1?FoD@lHJ>%x*HSpQK2;T@pXw25v*c9n<(jTh3srBHR9UWI*t^!bq)G+jI1_3 zok~%OX80KGD-cVZR-LLo%f7Ef;1e)5H@~Fn_aMRHkyPF|m83RqBG@t;ZgPh=Ep?~3 z`?K-UT4x6unlF)JlIa`Lo_L5Pr=vJ7)$=;~Cya+f(`*fd{O$!|@H2%QjW>oAry#e43n{_bPZ^*7RsvdLjBUklFa#C#sHnYyA|WU1FVCp!K8haJ5Pc zoqQ5H4`rp94Bt;$cAJHWeuxmt2%Q&N(C*M<0J!25>gTXczCqkS0Q%jRrgF=j#LwU6PUkeh$Exje1KO|e(mN4#xa zH*GD40NyA}#zzPh9v1NJ|FmJxRzvylG{%D~zYPIMZ~amVrZgmSIP22p_BO{q``~|y?GPF|z0SO;kJ<^^=2tf5 z_;jwa{RPwJEC~0dT&}Fk%EdaFOxVG;1BlLoNh8>5LYO?1Mr)#QS0=<>I%BVzVl-y{ zXAcxwCX}R&b&9_Xa5E6(xQoFW!Sz zTH9omrA!)8wWm-=>}os9g=gL?bBt}{@w)3i1_-HsWlGgiO{z9;8TcsKK#(0*3Bc5g zH6Rm5uKJF;A!LR9VDS5UN2`!0;rHsX@LWsOACQgke@>v(;Ev7gA5_W# zA)fE5nn*Cx0n6?DD|Qs(`N0>T@2_I`hw|{MYwazMUx2pRZ}UN(@z<{DzO2M~)i0g& z&IvajPgYxD(2Vv2D`DS-p(}qPM-FIGPc%?r#g(;ac|1QI9X6|Tntd%)>)4_{7*J6u zI8Zy-yrv&ef&H{8*IQf1j3egAkdhvfUaUHZR^pVI>!rJWv7Q1zHSY?*HDIbak6OdW_`4n z1;0Nt+kIYr##$>*&*S24aP&P5;d~76p#>NMrhFgk2K;?d{ey`fMQ0_W275L zAN9+)fydfzc$WwO@QhkrHntBLTm2DkpX?z?psPZzUyi27irCt6MvugP7}ge6+&RUn6bdglb91<1?3y&zN;8*xUQ&Kkq*r zoOzKL{W~(-hl%c+&e7A{L{IMMH)+y(Lnql}qJJ~t{v`*_x2YlUe=ALY?>U-lF z<-L0-7ER1Bxy4BHZEScZcX8C{Y)!-MKVMGM-xL$*L9`-6J>JSEZb;0AMq@yY#4Zj_=x^BmRPgR!@%*+?X#aYO%?<1Y#)fzZo(&K2Q!6g&T2VNHB`VvCYgq` zUO_^_A*d`u8i^E4|61Xytx~%tQUd}4`s?r19!7>_X!BhIsy8n`>JvYR{Xipf|OXzp!|X~%3S$!8Zp8JhBc!729Y9nSlM zsJfFJ&jh@OBeN``z9@&+VEH6>c;_00A(pF))&mC)bcN`ADFNvvCR_4b&BzV$y2f(+ z{t0us{m50kz=5)XU)#6y>k)w(4!0m&Gb@vbGt)h97z3D(U?Kz|tM(Tc?5IPG?LIz>g@))d#tD~WumT{l@T7OeB42)7PW7zq#1C_5K z-ALq|tj9*#uSmRj$F52%@b4vs5|QhmO~WYT?NRC@NiXOaw58Q6CHB%P)YP60T z5cTZA%BCxIyh!!G+xhPm{ip0Az*pKM=UGsZ7}7;(Q&Rdi^^3oHbVYyL*8Wfg&X+?3 zsxtR<0OFY3aCXPQZ_sUi9mtQ%V{rtepd!&1Scs+GJv59OxuPFz7LOdC;WIbimi5R- zGac@`)DOD}8AyJLr4$Dw|J`=uin)dkU7>Y{Ij}|-ZDd^C9IdX8kZ08ts@I`F(?4Q8 zzg2^=2q^*#C9T}mU%xu*2V;AnVrbvI&IEO%m(t?B7PM@PRYPiY4tQ(a{v3c2zQgjZ-aC?yQPb&8 zMVi4%PNGSlh34I_ZWG~J?tqc4tl)H>1@BwUNbQ0nf}9$%H%M^`{oE%%^eCF|oDDS-i064v(_TD>ntuAMi6;?{$N%R;_`hj;jt~h~zLS7= zXZDc{2aezSNXsT%mNcu23LD?}sn()a4l~}z?f9evvi+O6H%|@)=_cb>(f3`rt~aZ( z-$>w*dTLCBC*Xb1W#CIDzU&?gFQKF5 zfP%_8!KgJhOT;GUKk3jh7Nn&k6te=?<(&cs=h%=w(7)A{(;j;3_o~{A_og0WC<8~S z6N=jo+9Ef`gI?>eSWPkTH-!k@uC|5JL*+R-kF=r;t1%c(xTHCJ+?V0hmS+lTo2?HeX6_>H1-gj0zP7Aw_! z@dp3IdY1J~CGpAb;|2&NCR<-rv4!Hf>FT1%J4~06CJk)4k?!)#vBu3(+##)RuFL{5 z=S7`$S1YzaQptPTEHkGt=1HC9RSQf>W&Clmz{nGd=w`H2oa!k1{{W&B=~B6aWLGSS S=z4tV0j$j6mn%$MpZp8Xv=!(8 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Machines/computers.rsi/ai-fixer-progress-3.png b/Resources/Textures/Structures/Machines/computers.rsi/ai-fixer-progress-3.png new file mode 100644 index 0000000000000000000000000000000000000000..80dcc81ec3c8cdccd8c57b29d07f71619b1e63bf GIT binary patch literal 2545 zcmZ`*XE+-Q7Y^w~w5qL3ZQAs5?V>1Z)Tq5`6*b!0u10CaOjK;jZS5Ib?Nu>iR&lL{ zSdG1|6%iECMC7{n`=0yj`+l7F{5a1!=Q+<=Z>*`Y4hu6kGXMZ!(bLs>e4)es7AA%Z z>{Wd>3;=*y^t2vY1k4f^f-O>9_`45?K5VT@noKboSF}7|cn-OivzIbTy>NYBUR-0h z;SW)0oJD<})t{7?RY*@}ue9=X_o}lJ+j8~fZh0G4`Kv;YDOmm5bvh)q2qA26!!;@p zMIb3g!#76uLzhTr0hz;ri*&alu4yp+4QG!zCH;%0ezW8Y^a*(#60KPtSzdgzj7Q1W zaa*~TIK2ooPDlU?1qd?MH24q#!05c8vV6Cz^|CKlj!rMF7OmAs*eJ<)Z})BUbwbAX z?~5YNbYrpxUFb|ZWf6v!BQ1=?lG`tzr;|t~xnX6|tK~T8_dj8*D1jx7wNf_m3}iPN zWWR(7I)p|b^@|`h?cJCD!VSK%EQ*m|Yz171h(tX46Lhox6ZaSh3_1L7BNdlYoeX`*6J?G$Fbi!?+(<)60A&;&! zQmd{8l||6LcI|QhWeH7A=z!(D8mU$v;3If5UD?LQ`4;r)E-LXbkE6#f*dDjZ5tk$; zt}@YG7*PolQ)rj~QOk>paHc;=OPWQbSlyLn+C#$FR9%cxlnVs>?CJ5NZu_Idy-z^0 z4MSY;_{=PI)@Xj3KL#L-nKIqPX>1G~hh(5KU;_;+7JR8iQzpjCtYza?O_4%zPwk#$ zzt`ICHCc6d6@_Um`a_~mgc?49zy-HwT3!}D+)zehi{zuheRW;yAI-@?nF1O`;*JXS zr|h(^g;UL}d!4HH_(uKQyB1{Ci*ZPmQOS_~p)0EL2_+Sa-FF4lWUf-|ed!6AXY$sp zQP>ZFz4n#nOKKY!_L5}+bJQ#(2g~Xn_R?%`#AHeRMdI7EQUEHUfIJqnF&S&2V$bfN;-h-oob-3Zk70Pm7quoa-(C2~QdcgE;n;d8E^lUo9 zGWP=A(eHO#ak;7hIhIylF03Iw%KQ$5+1cT#8iP(--4UMqEO(6c>Lu$JY>6~1o}C}0T7A*h?M?-_4N{SZYA0&5FkcI^FL%q@o> zGv5scgLu}yaxtC|f&}s#d8tZI$o3OA|FeDntlRBesbW3ql%>RmIxR3LN+Fw0}~G-UL6_bwIzPGjj+~k%?_%FXse}iJGLeo-Hh#Xa5@k$im!JZr8S58)fZ0LveqJfwlu@QdTh%DqX_QRgaCWtP zPJ>cY&7zy&uDo=MR0{Qt5Rcf`hPwwQ>nE|dKRzfn2Ra$hQ2P&exo|Phl9cg|@Z7Fe z((}RLMou3rg5PC@cWd>0J;t&=onjgS3V4Z;i$*618HZY`XS_;FFTt9;bk*En?r;0RLqW{+8yz5Yb$X#;v}e@ zJWw)^_qg42Dk<=w3$gqS-PYbE%xk4`EJ;D4qy6A{MxiiHXrzVD8ZdLdA;2n~r1mMr zZ?};ZCrhQXy<#%9pz!=(8VGLqWE zUk#R|Llx`akbPUu^1?TgE!@FnrXRxeERjUOFx@V616W9SylxRs}#Y{y?o0s-m-xIu3C9Yz! zmAmQWNmJH)WJw9UVaM+HG|N@a)vF^7RwHUQsB=uSL7l75G0j9*NV|8SZ_ul@wA}R0(9oN~ zYiW1mQG@B7)X;3k?u%*+GXB(A^4=Vo$U7ns=k5U>CF}L+3^*QE8lmHk_-2|Z^w%#w zm8YGcNGOHk&l*-WP75Rvf^XcHjGX*z;VtG|0)a1Wq`&np%a!S3{)`Vw)=4ynI*=2$ z=iV^5$D_RsCJt|oO(zA3+jzmdvx7)9@;jbfnpD2T`6Dy#@l>+E>Z>>04u~KReAyW# zl)Eq$1+yKOdAhTZs|L8}OSysG8bKq{&2f`eJ-{9k@?k=kAHYCjvnAhxKj~|$?O>9S zcHb7DxwB*V6Z5Aud+}ohcHEO6s`V|st%q>LNFF00xnS=meR6P~l5KUF8pN{1*1Xzc z+d+jY;waLjAy+j5v}VQV zMI4*#s^adw#m4di0);KP%arc|?NVw?dJ=?^^@pr&DZ|WJO(!!|GtD$kBcYP-VAE|p pVc0gLl_TuGl0lq_QGj;C+00bzu7UquO6Ex~1Dr@;<%Vy=tBv_#6Sm3d^tPB_~E7n^rLGGK? z%JC4|YDL*nNLgsjW84h}__?mPOZU$a6p&VBep*KgIZQtINz5T)$b-oIyO^A!Iy zHP#-Ihn4WY&7U;3R4*jpGm)UY`PF4~#(J)Et8X^~DF?4geX0K{+u@>G$syphj`lf# z`5J*PJ+0=*fQ}*r%mP_UuEs9=G>4-ngZOtWqgwfvc?zoVZwl zH$KO4Y(2R5I>r+V8&$ja@_6+PQ17dwJR#}Jc+|~}o~P*?kng-OP!70U9^VI(cK00I zW-{mvn=E#i#*gjIF3Li|sDaaQkAb0HJq#~mzV+oTWH!g+XH^=;t{x^%K zBWhz7riTkTMmgcW9i(cBX@dARM)*SHx6^AAbvpVY;X*Uq-h$wK!z*o;@=AhpYCa z=eo{-siAz)LFX#QWwqUo)|tHpQP6my54~w7k|i-;FN3^?2C|BR=jBO{P*@_!lkWfX z=Y6oF1YFed)7*wv$=wV5FYoIO4lba$XN@P8=fuYxHlp$;} zXCJ<$on9n@-eN*&AB6W;mH3GXBB7b#KRuI>X-cH0Phg%%MQHZ08^Vsgcp_1_MZmTF z$W=Ep{c-bhfQWu&XGK6|N9z}2yztEjam9G zcl?*abWURtSMoVYYZVz|H#)+o{V-xe2~+UQWoQ`X{4X)=MHS3@QDStq=9<4|BUMzk z$j4J6WdR%;pYW#wOM~O86W~S%7zZDuE0q1_gI5xreK;W)4lvUCExy(h#YQKt+mECU z#WVut?5=F*B|0+TxrGq|QECX+J9_y;kf zlxX)K|24>eT=M?_#|`SmI zc8_Z6;FWAYzl4GY!FHj^Q~7&(9%1#`4I@99YoZ+Mw9>dwW&wD13M$Y+iehg%`Yp4#nG#tRNbvr3y?Na-;S&S{DPDmrI}IDf?Wq?E^u87 z_Avhb_3CTGg#n`TUOV#qT`)>CKX~j|_X$~Xa?tZk?JGAkLb9T;S6!uB0DxP^5>1x-M%PZl4<8}0A9^4Rb0R!x?1OwL0>mICnc_n3v z+=Eb^yev^XPLbe`BU5{BdZ@TsR7K_gHtWANv--FM@d8qdoFawb`T5Z1FJl%W?m)~B z_E%hk4aR2X^drS<3!~s~1rbE9CQBpwPG1o-nC=>U(t>HGZ;lju+vl+W^@7)P@>I-J zf9fUE1t_G!Xgl?m@m;bE`}Ave&62WNdE|2htbO15rGC)X1lfM3jsnu}*QLrN2p(23 z{pu~jF{}=}`Sb7d&yZ&)xFe6rGPGT*XrJ2jeziEoGeDGCo&Th=WejBf(b428QqvlC zkc2n&uC-@o2r!_5MD66;;Mw>#?IQELoTd+%oSnVrnB-5nE8tSg4>icN{?rpI65sjS z6O&IrY>$;h0}dN9<*`pkk6b_-CwV}P@0TM}x^Fn&eWtHuMM@F~2SK;;GKB~Or{F3M zBf6+^?xRoLp2|-cikraJ9I-1%3o1({=<^tWXBsp1(ZTA#(LRqR8wu2uN$3H3&G?=I z41)$pUj_d;X8%yW%1zrC;j);1#7;<^%C6VYe()01>aZDj-xZzFKC zeh8K6IK_%hR=0pc>}h?@ z?b>FoEu&&Ks0pslNyj9HpK4lsxdR}X6Pd4L_xhtD(A+(#J7}@Y zO}O-$k#v^hFaB@RhZm2LOTD!j&2DzjE=`CRv-#T4;bdnng)Dys8GXn-a(8a63Ggqi cqoY|6-RxwxK!HL1;iChvwY0OSIPVts7k{#n!Ta07x8ngrD5rF@Hu> zWE)#7y}JMaG0<_i&FL`e@;LVN(7IaFDn}~aUH$$OxM^IS*bS6je^Ji~zfhyas~HpZ zMUj-MJiq$*LG$6^PUO{U7>!)R3^Ol9)+-IMP~WQDisoBR$dCZ_wtH^mzXD30w&dBp zcRyI?Mz6Lk5Bc4)_~~;ay(=5a5tz{FprXeooeus1>?zNMkA1hP{h8p824h~5yD}A~ z*2Bx*jd}2<77?LrKsg$?YAD@vL{f+@JfVt_C(Bkmo55VI3o5E>sHPGv(Z(xJ5JoSH z0c_z%o``Wd52oO$NWj7vg|iT;m=}@)m22Z00>xY|>p7!|a*=K(^9&%Hl5O~tiY7)# z6rV4@>L^Xv!hc;cPZ04tlF~U4U7qwNu5u1CLRpRCGG>LPJ<>;~dKJ)X9fo;fQs2c3 zs~!}I`G-X#VJ|W9MbRgadY>vIGORWvCJipl&Ou_I+(s)dvoTSn619+Rm4{LFjTl?8~>brBxeilCfHK2rVNZe_2f4*#XPqZ&Zr z=0{*xgt$NTM%`F)TW3Do%tC0)R>U65sR;H`zEZmW_)OWCs?YcPi9v(WZ95@8b9bbl zA?(kXuJ(yN9)?^2U=?$g=cXGdoXBspl=Ql+KxdTZ;sb%|T|XU$YePm7i8+qx-fBw> z$CAyBpwTI$S}Uh|kjsw6Ol1>kV$^H#d};y|rPLNsvXdFa=&awkEM7duap?F zANMkGy=f4Y-iR_KZZa(DE@+ZO)=Ekfq=-%{seY7sB^9$=4%m(QgRw(ZKsGy}ZexI#-g{gNf++P~-|#xQLUdJUa49xdVOVZ%^^UU_KC-w4K&nkLK-v#BsMuWoz`07tE-_sFVr=H*)W}Wj?rs8|4E+4 zwXGGQjYlOhWZu^2d0P5R$gSmKJ2WH_HebD}OTGFS-3es(b$W2PWAd2es6R+G%v-PI z!S4jIvnqX@?#udE6Xj{ae)=iZsUxt$)g0A=g$ZX;8OPhVKE^0up>@qtKormCPupoJ z+$Jiv;;V+|vVNT3_Uyq!x;V3pu=Qe1ebVKGT{brJ%kE2Y;LF~F(w_b6B;G(dk|7r7 z5sbYe6dodQm>};yyy!(v)y^2{>tV=8Z+2u83L)T%oLK@On;p-})l9*uSxg0Ayv8F? z2&<(&f2BDI9va~?4l&(j{9E@K@w3d0$Jkj*TG|-m!XTT&4eeY)M(3>vDr0Q>#3=^5nejL~mi9Z;JO2^bTgp!(AD~apMDZaF270wstp- zW-DHQiW-}$(M2T{%xmB` zQs4V(C7z23Hj*ke0iKl~P*=9$XSj|>%8U&8Q?{cue%3yn-LszgpYZ)Z8DXpL-B`o1 zTWD!aPV5TAIG(O+$kx1OWx~f>t1mePDPd(lK*Ox^LEDj-q}}Gbgn7en;>pBHPR}+^ z)ftRwnyNZH-?0oH=0pPJGZjD#16(z_6iSh~w9sMJJ6fTLq)HJP9HBSJH$`uV_~!TV z4*SdbldPA&v6p`KMO_u~#t=Q6C`f$`E<5ZRk9rZ64`C@9_xFeKyJ$V|1kDu zM+W|! zc3T&;>|KFyjzI&J4^yR3R+HjzL!_=zjm=43EJyepVBhSZdg!S?1Xd`-UJ-Z02G_n& ztNfc0S`)hk8EOkFM(|EFvn!A&-j^TXTRX0$MIO>p;!2tf(C751TimDSFZm01x<$82 zD0}S^$;Aflh#lGZVu1wy!n7y4w6{nF)ZGI;D`wG5)9Ra&rd@YV#_J$vN9H9i7ceYN zYna#@sj(D)bX`nymQ2-{Ht0uZrOn#Hoz6+<#C(smx0HR@33-Sih`Ze~(R}_a7=HG+ ztl#E|Ah3N6KHdM7l*Z5^!$?0`R!#CpYA4$xueDXzmP!D~=uy$<>%MwgMgF=e6F%rj zfG65TP!7C`5+4?TD4$=@ZELn5`k_K_o*%D4;bJ)`|G(YikNkfw&NS{xE|jz1OLE)p PMS$b>NccP3OSpdntctt& literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Machines/computers.rsi/ai-fixer-purge-2.png b/Resources/Textures/Structures/Machines/computers.rsi/ai-fixer-purge-2.png new file mode 100644 index 0000000000000000000000000000000000000000..56dfc2f2d82c4390eb527da96c2df0d34f6ea70e GIT binary patch literal 2406 zcmZuzdpy$(7oWtu%O$Z^gnH6bxs384WURT9B$vlrHWnqhAT9 zKNi*E4zMQZC^Pgl3T9ZyqCmCnZ`~^KDem_5^v($=|1s-(>wDOj>Qt!{=4nDmgxk|A zD)>vM0e(`_a7JPb&x1Or&CFz z8ezTl)50doUTl_KEf}Jm9ec2AL$d{=jj@qDuBH_fV~uiFEFnL7?heX1RCy2m zyHOin_Lu~9@NcYWaM=SRj@XBxE<_}_C_JUn+Y8H=P!t+%lrLeKTm9ZNWt3_l zlY8LQ>C|99kE(AZA@Mo|V@EUt3NTaPeoYxM+3jij_6J88sM&00>-751OlWu|Ki>Xs z_f1%tl-lQR92S*4mYDO7+m{e?q;R`J<&4`dPw++g`l@~MFRg11nw}XEDkfGkG@z(- z=1enw(nqq}oATLnptYazmy&w|fXPJ2{}ikBFqwUXrAcZWFbLu}G|aDl=C}+hVujKp z{elq5!+0aNk)jz+Wf^PE#CXKETgNdcAftDDb+?V!6>YX?6F`?foObt6930ZzcBtk! zKF$74xN-0KhB;1Fy)n@#wln&nv?cE;ve*ir@MfHLYHb%8p7&P|o$GJ&m?^GNQ_K)o zjMIRfeedg;__Db4>@JbZTf<%JL(kwK+^kIW=DbM1@0+}NOvuU*=%>6J=y+kju%MNJ z_N(+c7TpB%P*s_BDP9P6Bka-=z4BSNoec$W)HqCtPLadsnT_|s8pn)ppUPQN^IA_s z8Hex$`~Q3(%h@_8K1d+u1Q4U3w#fO1C*ZUth$cPF9IMG=-tBf}srK0@S?BfirmH$N z#xX2L)$}s-G=c=8fGAq4pfNn!0IT#45SvSYV+E?>Vao0;Jh`W73Ls(fZARVoz|{%fIs`{@6`bljus5_~*Yo~A$>%S;L5 zle6*-2MHe_b$a~6F5mslN|fG~)DUO2o*aWe#pz4x`ZkpBe~qp>$G%qxl}Vb+au=JlU6%gx#_`2v5#LadVj-lnAbuoAmKOT}d;*D)1 zVM9+Eu7AB;X0_$43$d)_;-1GpW>DIC&8~L?1F(ksE1>kW5C%M$+`8zvU~OALf~Xg8 zeLiS6=v5yBxhE4rrYAE?Iy3}|CmU+dpQ%ljr*g|fT2<;g4e}9J%ADuJqc0-u_^1z_ zt1%%5SJjGjNbAs{Pcw#4<#e|oe%=M}6s|_j z!eIc}@cRv?0Y>8m`pF@O=@=IfVANx=V`lIB?zetVD|5+~Yk}eX14~|IFucCYiQ{%F zU-+w_^S0}pjzIFNRU9br2HBdc#WdAuOy`qu;h2)RmfZcRfaXAOG9+;l{CaLPBIBJd zmeZ;UnT6`$kdxk$hwi&89TL5;6_J zkJ{fU|)U*o+(lClB5&r9HjOsP`mz%1}n_NsK(rM8CH zz4{R}#TSC(EvCMU8Xr5%{gmuJUMz8L6wRtUG$O6tl|O6Y7HYu_u(2B4~7ZQ?#U~zD?M2 zziF644_XwfZ`15~{rRmkj=uA%m9hnqJRUhe&1N0V;vI&NJ)cirocL7(oiYmqPAgjn zVwjur;Ia@9i8={3=7K8fBZdB{!jaqS#G_GbafFx};&R(!-_+^)f<9}2xI^@7t=?+? zuhu)H5AEp+E&OJH2~Dlpid`E^#vI*Eqld+bn$0H1kh&fv%NdDA6cu z+DUFICAXepx%T*m+2tC$xcvc*lOwWu=nho%{bwW+TNd-oq0K&3_oTWYrB$WU0snA9 zn-g!3(Rk~|0ReeKUz*CB^0}{sryt=*OeAut7-52PasQETa&tT H*u=j9U~jsR literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Machines/computers.rsi/ai-fixer-purge-3.png b/Resources/Textures/Structures/Machines/computers.rsi/ai-fixer-purge-3.png new file mode 100644 index 0000000000000000000000000000000000000000..4f6dbe43d1159d72c09d21990bf772a139f01bc4 GIT binary patch literal 2373 zcmZuzdpr{g8{XuWSS< zZNZegx9d}lY?@Phi0f~=SW{iSUlo4m11!}k4;_90k5Wnaf*cR%p+NJY1<~~49i#0C zOQRu5qbvX2>hSY55;3cbyi{yFTxAT&ZVs zJ>VJqDCtuD7sjKpu!owF!zUiLrtSK9PMU3m@r&5##pDtd>4Ro&05eRjNlNSu zQ`s^Jitt1798|OvjiQ7rpFFiwK)H@@@>* zhhtzs%A89iZusqt1ZF=gyCrwbZQawEgG?%dZXZ-FD7eMSzrNVb@}O*L4VPsCTz`<9q4u(cdZETK-(Le(>sApB9$<4nbF3# z>%PA3>W2Q5>J_V`W1#vasm5U4A?IQL$Gp4<2zxnR*Dyx*o=I7Ye#b3;mJ1lZlw9_Tu=EH4`hwE-coxmI2OinS_2WNmIgrBx! zXH#@hW!LqS(Q|b-ZhoALhx5`AGmFQowjkZ5O|8U|T;$OAKbiLNbSW2%Gr>ssT9c$l zZlylKK-|au`}9+~E*u@-%2n8Ca!jjN&twpC+UGkzLDV6xOuKn*;c6jPdQ_jk z>rKw23Ct`sVC-|b9x_LIWxlrG8A`_HUF6~4yy_Yq2*Q(TGBc-%(-MIuTKIpP>z@w$ zKk!kgKMCQ0Si^7iYJ3N0(dDCLT1icAgL;v~gV8FnT86q3n|7WzA>|sZcchQt0UjDB z;Ii}BL-Iw~v);aEX}=mpec$T}q^Nu*3EveWb6>7Sp+&s~fM|&+9 zW@oYUtkW7YCZ+*<#2@a`kzMk%5uK9s7p|LKHZ?+|0E1uY#*{nQ!umrOzqEo1sZ60U z)Hkl?qHlgnhHvBWIeB#F;f5NnYQB+ z(LD(d28JTXl zDGd{Qvs{jM1L$t4K0x?^I0t@XS)}L_;t5=cCqjd|zqf@)I#Okzo>SP{i4@ylXtGR1 zJyy;xHQwI113w;96ZEp;Uy=OZf?3HvVV5UYb9{n;!pc~u*s2DZ7FJ~z;e~9oXuXjm z%Q}$3{!; zHcCUgk|z1#@=b^S-u)vKKjF271Xw1f14nG#z47{|&Tk&cmV9zEm zQNuEXTCCQYs4;F6u1xHw^rrafABcFzs zv}Pz1(X^^#)jxQP<1M*8eY8>^gfpTtNhU`B_8Py8HF%^*mEcD=SH=N#1+$mM%=znH zSO%xzZLAP&YGYXZvDa=@-Yb)+M^&>oGtn6`aa-wx6!=ha4!Io+g1GU%y=iHq>)PvL zoNsmmXj3Po=%Lf_2Z;u+kXIkD)w1$c`3&t6DP=r2hPa{KgsJqk++dk4|5`1VezMQF zNO1|jd#b0wNaKa|<{;7=^Oh>_cWqb6`R@MemIDNG@I5mHbA%%DQ~o4Tf`c9C@7rQ2*!ShmTrflc0002^uau$& zN9|FV=4Nj5)Dww7khkzkMH5iIBsdWW;x;E{u}qVB3y*F_0DlqD)93Tq*z4oV(Y5pL zkkfalGU*(R@5b}}*ls*8YzdTAKfvibu|ZxMc-j)oN>mA|3pmMu!zZsIL5fW?f13SB z1VUd1sHVIO=2T=R!vkr8jb$lRI#Y zOK=BnnB|Z*HvvRM%wk3*xC1xLdO(}2fXbvp%wk5$VbmUl%wlI}2U-P43EbvXZ#1+? zs5crRx4ClgL<&b^A`ryJ%xL|~lc7saopQ+lf92=$6n|8*&tLgwGGJL<|C%3~%YcvJ z8;L;BvbxqUptWuONicw%cUfIiYulu6`qJMANC~Ep!5ixXrkj~D2{QQUW@h$lP)g8E z9>FUKIIMk@6jUj}sI_Pl;4QpTuhupGBGjvOmHzmkR05_Ys0N>FU#`0qF4F7xeo^;0 i7XSbN02u%PcghdaA>({YMje*`0000I-Rx?rg>P}GPNTWDEM;3n;O6yq zr|;q7{zuz=cHv&SsE#{7`acJ6-+iBhH|l#Hj6?y_;9j}_qJuoON`9@8F_p7O-2lHc1p9 z=|L4J2usA)fPd|F+z2GG&t@LP3XtZ7b^0BOq?JXtH%S_>IF4>(0<4Q*+D%rL%sR%6 z7{f3O!!QiPFbu;m4D)L^)W3TZDDQG&`k=HWyuMeu2wvYy{r@luV*vm_SfW%ByuKG^ zJ)qr&BtUiCfv`j=)4^#wp|Hfxuk);s1OV0|NL!-bXnzzYLcP%lr7g+91B9b76)1=S zE&ZtIgAtQcCk-hBX796HM!}ToxP#gIjAX+&0~WRATKOxIe-bZOPf&rvqP8@)VJyI? zIm8_vN$E#H`(4zQ7&V8u#^LuaXI;{{KWPe-Edn+8+;G}X wSoBu-m_Ek=pzv>jqI@w7!!QiPFw7t23%%Ce)pBab7XSbN07*qoM6N<$f_ttXg8%>k diff --git a/Resources/Textures/Structures/Machines/computers.rsi/meta.json b/Resources/Textures/Structures/Machines/computers.rsi/meta.json index 28b6b7fb79..ebb9a875dd 100644 --- a/Resources/Textures/Structures/Machines/computers.rsi/meta.json +++ b/Resources/Textures/Structures/Machines/computers.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/bd6873fd4dd6a61d7e46f1d75cd4d90f64c40894. comm_syndie made by Veritius, based on comm. generic_panel_open made by Errant, commit https://github.com/space-wizards/space-station-14/pull/32273, comms_wizard and wizard_key by ScarKy0, request- variants transfer made by EmoGarbage404 (github), xenorobot by Samuka-C (github)", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/bd6873fd4dd6a61d7e46f1d75cd4d90f64c40894. comm_syndie made by Veritius, based on comm. generic_panel_open made by Errant, commit https://github.com/space-wizards/space-station-14/pull/32273, comms_wizard and wizard_key by ScarKy0, request- variants transfer made by EmoGarbage404 (github), xenorobot by Samuka-C (github), ai-fixer-progress and -purge sprites made by chromiumboy", "size": { "x": 32, "y": 32 @@ -75,6 +75,246 @@ ] ] }, + { + "name": "ai-fixer-progress-0", + "directions": 4, + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1 + ], + [ + 0.1, + 0.1, + 0.1, + 0.1 + ], + [ + 0.1, + 0.1, + 0.1, + 0.1 + ], + [ + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "ai-fixer-progress-1", + "directions": 4, + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1 + ], + [ + 0.1, + 0.1, + 0.1, + 0.1 + ], + [ + 0.1, + 0.1, + 0.1, + 0.1 + ], + [ + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "ai-fixer-progress-2", + "directions": 4, + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1 + ], + [ + 0.1, + 0.1, + 0.1, + 0.1 + ], + [ + 0.1, + 0.1, + 0.1, + 0.1 + ], + [ + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "ai-fixer-progress-3", + "directions": 4, + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1 + ], + [ + 0.1, + 0.1, + 0.1, + 0.1 + ], + [ + 0.1, + 0.1, + 0.1, + 0.1 + ], + [ + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "ai-fixer-purge-0", + "directions": 4, + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1 + ], + [ + 0.1, + 0.1, + 0.1, + 0.1 + ], + [ + 0.1, + 0.1, + 0.1, + 0.1 + ], + [ + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "ai-fixer-purge-1", + "directions": 4, + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1 + ], + [ + 0.1, + 0.1, + 0.1, + 0.1 + ], + [ + 0.1, + 0.1, + 0.1, + 0.1 + ], + [ + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "ai-fixer-purge-2", + "directions": 4, + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1 + ], + [ + 0.1, + 0.1, + 0.1, + 0.1 + ], + [ + 0.1, + 0.1, + 0.1, + 0.1 + ], + [ + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "ai-fixer-purge-3", + "directions": 4, + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1 + ], + [ + 0.1, + 0.1, + 0.1, + 0.1 + ], + [ + 0.1, + 0.1, + 0.1, + 0.1 + ], + [ + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, { "name": "aiupload", "directions": 4, From fb710208890366ce294bdf794969cde32ea47c7f Mon Sep 17 00:00:00 2001 From: PJBot Date: Mon, 15 Sep 2025 14:19:40 +0000 Subject: [PATCH 041/143] Automatic changelog update --- Resources/Changelog/Changelog.yml | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 4c36cb1d79..d3ee4da8cb 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,12 +1,4 @@ Entries: -- author: Nukesthestation - changes: - - message: The maximum character limit for paper has been increased to 10,000, hop - mains rejoice! - type: Tweak - id: 8454 - time: '2025-05-10T15:12:18.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/37270 - author: Morb0, ssdaniel24 changes: - message: Added a Discord webhook that will receive station news @@ -3945,3 +3937,20 @@ id: 8965 time: '2025-09-15T07:19:25.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/37712 +- author: chromiumboy + changes: + - message: AI cores now require power to function and can be damaged/destroyed. + Any AI inhabiting an AI core when it breaks or runs out of power will be killed. + AI cores have an internal battery that can provide up to 10 minutes of emergency + power in the event of a power interruption. Damage to the AI core itself can + be repaired with a welding tool. + type: Tweak + - message: New AI cores can be constructed using the 'Build' menu. The parts needed + to construct an AI core can be purchased through cargo. + type: Add + - message: Deceased AIs can be revived using an AI restoration console. A spare + circuit board for this computer can be found in the Research Director's locker. + type: Add + id: 8966 + time: '2025-09-15T14:18:32.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/39588 From 584f0aaa7bd4bd92763c1f71f78c003e9fbda58d Mon Sep 17 00:00:00 2001 From: Myra Date: Tue, 16 Sep 2025 00:34:50 +0200 Subject: [PATCH 042/143] Clerify salamander description (#40379) * Clerify salamander description Had someone in the help channel get confused with the previous wording. Thought this may be better. * "Review" --- Resources/ConfigPresets/WizardsDen/salamander.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Resources/ConfigPresets/WizardsDen/salamander.toml b/Resources/ConfigPresets/WizardsDen/salamander.toml index 35326dc0cd..0877fc5577 100644 --- a/Resources/ConfigPresets/WizardsDen/salamander.toml +++ b/Resources/ConfigPresets/WizardsDen/salamander.toml @@ -1,7 +1,7 @@ # Configuration preset used on Wizard's Den Salamander [game] -desc = "Official English Space Station 14 servers. Medium roleplay ruleset. you must be whitelisted by playing on other Wizard's Den servers if there are more than 15 online players." +desc = "Official English Space Station 14 servers. Medium roleplay ruleset. You must apply for a whitelist on the official forums to be able to join. If the current player count is less than 15 players then anyone with enough playtime on Wizard's Den servers may join." hostname = "[EN][MRP] Wizard's Den Salamander [US West]" round_restart_time = 300 From 731d6ff53c5dd4c0bd5e4da23f391e02b633c7e0 Mon Sep 17 00:00:00 2001 From: PJBot Date: Mon, 15 Sep 2025 23:32:58 +0000 Subject: [PATCH 043/143] Automatic changelog update --- Resources/Changelog/Changelog.yml | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index d3ee4da8cb..0c8bebd3b4 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: Morb0, ssdaniel24 - changes: - - message: Added a Discord webhook that will receive station news - type: Add - id: 8455 - time: '2025-05-10T18:21:02.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/36807 - author: EmoGarbage404 changes: - message: Fixed being able to toggle lighting as a ghost. @@ -3954,3 +3947,11 @@ id: 8966 time: '2025-09-15T14:18:32.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/39588 +- author: Admiral-Obvious-001 + changes: + - message: Increased the cooldown of ninja glove stun from 2 seconds to 10 seconds. + Stun duration remains unchanged at 5 seconds. + type: Tweak + id: 8967 + time: '2025-09-15T23:31:50.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/39707 From d8ab007c50abd516eb41c1617aa7803d5aa58e98 Mon Sep 17 00:00:00 2001 From: slarticodefast <161409025+slarticodefast@users.noreply.github.com> Date: Tue, 16 Sep 2025 09:59:11 +0200 Subject: [PATCH 044/143] Add missing admin changelog entry (#40395) From d80f53bb48e7408a7c3e2f26f4a23b9d12b749bb Mon Sep 17 00:00:00 2001 From: PJBot Date: Tue, 16 Sep 2025 08:00:22 +0000 Subject: [PATCH 045/143] Automatic changelog update --- Resources/Changelog/Admin.yml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/Resources/Changelog/Admin.yml b/Resources/Changelog/Admin.yml index eac8a22cbd..531f0af070 100644 --- a/Resources/Changelog/Admin.yml +++ b/Resources/Changelog/Admin.yml @@ -1395,5 +1395,13 @@ Entries: id: 169 time: '2025-09-13T15:53:48.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/40324 +- author: slarticodefast + changes: + - message: The listplayers command now requires PII permissions due to showing IP + addresses. + type: Tweak + id: 170 + time: '2025-09-16T07:59:11.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/40395 Name: Admin Order: 2 From bc0691822a35267023cad46885c7db2ddcc6db1d Mon Sep 17 00:00:00 2001 From: chromiumboy <50505512+chromiumboy@users.noreply.github.com> Date: Tue, 16 Sep 2025 09:09:38 -0500 Subject: [PATCH 046/143] Bug fix for Station AI damaged accent (#40399) Initial commit --- Resources/Prototypes/Entities/Mobs/Player/silicon.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Resources/Prototypes/Entities/Mobs/Player/silicon.yml b/Resources/Prototypes/Entities/Mobs/Player/silicon.yml index 845971be35..50a2e0b58e 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/silicon.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/silicon.yml @@ -71,6 +71,9 @@ title: comms-console-announcement-title-station-ai color: "#5ed7aa" - type: ShowJobIcons + - type: DamagedSiliconAccent + startPowerCorruptionAtCharIdx: 4 + maxPowerCorruptionAtCharIdx: 20 - type: entity id: AiHeldIntellicard @@ -431,9 +434,6 @@ - type: Speech speechVerb: Robotic speechSounds: Borg - - type: DamagedSiliconAccent - startPowerCorruptionAtCharIdx: 4 - maxPowerCorruptionAtCharIdx: 20 - type: Tag tags: - HideContextMenu From 377dd6b36cc3f19f020cb7d8040d92162db3b208 Mon Sep 17 00:00:00 2001 From: ScarKy0 <106310278+ScarKy0@users.noreply.github.com> Date: Tue, 16 Sep 2025 17:35:51 +0200 Subject: [PATCH 047/143] Add intellicards to AI crates (#40401) init --- Resources/Prototypes/Catalog/Fills/Crates/science.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Resources/Prototypes/Catalog/Fills/Crates/science.yml b/Resources/Prototypes/Catalog/Fills/Crates/science.yml index 4ed07d607f..0338962956 100644 --- a/Resources/Prototypes/Catalog/Fills/Crates/science.yml +++ b/Resources/Prototypes/Catalog/Fills/Crates/science.yml @@ -34,9 +34,10 @@ - type: StorageFill contents: - id: StationAiCoreElectronics + - id: Intellicard - id: SheetPlasteel1 amount: 4 - id: CableApcStack1 amount: 1 - id: SheetRGlass1 - amount: 2 \ No newline at end of file + amount: 2 From 138ea680763208a25bc943af63860a299e7d3ac7 Mon Sep 17 00:00:00 2001 From: PJBot Date: Tue, 16 Sep 2025 15:36:59 +0000 Subject: [PATCH 048/143] Automatic changelog update --- Resources/Changelog/Changelog.yml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 0c8bebd3b4..ee394a8b08 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: EmoGarbage404 - changes: - - message: Fixed being able to toggle lighting as a ghost. - type: Fix - id: 8456 - time: '2025-05-10T21:41:40.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/37335 - author: gorillagaming changes: - message: The space dragon briefing now shows the correct direction to the station @@ -3955,3 +3948,10 @@ id: 8967 time: '2025-09-15T23:31:50.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/39707 +- author: ScarKy0 + changes: + - message: Intellicards can now be obtained from the Station AI Electronics crates. + type: Add + id: 8968 + time: '2025-09-16T15:35:51.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/40401 From 972adcee21d9b25c2ca63b90c2649bd564fb6f9a Mon Sep 17 00:00:00 2001 From: Winkarst-cpu <74284083+Winkarst-cpu@users.noreply.github.com> Date: Tue, 16 Sep 2025 21:29:48 +0300 Subject: [PATCH 049/143] ``NarcolepsySystem`` refactor (#40305) * Refactor * Update * Update --- .../EntityEffects/EntityEffectSystem.cs | 2 +- .../Traits/Assorted/NarcolepsyComponent.cs | 24 ------- .../Traits/Assorted/NarcolepsySystem.cs | 59 ---------------- .../EntityEffects/Effects/ResetNarcolepsy.cs | 2 +- .../Traits/Assorted/NarcolepsyComponent.cs | 44 ++++++++++++ .../Traits/Assorted/NarcolepsySystem.cs | 69 +++++++++++++++++++ Resources/Prototypes/Traits/disabilities.yml | 6 +- 7 files changed, 119 insertions(+), 87 deletions(-) delete mode 100644 Content.Server/Traits/Assorted/NarcolepsyComponent.cs delete mode 100644 Content.Server/Traits/Assorted/NarcolepsySystem.cs create mode 100644 Content.Shared/Traits/Assorted/NarcolepsyComponent.cs create mode 100644 Content.Shared/Traits/Assorted/NarcolepsySystem.cs diff --git a/Content.Server/EntityEffects/EntityEffectSystem.cs b/Content.Server/EntityEffects/EntityEffectSystem.cs index 4e447c7fab..3a86941a34 100644 --- a/Content.Server/EntityEffects/EntityEffectSystem.cs +++ b/Content.Server/EntityEffects/EntityEffectSystem.cs @@ -18,7 +18,6 @@ using Content.Server.Speech.Components; using Content.Server.Spreader; using Content.Server.Temperature.Components; using Content.Server.Temperature.Systems; -using Content.Server.Traits.Assorted; using Content.Server.Zombies; using Content.Shared.Atmos; using Content.Shared.Atmos.Components; @@ -33,6 +32,7 @@ using Content.Shared.Maps; using Content.Shared.Mind.Components; using Content.Shared.Popups; using Content.Shared.Random; +using Content.Shared.Traits.Assorted; using Content.Shared.Zombies; using Robust.Server.GameObjects; using Robust.Shared.Audio; diff --git a/Content.Server/Traits/Assorted/NarcolepsyComponent.cs b/Content.Server/Traits/Assorted/NarcolepsyComponent.cs deleted file mode 100644 index efa3458495..0000000000 --- a/Content.Server/Traits/Assorted/NarcolepsyComponent.cs +++ /dev/null @@ -1,24 +0,0 @@ -using System.Numerics; - -namespace Content.Server.Traits.Assorted; - -/// -/// This is used for the narcolepsy trait. -/// -[RegisterComponent, Access(typeof(NarcolepsySystem))] -public sealed partial class NarcolepsyComponent : Component -{ - /// - /// The random time between incidents, (min, max). - /// - [DataField("timeBetweenIncidents", required: true)] - public Vector2 TimeBetweenIncidents { get; private set; } - - /// - /// The duration of incidents, (min, max). - /// - [DataField("durationOfIncident", required: true)] - public Vector2 DurationOfIncident { get; private set; } - - public float NextIncidentTime; -} diff --git a/Content.Server/Traits/Assorted/NarcolepsySystem.cs b/Content.Server/Traits/Assorted/NarcolepsySystem.cs deleted file mode 100644 index 159e953369..0000000000 --- a/Content.Server/Traits/Assorted/NarcolepsySystem.cs +++ /dev/null @@ -1,59 +0,0 @@ -using Content.Shared.Bed.Sleep; -using Content.Shared.StatusEffectNew; -using Robust.Shared.Random; - -namespace Content.Server.Traits.Assorted; - -/// -/// This handles narcolepsy, causing the affected to fall asleep uncontrollably at a random interval. -/// -public sealed class NarcolepsySystem : EntitySystem -{ - [Dependency] private readonly StatusEffectsSystem _statusEffects = default!; - [Dependency] private readonly IRobustRandom _random = default!; - - /// - public override void Initialize() - { - SubscribeLocalEvent(SetupNarcolepsy); - } - - private void SetupNarcolepsy(EntityUid uid, NarcolepsyComponent component, ComponentStartup args) - { - component.NextIncidentTime = - _random.NextFloat(component.TimeBetweenIncidents.X, component.TimeBetweenIncidents.Y); - } - - public void AdjustNarcolepsyTimer(EntityUid uid, int TimerReset, NarcolepsyComponent? narcolepsy = null) - { - if (!Resolve(uid, ref narcolepsy, false)) - return; - - narcolepsy.NextIncidentTime = TimerReset; - } - - public override void Update(float frameTime) - { - base.Update(frameTime); - - var query = EntityQueryEnumerator(); - while (query.MoveNext(out var uid, out var narcolepsy)) - { - narcolepsy.NextIncidentTime -= frameTime; - - if (narcolepsy.NextIncidentTime >= 0) - continue; - - // Set the new time. - narcolepsy.NextIncidentTime += - _random.NextFloat(narcolepsy.TimeBetweenIncidents.X, narcolepsy.TimeBetweenIncidents.Y); - - var duration = _random.NextFloat(narcolepsy.DurationOfIncident.X, narcolepsy.DurationOfIncident.Y); - - // Make sure the sleep time doesn't cut into the time to next incident. - narcolepsy.NextIncidentTime += duration; - - _statusEffects.TryAddStatusEffectDuration(uid, SleepingSystem.StatusEffectForcedSleeping, TimeSpan.FromSeconds(duration)); - } - } -} diff --git a/Content.Shared/EntityEffects/Effects/ResetNarcolepsy.cs b/Content.Shared/EntityEffects/Effects/ResetNarcolepsy.cs index 71d228aece..009cf914d5 100644 --- a/Content.Shared/EntityEffects/Effects/ResetNarcolepsy.cs +++ b/Content.Shared/EntityEffects/Effects/ResetNarcolepsy.cs @@ -12,7 +12,7 @@ public sealed partial class ResetNarcolepsy : EventEntityEffect /// The # of seconds the effect resets the narcolepsy timer to /// [DataField("TimerReset")] - public int TimerReset = 600; + public TimeSpan TimerReset = TimeSpan.FromSeconds(600); protected override string? ReagentEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys) => Loc.GetString("reagent-effect-guidebook-reset-narcolepsy", ("chance", Probability)); diff --git a/Content.Shared/Traits/Assorted/NarcolepsyComponent.cs b/Content.Shared/Traits/Assorted/NarcolepsyComponent.cs new file mode 100644 index 0000000000..ae94908925 --- /dev/null +++ b/Content.Shared/Traits/Assorted/NarcolepsyComponent.cs @@ -0,0 +1,44 @@ +using Robust.Shared.GameStates; +using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom; + +namespace Content.Shared.Traits.Assorted; + +/// +/// This is used for the narcolepsy trait. +/// +[RegisterComponent, NetworkedComponent] +[AutoGenerateComponentState(fieldDeltas: true), AutoGenerateComponentPause] +[Access(typeof(NarcolepsySystem))] +public sealed partial class NarcolepsyComponent : Component +{ + /// + /// The maximum time between incidents. + /// + [DataField(required: true), AutoNetworkedField] + public TimeSpan MaxTimeBetweenIncidents; + + /// + /// The minimum time between incidents. + /// + [DataField(required: true), AutoNetworkedField] + public TimeSpan MinTimeBetweenIncidents; + + /// + /// The maximum duration of incidents. + /// + [DataField(required: true), AutoNetworkedField] + public TimeSpan MaxDurationOfIncident; + + /// + /// The minimum duration of incidents. + /// + [DataField(required: true), AutoNetworkedField] + public TimeSpan MinDurationOfIncident; + + /// + /// Next time indcident happens. + /// + [DataField(customTypeSerializer: typeof(TimeOffsetSerializer))] + [AutoNetworkedField, AutoPausedField] + public TimeSpan NextIncidentTime = TimeSpan.Zero; +} diff --git a/Content.Shared/Traits/Assorted/NarcolepsySystem.cs b/Content.Shared/Traits/Assorted/NarcolepsySystem.cs new file mode 100644 index 0000000000..7bce80c703 --- /dev/null +++ b/Content.Shared/Traits/Assorted/NarcolepsySystem.cs @@ -0,0 +1,69 @@ +using Content.Shared.Bed.Sleep; +using Content.Shared.Random.Helpers; +using Content.Shared.StatusEffectNew; +using Robust.Shared.Random; +using Robust.Shared.Timing; + +namespace Content.Shared.Traits.Assorted; + +/// +/// This handles narcolepsy, causing the affected to fall asleep uncontrollably at a random interval. +/// +public sealed class NarcolepsySystem : EntitySystem +{ + [Dependency] private readonly StatusEffectsSystem _statusEffects = default!; + [Dependency] private readonly IRobustRandom _random = default!; + [Dependency] private readonly IGameTiming _timing = default!; + + /// + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnMapInit); + } + + private void OnMapInit(Entity ent, ref MapInitEvent args) + { + ent.Comp.NextIncidentTime = _timing.CurTime + _random.Next(ent.Comp.MinTimeBetweenIncidents, ent.Comp.MaxTimeBetweenIncidents); + DirtyField(ent, ent.Comp, nameof(ent.Comp.NextIncidentTime)); + } + + /// + /// Changes the time until the next incident. + /// + public void AdjustNarcolepsyTimer(Entity ent, TimeSpan time) + { + if (!Resolve(ent, ref ent.Comp, false)) + return; + + ent.Comp.NextIncidentTime = _timing.CurTime + time; + DirtyField(ent, ent.Comp, nameof(ent.Comp.NextIncidentTime)); + } + + public override void Update(float frameTime) + { + base.Update(frameTime); + + var query = EntityQueryEnumerator(); + + while (query.MoveNext(out var uid, out var narcolepsy)) + { + if (narcolepsy.NextIncidentTime > _timing.CurTime) + continue; + + // TODO: Replace with RandomPredicted once the engine PR is merged + var seed = SharedRandomExtensions.HashCodeCombine(new() { (int)_timing.CurTick.Value, GetNetEntity(uid).Id }); + var rand = new System.Random(seed); + + var duration = narcolepsy.MinDurationOfIncident + (narcolepsy.MaxDurationOfIncident - narcolepsy.MinDurationOfIncident) * rand.NextDouble(); + + // Set the new time. + narcolepsy.NextIncidentTime += + narcolepsy.MinTimeBetweenIncidents + (narcolepsy.MaxTimeBetweenIncidents - narcolepsy.MinTimeBetweenIncidents) * rand.NextDouble() + duration; + DirtyField(uid, narcolepsy, nameof(narcolepsy.NextIncidentTime)); + + _statusEffects.TryAddStatusEffectDuration(uid, SleepingSystem.StatusEffectForcedSleeping, duration); + } + } +} diff --git a/Resources/Prototypes/Traits/disabilities.yml b/Resources/Prototypes/Traits/disabilities.yml index c5356149f2..51993d3dd1 100644 --- a/Resources/Prototypes/Traits/disabilities.yml +++ b/Resources/Prototypes/Traits/disabilities.yml @@ -32,8 +32,10 @@ category: Disabilities components: - type: Narcolepsy - timeBetweenIncidents: 300, 600 - durationOfIncident: 10, 30 + maxTimeBetweenIncidents: 600 + minTimeBetweenIncidents: 300 + maxDurationOfIncident: 30 + minDurationOfIncident: 10 - type: trait id: Unrevivable From dfc7d183add0185b837a1cf0f1d24afb016fe2d2 Mon Sep 17 00:00:00 2001 From: ScarKy0 <106310278+ScarKy0@users.noreply.github.com> Date: Tue, 16 Sep 2025 21:04:50 +0200 Subject: [PATCH 050/143] Intellicards rename to AI stored on them (#40402) * intellicard name changing * review --- .../StationAi/SharedStationAiSystem.cs | 24 ++++++++++++++----- .../StationAi/StationAiHolderComponent.cs | 6 +++++ 2 files changed, 24 insertions(+), 6 deletions(-) diff --git a/Content.Shared/Silicons/StationAi/SharedStationAiSystem.cs b/Content.Shared/Silicons/StationAi/SharedStationAiSystem.cs index e109c23fe6..e9b2575e40 100644 --- a/Content.Shared/Silicons/StationAi/SharedStationAiSystem.cs +++ b/Content.Shared/Silicons/StationAi/SharedStationAiSystem.cs @@ -322,12 +322,30 @@ public abstract partial class SharedStationAiSystem : EntitySystem private void OnHolderConInsert(Entity ent, ref EntInsertedIntoContainerMessage args) { + if (_timing.ApplyingState) + return; + + if (args.Container.ID != ent.Comp.Slot.ID) + return; + UpdateAppearance((ent.Owner, ent.Comp)); + + if (ent.Comp.RenameOnInsert) + _metadata.SetEntityName(ent.Owner, MetaData(args.Entity).EntityName); } private void OnHolderConRemove(Entity ent, ref EntRemovedFromContainerMessage args) { + if (_timing.ApplyingState) + return; + + if (args.Container.ID != ent.Comp.Slot.ID) + return; + UpdateAppearance((ent.Owner, ent.Comp)); + + if (ent.Comp.RenameOnInsert) + _metadata.SetEntityName(ent.Owner, Prototype(ent.Owner)?.Name ?? string.Empty); } private void OnHolderMapInit(Entity ent, ref MapInitEvent args) @@ -498,9 +516,6 @@ public abstract partial class SharedStationAiSystem : EntitySystem ClearEye(ent); ent.Comp.Remote = true; - // Just so text and the likes works properly - _metadata.SetEntityName(ent.Owner, MetaData(args.Entity).EntityName); - if (SetupEye(ent)) AttachEye(ent); } @@ -515,9 +530,6 @@ public abstract partial class SharedStationAiSystem : EntitySystem ent.Comp.Remote = true; - // Reset name to whatever - _metadata.SetEntityName(ent.Owner, Prototype(ent.Owner)?.Name ?? string.Empty); - // Remove eye relay RemCompDeferred(args.Entity); diff --git a/Content.Shared/Silicons/StationAi/StationAiHolderComponent.cs b/Content.Shared/Silicons/StationAi/StationAiHolderComponent.cs index 221845d493..21ec67f004 100644 --- a/Content.Shared/Silicons/StationAi/StationAiHolderComponent.cs +++ b/Content.Shared/Silicons/StationAi/StationAiHolderComponent.cs @@ -11,6 +11,12 @@ public sealed partial class StationAiHolderComponent : Component { public const string Container = StationAiCoreComponent.Container; + /// + /// Whether the holder should be renamed to the name of the inserted object. + /// + [DataField] + public bool RenameOnInsert = true; + [DataField] public ItemSlot Slot = new(); } From bf18b5e26b9080ebfee3da46596dbe5f17f58593 Mon Sep 17 00:00:00 2001 From: PJBot Date: Tue, 16 Sep 2025 19:05:57 +0000 Subject: [PATCH 051/143] Automatic changelog update --- Resources/Changelog/Changelog.yml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index ee394a8b08..3e174b2f07 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: gorillagaming - changes: - - message: The space dragon briefing now shows the correct direction to the station - type: Fix - id: 8457 - time: '2025-05-10T23:35:27.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/37181 - author: pyvik changes: - message: New hair named "Long With Bangs" @@ -3955,3 +3948,10 @@ id: 8968 time: '2025-09-16T15:35:51.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/40401 +- author: ScarKy0 + changes: + - message: Intellicards now get renamed to the name of the AI stored on them. + type: Add + id: 8969 + time: '2025-09-16T19:04:50.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/40402 From 7ff98dd94fc0388fe6267bda0d68b7724d6e6268 Mon Sep 17 00:00:00 2001 From: Kyle Tyo <36606155+VerinSenpai@users.noreply.github.com> Date: Tue, 16 Sep 2025 17:25:17 -0400 Subject: [PATCH 052/143] Readyall and Toggleready commands to LEC. Fix an issue with ready button desync. (#38706) * commit * commit * change lobby shell string. --- Content.Client/Lobby/LobbyState.cs | 2 +- .../Administration/Commands/ReadyAll.cs | 37 ------------- .../Commands/ReadyAllCommand.cs | 32 +++++++++++ .../Commands/ToggleReadyCommand.cs | 55 +++++++++++-------- .../GameTicking/GameTicker.Lobby.cs | 1 - .../en-US/commands/readyall-command.ftl | 2 + .../en-US/commands/toggleready-command.ftl | 2 + 7 files changed, 69 insertions(+), 62 deletions(-) delete mode 100644 Content.Server/Administration/Commands/ReadyAll.cs create mode 100644 Content.Server/Administration/Commands/ReadyAllCommand.cs create mode 100644 Resources/Locale/en-US/commands/readyall-command.ftl create mode 100644 Resources/Locale/en-US/commands/toggleready-command.ftl diff --git a/Content.Client/Lobby/LobbyState.cs b/Content.Client/Lobby/LobbyState.cs index 867a7bb8a5..538266e1a2 100644 --- a/Content.Client/Lobby/LobbyState.cs +++ b/Content.Client/Lobby/LobbyState.cs @@ -186,10 +186,10 @@ namespace Content.Client.Lobby else { Lobby!.StartTime.Text = string.Empty; + Lobby!.ReadyButton.Pressed = _gameTicker.AreWeReady; Lobby!.ReadyButton.Text = Loc.GetString(Lobby!.ReadyButton.Pressed ? "lobby-state-player-status-ready": "lobby-state-player-status-not-ready"); Lobby!.ReadyButton.ToggleMode = true; Lobby!.ReadyButton.Disabled = false; - Lobby!.ReadyButton.Pressed = _gameTicker.AreWeReady; Lobby!.ObserveButton.Disabled = true; } diff --git a/Content.Server/Administration/Commands/ReadyAll.cs b/Content.Server/Administration/Commands/ReadyAll.cs deleted file mode 100644 index 530ba0e89c..0000000000 --- a/Content.Server/Administration/Commands/ReadyAll.cs +++ /dev/null @@ -1,37 +0,0 @@ -using Content.Server.GameTicking; -using Content.Shared.Administration; -using Content.Shared.GameTicking; -using Robust.Shared.Console; - -namespace Content.Server.Administration.Commands -{ - [AdminCommand(AdminFlags.Round)] - public sealed class ReadyAll : IConsoleCommand - { - [Dependency] private readonly IEntityManager _e = default!; - - public string Command => "readyall"; - public string Description => "Readies up all players in the lobby, except for observers."; - public string Help => $"{Command} | ̣{Command} "; - public void Execute(IConsoleShell shell, string argStr, string[] args) - { - var ready = true; - - if (args.Length > 0) - { - ready = bool.Parse(args[0]); - } - - var gameTicker = _e.System(); - - - if (gameTicker.RunLevel != GameRunLevel.PreRoundLobby) - { - shell.WriteLine("This command can only be ran while in the lobby!"); - return; - } - - gameTicker.ToggleReadyAll(ready); - } - } -} diff --git a/Content.Server/Administration/Commands/ReadyAllCommand.cs b/Content.Server/Administration/Commands/ReadyAllCommand.cs new file mode 100644 index 0000000000..a3fc49934e --- /dev/null +++ b/Content.Server/Administration/Commands/ReadyAllCommand.cs @@ -0,0 +1,32 @@ +using Content.Server.GameTicking; +using Content.Shared.Administration; +using Robust.Shared.Console; + +namespace Content.Server.Administration.Commands; + +[AdminCommand(AdminFlags.Round)] +public sealed class ReadyAllCommand : LocalizedEntityCommands +{ + [Dependency] private readonly GameTicker _gameTicker = default!; + + public override string Command => "readyall"; + + public override void Execute(IConsoleShell shell, string argStr, string[] args) + { + var ready = true; + + if (_gameTicker.RunLevel != GameRunLevel.PreRoundLobby) + { + shell.WriteError(Loc.GetString("shell-can-only-run-from-pre-round-lobby")); + return; + } + + if (args.Length > 0 && !bool.TryParse(args[0], out ready)) + { + shell.WriteError(Loc.GetString("shell-argument-must-be-boolean")); + return; + } + + _gameTicker.ToggleReadyAll(ready); + } +} diff --git a/Content.Server/GameTicking/Commands/ToggleReadyCommand.cs b/Content.Server/GameTicking/Commands/ToggleReadyCommand.cs index 34b504acbc..3debf37778 100644 --- a/Content.Server/GameTicking/Commands/ToggleReadyCommand.cs +++ b/Content.Server/GameTicking/Commands/ToggleReadyCommand.cs @@ -1,32 +1,41 @@ using Content.Shared.Administration; using Robust.Shared.Console; -namespace Content.Server.GameTicking.Commands +namespace Content.Server.GameTicking.Commands; + +[AnyCommand] +public sealed class ToggleReadyCommand : LocalizedEntityCommands { - [AnyCommand] - sealed class ToggleReadyCommand : IConsoleCommand + [Dependency] private readonly GameTicker _gameTicker = default!; + + public override string Command => "toggleready"; + + public override void Execute(IConsoleShell shell, string argStr, string[] args) { - [Dependency] private readonly IEntityManager _e = default!; - - public string Command => "toggleready"; - public string Description => ""; - public string Help => ""; - - public void Execute(IConsoleShell shell, string argStr, string[] args) + if (args.Length != 1) { - var player = shell.Player; - if (args.Length != 1) - { - shell.WriteError(Loc.GetString("shell-wrong-arguments-number")); - return; - } - if (player == null) - { - return; - } - - var ticker = _e.System(); - ticker.ToggleReady(player, bool.Parse(args[0])); + shell.WriteError(Loc.GetString("shell-need-exactly-one-argument")); + return; } + + if (shell.Player is not { } player) + { + shell.WriteError(Loc.GetString("shell-only-players-can-run-this-command")); + return; + } + + if (_gameTicker.RunLevel != GameRunLevel.PreRoundLobby) + { + shell.WriteError(Loc.GetString("shell-can-only-run-from-pre-round-lobby")); + return; + } + + if (!bool.TryParse(args[0], out var ready)) + { + shell.WriteError(Loc.GetString("shell-argument-must-be-boolean")); + return; + } + + _gameTicker.ToggleReady(player, ready); } } diff --git a/Content.Server/GameTicking/GameTicker.Lobby.cs b/Content.Server/GameTicking/GameTicker.Lobby.cs index 66c39ab469..6be7e3abca 100644 --- a/Content.Server/GameTicking/GameTicker.Lobby.cs +++ b/Content.Server/GameTicking/GameTicker.Lobby.cs @@ -173,7 +173,6 @@ namespace Content.Server.GameTicking return; } - var status = ready ? PlayerGameStatus.ReadyToPlay : PlayerGameStatus.NotReadyToPlay; _playerGameStatuses[player.UserId] = ready ? PlayerGameStatus.ReadyToPlay : PlayerGameStatus.NotReadyToPlay; RaiseNetworkEvent(GetStatusMsg(player), player.Channel); // update server info to reflect new ready count diff --git a/Resources/Locale/en-US/commands/readyall-command.ftl b/Resources/Locale/en-US/commands/readyall-command.ftl new file mode 100644 index 0000000000..e5642f5536 --- /dev/null +++ b/Resources/Locale/en-US/commands/readyall-command.ftl @@ -0,0 +1,2 @@ +cmd-readyall-desc = Readies up all players in the lobby, except for observers. +cmd-readyall-help = Usage: readyall [bool] diff --git a/Resources/Locale/en-US/commands/toggleready-command.ftl b/Resources/Locale/en-US/commands/toggleready-command.ftl new file mode 100644 index 0000000000..0dfd3a9b9d --- /dev/null +++ b/Resources/Locale/en-US/commands/toggleready-command.ftl @@ -0,0 +1,2 @@ +cmd-toggleready-desc = Toggle the players ready status. +cmd-toggleready-help = Usage: toggleready From fc89f231a55d6455d467439a8bd6cd9237ee3531 Mon Sep 17 00:00:00 2001 From: Princess Cheeseballs <66055347+Princess-Cheeseballs@users.noreply.github.com> Date: Tue, 16 Sep 2025 15:25:53 -0700 Subject: [PATCH 053/143] Mothership Core Prototype Cleanup (#40410) * I cannot escape bodysystem no matter how hard I try * Move 2 things --------- Co-authored-by: Princess Cheeseballs <66055347+Pronana@users.noreply.github.com> --- .../Prototypes/Specific/mothershipcore.yml | 20 ------------ .../Entities/Mobs/Player/mothershipcore.yml | 20 +++++++++--- Resources/Prototypes/Entities/Mobs/base.yml | 31 ++++++++++++------- 3 files changed, 35 insertions(+), 36 deletions(-) delete mode 100644 Resources/Prototypes/Body/Prototypes/Specific/mothershipcore.yml diff --git a/Resources/Prototypes/Body/Prototypes/Specific/mothershipcore.yml b/Resources/Prototypes/Body/Prototypes/Specific/mothershipcore.yml deleted file mode 100644 index 234f950a03..0000000000 --- a/Resources/Prototypes/Body/Prototypes/Specific/mothershipcore.yml +++ /dev/null @@ -1,20 +0,0 @@ -- type: body - id: MothershipCoreBody - name: "core" - root: torso - slots: - torso: - part: TorsoBorg - connections: - - right2hand - - right1hand - - left1hand - - left2hand - left1hand: - part: LeftArmBorg - left2hand: - part: LeftArmBorg - right1hand: - part: RightArmBorg - right2hand: - part: RightArmBorg diff --git a/Resources/Prototypes/Entities/Mobs/Player/mothershipcore.yml b/Resources/Prototypes/Entities/Mobs/Player/mothershipcore.yml index 1d989a462c..fc15fe0c0b 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/mothershipcore.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/mothershipcore.yml @@ -5,9 +5,7 @@ - Omnitool - type: entity - parent: - - BaseMachinePowered - - BaseMob + parent: [ BaseControllable, BaseMachinePowered ] id: MothershipCore name: mothership core description: A sentient machine that can produce Xenoborgs. Without this the Xenoborgs are doomed. @@ -163,9 +161,21 @@ - type: NpcFactionMember factions: - Xenoborg - - type: Body - prototype: MothershipCoreBody - type: Hands + hands: + hand_right1: + location: Right + hand_right2: + location: Right + hand_left1: + location: Left + hand_left2: + location: Left + sortedHands: + - hand_right1 + - hand_right2 + - hand_left1 + - hand_left2 # - type: Puller # use the conveyor - type: Eye drawFov: false diff --git a/Resources/Prototypes/Entities/Mobs/base.yml b/Resources/Prototypes/Entities/Mobs/base.yml index a0b2da3975..e2e918152a 100644 --- a/Resources/Prototypes/Entities/Mobs/base.yml +++ b/Resources/Prototypes/Entities/Mobs/base.yml @@ -1,17 +1,14 @@ -# The progenitor. This should only container the most basic components possible. -# Only put things on here if every mob *must* have it. This includes ghosts. +# The literal bare minimum needed to be a controllable mob. Cannot move but can interact. - type: entity - save: false - id: BaseMob abstract: true + save: false + id: BaseControllable components: - type: Sprite noRot: true drawdepth: Mobs - - type: MobCollision - type: GravityAffected - type: Physics - bodyType: KinematicController - type: Fixtures fixtures: fix1: @@ -25,11 +22,8 @@ - MobLayer - type: Clickable - type: InteractionOutline - - type: InputMover - type: Input context: "human" - - type: LagCompensation - - type: MobMover - type: Actions - type: Alerts - type: Appearance @@ -42,10 +36,24 @@ - type: ContentEye - type: CameraRecoil - type: MindContainer - - type: MovementSpeedModifier - type: RequireProjectileTarget active: False - - type: StunVisuals + +# The progenitor. This should only container the most basic components possible. +# Only put things on here if every mob *must* have it. This includes ghosts. +- type: entity + abstract: true + save: false + parent: BaseControllable + id: BaseMob + components: + - type: MobCollision + - type: Physics + bodyType: KinematicController + - type: InputMover + - type: MobMover + - type: MovementSpeedModifier + - type: LagCompensation - type: entity save: false @@ -102,6 +110,7 @@ - !type:VomitBehavior - type: RadiationReceiver - type: Stamina + - type: StunVisuals - type: MobState - type: MobThresholds thresholds: From a4368264f0bc14fc96f13099a0910da0a752a3ad Mon Sep 17 00:00:00 2001 From: slarticodefast <161409025+slarticodefast@users.noreply.github.com> Date: Wed, 17 Sep 2025 06:19:46 +0200 Subject: [PATCH 054/143] Add chasm integration tests (#40286) * add chasm integration test * fix assert * fix * more fixes * review --- .../Tests/Chasm/ChasmTest.cs | 144 +++++++++++++++++ .../Interaction/InteractionTest.Helpers.cs | 150 +++++++++++++++++- .../Tests/Interaction/InteractionTest.cs | 21 ++- .../Tests/Movement/MovementTest.cs | 16 +- .../Weapons/Ranged/Systems/SharedGunSystem.cs | 33 ++-- 5 files changed, 336 insertions(+), 28 deletions(-) create mode 100644 Content.IntegrationTests/Tests/Chasm/ChasmTest.cs diff --git a/Content.IntegrationTests/Tests/Chasm/ChasmTest.cs b/Content.IntegrationTests/Tests/Chasm/ChasmTest.cs new file mode 100644 index 0000000000..05c0d6a829 --- /dev/null +++ b/Content.IntegrationTests/Tests/Chasm/ChasmTest.cs @@ -0,0 +1,144 @@ +using Content.IntegrationTests.Tests.Movement; +using Content.Shared.Chasm; +using Content.Shared.Projectiles; +using Content.Shared.Weapons.Misc; +using Content.Shared.Weapons.Ranged.Components; +using Robust.Shared.Maths; +using Robust.Shared.Physics.Components; +using Robust.Shared.Prototypes; + +namespace Content.IntegrationTests.Tests.Chasm; + +/// +/// A test for chasms, which delete entities when a player walks over them. +/// +[TestOf(typeof(ChasmComponent))] +public sealed class ChasmTest : MovementTest +{ + private readonly EntProtoId _chasmProto = "FloorChasmEntity"; + private readonly EntProtoId _catWalkProto = "Catwalk"; + private readonly EntProtoId _grapplingGunProto = "WeaponGrapplingGun"; + + /// + /// Test that a player falls into the chasm when walking over it. + /// + [Test] + public async Task ChasmFallTest() + { + // Spawn a chasm. + await SpawnTarget(_chasmProto); + Assert.That(Delta(), Is.GreaterThan(0.5), "Player did not spawn left of the chasm."); + + // Attempt (and fail) to walk past the chasm. + // If you are modifying the default value of ChasmFallingComponent.DeletionTime this time might need to be adjusted. + await Move(DirectionFlag.East, 0.5f); + + // We should be falling right now. + Assert.That(TryComp(Player, out var falling), "Player is not falling after walking over a chasm."); + + var fallTime = (float)falling.DeletionTime.TotalSeconds; + + // Wait until we get deleted. + await Pair.RunSeconds(fallTime); + + // Check that the player was deleted. + AssertDeleted(Player); + } + + /// + /// Test that a catwalk placed over a chasm will protect a player from falling. + /// + [Test] + public async Task ChasmCatwalkTest() + { + // Spawn a chasm. + await SpawnTarget(_chasmProto); + Assert.That(Delta(), Is.GreaterThan(0.5), "Player did not spawn left of the chasm."); + + // Spawn a catwalk over the chasm. + var catwalk = await Spawn(_catWalkProto); + + // Attempt to walk past the chasm. + await Move(DirectionFlag.East, 1f); + + // We should be on the other side. + Assert.That(Delta(), Is.LessThan(-0.5), "Player was unable to walk over a chasm with a catwalk."); + + // Check that the player is not deleted. + AssertExists(Player); + + // Make sure the player is not falling right now. + Assert.That(HasComp(Player), Is.False, "Player has ChasmFallingComponent after walking over a catwalk."); + + // Delete the catwalk. + await Delete(catwalk); + + // Attempt (and fail) to walk past the chasm. + await Move(DirectionFlag.West, 1f); + + // Wait until we get deleted. + await Pair.RunSeconds(5f); + + // Check that the player was deleted + AssertDeleted(Player); + } + + /// + /// Tests that a player is able to cross a chasm by using a grappling gun. + /// + [Test] + public async Task ChasmGrappleTest() + { + // Spawn a chasm. + await SpawnTarget(_chasmProto); + Assert.That(Delta(), Is.GreaterThan(0.5), "Player did not spawn left of the chasm."); + + // Give the player a grappling gun. + var grapplingGun = await PlaceInHands(_grapplingGunProto); + await Pair.RunSeconds(2f); // guns have a cooldown when picking them up + + // Shoot at the wall to the right. + Assert.That(WallRight, Is.Not.Null, "No wall to shoot at!"); + await AttemptShoot(WallRight); + await Pair.RunSeconds(2f); + + // Check that the grappling hook is embedded into the wall. + Assert.That(TryComp(grapplingGun, out var grapplingGunComp), "Grappling gun did not have GrapplingGunComponent."); + Assert.That(grapplingGunComp.Projectile, Is.Not.Null, "Grappling gun projectile does not exist."); + Assert.That(SEntMan.TryGetComponent(grapplingGunComp.Projectile, out var embeddable), "Grappling hook was not embeddable."); + Assert.That(embeddable.EmbeddedIntoUid, Is.EqualTo(ToServer(WallRight)), "Grappling hook was not embedded into the wall."); + + // Check that the player is hooked. + var grapplingSystem = SEntMan.System(); + Assert.That(grapplingSystem.IsEntityHooked(SPlayer), "Player is not hooked to the wall."); + Assert.That(HasComp(Player), "Player does not have the JointRelayTargetComponent after using a grappling gun."); + + // Attempt to walk past the chasm. + await Move(DirectionFlag.East, 1f); + + // We should be on the other side. + Assert.That(Delta(), Is.LessThan(-0.5), "Player was unable to walk over a chasm with a grappling gun."); + + // Check that the player is not deleted. + AssertExists(Player); + + // Make sure the player is not falling right now. + Assert.That(HasComp(Player), Is.False, "Player has ChasmFallingComponent after moving over a chasm with a grappling gun."); + + // Drop the grappling gun. + await Drop(); + + // Check that the player no longer hooked. + Assert.That(grapplingSystem.IsEntityHooked(SPlayer), Is.False, "Player still hooked after dropping the grappling gun."); + Assert.That(HasComp(Player), Is.False, "Player still has the JointRelayTargetComponent after dropping the grappling gun."); + + // Attempt (and fail) to walk past the chasm. + await Move(DirectionFlag.West, 1f); + + // Wait until we get deleted. + await Pair.RunSeconds(5f); + + // Check that the player was deleted + AssertDeleted(Player); + } +} diff --git a/Content.IntegrationTests/Tests/Interaction/InteractionTest.Helpers.cs b/Content.IntegrationTests/Tests/Interaction/InteractionTest.Helpers.cs index 8a5859fe06..c835a36ed5 100644 --- a/Content.IntegrationTests/Tests/Interaction/InteractionTest.Helpers.cs +++ b/Content.IntegrationTests/Tests/Interaction/InteractionTest.Helpers.cs @@ -10,6 +10,7 @@ using Content.Server.Construction.Components; using Content.Server.Gravity; using Content.Server.Power.Components; using Content.Shared.Atmos; +using Content.Shared.CombatMode; using Content.Shared.Construction.Prototypes; using Content.Shared.Gravity; using Content.Shared.Item; @@ -85,7 +86,7 @@ public abstract partial class InteractionTest } /// - /// Spawn an entity entity and set it as the target. + /// Spawn an entity at the target coordinates and set it as the target. /// [MemberNotNull(nameof(Target), nameof(STarget), nameof(CTarget))] #pragma warning disable CS8774 // Member must have a non-null value when exiting. @@ -103,6 +104,22 @@ public abstract partial class InteractionTest } #pragma warning restore CS8774 // Member must have a non-null value when exiting. + /// + /// Spawn an entity entity at the target coordinates without setting it as the target. + /// + protected async Task Spawn(string prototype) + { + var entity = NetEntity.Invalid; + await Server.WaitPost(() => + { + entity = SEntMan.GetNetEntity(SEntMan.SpawnAtPosition(prototype, SEntMan.GetCoordinates(TargetCoords))); + }); + + await RunTicks(5); + AssertPrototype(prototype, entity); + return entity; + } + /// /// Spawn an entity in preparation for deconstruction /// @@ -386,6 +403,119 @@ public abstract partial class InteractionTest #endregion + # region Combat + /// + /// Returns if the player is currently in combat mode. + /// + protected bool IsInCombatMode() + { + if (!SEntMan.TryGetComponent(SPlayer, out CombatModeComponent? combat)) + { + Assert.Fail($"Entity {SEntMan.ToPrettyString(SPlayer)} does not have a CombatModeComponent"); + return false; + } + + return combat.IsInCombatMode; + } + + /// + /// Set the combat mode for the player. + /// + protected async Task SetCombatMode(bool enabled) + { + if (!SEntMan.TryGetComponent(SPlayer, out CombatModeComponent? combat)) + { + Assert.Fail($"Entity {SEntMan.ToPrettyString(SPlayer)} does not have a CombatModeComponent"); + return; + } + + await Server.WaitPost(() => SCombatMode.SetInCombatMode(SPlayer, enabled, combat)); + await RunTicks(1); + + Assert.That(combat.IsInCombatMode, Is.EqualTo(enabled), $"Player could not set combate mode to {enabled}"); + } + + /// + /// Make the player shoot with their currently held gun. + /// The player needs to be able to enter combat mode for this. + /// This does not pass a target entity into the GunSystem, meaning that targets that + /// need to be aimed at directly won't be hit. + /// + /// + /// Guns have a cooldown when picking them up. + /// So make sure to wait a little after spawning a gun in the player's hand or this will fail. + /// + /// The target coordinates to shoot at. Defaults to the current . + /// If true this method will assert that the gun was successfully fired. + protected async Task AttemptShoot(NetCoordinates? target = null, bool assert = true) + { + var actualTarget = SEntMan.GetCoordinates(target ?? TargetCoords); + + if (!SEntMan.TryGetComponent(SPlayer, out CombatModeComponent? combat)) + { + Assert.Fail($"Entity {SEntMan.ToPrettyString(SPlayer)} does not have a CombatModeComponent"); + return; + } + + // Enter combat mode before shooting. + var wasInCombatMode = IsInCombatMode(); + await SetCombatMode(true); + + Assert.That(SGun.TryGetGun(SPlayer, out var gunUid, out var gunComp), "Player was not holding a gun!"); + + await Server.WaitAssertion(() => + { + var success = SGun.AttemptShoot(SPlayer, gunUid, gunComp!, actualTarget); + if (assert) + Assert.That(success, "Gun failed to shoot."); + }); + await RunTicks(1); + + // If the player was not in combat mode before then disable it again. + await SetCombatMode(wasInCombatMode); + } + + /// + /// Make the player shoot with their currently held gun. + /// The player needs to be able to enter combat mode for this. + /// + /// + /// Guns have a cooldown when picking them up. + /// So make sure to wait a little after spawning a gun in the player's hand or this will fail. + /// + /// The target entity to shoot at. Defaults to the current entity. + /// If true this method will assert that the gun was successfully fired. + protected async Task AttemptShoot(NetEntity? target = null, bool assert = true) + { + var actualTarget = target ?? Target; + Assert.That(actualTarget, Is.Not.Null, "No target to shoot at!"); + + if (!SEntMan.TryGetComponent(SPlayer, out CombatModeComponent? combat)) + { + Assert.Fail($"Entity {SEntMan.ToPrettyString(SPlayer)} does not have a CombatModeComponent"); + return; + } + + // Enter combat mode before shooting. + var wasInCombatMode = IsInCombatMode(); + await SetCombatMode(true); + + Assert.That(SGun.TryGetGun(SPlayer, out var gunUid, out var gunComp), "Player was not holding a gun!"); + + await Server.WaitAssertion(() => + { + var success = SGun.AttemptShoot(SPlayer, gunUid, gunComp!, Position(actualTarget!.Value), ToServer(actualTarget)); + if (assert) + Assert.That(success, "Gun failed to shoot."); + }); + await RunTicks(1); + + // If the player was not in combat mode before then disable it again. + await SetCombatMode(wasInCombatMode); + } + + #endregion + /// /// Wait for any currently active DoAfters to finish. /// @@ -746,6 +876,18 @@ public abstract partial class InteractionTest return SEntMan.GetComponent(ToServer(target!.Value)); } + /// + /// Convenience method to check if the target has a component on the server. + /// + protected bool HasComp(NetEntity? target = null) where T : IComponent + { + target ??= Target; + if (target == null) + Assert.Fail("No target specified"); + + return SEntMan.HasComponent(ToServer(target)); + } + /// protected bool TryComp(NetEntity? target, [NotNullWhen(true)] out T? comp) where T : IComponent { @@ -1013,7 +1155,7 @@ public abstract partial class InteractionTest } Assert.That(control.GetType().IsAssignableTo(typeof(TControl))); - return (TControl) control; + return (TControl)control; } /// @@ -1177,8 +1319,8 @@ public abstract partial class InteractionTest { var atmosSystem = SEntMan.System(); var moles = new float[Atmospherics.AdjustedNumberOfGases]; - moles[(int) Gas.Oxygen] = 21.824779f; - moles[(int) Gas.Nitrogen] = 82.10312f; + moles[(int)Gas.Oxygen] = 21.824779f; + moles[(int)Gas.Nitrogen] = 82.10312f; atmosSystem.SetMapAtmosphere(target, false, new GasMixture(moles, Atmospherics.T20C)); }); } diff --git a/Content.IntegrationTests/Tests/Interaction/InteractionTest.cs b/Content.IntegrationTests/Tests/Interaction/InteractionTest.cs index 0ed42d3476..e523be2bfc 100644 --- a/Content.IntegrationTests/Tests/Interaction/InteractionTest.cs +++ b/Content.IntegrationTests/Tests/Interaction/InteractionTest.cs @@ -7,12 +7,16 @@ using Content.IntegrationTests.Pair; using Content.Server.Hands.Systems; using Content.Server.Stack; using Content.Server.Tools; +using Content.Shared.CombatMode; using Content.Shared.DoAfter; using Content.Shared.Hands.Components; using Content.Shared.Interaction; +using Content.Shared.Item.ItemToggle; using Content.Shared.Mind; using Content.Shared.Players; +using Content.Shared.Weapons.Ranged.Systems; using Robust.Client.Input; +using Robust.Client.State; using Robust.Client.UserInterface; using Robust.Shared.GameObjects; using Robust.Shared.Log; @@ -21,8 +25,6 @@ using Robust.Shared.Player; using Robust.Shared.Prototypes; using Robust.Shared.Timing; using Robust.UnitTesting; -using Content.Shared.Item.ItemToggle; -using Robust.Client.State; namespace Content.IntegrationTests.Tests.Interaction; @@ -107,6 +109,8 @@ public abstract partial class InteractionTest protected SharedMapSystem MapSystem = default!; protected ISawmill SLogger = default!; protected SharedUserInterfaceSystem SUiSys = default!; + protected SharedCombatModeSystem SCombatMode = default!; + protected SharedGunSystem SGun = default!; // CLIENT dependencies protected IEntityManager CEntMan = default!; @@ -124,7 +128,7 @@ public abstract partial class InteractionTest protected HandsComponent Hands = default!; protected DoAfterComponent DoAfters = default!; - public float TickPeriod => (float) STiming.TickPeriod.TotalSeconds; + public float TickPeriod => (float)STiming.TickPeriod.TotalSeconds; // Simple mob that has one hand and can perform misc interactions. [TestPrototypes] @@ -149,6 +153,7 @@ public abstract partial class InteractionTest tags: - CanPilot - type: UserInterface + - type: CombatMode "; [SetUp] @@ -163,6 +168,7 @@ public abstract partial class InteractionTest ProtoMan = Server.ResolveDependency(); Factory = Server.ResolveDependency(); STiming = Server.ResolveDependency(); + SLogger = Server.ResolveDependency().RootSawmill; HandSys = SEntMan.System(); InteractSys = SEntMan.System(); ToolSys = SEntMan.System(); @@ -173,20 +179,21 @@ public abstract partial class InteractionTest SConstruction = SEntMan.System(); STestSystem = SEntMan.System(); Stack = SEntMan.System(); - SLogger = Server.ResolveDependency().RootSawmill; - SUiSys = Client.System(); + SUiSys = SEntMan.System(); + SCombatMode = SEntMan.System(); + SGun = SEntMan.System(); // client dependencies CEntMan = Client.ResolveDependency(); UiMan = Client.ResolveDependency(); CTiming = Client.ResolveDependency(); InputManager = Client.ResolveDependency(); + CLogger = Client.ResolveDependency().RootSawmill; InputSystem = CEntMan.System(); CTestSystem = CEntMan.System(); CConSys = CEntMan.System(); ExamineSys = CEntMan.System(); - CLogger = Client.ResolveDependency().RootSawmill; - CUiSys = Client.System(); + CUiSys = CEntMan.System(); // Setup map. await Pair.CreateTestMap(); diff --git a/Content.IntegrationTests/Tests/Movement/MovementTest.cs b/Content.IntegrationTests/Tests/Movement/MovementTest.cs index eba9253038..44ef02043e 100644 --- a/Content.IntegrationTests/Tests/Movement/MovementTest.cs +++ b/Content.IntegrationTests/Tests/Movement/MovementTest.cs @@ -24,6 +24,15 @@ public abstract class MovementTest : InteractionTest /// protected virtual bool AddWalls => true; + /// + /// The wall entity on the left side. + /// + protected NetEntity? WallLeft; + /// + /// The wall entity on the right side. + /// + protected NetEntity? WallRight; + [SetUp] public override async Task Setup() { @@ -38,8 +47,11 @@ public abstract class MovementTest : InteractionTest if (AddWalls) { - await SpawnEntity("WallSolid", pCoords.Offset(new Vector2(-Tiles, 0))); - await SpawnEntity("WallSolid", pCoords.Offset(new Vector2(Tiles, 0))); + var sWallLeft = await SpawnEntity("WallSolid", pCoords.Offset(new Vector2(-Tiles, 0))); + var sWallRight = await SpawnEntity("WallSolid", pCoords.Offset(new Vector2(Tiles, 0))); + + WallLeft = SEntMan.GetNetEntity(sWallLeft); + WallRight = SEntMan.GetNetEntity(sWallRight); } await AddGravity(); diff --git a/Content.Shared/Weapons/Ranged/Systems/SharedGunSystem.cs b/Content.Shared/Weapons/Ranged/Systems/SharedGunSystem.cs index 32da51f8bb..e3fbec0d5d 100644 --- a/Content.Shared/Weapons/Ranged/Systems/SharedGunSystem.cs +++ b/Content.Shared/Weapons/Ranged/Systems/SharedGunSystem.cs @@ -204,38 +204,40 @@ public abstract partial class SharedGunSystem : EntitySystem /// /// Attempts to shoot at the target coordinates. Resets the shot counter after every shot. /// - public void AttemptShoot(EntityUid user, EntityUid gunUid, GunComponent gun, EntityCoordinates toCoordinates, EntityUid? target = null) + public bool AttemptShoot(EntityUid user, EntityUid gunUid, GunComponent gun, EntityCoordinates toCoordinates, EntityUid? target = null) { gun.ShootCoordinates = toCoordinates; - AttemptShoot(user, gunUid, gun); - gun.ShotCounter = 0; gun.Target = target; + var result = AttemptShoot(user, gunUid, gun); + gun.ShotCounter = 0; DirtyField(gunUid, gun, nameof(GunComponent.ShotCounter)); + return result; } /// /// Shoots by assuming the gun is the user at default coordinates. /// - public void AttemptShoot(EntityUid gunUid, GunComponent gun) + public bool AttemptShoot(EntityUid gunUid, GunComponent gun) { var coordinates = new EntityCoordinates(gunUid, gun.DefaultDirection); gun.ShootCoordinates = coordinates; - AttemptShoot(gunUid, gunUid, gun); + var result = AttemptShoot(gunUid, gunUid, gun); gun.ShotCounter = 0; + return result; } - private void AttemptShoot(EntityUid user, EntityUid gunUid, GunComponent gun) + private bool AttemptShoot(EntityUid user, EntityUid gunUid, GunComponent gun) { if (gun.FireRateModified <= 0f || !_actionBlockerSystem.CanAttack(user)) { - return; + return false; } var toCoordinates = gun.ShootCoordinates; if (toCoordinates == null) - return; + return false; var curTime = Timing.CurTime; @@ -247,16 +249,16 @@ public abstract partial class SharedGunSystem : EntitySystem }; RaiseLocalEvent(gunUid, ref prevention); if (prevention.Cancelled) - return; + return false; RaiseLocalEvent(user, ref prevention); if (prevention.Cancelled) - return; + return false; // Need to do this to play the clicking sound for empty automatic weapons // but not play anything for burst fire. if (gun.NextFire > curTime) - return; + return false; var fireRate = TimeSpan.FromSeconds(1f / gun.FireRateModified); @@ -315,7 +317,7 @@ public abstract partial class SharedGunSystem : EntitySystem gun.BurstActivated = false; gun.BurstShotsCount = 0; gun.NextFire = TimeSpan.FromSeconds(Math.Max(lastFire.TotalSeconds + SafetyNextFire, gun.NextFire.TotalSeconds)); - return; + return false; } var fromCoordinates = Transform(user).Coordinates; @@ -355,10 +357,10 @@ public abstract partial class SharedGunSystem : EntitySystem // May cause prediction issues? Needs more tweaking gun.NextFire = TimeSpan.FromSeconds(Math.Max(lastFire.TotalSeconds + SafetyNextFire, gun.NextFire.TotalSeconds)); Audio.PlayPredicted(gun.SoundEmpty, gunUid, user); - return; + return false; } - return; + return false; } // Handle burstfire @@ -383,13 +385,14 @@ public abstract partial class SharedGunSystem : EntitySystem RaiseLocalEvent(gunUid, ref shotEv); if (!userImpulse || !TryComp(user, out var userPhysics)) - return; + return true; var shooterEv = new ShooterImpulseEvent(); RaiseLocalEvent(user, ref shooterEv); if (shooterEv.Push) CauseImpulse(fromCoordinates, toCoordinates.Value, user, userPhysics); + return true; } public void Shoot( From ce052484280fd36a0251e824a664763c02125df8 Mon Sep 17 00:00:00 2001 From: Alex Date: Wed, 17 Sep 2025 00:47:17 -0400 Subject: [PATCH 055/143] Fland: on evac fix delta pressure destroying the air storage cell (#40413) --- Resources/Maps/Shuttles/emergency_delta.yml | 286 +++++++++++++++----- 1 file changed, 223 insertions(+), 63 deletions(-) diff --git a/Resources/Maps/Shuttles/emergency_delta.yml b/Resources/Maps/Shuttles/emergency_delta.yml index 13447e875f..c2d2628fb9 100644 --- a/Resources/Maps/Shuttles/emergency_delta.yml +++ b/Resources/Maps/Shuttles/emergency_delta.yml @@ -1,10 +1,10 @@ meta: format: 7 category: Grid - engineVersion: 262.0.0 + engineVersion: 266.0.0 forkId: "" forkVersion: "" - time: 06/09/2025 18:53:35 + time: 09/17/2025 04:14:52 entityCount: 957 maps: [] grids: @@ -502,48 +502,16 @@ 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 immutable: True - moles: - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + moles: {} - volume: 2500 temperature: 293.15 moles: - - 1400.0662 - - 5266.916 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 1400.0662 + Nitrogen: 5266.916 chunkSize: 4 - type: GasTileOverlay - type: RadiationGridResistance @@ -726,35 +694,47 @@ entities: rot: -1.5707963267948966 rad pos: -1.5,5.5 parent: 1 + - type: Fixtures + fixtures: {} - uid: 39 components: - type: Transform rot: 3.141592653589793 rad pos: 1.5,-1.5 parent: 1 + - type: Fixtures + fixtures: {} - uid: 348 components: - type: Transform rot: 3.141592653589793 rad pos: -10.5,-9.5 parent: 1 + - type: Fixtures + fixtures: {} - uid: 351 components: - type: Transform rot: 1.5707963267948966 rad pos: -14.5,-10.5 parent: 1 + - type: Fixtures + fixtures: {} - uid: 585 components: - type: Transform rot: -1.5707963267948966 rad pos: -5.5,-11.5 parent: 1 + - type: Fixtures + fixtures: {} - uid: 717 components: - type: Transform pos: -4.5,-17.5 parent: 1 + - type: Fixtures + fixtures: {} - proto: AtmosDeviceFanDirectional entities: - uid: 71 @@ -3032,21 +3012,29 @@ entities: rot: 3.141592653589793 rad pos: -14.5,-11.5 parent: 1 + - type: Fixtures + fixtures: {} - uid: 569 components: - type: Transform pos: -5.5,-7.5 parent: 1 + - type: Fixtures + fixtures: {} - uid: 571 components: - type: Transform pos: -1.5,-13.5 parent: 1 + - type: Fixtures + fixtures: {} - uid: 572 components: - type: Transform pos: -1.5,-7.5 parent: 1 + - type: Fixtures + fixtures: {} - proto: FireAxeCabinetFilled entities: - uid: 175 @@ -3055,6 +3043,8 @@ entities: rot: 1.5707963267948966 rad pos: -10.5,5.5 parent: 1 + - type: Fixtures + fixtures: {} - proto: FirelockGlass entities: - uid: 36 @@ -4180,6 +4170,8 @@ entities: rot: -1.5707963267948966 rad pos: -9.5,-16.5 parent: 1 + - type: Fixtures + fixtures: {} - proto: MagazinePistol entities: - uid: 784 @@ -4270,6 +4262,40 @@ entities: - type: Transform pos: -8.607952,8.414773 parent: 1 +- proto: PlasmaReinforcedWindowDirectional + entities: + - uid: 115 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 1.5,-18.5 + parent: 1 + - type: DeltaPressure + gridUid: 1 + - uid: 119 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 1.5,-20.5 + parent: 1 + - type: DeltaPressure + gridUid: 1 + - uid: 130 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 1.5,-19.5 + parent: 1 + - type: DeltaPressure + gridUid: 1 + - uid: 293 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 1.5,-21.5 + parent: 1 + - type: DeltaPressure + gridUid: 1 - proto: PosterLegitEnlist entities: - uid: 788 @@ -4277,6 +4303,8 @@ entities: - type: Transform pos: 1.5,3.5 parent: 1 + - type: Fixtures + fixtures: {} - proto: PosterLegitHelpOthers entities: - uid: 790 @@ -4284,6 +4312,8 @@ entities: - type: Transform pos: -14.5,-16.5 parent: 1 + - type: Fixtures + fixtures: {} - proto: PottedPlantRandom entities: - uid: 165 @@ -4568,36 +4598,48 @@ entities: rot: 1.5707963267948966 rad pos: -1.5,-9.5 parent: 1 + - type: Fixtures + fixtures: {} - uid: 766 components: - type: Transform rot: 1.5707963267948966 rad pos: -9.5,-15.5 parent: 1 + - type: Fixtures + fixtures: {} - uid: 767 components: - type: Transform rot: 1.5707963267948966 rad pos: -2.5,-1.5 parent: 1 + - type: Fixtures + fixtures: {} - uid: 768 components: - type: Transform rot: 1.5707963267948966 rad pos: -11.5,-1.5 parent: 1 + - type: Fixtures + fixtures: {} - uid: 781 components: - type: Transform rot: 1.5707963267948966 rad pos: -4.5,3.5 parent: 1 + - type: Fixtures + fixtures: {} - uid: 838 components: - type: Transform rot: 1.5707963267948966 rad pos: -5.5,-9.5 parent: 1 + - type: Fixtures + fixtures: {} - proto: ShotGunCabinetFilled entities: - uid: 745 @@ -4606,6 +4648,8 @@ entities: rot: -1.5707963267948966 rad pos: 2.5,0.5 parent: 1 + - type: Fixtures + fixtures: {} - proto: ShuttleWindow entities: - uid: 6 @@ -4613,281 +4657,393 @@ entities: - type: Transform pos: 2.5,1.5 parent: 1 + - type: DeltaPressure + gridUid: 1 - uid: 7 components: - type: Transform pos: 2.5,2.5 parent: 1 + - type: DeltaPressure + gridUid: 1 - uid: 15 components: - type: Transform pos: -3.5,1.5 parent: 1 + - type: DeltaPressure + gridUid: 1 - uid: 18 components: - type: Transform pos: 0.5,3.5 parent: 1 + - type: DeltaPressure + gridUid: 1 - uid: 19 components: - type: Transform pos: -0.5,3.5 parent: 1 + - type: DeltaPressure + gridUid: 1 - uid: 81 components: - type: Transform pos: -0.5,-1.5 parent: 1 + - type: DeltaPressure + gridUid: 1 - uid: 82 components: - type: Transform pos: -1.5,-2.5 parent: 1 + - type: DeltaPressure + gridUid: 1 - uid: 101 components: - type: Transform pos: -12.5,3.5 parent: 1 + - type: DeltaPressure + gridUid: 1 - uid: 142 components: - type: Transform pos: -4.5,-1.5 parent: 1 + - type: DeltaPressure + gridUid: 1 - uid: 170 components: - type: Transform pos: -1.5,6.5 parent: 1 + - type: DeltaPressure + gridUid: 1 - uid: 171 components: - type: Transform pos: -10.5,6.5 parent: 1 + - type: DeltaPressure + gridUid: 1 - uid: 173 components: - type: Transform pos: -10.5,7.5 parent: 1 + - type: DeltaPressure + gridUid: 1 - uid: 174 components: - type: Transform pos: -1.5,7.5 parent: 1 + - type: DeltaPressure + gridUid: 1 - uid: 182 components: - type: Transform pos: -8.5,9.5 parent: 1 + - type: DeltaPressure + gridUid: 1 - uid: 183 components: - type: Transform pos: -3.5,9.5 parent: 1 + - type: DeltaPressure + gridUid: 1 - uid: 184 components: - type: Transform pos: -4.5,9.5 parent: 1 + - type: DeltaPressure + gridUid: 1 - uid: 185 components: - type: Transform pos: -5.5,9.5 parent: 1 + - type: DeltaPressure + gridUid: 1 - uid: 186 components: - type: Transform pos: -6.5,9.5 parent: 1 + - type: DeltaPressure + gridUid: 1 - uid: 187 components: - type: Transform pos: -7.5,9.5 parent: 1 + - type: DeltaPressure + gridUid: 1 - uid: 261 components: - type: Transform pos: -14.5,-3.5 parent: 1 + - type: DeltaPressure + gridUid: 1 - uid: 262 components: - type: Transform pos: -14.5,-4.5 parent: 1 + - type: DeltaPressure + gridUid: 1 - uid: 263 components: - type: Transform pos: -14.5,-5.5 parent: 1 + - type: DeltaPressure + gridUid: 1 - uid: 264 components: - type: Transform pos: -14.5,-6.5 parent: 1 + - type: DeltaPressure + gridUid: 1 - uid: 265 components: - type: Transform pos: -14.5,-7.5 parent: 1 + - type: DeltaPressure + gridUid: 1 - uid: 267 components: - type: Transform pos: -1.5,-22.5 parent: 1 + - type: DeltaPressure + gridUid: 1 - uid: 274 components: - type: Transform pos: -6.5,-1.5 parent: 1 + - type: DeltaPressure + gridUid: 1 - uid: 327 components: - type: Transform pos: -2.5,-22.5 parent: 1 + - type: DeltaPressure + gridUid: 1 - uid: 330 components: - type: Transform pos: -9.5,-11.5 parent: 1 + - type: DeltaPressure + gridUid: 1 - uid: 331 components: - type: Transform pos: -9.5,-14.5 parent: 1 + - type: DeltaPressure + gridUid: 1 - uid: 338 components: - type: Transform pos: -11.5,-17.5 parent: 1 + - type: DeltaPressure + gridUid: 1 - uid: 339 components: - type: Transform pos: -12.5,-17.5 parent: 1 + - type: DeltaPressure + gridUid: 1 - uid: 342 components: - type: Transform pos: -14.5,-12.5 parent: 1 + - type: DeltaPressure + gridUid: 1 - uid: 343 components: - type: Transform pos: -14.5,-13.5 parent: 1 + - type: DeltaPressure + gridUid: 1 - uid: 344 components: - type: Transform pos: -14.5,-14.5 parent: 1 + - type: DeltaPressure + gridUid: 1 - uid: 345 components: - type: Transform pos: -14.5,-15.5 parent: 1 + - type: DeltaPressure + gridUid: 1 - uid: 430 components: - type: Transform pos: -8.5,-17.5 parent: 1 + - type: DeltaPressure + gridUid: 1 - uid: 432 components: - type: Transform pos: -6.5,-17.5 parent: 1 + - type: DeltaPressure + gridUid: 1 - uid: 469 components: - type: Transform pos: 2.5,-4.5 parent: 1 + - type: DeltaPressure + gridUid: 1 - uid: 470 components: - type: Transform pos: 2.5,-5.5 parent: 1 + - type: DeltaPressure + gridUid: 1 - uid: 471 components: - type: Transform pos: 2.5,-6.5 parent: 1 + - type: DeltaPressure + gridUid: 1 - uid: 478 components: - type: Transform pos: 2.5,-13.5 parent: 1 + - type: DeltaPressure + gridUid: 1 - uid: 479 components: - type: Transform pos: 2.5,-14.5 parent: 1 + - type: DeltaPressure + gridUid: 1 - uid: 513 components: - type: Transform pos: -1.5,-8.5 parent: 1 + - type: DeltaPressure + gridUid: 1 - uid: 515 components: - type: Transform pos: -1.5,-4.5 parent: 1 + - type: DeltaPressure + gridUid: 1 - uid: 530 components: - type: Transform pos: -5.5,-10.5 parent: 1 + - type: DeltaPressure + gridUid: 1 - uid: 533 components: - type: Transform pos: -1.5,-10.5 parent: 1 + - type: DeltaPressure + gridUid: 1 - uid: 535 components: - type: Transform pos: -1.5,-14.5 parent: 1 + - type: DeltaPressure + gridUid: 1 - uid: 557 components: - type: Transform pos: -5.5,-4.5 parent: 1 + - type: DeltaPressure + gridUid: 1 - uid: 712 components: - type: Transform pos: -8.5,-1.5 parent: 1 + - type: DeltaPressure + gridUid: 1 - uid: 760 components: - type: Transform pos: -9.5,-7.5 parent: 1 + - type: DeltaPressure + gridUid: 1 - uid: 764 components: - type: Transform pos: -9.5,-6.5 parent: 1 + - type: DeltaPressure + gridUid: 1 - uid: 817 components: - type: Transform pos: -5.5,-8.5 parent: 1 + - type: DeltaPressure + gridUid: 1 - uid: 819 components: - type: Transform pos: -5.5,-14.5 parent: 1 + - type: DeltaPressure + gridUid: 1 - uid: 820 components: - type: Transform pos: -5.5,-16.5 parent: 1 + - type: DeltaPressure + gridUid: 1 - uid: 821 components: - type: Transform pos: -1.5,-16.5 parent: 1 + - type: DeltaPressure + gridUid: 1 - uid: 837 components: - type: Transform pos: -5.5,-2.5 parent: 1 + - type: DeltaPressure + gridUid: 1 - proto: SignBridge entities: - uid: 11 @@ -4895,6 +5051,8 @@ entities: - type: Transform pos: -6.5,-1.5 parent: 1 + - type: Fixtures + fixtures: {} - proto: SignEngineering entities: - uid: 491 @@ -4902,6 +5060,8 @@ entities: - type: Transform pos: -3.5,-17.5 parent: 1 + - type: Fixtures + fixtures: {} - proto: SignEVA entities: - uid: 460 @@ -4909,6 +5069,8 @@ entities: - type: Transform pos: -9.5,0.5 parent: 1 + - type: Fixtures + fixtures: {} - proto: SignMedical entities: - uid: 397 @@ -4917,12 +5079,16 @@ entities: rot: 1.5707963267948966 rad pos: -9.5,-11.5 parent: 1 + - type: Fixtures + fixtures: {} - uid: 398 components: - type: Transform rot: 1.5707963267948966 rad pos: -9.5,-14.5 parent: 1 + - type: Fixtures + fixtures: {} - proto: SignSecurity entities: - uid: 434 @@ -4930,6 +5096,8 @@ entities: - type: Transform pos: -0.5,-1.5 parent: 1 + - type: Fixtures + fixtures: {} - proto: Sink entities: - uid: 408 @@ -5174,11 +5342,15 @@ entities: - type: Transform pos: -9.5,-10.5 parent: 1 + - type: Fixtures + fixtures: {} - uid: 573 components: - type: Transform pos: -5.5,-5.5 parent: 1 + - type: Fixtures + fixtures: {} - proto: VendingMachineYouTool entities: - uid: 322 @@ -5780,6 +5952,8 @@ entities: rot: 1.5707963267948966 rad pos: -1.5,-20.5 parent: 1 + - type: DeltaPressure + gridUid: 1 - proto: WindoorSecureSecurityLocked entities: - uid: 37 @@ -5788,54 +5962,40 @@ entities: rot: 3.141592653589793 rad pos: -2.5,1.5 parent: 1 + - type: DeltaPressure + gridUid: 1 - proto: WindowReinforcedDirectional entities: - - uid: 115 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 1.5,-21.5 - parent: 1 - - uid: 119 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 1.5,-19.5 - parent: 1 - - uid: 130 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 1.5,-20.5 - parent: 1 - - uid: 293 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 1.5,-18.5 - parent: 1 - uid: 660 components: - type: Transform rot: 1.5707963267948966 rad pos: -1.5,-19.5 parent: 1 + - type: DeltaPressure + gridUid: 1 - uid: 682 components: - type: Transform rot: 1.5707963267948966 rad pos: -1.5,-18.5 parent: 1 + - type: DeltaPressure + gridUid: 1 - uid: 746 components: - type: Transform rot: 1.5707963267948966 rad pos: -1.5,-21.5 parent: 1 + - type: DeltaPressure + gridUid: 1 - uid: 755 components: - type: Transform rot: -1.5707963267948966 rad pos: -1.5,2.5 parent: 1 + - type: DeltaPressure + gridUid: 1 ... From f21c6f2030decc360f6f332d5364df66288f29c6 Mon Sep 17 00:00:00 2001 From: PJBot Date: Wed, 17 Sep 2025 04:48:25 +0000 Subject: [PATCH 056/143] Automatic changelog update --- Resources/Changelog/Maps.yml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/Resources/Changelog/Maps.yml b/Resources/Changelog/Maps.yml index 1aff15ae3f..b78b2f2dcd 100644 --- a/Resources/Changelog/Maps.yml +++ b/Resources/Changelog/Maps.yml @@ -686,4 +686,12 @@ id: 82 time: '2025-09-15T01:13:12.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/40359 +- author: F1restar4 + changes: + - message: On Fland, Fixed evac's air storage cell instantly shattering due to delta + pressure + type: Fix + id: 83 + time: '2025-09-17T04:47:18.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/40413 Order: 1 From 09eee5074dd0c20ea134c08df2d7357e495e1613 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C4=81da?= Date: Wed, 17 Sep 2025 05:29:08 -0500 Subject: [PATCH 057/143] Use an alias in job icons yml (#40415) commit Co-authored-by: iaada --- Resources/Prototypes/StatusIcon/job.yml | 114 ++++++++++++------------ 1 file changed, 57 insertions(+), 57 deletions(-) diff --git a/Resources/Prototypes/StatusIcon/job.yml b/Resources/Prototypes/StatusIcon/job.yml index 9c09198a94..3ac1ab07be 100644 --- a/Resources/Prototypes/StatusIcon/job.yml +++ b/Resources/Prototypes/StatusIcon/job.yml @@ -11,7 +11,7 @@ parent: JobIcon id: JobIconCargoTechnician icon: - sprite: /Textures/Interface/Misc/job_icons.rsi + sprite: &icon-rsi /Textures/Interface/Misc/job_icons.rsi state: CargoTechnician jobName: job-name-cargotech @@ -19,7 +19,7 @@ parent: JobIcon id: JobIconShaftMiner icon: - sprite: /Textures/Interface/Misc/job_icons.rsi + sprite: *icon-rsi state: ShaftMiner jobName: job-name-salvagespec @@ -29,7 +29,7 @@ parent: JobIcon id: JobIconCaptain icon: - sprite: /Textures/Interface/Misc/job_icons.rsi + sprite: *icon-rsi state: Captain jobName: job-name-captain @@ -37,7 +37,7 @@ parent: JobIcon id: JobIconChiefEngineer icon: - sprite: /Textures/Interface/Misc/job_icons.rsi + sprite: *icon-rsi state: ChiefEngineer jobName: job-name-ce @@ -45,7 +45,7 @@ parent: JobIcon id: JobIconChiefMedicalOfficer icon: - sprite: /Textures/Interface/Misc/job_icons.rsi + sprite: *icon-rsi state: ChiefMedicalOfficer jobName: job-name-cmo @@ -53,7 +53,7 @@ parent: JobIcon id: JobIconHeadOfPersonnel icon: - sprite: /Textures/Interface/Misc/job_icons.rsi + sprite: *icon-rsi state: HeadOfPersonnel jobName: job-name-hop @@ -61,7 +61,7 @@ parent: JobIcon id: JobIconHeadOfSecurity icon: - sprite: /Textures/Interface/Misc/job_icons.rsi + sprite: *icon-rsi state: HeadOfSecurity jobName: job-name-hos @@ -69,7 +69,7 @@ parent: JobIcon id: JobIconResearchDirector icon: - sprite: /Textures/Interface/Misc/job_icons.rsi + sprite: *icon-rsi state: ResearchDirector jobName: job-name-rd @@ -77,7 +77,7 @@ parent: JobIcon id: JobIconQuarterMaster icon: - sprite: /Textures/Interface/Misc/job_icons.rsi + sprite: *icon-rsi state: QuarterMaster jobName: job-name-qm @@ -87,7 +87,7 @@ parent: JobIcon id: JobIconAtmosphericTechnician icon: - sprite: /Textures/Interface/Misc/job_icons.rsi + sprite: *icon-rsi state: AtmosphericTechnician jobName: job-name-atmostech @@ -95,7 +95,7 @@ parent: JobIcon id: JobIconStationEngineer icon: - sprite: /Textures/Interface/Misc/job_icons.rsi + sprite: *icon-rsi state: StationEngineer jobName: job-name-engineer @@ -103,7 +103,7 @@ parent: JobIcon id: JobIconTechnicalAssistant icon: - sprite: /Textures/Interface/Misc/job_icons.rsi + sprite: *icon-rsi state: TechnicalAssistant jobName: job-name-technical-assistant @@ -113,7 +113,7 @@ parent: JobIcon id: JobIconChemist icon: - sprite: /Textures/Interface/Misc/job_icons.rsi + sprite: *icon-rsi state: Chemist jobName: job-name-chemist @@ -121,7 +121,7 @@ parent: JobIcon id: JobIconGeneticist icon: - sprite: /Textures/Interface/Misc/job_icons.rsi + sprite: *icon-rsi state: Geneticist jobName: job-name-geneticist @@ -129,7 +129,7 @@ parent: JobIcon id: JobIconMedicalDoctor icon: - sprite: /Textures/Interface/Misc/job_icons.rsi + sprite: *icon-rsi state: MedicalDoctor jobName: job-name-doctor @@ -137,7 +137,7 @@ parent: JobIcon id: JobIconMedicalIntern icon: - sprite: /Textures/Interface/Misc/job_icons.rsi + sprite: *icon-rsi state: MedicalIntern jobName: job-name-intern @@ -145,7 +145,7 @@ parent: JobIcon id: JobIconParamedic icon: - sprite: /Textures/Interface/Misc/job_icons.rsi + sprite: *icon-rsi state: Paramedic jobName: job-name-paramedic @@ -153,7 +153,7 @@ parent: JobIcon id: JobIconPsychologist icon: - sprite: /Textures/Interface/Misc/job_icons.rsi + sprite: *icon-rsi state: Psychologist jobName: job-name-psychologist @@ -161,7 +161,7 @@ parent: JobIcon id: JobIconVirologist icon: - sprite: /Textures/Interface/Misc/job_icons.rsi + sprite: *icon-rsi state: Virologist jobName: job-name-virologist @@ -171,7 +171,7 @@ parent: JobIcon id: JobIconResearchAssistant icon: - sprite: /Textures/Interface/Misc/job_icons.rsi + sprite: *icon-rsi state: ResearchAssistant jobName: job-name-research-assistant @@ -179,7 +179,7 @@ parent: JobIcon id: JobIconRoboticist icon: - sprite: /Textures/Interface/Misc/job_icons.rsi + sprite: *icon-rsi state: Roboticist jobName: job-name-roboticist @@ -187,7 +187,7 @@ parent: JobIcon id: JobIconScientist icon: - sprite: /Textures/Interface/Misc/job_icons.rsi + sprite: *icon-rsi state: Scientist jobName: job-name-scientist @@ -197,7 +197,7 @@ parent: JobIcon id: JobIconBrigmedic icon: - sprite: /Textures/Interface/Misc/job_icons.rsi + sprite: *icon-rsi state: Brigmedic jobName: job-name-brigmedic @@ -205,7 +205,7 @@ parent: JobIcon id: JobIconDetective icon: - sprite: /Textures/Interface/Misc/job_icons.rsi + sprite: *icon-rsi state: Detective jobName: job-name-detective @@ -213,7 +213,7 @@ parent: JobIcon id: JobIconSecurityCadet icon: - sprite: /Textures/Interface/Misc/job_icons.rsi + sprite: *icon-rsi state: SecurityCadet jobName: job-name-cadet @@ -221,7 +221,7 @@ parent: JobIcon id: JobIconSecurityOfficer icon: - sprite: /Textures/Interface/Misc/job_icons.rsi + sprite: *icon-rsi state: SecurityOfficer jobName: job-name-security @@ -229,7 +229,7 @@ parent: JobIcon id: JobIconWarden icon: - sprite: /Textures/Interface/Misc/job_icons.rsi + sprite: *icon-rsi state: Warden jobName: job-name-warden @@ -239,7 +239,7 @@ parent: JobIcon id: JobIconBartender icon: - sprite: /Textures/Interface/Misc/job_icons.rsi + sprite: *icon-rsi state: Bartender jobName: job-name-bartender @@ -247,7 +247,7 @@ parent: JobIcon id: JobIconBotanist icon: - sprite: /Textures/Interface/Misc/job_icons.rsi + sprite: *icon-rsi state: Botanist jobName: job-name-botanist @@ -255,7 +255,7 @@ parent: JobIcon id: JobIconBoxer icon: - sprite: /Textures/Interface/Misc/job_icons.rsi + sprite: *icon-rsi state: Boxer jobName: job-name-boxer @@ -263,7 +263,7 @@ parent: JobIcon id: JobIconChaplain icon: - sprite: /Textures/Interface/Misc/job_icons.rsi + sprite: *icon-rsi state: Chaplain jobName: job-name-chaplain @@ -271,7 +271,7 @@ parent: JobIcon id: JobIconChef icon: - sprite: /Textures/Interface/Misc/job_icons.rsi + sprite: *icon-rsi state: Chef jobName: job-name-chef @@ -279,7 +279,7 @@ parent: JobIcon id: JobIconJanitor icon: - sprite: /Textures/Interface/Misc/job_icons.rsi + sprite: *icon-rsi state: Janitor jobName: job-name-janitor @@ -287,7 +287,7 @@ parent: JobIcon id: JobIconLawyer icon: - sprite: /Textures/Interface/Misc/job_icons.rsi + sprite: *icon-rsi state: Lawyer jobName: job-name-lawyer @@ -295,7 +295,7 @@ parent: JobIcon id: JobIconLibrarian icon: - sprite: /Textures/Interface/Misc/job_icons.rsi + sprite: *icon-rsi state: Librarian jobName: job-name-librarian @@ -303,7 +303,7 @@ parent: JobIcon id: JobIconReporter icon: - sprite: /Textures/Interface/Misc/job_icons.rsi + sprite: *icon-rsi state: Reporter jobName: job-name-reporter @@ -311,7 +311,7 @@ parent: JobIcon id: JobIconServiceWorker icon: - sprite: /Textures/Interface/Misc/job_icons.rsi + sprite: *icon-rsi state: ServiceWorker jobName: job-name-serviceworker @@ -319,7 +319,7 @@ parent: JobIcon id: JobIconZookeeper icon: - sprite: /Textures/Interface/Misc/job_icons.rsi + sprite: *icon-rsi state: Zookeeper jobName: job-name-zookeeper @@ -329,7 +329,7 @@ parent: JobIcon id: JobIconClown # :o) icon: - sprite: /Textures/Interface/Misc/job_icons.rsi + sprite: *icon-rsi state: Clown jobName: job-name-clown @@ -337,7 +337,7 @@ parent: JobIcon id: JobIconMime icon: - sprite: /Textures/Interface/Misc/job_icons.rsi + sprite: *icon-rsi state: Mime jobName: job-name-mime @@ -345,7 +345,7 @@ parent: JobIcon id: JobIconMusician icon: - sprite: /Textures/Interface/Misc/job_icons.rsi + sprite: *icon-rsi state: Musician jobName: job-name-musician @@ -355,7 +355,7 @@ parent: JobIcon id: JobIconPassenger icon: - sprite: /Textures/Interface/Misc/job_icons.rsi + sprite: *icon-rsi state: Passenger jobName: job-name-passenger @@ -363,7 +363,7 @@ parent: JobIcon id: JobIconVisitor icon: - sprite: /Textures/Interface/Misc/job_icons.rsi + sprite: *icon-rsi state: Visitor jobName: job-name-visitor @@ -373,7 +373,7 @@ parent: JobIcon id: JobIconBorg icon: - sprite: /Textures/Interface/Misc/job_icons.rsi + sprite: *icon-rsi state: Borg jobName: job-name-borg @@ -381,7 +381,7 @@ parent: JobIcon id: JobIconStationAi icon: - sprite: /Textures/Interface/Misc/job_icons.rsi + sprite: *icon-rsi state: StationAi jobName: job-name-station-ai @@ -391,7 +391,7 @@ parent: JobIcon id: JobIconCluwne # >:o( icon: - sprite: /Textures/Interface/Misc/job_icons.rsi + sprite: *icon-rsi state: Cluwne jobName: job-name-cluwne @@ -399,7 +399,7 @@ parent: JobIcon id: JobIconPrisoner icon: - sprite: /Textures/Interface/Misc/job_icons.rsi + sprite: *icon-rsi state: Prisoner jobName: job-name-prisoner @@ -407,7 +407,7 @@ parent: JobIcon id: JobIconSyndicate # Just in case you want to make it official which side you are on icon: - sprite: /Textures/Interface/Misc/job_icons.rsi + sprite: *icon-rsi state: Syndicate jobName: job-name-syndicate @@ -415,7 +415,7 @@ parent: JobIcon id: JobIconZombie # This is a perfectly legitimate profession to pursue icon: - sprite: /Textures/Interface/Misc/job_icons.rsi + sprite: *icon-rsi state: Zombie jobName: job-name-zombie @@ -425,7 +425,7 @@ parent: JobIcon id: JobIconNanotrasen icon: - sprite: /Textures/Interface/Misc/job_icons.rsi + sprite: *icon-rsi state: Nanotrasen jobName: job-name-centcomoff @@ -433,7 +433,7 @@ parent: JobIcon id: JobIconAdmin icon: - sprite: /Textures/Interface/Misc/job_icons.rsi + sprite: *icon-rsi state: Admin allowSelection: false @@ -441,7 +441,7 @@ parent: JobIcon id: JobIconSeniorPhysician icon: - sprite: /Textures/Interface/Misc/job_icons.rsi + sprite: *icon-rsi state: SeniorPhysician allowSelection: false @@ -449,7 +449,7 @@ parent: JobIcon id: JobIconSeniorOfficer icon: - sprite: /Textures/Interface/Misc/job_icons.rsi + sprite: *icon-rsi state: SeniorOfficer allowSelection: false @@ -457,7 +457,7 @@ parent: JobIcon id: JobIconSeniorEngineer icon: - sprite: /Textures/Interface/Misc/job_icons.rsi + sprite: *icon-rsi state: SeniorEngineer allowSelection: false @@ -465,7 +465,7 @@ parent: JobIcon id: JobIconSeniorResearcher icon: - sprite: /Textures/Interface/Misc/job_icons.rsi + sprite: *icon-rsi state: SeniorResearcher allowSelection: false @@ -475,7 +475,7 @@ parent: JobIcon id: JobIconNoId icon: - sprite: /Textures/Interface/Misc/job_icons.rsi + sprite: *icon-rsi state: NoId jobName: job-name-no-id @@ -483,6 +483,6 @@ parent: JobIcon id: JobIconUnknown icon: - sprite: /Textures/Interface/Misc/job_icons.rsi + sprite: *icon-rsi state: Unknown jobName: job-name-unknown From 599b9622345255a73ad296c7f0558a0a54aa3169 Mon Sep 17 00:00:00 2001 From: ScarKy0 <106310278+ScarKy0@users.noreply.github.com> Date: Wed, 17 Sep 2025 14:52:29 +0200 Subject: [PATCH 058/143] Localize vulp emotes (#40418) init --- Resources/Locale/en-US/chat/emotes.ftl | 5 +++++ Resources/Prototypes/Voice/speech_emotes.yml | 10 +++++----- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/Resources/Locale/en-US/chat/emotes.ftl b/Resources/Locale/en-US/chat/emotes.ftl index 19d6aa918f..18839bd4b0 100644 --- a/Resources/Locale/en-US/chat/emotes.ftl +++ b/Resources/Locale/en-US/chat/emotes.ftl @@ -73,3 +73,8 @@ chat-emote-msg-cathisses = hisses! chat-emote-msg-monkeyscreeches = screeches! chat-emote-msg-yawn = yawns. chat-emote-msg-snore = snores. +chat-emote-msg-bark = barks. +chat-emote-msg-snarl = snarls. +chat-emote-msg-whine = whines. +chat-emote-msg-howl = howls. +chat-emote-msg-growl = growls. diff --git a/Resources/Prototypes/Voice/speech_emotes.yml b/Resources/Prototypes/Voice/speech_emotes.yml index b5e546480d..811c1d3b82 100644 --- a/Resources/Prototypes/Voice/speech_emotes.yml +++ b/Resources/Prototypes/Voice/speech_emotes.yml @@ -210,7 +210,7 @@ blacklist: components: - BorgChassis - chatMessages: [barks.] + chatMessages: ["chat-emote-msg-bark"] chatTriggers: - bark - barks @@ -228,7 +228,7 @@ blacklist: components: - BorgChassis - chatMessages: [snarls.] + chatMessages: ["chat-emote-msg-snarl"] chatTriggers: - snarl - snarls @@ -246,7 +246,7 @@ blacklist: components: - BorgChassis - chatMessages: [whines.] + chatMessages: ["chat-emote-msg-whine"] chatTriggers: - whine - whines @@ -264,7 +264,7 @@ blacklist: components: - BorgChassis - chatMessages: [howls.] + chatMessages: ["chat-emote-msg-howl"] chatTriggers: - howl - howls @@ -282,7 +282,7 @@ blacklist: components: - BorgChassis - chatMessages: [growls.] + chatMessages: ["chat-emote-msg-growl"] chatTriggers: - growl - growls From 0dd1733998322140f5bcceebaf30f0ab2d511a78 Mon Sep 17 00:00:00 2001 From: Winkarst-cpu <74284083+Winkarst-cpu@users.noreply.github.com> Date: Wed, 17 Sep 2025 16:03:51 +0300 Subject: [PATCH 059/143] Change ``GetPryTimeModifierEvent.BaseTime`` to the TimeSpan (#40419) * Cleanup * Update --- Content.Shared/Doors/Components/DoorComponent.cs | 4 ++-- Content.Shared/Prying/Components/PryingComponent.cs | 2 +- Content.Shared/Prying/Systems/PryingSystem.cs | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Content.Shared/Doors/Components/DoorComponent.cs b/Content.Shared/Doors/Components/DoorComponent.cs index 64b4ab1857..e413f472e0 100644 --- a/Content.Shared/Doors/Components/DoorComponent.cs +++ b/Content.Shared/Doors/Components/DoorComponent.cs @@ -264,8 +264,8 @@ public sealed partial class DoorComponent : Component /// /// Default time that the door should take to pry open. /// - [DataField, ViewVariables(VVAccess.ReadWrite)] - public float PryTime = 1.5f; + [DataField] + public TimeSpan PryTime = TimeSpan.FromSeconds(1.5f); [DataField] public bool ChangeAirtight = true; diff --git a/Content.Shared/Prying/Components/PryingComponent.cs b/Content.Shared/Prying/Components/PryingComponent.cs index 93713e52c6..8bd85d020f 100644 --- a/Content.Shared/Prying/Components/PryingComponent.cs +++ b/Content.Shared/Prying/Components/PryingComponent.cs @@ -86,7 +86,7 @@ public record struct GetPryTimeModifierEvent { public readonly EntityUid User; public float PryTimeModifier = 1.0f; - public float BaseTime = 5.0f; + public TimeSpan BaseTime = TimeSpan.FromSeconds(5); public GetPryTimeModifierEvent(EntityUid user) { diff --git a/Content.Shared/Prying/Systems/PryingSystem.cs b/Content.Shared/Prying/Systems/PryingSystem.cs index 10c80cfab5..a09400d880 100644 --- a/Content.Shared/Prying/Systems/PryingSystem.cs +++ b/Content.Shared/Prying/Systems/PryingSystem.cs @@ -134,7 +134,7 @@ public sealed class PryingSystem : EntitySystem var modEv = new GetPryTimeModifierEvent(user); RaiseLocalEvent(target, ref modEv); - var doAfterArgs = new DoAfterArgs(EntityManager, user, TimeSpan.FromSeconds(modEv.BaseTime * modEv.PryTimeModifier / toolModifier), new DoorPryDoAfterEvent(), target, target, tool) + var doAfterArgs = new DoAfterArgs(EntityManager, user, modEv.BaseTime * modEv.PryTimeModifier / toolModifier, new DoorPryDoAfterEvent(), target, target, tool) { BreakOnDamage = true, BreakOnMove = true, From ca47e59e434000bc452beea83ea8498efb6f24a4 Mon Sep 17 00:00:00 2001 From: Winkarst-cpu <74284083+Winkarst-cpu@users.noreply.github.com> Date: Wed, 17 Sep 2025 16:28:11 +0300 Subject: [PATCH 060/143] Update ``DoorComponent`` to use TimeSpans and fix comments (#40420) Cleanup --- Content.Client/Doors/DoorSystem.cs | 10 +++++----- Content.Shared/Doors/Components/DoorComponent.cs | 12 ++++++------ 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/Content.Client/Doors/DoorSystem.cs b/Content.Client/Doors/DoorSystem.cs index f1697b820d..ae9c7eda78 100644 --- a/Content.Client/Doors/DoorSystem.cs +++ b/Content.Client/Doors/DoorSystem.cs @@ -31,7 +31,7 @@ public sealed class DoorSystem : SharedDoorSystem comp.OpeningAnimation = new Animation { - Length = TimeSpan.FromSeconds(comp.OpeningAnimationTime), + Length = comp.OpeningAnimationTime, AnimationTracks = { new AnimationTrackSpriteFlick @@ -47,7 +47,7 @@ public sealed class DoorSystem : SharedDoorSystem comp.ClosingAnimation = new Animation { - Length = TimeSpan.FromSeconds(comp.ClosingAnimationTime), + Length = comp.ClosingAnimationTime, AnimationTracks = { new AnimationTrackSpriteFlick @@ -63,7 +63,7 @@ public sealed class DoorSystem : SharedDoorSystem comp.EmaggingAnimation = new Animation { - Length = TimeSpan.FromSeconds(comp.EmaggingAnimationTime), + Length = comp.EmaggingAnimationTime, AnimationTracks = { new AnimationTrackSpriteFlick @@ -116,14 +116,14 @@ public sealed class DoorSystem : SharedDoorSystem return; case DoorState.Opening: - if (entity.Comp.OpeningAnimationTime == 0.0) + if (entity.Comp.OpeningAnimationTime == TimeSpan.Zero) return; _animationSystem.Play(entity, (Animation)entity.Comp.OpeningAnimation, DoorComponent.AnimationKey); return; case DoorState.Closing: - if (entity.Comp.ClosingAnimationTime == 0.0 || entity.Comp.CurrentlyCrushing.Count != 0) + if (entity.Comp.ClosingAnimationTime == TimeSpan.Zero || entity.Comp.CurrentlyCrushing.Count != 0) return; _animationSystem.Play(entity, (Animation)entity.Comp.ClosingAnimation, DoorComponent.AnimationKey); diff --git a/Content.Shared/Doors/Components/DoorComponent.cs b/Content.Shared/Doors/Components/DoorComponent.cs index e413f472e0..020a7a4c9b 100644 --- a/Content.Shared/Doors/Components/DoorComponent.cs +++ b/Content.Shared/Doors/Components/DoorComponent.cs @@ -187,22 +187,22 @@ public sealed partial class DoorComponent : Component public string EmaggingSpriteState = "sparks"; /// - /// The sprite state used for the door when it's open. + /// The length of the door's opening animation. /// [DataField] - public float OpeningAnimationTime = 0.8f; + public TimeSpan OpeningAnimationTime = TimeSpan.FromSeconds(0.8); /// - /// The sprite state used for the door when it's open. + /// The length of the door's closing animation. /// [DataField] - public float ClosingAnimationTime = 0.8f; + public TimeSpan ClosingAnimationTime = TimeSpan.FromSeconds(0.8); /// - /// The sprite state used for the door when it's open. + /// The length of the door's emagging animation. /// [DataField] - public float EmaggingAnimationTime = 1.5f; + public TimeSpan EmaggingAnimationTime = TimeSpan.FromSeconds(1.5); /// /// The animation used when the door opens. From 1dd977effde65714476abfcdfe36d40849d32601 Mon Sep 17 00:00:00 2001 From: Minemoder5000 Date: Wed, 17 Sep 2025 11:00:22 -0600 Subject: [PATCH 061/143] Remove drone lawset from ion storms (#40374) --- Resources/Prototypes/silicon-laws.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/Resources/Prototypes/silicon-laws.yml b/Resources/Prototypes/silicon-laws.yml index 072ee18292..08f4a51c99 100644 --- a/Resources/Prototypes/silicon-laws.yml +++ b/Resources/Prototypes/silicon-laws.yml @@ -592,5 +592,4 @@ PainterLawset: 1 AntimovLawset: 0.25 NutimovLawset: 0.5 - Drone: 0.5 Ninja: 0.25 From 684a4a382dc1d9ad96eead4fe946c758af8981e6 Mon Sep 17 00:00:00 2001 From: PJBot Date: Wed, 17 Sep 2025 17:01:33 +0000 Subject: [PATCH 062/143] Automatic changelog update --- Resources/Changelog/Changelog.yml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 3e174b2f07..b67ca5514b 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: pyvik - changes: - - message: New hair named "Long With Bangs" - type: Add - id: 8458 - time: '2025-05-11T00:09:28.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/36613 - author: CyberTropic changes: - message: MapRenderer can now render map files from a file directly without needing @@ -3955,3 +3948,10 @@ id: 8969 time: '2025-09-16T19:04:50.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/40402 +- author: Minemoder + changes: + - message: Ion Storms no longer have a chance to roll the Drone Lawset. + type: Remove + id: 8970 + time: '2025-09-17T17:00:22.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/40374 From 933da32da5c41d9e1aa1593ca58173eb60caffa9 Mon Sep 17 00:00:00 2001 From: IProduceWidgets <107586145+IProduceWidgets@users.noreply.github.com> Date: Wed, 17 Sep 2025 17:49:50 -0400 Subject: [PATCH 063/143] Remove Misgendering (#40425) fix misgendering --- Resources/Prototypes/Entities/Clothing/Neck/pins.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/Resources/Prototypes/Entities/Clothing/Neck/pins.yml b/Resources/Prototypes/Entities/Clothing/Neck/pins.yml index cab86da726..f540596afa 100644 --- a/Resources/Prototypes/Entities/Clothing/Neck/pins.yml +++ b/Resources/Prototypes/Entities/Clothing/Neck/pins.yml @@ -21,6 +21,7 @@ slot: Neck # default: ClothingNeckLGBTPin requireTag: GenderPin + affectedByEmp: false - type: UserInterface interfaces: enum.ChameleonUiKey.Key: From e1ba33814b94b7349db4a54347c8673308f92f38 Mon Sep 17 00:00:00 2001 From: PJBot Date: Wed, 17 Sep 2025 21:50:58 +0000 Subject: [PATCH 064/143] Automatic changelog update --- Resources/Changelog/Changelog.yml | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index b67ca5514b..83a20a141c 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,14 +1,4 @@ Entries: -- author: CyberTropic - changes: - - message: MapRenderer can now render map files from a file directly without needing - a prototype. - type: Tweak - - message: Fixed maprenderer drawing tiles upside down. - type: Fix - id: 8459 - time: '2025-05-11T14:06:09.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/37306 - author: JrInventor05 changes: - message: The syringe gun is now a T3 civilian science research. @@ -3955,3 +3945,10 @@ id: 8970 time: '2025-09-17T17:00:22.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/40374 +- author: IProduceWidgets + changes: + - message: Gender pins no longer shuffle when EMP'd + type: Fix + id: 8971 + time: '2025-09-17T21:49:50.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/40425 From b692b6e33e94183abf906acb79e3b5d9aa85bdeb Mon Sep 17 00:00:00 2001 From: Errant <35878406+Errant-4@users.noreply.github.com> Date: Wed, 17 Sep 2025 23:59:07 +0200 Subject: [PATCH 065/143] Antag Rolebans (#35966) Co-authored-by: beck-thompson Co-authored-by: Hannah Giovanna Dawson --- .../UI/BanPanel/BanPanel.xaml.cs | 97 ++++++--- .../Administration/UI/BanPanel/BanPanelEui.cs | 3 +- .../Lobby/UI/HumanoidProfileEditor.xaml.cs | 6 +- .../JobRequirementsManager.cs | 108 ++++++++-- .../Ghost/Controls/Roles/GhostRolesEui.cs | 16 +- Content.Server/Administration/BanPanelEui.cs | 91 +++++--- .../Administration/Commands/RoleBanCommand.cs | 27 ++- .../Administration/Managers/BanManager.cs | 198 +++++++++++++----- .../Administration/Managers/IBanManager.cs | 51 ++++- .../Antag/AntagSelectionSystem.API.cs | 37 ++-- Content.Server/Antag/AntagSelectionSystem.cs | 12 +- Content.Server/Database/ServerDbBase.cs | 5 +- .../GameTicking/Events/IsJobAllowedEvent.cs | 13 -- .../GameTicking/Events/IsRoleAllowedEvent.cs | 24 +++ .../GameTicking/GameTicker.Spawning.cs | 5 +- .../Roles/Components/GhostRoleComponent.cs | 6 - Content.Server/Ghost/Roles/GhostRoleSystem.cs | 98 ++++++++- .../JobWhitelist/JobWhitelistManager.cs | 3 + .../JobWhitelist/JobWhitelistSystem.cs | 15 +- .../PlayTimeTrackingSystem.cs | 98 ++++++++- .../Systems/StationJobsSystem.Roundstart.cs | 2 +- .../Zombies/ZombieSystem.Transform.cs | 31 ++- .../Administration/BanPanelEuiState.cs | 76 ++++--- .../Ghost/Roles/GhostRolesEuiMessages.cs | 10 +- Content.Shared/Players/MsgRoleBans.cs | 30 ++- Content.Shared/Roles/AntagPrototype.cs | 8 +- Content.Shared/Roles/JobRequirements.cs | 27 ++- Content.Shared/Roles/SharedRoleSystem.cs | 46 ++-- Resources/Locale/en-US/zombies/zombie.ftl | 2 + .../Entities/Markers/Spawners/ghost_roles.yml | 22 +- .../Entities/Mobs/Player/humanoid.yml | 3 + .../Entities/Mobs/Player/silicon.yml | 10 +- .../reinforcement_teleporter.yml | 1 + 33 files changed, 898 insertions(+), 283 deletions(-) delete mode 100644 Content.Server/GameTicking/Events/IsJobAllowedEvent.cs create mode 100644 Content.Server/GameTicking/Events/IsRoleAllowedEvent.cs diff --git a/Content.Client/Administration/UI/BanPanel/BanPanel.xaml.cs b/Content.Client/Administration/UI/BanPanel/BanPanel.xaml.cs index c7aed30c1c..d20c741673 100644 --- a/Content.Client/Administration/UI/BanPanel/BanPanel.xaml.cs +++ b/Content.Client/Administration/UI/BanPanel/BanPanel.xaml.cs @@ -24,7 +24,7 @@ namespace Content.Client.Administration.UI.BanPanel; [GenerateTypedNameReferences] public sealed partial class BanPanel : DefaultWindow { - public event Action? BanSubmitted; + public event Action? BanSubmitted; public event Action? PlayerChanged; private string? PlayerUsername { get; set; } private (IPAddress, int)? IpAddress { get; set; } @@ -37,8 +37,8 @@ public sealed partial class BanPanel : DefaultWindow // This is less efficient than just holding a reference to the root control and enumerating children, but you // have to know how the controls are nested, which makes the code more complicated. // Role group name -> the role buttons themselves. - private readonly Dictionary> _roleCheckboxes = new(); - private readonly ISawmill _banpanelSawmill; + private readonly Dictionary> _roleCheckboxes = new(); + private readonly ISawmill _banPanelSawmill; [Dependency] private readonly IGameTiming _gameTiming = default!; [Dependency] private readonly IConfigurationManager _cfg = default!; @@ -79,7 +79,7 @@ public sealed partial class BanPanel : DefaultWindow { RobustXamlLoader.Load(this); IoCManager.InjectDependencies(this); - _banpanelSawmill = _logManager.GetSawmill("admin.banpanel"); + _banPanelSawmill = _logManager.GetSawmill("admin.banpanel"); PlayerList.OnSelectionChanged += OnPlayerSelectionChanged; PlayerNameLine.OnFocusExit += _ => OnPlayerNameChanged(); PlayerCheckbox.OnPressed += _ => @@ -110,7 +110,7 @@ public sealed partial class BanPanel : DefaultWindow TypeOption.SelectId(args.Id); OnTypeChanged(); }; - LastConnCheckbox.OnPressed += args => + LastConnCheckbox.OnPressed += _ => { IpLine.ModulateSelfOverride = null; HwidLine.ModulateSelfOverride = null; @@ -164,7 +164,7 @@ public sealed partial class BanPanel : DefaultWindow var antagRoles = _protoMan.EnumeratePrototypes() .OrderBy(x => x.ID); - CreateRoleGroup("Antagonist", Color.Red, antagRoles); + CreateRoleGroup(AntagPrototype.GroupName, AntagPrototype.GroupColor, antagRoles); } /// @@ -236,14 +236,14 @@ public sealed partial class BanPanel : DefaultWindow { foreach (var role in _roleCheckboxes[groupName]) { - role.Pressed = args.Pressed; + role.Item1.Pressed = args.Pressed; } if (args.Pressed) { if (!Enum.TryParse(_cfg.GetCVar(CCVars.DepartmentBanDefaultSeverity), true, out NoteSeverity newSeverity)) { - _banpanelSawmill + _banPanelSawmill .Warning("Departmental role ban severity could not be parsed from config!"); return; } @@ -255,14 +255,14 @@ public sealed partial class BanPanel : DefaultWindow { foreach (var button in roleButtons) { - if (button.Pressed) + if (button.Item1.Pressed) return; } } if (!Enum.TryParse(_cfg.GetCVar(CCVars.RoleBanDefaultSeverity), true, out NoteSeverity newSeverity)) { - _banpanelSawmill + _banPanelSawmill .Warning("Role ban severity could not be parsed from config!"); return; } @@ -294,7 +294,7 @@ public sealed partial class BanPanel : DefaultWindow } /// - /// Adds a checkbutton specifically for one "role" in a "group" + /// Adds a check button specifically for one "role" in a "group" /// E.g. it would add the Chief Medical Officer "role" into the "Medical" group. /// private void AddRoleCheckbox(string group, string role, GridContainer roleGroupInnerContainer, Button roleGroupCheckbox) @@ -302,23 +302,36 @@ public sealed partial class BanPanel : DefaultWindow var roleCheckboxContainer = new BoxContainer(); var roleCheckButton = new Button { - Name = $"{role}RoleCheckbox", + Name = role, Text = role, ToggleMode = true, }; roleCheckButton.OnToggled += args => { // Checks the role group checkbox if all the children are pressed - if (args.Pressed && _roleCheckboxes[group].All(e => e.Pressed)) + if (args.Pressed && _roleCheckboxes[group].All(e => e.Item1.Pressed)) roleGroupCheckbox.Pressed = args.Pressed; else roleGroupCheckbox.Pressed = false; }; + IPrototype rolePrototype; + + if (_protoMan.TryIndex(role, out var jobPrototype)) + rolePrototype = jobPrototype; + else if (_protoMan.TryIndex(role, out var antagPrototype)) + rolePrototype = antagPrototype; + else + { + _banPanelSawmill.Error($"Adding a role checkbox for role {role}: role is not a JobPrototype or AntagPrototype."); + + return; + } + // This is adding the icon before the role name // TODO: This should not be using raw strings for prototypes as it means it won't be validated at all. - // I know the ban manager is doing the same thing, but that should not leak into UI code. - if (_protoMan.TryIndex(role, out var jobPrototype) && _protoMan.Resolve(jobPrototype.Icon, out var iconProto)) + // // I know the ban manager is doing the same thing, but that should not leak into UI code. + if (jobPrototype is not null && _protoMan.TryIndex(jobPrototype.Icon, out var iconProto)) { var jobIconTexture = new TextureRect { @@ -335,7 +348,7 @@ public sealed partial class BanPanel : DefaultWindow roleGroupInnerContainer.AddChild(roleCheckboxContainer); _roleCheckboxes.TryAdd(group, []); - _roleCheckboxes[group].Add(roleCheckButton); + _roleCheckboxes[group].Add((roleCheckButton, rolePrototype)); } public void UpdateBanFlag(bool newFlag) @@ -488,7 +501,7 @@ public sealed partial class BanPanel : DefaultWindow newSeverity = serverSeverity; else { - _banpanelSawmill + _banPanelSawmill .Warning("Server ban severity could not be parsed from config!"); } @@ -501,7 +514,7 @@ public sealed partial class BanPanel : DefaultWindow } else { - _banpanelSawmill + _banPanelSawmill .Warning("Role ban severity could not be parsed from config!"); } break; @@ -546,34 +559,51 @@ public sealed partial class BanPanel : DefaultWindow private void SubmitButtonOnOnPressed(BaseButton.ButtonEventArgs obj) { - string[]? roles = null; + ProtoId[]? jobs = null; + ProtoId[]? antags = null; + if (TypeOption.SelectedId == (int) Types.Role) { - var rolesList = new List(); + var jobList = new List>(); + var antagList = new List>(); + if (_roleCheckboxes.Count == 0) throw new DebugAssertException("RoleCheckboxes was empty"); foreach (var button in _roleCheckboxes.Values.SelectMany(departmentButtons => departmentButtons)) { - if (button is { Pressed: true, Text: not null }) + if (button.Item1 is { Pressed: true, Name: not null }) { - rolesList.Add(button.Text); + switch (button.Item2) + { + case JobPrototype: + jobList.Add(button.Item2.ID); + + break; + case AntagPrototype: + antagList.Add(button.Item2.ID); + + break; + } } } - if (rolesList.Count == 0) + if (jobList.Count + antagList.Count == 0) { Tabs.CurrentTab = (int) TabNumbers.Roles; + return; } - roles = rolesList.ToArray(); + jobs = jobList.ToArray(); + antags = antagList.ToArray(); } if (TypeOption.SelectedId == (int) Types.None) { TypeOption.ModulateSelfOverride = Color.Red; Tabs.CurrentTab = (int) TabNumbers.BasicInfo; + return; } @@ -585,6 +615,7 @@ public sealed partial class BanPanel : DefaultWindow ReasonTextEdit.GrabKeyboardFocus(); ReasonTextEdit.ModulateSelfOverride = Color.Red; ReasonTextEdit.OnKeyBindDown += ResetTextEditor; + return; } @@ -593,6 +624,7 @@ public sealed partial class BanPanel : DefaultWindow ButtonResetOn = _gameTiming.CurTime.Add(TimeSpan.FromSeconds(3)); SubmitButton.ModulateSelfOverride = Color.Red; SubmitButton.Text = Loc.GetString("ban-panel-confirm"); + return; } @@ -601,7 +633,22 @@ public sealed partial class BanPanel : DefaultWindow var useLastHwid = HwidCheckbox.Pressed && LastConnCheckbox.Pressed && Hwid is null; var severity = (NoteSeverity) SeverityOption.SelectedId; var erase = EraseCheckbox.Pressed; - BanSubmitted?.Invoke(player, IpAddress, useLastIp, Hwid, useLastHwid, (uint) (TimeEntered * Multiplier), reason, severity, roles, erase); + + var ban = new Ban( + player, + IpAddress, + useLastIp, + Hwid, + useLastHwid, + (uint)(TimeEntered * Multiplier), + reason, + severity, + jobs, + antags, + erase + ); + + BanSubmitted?.Invoke(ban); } protected override void FrameUpdate(FrameEventArgs args) diff --git a/Content.Client/Administration/UI/BanPanel/BanPanelEui.cs b/Content.Client/Administration/UI/BanPanel/BanPanelEui.cs index 940a55e010..ac17576361 100644 --- a/Content.Client/Administration/UI/BanPanel/BanPanelEui.cs +++ b/Content.Client/Administration/UI/BanPanel/BanPanelEui.cs @@ -14,8 +14,7 @@ public sealed class BanPanelEui : BaseEui { BanPanel = new BanPanel(); BanPanel.OnClose += () => SendMessage(new CloseEuiMessage()); - BanPanel.BanSubmitted += (player, ip, useLastIp, hwid, useLastHwid, minutes, reason, severity, roles, erase) - => SendMessage(new BanPanelEuiStateMsg.CreateBanRequest(player, ip, useLastIp, hwid, useLastHwid, minutes, reason, severity, roles, erase)); + BanPanel.BanSubmitted += ban => SendMessage(new BanPanelEuiStateMsg.CreateBanRequest(ban)); BanPanel.PlayerChanged += player => SendMessage(new BanPanelEuiStateMsg.GetPlayerInfoRequest(player)); } diff --git a/Content.Client/Lobby/UI/HumanoidProfileEditor.xaml.cs b/Content.Client/Lobby/UI/HumanoidProfileEditor.xaml.cs index dfdfece979..609b633fe4 100644 --- a/Content.Client/Lobby/UI/HumanoidProfileEditor.xaml.cs +++ b/Content.Client/Lobby/UI/HumanoidProfileEditor.xaml.cs @@ -660,8 +660,10 @@ namespace Content.Client.Lobby.UI selector.Setup(items, title, 250, description, guides: antag.Guides); selector.Select(Profile?.AntagPreferences.Contains(antag.ID) == true ? 0 : 1); - var requirements = _entManager.System().GetAntagRequirement(antag); - if (!_requirements.CheckRoleRequirements(requirements, (HumanoidCharacterProfile?)_preferencesManager.Preferences?.SelectedCharacter, out var reason)) + if (!_requirements.IsAllowed( + antag, + (HumanoidCharacterProfile?)_preferencesManager.Preferences?.SelectedCharacter, + out var reason)) { selector.LockRequirements(reason); Profile = Profile?.WithAntagPreference(antag.ID, false); diff --git a/Content.Client/Players/PlayTimeTracking/JobRequirementsManager.cs b/Content.Client/Players/PlayTimeTracking/JobRequirementsManager.cs index 314b59eda9..d085d9005c 100644 --- a/Content.Client/Players/PlayTimeTracking/JobRequirementsManager.cs +++ b/Content.Client/Players/PlayTimeTracking/JobRequirementsManager.cs @@ -1,5 +1,4 @@ using System.Diagnostics.CodeAnalysis; -using Content.Client.Lobby; using Content.Shared.CCVar; using Content.Shared.Players; using Content.Shared.Players.JobWhitelist; @@ -26,7 +25,8 @@ public sealed class JobRequirementsManager : ISharedPlaytimeManager [Dependency] private readonly IPrototypeManager _prototypes = default!; private readonly Dictionary _roles = new(); - private readonly List _roleBans = new(); + private readonly List _jobBans = new(); + private readonly List _antagBans = new(); private readonly List _jobWhitelists = new(); private ISawmill _sawmill = default!; @@ -52,16 +52,19 @@ public sealed class JobRequirementsManager : ISharedPlaytimeManager // Reset on disconnect, just in case. _roles.Clear(); _jobWhitelists.Clear(); - _roleBans.Clear(); + _jobBans.Clear(); + _antagBans.Clear(); } } private void RxRoleBans(MsgRoleBans message) { - _sawmill.Debug($"Received roleban info containing {message.Bans.Count} entries."); + _sawmill.Debug($"Received role ban info: {message.JobBans.Count} job ban entries and {message.AntagBans.Count} antag ban entries."); - _roleBans.Clear(); - _roleBans.AddRange(message.Bans); + _jobBans.Clear(); + _jobBans.AddRange(message.JobBans); + _antagBans.Clear(); + _antagBans.AddRange(message.AntagBans); Updated?.Invoke(); } @@ -90,33 +93,97 @@ public sealed class JobRequirementsManager : ISharedPlaytimeManager Updated?.Invoke(); } - public bool IsAllowed(JobPrototype job, HumanoidCharacterProfile? profile, [NotNullWhen(false)] out FormattedMessage? reason) + /// + /// Check a list of job- and antag prototypes against the current player, for requirements and bans. + /// + /// + /// False if any of the prototypes are banned or have unmet requirements. + /// > + public bool IsAllowed( + List>? jobs, + List>? antags, + HumanoidCharacterProfile? profile, + [NotNullWhen(false)] out FormattedMessage? reason) { reason = null; - if (_roleBans.Contains($"Job:{job.ID}")) + if (antags is not null) + { + foreach (var proto in antags) + { + if (!IsAllowed(_prototypes.Index(proto), profile, out reason)) + return false; + } + } + + if (jobs is not null) + { + foreach (var proto in jobs) + { + if (!IsAllowed(_prototypes.Index(proto), profile, out reason)) + return false; + } + } + + return true; + } + + /// + /// Check the job prototype against the current player, for requirements and bans + /// + public bool IsAllowed( + JobPrototype job, + HumanoidCharacterProfile? profile, + [NotNullWhen(false)] out FormattedMessage? reason) + { + // Check the player's bans + if (_jobBans.Contains(job.ID)) { reason = FormattedMessage.FromUnformatted(Loc.GetString("role-ban")); return false; } + // Check whitelist requirements if (!CheckWhitelist(job, out reason)) return false; - var player = _playerManager.LocalSession; - if (player == null) - return true; + // Check other role requirements + var reqs = _entManager.System().GetRoleRequirements(job); + if (!CheckRoleRequirements(reqs, profile, out reason)) + return false; - return CheckRoleRequirements(job, profile, out reason); + return true; } - public bool CheckRoleRequirements(JobPrototype job, HumanoidCharacterProfile? profile, [NotNullWhen(false)] out FormattedMessage? reason) + /// + /// Check the antag prototype against the current player, for requirements and bans + /// + public bool IsAllowed( + AntagPrototype antag, + HumanoidCharacterProfile? profile, + [NotNullWhen(false)] out FormattedMessage? reason) { - var reqs = _entManager.System().GetJobRequirement(job); - return CheckRoleRequirements(reqs, profile, out reason); + // Check the player's bans + if (_antagBans.Contains(antag.ID)) + { + reason = FormattedMessage.FromUnformatted(Loc.GetString("role-ban")); + return false; + } + + // Check whitelist requirements + if (!CheckWhitelist(antag, out reason)) + return false; + + // Check other role requirements + var reqs = _entManager.System().GetRoleRequirements(antag); + if (!CheckRoleRequirements(reqs, profile, out reason)) + return false; + + return true; } - public bool CheckRoleRequirements(HashSet? requirements, HumanoidCharacterProfile? profile, [NotNullWhen(false)] out FormattedMessage? reason) + // This must be private so code paths can't accidentally skip requirement overrides. Call this through IsAllowed() + private bool CheckRoleRequirements(HashSet? requirements, HumanoidCharacterProfile? profile, [NotNullWhen(false)] out FormattedMessage? reason) { reason = null; @@ -151,6 +218,15 @@ public sealed class JobRequirementsManager : ISharedPlaytimeManager return true; } + public bool CheckWhitelist(AntagPrototype antag, [NotNullWhen(false)] out FormattedMessage? reason) + { + reason = default; + + // TODO: Implement antag whitelisting. + + return true; + } + public TimeSpan FetchOverallPlaytime() { return _roles.TryGetValue("Overall", out var overallPlaytime) ? overallPlaytime : TimeSpan.Zero; diff --git a/Content.Client/UserInterface/Systems/Ghost/Controls/Roles/GhostRolesEui.cs b/Content.Client/UserInterface/Systems/Ghost/Controls/Roles/GhostRolesEui.cs index 1cf1e55103..86dd6d2092 100644 --- a/Content.Client/UserInterface/Systems/Ghost/Controls/Roles/GhostRolesEui.cs +++ b/Content.Client/UserInterface/Systems/Ghost/Controls/Roles/GhostRolesEui.cs @@ -90,23 +90,25 @@ namespace Content.Client.UserInterface.Systems.Ghost.Controls.Roles var spriteSystem = sysManager.GetEntitySystem(); var requirementsManager = IoCManager.Resolve(); - // TODO: role.Requirements value doesn't work at all as an equality key, this must be fixed // Grouping roles var groupedRoles = ghostState.GhostRoles.GroupBy( - role => (role.Name, role.Description, role.Requirements)); + role => ( + role.Name, + role.Description, + // Check the prototypes for role requirements and bans + requirementsManager.IsAllowed(role.RolePrototypes.Item1, role.RolePrototypes.Item2, null, out var reason), + reason)); // Add a new entry for each role group foreach (var group in groupedRoles) { + var reason = group.Key.reason; var name = group.Key.Name; var description = group.Key.Description; - var hasAccess = requirementsManager.CheckRoleRequirements( - group.Key.Requirements, - null, - out var reason); + var prototypesAllowed = group.Key.Item3; // Adding a new role - _window.AddEntry(name, description, hasAccess, reason, group, spriteSystem); + _window.AddEntry(name, description, prototypesAllowed, reason, group, spriteSystem); } // Restore the Collapsible box state if it is saved diff --git a/Content.Server/Administration/BanPanelEui.cs b/Content.Server/Administration/BanPanelEui.cs index 0a09ad557f..4a4b721872 100644 --- a/Content.Server/Administration/BanPanelEui.cs +++ b/Content.Server/Administration/BanPanelEui.cs @@ -7,9 +7,7 @@ using Content.Server.EUI; using Content.Shared.Administration; using Content.Shared.Database; using Content.Shared.Eui; -using Content.Shared.Roles; using Robust.Shared.Network; -using Robust.Shared.Prototypes; namespace Content.Server.Administration; @@ -21,7 +19,6 @@ public sealed class BanPanelEui : BaseEui [Dependency] private readonly IPlayerLocator _playerLocator = default!; [Dependency] private readonly IChatManager _chat = default!; [Dependency] private readonly IAdminManager _admins = default!; - [Dependency] private readonly IPrototypeManager _prototypeManager = default!; private readonly ISawmill _sawmill; @@ -52,7 +49,7 @@ public sealed class BanPanelEui : BaseEui switch (msg) { case BanPanelEuiStateMsg.CreateBanRequest r: - BanPlayer(r.Player, r.IpAddress, r.UseLastIp, r.Hwid, r.UseLastHwid, r.Minutes, r.Severity, r.Reason, r.Roles, r.Erase); + BanPlayer(r.Ban); break; case BanPanelEuiStateMsg.GetPlayerInfoRequest r: ChangePlayer(r.PlayerUsername); @@ -60,29 +57,26 @@ public sealed class BanPanelEui : BaseEui } } - private async void BanPlayer(string? target, string? ipAddressString, bool useLastIp, ImmutableTypedHwid? hwid, bool useLastHwid, uint minutes, NoteSeverity severity, string reason, IReadOnlyCollection? roles, bool erase) + private async void BanPlayer(Ban ban) { if (!_admins.HasAdminFlag(Player, AdminFlags.Ban)) { _sawmill.Warning($"{Player.Name} ({Player.UserId}) tried to create a ban with no ban flag"); + return; } - if (target == null && string.IsNullOrWhiteSpace(ipAddressString) && hwid == null) + + if (ban.Target == null && string.IsNullOrWhiteSpace(ban.IpAddress) && ban.Hwid == null) { _chat.DispatchServerMessage(Player, Loc.GetString("ban-panel-no-data")); + return; } (IPAddress, int)? addressRange = null; - if (ipAddressString is not null) + if (ban.IpAddress is not null) { - var hid = "0"; - var split = ipAddressString.Split('/', 2); - ipAddressString = split[0]; - if (split.Length > 1) - hid = split[1]; - - if (!IPAddress.TryParse(ipAddressString, out var ipAddress) || !uint.TryParse(hid, out var hidInt) || hidInt > Ipv6_CIDR || hidInt > Ipv4_CIDR && ipAddress.AddressFamily == AddressFamily.InterNetwork) + if (!IPAddress.TryParse(ban.IpAddress, out var ipAddress) || !uint.TryParse(ban.IpAddressHid, out var hidInt) || hidInt > Ipv6_CIDR || hidInt > Ipv4_CIDR && ipAddress.AddressFamily == AddressFamily.InterNetwork) { _chat.DispatchServerMessage(Player, Loc.GetString("ban-panel-invalid-ip")); return; @@ -94,12 +88,12 @@ public sealed class BanPanelEui : BaseEui addressRange = (ipAddress, (int) hidInt); } - var targetUid = target is not null ? PlayerId : null; - addressRange = useLastIp && LastAddress is not null ? (LastAddress, LastAddress.AddressFamily == AddressFamily.InterNetworkV6 ? Ipv6_CIDR : Ipv4_CIDR) : addressRange; - var targetHWid = useLastHwid ? LastHwid : hwid; - if (target != null && target != PlayerName || Guid.TryParse(target, out var parsed) && parsed != PlayerId) + var targetUid = ban.Target is not null ? PlayerId : null; + addressRange = ban.UseLastIp && LastAddress is not null ? (LastAddress, LastAddress.AddressFamily == AddressFamily.InterNetworkV6 ? Ipv6_CIDR : Ipv4_CIDR) : addressRange; + var targetHWid = ban.UseLastHwid ? LastHwid : ban.Hwid; + if (ban.Target != null && ban.Target != PlayerName || Guid.TryParse(ban.Target, out var parsed) && parsed != PlayerId) { - var located = await _playerLocator.LookupIdByNameOrIdAsync(target); + var located = await _playerLocator.LookupIdByNameOrIdAsync(ban.Target); if (located == null) { _chat.DispatchServerMessage(Player, Loc.GetString("cmd-ban-player")); @@ -107,7 +101,7 @@ public sealed class BanPanelEui : BaseEui } targetUid = located.UserId; var targetAddress = located.LastAddress; - if (useLastIp && targetAddress != null) + if (ban.UseLastIp && targetAddress != null) { if (targetAddress.IsIPv4MappedToIPv6) targetAddress = targetAddress.MapToIPv4(); @@ -116,30 +110,50 @@ public sealed class BanPanelEui : BaseEui var hid = targetAddress.AddressFamily == AddressFamily.InterNetworkV6 ? Ipv6_CIDR : Ipv4_CIDR; addressRange = (targetAddress, hid); } - targetHWid = useLastHwid ? located.LastHWId : hwid; + targetHWid = ban.UseLastHwid ? located.LastHWId : ban.Hwid; } - if (roles?.Count > 0) + if (ban.BannedJobs?.Length > 0 || ban.BannedAntags?.Length > 0) { var now = DateTimeOffset.UtcNow; - foreach (var role in roles) + foreach (var role in ban.BannedJobs ?? []) { - if (_prototypeManager.HasIndex(role)) - { - _banManager.CreateRoleBan(targetUid, target, Player.UserId, addressRange, targetHWid, role, minutes, severity, reason, now); - } - else - { - _sawmill.Warning($"{Player.Name} ({Player.UserId}) tried to issue a job ban with an invalid job: {role}"); - } + _banManager.CreateRoleBan( + targetUid, + ban.Target, + Player.UserId, + addressRange, + targetHWid, + role, + ban.BanDurationMinutes, + ban.Severity, + ban.Reason, + now + ); + } + + foreach (var role in ban.BannedAntags ?? []) + { + _banManager.CreateRoleBan( + targetUid, + ban.Target, + Player.UserId, + addressRange, + targetHWid, + role, + ban.BanDurationMinutes, + ban.Severity, + ban.Reason, + now + ); } Close(); + return; } - if (erase && - targetUid != null) + if (ban.Erase && targetUid is not null) { try { @@ -152,7 +166,16 @@ public sealed class BanPanelEui : BaseEui } } - _banManager.CreateServerBan(targetUid, target, Player.UserId, addressRange, targetHWid, minutes, severity, reason); + _banManager.CreateServerBan( + targetUid, + ban.Target, + Player.UserId, + addressRange, + targetHWid, + ban.BanDurationMinutes, + ban.Severity, + ban.Reason + ); Close(); } diff --git a/Content.Server/Administration/Commands/RoleBanCommand.cs b/Content.Server/Administration/Commands/RoleBanCommand.cs index 7058803d2f..c49af32881 100644 --- a/Content.Server/Administration/Commands/RoleBanCommand.cs +++ b/Content.Server/Administration/Commands/RoleBanCommand.cs @@ -29,9 +29,10 @@ public sealed class RoleBanCommand : IConsoleCommand public async void Execute(IConsoleShell shell, string argStr, string[] args) { string target; - string job; + string role; string reason; uint minutes; + if (!Enum.TryParse(_cfg.GetCVar(CCVars.RoleBanDefaultSeverity), out NoteSeverity severity)) { _sawmill ??= _log.GetSawmill("admin.role_ban"); @@ -43,30 +44,33 @@ public sealed class RoleBanCommand : IConsoleCommand { case 3: target = args[0]; - job = args[1]; + role = args[1]; reason = args[2]; minutes = 0; + break; case 4: target = args[0]; - job = args[1]; + role = args[1]; reason = args[2]; if (!uint.TryParse(args[3], out minutes)) { shell.WriteError(Loc.GetString("cmd-roleban-minutes-parse", ("time", args[3]), ("help", Help))); + return; } break; case 5: target = args[0]; - job = args[1]; + role = args[1]; reason = args[2]; if (!uint.TryParse(args[3], out minutes)) { shell.WriteError(Loc.GetString("cmd-roleban-minutes-parse", ("time", args[3]), ("help", Help))); + return; } @@ -80,26 +84,27 @@ public sealed class RoleBanCommand : IConsoleCommand default: shell.WriteError(Loc.GetString("cmd-roleban-arg-count")); shell.WriteLine(Help); - return; - } - if (!_proto.HasIndex(job)) - { - shell.WriteError(Loc.GetString("cmd-roleban-job-parse", ("job", job))); - return; + return; } var located = await _locator.LookupIdByNameOrIdAsync(target); if (located == null) { shell.WriteError(Loc.GetString("cmd-roleban-name-parse")); + return; } var targetUid = located.UserId; var targetHWid = located.LastHWId; - _bans.CreateRoleBan(targetUid, located.Username, shell.Player?.UserId, null, targetHWid, job, minutes, severity, reason, DateTimeOffset.UtcNow); + if (_proto.HasIndex(role)) + _bans.CreateRoleBan(targetUid, located.Username, shell.Player?.UserId, null, targetHWid, role, minutes, severity, reason, DateTimeOffset.UtcNow); + else if (_proto.HasIndex(role)) + _bans.CreateRoleBan(targetUid, located.Username, shell.Player?.UserId, null, targetHWid, role, minutes, severity, reason, DateTimeOffset.UtcNow); + else + shell.WriteError(Loc.GetString("cmd-roleban-job-parse", ("job", role))); } public CompletionResult GetCompletion(IConsoleShell shell, string[] args) diff --git a/Content.Server/Administration/Managers/BanManager.cs b/Content.Server/Administration/Managers/BanManager.cs index 2d76c434e9..17f796e699 100644 --- a/Content.Server/Administration/Managers/BanManager.cs +++ b/Content.Server/Administration/Managers/BanManager.cs @@ -26,24 +26,25 @@ namespace Content.Server.Administration.Managers; public sealed partial class BanManager : IBanManager, IPostInjectInit { + [Dependency] private readonly IConfigurationManager _cfg = default!; + [Dependency] private readonly IChatManager _chat = default!; [Dependency] private readonly IServerDbManager _db = default!; + [Dependency] private readonly ServerDbEntryManager _entryManager = default!; + [Dependency] private readonly IGameTiming _gameTiming = default!; + [Dependency] private readonly ILocalizationManager _localizationManager = default!; + [Dependency] private readonly ILogManager _logManager = default!; + [Dependency] private readonly INetManager _netManager = default!; [Dependency] private readonly IPlayerManager _playerManager = default!; [Dependency] private readonly IPrototypeManager _prototypeManager = default!; [Dependency] private readonly IEntitySystemManager _systems = default!; - [Dependency] private readonly IConfigurationManager _cfg = default!; - [Dependency] private readonly ILocalizationManager _localizationManager = default!; - [Dependency] private readonly ServerDbEntryManager _entryManager = default!; - [Dependency] private readonly IChatManager _chat = default!; - [Dependency] private readonly INetManager _netManager = default!; - [Dependency] private readonly ILogManager _logManager = default!; - [Dependency] private readonly IGameTiming _gameTiming = default!; [Dependency] private readonly ITaskManager _taskManager = default!; [Dependency] private readonly UserDbDataManager _userDbData = default!; private ISawmill _sawmill = default!; public const string SawmillId = "admin.bans"; - public const string JobPrefix = "Job:"; + public const string PrefixAntag = "Antag:"; + public const string PrefixJob = "Job:"; private readonly Dictionary> _cachedRoleBans = new(); // Cached ban exemption flags are used to handle @@ -91,30 +92,6 @@ public sealed partial class BanManager : IBanManager, IPostInjectInit _cachedBanExemptions.Remove(player); } - private async Task AddRoleBan(ServerRoleBanDef banDef) - { - banDef = await _db.AddServerRoleBanAsync(banDef); - - if (banDef.UserId != null - && _playerManager.TryGetSessionById(banDef.UserId, out var player) - && _cachedRoleBans.TryGetValue(player, out var cachedBans)) - { - cachedBans.Add(banDef); - } - - return true; - } - - public HashSet? GetRoleBans(NetUserId playerUserId) - { - if (!_playerManager.TryGetSessionById(playerUserId, out var session)) - return null; - - return _cachedRoleBans.TryGetValue(session, out var roleBans) - ? roleBans.Select(banDef => banDef.Role).ToHashSet() - : null; - } - public void Restart() { // Clear out players that have disconnected. @@ -232,23 +209,54 @@ public sealed partial class BanManager : IBanManager, IPostInjectInit #endregion - #region Job Bans + #region Role Bans + // If you are trying to remove timeOfBan, please don't. It's there because the note system groups role bans by time, reason and banning admin. // Removing it will clutter the note list. Please also make sure that department bans are applied to roles with the same DateTimeOffset. - public async void CreateRoleBan(NetUserId? target, string? targetUsername, NetUserId? banningAdmin, (IPAddress, int)? addressRange, ImmutableTypedHwid? hwid, string role, uint? minutes, NoteSeverity severity, string reason, DateTimeOffset timeOfBan) + public async void CreateRoleBan( + NetUserId? target, + string? targetUsername, + NetUserId? banningAdmin, + (IPAddress, int)? addressRange, + ImmutableTypedHwid? hwid, + ProtoId role, + uint? minutes, + NoteSeverity severity, + string reason, + DateTimeOffset timeOfBan + ) where T : class, IPrototype { - if (!_prototypeManager.TryIndex(role, out JobPrototype? _)) + string encodedRole; + + // TODO: Note that it's possible to clash IDs here between a job and an antag. The refactor that introduced + // this check has consciously avoided refactoring Job and Antag prototype. + // Refactor Job- and Antag- Prototype to introduce a common RolePrototype, which will fix this possible clash. + + //TODO remove this check as part of the above refactor + if (_prototypeManager.HasIndex(role) && _prototypeManager.HasIndex(role)) { - throw new ArgumentException($"Invalid role '{role}'", nameof(role)); + _sawmill.Error($"Creating role ban for {role}: cannot create role ban, role is both JobPrototype and AntagPrototype."); + + return; } - role = string.Concat(JobPrefix, role); - DateTimeOffset? expires = null; - if (minutes > 0) + // Don't trust the input: make sure the job or antag actually exists. + if (_prototypeManager.HasIndex(role)) + encodedRole = PrefixJob + role; + else if (_prototypeManager.HasIndex(role)) + encodedRole = PrefixAntag + role; + else { - expires = DateTimeOffset.Now + TimeSpan.FromMinutes(minutes.Value); + _sawmill.Error($"Creating role ban for {role}: cannot create role ban, role is not a JobPrototype or an AntagPrototype."); + + return; } + DateTimeOffset? expires = null; + + if (minutes > 0) + expires = DateTimeOffset.Now + TimeSpan.FromMinutes(minutes.Value); + _systems.TryGetEntitySystem(out GameTicker? ticker); int? roundId = ticker == null || ticker.RoundId == 0 ? null : ticker.RoundId; var playtime = target == null ? TimeSpan.Zero : (await _db.GetPlayTimes(target.Value)).Find(p => p.Tracker == PlayTimeTrackingShared.TrackerOverall)?.TimeSpent ?? TimeSpan.Zero; @@ -266,21 +274,34 @@ public sealed partial class BanManager : IBanManager, IPostInjectInit severity, banningAdmin, null, - role); + encodedRole); if (!await AddRoleBan(banDef)) { _chat.SendAdminAlert(Loc.GetString("cmd-roleban-existing", ("target", targetUsername ?? "null"), ("role", role))); + return; } var length = expires == null ? Loc.GetString("cmd-roleban-inf") : Loc.GetString("cmd-roleban-until", ("expires", expires)); _chat.SendAdminAlert(Loc.GetString("cmd-roleban-success", ("target", targetUsername ?? "null"), ("role", role), ("reason", reason), ("length", length))); - if (target != null && _playerManager.TryGetSessionById(target.Value, out var session)) - { + if (target is not null && _playerManager.TryGetSessionById(target.Value, out var session)) SendRoleBans(session); + } + + private async Task AddRoleBan(ServerRoleBanDef banDef) + { + banDef = await _db.AddServerRoleBanAsync(banDef); + + if (banDef.UserId != null + && _playerManager.TryGetSessionById(banDef.UserId, out var player) + && _cachedRoleBans.TryGetValue(player, out var cachedBans)) + { + cachedBans.Add(banDef); } + + return true; } public async Task PardonRoleBan(int banId, NetUserId? unbanningAdmin, DateTimeOffset unbanTime) @@ -319,32 +340,109 @@ public sealed partial class BanManager : IBanManager, IPostInjectInit } public HashSet>? GetJobBans(NetUserId playerUserId) + { + return GetRoleBans(playerUserId, PrefixJob); + } + + public HashSet>? GetAntagBans(NetUserId playerUserId) + { + return GetRoleBans(playerUserId, PrefixAntag); + } + + private HashSet>? GetRoleBans(NetUserId playerUserId, string prefix) where T : class, IPrototype { if (!_playerManager.TryGetSessionById(playerUserId, out var session)) return null; - if (!_cachedRoleBans.TryGetValue(session, out var roleBans)) + return GetRoleBans(session, prefix); + } + + private HashSet>? GetRoleBans(ICommonSession playerSession, string prefix) where T : class, IPrototype + { + if (!_cachedRoleBans.TryGetValue(playerSession, out var roleBans)) return null; return roleBans - .Where(ban => ban.Role.StartsWith(JobPrefix, StringComparison.Ordinal)) - .Select(ban => new ProtoId(ban.Role[JobPrefix.Length..])) + .Where(ban => ban.Role.StartsWith(prefix, StringComparison.Ordinal)) + .Select(ban => new ProtoId(ban.Role[prefix.Length..])) .ToHashSet(); } - #endregion + + public HashSet? GetRoleBans(NetUserId playerUserId) + { + if (!_playerManager.TryGetSessionById(playerUserId, out var session)) + return null; + + return _cachedRoleBans.TryGetValue(session, out var roleBans) + ? roleBans.Select(banDef => banDef.Role).ToHashSet() + : null; + } + + public bool IsRoleBanned(ICommonSession player, List> jobs) + { + return IsRoleBanned(player, jobs, PrefixJob); + } + + public bool IsRoleBanned(ICommonSession player, List> antags) + { + return IsRoleBanned(player, antags, PrefixAntag); + } + + private bool IsRoleBanned(ICommonSession player, List> roles, string prefix) where T : class, IPrototype + { + var bans = GetRoleBans(player.UserId); + + if (bans is null || bans.Count == 0) + return false; + + // ReSharper disable once ForeachCanBeConvertedToQueryUsingAnotherGetEnumerator + foreach (var role in roles) + { + if (bans.Contains(prefix + role)) + return true; + } + + return false; + } public void SendRoleBans(ICommonSession pSession) { - var roleBans = _cachedRoleBans.GetValueOrDefault(pSession) ?? new List(); + var jobBans = GetRoleBans(pSession, PrefixJob); + var jobBansList = new List(jobBans?.Count ?? 0); + + if (jobBans is not null) + { + // ReSharper disable once ForeachCanBeConvertedToQueryUsingAnotherGetEnumerator + foreach (var encodedId in jobBans) + { + jobBansList.Add(encodedId.ToString().Replace(PrefixJob, "")); + } + } + + var antagBans = GetRoleBans(pSession, PrefixAntag); + var antagBansList = new List(antagBans?.Count ?? 0); + + if (antagBans is not null) + { + // ReSharper disable once ForeachCanBeConvertedToQueryUsingAnotherGetEnumerator + foreach (var encodedId in antagBans) + { + antagBansList.Add(encodedId.ToString().Replace(PrefixAntag, "")); + } + } + var bans = new MsgRoleBans() { - Bans = roleBans.Select(o => o.Role).ToList() + JobBans = jobBansList, + AntagBans = antagBansList, }; - _sawmill.Debug($"Sent rolebans to {pSession.Name}"); + _sawmill.Debug($"Sent role bans to {pSession.Name}"); _netManager.ServerSendMessage(bans, pSession.Channel); } + #endregion + public void PostInject() { _sawmill = _logManager.GetSawmill(SawmillId); diff --git a/Content.Server/Administration/Managers/IBanManager.cs b/Content.Server/Administration/Managers/IBanManager.cs index fc192cc306..1912ebe9ec 100644 --- a/Content.Server/Administration/Managers/IBanManager.cs +++ b/Content.Server/Administration/Managers/IBanManager.cs @@ -1,4 +1,3 @@ -using System.Collections.Immutable; using System.Net; using System.Threading.Tasks; using Content.Shared.Database; @@ -25,19 +24,63 @@ public interface IBanManager /// Severity of the resulting ban note /// Reason for the ban public void CreateServerBan(NetUserId? target, string? targetUsername, NetUserId? banningAdmin, (IPAddress, int)? addressRange, ImmutableTypedHwid? hwid, uint? minutes, NoteSeverity severity, string reason); + + /// + /// Gets a list of prefixed prototype IDs with the player's role bans. + /// public HashSet? GetRoleBans(NetUserId playerUserId); + + /// + /// Checks if the player is currently banned from any of the listed roles. + /// + /// The player. + /// A list of valid antag prototype IDs. + /// Returns True if an active role ban is found for this player for any of the listed roles. + public bool IsRoleBanned(ICommonSession player, List> antags); + + /// + /// Checks if the player is currently banned from any of the listed roles. + /// + /// The player. + /// A list of valid job prototype IDs. + /// Returns True if an active role ban is found for this player for any of the listed roles. + public bool IsRoleBanned(ICommonSession player, List> jobs); + + /// + /// Gets a list of prototype IDs with the player's job bans. + /// public HashSet>? GetJobBans(NetUserId playerUserId); + /// + /// Gets a list of prototype IDs with the player's antag bans. + /// + public HashSet>? GetAntagBans(NetUserId playerUserId); + /// /// Creates a job ban for the specified target, username or GUID /// /// Target user, username or GUID, null for none - /// Role to be banned from + /// The username of the target, if known + /// The responsible admin for the ban + /// The range of IPs that are to be banned, if known + /// The HWID to be banned, if known + /// The role ID to be banned from. Either an AntagPrototype or a JobPrototype + /// Number of minutes to ban for. 0 and null mean permanent /// Severity of the resulting ban note /// Reason for the ban - /// Number of minutes to ban for. 0 and null mean permanent /// Time when the ban was applied, used for grouping role bans - public void CreateRoleBan(NetUserId? target, string? targetUsername, NetUserId? banningAdmin, (IPAddress, int)? addressRange, ImmutableTypedHwid? hwid, string role, uint? minutes, NoteSeverity severity, string reason, DateTimeOffset timeOfBan); + public void CreateRoleBan( + NetUserId? target, + string? targetUsername, + NetUserId? banningAdmin, + (IPAddress, int)? addressRange, + ImmutableTypedHwid? hwid, + ProtoId role, + uint? minutes, + NoteSeverity severity, + string reason, + DateTimeOffset timeOfBan + ) where T : class, IPrototype; /// /// Pardons a role ban for the specified target, username or GUID diff --git a/Content.Server/Antag/AntagSelectionSystem.API.cs b/Content.Server/Antag/AntagSelectionSystem.API.cs index 975c802eed..6703b7b7ca 100644 --- a/Content.Server/Antag/AntagSelectionSystem.API.cs +++ b/Content.Server/Antag/AntagSelectionSystem.API.cs @@ -2,16 +2,17 @@ using System.Diagnostics.CodeAnalysis; using System.Linq; using Content.Server.Antag.Components; using Content.Server.GameTicking.Rules.Components; -using Content.Server.Objectives; using Content.Shared.Antag; using Content.Shared.Chat; using Content.Shared.GameTicking.Components; using Content.Shared.Mind; using Content.Shared.Preferences; +using Content.Shared.Roles; using JetBrains.Annotations; using Robust.Shared.Audio; using Robust.Shared.Enums; using Robust.Shared.Player; +using Robust.Shared.Prototypes; namespace Content.Server.Antag; @@ -161,33 +162,35 @@ public sealed partial class AntagSelectionSystem } /// - /// Checks if a given session has the primary antag preferences for a given definition + /// Checks if a given session has enabled the antag preferences for a given definition, + /// and if it is blocked by any requirements or bans. /// - public bool HasPrimaryAntagPreference(ICommonSession? session, AntagSelectionDefinition def) + /// Returns true if at least one role from the provided list passes every condition> + public bool ValidAntagPreference(ICommonSession? session, List> roles) { if (session == null) return true; - if (def.PrefRoles.Count == 0) + if (roles.Count == 0) return false; var pref = (HumanoidCharacterProfile) _pref.GetPreferences(session.UserId).SelectedCharacter; - return pref.AntagPreferences.Any(p => def.PrefRoles.Contains(p)); - } - /// - /// Checks if a given session has the fallback antag preferences for a given definition - /// - public bool HasFallbackAntagPreference(ICommonSession? session, AntagSelectionDefinition def) - { - if (session == null) - return true; + var valid = false; - if (def.FallbackRoles.Count == 0) - return false; + // Check each individual antag role + foreach (var role in roles) + { + var list = new List>{role}; - var pref = (HumanoidCharacterProfile) _pref.GetPreferences(session.UserId).SelectedCharacter; - return pref.AntagPreferences.Any(p => def.FallbackRoles.Contains(p)); + + if (pref.AntagPreferences.Contains(role) + && !_ban.IsRoleBanned(session, list) + && _playTime.IsAllowed(session, list)) + valid = true; + } + + return valid; } /// diff --git a/Content.Server/Antag/AntagSelectionSystem.cs b/Content.Server/Antag/AntagSelectionSystem.cs index 7fdf812fbe..2d484a2aa9 100644 --- a/Content.Server/Antag/AntagSelectionSystem.cs +++ b/Content.Server/Antag/AntagSelectionSystem.cs @@ -1,4 +1,5 @@ using System.Linq; +using Content.Server.Administration.Managers; using Content.Server.Antag.Components; using Content.Server.Chat.Managers; using Content.Server.GameTicking; @@ -8,11 +9,11 @@ using Content.Server.Ghost.Roles; using Content.Server.Ghost.Roles.Components; using Content.Server.Mind; using Content.Server.Objectives; +using Content.Server.Players.PlayTimeTracking; using Content.Server.Preferences.Managers; using Content.Server.Roles; using Content.Server.Roles.Jobs; using Content.Server.Shuttles.Components; -using Content.Server.Station.Events; using Content.Shared.Administration.Logs; using Content.Shared.Antag; using Content.Shared.Clothing; @@ -40,12 +41,14 @@ namespace Content.Server.Antag; public sealed partial class AntagSelectionSystem : GameRuleSystem { [Dependency] private readonly AudioSystem _audio = default!; + [Dependency] private readonly IBanManager _ban = default!; [Dependency] private readonly IChatManager _chat = default!; [Dependency] private readonly GhostRoleSystem _ghostRole = default!; [Dependency] private readonly JobSystem _jobs = default!; [Dependency] private readonly LoadoutSystem _loadout = default!; [Dependency] private readonly MindSystem _mind = default!; [Dependency] private readonly IPlayerManager _playerManager = default!; + [Dependency] private readonly PlayTimeTrackingSystem _playTime = default!; [Dependency] private readonly IServerPreferencesManager _pref = default!; [Dependency] private readonly RoleSystem _role = default!; [Dependency] private readonly TransformSystem _transform = default!; @@ -344,7 +347,7 @@ public sealed partial class AntagSelectionSystem : GameRuleSystem? OnNotificationReceived; /// Sawmill to trace log database operations to. @@ -1386,7 +1385,7 @@ INSERT INTO player_round (players_id, rounds_id) VALUES ({players[player]}, {id} ban.LastEditedAt, ban.ExpirationTime, ban.Hidden, - new [] { ban.RoleId.Replace(BanManager.JobPrefix, null) }, + new [] { ban.RoleId.Replace(BanManager.PrefixJob, null).Replace(BanManager.PrefixAntag, null) }, MakePlayerRecord(unbanningAdmin), ban.Unban?.UnbanTime); } @@ -1686,7 +1685,7 @@ INSERT INTO player_round (players_id, rounds_id) VALUES ({players[player]}, {id} NormalizeDatabaseTime(firstBan.LastEditedAt), NormalizeDatabaseTime(firstBan.ExpirationTime), firstBan.Hidden, - banGroup.Select(ban => ban.RoleId.Replace(BanManager.JobPrefix, null)).ToArray(), + banGroup.Select(ban => ban.RoleId.Replace(BanManager.PrefixJob, null).Replace(BanManager.PrefixAntag, null)).ToArray(), MakePlayerRecord(unbanningAdmin), NormalizeDatabaseTime(firstBan.Unban?.UnbanTime))); } diff --git a/Content.Server/GameTicking/Events/IsJobAllowedEvent.cs b/Content.Server/GameTicking/Events/IsJobAllowedEvent.cs deleted file mode 100644 index 51969d61ea..0000000000 --- a/Content.Server/GameTicking/Events/IsJobAllowedEvent.cs +++ /dev/null @@ -1,13 +0,0 @@ -using Content.Shared.Roles; -using Robust.Shared.Player; -using Robust.Shared.Prototypes; - -namespace Content.Server.GameTicking.Events; - -[ByRefEvent] -public struct IsJobAllowedEvent(ICommonSession player, ProtoId jobId, bool cancelled = false) -{ - public readonly ICommonSession Player = player; - public readonly ProtoId JobId = jobId; - public bool Cancelled = cancelled; -} diff --git a/Content.Server/GameTicking/Events/IsRoleAllowedEvent.cs b/Content.Server/GameTicking/Events/IsRoleAllowedEvent.cs new file mode 100644 index 0000000000..76d2805d1c --- /dev/null +++ b/Content.Server/GameTicking/Events/IsRoleAllowedEvent.cs @@ -0,0 +1,24 @@ +using Content.Shared.Roles; +using Robust.Shared.Player; +using Robust.Shared.Prototypes; + +namespace Content.Server.GameTicking.Events; + +/// +/// Event raised to check if a player is allowed/able to assume a role. +/// +/// The player. +/// Optional list of job prototype IDs +/// Optional list of antag prototype IDs +[ByRefEvent] +public struct IsRoleAllowedEvent( + ICommonSession player, + List>? jobs, + List>? antags, + bool cancelled = false) +{ + public readonly ICommonSession Player = player; + public readonly List>? Jobs = jobs; + public readonly List>? Antags = antags; + public bool Cancelled = cancelled; +} diff --git a/Content.Server/GameTicking/GameTicker.Spawning.cs b/Content.Server/GameTicking/GameTicker.Spawning.cs index 194f6c4997..2338d4f1fe 100644 --- a/Content.Server/GameTicking/GameTicker.Spawning.cs +++ b/Content.Server/GameTicking/GameTicker.Spawning.cs @@ -141,12 +141,13 @@ namespace Content.Server.GameTicking var character = GetPlayerProfile(player); var jobBans = _banManager.GetJobBans(player.UserId); - if (jobBans == null || jobId != null && jobBans.Contains(jobId)) + if (jobBans == null || jobId != null && jobBans.Contains(jobId)) //TODO: use IsRoleBanned directly? return; if (jobId != null) { - var ev = new IsJobAllowedEvent(player, new ProtoId(jobId)); + var jobs = new List> {jobId}; + var ev = new IsRoleAllowedEvent(player, jobs, null); RaiseLocalEvent(ref ev); if (ev.Cancelled) return; diff --git a/Content.Server/Ghost/Roles/Components/GhostRoleComponent.cs b/Content.Server/Ghost/Roles/Components/GhostRoleComponent.cs index 5dd390bd72..98aaf672c2 100644 --- a/Content.Server/Ghost/Roles/Components/GhostRoleComponent.cs +++ b/Content.Server/Ghost/Roles/Components/GhostRoleComponent.cs @@ -15,12 +15,6 @@ public sealed partial class GhostRoleComponent : Component [DataField("rules")] private string _roleRules = "ghost-role-component-default-rules"; - // Actually make use of / enforce this requirement? - // Why is this even here. - // Move to ghost role prototype & respect CCvars.GameRoleTimerOverride - [DataField("requirements")] - public HashSet? Requirements; - /// /// Whether the should run on the mob. /// diff --git a/Content.Server/Ghost/Roles/GhostRoleSystem.cs b/Content.Server/Ghost/Roles/GhostRoleSystem.cs index 182d8e968e..b2cbd6a152 100644 --- a/Content.Server/Ghost/Roles/GhostRoleSystem.cs +++ b/Content.Server/Ghost/Roles/GhostRoleSystem.cs @@ -1,6 +1,8 @@ using System.Linq; using Content.Server.Administration.Logs; +using Content.Server.Administration.Managers; using Content.Server.EUI; +using Content.Server.GameTicking.Events; using Content.Server.Ghost.Roles.Components; using Content.Server.Ghost.Roles.Events; using Content.Shared.Ghost.Roles.Raffles; @@ -32,13 +34,16 @@ using Content.Server.Popups; using Content.Shared.Verbs; using Robust.Shared.Collections; using Content.Shared.Ghost.Roles.Components; +using Content.Shared.Roles.Components; namespace Content.Server.Ghost.Roles; [UsedImplicitly] public sealed class GhostRoleSystem : EntitySystem { + [Dependency] private readonly IBanManager _ban = default!; [Dependency] private readonly IConfigurationManager _cfg = default!; + [Dependency] private readonly IEntityManager _ent = default!; [Dependency] private readonly EuiManager _euiManager = default!; [Dependency] private readonly IPlayerManager _playerManager = default!; [Dependency] private readonly IAdminLogManager _adminLogger = default!; @@ -459,6 +464,23 @@ public sealed class GhostRoleSystem : EntitySystem if (!_ghostRoles.TryGetValue(identifier, out var roleEnt)) return; + TryPrototypes(roleEnt, out var antags, out var jobs); + + // Check role bans + if (_ban.IsRoleBanned(player, antags) || _ban.IsRoleBanned(player, jobs)) + { + Log.Warning($"Server rejected ghost role request '{roleEnt.Comp.RoleName}' for '{player.Name}' - client missed ban?"); + return; + } + + // Check role requirements + if (!IsRoleAllowed(player, jobs, antags)) + { + Log.Warning($"Server rejected ghost role request '{roleEnt.Comp.RoleName}' for '{player.Name}' - client missed requirement check?"); + return; + } + + // Decide to do a raffle or not if (roleEnt.Comp.RaffleConfig is not null) { JoinRaffle(player, identifier); @@ -469,6 +491,78 @@ public sealed class GhostRoleSystem : EntitySystem } } + /// + /// Collect all role prototypes on the Ghostrole. + /// + /// + /// Returns true if at least on role prototype could be found. + /// + private bool TryPrototypes( + Entity roleEnt, + out List> antags, + out List> jobs) + { + antags = []; + jobs = []; + + // If there is a mind already, check its mind roles. + // Not sure if this can ever actually happen. + if (TryComp(roleEnt, out var mindCont) + && TryComp(mindCont.Mind, out var mind)) + { + foreach (var role in mind.MindRoleContainer.ContainedEntities) + { + if(!TryComp(role, out var comp)) + continue; + + if (comp.JobPrototype is not null) + jobs.Add(comp.JobPrototype.Value); + + else if (comp.AntagPrototype is not null) + antags.Add(comp.AntagPrototype.Value); + } + + return antags.Count > 0 || jobs.Count > 0; + } + + if (roleEnt.Comp.JobProto is not null) + jobs.Add(roleEnt.Comp.JobProto.Value); + + + // If there is no mind, check the mindRole prototypes + foreach (var proto in roleEnt.Comp.MindRoles) + { + if (!_prototype.TryIndex(proto, out var indexed) + || !indexed.TryGetComponent(out var comp, _ent.ComponentFactory)) + continue; + var roleComp = (MindRoleComponent)comp; + + if (roleComp.JobPrototype is not null) + jobs.Add(roleComp.JobPrototype.Value); + else if (roleComp.AntagPrototype is not null) + antags.Add(roleComp.AntagPrototype.Value); + else + Log.Debug($"Mind role '{proto}' of '{roleEnt.Comp.RoleName}' has neither a job or antag prototype specified"); + } + + return antags.Count > 0 || jobs.Count > 0; + } + + /// + /// Checks if the player passes the requirements for the supplied roles. + /// Returns false if any role fails the check. + /// + private bool IsRoleAllowed( + ICommonSession player, + List>? jobIds, + List>? antagIds) + { + var ev = new IsRoleAllowedEvent(player, jobIds, antagIds); + RaiseLocalEvent(ref ev); + + return !ev.Cancelled; + } + /// /// Attempts having the player take over the ghost role with the corresponding ID. Does not start a raffle. /// @@ -571,13 +665,15 @@ public sealed class GhostRoleSystem : EntitySystem ? _timing.CurTime.Add(raffle.Countdown) : TimeSpan.MinValue; + TryPrototypes((uid, role), out var antags, out var jobs); + roles.Add(new GhostRoleInfo { Identifier = id, Name = role.RoleName, Description = role.RoleDescription, Rules = role.RoleRules, - Requirements = role.Requirements, + RolePrototypes = (jobs, antags), Kind = kind, RafflePlayerCount = rafflePlayerCount, RaffleEndTime = raffleEndTime diff --git a/Content.Server/Players/JobWhitelist/JobWhitelistManager.cs b/Content.Server/Players/JobWhitelist/JobWhitelistManager.cs index 72f18e00cb..c47ffa691f 100644 --- a/Content.Server/Players/JobWhitelist/JobWhitelistManager.cs +++ b/Content.Server/Players/JobWhitelist/JobWhitelistManager.cs @@ -58,6 +58,9 @@ public sealed class JobWhitelistManager : IPostInjectInit SendJobWhitelist(session); } + /// + /// Returns false if role whitelist is required but the player does not have it. + /// public bool IsAllowed(ICommonSession session, ProtoId job) { if (!_config.GetCVar(CCVars.GameRoleWhitelist)) diff --git a/Content.Server/Players/JobWhitelist/JobWhitelistSystem.cs b/Content.Server/Players/JobWhitelist/JobWhitelistSystem.cs index aaada99dea..2e2848fea3 100644 --- a/Content.Server/Players/JobWhitelist/JobWhitelistSystem.cs +++ b/Content.Server/Players/JobWhitelist/JobWhitelistSystem.cs @@ -23,7 +23,7 @@ public sealed class JobWhitelistSystem : EntitySystem { SubscribeLocalEvent(OnPrototypesReloaded); SubscribeLocalEvent(OnStationJobsGetCandidates); - SubscribeLocalEvent(OnIsJobAllowed); + SubscribeLocalEvent(OnIsRoleAllowed); SubscribeLocalEvent(OnGetDisallowedJobs); CacheJobs(); @@ -51,11 +51,18 @@ public sealed class JobWhitelistSystem : EntitySystem } } - private void OnIsJobAllowed(ref IsJobAllowedEvent ev) + private void OnIsRoleAllowed(ref IsRoleAllowedEvent ev) { - if (!_manager.IsAllowed(ev.Player, ev.JobId)) - ev.Cancelled = true; + if (ev.Jobs is null) + return; + + foreach (var proto in ev.Jobs) + { + if (!_manager.IsAllowed(ev.Player, proto)) + ev.Cancelled = true; + } } + //TODO: Antagonist role whitelists? private void OnGetDisallowedJobs(ref GetDisallowedJobsEvent ev) { diff --git a/Content.Server/Players/PlayTimeTracking/PlayTimeTrackingSystem.cs b/Content.Server/Players/PlayTimeTracking/PlayTimeTrackingSystem.cs index d55920f83c..f218de1c77 100644 --- a/Content.Server/Players/PlayTimeTracking/PlayTimeTrackingSystem.cs +++ b/Content.Server/Players/PlayTimeTracking/PlayTimeTrackingSystem.cs @@ -54,7 +54,7 @@ public sealed class PlayTimeTrackingSystem : EntitySystem SubscribeLocalEvent(OnMobStateChanged); SubscribeLocalEvent(OnPlayerJoinedLobby); SubscribeLocalEvent(OnStationJobsGetCandidates); - SubscribeLocalEvent(OnIsJobAllowed); + SubscribeLocalEvent(OnIsRoleAllowed); SubscribeLocalEvent(OnGetDisallowedJobs); _adminManager.OnPermsChanged += AdminPermsChanged; } @@ -86,6 +86,9 @@ public sealed class PlayTimeTrackingSystem : EntitySystem trackers.UnionWith(GetTimedRoles(player)); } + /// + /// Returns true if the player has an attached mob and it is alive (even if in critical). + /// private bool IsPlayerAlive(ICommonSession session) { var attached = session.AttachedEntity; @@ -176,9 +179,9 @@ public sealed class PlayTimeTrackingSystem : EntitySystem RemoveDisallowedJobs(ev.Player, ev.Jobs); } - private void OnIsJobAllowed(ref IsJobAllowedEvent ev) + private void OnIsRoleAllowed(ref IsRoleAllowedEvent ev) { - if (!IsAllowed(ev.Player, ev.JobId)) + if (!IsAllowed(ev.Player, ev.Jobs) || !IsAllowed(ev.Player, ev.Antags)) ev.Cancelled = true; } @@ -187,10 +190,55 @@ public sealed class PlayTimeTrackingSystem : EntitySystem ev.Jobs.UnionWith(GetDisallowedJobs(ev.Player)); } - public bool IsAllowed(ICommonSession player, string role) + /// + /// Checks if the player meets role requirements. + /// + /// The player. + /// A list of role prototype IDs + /// Returns true if all requirements were met or there were no requirements. + public bool IsAllowed(ICommonSession player, List>? jobs) { - if (!_prototypes.TryIndex(role, out var job) || - !_cfg.GetCVar(CCVars.GameRoleTimers)) + if (jobs is null) + return true; + + foreach (var job in jobs) + { + if (!IsAllowed(player, job)) + return false; + } + + return true; + } + + /// + /// Checks if the player meets role requirements. + /// + /// The player. + /// A list of role prototype IDs + /// Returns true if all requirements were met or there were no requirements. + public bool IsAllowed(ICommonSession player, List>? antags) + { + if (antags is null) + return true; + + foreach (var antag in antags) + { + if (!IsAllowed(player, antag)) + return false; + } + + return true; + } + + /// + /// Checks if the player meets role requirements. + /// + /// The player. + /// A list of role prototype IDs + /// Returns true if all requirements were met or there were no requirements. + public bool IsAllowed(ICommonSession player, ProtoId job) + { + if (!_cfg.GetCVar(CCVars.GameRoleTimers)) return true; if (!_tracking.TryGetTrackerTimes(player, out var playTimes)) @@ -199,7 +247,43 @@ public sealed class PlayTimeTrackingSystem : EntitySystem playTimes = new Dictionary(); } - return JobRequirements.TryRequirementsMet(job, playTimes, out _, EntityManager, _prototypes, (HumanoidCharacterProfile?) _preferencesManager.GetPreferences(player.UserId).SelectedCharacter); + var requirements = _roles.GetRoleRequirements(job); + return JobRequirements.TryRequirementsMet( + requirements, + playTimes, + out _, + EntityManager, + _prototypes, + (HumanoidCharacterProfile?) + _preferencesManager.GetPreferences(player.UserId).SelectedCharacter); + } + + /// + /// Checks if the player meets role requirements. + /// + /// The player. + /// A list of role prototype IDs + /// Returns true if all requirements were met or there were no requirements. + public bool IsAllowed(ICommonSession player, ProtoId antag) + { + if (!_cfg.GetCVar(CCVars.GameRoleTimers)) + return true; + + if (!_tracking.TryGetTrackerTimes(player, out var playTimes)) + { + Log.Error($"Unable to check playtimes {Environment.StackTrace}"); + playTimes = new Dictionary(); + } + + var requirements = _roles.GetRoleRequirements(antag); + return JobRequirements.TryRequirementsMet( + requirements, + playTimes, + out _, + EntityManager, + _prototypes, + (HumanoidCharacterProfile?) + _preferencesManager.GetPreferences(player.UserId).SelectedCharacter); } public HashSet> GetDisallowedJobs(ICommonSession player) diff --git a/Content.Server/Station/Systems/StationJobsSystem.Roundstart.cs b/Content.Server/Station/Systems/StationJobsSystem.Roundstart.cs index 3510aca85e..1dd7b70f8d 100644 --- a/Content.Server/Station/Systems/StationJobsSystem.Roundstart.cs +++ b/Content.Server/Station/Systems/StationJobsSystem.Roundstart.cs @@ -371,7 +371,7 @@ public sealed partial class StationJobsSystem if (weight is not null && job.Weight != weight.Value) continue; - if (!(roleBans == null || !roleBans.Contains(jobId))) + if (!(roleBans == null || !roleBans.Contains(jobId))) //TODO: Replace with IsRoleBanned continue; availableJobs ??= new List(profile.JobPriorities.Count); diff --git a/Content.Server/Zombies/ZombieSystem.Transform.cs b/Content.Server/Zombies/ZombieSystem.Transform.cs index 9c7d4b0699..8b5db4561c 100644 --- a/Content.Server/Zombies/ZombieSystem.Transform.cs +++ b/Content.Server/Zombies/ZombieSystem.Transform.cs @@ -1,7 +1,9 @@ +using Content.Server.Administration.Managers; using Content.Server.Atmos.Components; using Content.Server.Body.Components; using Content.Server.Chat; using Content.Server.Chat.Managers; +using Content.Server.Ghost; using Content.Server.Ghost.Roles.Components; using Content.Server.Humanoid; using Content.Server.IdentityManagement; @@ -14,6 +16,7 @@ using Content.Server.StationEvents.Components; using Content.Server.Speech.Components; using Content.Server.Temperature.Components; using Content.Shared.Body.Components; +using Content.Shared.Chat; using Content.Shared.CombatMode; using Content.Shared.CombatMode.Pacification; using Content.Shared.Damage; @@ -40,6 +43,7 @@ using Content.Shared.Tag; using Robust.Shared.Player; using Robust.Shared.Prototypes; using Content.Shared.NPC.Prototypes; +using Content.Shared.Roles; namespace Content.Server.Zombies; @@ -52,23 +56,27 @@ namespace Content.Server.Zombies; public sealed partial class ZombieSystem { [Dependency] private readonly SharedAudioSystem _audio = default!; + [Dependency] private readonly IBanManager _ban = default!; [Dependency] private readonly IChatManager _chatMan = default!; [Dependency] private readonly SharedCombatModeSystem _combat = default!; [Dependency] private readonly NpcFactionSystem _faction = default!; + [Dependency] private readonly GhostSystem _ghost = default!; [Dependency] private readonly SharedHandsSystem _hands = default!; [Dependency] private readonly HumanoidAppearanceSystem _humanoidAppearance = default!; [Dependency] private readonly IdentitySystem _identity = default!; [Dependency] private readonly ServerInventorySystem _inventory = default!; [Dependency] private readonly MindSystem _mind = default!; [Dependency] private readonly MovementSpeedModifierSystem _movementSpeedModifier = default!; + [Dependency] private readonly NameModifierSystem _nameMod = default!; [Dependency] private readonly NPCSystem _npc = default!; [Dependency] private readonly TagSystem _tag = default!; - [Dependency] private readonly NameModifierSystem _nameMod = default!; [Dependency] private readonly ISharedPlayerManager _player = default!; private static readonly ProtoId InvalidForGlobalSpawnSpellTag = "InvalidForGlobalSpawnSpell"; private static readonly ProtoId CannotSuicideTag = "CannotSuicide"; private static readonly ProtoId ZombieFaction = "Zombie"; + private static readonly string MindRoleZombie = "MindRoleZombie"; + private static readonly List> BannableZombiePrototypes = ["Zombie"]; /// /// Handles an entity turning into a zombie when they die or go into crit @@ -103,6 +111,24 @@ public sealed partial class ZombieSystem if (!Resolve(target, ref mobState, logMissing: false)) return; + // Detach role-banned players before zombification + if (TryComp(target, out var actor) && _ban.IsRoleBanned(actor.PlayerSession, BannableZombiePrototypes)) + { + var sess = actor.PlayerSession; + var message = Loc.GetString("zombie-roleban-ghosted"); + + if (_mind.TryGetMind(sess, out var playerMindEnt, out var playerMind)) + { + // Detach + _ghost.SpawnGhost((playerMindEnt, playerMind), target); + + // Notify + _chatMan.DispatchServerMessage(sess, message); + } + else + Log.Error($"Mind for session '{sess}' could not be found"); + } + //you're a real zombie now, son. var zombiecomp = AddComp(target); @@ -245,7 +271,7 @@ public sealed partial class ZombieSystem if (hasMind && mind != null && _player.TryGetSessionById(mind.UserId, out var session)) { //Zombie role for player manifest - _role.MindAddRole(mindId, "MindRoleZombie", mind: null, silent: true); + _role.MindAddRole(mindId, MindRoleZombie, mind: null, silent: true); //Greeting message for new bebe zombers _chatMan.DispatchServerMessage(session, Loc.GetString("zombie-infection-greeting")); @@ -266,6 +292,7 @@ public sealed partial class ZombieSystem ghostRole.RoleName = Loc.GetString("zombie-generic"); ghostRole.RoleDescription = Loc.GetString("zombie-role-desc"); ghostRole.RoleRules = Loc.GetString("zombie-role-rules"); + ghostRole.MindRoles.Add(MindRoleZombie); } if (TryComp(target, out var handsComp)) diff --git a/Content.Shared/Administration/BanPanelEuiState.cs b/Content.Shared/Administration/BanPanelEuiState.cs index 74c340566b..76de3d8e3f 100644 --- a/Content.Shared/Administration/BanPanelEuiState.cs +++ b/Content.Shared/Administration/BanPanelEuiState.cs @@ -1,6 +1,8 @@ using System.Net; using Content.Shared.Database; using Content.Shared.Eui; +using Content.Shared.Roles; +using Robust.Shared.Prototypes; using Robust.Shared.Serialization; namespace Content.Shared.Administration; @@ -21,32 +23,9 @@ public sealed class BanPanelEuiState : EuiStateBase public static class BanPanelEuiStateMsg { [Serializable, NetSerializable] - public sealed class CreateBanRequest : EuiMessageBase + public sealed class CreateBanRequest(Ban ban) : EuiMessageBase { - public string? Player { get; set; } - public string? IpAddress { get; set; } - public ImmutableTypedHwid? Hwid { get; set; } - public uint Minutes { get; set; } - public string Reason { get; set; } - public NoteSeverity Severity { get; set; } - public string[]? Roles { get; set; } - public bool UseLastIp { get; set; } - public bool UseLastHwid { get; set; } - public bool Erase { get; set; } - - public CreateBanRequest(string? player, (IPAddress, int)? ipAddress, bool useLastIp, ImmutableTypedHwid? hwid, bool useLastHwid, uint minutes, string reason, NoteSeverity severity, string[]? roles, bool erase) - { - Player = player; - IpAddress = ipAddress == null ? null : $"{ipAddress.Value.Item1}/{ipAddress.Value.Item2}"; - UseLastIp = useLastIp; - Hwid = hwid; - UseLastHwid = useLastHwid; - Minutes = minutes; - Reason = reason; - Severity = severity; - Roles = roles; - Erase = erase; - } + public Ban Ban { get; } = ban; } [Serializable, NetSerializable] @@ -60,3 +39,50 @@ public static class BanPanelEuiStateMsg } } } + +/// +/// Contains all the data related to a particular ban action created by the BanPanel window. +/// +[Serializable, NetSerializable] +public sealed record Ban +{ + public Ban( + string? target, + (IPAddress, int)? ipAddressTuple, + bool useLastIp, + ImmutableTypedHwid? hwid, + bool useLastHwid, + uint banDurationMinutes, + string reason, + NoteSeverity severity, + ProtoId[]? bannedJobs, + ProtoId[]? bannedAntags, + bool erase) + { + Target = target; + IpAddress = ipAddressTuple?.Item1.ToString(); + IpAddressHid = ipAddressTuple?.Item2.ToString() ?? "0"; + UseLastIp = useLastIp; + Hwid = hwid; + UseLastHwid = useLastHwid; + BanDurationMinutes = banDurationMinutes; + Reason = reason; + Severity = severity; + BannedJobs = bannedJobs; + BannedAntags = bannedAntags; + Erase = erase; + } + + public readonly string? Target; + public readonly string? IpAddress; + public readonly string? IpAddressHid; + public readonly bool UseLastIp; + public readonly ImmutableTypedHwid? Hwid; + public readonly bool UseLastHwid; + public readonly uint BanDurationMinutes; + public readonly string Reason; + public readonly NoteSeverity Severity; + public readonly ProtoId[]? BannedJobs; + public readonly ProtoId[]? BannedAntags; + public readonly bool Erase; +} diff --git a/Content.Shared/Ghost/Roles/GhostRolesEuiMessages.cs b/Content.Shared/Ghost/Roles/GhostRolesEuiMessages.cs index b5d8fedbd9..38086da856 100644 --- a/Content.Shared/Ghost/Roles/GhostRolesEuiMessages.cs +++ b/Content.Shared/Ghost/Roles/GhostRolesEuiMessages.cs @@ -1,5 +1,6 @@ using Content.Shared.Eui; using Content.Shared.Roles; +using Robust.Shared.Prototypes; using Robust.Shared.Serialization; namespace Content.Shared.Ghost.Roles @@ -12,11 +13,10 @@ namespace Content.Shared.Ghost.Roles public string Description { get; set; } public string Rules { get; set; } - // TODO ROLE TIMERS - // Actually make use of / enforce this requirement? - // Why is this even here. - // Move to ghost role prototype & respect CCvars.GameRoleTimerOverride - public HashSet? Requirements { get; set; } + /// + /// A list of all antag and job prototype IDs of the ghost role and its mind role(s). + /// + public (List>?,List>?) RolePrototypes; /// public GhostRoleKind Kind { get; set; } diff --git a/Content.Shared/Players/MsgRoleBans.cs b/Content.Shared/Players/MsgRoleBans.cs index fd90f62b0b..bcc28d01d2 100644 --- a/Content.Shared/Players/MsgRoleBans.cs +++ b/Content.Shared/Players/MsgRoleBans.cs @@ -11,24 +11,40 @@ public sealed class MsgRoleBans : NetMessage { public override MsgGroups MsgGroup => MsgGroups.EntityEvent; - public List Bans = new(); + public List JobBans = new(); + public List AntagBans = new(); public override void ReadFromBuffer(NetIncomingMessage buffer, IRobustSerializer serializer) { - var count = buffer.ReadVariableInt32(); - Bans.EnsureCapacity(count); + var jobCount = buffer.ReadVariableInt32(); + JobBans.EnsureCapacity(jobCount); - for (var i = 0; i < count; i++) + for (var i = 0; i < jobCount; i++) { - Bans.Add(buffer.ReadString()); + JobBans.Add(buffer.ReadString()); + } + + var antagCount = buffer.ReadVariableInt32(); + AntagBans.EnsureCapacity(antagCount); + + for (var i = 0; i < antagCount; i++) + { + AntagBans.Add(buffer.ReadString()); } } public override void WriteToBuffer(NetOutgoingMessage buffer, IRobustSerializer serializer) { - buffer.WriteVariableInt32(Bans.Count); + buffer.WriteVariableInt32(JobBans.Count); - foreach (var ban in Bans) + foreach (var ban in JobBans) + { + buffer.Write(ban); + } + + buffer.WriteVariableInt32(AntagBans.Count); + + foreach (var ban in AntagBans) { buffer.Write(ban); } diff --git a/Content.Shared/Roles/AntagPrototype.cs b/Content.Shared/Roles/AntagPrototype.cs index ff2712600a..367b05c3dd 100644 --- a/Content.Shared/Roles/AntagPrototype.cs +++ b/Content.Shared/Roles/AntagPrototype.cs @@ -10,6 +10,12 @@ namespace Content.Shared.Roles; [Prototype] public sealed partial class AntagPrototype : IPrototype { + // The name to group all antagonists under. Equivalent to DepartmentPrototype IDs. + public static readonly string GroupName = "Antagonist"; + + // The colour to group all antagonists using. Equivalent to DepartmentPrototype Color fields. + public static readonly Color GroupColor = Color.Red; + [ViewVariables] [IdDataField] public string ID { get; private set; } = default!; @@ -41,8 +47,6 @@ public sealed partial class AntagPrototype : IPrototype /// /// Requirements that must be met to opt in to this antag role. /// - // TODO ROLE TIMERS - // Actually check if the requirements are met. Because apparently this is actually unused. [DataField, Access(typeof(SharedRoleSystem), Other = AccessPermissions.None)] public HashSet? Requirements; diff --git a/Content.Shared/Roles/JobRequirements.cs b/Content.Shared/Roles/JobRequirements.cs index 17f5f7bd6a..62d50f8489 100644 --- a/Content.Shared/Roles/JobRequirements.cs +++ b/Content.Shared/Roles/JobRequirements.cs @@ -8,6 +8,13 @@ namespace Content.Shared.Roles; public static class JobRequirements { + /// + /// Checks if the requirements of the job are met by the provided play-times. + /// + /// The job to test. + /// The playtimes used for the check. + /// If the requirements were not met, details are provided here. + /// Returns true if all requirements were met or there were no requirements. public static bool TryRequirementsMet( JobPrototype job, IReadOnlyDictionary playTimes, @@ -17,7 +24,25 @@ public static class JobRequirements HumanoidCharacterProfile? profile) { var sys = entManager.System(); - var requirements = sys.GetJobRequirement(job); + var requirements = sys.GetRoleRequirements(job); + return TryRequirementsMet(requirements, playTimes, out reason, entManager, protoManager, profile); + } + + /// + /// Checks if the list of requirements are met by the provided play-times. + /// + /// The requirements to test. + /// The playtimes used for the check. + /// If the requirements were not met, details are provided here. + /// Returns true if all requirements were met or there were no requirements. + public static bool TryRequirementsMet( + HashSet? requirements, + IReadOnlyDictionary playTimes, + [NotNullWhen(false)] out FormattedMessage? reason, + IEntityManager entManager, + IPrototypeManager protoManager, + HumanoidCharacterProfile? profile) + { reason = null; if (requirements == null) return true; diff --git a/Content.Shared/Roles/SharedRoleSystem.cs b/Content.Shared/Roles/SharedRoleSystem.cs index ea25555257..eeab329661 100644 --- a/Content.Shared/Roles/SharedRoleSystem.cs +++ b/Content.Shared/Roles/SharedRoleSystem.cs @@ -667,10 +667,13 @@ public abstract class SharedRoleSystem : EntitySystem _audio.PlayGlobal(sound, session); } - // TODO ROLES Change to readonly. + // TODO ROLES Change to readonly? // Passing around a reference to a prototype's hashset makes me uncomfortable because it might be accidentally // mutated. - public HashSet? GetJobRequirement(JobPrototype job) + /// + /// Returns the list of requirements for a role, or null. May be altered by requirement overrides. + /// + public HashSet? GetRoleRequirements(JobPrototype job) { if (_requirementOverride != null && _requirementOverride.Jobs.TryGetValue(job.ID, out var req)) return req; @@ -678,33 +681,30 @@ public abstract class SharedRoleSystem : EntitySystem return job.Requirements; } - // TODO ROLES Change to readonly. - public HashSet? GetJobRequirement(ProtoId job) + // TODO ROLES Change to readonly? + /// + public HashSet? GetRoleRequirements(AntagPrototype antag) { - if (_requirementOverride != null && _requirementOverride.Jobs.TryGetValue(job, out var req)) - return req; - - return _prototypes.Index(job).Requirements; - } - - // TODO ROLES Change to readonly. - public HashSet? GetAntagRequirement(ProtoId antag) - { - if (_requirementOverride != null && _requirementOverride.Antags.TryGetValue(antag, out var req)) - return req; - - return _prototypes.Index(antag).Requirements; - } - - // TODO ROLES Change to readonly. - public HashSet? GetAntagRequirement(AntagPrototype antag) - { - if (_requirementOverride != null && _requirementOverride.Antags.TryGetValue(antag.ID, out var req)) + if (_requirementOverride != null && _requirementOverride.Jobs.TryGetValue(antag.ID, out var req)) return req; return antag.Requirements; } + // TODO ROLES Change to readonly? + /// + public HashSet? GetRoleRequirements(ProtoId jobId) + { + return _prototypes.TryIndex(jobId, out var job) ? GetRoleRequirements(job) : null; + } + + // TODO ROLES Change to readonly? + /// + public HashSet? GetRoleRequirements(ProtoId antagId) + { + return _prototypes.TryIndex(antagId, out var antag) ? GetRoleRequirements(antag) : null; + } + /// /// Returns the localized name of a role type's subtype. If the provided subtype parameter turns out to be empty, it returns the localized name of the role type instead. /// diff --git a/Resources/Locale/en-US/zombies/zombie.ftl b/Resources/Locale/en-US/zombies/zombie.ftl index 4643cd228b..39ee550bf9 100644 --- a/Resources/Locale/en-US/zombies/zombie.ftl +++ b/Resources/Locale/en-US/zombies/zombie.ftl @@ -9,3 +9,5 @@ zombie-role-rules = You are a [color={role-type-team-antagonist-color}][bold]{ro zombie-permadeath = This time, you're dead for real. zombification-resistance-coefficient-value = - [color=violet]Infection[/color] chance reduced by [color=lightblue]{$value}%[/color]. + +zombie-roleban-ghosted = You have been ghosted because you are banned from playing the Zombie role. diff --git a/Resources/Prototypes/Entities/Markers/Spawners/ghost_roles.yml b/Resources/Prototypes/Entities/Markers/Spawners/ghost_roles.yml index 5815dbba47..d3f2e172ec 100644 --- a/Resources/Prototypes/Entities/Markers/Spawners/ghost_roles.yml +++ b/Resources/Prototypes/Entities/Markers/Spawners/ghost_roles.yml @@ -1,3 +1,7 @@ +# The mind roles specified here will be overwritten by the actual entities' GhostRoleComponent when they spawn +# But the mind roles specified here are the ones checked for role bans when taking a ghost role! +# TODO make this simpler + - type: entity abstract: true parent: MarkerBase @@ -88,7 +92,7 @@ - type: GhostRole rules: ghost-role-information-rules-default-team-antagonist mindRoles: - - MindRoleGhostRoleTeamAntagonist + - MindRoleNukeops raffle: settings: default - type: GhostRoleMobSpawner @@ -128,7 +132,7 @@ description: roles-antag-nuclear-operative-commander-objective rules: ghost-role-information-rules-default-team-antagonist mindRoles: - - MindRoleGhostRoleTeamAntagonist + - MindRoleNukeopsCommander - type: entity categories: [ HideSpawnMenu, Spawner ] @@ -140,7 +144,7 @@ description: roles-antag-nuclear-operative-agent-objective rules: ghost-role-information-rules-default-team-antagonist mindRoles: - - MindRoleGhostRoleTeamAntagonist + - MindRoleNukeopsMedic - type: entity categories: [ HideSpawnMenu, Spawner ] @@ -152,7 +156,7 @@ description: roles-antag-nuclear-operative-objective rules: ghost-role-information-rules-default-team-antagonist mindRoles: - - MindRoleGhostRoleTeamAntagonist + - MindRoleNukeops - type: entity categories: [ HideSpawnMenu, Spawner ] @@ -164,7 +168,7 @@ description: ghost-role-information-space-dragon-description rules: ghost-role-information-space-dragon-rules mindRoles: - - MindRoleGhostRoleTeamAntagonist + - MindRoleDragon - type: Sprite layers: - state: green @@ -181,7 +185,7 @@ description: ghost-role-information-space-ninja-description rules: ghost-role-information-antagonist-rules mindRoles: - - MindRoleGhostRoleSoloAntagonist + - MindRoleNinja raffle: settings: default - type: Sprite @@ -201,7 +205,7 @@ description: ghost-role-information-paradox-clone-description rules: ghost-role-information-antagonist-rules mindRoles: - - MindRoleGhostRoleSoloAntagonist + - MindRoleParadoxClone raffle: settings: default - type: Sprite @@ -232,6 +236,8 @@ name: ghost-role-information-derelict-cyborg-name description: ghost-role-information-derelict-cyborg-description rules: ghost-role-information-silicon-rules + mindRoles: + - MindRoleSubvertedSilicon raffle: settings: default - type: Sprite @@ -300,7 +306,7 @@ name: ghost-role-information-wizard-name description: ghost-role-information-wizard-desc mindRoles: - - MindRoleGhostRoleSoloAntagonist + - MindRoleWizard raffle: settings: default - type: Sprite diff --git a/Resources/Prototypes/Entities/Mobs/Player/humanoid.yml b/Resources/Prototypes/Entities/Mobs/Player/humanoid.yml index 1f7ab7ac5c..f8cbae86a4 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/humanoid.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/humanoid.yml @@ -57,6 +57,7 @@ settings: short mindRoles: - MindRoleGhostRoleFamiliar + job: DeathSquad - type: Loadout prototypes: [ DeathSquadGear ] roleLoadout: [ RoleSurvivalEVA ] @@ -536,6 +537,7 @@ rules: ghost-role-information-nonantagonist-rules raffle: settings: short + job: CBURN - type: RandomMetadata nameSegments: - NamesMilitaryFirst @@ -564,6 +566,7 @@ rules: ghost-role-information-nonantagonist-rules raffle: settings: default + job: CentralCommandOfficial - type: Loadout prototypes: [ CentcomGear ] roleLoadout: [ RoleSurvivalStandard ] diff --git a/Resources/Prototypes/Entities/Mobs/Player/silicon.yml b/Resources/Prototypes/Entities/Mobs/Player/silicon.yml index 50a2e0b58e..1c416083bc 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/silicon.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/silicon.yml @@ -177,7 +177,7 @@ suffix: Empty components: - type: Anchorable - flags: + flags: - Anchorable - type: Rotatable - type: WarpPoint @@ -560,6 +560,7 @@ rules: ghost-role-information-silicon-rules raffle: settings: default + job: Borg - type: GhostTakeoverAvailable - type: entity @@ -593,6 +594,7 @@ rules: ghost-role-information-silicon-rules raffle: settings: default + job: Borg - type: GhostTakeoverAvailable - type: entity @@ -646,6 +648,7 @@ raffle: settings: default reregister: false + job: Borg - type: GhostTakeoverAvailable - type: entity @@ -680,6 +683,7 @@ raffle: settings: default reregister: false + job: Borg - type: GhostTakeoverAvailable - type: entity @@ -716,6 +720,7 @@ raffle: settings: default reregister: false + job: Borg - type: GhostTakeoverAvailable - type: entity @@ -753,6 +758,7 @@ raffle: settings: default reregister: false + job: Borg - type: GhostTakeoverAvailable - type: entity @@ -789,6 +795,7 @@ raffle: settings: default reregister: false + job: Borg - type: GhostTakeoverAvailable - type: entity @@ -824,4 +831,5 @@ raffle: settings: default reregister: false + job: Borg - type: GhostTakeoverAvailable diff --git a/Resources/Prototypes/Entities/Objects/Devices/Syndicate_Gadgets/reinforcement_teleporter.yml b/Resources/Prototypes/Entities/Objects/Devices/Syndicate_Gadgets/reinforcement_teleporter.yml index 79a10b6287..27d077df2f 100644 --- a/Resources/Prototypes/Entities/Objects/Devices/Syndicate_Gadgets/reinforcement_teleporter.yml +++ b/Resources/Prototypes/Entities/Objects/Devices/Syndicate_Gadgets/reinforcement_teleporter.yml @@ -115,5 +115,6 @@ - MindRoleGhostRoleSilicon raffle: settings: default + job: Borg - type: GhostRoleMobSpawner prototype: PlayerBorgSyndicateAssaultBattery From ffb5bd7325568b6c4401d55e438debeee7eac437 Mon Sep 17 00:00:00 2001 From: PJBot Date: Wed, 17 Sep 2025 22:00:15 +0000 Subject: [PATCH 066/143] Automatic changelog update --- Resources/Changelog/Admin.yml | 13 +++++++++++++ Resources/Changelog/Changelog.yml | 14 +++++++------- 2 files changed, 20 insertions(+), 7 deletions(-) diff --git a/Resources/Changelog/Admin.yml b/Resources/Changelog/Admin.yml index 531f0af070..cc3d3f95ce 100644 --- a/Resources/Changelog/Admin.yml +++ b/Resources/Changelog/Admin.yml @@ -1403,5 +1403,18 @@ Entries: id: 170 time: '2025-09-16T07:59:11.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/40395 +- author: Errant, beck-thompson, FairlySadPanda + changes: + - message: 'Antag bans can now be placed on players through the Roleban GUI. Antag + bans can lock all roundstart antag options individually, and block all antag + ghostroles (though some of the more "generic" antag ghostroles are grouped + together and cannot be banned individually). Zombie conversion forcibly ghosts + a rolebanned player. Some antag types are not yet supported: Being converted + into a Revolutionary, players who are only banned from antagonist borgs specifically, + getting ion stormed or emagged, and the effects of the wizard gun spell.' + type: Add + id: 171 + time: '2025-09-17T21:59:07.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/35966 Name: Admin Order: 2 diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 83a20a141c..f9db3a9216 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: JrInventor05 - changes: - - message: The syringe gun is now a T3 civilian science research. - type: Add - id: 8460 - time: '2025-05-12T00:14:13.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/37251 - author: EmoGarbage404 changes: - message: Added chemical barrels. These can be found on salvage debris and contain @@ -3952,3 +3945,10 @@ id: 8971 time: '2025-09-17T21:49:50.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/40425 +- author: Errant, beck-thompson, FairlySadPanda + changes: + - message: Players can now be banned from enabling/taking antag roles. + type: Add + id: 8972 + time: '2025-09-17T21:59:07.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/35966 From 857ae2a088d55a4be98f2ff6602e50d2982142aa Mon Sep 17 00:00:00 2001 From: SurrealShibe <77357653+SurrealShibe@users.noreply.github.com> Date: Wed, 17 Sep 2025 16:34:25 -0700 Subject: [PATCH 067/143] Turn the Satanic Bible's pentagram around, fix left inhand (#40234) change sprites, update meta --- .../Specific/Chapel/satanicbible.rsi/icon.png | Bin 3618 -> 366 bytes .../Chapel/satanicbible.rsi/inhand-left.png | Bin 3075 -> 314 bytes .../Specific/Chapel/satanicbible.rsi/meta.json | 2 +- 3 files changed, 1 insertion(+), 1 deletion(-) diff --git a/Resources/Textures/Objects/Specific/Chapel/satanicbible.rsi/icon.png b/Resources/Textures/Objects/Specific/Chapel/satanicbible.rsi/icon.png index f44d122751478e4d40aaac5c728e43da7cc84590..2c0a574d58afd9436bff22363673eae4dd32694d 100644 GIT binary patch delta 340 zcmV-a0jvI^9PR>;BYy!kNklC_j_gyOiWyvV62l%Y1~@GNn*Qs z0st%*G%MdfJf5vNn*hnI)4y+D)WF~b(8TBxFKJK7WWckbmw)U8)YPf9(F~m0aA-Ov z11Wv|kZZ(cpotNyqCg$Gja`YLi80H>jYk{+c5RDF{wA{$!LDsPHKQBQlLNr2D1J?- zxUQ9?+l0FZQWN?<1oJ1TL+A*nq$zmGN+1jR$iN=!mI_bPDPavM(Z66CRs$HS#Z4@erXtTvOoT<1^xUKA&C9 mz;eO6*ZuzcQu|L#jK&W#L5+>%vdRqr0000gRu_Xb027E)6*Dttsh~u$I8`;gx`w6}Jiz+|Ku=*+a9CAU91iZ%;Xc6W zsxB~HF(MUtwvr(%Nb5r_SqK zTsL_WKl9n_yXEsQ0s@1AcZTf#GCC%9&)%=7Ny+CHxPi39X&dEJ< z_8jNp50`$tTv$|m?Ro{TvZ}hK_SWr&JAc1>?|$Q>$4{P$#LwE=yL(>tzUu2A7#w;# z{%&GYB7HwKjq*Zyei*aNe#1)_@>0R!usA%*3!{>P64%A4nyyh>;6=hmCFq$se5X#> zc(S0pUc=nc|Be2x#8%CP7EayE-=frJnEf$g8Gnk|M`FM5Y6sd_3=AGt7kGjxCDZDH z%Kww__HYh(oaYFlIMvFcz9bsMe7Mo3*VWqNl49&8BY51Sjw9H_VHGiGZ{}Y~HHjdR zOI{vA~zP-ihE+<;t;u0jvY4k5uXmamqePhAKQTECE@%8LXe%M&PZwL71~+5WX0K*Q7SdGw3IUC(H}>Io6eFHsc`;# z%Nk`30v@yE-y?vxKFubR!+Je7w%_E3#%k z^Bj*;J{cJ(Gh=#QhXfe)^Cw%Bd5qpJMNvm<7?Hq;g(MM>VKU5CtV6(kq3rW2c-ZE$ z&Jl^TNb2S`?5cd+D|JbY6G{1Xxw}6wEU{hGK4lzZet|^P@1#Pa8|D&2UWZthnAj8F z+1}oMx8_toxh+rG@4U9QT_nsJok2|ffP%*U6%0-_(@NQ_ly)Nk=PCA_PC!5wLsCE_ z1pS!qf`ZrY`|v&b-Tz1yV$gqlwMUpX_N}P5U%$ zGD~>(Z3SHv)Vp+jJ3C3PqD8qC0qyw#1X4tTB#M~G+rl?^C6$qn%Jp7azfHMbHOfH4 z1${#7E!e<%(WDYvQMaDM7pR@;>F==1nk zxex(W49Uw()X6u(4T_CLFfFrA^a*!J&ZBAB0V}UNJb(~%HbTg&%qf>H4h)!_Hw%#` z@1kaNm^NZhSJ&cKlwwXDQ(uui!Eb4$hLsG<&m+Ko)ijxwT2>!M3@;8C?A}AO8K$x4 zvtxv0$^L%0*+omWyBilq+&9?}zk=|cmahaI@p{SyU;v!;p zOZGDgq(+M&0tAe7DXM#{NBqk=Yu5xQvMcy4mZpsY;fT93A~Z=LeHWfl6Jm8`V230~ zBz3(WCWgpAVuO(mICi&4jxldda&EHazE5+mVTSYLHN&}bZ zjo26DB%e}j&+6ijJ?enj=~~=_2C)2rK>T3R-PjQUxh4{+vYnnvUKG^6_HFXs3>n$H zcg<4xJ}G;52G$vvOP-)kim*cu*?${rP@ zOnptiD`z2Ku=hpvNEZ zw%kawIpuO#(DD)iVA{IQd}NhuOrDE?O0;G;B{H9x8Z?=7RI(A!D^!#>1hfwo7Ue`S zuD?gX%}+1g@@PhY0QPu>ED~+;+}RfIk>c7cteA3djtHIPkHsy21_LtW=J+ue52{K8 zKHL6Cqpu(l0qjHnR%Vv$W(0M|1BEQ-&oCAq;3 zwOxKb-T*XlOv#}g-z;=0T-(b4#D9}yiEA|RwF!l3Z zgyfiwA9^0nWGFVQtXmpMVmBxEY$#k`K5--^^^N`l-}`!Iy&<0B#L|hJr?=jRI-;Aa;JJXoW@kvX(%m9k6vAA zap;-f&Gom^4Av)Ha8WH?M4~sGkrzJkv(wz&;5BhhWd;7gMSri)mlgMHkA4|?r-%PS y97;Wu6E8R&ymiIJPTZF(k2?n>n3v1a%mc@XTRS=)miY_+0CXR#uUzZu?O zud435%sVX0n=bNtXFHy6uflfx#k@s>K0+$$#zJGkayPmSX z-hCcGNHMDGIIXG})%C~vGI`nm9-ppuKvobL2(Uyh4T*&GbkuQO-kYbpe^2$R{;InA>#kpQRlh#& zx6VtMrbhz+C^Nm?1JL&`a;7Mt{$_Ms4*)c?h>grhCes2?&=>$Jh^asZhyaHqIRo4~ zS+3wdlJPhKARzMr!~`VE=gQYr_(;}zFU#lQ@bA_+ie&tI`7#wLh$wFx`~^M-U-)=3 zJ<&$;%~1#WU^Sp9D3BFM6f&7irBY~0n#xLwic0g;HB>bh=ou_rpr@~IxX8-f(Ad&M zU!T5WvE@=5dwY8Wa|h>@woX=d_O|jxa8xQ)Nl{5xSy|WCNZ-ize?|-;< z{YL)HAB&2)C8cHM75}KKfAFy3pN&7YwRb%Ix$~EyswNw+k zfN`xY-?Y-S7uoljPROCXMfQ2XQvWYxAAtP_S2s{1;Lza_)BpoWWa;$F_&<403|<$I z#SED`uLOeYDd$G{jDZug{8FsgW*Q5c5@NE=5IkqMmG`l8LQ0&SJlT4FnVB#9w}06? z81C<(^(6VAho&Fy1MlfPBsGA5%I0J3)lH)9xswh1g?wJO?hNlvvWN$P6$Inf!y)4Z zEmpw`b4;u==srG)aV6i4P1)SYOCNHo$xEk$PcUJ~`mn*&JP1k*W&-X9vmrQ#iFIBT zM2lS^u*sbXgMho_0T%*EA_NC9pQ(EgJdjlytj-WG!T8sfY5IpApQ`=fv!);U37f(g zw1Z$9L-a#Z$p<$>+s6;d!Wp7E2x3^@ZiQfS3>#m>T%3X-OOkbd9C-d`3oUSLw=-0ct?XLMJ$7s*0*Z|7Ie9?GqH z!_vVp(U|pg@N$m0D7&BEo$tTtVWzRDvCQQJ3kThPaVpi_D?77 zAIGQ!yT=$7Kwt#H>mgYUs>NJs8U&rUtBO}$>g_5k7?83gSskqP5Kv-g84&zxAp7a0 zcr`W*0R)B+h&EIg`j!vw-IMY-2pwmJ+h-&rI`{v&3{$bb)&fvlMoD?JYTtcOmx(y^!44b=jPH!1|lIUwV1TpSjh>DuR5F0W@LBfr`0$X zU;3UWSyYkhEueo@Kp%UVed1ET^}XcWp@orBtZ7>~s$EV`UYm;|79;7M@JkL2?Ulqo z%NEQQ4zq+iczxvF$&^xI*4V&kmqf6N=kroZ>f?#Mc*Tr1S*t*TO}0cntE_swr&A^D zLf{qG3iSat$6dl@J&TTYejHThWN$Q6)|K$|-@R=OEi!ufjBl6A+RDV~mg%iIcP{;Y zrxo5BiNcf@?za6qJ@Bk!Ok?mQjh@GKNSzavxlx*{t45BiohA4W(yLBLn7ibS$3DZxh;_nx5Les`Le33s=Zp-;}zHl4uUhevq$_pTr5*~P3U*C z=JV(>yDeA=L3sClmGsH*x+F?QK;cP6X&4FVhT+}; zYXR6}h8~880eFLk4h#XXYbgLDUjyKn1%S@Z>*XLD{7akuAf08)Scd& z;sH?9kTVWk$ks)Jt{alNh24cdb$*%;Cwzk~j;z0u zx-!UIkg94Z9I`AMu~2Cy97|9;oX}|aa>u3xw_*+BcG1eTN1v$ZE$wu*XlvY%Sue%f zo$H+cH4|5|*A#7p=(*RvqWIoNl1Os$=(G;5Ofa)XaIxG;bg?u Date: Wed, 17 Sep 2025 23:35:33 +0000 Subject: [PATCH 068/143] Automatic changelog update --- Resources/Changelog/Changelog.yml | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index f9db3a9216..7cb4f3a273 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,12 +1,4 @@ Entries: -- author: EmoGarbage404 - changes: - - message: Added chemical barrels. These can be found on salvage debris and contain - a large amount of various chemicals. - type: Add - id: 8461 - time: '2025-05-12T10:55:12.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/37204 - author: kosticia changes: - message: Moth mime survival box now contains cotton baguette. @@ -3952,3 +3944,12 @@ id: 8972 time: '2025-09-17T21:59:07.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/35966 +- author: SurrealShibe + changes: + - message: The Satanic Bible's pentagram has been turned right-side-up. + type: Tweak + - message: The Satanic Bible now has the correct left inhand sprite. + type: Fix + id: 8973 + time: '2025-09-17T23:34:26.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/40234 From 1a92ada5bd5a36e22cbc8b84db7f6aeb611ee7f5 Mon Sep 17 00:00:00 2001 From: PicklOH <62030853+PicklOH@users.noreply.github.com> Date: Wed, 17 Sep 2025 20:15:18 -0400 Subject: [PATCH 069/143] Adds Nukie IDs and PDAs, makes Nukie IDs able to copy accesses. (#37304) * Adds Nukie IDs and PDAs, makes IDs able to copy access. * Fixed PDA and ID parenting * Meta.json spacing * PDA parenting * retest * Forgot a comma OOPS * Spacing * Minor meff fix --------- Co-authored-by: Princess Cheeseballs <66055347+Pronana@users.noreply.github.com> --- .../Entities/Objects/Devices/pda.yml | 78 ++- .../Objects/Misc/identification_cards.yml | 34 +- Resources/Prototypes/Roles/Antags/nukeops.yml | 5 +- .../Objects/Devices/pda.rsi/meta.json | 508 +++++++++--------- .../Devices/pda.rsi/pda-syndi-agent.png | Bin 1544 -> 0 bytes .../Devices/pda.rsi/pda-syndi-commander.png | Bin 0 -> 7160 bytes .../Devices/pda.rsi/pda-syndi-corpsman.png | Bin 0 -> 7060 bytes .../Devices/pda.rsi/pda-syndi-operative.png | Bin 0 -> 7115 bytes .../Objects/Devices/pda.rsi/pda-syndi.png | Bin 424 -> 6928 bytes .../Objects/Misc/id_cards.rsi/black.png | Bin 0 -> 1982 bytes .../Objects/Misc/id_cards.rsi/meta.json | 16 +- .../Objects/Misc/id_cards.rsi/syndi.png | Bin 0 -> 1883 bytes .../Misc/id_cards.rsi/syndi_commander.png | Bin 0 -> 1871 bytes .../Misc/id_cards.rsi/syndi_corpsman.png | Bin 0 -> 1985 bytes .../Misc/id_cards.rsi/syndi_operative.png | Bin 0 -> 1914 bytes .../Objects/Misc/id_cards.rsi/syndie.png | Bin 377 -> 0 bytes 16 files changed, 361 insertions(+), 280 deletions(-) delete mode 100644 Resources/Textures/Objects/Devices/pda.rsi/pda-syndi-agent.png create mode 100644 Resources/Textures/Objects/Devices/pda.rsi/pda-syndi-commander.png create mode 100644 Resources/Textures/Objects/Devices/pda.rsi/pda-syndi-corpsman.png create mode 100644 Resources/Textures/Objects/Devices/pda.rsi/pda-syndi-operative.png create mode 100644 Resources/Textures/Objects/Misc/id_cards.rsi/black.png create mode 100644 Resources/Textures/Objects/Misc/id_cards.rsi/syndi.png create mode 100644 Resources/Textures/Objects/Misc/id_cards.rsi/syndi_commander.png create mode 100644 Resources/Textures/Objects/Misc/id_cards.rsi/syndi_corpsman.png create mode 100644 Resources/Textures/Objects/Misc/id_cards.rsi/syndi_operative.png delete mode 100644 Resources/Textures/Objects/Misc/id_cards.rsi/syndie.png diff --git a/Resources/Prototypes/Entities/Objects/Devices/pda.yml b/Resources/Prototypes/Entities/Objects/Devices/pda.yml index 6a024d29fa..ade592ec9c 100644 --- a/Resources/Prototypes/Entities/Objects/Devices/pda.yml +++ b/Resources/Prototypes/Entities/Objects/Devices/pda.yml @@ -1092,6 +1092,60 @@ - NotekeeperCartridge - NanoTaskCartridge +- type: entity + parent: [ SyndiPDA, BaseSyndicateContraband ] + id: SyndiOperativePDA + name: syndicate operative PDA + description: Death to NT! + components: + - type: Pda + id: SyndiOperativeIDCard + - type: Appearance + appearanceDataInit: + enum.PdaVisuals.PdaType: + !type:String + pda-syndi-operative + - type: Icon + state: pda-syndi-operative + +- type: entity + parent: [ SyndiOperativePDA, BaseSyndicateContraband ] + id: SyndiCorpsmanPDA + name: syndicate corpsman PDA + description: Commander... I need to cook! + components: + - type: Pda + id: SyndiCorpsmanIDCard + - type: Appearance + appearanceDataInit: + enum.PdaVisuals.PdaType: + !type:String + pda-syndi-corpsman + - type: Icon + state: pda-syndi-corpsman + - type: CartridgeLoader + uiKey: enum.PdaUiKey.Key + preinstalled: + - NotekeeperCartridge + - NanoTaskCartridge + - MedTekCartridge + +- type: entity + parent: [ SyndiOperativePDA, BaseSyndicateContraband ] + id: SyndiCommanderPDA + name: syndicate commander PDA + description: So what are we, some kind of Nukie squad? + components: + - type: Pda + id: SyndiCommanderIDCard + - type: Appearance + appearanceDataInit: + enum.PdaVisuals.PdaType: + !type:String + pda-syndi-commander + - type: Icon + state: pda-syndi-commander + - type: entity parent: BaseSecurityPDA id: ERTLeaderPDA @@ -1461,30 +1515,6 @@ - type: Icon state: pda-pirate -- type: entity - parent: [ BaseMedicalPDA, BaseSyndicateContraband ] - id: SyndiAgentPDA - name: syndicate corpsman PDA - description: For those days when healing normal syndicates aren't enough, try healing nuclear operatives instead! - components: - - type: Pda - id: SyndicateIDCard - - type: Appearance - appearanceDataInit: - enum.PdaVisuals.PdaType: - !type:String - pda-syndi-agent - - type: PdaBorderColor - borderColor: "#891417" - - type: Icon - state: pda-syndi-agent - - type: CartridgeLoader - uiKey: enum.PdaUiKey.Key - preinstalled: - - NotekeeperCartridge - - NanoTaskCartridge - - MedTekCartridge - - type: entity parent: [BasePDA, SelectableLock] id: ChameleonPDA diff --git a/Resources/Prototypes/Entities/Objects/Misc/identification_cards.yml b/Resources/Prototypes/Entities/Objects/Misc/identification_cards.yml index d236383226..5437830586 100644 --- a/Resources/Prototypes/Entities/Objects/Misc/identification_cards.yml +++ b/Resources/Prototypes/Entities/Objects/Misc/identification_cards.yml @@ -645,12 +645,44 @@ components: - type: Sprite layers: - - state: syndie + - state: black + - state: syndi - type: Access tags: - NuclearOperative - SyndicateAgent +- type: entity + parent: [ SyndicateIDCard, BaseSyndicateContraband ] + id: SyndiOperativeIDCard + name: syndicate operative ID card + components: + - type: Sprite + layers: + - state: black + - state: syndi_operative + - type: AgentIDCard + +- type: entity + parent: [ SyndiOperativeIDCard, BaseSyndicateContraband ] + id: SyndiCorpsmanIDCard + name: syndicate corpsman ID card + components: + - type: Sprite + layers: + - state: black + - state: syndi_corpsman + +- type: entity + parent: [ SyndiOperativeIDCard, BaseSyndicateContraband ] + id: SyndiCommanderIDCard + name: syndicate commander ID card + components: + - type: Sprite + layers: + - state: black + - state: syndi_commander + - type: entity parent: [ IDCardStandard, BaseMajorContraband ] id: PirateIDCard diff --git a/Resources/Prototypes/Roles/Antags/nukeops.yml b/Resources/Prototypes/Roles/Antags/nukeops.yml index 4097e5573c..5e464c1116 100644 --- a/Resources/Prototypes/Roles/Antags/nukeops.yml +++ b/Resources/Prototypes/Roles/Antags/nukeops.yml @@ -49,7 +49,7 @@ gloves: ClothingHandsGlovesCombat outerClothing: ClothingOuterHardsuitSyndie shoes: ClothingShoesBootsCombatFilled - id: SyndiPDA + id: SyndiOperativePDA pocket2: PlushieCarp belt: ClothingBeltMilitaryWebbing storage: @@ -79,6 +79,7 @@ id: SyndicateCommanderGearFull parent: SyndicateOperativeGearFull equipment: + id: SyndiCommanderPDA neck: SyndicateWhistle outerClothing: ClothingOuterHardsuitSyndieCommander inhand: @@ -101,7 +102,7 @@ eyes: ClothingEyesHudSyndicateAgent outerClothing: ClothingOuterHardsuitSyndieMedic shoes: ClothingShoesBootsMagSyndie - id: SyndiAgentPDA + id: SyndiCorpsmanPDA belt: ClothingBeltMilitaryWebbingMedFilled storage: back: diff --git a/Resources/Textures/Objects/Devices/pda.rsi/meta.json b/Resources/Textures/Objects/Devices/pda.rsi/meta.json index 9606232b68..977d7d17b2 100644 --- a/Resources/Textures/Objects/Devices/pda.rsi/meta.json +++ b/Resources/Textures/Objects/Devices/pda.rsi/meta.json @@ -1,254 +1,260 @@ { - "version": 1, - "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at https://github.com/tgstation/tgstation/commit/59f2a4e10e5ba36033c9734ddebfbbdc6157472d, pda-cluwne made by brainfood1183 (github) ss14 | pda-brigmedic and pda-centcom made by PuroSlavKing (Github) | pda-brigemdic resprited by Hülle#2562 (Discord), pda-pirate made by brainfood1183 (Github), pda-syndi-agent drawn by Ubaser, pda-wizard recolour by Velken", - "size": { - "x": 32, - "y": 32 - }, - "states": [ - { - "name": "id_overlay" + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from tgstation at https://github.com/tgstation/tgstation/commit/59f2a4e10e5ba36033c9734ddebfbbdc6157472d, pda-cluwne made by brainfood1183 (github) ss14 | pda-brigmedic and pda-centcom made by PuroSlavKing (Github) | pda-brigemdic resprited by Hülle#2562 (Discord), pda-pirate made by brainfood1183 (Github), pda-syndi-agent drawn by Ubaser, pda-wizard recolour by Velken, pda-syndi-commander/operative by Archee1 (Github)", + "size": { + "x": 32, + "y": 32 }, - { - "name": "id_overlay_wide" - }, - { - "name": "equipped-BELT", - "directions": 4 - }, - { - "name": "inhand-left", - "directions": 4 - }, - { - "name": "inhand-right", - "directions": 4 - }, - { - "name": "insert_overlay" - }, - { - "name": "light_overlay" - }, - { - "name": "light_overlay_wide" - }, - { - "name": "pda" - }, - { - "name": "pda-atmos" - }, - { - "name": "pda-bartender" - }, - { - "name": "pda-boxer" - }, - { - "name": "pda-captain" - }, - { - "name": "pda-cargo" - }, - { - "name": "pda-ce" - }, - { - "name": "pda-chaplain" - }, - { - "name": "pda-chemistry" - }, - { - "name": "pda-clear" - }, - { - "name": "pda-clown" - }, - { - "name": "pda-cmo" - }, - { - "name": "pda-cook" - }, - { - "name": "pda-detective" - }, - { - "name": "pda-engineer" - }, - { - "name": "pda-genetics" - }, - { - "name": "pda-hop" - }, - { - "name": "pda-hos" - }, - { - "name": "pda-hydro" - }, - { - "name": "pda-janitor" - }, - { - "name": "pda-lawyer" - }, - { - "name": "pda-library", - "delays": [ - [ - 0.3, - 0.3, - 0.3, - 0.3 - ] - ] - }, - { - "name": "pda-medical" - }, - { - "name": "pda-paramedic" - }, - { - "name": "pda-mime" - }, - { - "name": "pda-miner" - }, - { - "name": "pda-pirate" - }, - { - "name": "pda-qm" - }, - { - "name": "pda-r", - "delays": [ - [ - 0.8, - 0.8 - ] - ] - }, - { - "name": "pda-r-library", - "delays": [ - [ - 0.8, - 0.8 - ] - ] - }, - { - "name": "pda-rd" - }, - { - "name": "pda-roboticist" - }, - { - "name": "pda-science" - }, - { - "name": "pda-security" - }, - { - "name": "pda-brigmedic", - "delays": [ - [ - 0.3, - 0.3, - 0.3, - 0.3 - ] - ] - }, - { - "name": "pda-syndi" - }, - { - "name": "pda-syndi-agent" - }, - { - "name": "pda-centcom", - "delays": [ - [ - 1.2, - 1.2, - 1.2, - 1.2 - ] - ] - }, - { - "name": "pda-virology" - }, - { - "name": "pda-warden" - }, - { - "name": "pda-musician" - }, - { - "name": "pda-reporter" - }, - { - "name": "pda-interncadet" - }, - { - "name": "pda-internmed" - }, - { - "name": "pda-internsci" - }, - { - "name": "pda-internservice" - }, - { - "name": "pda-interntech" - }, - { - "name": "pda-zookeeper" - }, - { - "name": "pda-ert" - }, - { - "name": "pda-cluwne" - }, - { - "name": "pda-seniorengineer" - }, - { - "name": "pda-seniorresearcher" - }, - { - "name": "pda-seniorphysician" - }, - { - "name": "pda-seniorofficer" - }, - { - "name": "pda-seniorcourier" - }, - { - "name": "pda-wizard", - "delays": [ - [ - 0.3, - 0.3, - 0.3, - 0.3 - ] - ] - }, - { - "name": "equipped-IDCARD", - "directions": 4 - } - ] + "states": [ + { + "name": "id_overlay" + }, + { + "name": "id_overlay_wide" + }, + { + "name": "equipped-BELT", + "directions": 4 + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + }, + { + "name": "insert_overlay" + }, + { + "name": "light_overlay" + }, + { + "name": "light_overlay_wide" + }, + { + "name": "pda" + }, + { + "name": "pda-atmos" + }, + { + "name": "pda-bartender" + }, + { + "name": "pda-boxer" + }, + { + "name": "pda-captain" + }, + { + "name": "pda-cargo" + }, + { + "name": "pda-ce" + }, + { + "name": "pda-chaplain" + }, + { + "name": "pda-chemistry" + }, + { + "name": "pda-clear" + }, + { + "name": "pda-clown" + }, + { + "name": "pda-cmo" + }, + { + "name": "pda-cook" + }, + { + "name": "pda-detective" + }, + { + "name": "pda-engineer" + }, + { + "name": "pda-genetics" + }, + { + "name": "pda-hop" + }, + { + "name": "pda-hos" + }, + { + "name": "pda-hydro" + }, + { + "name": "pda-janitor" + }, + { + "name": "pda-lawyer" + }, + { + "name": "pda-library", + "delays": [ + [ + 0.3, + 0.3, + 0.3, + 0.3 + ] + ] + }, + { + "name": "pda-medical" + }, + { + "name": "pda-paramedic" + }, + { + "name": "pda-mime" + }, + { + "name": "pda-miner" + }, + { + "name": "pda-pirate" + }, + { + "name": "pda-qm" + }, + { + "name": "pda-r", + "delays": [ + [ + 0.8, + 0.8 + ] + ] + }, + { + "name": "pda-r-library", + "delays": [ + [ + 0.8, + 0.8 + ] + ] + }, + { + "name": "pda-rd" + }, + { + "name": "pda-roboticist" + }, + { + "name": "pda-science" + }, + { + "name": "pda-security" + }, + { + "name": "pda-brigmedic", + "delays": [ + [ + 0.3, + 0.3, + 0.3, + 0.3 + ] + ] + }, + { + "name": "pda-syndi" + }, + { + "name": "pda-syndi-corpsman" + }, + { + "name": "pda-syndi-commander" + }, + { + "name": "pda-syndi-operative" + }, + { + "name": "pda-centcom", + "delays": [ + [ + 1.2, + 1.2, + 1.2, + 1.2 + ] + ] + }, + { + "name": "pda-virology" + }, + { + "name": "pda-warden" + }, + { + "name": "pda-musician" + }, + { + "name": "pda-reporter" + }, + { + "name": "pda-interncadet" + }, + { + "name": "pda-internmed" + }, + { + "name": "pda-internsci" + }, + { + "name": "pda-internservice" + }, + { + "name": "pda-interntech" + }, + { + "name": "pda-zookeeper" + }, + { + "name": "pda-ert" + }, + { + "name": "pda-cluwne" + }, + { + "name": "pda-seniorengineer" + }, + { + "name": "pda-seniorresearcher" + }, + { + "name": "pda-seniorphysician" + }, + { + "name": "pda-seniorofficer" + }, + { + "name": "pda-seniorcourier" + }, + { + "name": "pda-wizard", + "delays": [ + [ + 0.3, + 0.3, + 0.3, + 0.3 + ] + ] + }, + { + "name": "equipped-IDCARD", + "directions": 4 + } + ] } diff --git a/Resources/Textures/Objects/Devices/pda.rsi/pda-syndi-agent.png b/Resources/Textures/Objects/Devices/pda.rsi/pda-syndi-agent.png deleted file mode 100644 index 84fb47cc7994b814bc05077fd26f1ea0e74a6593..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1544 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}e5nzhX}-P; zT0k}j5QD&_;K@Lev%n*=n1MlK76>znTPbd0U|`P642dX-@b$4u&d=3LOvz75)vL%Y z0PC`;umUo3Q%e#RDspr3imfVamB1>jfNYSkzLEl1NlCV?QiN}Sf^&XRs)CuGfu4bq z9hZWFf=y9MnpKdC8&o@xXRDM^Qc_^0uU}qXu2*iXmtT~wZ)j<0sc&GUZ)BtkRH0j3 znOBlnp_^B%3^4>|j!SBBa#3bMNoIbY0?6FNr2NtnTO}osMQ{LdXG${Mo`TY%9I!1Z z$@-}|sky0nCB^!NdWQPg^p#|$AzYYO3=Ixo!03ZyfZ7bOYV#~8Nj3q7lxqdhJy8Dv z9hwZbx40xlA4!3}k%57Qu7Q!Rk)=M|e?aHkq$FFFWR~Qlf&&ijA8-gd=9Hj{g4Bb8 zASV+PvQ{~XdFi%F6}l;@X^EvdB}#UlzV7jcrbfm#`Vdv9x*?*dhT7<3vEK&dYpckh z)Z+Y{Qc$?t8JU^bfWrbs6cGau9T8Y{Ad8~w2*}7U$p@yWqReE^ypq(Sf+Aq*g4hVP z54Q?*vk;bt=4F=H89@y|6Gqa76gyUqMJ46=McETt6lxPGVqSlJsb_X4sYp9; zmFViIMH4iStX?espW&j{9wjN4RO$5{IV=bJDvnq@KPI`mye#jXTF5gM>*w>{-}yWv z|NLC;2i@lz&Nrwr$I8lXdvJHZ8ifEc4Kl9~KMBHX2OyI3V&%ctx>? zBcBd;klBUYmN#{aMWPl5N~~Pb6rnRs)aTgMGcqn0?c;-=|G1YceQizpjZK%XY}mxP zbh7k~jw_BBrYaG$ZMZ4%=-kE6%WSj?FxZ~WxNv}I;9 zJkKzR+SL7Saa?@k<3nx%?!LL%3$HS;zLU$b`uOlx*2aClcMs;iV!yvpZeycV`uuZF zyBj~PG77hooXz(0E8Si_?faa9o;CGT8*}IUVO;DohhgW0>1*#g z1RA_JrI`Fj{KCcBV~cnETqNh{RI2@Zk;o+R9)r?&^dOS`>GfPx6UFQ6qd2aId>pqu@*XA_X zFJ3F*m+ulajr)i)$E5i!+{J4cMEO&hCBhxdqs~8ExFbTUuP+aDy-s)R}z6VWne#*AeqOLmjSPL{-&`OO%{%$UUtozw|!$X1b~?Zn}T zvXq??T1Z+Bjy+PSq%7HaeuGNybKdj3=ks}=|HAytec#{fdtdkWzOL)OKfhBpR^}_E zHcCMtkd=4~6FcxfRQQox3O+eOLBkM;gnf{MGuMvDhqBmA3XKjxxq&PI3J7Qv2t?4_ zAMY01U9i%0wonT3GvZ^m!pHTUn+4MscRgcsO*uQH5e%#jkMVRD`B)Fy-twgQKt9N zb!$Z3^bI|}*P(4ejFN5p@^Uis^f%&Te~hmv*%ufb*cO#a zjhNs5pP%j2Phx5lt6Kttdolu^l<`vwk9r5{ zRu{|RKCcjyh)#W%eb07$S>p%}XFl{+H3@Do{W9U|3CW!g!W5jIvhI~NZ`ii&O#vw- z(*HhpVVL7zHezMOXJZD2`aWKAKvMj@A0nosdJ$C@%wklKby~dWE}|@ z+IeC(b)!jnzP8h!>uXI>6$!cMYf$B+6WWE4;LWS2XF_HZu2YV0cpSMhU2#;#_?~vh zUb(tc{zivR*syqd>mbs;%kPIS5i1K-zPiMNl%aH#6auXpOkgV@*O+wOdzfIq<5~Tm zzh>5=H4l)kRj$q4nK;y9;KTj!|{Ll^h#>*3JhN^CHpb zhMi^R?fQeaQ_lZ#>$#6_rgnd}D#j+L?{e{>ff-_KG@8nSw(xO)N#4VtSm*1AZ<){ASxTqxdTUx5(;oQ$z6BVDt z8}3!OmL%l(kJN4~z0uGpQ{HV7ftC-)-W6yrW%YU|jmxsn+)wgM&j+q-TiaLn2~%9BEh6ay!h`PK}!mdF=hdx{)6)%$9O@z%@U z(r4mw-Vy8Jj!WJ*^<3?J)68ZXWh3owNjB>!r@vnx^*N8MJoE_4XwVtLZTx&*hj&Gt zDm{2AqL~`cHep$u(>T2pe;6I`Tf1de$tLY5bz|?JTZO;=!>XWHa`*mzDlaL}VCd?z zvIxCvTb4u3Zj=nE$sRAIQxxh|oM7pze5*VN1-`YG*6I=a~#$ z>Dk27ryY#3s<)`CvfBLLCl^_INE7#XLU6-dr&m1n)M%P~*m`~260_s>6@xi3Zn)?> zxl)Ptqe-giB0E!P&0?9$tb61?B69GtVune(RaI4JS)HjXN>eO)6f%5GYmAbm_N{p4 zs77vRHTE4)?NlCmELEnw`P|EHi<0*l6^h+cp6@$5tmN)Kl)ZoDNwmy^N_iS2+O{m( z)qFzA)#W+2|8skJEkfeHGcT&?MuTS5Iqe*3DBFDxqQH0Lseg`Nt1MQe>{-t#{|$16 zJ(=vdgQmp=cdv^`zQse7MWXX^_N9wjw4E)sI=;pB_o=4l{1OG|o36_S4;PKSXy|??o2~EvXoGZkddPtylT=f?09>Ea zGQ}N(VuxWteVs`TDn2btSIf$B|BhdLSbhD3#`?YfMDHH);}^{1OGHAwtyFIp?y_2O zV*GU6pj6z8luNPEEs1$#w`RhD)Q^|;{GOHIWxwUh!{RmRe`I878Wlqn($vGG5K6D} zT!uak^}qg*UvU+g(!9YS%zmuuh)+)Do=2=wFW74-@|lDD-?@#U`y^Eyu0nUO*F2p~ zl09>opr{twYqH^9rP9U^$}LS}EadL6xCz(r#_dZuN}I|r+p*KTH*~f=EV29(dyrP; z=4?@V)8gXmn6CS;-&I|s97UC%Eb`_p@y#gw^+`&+P25w6y6@$ltyVLkZkny}>td_@%k_LtN zwDwIkCP(aYCUW)KHaDwY;5$vphn+ol|Kc;&%=o*k$&kE)!hJv8t+8A4(}jZxW*-_J z4ew7LH|x{ar%gLTqSro!PA%`QvK<{93j$>A9V!6VlXf3+ee;|t`Xx!s9CTgQFz=UL z`=!OYPG8}4*X$nhG()dxF16UYBj%=SpbM@xKK^w9CE=mkmJdu1Q4419u-y6>u(BM{ zm0nNlAxv~Ut}$5UNU1M^Ktw`m#>O^yW8*K!D|o0T9gfknsMw=W}Um_I|rI~B$=&rb)!(Ea)Eu}tTKNT3tDF=5Ky&v4v6I&r#7a`v? ztm_}@yo;CJT9rXht9(&uYg(`7@vtz1)!voi^e*GD^~^n%q1z+Y#W#{`osHIRKN)Rn zF7D`j@>zO}7mP6Jzj`+7m355ew*BG}3d_?B!@9@HXJ7L3DgHjs2~rP!z8mg$Bto>@ z{YrgS{{X3laS<{@eYyADm@mQebKJ0*dH5EQ>6W`yJoC8Gqcxj7d-3rr9>q*y!n~vf z2G^L?Vq*Dw1`=D`4k@Ot-gCalwM=Bys-Lsh0yhtp?Ea&zU^|1 zlTAgSuvjbtse#bYfP)A)Cy>D<3g8URRw2bahY7$Tv1u$WjmdxtIf-6O9#;3|*#PcZjDX=PUKRUY(FpqX$&%x&-pgwK=T9axkRC|C~b_EHbz@h1Bn6sL}`8lIRR`Ami|sA0l}Z8B_qQ_Y2AXrJwc}S)#3@g+T*=Hk_hO)_`M(C^Q_4rJ&$gG7^o^CVL?< zWYYKS943X!C$a%UDww`35{K5oVUV!- z-G=HSgcbhFYITJ*kU+pK)S3vurMU@YR``3RG&K(FS;n$(;Xoj2iNcSF98M_*?3Cc*38oT#;*xUP)D#~z z9fUwcA$Su*2j`0Zb9KJ!3}qe|xDAR0ghXavH9~mp#476vmcib2gAUc27uBhV$qf z(&wqcn#PjCAYgBM_#3`Wt@`>GtdY)*cTX$4GQAa+Jv0;*Q2l}4t<303zus8&?EKZVdbRi(2z@~QvwQ`%5fhn` zB4Z>Oy2d;4cv`*Hc@ey*W7x>;+t&(@u^d&0`_PaW8-Y*T?~{Yw+oRsZ_VPclH}|^A z-V9hddoc^uYuz9yCPkGx``tcDT>Y`D)gIDg=Ayn!z2(+reU+AB?L@aTJLS($omSYo z?$iXc3hR=s5u;Z0+~3cHwv{1qJ<xD6wl! z@9#)C<(GXDFfKXl2-B~AzJ1`t+o(&kJLIWXs--R%Dk_Cet6dxnK2u5_7~ie`W eQOGPdSVS+b#`a)XodOsh5WK0C$qggVWB&qps5`L$ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Devices/pda.rsi/pda-syndi-corpsman.png b/Resources/Textures/Objects/Devices/pda.rsi/pda-syndi-corpsman.png new file mode 100644 index 0000000000000000000000000000000000000000..7ccdcde7ee5daf8709376e09958caa12f3c3d0fb GIT binary patch literal 7060 zcmeHLc|4SB-yc*YWKD&PQ7DZWvzjqu-!&1+lFBSMGnviIXe`N69Fe`EMd3u7QYUTV zAX!Rv%928IDv44#sUyU5&rs=o&U>Esd_M2vw&B%YA+B-JWZml@*sN zLLd-jR~H8_@Ea<5E6f8wg;7x>5Qw~bl#idtiznl_$!)pDU=ZOlb*oA;)z?8$Iq1y~#h2f9E!IA+)B$Y2&5U?hGyeqSndACmv%u zJKC-sU)9;ggg^6j)?-|G`Ds|EX??D;C48x$SR;lXiUia9x=8 z^zFEJ^-<4i;|hI}@pC`IhK;;52W#?}dzJCh@v!?&9hXbSID?h)n@hT0pr#wAf zcA=$Ue!5~)?K+i}3paPy_8rT&*#tyA@;V#dc(G@-o@rS^p%2o()-;yXQXMs#W0;SY zE6N^UVEWKetq5tDmx^|Z&lGTbp39C#c8~PqhcyZV%vT4!;otkkx`e;7nwE+LI_JQ4>6l(w!iJvSU^~GaN;c5gzY0e2iOM#3aHZYo43=XcC@EdN|Q!aov9-~p9T zjnnW=F=@cHW6H%3!<)Gq#ZTy6wxxPjADURs9@fturd~YM{v=)h+y?H0m$X$41F6^% zqxOEy70(?K&`76?abe2yRPSjX?%TYzILOSRd1t1k9nve|P`Mj&p5iOB<;N?pjMsNx zj&N_OuGfjF4^$kS)VRIE^G{3O(Q}t*M-OS!Ggd3DK^u<0+b(u*gX6H{;;w3=F`h?x z$HyM{QXj*q(9}w7s4PchkW=;Y;Y;_m#l=mR%R92qH%&zCsyb8VFPg6|H?J&4_4;O& zoD+t{?{1w;%Djtv5x*7@;_!Lc2Uj$4!jPzirDUa1i?lw|7d&ezFu*o0syHI7AJn)6 zHSRd+vX79{f5CWvuAiPv1|@g-i&uGN18UYcN*WhT_KV0D-gTepI(bLQ(&j+8o_nH- z0X|oM@s;;^>r*TibZ;qETD>MoiF_|{y?)*j&E~Vs6Q?QqmR6TSAF?|l@%uKlCCRPV zN_CubXkSgWRn8IY*$H@DUChdBN-jwjs}z4JA}K!=I6(0gdUmz)71&;lcOnZuL)Y!o zn|*-1)zNOwlGY8YUaZ)vaI)*N>5WAHep#Q_CiX$Ub5)ddnqZU#AF<5rg#j|<@kM^k zje{o$cvvHpoq2}qrXq$8dR8S`?rPli#CPwC=Hny!&ZweRs`*_~LyMWEzh(UXn%&Hj z+_*Q1x>k_h!*k;zWVD9a6$j^Q>TR?<6?7=Q=E4zN3W?Mj|EaVr`2@6)vxksNig|C~ zzMv?wv~qZBzg(lw=fcV!G*Ii>!junZUTI^s!> z`cLTO9;*Qb`{;GdxNv5($d5UCyA9JZQdilFO1YJ3?|@B#Da^_6GN?<|t@xM#Q#!mb zB%-R|!Uyw8eLu4Lsr^^+AFnF@-g!E*VfmW+7!1?>qMm$DtWoC}`92Bnp@h6d6C&BN z_b`vHDYtQbYwj3)=Fb^_aM=PF`Y4k$60-f*8kXJ-n}*Hpx&z6l7H!FO*)`vJ{A~Iy zCEaChiBQW+mdwy+C!Tsv5`LMN@9B>3ghsx&8gRg>(RF+8pKs;;J0aH$#} z*&*dI{#p9M)iHO}ybte+uR&?XZ5rM_lCt$f;mV6-V7zekrJoYF8irtkuBl(K=DYVk z4b7Xpha0V092s9l__ZT&v271^Y03hhN65W)jB|2w*ucH>behYP5|$>U_%)imUauB_ z_PS8`hkn^cO~r_X^-hUX_s*L54PxUPob9M>-U=D_v{QUD*fouabWP$ZfejHK*1a+M1y< zb`b)R*~PNA_jI+l|8jQ(?}>+FvdAuVHoEm&yxmiMbXS`^%`7DPt7?VqUA3szj%8Xt z7$g|b#;{zx0(IwhB<$2rT`#X4vPmy+uI)Ry8=LrEqAc~PT+M(R5&Z59@t@1YZy|;L zz^O-QnG*+rV;W)Rxm&b$mMK7Y**d6Y=AAS~r}{^vmqm|`Mrl9u@9Ce^jd81G#Ca?~ zLa(5z@l=0f2N3&Xo+_BSD-IKeuh?oY-|@WS^&dL@*>$qN?OFV2gcP>RZ*}V9_WE0Z(VInQ11mwf+J77a!j z4_i2O?wLoHyOHnQJ-Q1{*d{(7t)1!>Uk(o2+CoumjIT-M#O{%;-Bi$iZs;w&i<=Lb z4C!@yH5y6@`j|7~%M={O&7mHHKvYv$;AzE=vW7_K zam=U;9t|*y;PAoI3z9!W|=6+fXnoMJP$Y2qt0)c=)q7Wz) z97Mo{kz5fq0?rj0N+_l|8~`C*z~YNoJT6qiNu}|^MPwKZoQKYkgR^wU2yk#_0m-$L zUMON9T)_(rxE~OJKp~M9a3l(jA|PhlgR>OMS8J|tMnzChLRvn$2( ztBpj)5Eh3owUD4^BN_CsIDWW*EyXbC2!IW6Ku3fiv-x*;5i9sxfWF(0Wai%-0hjyA z{~h{^UQ%CX;zG0)h{QZWs1HlT2FNg1it`q8ED9}!NTnw_@aW+Zzg!*2Fv*sP3?7}u zAWDDI2?QF7K%>Jgkaz|hgQC&k1S$pvr&G-dcseZ@kE8>$s9d>15tT~^Bvc@|84Kj0 zW6+=-)*Md9(NS;=jX(p*uyi;bgJU467FaqS6FiH;L%;%yh031om4u1`QlS7EnuY=} za7Hi=fMYDs=5QL)0u86(EwDH&=pqVFl~PGUMYQ#FCBsl=$ZsQ_Y^o@jC*Xh;$l@}1 zV&S(b9~KAj7EvY2n&UAzJO+=oKohW76c+Ohv;hzZ!Ag*@nj_6n)65Jy(Fx?Ff*Hx; zP(uI&pBo}Ik;IPZ$>fQ6VA%>-bXTqj5by9GtBq}>xGQ6J40*Pi#`F)!M z$8po%NU8n*Y6g^wXfFV$BA&p9$77RW5-Fe(f2BnYC4EVYH9Wf14=EU6NGg7&=Iy8< z2NbEOjVP$&^c0;*<%R%Yzn>}g zFXODgs1ghTPsL#fSU4V!1XG)a0pK+AU@*Uf8Rlpj1C2prvEQ=`dBGwvRRGwAfVB(8 z8LV7soS`N&$-VM>yqF0{k`9T&!ja%V!3T*Xq6tI{8a5qmCX$$U0!+S;DSj|5u;Q{*A${_XOA0i0%7 z!=eLRA@A>8{|-U|D_kV$p0k{_WzS^jmz`qFKurDd~b z7^Fgfp&%h<^G_pZ-F88f=`rwj4xSDWUyldVT#~B&Z~o2X`hRl?DD=l7|482-a{Z9& zA1UyUz(2CGYveDIsboM`aT!#tY1vjb#G@+zo0 zo&%1|=ezg|ArO;;lDCXD(cl+wP+sIpag-mJtDtRcdbI0mG5CDxv8#ivk6+!8581uW zQ%eB$!aM=iA~DfErRi(0jtn89JH#DW`%HiMm+ zjwWpnG{<29<|+pl>x9x;TWWQiGKGk@kE7p2YQO8P-D!Wj#4Eu1?g!-x^INv*`S7A(KM%3OZ{Zvv?IN{KpVY7o1Gv1NL#L>qU zQnt300dEv88E?QZsXXRfmFFPTVXVtKVk&@TBbC0(Fk9<~q;8ns`V)rbA?rhQ=SA+C;V9nRVXCHxB%>fQwa literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Devices/pda.rsi/pda-syndi-operative.png b/Resources/Textures/Objects/Devices/pda.rsi/pda-syndi-operative.png new file mode 100644 index 0000000000000000000000000000000000000000..dc8ad50b0b005c5549166781cbff522d5c324667 GIT binary patch literal 7115 zcmeHLc|4SB-yftbr8r838bg-Dn8gfcjF5FOwq!k)S#D!8X2vYWl9VWAiL_`rEhmM_ z-YL?8igJ=vQb@9%5^^L;c{3?=~OM{@uu5XA_AK%!a) zvl;1H6-$z429(z)81H!)aZ&R6_PxV<72SQE#y!V_nNkbSO0L?oUs-8v&4)V%muJQr zyQiyz44Ntp{G9Y}j~?=8m5jPgO|=xpzWs0|D1KyB*JSS2@zu%vb*=pP=IMLG@BWyS zXU8UvRJ>@WYdxW#qIZT@)6Cjf1E(|J)m2*b&`(_&-u3X@R*Zmf_CCD}s2{yMu+`k0 z_oj04@u`y+6Vp6W&60X5>fZTeywS{m)G=O5sEl#U$E_xgl`ODauRdHbHmzxS!g6aY zH>fGzJWj&meXd1Zbtz%x$lFKTp%#l~5+-iez5?7o5g=yMKq7Z`8FFpsp=pNlqVR8e;;|&VL-zIR>|w>O68PNk+deNzLoemx*z|8#z1Qi?BbF z7E#L|YtAXTEo-j)rNzZ|rW3m(MRh zyv?H=f6$?!e5{Zz0j033vonIL4rOTV@5I_Ikx{v2-FyPYAmA0WpL1wRdG;`I=$1Xk!x?p}`nlmN) zq~@mI)$G#fkCe2)+>e)RkT}Ke#kCX#WMM5tK|ReV$ohU$w$c49DGQQpQkA=F3xZRv z$Q>H>vWTIM!;|oiV~<~S!Ke4&=#Qs#vUzUfnrsVlxbN|!DpaBJ>a*(=<5GuP11>z@ z=QneH@P+);WtG;jy?&KgPtBRI6g$0ZGOeaskO*E$_j-REtrQ>k$)6<@b;d_hk3eUg1J~<%g>rE^>YqSrJ ze3Bm%ax$m7_BwLnU4FxPGuy_dh&wIV&Hnlatm+HmN_GrgaChB(NoMrw@5bSjp1xq* z`{SEcbt-kuinu%1`!}nmD}Ma*&Vx|Z!;q{B?;<7i!9Jye21?Qk|AFg~TNq26BRjff zx-Rv-Cdq`XOHu689NI4RZsX;F(}D)621cdhacMXHs3dmRpDUdnW#HVemWC2$uPqpc1l=T)M7a8a4bV&7*&*+~z`{i|wnHT=?7OZu9rBf830x!(*$ zj~&Dip^u4S23bz+caFx^uD{&wsvJ@DByMn`^|!3&2a8u=Zy_@Vsjd}kgH_tw_?-t1 z_V=V5sxy#kG?ZPdl*QFL?w4Xv;;7=W%hedOl-)1sFmY!jthYkl;LJK5xz&M3-b!z{ z*lV)rLE^wmMJ$7gRlc$a9N}CES3;$@{$JyDLr!C0ZmACxN z(E-oVV{sp{eznWvPFOv_)xs=IdJU~x71&0$` zF#VUGyndMQgsfJ;8>Y_cSflB^8JB!jH(BMvN|3&GnN`gyQHKw0?>;UkH>q$GB3b(U zo>y63v|-gUdF|zKe#?IPdADDvYP|egucdqj_lKX9XJwI8c>29&yh7>T>mo2Oc?IU!% z0q%(!?yv@*{ffI2oTxu3yqCx=?lyB7@}AhTHw%@ZlJoF6S`YEZ+Ty?3ZeDbLcr^Ge z>q_!+$V%;$RT{{pGCH^IXddU^Ki=Hc&j@=q80(k)lc$UnTB4)gOLbXQ;ak<2BN=T_ z+lh1R{(RkR^qBDz#jEmJO#vIign7{Wde?{ZO5AwtDJ9@e-x?J>`DK4uMD{GOVrLh}PDh4_EL=JrxOOP!Il-cxdt6%ukpk ziei+-X?DGo)Md-zBW?b%Yjc-c9=zgrT|z-&dx;WI6noX|@$i3ORCc%_nZ~97hEd@h@G=B}5G*WYhc#t3*;FFE1~nB}kmcvLQf!)LHrP!T7Y!WQt&VK8tW zI!6x9Qf;F^;oJhEv6!C6ry+>o00Zs^1R&5zq$wPUhNE$a`TF22iS$LA#hddY=ubox znS($XA`#)?-)Qjowvk`g`>qDh6TEXGJOCbBz@-AVkpPRYIe$?OQ^1?Qrho^CL}I&{ zv=9Vnlz8R&I`%}8+ZP>?8|jR2j#xv4o{ywazu-6mE>n!5Q4s(W2nP+}fy}6H@O(zd z*8qL9AJNRe83Hc%h5sA$XMc%pnTreFipv+WxnZ6RJ`*s95lQwzC@k7Y3=z8?Z^Nbv zM0OEv%weJ};c09tgN7GBq5vumNk$pN(IFT#9D|{nz{vm#1;?O5uqYatLN-ED=TQ+^ zJU*F41w>RJxgi7O!5RY;Q)6rh9AkShnwW^GM4`f4xe?7_Xv0}@ zvBZr@=7+Gk;a~+aSTwef_Z95P2nROu$s*69OfbeKpq)6J5zYvS!+iyL0bCwf2_jY$ z(hxn%OrzrMKu$84k&JLM9YAncbg_ykc6hf?HlGcaEtf$hviJa(!v#xNR8AntSClAG znF5h`6N>>7&71Q1ItR*)F<+H@zc&NA3UAE?$b2@}lg(zD!$cd0itH5^HI(oe`DGh$`-QzZ#-Y2Us&eS)RpT>*$hzmf6wzh@E0Zz zu-o$Z+-Tx|*wp{P5oW8w0n}x4qvx%^5r~)_&9+1)L+mOjRNRK}Wa?}*dE`idCJqkh z$Jr@rD49hEz2u!vFSvR7b2<8-)aS!ywXNBl zXs|_uf;URm-!A_h;4FhPg9@;C?7uVp8wdfcaK5N}&NJ4EIhUcIb3$|&;+bH)!Nv!t z0U=}olMh?}x!caVmdTi75Ig!a1pzUie-=6K*acN)W#DlR-VP97t_QPRqN@FG{>

wETlNu+dyVSzbCKdW`Pn}j)N}`0?|Dp`benYHA+F@B0iC1yXcj)jEas~0yDoF ze81F8w6XH^xjA^?nv*7ZS#7-j(FKt^Vm7-K%We%O8!!_{(+P?C3O5|BW){j5^%B;2 z`}^i(J?)FpNP_-Sa!ljuEi;&|4MmF*xlX%$Ma3Ii+p>x@;q5^w#2d3oq|xx=(Z%JQ zmo?gbHRMtAPwzhs>>?VQhS<2b?Mok8{QB&(k{J_OMO$pk&MEa9=Q#3ur#G}dXsgW_ zG@X2{|Jw_~)q3~Im}D<0SEfc$(P2pZv8tyvgcDs6`^vIznH;Q`7@3l$^SA75D2O{d zKAvo6!HxMDvTQ@Jnp%c~7RPhD_I35#g5k{SX*+=$`ye*n`I(}GFcy<0DFnT*B*%#zH8>F06|N;w|I*UA@ct7FI$bXN78 zphKd14-NT+_n){?Y_1F~D|K`p*@z-34DNc5B5Re?Ku zmMDJ?opW~PMpgSeYEalaWyZ%{r9q92+XWm^Z6~c`_tCU;l=FTs*rJJ7!B*qa*XsEz z_8hlh_g0))+ep38UGt&gefIX)L-&Hq^`CzUS{G|$+zl%ewx+grDvf_0zD`TGZW}q7 zxNPzGq3*=~eLJWx{Mc7?w|?P&copk@EHMb%JGl1E1#-?vMZ@l~;HD4wR$7P6mA9(7 zWpfog7rX6O&Q@sE^7y=8u{Y8;ZCh1}vxe@8_`n&qZRI0j+dJpvilEDi>YauTuhOqT zM2$4eHfc#$GrbzW<70TgdrGj@iIa{m#-+_txFEMm(%Pp8;ijlPg} zNSE;HBcAM+v~ZkC^#c{Fg_eOe*0VD9n`sx9t}KcH?pTdA*I84j@HI2pi_hL~ZX%`b zmCHakS`M1pyKKW>$gbANKka?!uP#9lq3K{b?ZqBc8Qpd7z-`3#p-Wqq;p*Ek(A!Sy zs4|yal8tL+Uv{KRF7}toTgK_f=HbXQfw0TfI`Tj$7im=w5O}+OSJr zHoa8?0xP_WT&OYEGGJjHT;D6TOHt2C7VWntf3MUmw7?%(>V3p_=k7IB_GQD5dVv?p z)LZW_RIPmIT#>$WePMvkfZ;jA&1qYgVl1@YZQb*y=jrso@Ot|$SLcFatlH}%)STGf zr-4~*m!cYu%v7SYmpt)lEHtXJ-(0TPsYE!cs2kZI=CE8J&w|A>a;#f+H=lG11RiW~ zE&PlA;rJcvMO(b0BZpshv^KI0ADQ=Fj5!a##BCj>_cA^-3`jp3yc>YqpBgbpSGq## zLOCkqp0_Ke?Kx0+VWzZfw|e$GLQ}wo^7fwl8;-TlFvMLTEuBrvEsiz4{C?LZi~QpKB1INPIiS?Tmv)m*>1RlLj=ken+acVh!tz!jGh3}J;QgNj{Y7MIeuH4orHe<&`eEG_#CC;^G^EZ3X zopI***lquqcT{J0lSjT+Aeg`RTYLwKBzFxwF=9YMbT3I-O_YFIdD;J(dULmD$C2+1}bxl(9iW z3Z+;u>+YL{K*c;`yb=Z^uyo1PK z%NzYVe@Ke9s?}M8!Zd?dkDEMav=B`UjIQX*-G|%N+7>;q@3*T%HsZ9G#s6`8MX7;n z)AQIzTd+p(_V~`K3XgsRC88QDHr%NL#@zb*r(Nni)0~1#7PWFvX1dg1qbUbtF zu^5l6lLYKZ8=e$0BkJ8@sA-~60(slex2`^+p+-s;N@D$gWw%0*>M_Q>s% zPfbsB*z|_7cYSRYy_dz-3vcAi(|BJt^Iax-{qed-zB^EjK~&xLxh>b!-^sj@1NeLL zM5Zz>DVn*O9oO1y*E&DcFnZ@{lC;o4%`@+4dXdp;nc(^eADoSSaLZ6h=kY5GltWc} zX?yP)$qKe0cE~4dnqcE;_F4?xgJG3`_ilqNDQmrns6vHAvDX>oBKr&R=cN4Sdk@Zik_&INR=zypT=oI?;O2UhZcLuB{d2}+MlQ3b zO>R99JrdF!Qt6hGPkuM*@><7rhrK5W=e*+7^Z zobY~l(N*S-myY^ldmnlf&3vP)Q@U2W$qYfT+wg_4>r*NDp7L7Rn;vHc4N{*r5?tur zuAUDcSt%}3*kqfcqIqhp&@I!%j%U>S8g9NW<|bKfEBR z=C6*-t&0>N-wxa$yS3el(RuW9dAv>D@vQ1s2dib|J?mz|JFaIUh|s}5edVw<;~iE+n{ zJiNc^oQT~^v?}eHOUvGb@Ly|Vna*CT^<H*=E>hIEs`pp{_*V%XvP)OU58wta*l8Ojc3tcl{NvTmsu}mv z<~9#mMwH#X*8P$9#bF?>t)eA3N0KELa9I~lS6>@UAhK?GU)`^ zDl;;Y%yR(3n9i|$U}dbEH!U`thNHul*~nW*<3R#8Af!N}*({C#A5DNsc=6zG@h}1g zl|Y2y1ehP$1M0x#15m6f))WbMjAllmVK(wmYd)QU_aZKzq5!W5urQ&JhesepB9W;G zW6I@+B2YLS4uM1?&}cY_fD2+cLP|88BQO+GOmYwb0gcb(37K3DRLn`CawCNV7z~_; zPLYGNG{72tc5bNJ}^p4M*b;)9t}oGWnY|M=+%#s3#(t z!b6};kq9>X2MdAFG3xtzKeZ5egQr1+7a-t9@@ar$6u=Q0PG6MAiWE#=Gg1JEha`Tp z=nMqtlw{@UHclk6$2S|XjG;_6PhufPPe;;e-*CK0K1+h3(+~g)V1tebKxWhrcp;PV zJwQL~M?CXyj)2R3he6{Q5-M@1@OB;~0t{`6{66Br zq6isWJ{zn+CWp=y3BFHxGugmOAw{e#$^vU{fweHhp)AdDmgd;+AYXtl04qVvib9&A zCzxQ3M;KSg1(s6fY0NDB`hu{kmNf`oT#iw z@vskv2@*}4^7}pqj!$_bq4xjT3@8=efe%oGT)sD#%Ob$UQb5K2N{Sk4{WUFIxipC% z5->m)SNv4X+fzajl1ppEKY{;^X=NB!#QDGRe20ExnMzZ4zB_d-KokBm&(FZ$n7qJl zD-iNyNdI9||AMogtOjS$mdlTsw*E>WV)AOTC9;?jsi06v8^Tj)lhG7Vq5!%iqM(kG zQ?xJ&Clmnt{Zz4k9cTWeO6XKeDjj^mF;p<2vF4T-IL^`x2L}_|0&R(-gLU#R>;f)B zD5CHIyHK!p!8n7JD~U7Icq+LU|LBb<3=k(B5^V-Yf^VER5{bv)@Mb93WVE5y2yuu1 zx?5{;4*dw_LxZz%PM+XV-7Jeo28}0{_mg|2Mhhzdv9AIN&K$1U^2%9_uVrMl7h%%Q8@vafFC~$P zcHVwfy*^jmu6t;HadA2L)cnW^C20k@qs8i3HtVgERN67fxlXhhD!FIcrQ136>B*#d z2LcuJ?l84^*HO2iNDlI+XoBXC2gGvtpX%pH1UIkMH(cAv5f1no=}R zAGWL~GGhj>zB-6g6hbK!=$Sn4K|C#_df~z1+EL6Nu$Trq1{jG@^WT<>o1mh@ z-@cM%K3)a3T-^VCxOfO!&dP{t%(}o%<+-^z z89cANKoQenW5*RLq&om)d1-42!>xyxFyz$a^%%OVdl(-4`G3tY{X;uLr$`-K4it5S z96^)=K;YQv18}y8m=KtL^XeVLn^y;rRGlT(IMN-!C&)`stW#to$qpbo8-9BK8IIA# zV4(a>6Uh#sY6!rh0F(o$?f^DcR)S)%C;(;MFaQ5D9QaN+7m!>MLJ}SXqXSqJfI@&6 z%SmzoD7!I0gMXb@fCnD@&mO-*QU!?uPzZp^0b&4AB_S~dk>-WR3<@leC_zpGhrfNr zYX{LqF{q#+1Yiz;sh|Gg9YH&YN`z%^UNUrvh!dj}4zB$ANt8N5wH3T3BsNZA79$nG tX*~0DpXmdoR0?1ONa400>D%PDHLkV1iuksVV>f diff --git a/Resources/Textures/Objects/Misc/id_cards.rsi/black.png b/Resources/Textures/Objects/Misc/id_cards.rsi/black.png new file mode 100644 index 0000000000000000000000000000000000000000..cc56db775bc6174174f0a61f58d8d7421a04d14b GIT binary patch literal 1982 zcmV;v2SNCWP) zaB^>EX>4U6ba`-PAZ2)IW&i+q+U-|clH@21{O1&V1S25?#}TiHxxpTPQ?|?1RsE`t z*{_Ky+LkP1Au@%a!~FNx3jg3oyrqytORhO@_@$aE8I-aezq;S!miGJpqw^J>AMD|J zK`=2SACGEhe}i4_AKb=>?a>~}`G(5rC~gl!vybfhcpD__bl77$9o2a#xfXpJYC9eE zv*RAhd8I3?L-=!eFep$Of`OQ5a^wwn;xhvFOV}Wfd+~nE(1|JRrg%C7AP>{K$!&WJ z&;!UfEj*)tX;0vjopyf0GM^Yh`S3-QCp%xm(A$CeiijRxblddZbk1w7QP!Hr>?~y< zn$L{d!M-8n9UCC${j-dwxCFZHt)i99whqe2*0+Y%V~qq>R){H%XmQ24%N{#IOf*R$ zi8}FaE38zhJ29NR#YM`M2N!VGX$H`jn66mjK5pH|>#<JCxd%7qo;BF}4t;mr9Ry+BA@CvUO?d}}BD+nfABs)9k;VJ?`UZS8Q;B;Iq2cb*yj z1oBuyG3YoQ03wVn2qrQZ*m7ivIc`d%F#^W|f((%pCu(3IiqJril$bLGB`g_?jc+vW zeMu;jn^BuUgm7jBHfn8tqJZKfPFk zHK^WPL@y`eoPjY)5sa%dfP^OJY%4J(a^{?~t$IxpLXhIzgb|%FP?%;US@GiT&fH79 z1t~A_M&B_PoVx#mxd7_k^Y#I2!}qzqGj^;($8=+?KD?jB0u}R3&3;$@b@XRBYAIt+ zghZ<1%)_3!U+CeLPT%Q$+C*kIs7TsrdpsV*Hxe5udJjLk482)BBJ2H_&cvF8Hhsz6 z^_H+`M6t4P?9n7Ki67LSWVk7!W@TVkM-7oW1l6PB(@plSU&vfWR>`5@Y?#}SWKE?v zJgLAFN{iwSzrJZdeT(P>=7%7|2T`6<2bdG>7zFpC3-x7TwWkGv8n`A7Il>DCXSEhk zCe~gb2DZH(Cs=Q6Z5BTyMtrf5@6N6IWTl~+nn2t~Tn4yp)c~#_a99)3H7iQu z#GG+liqmwVATL$ybjuHM@Q;5ucpOCG)Zp6|P+QtGH56m)D>f#IFmkpZkShxN zx6JRv2LMS+2EL)?WGCz;lIxyPdt&+xxOjfv^;R7yOdfbxl{`zhVc-v!^#csPgCM+$ z!FLdZS24ICkcl{PaQbYmU29Ir#*UC+YKY;*oDZKT{m*hfe4g~L<^0VWezRI%q$0EJ zg|&U3W}Y8UGrYF8zn-S6VGJz9Gm$+rcbcUC*cd+T>dK4N)@69L<6lRAmLn9ih2!ym zfj&>3nZD2*0004mX+uL$Nkc;*aB^>EX>4Tx0C=2zkv&MmKpe$iQ;S6^9V{Z^kfAzR z5EXHhDi*;)X)CnqU~=gfG-*guTpR`0f`cE6RRe3JS*_Mt`=0!Tp@O!O;X2I`B(Q`eQV=1djtZ)< z5TjKi#YCF+;~xHD$DbmXOs)zTITlcZ3d!+<|H1EW&EnLgn-q!zffw8U7zKKFfmXw| zzmILZbprUGfh(=!uQh?$PtqG5EqVlmw}Ff6jwbH`mpj1FlP(#OBl&3x#Uk*2M&FbN z25y1AHMh6+K29HiEOoVf0~{OzV-TD76KafOiTa( z0Q*TqK~z}7?Ug+W!yp{RUm%+h5Qoeege*N#574Xh3cW%v(1UbzaLD8!LWpBYhtiTS z)7aP#sJ|)Z!~gU7e+Gy|BL7a}dO#^{LlrT`Bwhk2r7h5>Vw)+mZ%bYDujNW^e4iv?I~K?qr8|M?&Q0LRk>+r6iNs;ZK* zELSz-W_Rl)r4#^zm$u+*4)|cLeO!09?IR8hd!;)L;s9d|Qc7nG2_e0rZ*gEQZg=~q zQuE9K=Si67IkGI9&9DzjDR>`5A&ReZAY?+Crtx#28>_XrivPs#I1-6OuIT!SWo0b3 QasU7T07*qoM6N<$f`}QR8UO$Q literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Misc/id_cards.rsi/meta.json b/Resources/Textures/Objects/Misc/id_cards.rsi/meta.json index e33cd304e1..a8b80d8f9a 100644 --- a/Resources/Textures/Objects/Misc/id_cards.rsi/meta.json +++ b/Resources/Textures/Objects/Misc/id_cards.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/d917f4c2a088419d5c3aec7656b7ff8cebd1822e idcluwne made by brainfood1183 (github) for ss14, idbrigmedic made by PuroSlavKing (Github), pirate made by brainfood1183 (github), idadmin made by Arimah (github), idvisitor by IProduceWidgets (Github), idintern-service by spanky-spanky (Github) | service icons darkened by frobnic8 (Discord and Github), wizard and idwizard by ScarKy0 | idboxer and idlawyer recoloured by K-Dynamic (github) | idquartermaster modified by K-Dynamic (github) | idmime and idmusician recolor by DinnerCalzone (github) at https://github.com/impstation/imp-station-14/commit/233161f02bab7f9f9c03f09f39638ea7c200ee24", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/d917f4c2a088419d5c3aec7656b7ff8cebd1822e idcluwne made by brainfood1183 (github) for ss14, idbrigmedic made by PuroSlavKing (Github), pirate made by brainfood1183 (github), idadmin made by Arimah (github), idvisitor by IProduceWidgets (Github), idintern-service by spanky-spanky (Github) | service icons darkened by frobnic8 (Discord and Github), wizard and idwizard by ScarKy0 | idboxer and idlawyer recoloured by K-Dynamic (github) | idquartermaster modified by K-Dynamic (github) | idmime and idmusician recolor by DinnerCalzone (github) at https://github.com/impstation/imp-station-14/commit/233161f02bab7f9f9c03f09f39638ea7c200ee24, syndiop/agent/commander made by Archee1 (Github)", "size": { "x": 32, "y": 32 @@ -10,6 +10,9 @@ { "name": "default" }, + { + "name": "black" + }, { "name": "centcom" }, @@ -209,7 +212,16 @@ "name": "silver" }, { - "name": "syndie" + "name": "syndi" + }, + { + "name": "syndi_operative" + }, + { + "name": "syndi_corpsman" + }, + { + "name": "syndi_commander" }, { "name": "idcluwne" diff --git a/Resources/Textures/Objects/Misc/id_cards.rsi/syndi.png b/Resources/Textures/Objects/Misc/id_cards.rsi/syndi.png new file mode 100644 index 0000000000000000000000000000000000000000..ff49afaf60a9efa5b5f69f5efc50ec08279435f9 GIT binary patch literal 1883 zcmV-h2c-CkP) zaB^>EX>4U6ba`-PAZ2)IW&i+q+U-|ck|ZY#{O1%t0+JAd>89~R<})Jm>7M|@IEl^Yr*UY~lN6w`U058p%h{nQ^G z1B@;~E!R(Lw|zsuzD{^qgZguSDEA1L+Y!a5rNvkF_Iw*8`uXaobUUi+YUEn%ZK(Zr zG;YHa%Kc4`u&&B~ho=q$N>j0rFfSpAc(U9Ph<{ZY>g!qDP6Tb18c>nc+Zh0P+TKeY z<6D59Kz?b3_vk-b@4)AF_scsh^NkT29}bYd>zBte{B~h^M8wYnlcRmJo%_4@EPJnO zcP(Wgnr}rNu<6AO3_Bo~GcBVSzKXV;Qc+55ae(p}N9-trDlu5uff7w>v}v7s&_IZZ z7aMBk0r`7h5#!1OT#+O%wArM}lmgBMuK@az@FNyF>(;a0pn{br!ITNk2vfdW!jA@j zri8tRLqxGWutHqyx<(kzoIha<KN-=>hnq-1Nsc`hirzpdOeDHrQgnTy&*ZZOP$T zV5g|BBSgXG?EnyAZACC7U?64^rA*P7jR-gv5Y!MkOX3a&NR=moZwPndEYtGrSC%I-~$<(r$6|2^Y zlvK3jVx^Q?TIDLpfm(C5T57GWacEem!B>NQLr>=}J$3E5TQ9x#HXxsohK@XJlu<{U zJY^zH%sg$DS!Y`m7Ba<3OIKdD%BrhvXl=_*TX){J%dWdUSi4#Mru+nJbhE~XDYvr+ zYv>JTFD}T_i8^Osj1z%za|R%2cFtmufxe1e;F;JKmv2J>B_sZO- zcnexS#T)+n}%Nj{aLm zy;B>lP3YV5jN3205_g+htj~-C)O1_lwJ2%tLDwXljwv>_$r_s~th@2nKF7v^DQzP^ zls2u##k--CwoEmey6VKKPpxRMrF|6~{8`iPy3)3V^>EbE7AdQp=%&c>i~IXK48H`8 zZ+}ViDl8-iOS1fe-#E+2E;#&15VLLUXOo?JA&+d8RkzgLv9%4@Fm~dtW#=%sM?jMO znVU{*2zCH?8K4=almO29_6 zi%#D7Yfxue&5+Rn!4#@RoIBn}1&AA#h{#Hx)?uFT(p#Yc-~4UuD)7f z8Lm6wO|Z)WECBSw!OmlkUj8+K;gbxPqjKK3V!+2yxpUn7zUjCkX6S9=vVd4!qz;RV z_R>1wyS08}f{SHbD!&vDtq<3FH(W<&&&l=fLXRu=)sD`w47<+R4-|0T9Dk(p@EZ>P z|HaWe7Qzz^uOz(XAZaGYAK3wV#T`t3^@1}qyi4u#H(}vz*d*7QsSkE41oha_JW|X-HCB90k{c zgCC1k2N!2u9b5%L@B_qMa8h)U691PJTEuv8+>dwn9(V5mp;=|B*)svCnq{ODaWR)) z6? zR+bdvbK-G>E=c^yb=l=N&LxKho*6N+>3QM^u~_P2xrH9Bql&6gzL0ZS;k?CJ zt=3ulp8SQOg0_<3I?WLzu!JO15Fw+E3aYRWqg5ltM4I;F9{yp+pCXq`t_m1A7Epr< z$?=2#!S8O(;?$&@6p90Z7u)_A1$uXZR>QWxk8Qhk0{EYSE3MgZAPfc2Vn`QYGsf`R zIk-B8o3TJIcrhk=Fl`{3=zqrsXrYA&0O0R}b>YI?uCZA)^cE1U$ul#hQjS;^AtGwM zMMUq0J@GKp+cV%UAeC}z#iIpOk>M?f-rIlf8$z%?e`a zaB^>EX>4U6ba`-PAZ2)IW&i+q+U-|alH@21{pS>O1S25?#}Ob!%nj!F^Kd$|v$pQ) z?XOJOvRNddrv)ef@83xO;38@*7136Etp~2sODDriJ8oA$pZO@~^StO9!uN~*^cWy? zF(}_Y)vo!5e)+cGE+dbZ{i$6e)GkK(cp;j%nOr;EF8B0EF>3f4e z(^ACTCdx;9*a~{l_G_rIk=swq0w6gq+~hRyy%E&%G6*v8GR!yh3>rMjkWq(@Hu|s$_nBqNtW#&3 zecGbM3u$82rK_#J%yV*N3NJ2RUA=jC3;0@al#r;Q(V~YvP`gll(|!WAe4$1sQhT00 zP(yE0y|c(Woyf)vh*8NvTsH!6Xxf+^Etf(YxsBP;cTN+6lCrT$D{sUAVew27`GMUx zWAI7~|qGr3O+3(UXMqiBn zE~7EBO|u36*1C?^MXw!UD_F;>2q2Tt5xq&4F_QSoh>pcNL)mBKj@d&gWULtom}Y_e z&}?ZxoWjtVgO_Mt;(a0Ni#18=GQ1)1S1&QdOQ=I0LahXIb33(L%)Sfv$2&~FWtzQx zXWJw>l7klZUEl+;jO>EoM}k-u*iU3VsUwesu=n5|16vE24P&Riy+uuv#sQPm{j4Sn z8^Syo*cGOkD!IUzzIt@z=>35t{SHkZ4SbGjWtlsba*~O>=?#^;7KxqGT*CSoH#h;_ zrc;`_>0(!o%BQv%+w4R+`$DCyr~<$V&sBzX2ls#%%z)=SKpPz7$N7OH;CnQEH1H|v zvyLrnkR>GfWio{Ksc@vc>twt>Y@WadhA+@nyQM!Q{b;)JLzVT zeXnOMPVv39SbST1{!_eN{Ukd5K=z6Ljssi8y5ewwNO2q+_VQH`$!iUEX>4Tx z0C=2zkv&MmKpe$iQ;S6^9V{Z^kfAzR5EXHhDi*;)X)CnqU~=gfG-*guTpR`0f`cE6 zRRe3JS*_Mt z`=0!Tp@O!O;X2I`B(Q`eQV=1djtZ)<5TjKi#YCF+;~xHD$DbmXOs)zTITlcZ3d!+< z|H1EW&EnLgn-q!zffw8U7zKKFfmXw|zmILZbprUGfh(=!uQh?$PtqG5EqVlmw}Ff6 zjwbH`mpj1FlP(#OBl&3x#Uk*2M&FbN25y1AHMh6+K29HiEOoVf0~{OzV-TD9Rv_zFtPvu0CY)2K~z}7V_+BsqhJ(_f{_jwiB&j_jqN|W zSk|v!jFdWng;>jj*w`3^dwbzxZ;Oi=7#JA-Q|bs7QZ+y=rW#-x=rl0u0FoUb+}n$i z7>9f|90iQT27eG68%YMQ`}K>cD55A0-~*%SV-$>nQ7{UK1pqhqAD^&@xbFY}002ov JPDHLkV1nX|c$okI literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Misc/id_cards.rsi/syndi_corpsman.png b/Resources/Textures/Objects/Misc/id_cards.rsi/syndi_corpsman.png new file mode 100644 index 0000000000000000000000000000000000000000..95ec8ff75e7dec8f8308330270baef1b45a03bd9 GIT binary patch literal 1985 zcmV;y2R`_TP) zaB^>EX>4U6ba`-PAZ2)IW&i+q+U-|cmK-Mx{bvPUDWCvM(E>v}UdThrt zc9JhQQzeRrBy{y)!usn^4}aiC%rRuqT3RU)zua;oL#M{;*Ume|eBS3r_Y}Tg#=~=h zFvOsIeX8B-4de16}MEG%5806)64;tfJ z1HBme(F^ab|LnapKG{9a?`&Ca8=>>fi6rmF`6-6p3g)Lq^g6L})US?nKkl=-uj_P{ z3oKf0k2=Oq4>nlXVRAm(3Yy{(^!2ocR-?rM$Y&g}qm9%O0TmA^r z;6ApAQmju~K`+{V4K+4$`;AoqB>9b-90Nbv4S#&&KX6qbD96kd2ejBP7G2U8-{ONa zW1WCrA(Vp7n*mG&*#cz}1A$l)ODZWUk){MYRsdwsoH$bl0!f4>l%&jDC@3LhARBu$ zowX!XXb&Sd0SMv33Tzr1z{*+RKbk9i$PimuM2e`?AWf`r$wf*jT6U5%Wz8yDRJCeT zt6X!HTB_DsTeU`wkprcbrmeQt%qSQH8F(4i8%8>H?zu}ZU3=}V+kpFwJYjs;ez?_?ok47cZ_}y}3P6yHWkBeFC*~qecg*y-uH~ zVKk^dSfrg!WMc-zC?_DU8v!^pZOmd#InzdNV;0-aX+ls^Ha20VjTj)zE0K75V)q5P z58)Q1eh4@E5prQe_irE<0NvNPeFL?*>)beqT~WAg8X3`t`Bg1YwO!QgSLts?zZw0v zj5-2lER(!)M}!sR@Yq~xUx*y!c0q_}$IY>MUOIv+ufeHRaqCJ8(KUx7PRtNQ$z_oX zbJLDWI#3VXmbf4gmv*0X)>Wvt8Vvkw_r;PpYRZaZc4}UE`f`ZnF))90^_;z~Xy+@w z(C~iXr|23b^a_RA>P-`w7oKCZqDT~u95C~qnrA~t=9x$neVO)N$0#}ra@CwTjL(2# zH{`Jx84o8fhI_+aCrCwDH`kom6KoGrNT;w)v{ok}^;m(uaH}a{=bSPN5|HB_gc>XO z!yZL)x<2+5_{TJSbm5@~at5gr0Fz7z>}}thTG;sw$hY2Q&2+%tbZ}J|W6Dy7<(9fd z{Ik(7*8xqnE>sED*}Y+Dz@8zByjn##L&hqzHHg^L*q(-Nb<$?p`N_87JSYKNH^rs5H!rE~V;uBRY-}L}!W9E`S2-)1 zeAl&FY$7iDLSXpl#k==**%=0cv2CKNZik8mhUhxd3QKii$I1`jNr(Q#LBlUv=>KD+ zg=GVei-8!Rr)h1~g8J%?6t%;_wJWOnR42d^Q0);yzyx5RYNKc~YPGNB3sJMLO>+Ym zv5x1yFDQ0mymu6HKUEwT4;ukY>S2-ge*9DO;P9>e*Y3yOm#yJ5vXOY$c1D>6DY)bE z2q$r5SX~T8aD%?qL}o=7DdXV@xaG8uCxGyYO!1r1Z$|$XBltS*)PDmjjZL=Rq)hYx z00D$)LqkwWLqi~Na&Km7Y-Iodc$|HaJxIeq9K~N#i$y9OEF$8Np*mR*6>*d*7QsSk zE41oha_JW|X-HCB90k{cgCC1k2N!2u9b5%L@B_qMa8h)U691PJTEuv8+>dwn9(V5m zp;=|B*)svCnq{ODaWR))6?R+bdvbK-G>E=c^yb=l=N&LxKho*6N+>3QM^u~_P2xrH9Bql&6gzL0ZS;k?CJt=3ulp8SQOg0_<3I?WLzu!JO15Fw+E3aYRWqg5ltM4I;F z9{yp+pCXq`t_m1A7Epr<$?=2#!S8O(;?$&@6p90Z7u)_A1$uXZR>QWxk8Qhk0{EYS zE3MZKQO26bslyGaBBZU393&&LRVTL2-1 z{5y@;IEfelbO7>GyVlwqGUX&bE)% z0}i zaB^>EX>4U6ba`-PAZ2)IW&i+q+U-|ca_lG!{bv=k1SBCOmcz4Zb}-AIgY7u!B=;t{ zkH0k427{1oqU0Y?&_`Vesw(>8p9U#qdkPa%;qo3vEVwbDZnH*6_9FdAgc1 zESfKmI*d(EY(UsxayhnTG{avpwxbm^k2Q8cK4Omzty3WeDl1T;L6sKGqwmzAV&ch$ zp1HFeb1sHB=)j5q4jL^sDKf-?S?3u5UlP7`p+jytM-a&2bI@b@x&M4eAje_XI`t%yu>n>{bcl&Qf-;Dk)qlSR# zvuc{DA;L0pcq~i3O+*fIyCOua;pSLYn%2WInO&&3uG)+zqHFYpIH?suL<_-PefZQe zju5gwNqbkT2x?Rbjdiu@9QtTnmdjXkL5B1`^QqWMY59!xc#9wP;j@I#{p`8VSQ^o;~iBn8l$xj)e@e>C(xw)wC!sf+e|*5h_m73Rbph za2vr6FmA{rBi@J1zIykcVi$e~^bPFRqfwnfdumM`;IX<1G=VxQNV!{)<8;V$GuzO$ zGR_7X+$nJ7(8){Z0C2e|hq7ce6&S<3Zx0Y_+XY%Jn{WdSCs0sn>X~Nm1CGQ7OJ}6p z3{L@b%RvCZVY`vHI$sCz>chuqZ2NRBnTs1gZ~G*m~Mpd=`KS600D$) zLqkwWLqi~Na&Km7Y-Iodc$|HaJxIeq9K~N#i$y9OEF$8Np*mR*6>*d*7QsSkE41oh za_JW|X-HCB90k{cgCC1k2N!2u9b5%L@B_qMa8h)U691PJTEuv8+>dwn9(V5mp;=|B z*)svCnq{ODaWR))6?R+bdvbK-G>E=c^yb=l=N&LxKho*6N+>3QM^u~_P2xrH9B zql&6gzL0ZS;k?CJt=3ulp8SQOg0_<3I?WLzu!JO15Fw+E3aYRWqg5ltM4I;F9{yp+ zpCXq`t_m1A7Epr<$?=2#!S8O(;?$&@6p90Z7u)_A1$uXZR>QWxk8Qhk0{EYSE3M(^bkV!;AR9M69lfemq zFc1V+k!!#T(voEezJgVVU(2v1E3kol;zvb%Z7?9>&ga5%B+Kmu5JHH*Q?QM_Sp)zF zVA-`HgyN}zihbOhp&rLmTfGN>_|!znG`U1QyMZN9&u-v0_Os@oVk5Zbf1F*{eLsTN zzoDQ;IGM%9Ea~Do1hhm%bcWNu11zofLkJ;AHZq?mZBb}N3jhEB07*qoM6N<$f)YN0 A5C8xG literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Misc/id_cards.rsi/syndie.png b/Resources/Textures/Objects/Misc/id_cards.rsi/syndie.png deleted file mode 100644 index 3d5cc6e384f63d22ab6047c0142fa7061eb2b092..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 377 zcmV-<0fzpGP)Px$Gf6~2R9J=Wm9c7sFdW9egK~=^gd5z2fJpeiXF1|#UTW;$sbm-a#=^_MN zoH87OnC0NGLy6>U{xPX;&2Q2~`98mVi9jS0`S0wg3C7sCl}Oihq>gohF*b6}x6+3Y zf;90!z0~*p-Th0`{CehG6kY~6=MX}SHWQ?Qx%kt5kHhISja{k=Xc{jQ^N;a1pp-(A zBzI$%s#+8@`FaxofcMWEj<10R+P2-5Wx1-1kIz3{l2QWb!VK8Z%ix>Dss!d}QL_sg zrPOq7F59LF*o3vXDQey?B|x47d7h)L>!|}v+t5~66Dg(jEbvaiwcT|5HWRB7$g<42 zheP;N0$N-jL?L`!uQ(UQx&%yY9dI%4$1n`m1V{sEng$8Fpu|Z7+Qe1{T)*Q;Bog@s XNfDyiWjsj200000NkvXXu0mjf^dP5% From 0a61f2a583d3d3bb9c7c59659d356a69bb3116bf Mon Sep 17 00:00:00 2001 From: PJBot Date: Thu, 18 Sep 2025 00:16:25 +0000 Subject: [PATCH 070/143] Automatic changelog update --- Resources/Changelog/Changelog.yml | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 7cb4f3a273..b7a59e142f 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: kosticia - changes: - - message: Moth mime survival box now contains cotton baguette. - type: Fix - id: 8462 - time: '2025-05-12T12:37:13.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/36953 - author: ScarKy0 changes: - message: Added "Yellowtexting" for when you don't quite complete your objectives. @@ -3953,3 +3946,11 @@ id: 8973 time: '2025-09-17T23:34:26.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/40234 +- author: PicklOH, Archee + changes: + - message: Nukie Operative, Corpsman, and Commander now have unique PDAs with unique + IDs that can copy accesses. + type: Add + id: 8974 + time: '2025-09-18T00:15:18.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/37304 From e59bc06c25a5f9ba32810e097b3e9bd443f8d730 Mon Sep 17 00:00:00 2001 From: Kittygyat <202250949+Kittygyat@users.noreply.github.com> Date: Thu, 18 Sep 2025 01:25:31 +0100 Subject: [PATCH 071/143] Updated the cyborg weapon module's uplink description to be accurate (#40429) --- Resources/Locale/en-US/store/uplink-catalog.ftl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Resources/Locale/en-US/store/uplink-catalog.ftl b/Resources/Locale/en-US/store/uplink-catalog.ftl index a1e44241c5..8eecfad339 100644 --- a/Resources/Locale/en-US/store/uplink-catalog.ftl +++ b/Resources/Locale/en-US/store/uplink-catalog.ftl @@ -178,7 +178,7 @@ uplink-radio-jammer-name = Radio Jammer uplink-radio-jammer-desc = This device will disrupt any nearby outgoing radio communication as well as suit sensors when activated. uplink-syndicate-weapon-module-name = Weapon Cyborg Module -uplink-syndicate-weapon-module-desc = Upgrades a cyborg with both a machete and an advanced laser. +uplink-syndicate-weapon-module-desc = Upgrades a cyborg with both an energy dagger and an echis pistol. uplink-syndicate-martyr-module-name = Martyr Cyborg Module uplink-syndicate-martyr-module-desc = Turn your emagged borg friend into a walking bomb with just this module. Make sure they're loyal to your cause, results may vary. From 27b86bcca803a4d0807de32cc91b0a7490d63c43 Mon Sep 17 00:00:00 2001 From: PJBot Date: Thu, 18 Sep 2025 00:26:39 +0000 Subject: [PATCH 072/143] Automatic changelog update --- Resources/Changelog/Changelog.yml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index b7a59e142f..25d78ec543 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: ScarKy0 - changes: - - message: Added "Yellowtexting" for when you don't quite complete your objectives. - type: Add - id: 8463 - time: '2025-05-12T16:22:25.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/37360 - author: Radezolid changes: - message: The cyborg cable module can be printed at the exosuit fabricator once @@ -3954,3 +3947,10 @@ id: 8974 time: '2025-09-18T00:15:18.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/37304 +- author: Kittygyat + changes: + - message: Updated the weapon cyborg model's uplink description to be correct + type: Fix + id: 8975 + time: '2025-09-18T00:25:32.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/40429 From 4a815c006f7dd559556189603a52b365f50174c8 Mon Sep 17 00:00:00 2001 From: Minerva <218184747+mnva0@users.noreply.github.com> Date: Wed, 17 Sep 2025 21:42:35 -0400 Subject: [PATCH 073/143] Renames the "Integrated GPS" to "integrated GPS" (#40431) Renames the Integrated GPS to not use title case --- Resources/Prototypes/Entities/Objects/Tools/gps.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Resources/Prototypes/Entities/Objects/Tools/gps.yml b/Resources/Prototypes/Entities/Objects/Tools/gps.yml index 990d0d0437..a5c6ce4097 100644 --- a/Resources/Prototypes/Entities/Objects/Tools/gps.yml +++ b/Resources/Prototypes/Entities/Objects/Tools/gps.yml @@ -21,7 +21,7 @@ - GPS - type: entity #why does this exist? Well, "global positioning system" is too long to fit in the cyborg's hand slot. - name: Integrated GPS + name: integrated GPS parent: HandheldGPSBasic id: BorgHandheldGPSBasic description: A miniaturized Global Positioning System for use in cyborg units. From b41ce9cce666110f4f76d3f4d17695e20efbd1ff Mon Sep 17 00:00:00 2001 From: Pixel8-dev Date: Wed, 17 Sep 2025 21:37:40 -0500 Subject: [PATCH 074/143] Stun rune Fix (#40432) Added a single line of code --- Resources/Prototypes/Magic/Fixtures/runes.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/Resources/Prototypes/Magic/Fixtures/runes.yml b/Resources/Prototypes/Magic/Fixtures/runes.yml index a8b95c9686..4c843e6dd8 100644 --- a/Resources/Prototypes/Magic/Fixtures/runes.yml +++ b/Resources/Prototypes/Magic/Fixtures/runes.yml @@ -78,6 +78,7 @@ - type: StunOnCollide stunAmount: 5 knockdownAmount: 3 + fixture: rune - type: Sprite sprite: Structures/Magic/Cult/trap.rsi layers: From 3844f1e7a584b113a09670059e15e71d18bd3e2b Mon Sep 17 00:00:00 2001 From: PJBot Date: Thu, 18 Sep 2025 02:38:47 +0000 Subject: [PATCH 075/143] Automatic changelog update --- Resources/Changelog/Changelog.yml | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 25d78ec543..68d632695c 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,12 +1,4 @@ Entries: -- author: Radezolid - changes: - - message: The cyborg cable module can be printed at the exosuit fabricator once - again. - type: Fix - id: 8464 - time: '2025-05-12T16:28:16.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/37361 - author: Gentleman-Bird changes: - message: Added muffin tins to the kitchen dinnerware crate @@ -3954,3 +3946,10 @@ id: 8975 time: '2025-09-18T00:25:32.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/40429 +- author: Pixel8-dev + changes: + - message: Fixed stun runes not stunning + type: Fix + id: 8976 + time: '2025-09-18T02:37:40.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/40432 From 2349898dcc124c85db07f1368e275cf95a8ab51f Mon Sep 17 00:00:00 2001 From: Alex Date: Thu, 18 Sep 2025 03:15:09 -0400 Subject: [PATCH 076/143] Plasma: add tropico to atmos (#40436) --- Resources/Maps/plasma.yml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Resources/Maps/plasma.yml b/Resources/Maps/plasma.yml index c676f8b611..0a0f1d7428 100644 --- a/Resources/Maps/plasma.yml +++ b/Resources/Maps/plasma.yml @@ -146273,6 +146273,13 @@ entities: - type: Transform pos: -46.5,-9.5 parent: 2 +- proto: SpawnMobCrabAtmos + entities: + - uid: 26487 + components: + - type: Transform + pos: -119.5,7.5 + parent: 2 - proto: SpawnMobFoxRenault entities: - uid: 22264 From eb1bd0a565d254b7aa3d463074bf6b2a84b83016 Mon Sep 17 00:00:00 2001 From: PJBot Date: Thu, 18 Sep 2025 07:16:18 +0000 Subject: [PATCH 077/143] Automatic changelog update --- Resources/Changelog/Maps.yml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Resources/Changelog/Maps.yml b/Resources/Changelog/Maps.yml index b78b2f2dcd..afcada661b 100644 --- a/Resources/Changelog/Maps.yml +++ b/Resources/Changelog/Maps.yml @@ -694,4 +694,11 @@ id: 83 time: '2025-09-17T04:47:18.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/40413 +- author: F1restar4 + changes: + - message: On Plasma, added tropico to atmos + type: Add + id: 84 + time: '2025-09-18T07:15:10.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/40436 Order: 1 From 940eaa46740d1d2a9d864967f1641e199a339202 Mon Sep 17 00:00:00 2001 From: pathetic meowmeow Date: Thu, 18 Sep 2025 13:17:37 -0400 Subject: [PATCH 078/143] Bring vulpkanin in-line with other species on hugging (#40183) --- .../Locale/en-US/interaction/interaction-popup-component.ftl | 3 --- Resources/Prototypes/Entities/Mobs/Species/vulpkanin.yml | 5 ----- 2 files changed, 8 deletions(-) diff --git a/Resources/Locale/en-US/interaction/interaction-popup-component.ftl b/Resources/Locale/en-US/interaction/interaction-popup-component.ftl index 02af3554fa..bbafdd5ad3 100644 --- a/Resources/Locale/en-US/interaction/interaction-popup-component.ftl +++ b/Resources/Locale/en-US/interaction/interaction-popup-component.ftl @@ -101,9 +101,6 @@ hugging-success-generic = You hug {THE($target)}. hugging-success-generic-others = { CAPITALIZE(THE($user)) } hugs {THE($target)}. hugging-success-generic-target = { CAPITALIZE(THE($user)) } hugs you. -petting-success-soft-floofy-vulp = You pet { THE($target) } on {POSS-ADJ($target)} soft floofy head. -petting-success-soft-floofy-vulp-others = { CAPITALIZE(THE($user)) } pets {THE($target)} on {POSS-ADJ($target)} soft floofy head. - ## Other petting-success-tesla = You pet {THE($target)}, violating the laws of nature and physics. diff --git a/Resources/Prototypes/Entities/Mobs/Species/vulpkanin.yml b/Resources/Prototypes/Entities/Mobs/Species/vulpkanin.yml index 37a3366e3a..cb9b19fffc 100644 --- a/Resources/Prototypes/Entities/Mobs/Species/vulpkanin.yml +++ b/Resources/Prototypes/Entities/Mobs/Species/vulpkanin.yml @@ -58,11 +58,6 @@ pitch: 1.33 volume: -5 variation: 0.05 - - type: InteractionPopup # Crucial detail. - successChance: 1 - interactSuccessString: petting-success-soft-floofy-vulp - messagePerceivedByOthers: petting-success-soft-floofy-vulp-others - interactFailureString: petting-failure-generic - type: Sprite # Drawlayers. Top to bottom in order I believe. netsync: false layers: From c4a42e556f96a88633c4af18d561a1cbdeb7a3cc Mon Sep 17 00:00:00 2001 From: PJBot Date: Thu, 18 Sep 2025 17:18:47 +0000 Subject: [PATCH 079/143] Automatic changelog update --- Resources/Changelog/Changelog.yml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 68d632695c..4c2335df7a 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: Gentleman-Bird - changes: - - message: Added muffin tins to the kitchen dinnerware crate - type: Add - id: 8466 - time: '2025-05-12T17:52:04.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/36948 - author: Prole0 changes: - message: Changed wording/colors for alerts in health analyzer. @@ -3953,3 +3946,10 @@ id: 8976 time: '2025-09-18T02:37:40.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/40432 +- author: sowelipililimute + changes: + - message: Vulpkanin use the standard hugging emote now + type: Tweak + id: 8977 + time: '2025-09-18T17:17:37.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/40183 From 8cf5c3f6bc9f62eb7dc76de180ad029e0c79a2f6 Mon Sep 17 00:00:00 2001 From: Skye Date: Fri, 19 Sep 2025 02:35:19 +0900 Subject: [PATCH 080/143] Add chemical analysis goggles to ChemDrobe (#40236) --- .../Prototypes/Catalog/VendingMachines/Inventories/chemdrobe.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/Resources/Prototypes/Catalog/VendingMachines/Inventories/chemdrobe.yml b/Resources/Prototypes/Catalog/VendingMachines/Inventories/chemdrobe.yml index 8174bb4bee..43e60a3a86 100644 --- a/Resources/Prototypes/Catalog/VendingMachines/Inventories/chemdrobe.yml +++ b/Resources/Prototypes/Catalog/VendingMachines/Inventories/chemdrobe.yml @@ -14,5 +14,6 @@ ClothingHandsGlovesLatex: 2 ClothingHeadsetMedical: 2 ClothingOuterWinterChem: 2 + ClothingEyesGlassesChemical: 2 contrabandInventory: ToyFigurineChemist: 1 From f13f7830d699e4ffd5c85d18d009aa0f6b6c8c55 Mon Sep 17 00:00:00 2001 From: PJBot Date: Thu, 18 Sep 2025 17:36:27 +0000 Subject: [PATCH 081/143] Automatic changelog update --- Resources/Changelog/Changelog.yml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 4c2335df7a..fbb9c75535 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: Prole0 - changes: - - message: Changed wording/colors for alerts in health analyzer. - type: Tweak - id: 8467 - time: '2025-05-12T20:52:17.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/37376 - author: perryprog changes: - message: Borgs in certain circumstances will no-longer draw much more power than @@ -3953,3 +3946,10 @@ id: 8977 time: '2025-09-18T17:17:37.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/40183 +- author: vgskye + changes: + - message: You can now get chemical analysis goggles from a ChemDrobe. + type: Add + id: 8978 + time: '2025-09-18T17:35:19.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/40236 From d9d968a4793a3d00694f13d2720127efad3915b9 Mon Sep 17 00:00:00 2001 From: Kittygyat <202250949+Kittygyat@users.noreply.github.com> Date: Thu, 18 Sep 2025 18:39:35 +0100 Subject: [PATCH 082/143] Crashed the snakeskin boots stock-market by removing their hidden no-slip properties (#40201) Crashed the snakeskin boots stockmarket by removing their non-slip properties --- Resources/Prototypes/Entities/Clothing/Shoes/misc.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Resources/Prototypes/Entities/Clothing/Shoes/misc.yml b/Resources/Prototypes/Entities/Clothing/Shoes/misc.yml index 69c167051b..4b93091ec5 100644 --- a/Resources/Prototypes/Entities/Clothing/Shoes/misc.yml +++ b/Resources/Prototypes/Entities/Clothing/Shoes/misc.yml @@ -109,13 +109,12 @@ parent: ClothingShoesBase id: ClothingShoesSnakeskinBoots name: snakeskin boots - description: Boots made of high-class snakeskin, everyone around you will be jealous. + description: Boots made of once-valuable snakeskin, everyone around you would have been jealous. components: - type: Sprite sprite: Clothing/Shoes/Misc/snakeskin.rsi - type: Clothing sprite: Clothing/Shoes/Misc/snakeskin.rsi - - type: NoSlip - type: entity parent: [ClothingShoesBase, PowerCellSlotSmallItem, BaseToggleClothing] From e09ea850f50b025413a89fa7fed5f2228dd7fc71 Mon Sep 17 00:00:00 2001 From: PJBot Date: Thu, 18 Sep 2025 17:40:43 +0000 Subject: [PATCH 083/143] Automatic changelog update --- Resources/Changelog/Changelog.yml | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index fbb9c75535..5057fe430d 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,12 +1,4 @@ Entries: -- author: perryprog - changes: - - message: Borgs in certain circumstances will no-longer draw much more power than - they should. - type: Fix - id: 8468 - time: '2025-05-12T21:24:00.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/37364 - author: Hanzdegloker changes: - message: Previously unused flavors alongside some reworked ones now appear in @@ -3953,3 +3945,10 @@ id: 8978 time: '2025-09-18T17:35:19.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/40236 +- author: Kittygyat + changes: + - message: Snakeskin boots are no longer free, superior no-slips. + type: Tweak + id: 8979 + time: '2025-09-18T17:39:35.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/40201 From 0e0f01542210e8103001ca4746c5de3bd64e07c3 Mon Sep 17 00:00:00 2001 From: Mora <46364955+TrixxedHeart@users.noreply.github.com> Date: Thu, 18 Sep 2025 12:47:38 -0500 Subject: [PATCH 084/143] Rename medifab implanter to implant extractor and made it's description clearer (#40375) * Renamed regular implanter (the extractor from the medifab) to implant extractor * wrong way --- Resources/Prototypes/Entities/Objects/Misc/implanters.yml | 5 +++-- .../ServerInfo/Guidebook/Antagonist/Revolutionaries.xml | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/Resources/Prototypes/Entities/Objects/Misc/implanters.yml b/Resources/Prototypes/Entities/Objects/Misc/implanters.yml index 316acba6fc..a142ea75cb 100644 --- a/Resources/Prototypes/Entities/Objects/Misc/implanters.yml +++ b/Resources/Prototypes/Entities/Objects/Misc/implanters.yml @@ -84,15 +84,16 @@ - type: entity id: Implanter parent: BaseImplanter - description: A disposable syringe exclusively designed for the injection and extraction of subdermal implants. + name: implant extractor + description: "A dual-purpose syringe designed for the removal of specific subdermal implants. Once an implant is extracted, it is stored within and can be re-administered.\nWARNING: Operator error, such as selecting a non-present implant type, causes severe genetic trauma to the operator." components: - type: Tag tags: - Trash - type: entity - parent: Implanter id: ImplanterAdmeme + parent: Implanter suffix: Admeme components: - type: Implanter diff --git a/Resources/ServerInfo/Guidebook/Antagonist/Revolutionaries.xml b/Resources/ServerInfo/Guidebook/Antagonist/Revolutionaries.xml index c2ff931f85..9a5c8ed436 100644 --- a/Resources/ServerInfo/Guidebook/Antagonist/Revolutionaries.xml +++ b/Resources/ServerInfo/Guidebook/Antagonist/Revolutionaries.xml @@ -40,7 +40,7 @@ - [bold]Visibly be destroyed upon being implanted into a [color=#5e9cff]Head Revolutionary[/color][/bold], giving you away - NOT protect against flash disorientation - Assume all of [color=#cb0000]Security[/color] and [color=#1b67a5]Command[/color] are implanted with mindshields already, [bold]however they can be removed using an empty implanter, obtainable from the Medical department's MedFab.[/bold] + Assume all of [color=#cb0000]Security[/color] and [color=#1b67a5]Command[/color] are implanted with mindshields already, [bold]however they can be removed using an implant extractor, obtainable from the Medical department's MedFab.[/bold] From 128d06518efbcdae2dd5e0e48a5c01010ab21a0c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C4=81da?= Date: Thu, 18 Sep 2025 12:47:55 -0500 Subject: [PATCH 085/143] Silence mime bags (#40317) silence!!! Co-authored-by: iaada --- Resources/Prototypes/Entities/Clothing/Back/backpacks.yml | 3 +++ Resources/Prototypes/Entities/Clothing/Back/duffel.yml | 6 ++---- Resources/Prototypes/Entities/Clothing/Back/satchel.yml | 3 +++ 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/Resources/Prototypes/Entities/Clothing/Back/backpacks.yml b/Resources/Prototypes/Entities/Clothing/Back/backpacks.yml index b424d5a0b9..1218760d80 100644 --- a/Resources/Prototypes/Entities/Clothing/Back/backpacks.yml +++ b/Resources/Prototypes/Entities/Clothing/Back/backpacks.yml @@ -127,6 +127,9 @@ components: - type: Sprite sprite: Clothing/Back/Backpacks/mime.rsi + - type: Storage + storageOpenSound: null + storageInsertSound: null - type: entity parent: ClothingBackpack diff --git a/Resources/Prototypes/Entities/Clothing/Back/duffel.yml b/Resources/Prototypes/Entities/Clothing/Back/duffel.yml index 7c86c08cb4..2b9a6e2ffe 100644 --- a/Resources/Prototypes/Entities/Clothing/Back/duffel.yml +++ b/Resources/Prototypes/Entities/Clothing/Back/duffel.yml @@ -123,10 +123,8 @@ - type: Sprite sprite: Clothing/Back/Duffels/mime.rsi - type: Storage - storageOpenSound: - collection: null - storageInsertSound: - collection: null + storageOpenSound: null + storageInsertSound: null - type: entity parent: ClothingBackpackDuffel diff --git a/Resources/Prototypes/Entities/Clothing/Back/satchel.yml b/Resources/Prototypes/Entities/Clothing/Back/satchel.yml index c29f12f21d..f12a837be0 100644 --- a/Resources/Prototypes/Entities/Clothing/Back/satchel.yml +++ b/Resources/Prototypes/Entities/Clothing/Back/satchel.yml @@ -65,6 +65,9 @@ components: - type: Sprite sprite: Clothing/Back/Satchels/mime.rsi + - type: Storage + storageOpenSound: null + storageInsertSound: null - type: entity parent: ClothingBackpackSatchel From 5cb0917d5fc3543219a1a101509747ba98770887 Mon Sep 17 00:00:00 2001 From: Hitlinemoss <209321380+Hitlinemoss@users.noreply.github.com> Date: Thu, 18 Sep 2025 13:49:01 -0400 Subject: [PATCH 086/143] Ninja items are now highly illegal (#39855) * Added tactical katana + tactical katana shipment (placeholder descriptions) * Revert "Added tactical katana + tactical katana shipment (placeholder descriptions)" This reverts commit aa1928be7f4d938df1838943781e63c47a03cc11. Whoops, committed to master by mistake * Made ninja items highly illegal * Rerun checks --- Resources/Prototypes/Entities/Clothing/Eyes/glasses.yml | 2 +- Resources/Prototypes/Entities/Clothing/Hands/gloves.yml | 2 +- Resources/Prototypes/Entities/Clothing/Head/helmets.yml | 2 +- Resources/Prototypes/Entities/Clothing/OuterClothing/suits.yml | 2 +- Resources/Prototypes/Entities/Clothing/Shoes/specific.yml | 2 +- Resources/Prototypes/Entities/Objects/Weapons/Bombs/spider.yml | 2 +- Resources/Prototypes/Entities/Objects/Weapons/Melee/sword.yml | 2 ++ 7 files changed, 8 insertions(+), 6 deletions(-) diff --git a/Resources/Prototypes/Entities/Clothing/Eyes/glasses.yml b/Resources/Prototypes/Entities/Clothing/Eyes/glasses.yml index 8142c0dc49..aa0aa8a083 100644 --- a/Resources/Prototypes/Entities/Clothing/Eyes/glasses.yml +++ b/Resources/Prototypes/Entities/Clothing/Eyes/glasses.yml @@ -269,7 +269,7 @@ - WhitelistChameleon - type: entity - parent: [ClothingEyesBase, BaseMajorContraband] + parent: [ClothingEyesBase, BaseHighlyIllegalContraband] id: ClothingEyesVisorNinja name: ninja visor description: An advanced visor protecting a ninja's eyes from flashing lights. diff --git a/Resources/Prototypes/Entities/Clothing/Hands/gloves.yml b/Resources/Prototypes/Entities/Clothing/Hands/gloves.yml index 273384a28a..05dda23f0a 100644 --- a/Resources/Prototypes/Entities/Clothing/Hands/gloves.yml +++ b/Resources/Prototypes/Entities/Clothing/Hands/gloves.yml @@ -207,7 +207,7 @@ - type: FingerprintMask - type: entity - parent: [ClothingHandsBase, BaseToggleClothing, BaseMajorContraband] + parent: [ClothingHandsBase, BaseToggleClothing, BaseHighlyIllegalContraband] id: ClothingHandsGlovesSpaceNinja name: space ninja gloves description: These black nano-enhanced gloves insulate from electricity and provide fire resistance. diff --git a/Resources/Prototypes/Entities/Clothing/Head/helmets.yml b/Resources/Prototypes/Entities/Clothing/Head/helmets.yml index 93efa6415c..f1d3ba838e 100644 --- a/Resources/Prototypes/Entities/Clothing/Head/helmets.yml +++ b/Resources/Prototypes/Entities/Clothing/Head/helmets.yml @@ -191,7 +191,7 @@ #Space Ninja Helmet - type: entity - parent: [ClothingHeadEVAHelmetBase, BaseMajorContraband] + parent: [ClothingHeadEVAHelmetBase, BaseHighlyIllegalContraband] id: ClothingHeadHelmetSpaceNinja name: space ninja helmet description: What may appear to be a simple black garment is in fact a highly sophisticated nano-weave helmet. Standard issue ninja gear. diff --git a/Resources/Prototypes/Entities/Clothing/OuterClothing/suits.yml b/Resources/Prototypes/Entities/Clothing/OuterClothing/suits.yml index 6d0b706a49..93a209c6be 100644 --- a/Resources/Prototypes/Entities/Clothing/OuterClothing/suits.yml +++ b/Resources/Prototypes/Entities/Clothing/OuterClothing/suits.yml @@ -145,7 +145,7 @@ - Tail - type: entity - parent: [ClothingOuterBaseLarge, AllowSuitStorageClothing, BaseToggleClothing, BaseMajorContraband] + parent: [ClothingOuterBaseLarge, AllowSuitStorageClothing, BaseToggleClothing, BaseHighlyIllegalContraband] id: ClothingOuterSuitSpaceNinja name: space ninja suit description: This black technologically advanced, cybernetically-enhanced suit provides many abilities like invisibility or teleportation. diff --git a/Resources/Prototypes/Entities/Clothing/Shoes/specific.yml b/Resources/Prototypes/Entities/Clothing/Shoes/specific.yml index a3ca44871a..845be002e2 100644 --- a/Resources/Prototypes/Entities/Clothing/Shoes/specific.yml +++ b/Resources/Prototypes/Entities/Clothing/Shoes/specific.yml @@ -122,7 +122,7 @@ maxContactWalkSlowdown: 0.7 - type: entity - parent: [ClothingShoesBaseButcherable, BaseMajorContraband] + parent: [ClothingShoesBaseButcherable, BaseHighlyIllegalContraband] id: ClothingShoesSpaceNinja name: space ninja shoes description: A pair of nano-enhanced boots with built-in magnetic suction cups. diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Bombs/spider.yml b/Resources/Prototypes/Entities/Objects/Weapons/Bombs/spider.yml index 3d7991cf0f..b26b1b408a 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Bombs/spider.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Bombs/spider.yml @@ -2,7 +2,7 @@ name: spider clan charge description: A modified C-4 charge supplied to you by the Spider Clan. Its explosive power has been juiced up, but only works in one specific area. # not actually modified C-4! oh the horror! - parent: [ BaseItem, BaseMajorContraband ] + parent: [ BaseItem, BaseHighlyIllegalContraband ] id: SpiderCharge components: - type: Sprite diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Melee/sword.yml b/Resources/Prototypes/Entities/Objects/Weapons/Melee/sword.yml index 086052f77a..a1fea197ab 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Melee/sword.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Melee/sword.yml @@ -144,6 +144,8 @@ id: EnergyKatana description: A katana infused with strong energy. components: + - type: Contraband + severity: HighlyIllegal - type: Sprite sprite: Objects/Weapons/Melee/energykatana.rsi - type: MeleeWeapon From 6d576fc8ceb03c380c3830257932a5a6fb925081 Mon Sep 17 00:00:00 2001 From: PJBot Date: Thu, 18 Sep 2025 17:49:03 +0000 Subject: [PATCH 087/143] Automatic changelog update --- Resources/Changelog/Changelog.yml | 31 +++++++++++++++---------------- 1 file changed, 15 insertions(+), 16 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 5057fe430d..9c23f196ca 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,20 +1,4 @@ Entries: -- author: Hanzdegloker - changes: - - message: Previously unused flavors alongside some reworked ones now appear in - Dan's soaked smokes packs. - type: Tweak - id: 8469 - time: '2025-05-12T23:27:26.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/36979 -- author: EmoGarbage404 - changes: - - message: Added the basilisk! This mob can be found on the vgroid and can freeze - you with his eye beam. His diamond exterior can sell for a pretty penny, however... - type: Add - id: 8470 - time: '2025-05-12T23:42:51.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/37135 - author: perryprog changes: - message: You can now link uniform printers to silos. @@ -3952,3 +3936,18 @@ id: 8979 time: '2025-09-18T17:39:35.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/40201 +- author: TrixxedHeart + changes: + - message: The generic implanter that can be crafted in the medifab has been renamed + to implant extractor to better communicate its purpose. + type: Tweak + id: 8980 + time: '2025-09-18T17:47:38.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/40375 +- author: aada + changes: + - message: Mime bags are now silent for everyone. + type: Tweak + id: 8981 + time: '2025-09-18T17:47:56.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/40317 From 8cf9da90d3a538aa96c5c6cf436c189e188f0cf5 Mon Sep 17 00:00:00 2001 From: PJBot Date: Thu, 18 Sep 2025 17:50:14 +0000 Subject: [PATCH 088/143] Automatic changelog update --- Resources/Changelog/Changelog.yml | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 9c23f196ca..66414bdb10 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: perryprog - changes: - - message: You can now link uniform printers to silos. - type: Tweak - id: 8471 - time: '2025-05-12T23:56:02.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/37393 - author: K-Dynamic changes: - message: Recoloured job icons of chaplain, librarian, boxer, janitor, lawyer and @@ -3951,3 +3944,11 @@ id: 8981 time: '2025-09-18T17:47:56.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/40317 +- author: Hitlinemoss + changes: + - message: Spider Clan gear is now considered highly illegal contraband under Space + Law (rather than major contraband). + type: Tweak + id: 8982 + time: '2025-09-18T17:49:02.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/39855 From fbb9c9c524e0e8cc01a90941d61e61e2275ed863 Mon Sep 17 00:00:00 2001 From: rumaks Date: Thu, 18 Sep 2025 21:47:25 +0300 Subject: [PATCH 089/143] Make ichor heal brute, burn, and toxin evenly (#39466) * Make ichor heal brute, burn, and toxin evenly * Nerf healing to more reasonable values --- Resources/Prototypes/Reagents/biological.yml | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/Resources/Prototypes/Reagents/biological.yml b/Resources/Prototypes/Reagents/biological.yml index d6063cd9a7..ca46881a83 100644 --- a/Resources/Prototypes/Reagents/biological.yml +++ b/Resources/Prototypes/Reagents/biological.yml @@ -168,14 +168,15 @@ # Dragon doesn't require airloss healing, so omnizine is still best for humans. - !type:ModifyBloodLevel amount: 3 + - !type:EvenHealthChange + damage: + Burn: -3 + Brute: -3 + Toxin: -2 - !type:HealthChange damage: - groups: - Burn: -5 - Brute: -5 - Toxin: -2 types: - Bloodloss: -5 + Bloodloss: -3 - !type:ModifyBleedAmount amount: -1.5 # Just in case you REALLY want to water your plants From 76b680b03b9f198b53c1ce51f89ebad16bc4d11a Mon Sep 17 00:00:00 2001 From: PJBot Date: Thu, 18 Sep 2025 18:48:33 +0000 Subject: [PATCH 090/143] Automatic changelog update --- Resources/Changelog/Changelog.yml | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 66414bdb10..67fd2e493b 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,12 +1,4 @@ Entries: -- author: K-Dynamic - changes: - - message: Recoloured job icons of chaplain, librarian, boxer, janitor, lawyer and - ID icon of lawyer, boxer from grey to green - type: Tweak - id: 8472 - time: '2025-05-13T07:43:31.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/36580 - author: chromiumboy changes: - message: Station AIs can personalize the appearance of their cores and holograms @@ -3952,3 +3944,10 @@ id: 8982 time: '2025-09-18T17:49:02.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/39855 +- author: rumaks-xyz + changes: + - message: Ichor now heals damage evenly, similarly to omnizine + type: Tweak + id: 8983 + time: '2025-09-18T18:47:25.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/39466 From 9d0a7b77296b623d975c9d79319a42a5ed3d1a91 Mon Sep 17 00:00:00 2001 From: SlamBamActionman <83650252+SlamBamActionman@users.noreply.github.com> Date: Thu, 18 Sep 2025 21:01:22 +0200 Subject: [PATCH 091/143] Add contraband levels for several reagents (#40426) * Initial commit * Minor changes --- Resources/Prototypes/Reagents/chemicals.yml | 4 +++ Resources/Prototypes/Reagents/cleaning.yml | 3 ++ Resources/Prototypes/Reagents/fun.yml | 4 +++ Resources/Prototypes/Reagents/gases.yml | 6 ++++ Resources/Prototypes/Reagents/medicine.yml | 6 ++++ Resources/Prototypes/Reagents/narcotics.yml | 9 ++++++ Resources/Prototypes/Reagents/pyrotechnic.yml | 4 +++ Resources/Prototypes/Reagents/toxins.yml | 29 +++++++++++++++++++ 8 files changed, 65 insertions(+) diff --git a/Resources/Prototypes/Reagents/chemicals.yml b/Resources/Prototypes/Reagents/chemicals.yml index 11945d1dc9..81f4e421bf 100644 --- a/Resources/Prototypes/Reagents/chemicals.yml +++ b/Resources/Prototypes/Reagents/chemicals.yml @@ -79,6 +79,8 @@ desc: reagent-desc-artifexium flavor: metallic physicalDesc: reagent-physical-desc-crystalline + allowedDepartments: + - Science color: "#776291" metabolisms: Poison: @@ -118,6 +120,8 @@ name: reagent-name-benzene desc: reagent-desc-benzene physicalDesc: reagent-physical-desc-acidic + allowedJobs: + - Chemist color: "#E7EA91" boilingPoint: 353.2 meltingPoint: 278.7 diff --git a/Resources/Prototypes/Reagents/cleaning.yml b/Resources/Prototypes/Reagents/cleaning.yml index 90bcb23f86..d03fff1941 100644 --- a/Resources/Prototypes/Reagents/cleaning.yml +++ b/Resources/Prototypes/Reagents/cleaning.yml @@ -3,6 +3,9 @@ name: reagent-name-bleach desc: reagent-desc-bleach physicalDesc: reagent-physical-desc-strong-smelling + allowedJobs: + - Janitor + - Chemist flavor: bitter color: "#a1000b" boilingPoint: 111.0 diff --git a/Resources/Prototypes/Reagents/fun.yml b/Resources/Prototypes/Reagents/fun.yml index 815a9f74e9..2ed57f73b0 100644 --- a/Resources/Prototypes/Reagents/fun.yml +++ b/Resources/Prototypes/Reagents/fun.yml @@ -48,6 +48,7 @@ group: Toxins desc: reagent-desc-buzzochloric-bees physicalDesc: reagent-physical-desc-buzzy + contrabandSeverity: Minor flavor: bee color: "#FFD35D" tileReactions: @@ -158,6 +159,7 @@ group: Toxins desc: reagent-desc-licoxide physicalDesc: reagent-physical-desc-electric + contrabandSeverity: Minor flavor: shocking color: "#FDD023" metabolisms: @@ -214,6 +216,8 @@ requiredSlipSpeed: 3.5 desc: reagent-desc-fresium physicalDesc: reagent-physical-desc-frosty + allowedDepartments: + - Medical flavor: cold color: "#b3f1ff" boilingPoint: 50.0 diff --git a/Resources/Prototypes/Reagents/gases.yml b/Resources/Prototypes/Reagents/gases.yml index 4a97cb8b16..b3a533d747 100644 --- a/Resources/Prototypes/Reagents/gases.yml +++ b/Resources/Prototypes/Reagents/gases.yml @@ -152,6 +152,8 @@ name: reagent-name-tritium desc: reagent-desc-tritium physicalDesc: reagent-physical-desc-ionizing + allowedDepartments: + - Engineering flavor: bitter color: "#66ff33" tileReactions: @@ -389,6 +391,10 @@ name: reagent-name-frezon desc: reagent-desc-frezon physicalDesc: reagent-physical-desc-gaseous + allowedDepartments: + - Engineering + allowedJobs: + - Chemist flavor: bitter color: "#3a758c" boilingPoint: -195.8 diff --git a/Resources/Prototypes/Reagents/medicine.yml b/Resources/Prototypes/Reagents/medicine.yml index f0a11706b0..bfbb8242fd 100644 --- a/Resources/Prototypes/Reagents/medicine.yml +++ b/Resources/Prototypes/Reagents/medicine.yml @@ -4,6 +4,8 @@ group: Medicine desc: reagent-desc-cryptobiolin physicalDesc: reagent-physical-desc-fizzy + allowedDepartments: + - Medical flavor: medicine color: "#081a80" metabolisms: @@ -410,6 +412,8 @@ group: Medicine desc: reagent-desc-ipecac physicalDesc: reagent-physical-desc-inky + allowedDepartments: + - Medical flavor: medicine color: "#422912" metabolisms: @@ -805,6 +809,8 @@ name: reagent-name-lipozine group: Medicine desc: reagent-desc-lipozine + allowedDepartments: + - Medical physicalDesc: reagent-physical-desc-oily flavor: medicine color: "#2690b5" diff --git a/Resources/Prototypes/Reagents/narcotics.yml b/Resources/Prototypes/Reagents/narcotics.yml index ed8b8acc65..7f84790561 100644 --- a/Resources/Prototypes/Reagents/narcotics.yml +++ b/Resources/Prototypes/Reagents/narcotics.yml @@ -4,6 +4,7 @@ group: Narcotics desc: reagent-desc-desoxyephedrine physicalDesc: reagent-physical-desc-translucent + contrabandSeverity: Major flavor: bitter color: "#FAFAFA" boilingPoint: 212.0 # Dexosyephedrine vape when? @@ -61,6 +62,7 @@ group: Narcotics desc: reagent-desc-ephedrine physicalDesc: reagent-physical-desc-powdery + contrabandSeverity: Minor flavor: bitter color: "#D2FFFA" boilingPoint: 255.0 @@ -114,6 +116,7 @@ group: Narcotics desc: reagent-desc-stimulants physicalDesc: reagent-physical-desc-energizing + contrabandSeverity: Syndicate flavor: sharp color: "#9A040E" boilingPoint: 212.0 @@ -223,6 +226,7 @@ group: Narcotics desc: reagent-desc-impedrezene physicalDesc: reagent-physical-desc-acrid + contrabandSeverity: Minor flavor: bitter color: "#215263" metabolisms: @@ -286,6 +290,7 @@ group: Narcotics desc: reagent-desc-nocturine physicalDesc: reagent-physical-desc-powdery + contrabandSeverity: Syndicate color: "#128e80" boilingPoint: 444.0 meltingPoint: 128.0 @@ -307,6 +312,7 @@ group: Narcotics desc: reagent-desc-mute-toxin physicalDesc: reagent-physical-desc-syrupy + contrabandSeverity: Syndicate color: "#000000" boilingPoint: 255.0 meltingPoint: 36.0 @@ -326,6 +332,7 @@ group: Narcotics desc: reagent-desc-norepinephric-acid physicalDesc: reagent-physical-desc-milky + contrabandSeverity: Minor flavor: salty color: "#96a8b5" boilingPoint: 255.0 @@ -370,6 +377,8 @@ group: Narcotics desc: reagent-desc-tear-gas physicalDesc: reagent-physical-desc-milky + allowedDepartments: + - Security flavor: salty color: "#ffffff4d" boilingPoint: 255.0 diff --git a/Resources/Prototypes/Reagents/pyrotechnic.yml b/Resources/Prototypes/Reagents/pyrotechnic.yml index 510cf8aa93..aa5ebe5145 100644 --- a/Resources/Prototypes/Reagents/pyrotechnic.yml +++ b/Resources/Prototypes/Reagents/pyrotechnic.yml @@ -19,6 +19,7 @@ parent: BasePyrotechnic desc: reagent-desc-thermite physicalDesc: reagent-physical-desc-grainy + contrabandSeverity: Minor flavor: bitter color: "#757245" boilingPoint: 2977.0 # Aluminum oxide @@ -41,6 +42,7 @@ parent: BasePyrotechnic desc: reagent-desc-napalm physicalDesc: reagent-physical-desc-soapy + contrabandSeverity: Major flavor: bitter color: "#FA00AF" tileReactions: @@ -70,6 +72,7 @@ parent: BasePyrotechnic desc: reagent-desc-phlogiston physicalDesc: reagent-physical-desc-burning + contrabandSeverity: Major flavor: bitter color: "#D4872A" metabolisms: @@ -99,6 +102,7 @@ parent: BasePyrotechnic desc: reagent-desc-chlorine-trifluoride physicalDesc: reagent-physical-desc-blazing + contrabandSeverity: Major flavor: bitter color: "#FFC8C8" tileReactions: diff --git a/Resources/Prototypes/Reagents/toxins.yml b/Resources/Prototypes/Reagents/toxins.yml index 96761ae778..e94d13a891 100644 --- a/Resources/Prototypes/Reagents/toxins.yml +++ b/Resources/Prototypes/Reagents/toxins.yml @@ -6,6 +6,7 @@ flavor: bitter color: "#cf3600" physicalDesc: reagent-physical-desc-opaque + contrabandSeverity: Minor plantMetabolism: - !type:PlantAdjustToxins amount: 10 @@ -27,6 +28,8 @@ flavor: bitter color: "#e2a38c" physicalDesc: reagent-physical-desc-exotic-smelling + allowedDepartments: + - Medical plantMetabolism: - !type:PlantAdjustToxins amount: 10 @@ -53,6 +56,10 @@ flavor: bitter color: "#000067" physicalDesc: reagent-physical-desc-nondescript + allowedDepartments: + - Medical + allowedJobs: + - Zookeeper metabolisms: Poison: effects: @@ -121,6 +128,7 @@ group: Toxins desc: reagent-desc-polytrinic-acid physicalDesc: reagent-physical-desc-strong-smelling + contrabandSeverity: Major flavor: acid color: "#a1000b" boilingPoint: 78.2 # This isn't a real chemical... @@ -189,6 +197,7 @@ group: Toxins desc: reagent-desc-fluorosulfuric-acid physicalDesc: reagent-physical-desc-strong-smelling + contrabandSeverity: Minor flavor: acid color: "#5050ff" boilingPoint: 165 @@ -229,6 +238,8 @@ group: Toxins desc: reagent-desc-sulfuric-acid physicalDesc: reagent-physical-desc-oily + allowedJobs: + - Chemist flavor: acid color: "#BF8C00" recognizable: true @@ -277,6 +288,9 @@ group: Toxins desc: reagent-desc-unstable-mutagen physicalDesc: reagent-physical-desc-glowing + allowedJobs: + - Chemist + - Botanist flavor: bitter color: "#00ff5f" boilingPoint: 340282300000000000000000000000000000000 # Ethidium bromide, which doesn't boil. @@ -298,6 +312,7 @@ group: Toxins desc: reagent-desc-heartbreaker-toxin physicalDesc: reagent-physical-desc-strong-smelling + contrabandSeverity: Major color: "#5f959c" metabolisms: Poison: @@ -316,6 +331,7 @@ group: Toxins desc: reagent-desc-lexorin physicalDesc: reagent-physical-desc-pungent + contrabandSeverity: Syndicate color: "#6b0007" metabolisms: Poison: @@ -417,6 +433,7 @@ group: Toxins desc: reagent-desc-amatoxin physicalDesc: reagent-physical-desc-nondescript + contrabandSeverity: Major color: "#D6CE7B" metabolisms: Poison: @@ -449,6 +466,7 @@ group: Toxins desc: reagent-desc-romerol physicalDesc: reagent-physical-desc-necrotic + contrabandSeverity: Syndicate flavor: bitter color: "#7e916e" worksOnTheDead: true @@ -544,6 +562,11 @@ group: Narcotics desc: reagent-desc-pax physicalDesc: reagent-physical-desc-soothing + allowedDepartments: + - Security + - Medical + allowedJobs: + - Zookeeper color: "#AAAAAA" metabolisms: Poison: @@ -589,6 +612,7 @@ group: Toxins desc: reagent-desc-lead physicalDesc: reagent-physical-desc-metallic + contrabandSeverity: Major color: "#5C6274" metabolisms: Poison: @@ -605,6 +629,7 @@ group: Toxins desc: reagent-desc-bungotoxin physicalDesc: reagent-physical-desc-nondescript + contrabandSeverity: Major color: "#EBFF8E" metabolisms: Poison: @@ -621,6 +646,7 @@ group: Toxins desc: reagent-desc-vestine physicalDesc: reagent-physical-desc-shiny + contrabandSeverity: Syndicate flavor: medicine color: "#435166" metabolisms: @@ -644,6 +670,7 @@ group: Toxins desc: reagent-desc-tazinide physicalDesc: reagent-physical-desc-metallic + contrabandSeverity: Syndicate flavor: shocking color: "#FDD023" metabolisms: @@ -658,6 +685,8 @@ group: Toxins desc: reagent-desc-lipolicide physicalDesc: reagent-physical-desc-strong-smelling + allowedDepartments: + - Medical flavor: mothballs #why does weightloss juice taste like mothballs color: "#F0FFF0" metabolisms: From b2c8565a2d3e27cda851b3710dbee8a07f2af178 Mon Sep 17 00:00:00 2001 From: PJBot Date: Thu, 18 Sep 2025 19:02:29 +0000 Subject: [PATCH 092/143] Automatic changelog update --- Resources/Changelog/Changelog.yml | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 67fd2e493b..0f61ad4f98 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,13 +1,4 @@ Entries: -- author: chromiumboy - changes: - - message: Station AIs can personalize the appearance of their cores and holograms - by right-clicking the AI core in which they are inserted and selecting 'AI customization' - from the list - type: Add - id: 8473 - time: '2025-05-13T08:50:43.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/34501 - author: EmoGarbage404 changes: - message: Adjusted the sounds of various floors and shoes. @@ -3951,3 +3942,10 @@ id: 8983 time: '2025-09-18T18:47:25.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/39466 +- author: SlamBamActionman + changes: + - message: Several reagents now have contraband levels listed in the guidebook. + type: Add + id: 8984 + time: '2025-09-18T19:01:22.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/40426 From d95b5da7d2440df9cb1a834e0fbe7814982ba886 Mon Sep 17 00:00:00 2001 From: Hi-Im-Shot <163430241+Hi-Im-Shot@users.noreply.github.com> Date: Thu, 18 Sep 2025 23:37:04 +0400 Subject: [PATCH 093/143] Added Cutting Slicing and Executing options to the cane blade (#40311) * Added Cutting Slicing and Executing options to the cane blade * swaped from BaseItem to BaseSword for cleaner code * fixed a double gap in code --- Resources/Prototypes/Entities/Objects/Weapons/Melee/cane.yml | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Melee/cane.yml b/Resources/Prototypes/Entities/Objects/Weapons/Melee/cane.yml index fcf0b91f8e..18f6f8fc2d 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Melee/cane.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Melee/cane.yml @@ -29,14 +29,12 @@ - type: entity name: cane blade - parent: [BaseItem, BaseSyndicateContraband] + parent: [BaseSword, BaseSyndicateContraband] id: CaneBlade description: A sharp blade with a cane shaped hilt. components: - - type: Sharp - type: Sprite sprite: Objects/Weapons/Melee/cane_blade.rsi - state: icon - type: MeleeWeapon wideAnimationRotation: 65 attackRate: 1.5 @@ -46,7 +44,6 @@ soundHit: path: /Audio/Weapons/bladeslice.ogg - type: Item - size: Normal sprite: Objects/Weapons/Melee/cane_blade.rsi - type: Tag tags: From c19cdad7871c3ebe64cb73e757be6cd9f7fd937f Mon Sep 17 00:00:00 2001 From: PJBot Date: Thu, 18 Sep 2025 19:38:12 +0000 Subject: [PATCH 094/143] Automatic changelog update --- Resources/Changelog/Changelog.yml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 0f61ad4f98..6ea46e0a8c 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: EmoGarbage404 - changes: - - message: Adjusted the sounds of various floors and shoes. - type: Tweak - id: 8474 - time: '2025-05-13T09:16:17.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/36941 - author: metalgearsloth changes: - message: Predicted freezers + heaters UIs. @@ -3949,3 +3942,10 @@ id: 8984 time: '2025-09-18T19:01:22.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/40426 +- author: Shot + changes: + - message: The cane blade can now slice, cut and execute + type: Tweak + id: 8985 + time: '2025-09-18T19:37:04.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/40311 From 5a67e3c26a23f0d6432c5a88e4b8df7e5dbf1f51 Mon Sep 17 00:00:00 2001 From: Kittygyat <202250949+Kittygyat@users.noreply.github.com> Date: Thu, 18 Sep 2025 20:59:29 +0100 Subject: [PATCH 095/143] Made all tarantulas able to drag entities (#40433) Sent tarantulas to the gym --- Resources/Prototypes/Entities/Mobs/NPCs/animals.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml b/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml index 7fa2583b52..e6b761d515 100644 --- a/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml +++ b/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml @@ -2500,6 +2500,8 @@ interactSuccessSpawn: EffectHearts interactSuccessSound: path: /Audio/Animals/snake_hiss.ogg + - type: Puller + needsHands: false - type: NoSlip - type: Spider - type: IgnoreSpiderWeb From 393e6cbc07c86d5196fb4b20c5188e657a7aa277 Mon Sep 17 00:00:00 2001 From: PJBot Date: Thu, 18 Sep 2025 20:00:37 +0000 Subject: [PATCH 096/143] Automatic changelog update --- Resources/Changelog/Changelog.yml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 6ea46e0a8c..c3d021c989 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: metalgearsloth - changes: - - message: Predicted freezers + heaters UIs. - type: Tweak - id: 8475 - time: '2025-05-13T11:49:44.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/33837 - author: AsnDen changes: - message: Supplybots can now pull things. @@ -3949,3 +3942,10 @@ id: 8985 time: '2025-09-18T19:37:04.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/40311 +- author: Kittygyat + changes: + - message: Tarantulas and other spider mobs can now pull objects. + type: Add + id: 8986 + time: '2025-09-18T19:59:29.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/40433 From e1da7ec9c59101c579774c5dc056199e920d8b18 Mon Sep 17 00:00:00 2001 From: 2DSiggy Date: Thu, 18 Sep 2025 16:09:44 -0400 Subject: [PATCH 097/143] Better thief objectives (#39867) * finally some good objectives * oopsie * guh fuck * more steal objectives that are actually good * i want to die * fucking upload to github please * adding it to the objectiveGroups.yml * higher weights for testing * upload * just need to do text shit. coding done waow * OBJECTIVES WORK AND HAVE TEXT. FIX VIS * I THINK ITS DONE AAAAAAAAAAAAAAA * grammatical fix * more formatting fixes * i might be stupid * forgot to fix a weight issue * more grammar grrrrrrrrrrrrr * made the double barrel obj have higher difficulty since it's cared about more than beer goggles * Requested Changes * forgot a thing oopsie --- .../conditions/steal-target-groups.ftl | 3 + .../Entities/Clothing/Belt/belts.yml | 2 + .../Objects/Weapons/Guns/Pistols/pistols.yml | 2 + .../Weapons/Guns/Revolvers/revolvers.yml | 2 + .../Entities/Objects/Weapons/Melee/sword.yml | 2 + .../Prototypes/Objectives/objectiveGroups.yml | 9 ++- .../Objectives/stealTargetGroups.yml | 21 +++++++ Resources/Prototypes/Objectives/thief.yml | 59 +++++++++++++++---- 8 files changed, 87 insertions(+), 13 deletions(-) diff --git a/Resources/Locale/en-US/objectives/conditions/steal-target-groups.ftl b/Resources/Locale/en-US/objectives/conditions/steal-target-groups.ftl index a84549ec95..f800aa2c8d 100644 --- a/Resources/Locale/en-US/objectives/conditions/steal-target-groups.ftl +++ b/Resources/Locale/en-US/objectives/conditions/steal-target-groups.ftl @@ -23,6 +23,7 @@ steal-target-groups-encryption-keys = encryption key steal-target-groups-technology-disks = technology disk steal-target-groups-mail = mail steal-target-groups-id-cards = ID Card +steal-target-groups-officer-handguns = security officer's handgun steal-target-groups-lamps = LAMP # Thief single item @@ -43,6 +44,8 @@ steal-target-groups-bible = bible steal-target-groups-clothing-neck-goldmedal = gold medal of crewmanship steal-target-groups-clothing-neck-clownmedal = clown medal steal-target-groups-wanted-list-cartridge = wanted list cartridge +steal-target-groups-belt-ce = chief engineer's toolbelt +steal-target-groups-captain-sword = captain's sabre # Thief structures steal-target-groups-teg = teg generator part diff --git a/Resources/Prototypes/Entities/Clothing/Belt/belts.yml b/Resources/Prototypes/Entities/Clothing/Belt/belts.yml index ffb403534f..06c38cc694 100644 --- a/Resources/Prototypes/Entities/Clothing/Belt/belts.yml +++ b/Resources/Prototypes/Entities/Clothing/Belt/belts.yml @@ -170,6 +170,8 @@ - Wrench sprite: Clothing/Belt/belt_overlay.rsi - type: Appearance + - type: StealTarget + stealGroup: ChiefEngineerToolBelt - type: entity parent: ClothingBeltStorageBase diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Pistols/pistols.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Pistols/pistols.yml index eaa58562f1..ec3fa31297 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Pistols/pistols.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Pistols/pistols.yml @@ -213,6 +213,8 @@ - SemiAuto soundGunshot: path: /Audio/Weapons/Guns/Gunshots/mk58.ogg + - type: StealTarget + stealGroup: OfficerHandgun - type: entity name: N1984 diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Revolvers/revolvers.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Revolvers/revolvers.yml index f860830dc7..1f24828428 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Revolvers/revolvers.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Revolvers/revolvers.yml @@ -95,6 +95,8 @@ capacity: 6 chambers: [ True, True, True, True, True, True ] ammoSlots: [ null, null, null, null, null, null ] + - type: StealTarget + stealGroup: OfficerHandgun - type: entity name: Mateba diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Melee/sword.yml b/Resources/Prototypes/Entities/Objects/Weapons/Melee/sword.yml index a1fea197ab..a468760035 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Melee/sword.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Melee/sword.yml @@ -107,6 +107,8 @@ weight: 0.0002 # 5,000 times less likely than 1 regular animal - type: PirateAccent # not putting a BlockMovement component here cause that's funny. + - type: StealTarget + stealGroup: CaptainSword - type: entity name: katana diff --git a/Resources/Prototypes/Objectives/objectiveGroups.yml b/Resources/Prototypes/Objectives/objectiveGroups.yml index b3f4587ffa..e53310b132 100644 --- a/Resources/Prototypes/Objectives/objectiveGroups.yml +++ b/Resources/Prototypes/Objectives/objectiveGroups.yml @@ -63,26 +63,29 @@ HeadBedsheetStealCollectionObjective: 1 StampStealCollectionObjective: 1 DoorRemoteStealCollectionObjective: 1 + OfficerHandgunsStealCollectionObjective: 1 #sec TechnologyDiskStealCollectionObjective: 1 #sci MailStealCollectionObjective: 1 #cargo IDCardsStealCollectionObjective: 1 - LAMPStealCollectionObjective: 2 #only for moth + LAMPStealCollectionObjective: 0.1 #only for moth, weight decreased cause boring and insanely easy - type: weightedRandom id: ThiefObjectiveGroupItem weights: + ChiefEngineerToolbeltStealObjective: .5 #command + CaptainSwordStealObjective: .5 + ClothingHeadsetAltMedicalStealObjective: 1 ForensicScannerStealObjective: 1 #sec FlippoEngravedLighterStealObjective: 0.5 ClothingHeadHatWardenStealObjective: 1 WantedListCartridgeStealObjective: 1 ClothingOuterHardsuitVoidParamedStealObjective: 1 #med MedicalTechFabCircuitboardStealObjective: 1 - ClothingHeadsetAltMedicalStealObjective: 1 FireAxeStealObjective: 1 #eng AmePartFlatpackStealObjective: 1 ExpeditionsCircuitboardStealObjective: 1 #sup CargoShuttleCircuitboardStealObjective: 1 - ClothingEyesHudBeerStealObjective: 1 #srv + ClothingEyesHudBeerStealObjective: 0.5 #srv, beer goggles less common cause its so easy BibleStealObjective: 1 ClothingNeckGoldmedalStealObjective: 1 #other ClothingNeckClownmedalStealObjective: 0.5 diff --git a/Resources/Prototypes/Objectives/stealTargetGroups.yml b/Resources/Prototypes/Objectives/stealTargetGroups.yml index c687c52a46..d25908d154 100644 --- a/Resources/Prototypes/Objectives/stealTargetGroups.yml +++ b/Resources/Prototypes/Objectives/stealTargetGroups.yml @@ -121,6 +121,13 @@ sprite: Objects/Devices/door_remote.rsi state: door_remotebase +- type: stealTargetGroup + id: OfficerHandgun + name: steal-target-groups-officer-handguns + sprite: + sprite: Objects/Weapons/Guns/Pistols/mk58.rsi + state: base + - type: stealTargetGroup id: EncryptionKey name: steal-target-groups-encryption-keys @@ -228,6 +235,13 @@ sprite: Objects/Devices/flatpack.rsi state: ame-part +- type: stealTargetGroup + id: ChiefEngineerToolBelt + name: steal-target-groups-belt-ce + sprite: + sprite: Clothing/Belt/ce.rsi + state: icon + - type: stealTargetGroup id: SalvageExpeditionsComputerCircuitboard name: steal-target-groups-salvage-expeditions-computer-circuitboard @@ -277,6 +291,13 @@ sprite: Objects/Devices/cartridge.rsi state: cart-sec +- type: stealTargetGroup + id: CaptainSword + name: steal-target-groups-captain-sword + sprite: + sprite: Objects/Weapons/Melee/captain_sabre.rsi + state: icon + #Thief structures - type: stealTargetGroup diff --git a/Resources/Prototypes/Objectives/thief.yml b/Resources/Prototypes/Objectives/thief.yml index 9f2caf5220..80879aae99 100644 --- a/Resources/Prototypes/Objectives/thief.yml +++ b/Resources/Prototypes/Objectives/thief.yml @@ -128,6 +128,8 @@ parent: BaseThiefStealCollectionObjective id: IDCardsStealCollectionObjective components: + - type: NotJobRequirement #Here cause you can buy a personnel crate from cargo which is 8 ID cards. Meaning the ID you start with is number nine and you only need to steal one. + job: CargoTechnician #TODO: add salvage specialist - type: StealCondition stealGroup: IDCard minCollectionSize: 5 @@ -136,6 +138,21 @@ - type: Objective difficulty: 0.7 +- type: entity + parent: BaseThiefStealCollectionObjective + id: OfficerHandgunsStealCollectionObjective + components: + - type: NotJobRequirement + job: SecurityOfficer #TODO: Add HoS, Detective, and Warden + - type: StealCondition + stealGroup: OfficerHandgun + minCollectionSize: 2 + maxCollectionSize: 5 + verifyMapExistence: false + checkStealAreas: false + - type: Objective + difficulty: 1.2 + - type: entity parent: BaseThiefStealCollectionObjective id: LAMPStealCollectionObjective @@ -149,7 +166,7 @@ maxCollectionSize: 10 verifyMapExistence: true - type: Objective - difficulty: 0.5 # just for fun, collectings LAMP on Moth + difficulty: 0.1 # just for fun, collecting LAMP on Moth # steal item @@ -198,7 +215,7 @@ id: ClothingOuterHardsuitVoidParamedStealObjective components: - type: NotJobRequirement - job: Paramedic + job: Paramedic #TODO: make it so this also includes Medical Doctor, Chemist and Psychologist - type: StealCondition stealGroup: ClothingOuterHardsuitVoidParamed - type: Objective @@ -209,7 +226,7 @@ id: MedicalTechFabCircuitboardStealObjective components: - type: NotJobRequirement - job: MedicalDoctor + job: MedicalDoctor #TODO: make it so this also includes Chemist, Paramedic and Psychologist - type: StealCondition stealGroup: MedicalTechFabCircuitboard - type: Objective @@ -242,12 +259,23 @@ id: AmePartFlatpackStealObjective components: - type: NotJobRequirement - job: StationEngineer + job: StationEngineer #TODO: make it so this also includes Atmos technician - type: StealCondition stealGroup: AmePartFlatpack - type: Objective difficulty: 1 +- type: entity + parent: BaseThiefStealObjective + id: ChiefEngineerToolbeltStealObjective + components: + #- type: NotJobRequirement Is this really necessary? it's a pickpocket objective. Only thing is that it would be easier to get to CE + # Job: StationEngineer, AtmosphericTechnician + - type: StealCondition + stealGroup: ChiefEngineerToolBelt + - type: Objective + difficulty: .7 + - type: entity #Cargo subgroup parent: BaseThiefStealObjective id: ExpeditionsCircuitboardStealObjective @@ -264,7 +292,7 @@ id: CargoShuttleCircuitboardStealObjective components: - type: NotJobRequirement - job: CargoTechnician + job: CargoTechnician #TODO: make it so this also includes Salvage Specialist - type: StealCondition stealGroup: CargoShuttleConsoleCircuitboard - type: Objective @@ -275,7 +303,7 @@ id: ClothingEyesHudBeerStealObjective components: - type: NotJobRequirement - job: Bartender + job: Bartender #TODO: make it so this also includes Service worker - type: StealCondition stealGroup: ClothingEyesHudBeer - type: Objective @@ -314,6 +342,17 @@ - type: Objective difficulty: 1 +- type: entity + parent: BaseThiefStealObjective + id: CaptainSwordStealObjective + components: + - type: NotJobRequirement + job: Captain + - type: StealCondition + stealGroup: CaptainSword + - type: Objective + difficulty: 1.5 + # Structures - type: entity @@ -343,7 +382,7 @@ id: ChemDispenserStealObjective components: - type: NotJobRequirement - job: Chemist + job: Chemist #TODO: make it so this also includes Scientist. It's a roundstart circuit they can construct. - type: StealCondition stealGroup: ChemDispenser - type: Objective @@ -365,7 +404,7 @@ id: FreezerHeaterStealObjective components: - type: NotJobRequirement - job: AtmosphericTechnician + job: AtmosphericTechnician #TODO: make it so this also includes Engineer, Medical doctor, chemist and maybe also scientist. Medical doc and chemist cause cryogenics, scientist cause it can be built and is sometimes mapped in artisci - type: StealCondition stealGroup: FreezerHeater - type: Objective @@ -376,7 +415,7 @@ id: TegStealObjective components: - type: NotJobRequirement - job: AtmosphericTechnician + job: AtmosphericTechnician #TODO: make it so this also includes Engineer, Several TEG only maps have TEG accessible by standard Engineers - type: StealCondition stealGroup: Teg - type: Objective @@ -387,7 +426,7 @@ id: BoozeDispenserStealObjective components: - type: NotJobRequirement - job: Bartender + job: Bartender #TODO: make it so this also includes Service worker - type: StealCondition stealGroup: BoozeDispenser - type: Objective From 867d0f5130378eff30749166d3280114cc4b408f Mon Sep 17 00:00:00 2001 From: PJBot Date: Thu, 18 Sep 2025 20:10:52 +0000 Subject: [PATCH 098/143] Automatic changelog update --- Resources/Changelog/Changelog.yml | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index c3d021c989..dba20ff953 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: AsnDen - changes: - - message: Supplybots can now pull things. - type: Add - id: 8476 - time: '2025-05-13T17:15:30.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/32468 - author: BigfootBravo changes: - message: Cargo acquisition slips can now fit into folders, clipboards, and envelopes, @@ -3949,3 +3942,14 @@ id: 8986 time: '2025-09-18T19:59:29.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/40433 +- author: 2DSiggy + changes: + - message: Thief can now be tasked with stealing Secoff/detective handguns, Captain's + sabre, and the CE's toolbelt. + type: Add + - message: Heavily reduced the likelihood of the LAMP objective for thief moths + and reduced the chance of beer goggles appearing as an objective. + type: Tweak + id: 8987 + time: '2025-09-18T20:09:45.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/39867 From ed89c0e06196a3b3ab0b466ec6dd7ebee2742c9d Mon Sep 17 00:00:00 2001 From: Lordbrandon12 <107556696+Lordbrandon12@users.noreply.github.com> Date: Thu, 18 Sep 2025 17:31:29 -0300 Subject: [PATCH 099/143] adds ConveyorMask colission mask to it's fixture component (#40439) --- Resources/Prototypes/Entities/Structures/conveyor.yml | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/Resources/Prototypes/Entities/Structures/conveyor.yml b/Resources/Prototypes/Entities/Structures/conveyor.yml index 6722181b26..feec88eeaf 100644 --- a/Resources/Prototypes/Entities/Structures/conveyor.yml +++ b/Resources/Prototypes/Entities/Structures/conveyor.yml @@ -29,10 +29,7 @@ - 0.50,0.50 - -0.50,0.50 layer: - - Impassable - - MidImpassable - - LowImpassable - - DoorPassable + - ConveyorMask hard: False - type: Conveyor - type: DeviceNetwork From 5c54d199a81359873ada5e7577c05a29ad92475d Mon Sep 17 00:00:00 2001 From: Leon Friedrich <60421075+ElectroJr@users.noreply.github.com> Date: Fri, 19 Sep 2025 14:54:15 +1200 Subject: [PATCH 100/143] Update engine to v267.1.0 (#40445) --- RobustToolbox | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/RobustToolbox b/RobustToolbox index a1cdd60602..c06ca39009 160000 --- a/RobustToolbox +++ b/RobustToolbox @@ -1 +1 @@ -Subproject commit a1cdd60602e44e5fa1130cb3982133c24a4f8760 +Subproject commit c06ca39009ce993bed98c216a8affef5f566cb66 From 4f311d6c44c8a0fb8778f8bafd017958fc46344d Mon Sep 17 00:00:00 2001 From: Minerva <218184747+mnva0@users.noreply.github.com> Date: Fri, 19 Sep 2025 06:15:22 -0400 Subject: [PATCH 101/143] Fixes some refuling welder typos (#40447) --- Resources/Prototypes/Entities/Objects/Tools/welders.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Resources/Prototypes/Entities/Objects/Tools/welders.yml b/Resources/Prototypes/Entities/Objects/Tools/welders.yml index a1f8613109..8833047777 100644 --- a/Resources/Prototypes/Entities/Objects/Tools/welders.yml +++ b/Resources/Prototypes/Entities/Objects/Tools/welders.yml @@ -204,8 +204,8 @@ - type: entity parent: [ Welder, BaseXenoborgContraband ] id: RefuelingWelder - name: refuling welding tool - description: "An slow welder that can refuel itself over time." + name: refueling welding tool + description: "A slow welder that can refuel itself over time." components: - type: Tool speedModifier: 0.5 From c075c89cd0632709b6c73249b7f7ff269c7d2555 Mon Sep 17 00:00:00 2001 From: GeneralGaws <122978178+GeneralGaws@users.noreply.github.com> Date: Fri, 19 Sep 2025 19:55:40 +0300 Subject: [PATCH 102/143] oasis warp fix (#40454) --- Resources/Maps/oasis.yml | 2790 +++++++++++++++++++++++++++++++------- 1 file changed, 2263 insertions(+), 527 deletions(-) diff --git a/Resources/Maps/oasis.yml b/Resources/Maps/oasis.yml index 5f55256fc8..07f2bd953c 100644 --- a/Resources/Maps/oasis.yml +++ b/Resources/Maps/oasis.yml @@ -1,11 +1,11 @@ meta: format: 7 category: Map - engineVersion: 266.0.0 + engineVersion: 267.1.0 forkId: "" forkVersion: "" - time: 08/17/2025 20:31:53 - entityCount: 31133 + time: 09/19/2025 16:33:00 + entityCount: 31134 maps: - 1 grids: @@ -8679,108 +8679,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 + Nitrogen: 6666.982 - volume: 2500 temperature: 293.15 moles: - - 0 - - 6666.982 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 6666.982 - volume: 2500 temperature: 293.15 moles: - - 6666.982 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - volume: 2500 - temperature: 293.15 - moles: - - 0 - - 0 - - 0 - - 6666.982 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Plasma: 6666.982 chunkSize: 4 - type: GasTileOverlay - type: RadiationGridResistance @@ -10037,33 +9960,11 @@ 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 immutable: True - moles: - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + moles: {} chunkSize: 4 - type: GasTileOverlay - type: RadiationGridResistance @@ -15514,7 +15415,7 @@ entities: pos: -22.5,26.5 parent: 2 - type: Door - secondsUntilStateChange: -213190.27 + secondsUntilStateChange: -213220.6 state: Opening - type: DeviceLinkSource lastSignals: @@ -16370,7 +16271,7 @@ entities: lastSignals: DoorStatus: True - type: Door - secondsUntilStateChange: -312018.88 + secondsUntilStateChange: -312049.2 state: Opening - uid: 6934 components: @@ -16382,7 +16283,7 @@ entities: lastSignals: DoorStatus: True - type: Door - secondsUntilStateChange: -312021.5 + secondsUntilStateChange: -312051.8 state: Opening - uid: 6935 components: @@ -16394,7 +16295,7 @@ entities: lastSignals: DoorStatus: True - type: Door - secondsUntilStateChange: -312020.34 + secondsUntilStateChange: -312050.66 state: Opening - uid: 6936 components: @@ -16405,7 +16306,7 @@ entities: lastSignals: DoorStatus: True - type: Door - secondsUntilStateChange: -312019.56 + secondsUntilStateChange: -312049.88 state: Opening - proto: AirlockTheatreLocked entities: @@ -80935,18 +80836,8 @@ entities: immutable: False temperature: 293.14697 moles: - - 1.8856695 - - 7.0937095 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 1.8856695 + Nitrogen: 7.0937095 - type: ContainerContainer containers: entity_storage: !type:Container @@ -83969,19 +83860,7 @@ entities: volume: 200 immutable: False temperature: 93.465614 - moles: - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + moles: {} - uid: 1009 components: - type: Transform @@ -83992,19 +83871,7 @@ entities: volume: 200 immutable: False temperature: 93.465614 - moles: - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + moles: {} - uid: 1010 components: - type: Transform @@ -84015,19 +83882,7 @@ entities: volume: 200 immutable: False temperature: 93.465614 - moles: - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + moles: {} - uid: 1011 components: - type: Transform @@ -84038,19 +83893,7 @@ entities: volume: 200 immutable: False temperature: 93.465614 - moles: - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + moles: {} - uid: 1012 components: - type: Transform @@ -84061,19 +83904,7 @@ entities: volume: 200 immutable: False temperature: 93.465614 - moles: - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + moles: {} - uid: 1013 components: - type: Transform @@ -84084,19 +83915,7 @@ entities: volume: 200 immutable: False temperature: 93.465614 - moles: - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + moles: {} - proto: CrateContrabandStorageSecure entities: - uid: 3497 @@ -84122,18 +83941,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 - proto: CrateEmergencyFire entities: - uid: 23791 @@ -84246,18 +84055,8 @@ entities: immutable: False temperature: 234.99821 moles: - - 2.3288834 - - 8.761038 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 2.3288834 + Nitrogen: 8.761038 - type: ContainerContainer containers: entity_storage: !type:Container @@ -84287,18 +84086,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 @@ -84321,18 +84110,8 @@ entities: immutable: False temperature: 293.14777 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 @@ -84381,18 +84160,8 @@ entities: immutable: False temperature: 293.14673 moles: - - 1.8856695 - - 7.0937095 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 1.8856695 + Nitrogen: 7.0937095 - type: ContainerContainer containers: entity_storage: !type:Container @@ -84425,18 +84194,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 - proto: CrateGenericSteel entities: - uid: 13200 @@ -84450,18 +84209,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 @@ -84637,18 +84386,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 @@ -85002,18 +84741,8 @@ entities: immutable: False temperature: 293.14673 moles: - - 1.8856695 - - 7.0937095 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 1.8856695 + Nitrogen: 7.0937095 - type: ContainerContainer containers: entity_storage: !type:Container @@ -85721,6 +85450,13 @@ entities: - type: Transform pos: 15.5,-30.5 parent: 2 +- proto: DefaultStationBeaconReporter + entities: + - uid: 31134 + components: + - type: Transform + pos: -45.5,-25.5 + parent: 2 - proto: DefaultStationBeaconRobotics entities: - uid: 11905 @@ -100271,7 +100007,7 @@ entities: pos: -13.5,-1.5 parent: 2 - type: Door - secondsUntilStateChange: -303342.88 + secondsUntilStateChange: -303373.2 - type: DeviceNetwork deviceLists: - 18275 @@ -147704,7 +147440,7 @@ entities: pos: 36.5,-35.5 parent: 2 - type: Door - secondsUntilStateChange: -340174.66 + secondsUntilStateChange: -340204.97 state: Opening - uid: 5211 components: @@ -148135,24 +147871,32 @@ entities: rot: 3.141592653589793 rad pos: 39.5,-3.5 parent: 21002 + - type: DeltaPressure + gridUid: 21002 - uid: 28298 components: - type: Transform rot: 3.141592653589793 rad pos: 43.5,14.5 parent: 21002 + - type: DeltaPressure + gridUid: 21002 - uid: 28299 components: - type: Transform rot: 3.141592653589793 rad pos: 53.5,13.5 parent: 21002 + - type: DeltaPressure + gridUid: 21002 - uid: 28300 components: - type: Transform rot: 3.141592653589793 rad pos: 62.5,5.5 parent: 21002 + - type: DeltaPressure + gridUid: 21002 - proto: IngotGold entities: - uid: 11454 @@ -149029,18 +148773,8 @@ entities: immutable: False temperature: 293.14673 moles: - - 1.8856695 - - 7.0937095 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 1.8856695 + Nitrogen: 7.0937095 - type: ContainerContainer containers: entity_storage: !type:Container @@ -149081,18 +148815,8 @@ entities: immutable: False temperature: 293.14673 moles: - - 1.8856695 - - 7.0937095 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 1.8856695 + Nitrogen: 7.0937095 - type: ContainerContainer containers: entity_storage: !type:Container @@ -149218,18 +148942,8 @@ entities: immutable: False temperature: 234.99739 moles: - - 2.317709 - - 8.719001 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 2.317709 + Nitrogen: 8.719001 - type: ContainerContainer containers: entity_storage: !type:Container @@ -149260,18 +148974,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 @@ -149299,18 +149003,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 @@ -149352,18 +149046,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 @@ -149439,18 +149123,8 @@ entities: immutable: False temperature: 293.14673 moles: - - 1.8856695 - - 7.0937095 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 1.8856695 + Nitrogen: 7.0937095 - type: ContainerContainer containers: entity_storage: !type:Container @@ -149590,18 +149264,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 @@ -149647,18 +149311,8 @@ entities: immutable: False temperature: 293.147 moles: - - 1.7459903 - - 6.568249 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 1.7459903 + Nitrogen: 6.568249 - uid: 4289 components: - type: Transform @@ -151220,32 +150874,44 @@ entities: - type: Transform pos: 19.5,-12.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 551 components: - type: Transform pos: 19.5,-13.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 552 components: - type: Transform pos: 14.5,-18.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 554 components: - type: Transform pos: 13.5,-18.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 821 components: - type: Transform pos: 6.5,-23.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1007 components: - type: Transform rot: 3.141592653589793 rad pos: 2.5,-23.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - proto: Mirror entities: - uid: 2654 @@ -154074,48 +153740,64 @@ entities: rot: 1.5707963267948966 rad pos: 37.5,-11.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 14238 components: - type: Transform rot: -1.5707963267948966 rad pos: 38.5,-11.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 17222 components: - type: Transform rot: -1.5707963267948966 rad pos: 38.5,-10.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 17223 components: - type: Transform rot: 1.5707963267948966 rad pos: 37.5,-10.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 21130 components: - type: Transform rot: 1.5707963267948966 rad pos: 5.5,-9.5 parent: 21002 + - type: DeltaPressure + gridUid: 21002 - uid: 21131 components: - type: Transform rot: 1.5707963267948966 rad pos: 5.5,-11.5 parent: 21002 + - type: DeltaPressure + gridUid: 21002 - uid: 21134 components: - type: Transform rot: 1.5707963267948966 rad pos: 5.5,-10.5 parent: 21002 + - type: DeltaPressure + gridUid: 21002 - uid: 28517 components: - type: Transform rot: 1.5707963267948966 rad pos: 1.5,-9.5 parent: 21002 + - type: DeltaPressure + gridUid: 21002 - proto: PlasmaWindowDirectional entities: - uid: 1302 @@ -154124,64 +153806,86 @@ entities: rot: 3.141592653589793 rad pos: -26.5,-14.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1303 components: - type: Transform rot: 3.141592653589793 rad pos: -27.5,-14.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1304 components: - type: Transform rot: 3.141592653589793 rad pos: -28.5,-14.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1305 components: - type: Transform rot: 3.141592653589793 rad pos: -30.5,-14.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1306 components: - type: Transform rot: 3.141592653589793 rad pos: -31.5,-14.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1307 components: - type: Transform pos: -26.5,-16.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1308 components: - type: Transform pos: -27.5,-16.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1309 components: - type: Transform rot: 1.5707963267948966 rad pos: -28.5,-20.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1310 components: - type: Transform rot: 1.5707963267948966 rad pos: -28.5,-19.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1311 components: - type: Transform rot: 1.5707963267948966 rad pos: -28.5,-18.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1312 components: - type: Transform rot: 1.5707963267948966 rad pos: -28.5,-17.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - proto: PlasticFlapsAirtightClear entities: - uid: 345 @@ -163349,577 +163053,783 @@ entities: rot: -1.5707963267948966 rad pos: 37.5,32.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1524 components: - type: Transform rot: -1.5707963267948966 rad pos: 32.5,29.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2607 components: - type: Transform rot: -1.5707963267948966 rad pos: 27.5,21.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 3052 components: - type: Transform pos: 11.5,40.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 3156 components: - type: Transform rot: 1.5707963267948966 rad pos: 16.5,36.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 3244 components: - type: Transform rot: 3.141592653589793 rad pos: 35.5,34.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 3380 components: - type: Transform rot: 3.141592653589793 rad pos: 49.5,-15.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 3536 components: - type: Transform rot: 3.141592653589793 rad pos: 49.5,-16.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 3714 components: - type: Transform pos: 47.5,-22.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 3743 components: - type: Transform pos: 46.5,-22.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4934 components: - type: Transform pos: -4.5,48.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5355 components: - type: Transform rot: 3.141592653589793 rad pos: -1.5,48.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5358 components: - type: Transform rot: 3.141592653589793 rad pos: -3.5,48.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5373 components: - type: Transform pos: 22.5,24.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5439 components: - type: Transform rot: -1.5707963267948966 rad pos: 23.5,24.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5502 components: - type: Transform rot: -1.5707963267948966 rad pos: 31.5,34.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5503 components: - type: Transform rot: -1.5707963267948966 rad pos: 33.5,34.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6476 components: - type: Transform rot: 3.141592653589793 rad pos: 30.5,36.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6477 components: - type: Transform rot: 3.141592653589793 rad pos: 30.5,38.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6478 components: - type: Transform rot: 3.141592653589793 rad pos: 30.5,40.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6488 components: - type: Transform pos: -41.5,38.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6539 components: - type: Transform pos: -40.5,38.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6540 components: - type: Transform pos: -39.5,38.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6666 components: - type: Transform rot: -1.5707963267948966 rad pos: -13.5,50.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7164 components: - type: Transform rot: 3.141592653589793 rad pos: 13.5,69.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7223 components: - type: Transform rot: 3.141592653589793 rad pos: 12.5,69.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7225 components: - type: Transform rot: 3.141592653589793 rad pos: 14.5,69.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7560 components: - type: Transform rot: 1.5707963267948966 rad pos: -39.5,42.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7620 components: - type: Transform rot: -1.5707963267948966 rad pos: -17.5,50.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7632 components: - type: Transform rot: 1.5707963267948966 rad pos: 14.5,44.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7633 components: - type: Transform rot: 1.5707963267948966 rad pos: 13.5,44.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7634 components: - type: Transform rot: 1.5707963267948966 rad pos: 12.5,44.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7635 components: - type: Transform rot: 1.5707963267948966 rad pos: 11.5,43.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7637 components: - type: Transform rot: 1.5707963267948966 rad pos: 11.5,42.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7644 components: - type: Transform rot: 1.5707963267948966 rad pos: 11.5,41.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7688 components: - type: Transform rot: 1.5707963267948966 rad pos: 17.5,38.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7694 components: - type: Transform rot: 1.5707963267948966 rad pos: 17.5,34.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7759 components: - type: Transform pos: -38.5,39.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7776 components: - type: Transform rot: -1.5707963267948966 rad pos: -16.5,53.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7780 components: - type: Transform pos: -7.5,45.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7781 components: - type: Transform rot: -1.5707963267948966 rad pos: -13.5,52.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7782 components: - type: Transform rot: -1.5707963267948966 rad pos: -13.5,51.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7816 components: - type: Transform rot: -1.5707963267948966 rad pos: -14.5,53.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7818 components: - type: Transform pos: -8.5,48.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7821 components: - type: Transform rot: -1.5707963267948966 rad pos: -17.5,51.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7822 components: - type: Transform pos: -9.5,48.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7823 components: - type: Transform rot: -1.5707963267948966 rad pos: -17.5,52.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7825 components: - type: Transform pos: -10.5,48.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7826 components: - type: Transform pos: -9.5,44.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7827 components: - type: Transform pos: -8.5,44.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8037 components: - type: Transform pos: -10.5,44.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8040 components: - type: Transform pos: -7.5,47.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8041 components: - type: Transform pos: -7.5,46.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8133 components: - type: Transform rot: 1.5707963267948966 rad pos: 18.5,34.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8360 components: - type: Transform pos: -39.5,25.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8508 components: - type: Transform pos: -39.5,23.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8509 components: - type: Transform pos: -39.5,21.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8510 components: - type: Transform pos: -39.5,19.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8511 components: - type: Transform pos: -39.5,17.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8512 components: - type: Transform pos: -39.5,13.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8513 components: - type: Transform pos: -39.5,11.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 9361 components: - type: Transform rot: 1.5707963267948966 rad pos: 19.5,38.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 9364 components: - type: Transform pos: -6.5,48.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 9407 components: - type: Transform rot: 1.5707963267948966 rad pos: 19.5,34.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 9586 components: - type: Transform pos: -38.5,40.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 9587 components: - type: Transform pos: -38.5,41.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 9592 components: - type: Transform rot: 1.5707963267948966 rad pos: -40.5,42.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 9593 components: - type: Transform rot: 1.5707963267948966 rad pos: -41.5,42.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 9868 components: - type: Transform pos: 20.5,-36.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 9872 components: - type: Transform pos: 18.5,-34.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 11542 components: - type: Transform rot: 1.5707963267948966 rad pos: 16.5,42.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 12757 components: - type: Transform rot: 3.141592653589793 rad pos: 52.5,17.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 12881 components: - type: Transform rot: 3.141592653589793 rad pos: 58.5,19.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 13025 components: - type: Transform rot: 3.141592653589793 rad pos: 50.5,17.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 13508 components: - type: Transform rot: 3.141592653589793 rad pos: -4.5,44.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 13617 components: - type: Transform rot: 3.141592653589793 rad pos: -5.5,44.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 16673 components: - type: Transform rot: 3.141592653589793 rad pos: 16.5,43.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 16681 components: - type: Transform rot: 1.5707963267948966 rad pos: 16.5,35.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 17304 components: - type: Transform pos: 45.5,-22.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 18395 components: - type: Transform rot: 3.141592653589793 rad pos: 49.5,17.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 18409 components: - type: Transform pos: 58.5,17.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 18411 components: - type: Transform rot: 3.141592653589793 rad pos: 59.5,17.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 18633 components: - type: Transform pos: 44.5,-22.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 19163 components: - type: Transform rot: 3.141592653589793 rad pos: -3.5,44.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 23599 components: - type: Transform rot: 1.5707963267948966 rad pos: 15.5,44.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 23647 components: - type: Transform rot: 1.5707963267948966 rad pos: 16.5,37.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 28512 components: - type: Transform pos: 6.5,1.5 parent: 21002 + - type: DeltaPressure + gridUid: 21002 - uid: 28513 components: - type: Transform pos: 7.5,1.5 parent: 21002 + - type: DeltaPressure + gridUid: 21002 - uid: 28514 components: - type: Transform pos: 7.5,-2.5 parent: 21002 + - type: DeltaPressure + gridUid: 21002 - uid: 28515 components: - type: Transform pos: 6.5,-2.5 parent: 21002 + - type: DeltaPressure + gridUid: 21002 - uid: 29154 components: - type: Transform rot: 3.141592653589793 rad pos: 52.5,19.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 29158 components: - type: Transform rot: 3.141592653589793 rad pos: 58.5,18.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 29323 components: - type: Transform pos: 56.5,19.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 29325 components: - type: Transform pos: 55.5,19.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 29362 components: - type: Transform rot: 3.141592653589793 rad pos: 61.5,17.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 29425 components: - type: Transform pos: 54.5,19.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 29434 components: - type: Transform rot: 3.141592653589793 rad pos: 52.5,18.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 29437 components: - type: Transform rot: 3.141592653589793 rad pos: 51.5,17.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 29439 components: - type: Transform rot: 3.141592653589793 rad pos: 60.5,17.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 29594 components: - type: Transform pos: 48.5,-22.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 30627 components: - type: Transform rot: -1.5707963267948966 rad pos: 48.5,-13.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 30628 components: - type: Transform rot: -1.5707963267948966 rad pos: 48.5,-12.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 30629 components: - type: Transform rot: -1.5707963267948966 rad pos: 48.5,-11.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - proto: ReinforcedUraniumWindow entities: - uid: 13028 @@ -163928,36 +163838,48 @@ entities: rot: 3.141592653589793 rad pos: 60.5,22.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 13038 components: - type: Transform rot: 3.141592653589793 rad pos: 58.5,22.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 13039 components: - type: Transform rot: 3.141592653589793 rad pos: 52.5,22.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 13040 components: - type: Transform rot: 3.141592653589793 rad pos: 61.5,22.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 13060 components: - type: Transform rot: 3.141592653589793 rad pos: 49.5,22.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 24380 components: - type: Transform rot: 3.141592653589793 rad pos: 50.5,22.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - proto: ReinforcedWindow entities: - uid: 127 @@ -163965,3035 +163887,4115 @@ entities: - type: Transform pos: 18.5,7.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 128 components: - type: Transform pos: 18.5,8.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 246 components: - type: Transform pos: 18.5,4.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 247 components: - type: Transform pos: 18.5,6.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 248 components: - type: Transform pos: 18.5,5.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 249 components: - type: Transform pos: 18.5,9.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 263 components: - type: Transform pos: -6.5,-17.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 264 components: - type: Transform pos: -7.5,-17.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 265 components: - type: Transform pos: -8.5,-17.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 266 components: - type: Transform pos: -9.5,-17.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 267 components: - type: Transform pos: -11.5,-18.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 268 components: - type: Transform pos: -12.5,-18.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 269 components: - type: Transform pos: -17.5,-6.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 272 components: - type: Transform pos: -17.5,-7.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 273 components: - type: Transform pos: -17.5,-8.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 274 components: - type: Transform pos: -17.5,-9.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 280 components: - type: Transform pos: -2.5,-17.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 281 components: - type: Transform pos: -3.5,-17.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 282 components: - type: Transform pos: -4.5,-17.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 283 components: - type: Transform pos: -13.5,-18.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 284 components: - type: Transform pos: -16.5,-17.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 285 components: - type: Transform pos: -14.5,-18.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 288 components: - type: Transform rot: 3.141592653589793 rad pos: -17.5,-3.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 289 components: - type: Transform rot: 3.141592653589793 rad pos: -17.5,-2.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 290 components: - type: Transform rot: 3.141592653589793 rad pos: -17.5,-4.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 352 components: - type: Transform rot: 3.141592653589793 rad pos: 38.5,-2.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 743 components: - type: Transform rot: 3.141592653589793 rad pos: -27.5,-17.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1206 components: - type: Transform rot: 3.141592653589793 rad pos: -27.5,-20.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1207 components: - type: Transform rot: 3.141592653589793 rad pos: -27.5,-19.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1208 components: - type: Transform rot: 3.141592653589793 rad pos: -27.5,-18.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1213 components: - type: Transform rot: 3.141592653589793 rad pos: -27.5,-13.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1214 components: - type: Transform rot: 3.141592653589793 rad pos: -27.5,-12.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1215 components: - type: Transform rot: 3.141592653589793 rad pos: -27.5,-11.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1216 components: - type: Transform rot: 3.141592653589793 rad pos: -26.5,-13.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1217 components: - type: Transform rot: 3.141592653589793 rad pos: -27.5,-10.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1218 components: - type: Transform rot: 3.141592653589793 rad pos: -26.5,-17.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1228 components: - type: Transform rot: 3.141592653589793 rad pos: -30.5,-10.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1230 components: - type: Transform rot: 3.141592653589793 rad pos: -30.5,-11.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1231 components: - type: Transform rot: 3.141592653589793 rad pos: -30.5,-13.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1232 components: - type: Transform rot: 3.141592653589793 rad pos: -30.5,-12.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1272 components: - type: Transform rot: 3.141592653589793 rad pos: -31.5,-13.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1273 components: - type: Transform rot: 3.141592653589793 rad pos: -28.5,-13.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1386 components: - type: Transform rot: 3.141592653589793 rad pos: -10.5,-39.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1471 components: - type: Transform rot: -1.5707963267948966 rad pos: -23.5,-33.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1494 components: - type: Transform rot: -1.5707963267948966 rad pos: -25.5,-33.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1526 components: - type: Transform rot: -1.5707963267948966 rad pos: -24.5,-33.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1532 components: - type: Transform rot: -1.5707963267948966 rad pos: -26.5,-33.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1539 components: - type: Transform rot: -1.5707963267948966 rad pos: -29.5,-33.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1559 components: - type: Transform rot: -1.5707963267948966 rad pos: -31.5,-33.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1602 components: - type: Transform rot: 1.5707963267948966 rad pos: 60.5,-39.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1610 components: - type: Transform pos: -17.5,-17.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1633 components: - type: Transform rot: -1.5707963267948966 rad pos: -16.5,-37.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1644 components: - type: Transform rot: 3.141592653589793 rad pos: -18.5,-38.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1647 components: - type: Transform rot: 3.141592653589793 rad pos: -13.5,-37.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1668 components: - type: Transform pos: -18.5,-40.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1881 components: - type: Transform pos: -23.5,-42.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1882 components: - type: Transform pos: -24.5,-42.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1883 components: - type: Transform pos: -25.5,-42.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1884 components: - type: Transform pos: -26.5,-42.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1885 components: - type: Transform pos: -27.5,-42.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2263 components: - type: Transform pos: 40.5,-1.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2348 components: - type: Transform pos: 23.5,2.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2351 components: - type: Transform pos: 25.5,2.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2425 components: - type: Transform pos: 25.5,3.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2426 components: - type: Transform pos: 21.5,2.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2427 components: - type: Transform pos: 23.5,3.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2429 components: - type: Transform pos: 21.5,3.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2460 components: - type: Transform pos: 27.5,12.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2461 components: - type: Transform pos: 27.5,15.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2465 components: - type: Transform pos: 29.5,17.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2466 components: - type: Transform pos: 32.5,17.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2592 components: - type: Transform rot: 1.5707963267948966 rad pos: 34.5,15.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2593 components: - type: Transform rot: 1.5707963267948966 rad pos: 34.5,12.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2610 components: - type: Transform rot: 1.5707963267948966 rad pos: 61.5,-39.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2611 components: - type: Transform rot: 1.5707963267948966 rad pos: 61.5,-38.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 3088 components: - type: Transform pos: 46.5,-18.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 3204 components: - type: Transform rot: 3.141592653589793 rad pos: 42.5,22.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 3222 components: - type: Transform rot: 1.5707963267948966 rad pos: 30.5,25.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 3250 components: - type: Transform rot: 1.5707963267948966 rad pos: 32.5,27.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 3259 components: - type: Transform rot: 1.5707963267948966 rad pos: 34.5,25.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 3372 components: - type: Transform rot: 3.141592653589793 rad pos: 46.5,-14.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 3387 components: - type: Transform rot: 3.141592653589793 rad pos: 47.5,-14.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 3878 components: - type: Transform rot: 3.141592653589793 rad pos: 59.5,-30.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 3879 components: - type: Transform rot: 3.141592653589793 rad pos: 60.5,-31.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 3883 components: - type: Transform rot: 3.141592653589793 rad pos: 59.5,-31.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 3885 components: - type: Transform rot: 3.141592653589793 rad pos: 59.5,-22.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 3886 components: - type: Transform rot: 3.141592653589793 rad pos: 50.5,-30.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 3889 components: - type: Transform rot: 3.141592653589793 rad pos: 48.5,-30.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 3899 components: - type: Transform rot: 1.5707963267948966 rad pos: 62.5,-2.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 3903 components: - type: Transform rot: 3.141592653589793 rad pos: 59.5,-21.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 3909 components: - type: Transform rot: 3.141592653589793 rad pos: 47.5,-30.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 3911 components: - type: Transform rot: 3.141592653589793 rad pos: 52.5,-30.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 3912 components: - type: Transform rot: 3.141592653589793 rad pos: 53.5,-30.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 3918 components: - type: Transform rot: 3.141592653589793 rad pos: 60.5,-21.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 3929 components: - type: Transform rot: 1.5707963267948966 rad pos: 43.5,-24.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 3932 components: - type: Transform rot: 1.5707963267948966 rad pos: 43.5,-28.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 3942 components: - type: Transform rot: 3.141592653589793 rad pos: 38.5,-8.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 3979 components: - type: Transform rot: 1.5707963267948966 rad pos: 29.5,-30.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 3987 components: - type: Transform rot: 1.5707963267948966 rad pos: 40.5,24.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4062 components: - type: Transform rot: 1.5707963267948966 rad pos: 32.5,-5.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4085 components: - type: Transform rot: 1.5707963267948966 rad pos: 34.5,-35.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4086 components: - type: Transform rot: 1.5707963267948966 rad pos: 36.5,-35.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4088 components: - type: Transform rot: 1.5707963267948966 rad pos: 37.5,-35.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4090 components: - type: Transform rot: 1.5707963267948966 rad pos: 32.5,-35.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4091 components: - type: Transform rot: 1.5707963267948966 rad pos: 31.5,-35.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4093 components: - type: Transform rot: -1.5707963267948966 rad pos: 58.5,-39.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4094 components: - type: Transform rot: -1.5707963267948966 rad pos: 59.5,-39.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4098 components: - type: Transform rot: -1.5707963267948966 rad pos: 61.5,-37.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4099 components: - type: Transform rot: -1.5707963267948966 rad pos: 61.5,-36.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4110 components: - type: Transform rot: -1.5707963267948966 rad pos: 57.5,-39.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4111 components: - type: Transform rot: -1.5707963267948966 rad pos: 56.5,-39.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4112 components: - type: Transform rot: -1.5707963267948966 rad pos: 55.5,-39.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4113 components: - type: Transform rot: -1.5707963267948966 rad pos: 54.5,-39.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4114 components: - type: Transform rot: -1.5707963267948966 rad pos: 53.5,-39.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4115 components: - type: Transform rot: -1.5707963267948966 rad pos: 52.5,-39.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4116 components: - type: Transform rot: -1.5707963267948966 rad pos: 51.5,-39.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4244 components: - type: Transform rot: 1.5707963267948966 rad pos: 39.5,-32.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4307 components: - type: Transform rot: 1.5707963267948966 rad pos: 43.5,-37.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4308 components: - type: Transform rot: 1.5707963267948966 rad pos: 42.5,-37.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4309 components: - type: Transform rot: 1.5707963267948966 rad pos: 40.5,-37.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4313 components: - type: Transform rot: 1.5707963267948966 rad pos: 39.5,-37.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4502 components: - type: Transform rot: 3.141592653589793 rad pos: 38.5,-5.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4801 components: - type: Transform rot: 1.5707963267948966 rad pos: 31.5,-54.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4824 components: - type: Transform rot: 1.5707963267948966 rad pos: 43.5,-14.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4826 components: - type: Transform pos: 33.5,-15.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5230 components: - type: Transform rot: 1.5707963267948966 rad pos: 31.5,-55.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5232 components: - type: Transform rot: 1.5707963267948966 rad pos: 38.5,-54.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5235 components: - type: Transform rot: 1.5707963267948966 rad pos: 30.5,-56.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5236 components: - type: Transform rot: 1.5707963267948966 rad pos: 30.5,-57.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5238 components: - type: Transform rot: 1.5707963267948966 rad pos: 31.5,-58.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5239 components: - type: Transform rot: 1.5707963267948966 rad pos: 31.5,-59.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5241 components: - type: Transform rot: 1.5707963267948966 rad pos: 33.5,-60.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5242 components: - type: Transform rot: 1.5707963267948966 rad pos: 32.5,-60.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5244 components: - type: Transform rot: 1.5707963267948966 rad pos: 34.5,-61.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5245 components: - type: Transform rot: 1.5707963267948966 rad pos: 35.5,-61.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5255 components: - type: Transform rot: 1.5707963267948966 rad pos: 36.5,-60.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5256 components: - type: Transform rot: 1.5707963267948966 rad pos: 37.5,-60.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5258 components: - type: Transform rot: 1.5707963267948966 rad pos: 38.5,-58.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5259 components: - type: Transform rot: 1.5707963267948966 rad pos: 38.5,-59.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5262 components: - type: Transform rot: 1.5707963267948966 rad pos: 39.5,-57.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5264 components: - type: Transform rot: 1.5707963267948966 rad pos: 39.5,-56.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5266 components: - type: Transform rot: 1.5707963267948966 rad pos: 38.5,-55.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5317 components: - type: Transform rot: 1.5707963267948966 rad pos: 32.5,-52.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5318 components: - type: Transform rot: 1.5707963267948966 rad pos: 32.5,-50.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5319 components: - type: Transform rot: 1.5707963267948966 rad pos: 32.5,-48.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5320 components: - type: Transform rot: 1.5707963267948966 rad pos: 37.5,-48.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5321 components: - type: Transform rot: 1.5707963267948966 rad pos: 37.5,-50.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5322 components: - type: Transform rot: 1.5707963267948966 rad pos: 37.5,-52.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5380 components: - type: Transform rot: 1.5707963267948966 rad pos: 39.5,-17.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6103 components: - type: Transform pos: 44.5,2.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6104 components: - type: Transform pos: 50.5,2.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6105 components: - type: Transform pos: 48.5,2.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6106 components: - type: Transform pos: 47.5,2.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6107 components: - type: Transform pos: 46.5,2.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6354 components: - type: Transform rot: -1.5707963267948966 rad pos: -3.5,30.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6355 components: - type: Transform rot: -1.5707963267948966 rad pos: -4.5,30.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6356 components: - type: Transform rot: -1.5707963267948966 rad pos: -5.5,30.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6357 components: - type: Transform rot: -1.5707963267948966 rad pos: -7.5,30.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6358 components: - type: Transform rot: -1.5707963267948966 rad pos: -8.5,30.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6359 components: - type: Transform rot: -1.5707963267948966 rad pos: -9.5,30.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6360 components: - type: Transform rot: -1.5707963267948966 rad pos: -11.5,30.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6361 components: - type: Transform rot: -1.5707963267948966 rad pos: -12.5,30.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6362 components: - type: Transform rot: -1.5707963267948966 rad pos: -13.5,30.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6364 components: - type: Transform pos: -14.5,28.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6589 components: - type: Transform rot: 1.5707963267948966 rad pos: 2.5,44.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6590 components: - type: Transform rot: 1.5707963267948966 rad pos: 2.5,43.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6591 components: - type: Transform rot: 1.5707963267948966 rad pos: 2.5,42.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6592 components: - type: Transform rot: 1.5707963267948966 rad pos: 2.5,41.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6593 components: - type: Transform rot: 1.5707963267948966 rad pos: 2.5,40.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6594 components: - type: Transform rot: 1.5707963267948966 rad pos: 6.5,41.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6595 components: - type: Transform rot: 1.5707963267948966 rad pos: 6.5,43.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6821 components: - type: Transform pos: 33.5,51.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6822 components: - type: Transform pos: 34.5,51.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6823 components: - type: Transform pos: 35.5,51.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6824 components: - type: Transform pos: 36.5,51.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6826 components: - type: Transform pos: 40.5,51.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6827 components: - type: Transform pos: 40.5,47.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6848 components: - type: Transform pos: 31.5,54.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6850 components: - type: Transform pos: 27.5,54.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6851 components: - type: Transform pos: 25.5,54.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6854 components: - type: Transform pos: 29.5,54.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6859 components: - type: Transform rot: 3.141592653589793 rad pos: 31.5,51.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6860 components: - type: Transform rot: 3.141592653589793 rad pos: 28.5,51.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7047 components: - type: Transform rot: 1.5707963267948966 rad pos: 16.5,54.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7048 components: - type: Transform rot: 1.5707963267948966 rad pos: 10.5,54.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7049 components: - type: Transform rot: 1.5707963267948966 rad pos: 16.5,53.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7053 components: - type: Transform rot: 1.5707963267948966 rad pos: 11.5,54.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7054 components: - type: Transform rot: 1.5707963267948966 rad pos: 10.5,53.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7061 components: - type: Transform rot: 1.5707963267948966 rad pos: 12.5,54.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7065 components: - type: Transform rot: 1.5707963267948966 rad pos: 13.5,54.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7066 components: - type: Transform rot: 1.5707963267948966 rad pos: 14.5,54.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7067 components: - type: Transform rot: 1.5707963267948966 rad pos: 15.5,54.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7073 components: - type: Transform rot: 1.5707963267948966 rad pos: 9.5,54.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7074 components: - type: Transform rot: 1.5707963267948966 rad pos: 8.5,54.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7075 components: - type: Transform rot: 1.5707963267948966 rad pos: 7.5,54.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7076 components: - type: Transform rot: 1.5707963267948966 rad pos: 17.5,54.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7077 components: - type: Transform rot: 1.5707963267948966 rad pos: 18.5,54.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7078 components: - type: Transform rot: 1.5707963267948966 rad pos: 19.5,54.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7731 components: - type: Transform rot: 3.141592653589793 rad pos: -1.5,54.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7733 components: - type: Transform rot: 3.141592653589793 rad pos: -0.5,54.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7734 components: - type: Transform rot: 3.141592653589793 rad pos: -2.5,54.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7737 components: - type: Transform rot: 3.141592653589793 rad pos: -7.5,52.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7738 components: - type: Transform rot: 3.141592653589793 rad pos: -8.5,54.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7739 components: - type: Transform rot: 3.141592653589793 rad pos: -9.5,54.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7740 components: - type: Transform rot: 3.141592653589793 rad pos: -10.5,54.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7744 components: - type: Transform rot: 3.141592653589793 rad pos: -7.5,53.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7750 components: - type: Transform rot: 3.141592653589793 rad pos: -3.5,53.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7751 components: - type: Transform rot: 3.141592653589793 rad pos: -3.5,52.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8077 components: - type: Transform pos: -25.5,48.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8078 components: - type: Transform pos: -25.5,49.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8080 components: - type: Transform pos: -25.5,52.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8081 components: - type: Transform pos: -25.5,51.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8083 components: - type: Transform rot: -1.5707963267948966 rad pos: -25.5,45.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8084 components: - type: Transform rot: -1.5707963267948966 rad pos: -25.5,46.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8228 components: - type: Transform rot: 3.141592653589793 rad pos: -27.5,44.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8229 components: - type: Transform rot: 3.141592653589793 rad pos: -28.5,44.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8230 components: - type: Transform rot: 3.141592653589793 rad pos: -31.5,44.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8231 components: - type: Transform rot: 3.141592653589793 rad pos: -32.5,44.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8323 components: - type: Transform rot: 3.141592653589793 rad pos: -37.5,9.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8324 components: - type: Transform rot: 3.141592653589793 rad pos: -37.5,10.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8325 components: - type: Transform rot: 3.141592653589793 rad pos: -37.5,11.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8326 components: - type: Transform rot: 3.141592653589793 rad pos: -37.5,12.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8327 components: - type: Transform rot: 3.141592653589793 rad pos: -37.5,13.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8328 components: - type: Transform rot: 3.141592653589793 rad pos: -37.5,14.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8330 components: - type: Transform rot: 3.141592653589793 rad pos: -37.5,16.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8331 components: - type: Transform rot: 3.141592653589793 rad pos: -37.5,17.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8332 components: - type: Transform rot: 3.141592653589793 rad pos: -37.5,18.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8333 components: - type: Transform rot: 3.141592653589793 rad pos: -37.5,19.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8334 components: - type: Transform rot: 3.141592653589793 rad pos: -37.5,20.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8335 components: - type: Transform rot: 3.141592653589793 rad pos: -37.5,21.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8336 components: - type: Transform rot: 3.141592653589793 rad pos: -37.5,22.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8337 components: - type: Transform rot: 3.141592653589793 rad pos: -37.5,23.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8338 components: - type: Transform rot: 3.141592653589793 rad pos: -37.5,24.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8339 components: - type: Transform rot: 3.141592653589793 rad pos: -37.5,25.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8340 components: - type: Transform rot: 3.141592653589793 rad pos: -37.5,26.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8341 components: - type: Transform rot: 3.141592653589793 rad pos: -37.5,27.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8342 components: - type: Transform rot: 3.141592653589793 rad pos: -37.5,28.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8343 components: - type: Transform rot: 3.141592653589793 rad pos: -37.5,29.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8344 components: - type: Transform rot: 3.141592653589793 rad pos: -37.5,30.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8345 components: - type: Transform rot: 3.141592653589793 rad pos: -37.5,31.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8346 components: - type: Transform rot: 3.141592653589793 rad pos: -37.5,32.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8347 components: - type: Transform rot: 3.141592653589793 rad pos: -37.5,33.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8362 components: - type: Transform rot: 3.141592653589793 rad pos: -34.5,41.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8363 components: - type: Transform rot: 3.141592653589793 rad pos: -34.5,42.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8466 components: - type: Transform pos: -38.5,-48.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8467 components: - type: Transform pos: -40.5,-48.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8468 components: - type: Transform pos: -39.5,-48.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8471 components: - type: Transform pos: -43.5,-45.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8472 components: - type: Transform pos: -43.5,-43.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8473 components: - type: Transform pos: -43.5,-44.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8503 components: - type: Transform rot: 1.5707963267948966 rad pos: 10.5,-27.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8528 components: - type: Transform pos: 5.5,-27.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8677 components: - type: Transform pos: 9.5,-27.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8680 components: - type: Transform rot: 1.5707963267948966 rad pos: 4.5,-27.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8820 components: - type: Transform rot: 3.141592653589793 rad pos: -35.5,34.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8875 components: - type: Transform pos: -17.5,-16.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8876 components: - type: Transform pos: -18.5,-14.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8877 components: - type: Transform pos: -18.5,-11.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8878 components: - type: Transform pos: -18.5,-12.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8968 components: - type: Transform rot: 1.5707963267948966 rad pos: 2.5,-30.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 9200 components: - type: Transform rot: -1.5707963267948966 rad pos: -37.5,15.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 9256 components: - type: Transform rot: 3.141592653589793 rad pos: -36.5,34.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 9333 components: - type: Transform rot: 1.5707963267948966 rad pos: 41.5,-16.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 9526 components: - type: Transform pos: -38.5,-50.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 9528 components: - type: Transform pos: -40.5,-50.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 9529 components: - type: Transform pos: -39.5,-50.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 9530 components: - type: Transform pos: -45.5,-44.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 9531 components: - type: Transform pos: -45.5,-45.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 9532 components: - type: Transform pos: -45.5,-43.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 9615 components: - type: Transform rot: -1.5707963267948966 rad pos: -22.5,24.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 9679 components: - type: Transform rot: 1.5707963267948966 rad pos: 2.5,-31.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 9680 components: - type: Transform rot: 1.5707963267948966 rad pos: 2.5,-29.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 9703 components: - type: Transform pos: 12.5,-29.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 9704 components: - type: Transform pos: 12.5,-30.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 9705 components: - type: Transform pos: 12.5,-31.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 9706 components: - type: Transform pos: 8.5,-32.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 9708 components: - type: Transform pos: 6.5,-32.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 9714 components: - type: Transform pos: 10.5,-29.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 9716 components: - type: Transform rot: -1.5707963267948966 rad pos: 9.5,-29.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 9717 components: - type: Transform rot: -1.5707963267948966 rad pos: 5.5,-29.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 9719 components: - type: Transform pos: 4.5,-29.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 9720 components: - type: Transform pos: 4.5,-30.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 9721 components: - type: Transform pos: 4.5,-31.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 9722 components: - type: Transform pos: 10.5,-30.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 9723 components: - type: Transform pos: 10.5,-31.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 9744 components: - type: Transform rot: 1.5707963267948966 rad pos: 44.5,-14.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 9800 components: - type: Transform rot: 1.5707963267948966 rad pos: 45.5,-14.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 9890 components: - type: Transform rot: 3.141592653589793 rad pos: 14.5,-32.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 9924 components: - type: Transform pos: 40.5,-23.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10216 components: - type: Transform rot: -1.5707963267948966 rad pos: 46.5,-46.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10237 components: - type: Transform rot: -1.5707963267948966 rad pos: -14.5,-46.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10238 components: - type: Transform rot: -1.5707963267948966 rad pos: -14.5,-47.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10239 components: - type: Transform rot: -1.5707963267948966 rad pos: -14.5,-48.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10240 components: - type: Transform rot: -1.5707963267948966 rad pos: -14.5,-49.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10241 components: - type: Transform rot: -1.5707963267948966 rad pos: -14.5,-50.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10242 components: - type: Transform pos: 42.5,-23.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10300 components: - type: Transform rot: -1.5707963267948966 rad pos: 22.5,-51.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10302 components: - type: Transform rot: -1.5707963267948966 rad pos: 23.5,-52.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10303 components: - type: Transform rot: -1.5707963267948966 rad pos: 24.5,-52.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10304 components: - type: Transform rot: -1.5707963267948966 rad pos: 25.5,-51.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10305 components: - type: Transform rot: -1.5707963267948966 rad pos: 25.5,-49.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10310 components: - type: Transform rot: -1.5707963267948966 rad pos: 22.5,-50.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10311 components: - type: Transform rot: -1.5707963267948966 rad pos: 22.5,-48.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10313 components: - type: Transform pos: 19.5,-51.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10314 components: - type: Transform pos: 19.5,-50.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10315 components: - type: Transform pos: 19.5,-49.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10316 components: - type: Transform pos: 19.5,-48.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10669 components: - type: Transform pos: 5.5,-60.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10671 components: - type: Transform pos: 5.5,-59.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10674 components: - type: Transform pos: 5.5,-61.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10675 components: - type: Transform pos: 5.5,-62.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10687 components: - type: Transform pos: -6.5,-63.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10689 components: - type: Transform pos: -5.5,-63.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10693 components: - type: Transform pos: -4.5,-63.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10694 components: - type: Transform pos: -3.5,-63.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10696 components: - type: Transform pos: -1.5,-63.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10697 components: - type: Transform pos: -0.5,-63.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10698 components: - type: Transform pos: 0.5,-63.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10699 components: - type: Transform pos: 1.5,-63.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10700 components: - type: Transform pos: -7.5,-64.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10701 components: - type: Transform pos: -7.5,-65.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10702 components: - type: Transform pos: -7.5,-66.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10703 components: - type: Transform pos: 2.5,-64.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10704 components: - type: Transform pos: 2.5,-65.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10705 components: - type: Transform pos: 2.5,-66.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10706 components: - type: Transform pos: 2.5,-70.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10707 components: - type: Transform pos: 2.5,-71.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10708 components: - type: Transform pos: 2.5,-72.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10709 components: - type: Transform pos: 2.5,-73.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10710 components: - type: Transform pos: -7.5,-70.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10711 components: - type: Transform pos: -7.5,-71.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10712 components: - type: Transform pos: -7.5,-72.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10713 components: - type: Transform pos: -7.5,-73.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10714 components: - type: Transform pos: -7.5,-77.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10715 components: - type: Transform pos: -7.5,-78.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10717 components: - type: Transform pos: 2.5,-77.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10718 components: - type: Transform pos: 2.5,-78.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10732 components: - type: Transform rot: 1.5707963267948966 rad pos: -9.5,-83.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10733 components: - type: Transform rot: 1.5707963267948966 rad pos: -8.5,-83.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10734 components: - type: Transform rot: 1.5707963267948966 rad pos: -7.5,-82.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10735 components: - type: Transform rot: 1.5707963267948966 rad pos: -7.5,-81.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10736 components: - type: Transform rot: 1.5707963267948966 rad pos: -7.5,-80.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10737 components: - type: Transform rot: 1.5707963267948966 rad pos: 2.5,-80.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10738 components: - type: Transform rot: 1.5707963267948966 rad pos: 2.5,-81.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10739 components: - type: Transform rot: 1.5707963267948966 rad pos: 2.5,-82.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10740 components: - type: Transform rot: 1.5707963267948966 rad pos: 3.5,-83.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10741 components: - type: Transform rot: 1.5707963267948966 rad pos: 4.5,-83.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10764 components: - type: Transform rot: 1.5707963267948966 rad pos: -11.5,-67.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10765 components: - type: Transform rot: 1.5707963267948966 rad pos: -11.5,-68.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10766 components: - type: Transform rot: 1.5707963267948966 rad pos: -11.5,-69.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10767 components: - type: Transform rot: 1.5707963267948966 rad pos: -10.5,-64.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10768 components: - type: Transform rot: 1.5707963267948966 rad pos: -10.5,-65.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10769 components: - type: Transform rot: 1.5707963267948966 rad pos: -10.5,-71.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10770 components: - type: Transform rot: 1.5707963267948966 rad pos: -10.5,-72.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10771 components: - type: Transform rot: 1.5707963267948966 rad pos: -11.5,-74.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10772 components: - type: Transform rot: 1.5707963267948966 rad pos: -11.5,-75.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10773 components: - type: Transform rot: 1.5707963267948966 rad pos: -11.5,-76.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10774 components: - type: Transform rot: 1.5707963267948966 rad pos: 6.5,-76.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10775 components: - type: Transform rot: 1.5707963267948966 rad pos: 6.5,-75.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10776 components: - type: Transform rot: 1.5707963267948966 rad pos: 6.5,-74.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10777 components: - type: Transform rot: 1.5707963267948966 rad pos: 5.5,-78.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10778 components: - type: Transform rot: 1.5707963267948966 rad pos: -10.5,-78.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10779 components: - type: Transform rot: 1.5707963267948966 rad pos: 5.5,-72.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10780 components: - type: Transform rot: 1.5707963267948966 rad pos: 5.5,-71.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10781 components: - type: Transform rot: 1.5707963267948966 rad pos: 6.5,-69.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10782 components: - type: Transform rot: 1.5707963267948966 rad pos: 6.5,-68.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10783 components: - type: Transform rot: 1.5707963267948966 rad pos: 6.5,-67.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10784 components: - type: Transform rot: 1.5707963267948966 rad pos: 5.5,-65.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10785 components: - type: Transform rot: 1.5707963267948966 rad pos: 5.5,-64.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10793 components: - type: Transform rot: -1.5707963267948966 rad pos: -46.5,4.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10794 components: - type: Transform rot: -1.5707963267948966 rad pos: -45.5,4.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10802 components: - type: Transform pos: -57.5,6.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10809 components: - type: Transform pos: -57.5,9.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10810 components: - type: Transform pos: -54.5,13.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10811 components: - type: Transform pos: -53.5,13.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10818 components: - type: Transform pos: -52.5,13.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10821 components: - type: Transform pos: -49.5,9.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10826 components: - type: Transform rot: 1.5707963267948966 rad pos: -58.5,1.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10827 components: - type: Transform rot: 1.5707963267948966 rad pos: -58.5,2.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10834 components: - type: Transform pos: -60.5,-0.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10842 components: - type: Transform rot: 1.5707963267948966 rad pos: -58.5,-11.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10847 components: - type: Transform rot: 1.5707963267948966 rad pos: -58.5,-12.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10854 components: - type: Transform pos: -58.5,-25.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10856 components: - type: Transform pos: -58.5,-27.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10858 components: - type: Transform pos: -58.5,-29.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10863 components: - type: Transform rot: 1.5707963267948966 rad pos: -57.5,-39.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10865 components: - type: Transform rot: 1.5707963267948966 rad pos: -57.5,-38.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10868 components: - type: Transform rot: 1.5707963267948966 rad pos: -57.5,-35.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10869 components: - type: Transform rot: 1.5707963267948966 rad pos: -57.5,-33.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10902 components: - type: Transform rot: -1.5707963267948966 rad pos: -40.5,-55.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10903 components: - type: Transform rot: -1.5707963267948966 rad pos: -38.5,-55.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10904 components: - type: Transform rot: -1.5707963267948966 rad pos: -39.5,-55.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10916 components: - type: Transform rot: -1.5707963267948966 rad pos: -24.5,-55.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10917 components: - type: Transform rot: -1.5707963267948966 rad pos: -26.5,-55.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10918 components: - type: Transform rot: -1.5707963267948966 rad pos: -25.5,-55.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 11033 components: - type: Transform rot: 3.141592653589793 rad pos: 34.5,-10.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 11323 components: - type: Transform pos: -59.5,-0.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 11326 components: - type: Transform pos: -59.5,-6.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 11329 components: - type: Transform pos: -59.5,-3.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 11342 components: - type: Transform rot: 1.5707963267948966 rad pos: -58.5,-14.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 11373 components: - type: Transform rot: -1.5707963267948966 rad pos: -59.5,-20.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 11469 components: - type: Transform rot: -1.5707963267948966 rad pos: -43.5,-23.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 11470 components: - type: Transform rot: -1.5707963267948966 rad pos: -45.5,-23.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 11473 components: - type: Transform rot: -1.5707963267948966 rad pos: -44.5,-22.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 11474 components: - type: Transform rot: -1.5707963267948966 rad pos: -44.5,-19.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 11475 components: - type: Transform rot: -1.5707963267948966 rad pos: -43.5,-18.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 11476 components: - type: Transform rot: -1.5707963267948966 rad pos: -45.5,-18.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 11515 components: - type: Transform pos: -4.5,27.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 11517 components: - type: Transform pos: -5.5,27.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 11518 components: - type: Transform pos: -7.5,27.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 11976 components: - type: Transform pos: -8.5,27.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 11977 components: - type: Transform pos: -10.5,27.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 12269 components: - type: Transform pos: -11.5,27.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 12521 components: - type: Transform rot: -1.5707963267948966 rad pos: -17.5,-57.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 12531 components: - type: Transform rot: -1.5707963267948966 rad pos: -19.5,-57.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 12744 components: - type: Transform rot: 1.5707963267948966 rad pos: 54.5,30.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 12752 components: - type: Transform rot: 1.5707963267948966 rad pos: 54.5,29.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 12845 components: - type: Transform rot: 1.5707963267948966 rad pos: -12.5,-83.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 12846 components: - type: Transform rot: 1.5707963267948966 rad pos: 7.5,-83.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 12988 components: - type: Transform rot: 1.5707963267948966 rad pos: 65.5,-2.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 13074 components: - type: Transform rot: 1.5707963267948966 rad pos: 66.5,5.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 13075 components: - type: Transform rot: 1.5707963267948966 rad pos: 65.5,5.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 13079 components: - type: Transform rot: -1.5707963267948966 rad pos: 64.5,-6.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 13087 components: - type: Transform rot: -1.5707963267948966 rad pos: 66.5,-6.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 13088 components: - type: Transform rot: 1.5707963267948966 rad pos: 63.5,-1.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 13089 components: - type: Transform rot: -1.5707963267948966 rad pos: 65.5,-6.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 13090 components: - type: Transform rot: 1.5707963267948966 rad pos: 65.5,-1.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 13092 components: - type: Transform rot: 1.5707963267948966 rad pos: 62.5,1.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 13093 components: - type: Transform rot: 1.5707963267948966 rad pos: 63.5,1.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 13094 components: - type: Transform rot: 1.5707963267948966 rad pos: 64.5,1.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 13095 components: - type: Transform rot: 1.5707963267948966 rad pos: 65.5,1.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 13096 components: - type: Transform rot: 1.5707963267948966 rad pos: 66.5,1.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 13097 components: - type: Transform rot: 1.5707963267948966 rad pos: 63.5,0.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 13098 components: - type: Transform rot: 1.5707963267948966 rad pos: 63.5,-0.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 13099 components: - type: Transform rot: 1.5707963267948966 rad pos: 65.5,0.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 13100 components: - type: Transform rot: 1.5707963267948966 rad pos: 65.5,-0.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 14240 components: - type: Transform rot: 3.141592653589793 rad pos: 39.5,-20.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 14256 components: - type: Transform rot: 1.5707963267948966 rad pos: 40.5,-17.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 14301 components: - type: Transform pos: 33.5,-14.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 14309 components: - type: Transform rot: 3.141592653589793 rad pos: 34.5,-11.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 14395 components: - type: Transform rot: 3.141592653589793 rad pos: 42.5,-20.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 14994 components: - type: Transform rot: 1.5707963267948966 rad pos: -52.5,-45.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 15004 components: - type: Transform rot: 1.5707963267948966 rad pos: -54.5,-43.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 15455 components: - type: Transform rot: 1.5707963267948966 rad pos: 41.5,-15.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 15464 components: - type: Transform pos: 42.5,-1.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 15468 components: - type: Transform pos: 47.5,-3.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 15498 components: - type: Transform rot: -1.5707963267948966 rad pos: 63.5,-6.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 15499 components: - type: Transform rot: 1.5707963267948966 rad pos: 63.5,-2.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 15500 components: - type: Transform rot: 1.5707963267948966 rad pos: 64.5,-2.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 15501 components: - type: Transform rot: 1.5707963267948966 rad pos: 66.5,-2.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 16102 components: - type: Transform rot: 1.5707963267948966 rad pos: 7.5,-79.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 16513 components: - type: Transform rot: 1.5707963267948966 rad pos: -11.5,-79.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 17296 components: - type: Transform rot: 3.141592653589793 rad pos: 38.5,-7.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 17853 components: - type: Transform rot: 3.141592653589793 rad pos: -54.5,4.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 18148 components: - type: Transform pos: 43.5,-2.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 18360 components: - type: Transform pos: 45.5,-3.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 19189 components: - type: Transform rot: -1.5707963267948966 rad pos: 43.5,-48.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 19483 components: - type: Transform pos: -50.5,-53.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 19485 components: - type: Transform pos: -50.5,-52.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 19537 components: - type: Transform pos: -47.5,-56.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 19958 components: - type: Transform rot: -1.5707963267948966 rad pos: 41.5,-47.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 19967 components: - type: Transform rot: -1.5707963267948966 rad pos: 43.5,-44.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 19968 components: - type: Transform rot: -1.5707963267948966 rad pos: 45.5,-44.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 19972 components: - type: Transform rot: -1.5707963267948966 rad pos: 45.5,-48.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 19989 components: - type: Transform rot: 1.5707963267948966 rad pos: 6.5,-83.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 19990 components: - type: Transform rot: 1.5707963267948966 rad pos: 6.5,-79.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 19991 components: - type: Transform rot: 1.5707963267948966 rad pos: -11.5,-83.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 19992 components: - type: Transform rot: 1.5707963267948966 rad pos: -12.5,-79.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 20257 components: - type: Transform rot: 1.5707963267948966 rad pos: 49.5,31.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 20263 components: - type: Transform rot: 1.5707963267948966 rad pos: 51.5,31.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 20268 components: - type: Transform rot: 1.5707963267948966 rad pos: 48.5,31.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 20387 components: - type: Transform rot: 1.5707963267948966 rad pos: 50.5,31.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 20662 components: - type: Transform pos: -47.5,6.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 21013 components: - type: Transform pos: -2.5,-2.5 parent: 21002 + - type: DeltaPressure + gridUid: 21002 - uid: 21014 components: - type: Transform pos: -2.5,1.5 parent: 21002 + - type: DeltaPressure + gridUid: 21002 - uid: 21040 components: - type: Transform rot: -1.5707963267948966 rad pos: 0.5,-2.5 parent: 21002 + - type: DeltaPressure + gridUid: 21002 - uid: 21041 components: - type: Transform rot: -1.5707963267948966 rad pos: 0.5,-0.5 parent: 21002 + - type: DeltaPressure + gridUid: 21002 - uid: 21042 components: - type: Transform rot: -1.5707963267948966 rad pos: 0.5,1.5 parent: 21002 + - type: DeltaPressure + gridUid: 21002 - uid: 21046 components: - type: Transform pos: 0.5,4.5 parent: 21002 + - type: DeltaPressure + gridUid: 21002 - uid: 21065 components: - type: Transform rot: -1.5707963267948966 rad pos: 6.5,-0.5 parent: 21002 + - type: DeltaPressure + gridUid: 21002 - uid: 21066 components: - type: Transform rot: -1.5707963267948966 rad pos: 7.5,-0.5 parent: 21002 + - type: DeltaPressure + gridUid: 21002 - uid: 21187 components: - type: Transform pos: 0.5,5.5 parent: 21002 + - type: DeltaPressure + gridUid: 21002 - uid: 21188 components: - type: Transform pos: 0.5,6.5 parent: 21002 + - type: DeltaPressure + gridUid: 21002 - uid: 21189 components: - type: Transform pos: 0.5,7.5 parent: 21002 + - type: DeltaPressure + gridUid: 21002 - uid: 21190 components: - type: Transform pos: 0.5,8.5 parent: 21002 + - type: DeltaPressure + gridUid: 21002 - uid: 21191 components: - type: Transform pos: 0.5,9.5 parent: 21002 + - type: DeltaPressure + gridUid: 21002 - uid: 21192 components: - type: Transform pos: 1.5,9.5 parent: 21002 + - type: DeltaPressure + gridUid: 21002 - uid: 21193 components: - type: Transform pos: 2.5,9.5 parent: 21002 + - type: DeltaPressure + gridUid: 21002 - uid: 21194 components: - type: Transform pos: 3.5,9.5 parent: 21002 + - type: DeltaPressure + gridUid: 21002 - uid: 21195 components: - type: Transform pos: 3.5,10.5 parent: 21002 + - type: DeltaPressure + gridUid: 21002 - uid: 21196 components: - type: Transform pos: 4.5,10.5 parent: 21002 + - type: DeltaPressure + gridUid: 21002 - uid: 21197 components: - type: Transform pos: 5.5,10.5 parent: 21002 + - type: DeltaPressure + gridUid: 21002 - uid: 21198 components: - type: Transform pos: 6.5,10.5 parent: 21002 + - type: DeltaPressure + gridUid: 21002 - uid: 21236 components: - type: Transform pos: 19.5,-10.5 parent: 21002 + - type: DeltaPressure + gridUid: 21002 - uid: 21237 components: - type: Transform pos: 18.5,-10.5 parent: 21002 + - type: DeltaPressure + gridUid: 21002 - uid: 21238 components: - type: Transform pos: 17.5,-10.5 parent: 21002 + - type: DeltaPressure + gridUid: 21002 - uid: 21239 components: - type: Transform pos: 17.5,-11.5 parent: 21002 + - type: DeltaPressure + gridUid: 21002 - uid: 21240 components: - type: Transform pos: 16.5,-11.5 parent: 21002 + - type: DeltaPressure + gridUid: 21002 - uid: 21241 components: - type: Transform pos: 15.5,-11.5 parent: 21002 + - type: DeltaPressure + gridUid: 21002 - uid: 21242 components: - type: Transform pos: 14.5,-11.5 parent: 21002 + - type: DeltaPressure + gridUid: 21002 - uid: 21243 components: - type: Transform pos: 13.5,-11.5 parent: 21002 + - type: DeltaPressure + gridUid: 21002 - uid: 21244 components: - type: Transform pos: 13.5,-12.5 parent: 21002 + - type: DeltaPressure + gridUid: 21002 - uid: 21245 components: - type: Transform pos: 12.5,-12.5 parent: 21002 + - type: DeltaPressure + gridUid: 21002 - uid: 21246 components: - type: Transform pos: 11.5,-12.5 parent: 21002 + - type: DeltaPressure + gridUid: 21002 - uid: 21247 components: - type: Transform pos: 10.5,-12.5 parent: 21002 + - type: DeltaPressure + gridUid: 21002 - uid: 21346 components: - type: Transform pos: 24.5,0.5 parent: 21002 + - type: DeltaPressure + gridUid: 21002 - uid: 21508 components: - type: Transform pos: 26.5,-0.5 parent: 21002 + - type: DeltaPressure + gridUid: 21002 - uid: 22876 components: - type: Transform rot: -1.5707963267948966 rad pos: 20.5,-10.5 parent: 21002 + - type: DeltaPressure + gridUid: 21002 - uid: 23238 components: - type: Transform rot: 1.5707963267948966 rad pos: -58.5,-13.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 23436 components: - type: Transform rot: 3.141592653589793 rad pos: 38.5,-3.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 23639 components: - type: Transform rot: -1.5707963267948966 rad pos: -22.5,28.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 24137 components: - type: Transform rot: 3.141592653589793 rad pos: -52.5,4.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 24156 components: - type: Transform pos: -18.5,-13.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 24269 components: - type: Transform pos: -34.5,37.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 24270 components: - type: Transform pos: -34.5,35.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 24271 components: - type: Transform rot: -1.5707963267948966 rad pos: 17.5,-52.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 24272 components: - type: Transform rot: -1.5707963267948966 rad pos: 18.5,-52.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 24580 components: - type: Transform pos: 16.5,-43.5 parent: 21002 + - type: DeltaPressure + gridUid: 21002 - uid: 24581 components: - type: Transform pos: 16.5,-44.5 parent: 21002 + - type: DeltaPressure + gridUid: 21002 - uid: 24582 components: - type: Transform pos: 16.5,-45.5 parent: 21002 + - type: DeltaPressure + gridUid: 21002 - uid: 24583 components: - type: Transform pos: 18.5,-41.5 parent: 21002 + - type: DeltaPressure + gridUid: 21002 - uid: 24584 components: - type: Transform pos: 19.5,-41.5 parent: 21002 + - type: DeltaPressure + gridUid: 21002 - uid: 24585 components: - type: Transform pos: 19.5,-47.5 parent: 21002 + - type: DeltaPressure + gridUid: 21002 - uid: 24586 components: - type: Transform pos: 18.5,-47.5 parent: 21002 + - type: DeltaPressure + gridUid: 21002 - uid: 24587 components: - type: Transform pos: -7.5,14.5 parent: 21002 + - type: DeltaPressure + gridUid: 21002 - uid: 24588 components: - type: Transform pos: -6.5,14.5 parent: 21002 + - type: DeltaPressure + gridUid: 21002 - uid: 24589 components: - type: Transform pos: -5.5,14.5 parent: 21002 + - type: DeltaPressure + gridUid: 21002 - uid: 24590 components: - type: Transform pos: -3.5,16.5 parent: 21002 + - type: DeltaPressure + gridUid: 21002 - uid: 24591 components: - type: Transform pos: -3.5,17.5 parent: 21002 + - type: DeltaPressure + gridUid: 21002 - uid: 24592 components: - type: Transform pos: -9.5,16.5 parent: 21002 + - type: DeltaPressure + gridUid: 21002 - uid: 24593 components: - type: Transform pos: -9.5,17.5 parent: 21002 + - type: DeltaPressure + gridUid: 21002 - uid: 26708 components: - type: Transform pos: 24.5,4.5 parent: 21002 + - type: DeltaPressure + gridUid: 21002 - uid: 26718 components: - type: Transform pos: 26.5,5.5 parent: 21002 + - type: DeltaPressure + gridUid: 21002 - uid: 28360 components: - type: Transform pos: 41.5,-1.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 28440 components: - type: Transform rot: -1.5707963267948966 rad pos: -22.5,23.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 28496 components: - type: Transform rot: -1.5707963267948966 rad pos: -22.5,29.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 28523 components: - type: Transform rot: -1.5707963267948966 rad pos: 39.5,-1.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 28614 components: - type: Transform pos: 46.5,-3.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 29299 components: - type: Transform pos: 37.5,51.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 29597 components: - type: Transform rot: 1.5707963267948966 rad pos: 42.5,-14.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - proto: ReinforcedWindowDiagonal entities: - uid: 3360 @@ -167002,6 +168004,8 @@ entities: rot: 3.141592653589793 rad pos: 46.5,-19.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - proto: RemoteSignaller entities: - uid: 1858 @@ -167926,73 +168930,99 @@ entities: rot: 1.5707963267948966 rad pos: -1.5,-43.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7794 components: - type: Transform rot: 1.5707963267948966 rad pos: -1.5,-42.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10164 components: - type: Transform rot: 1.5707963267948966 rad pos: -1.5,-44.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 11982 components: - type: Transform pos: 20.5,-1.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 12261 components: - type: Transform rot: -1.5707963267948966 rad pos: 34.5,15.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 12830 components: - type: Transform rot: -1.5707963267948966 rad pos: 34.5,12.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 16922 components: - type: Transform pos: -10.5,-24.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 17256 components: - type: Transform pos: -11.5,-24.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 18581 components: - type: Transform pos: 21.5,-1.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 20831 components: - type: Transform pos: 19.5,-1.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 28326 components: - type: Transform rot: -1.5707963267948966 rad pos: -28.5,-40.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 28407 components: - type: Transform rot: -1.5707963267948966 rad pos: -28.5,-39.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 29923 components: - type: Transform rot: -1.5707963267948966 rad pos: -28.5,-38.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - proto: ShuttersNormalOpen entities: - uid: 920 @@ -168001,6 +169031,8 @@ entities: rot: -1.5707963267948966 rad pos: 18.5,-11.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - type: DeviceLinkSink invokeCounter: 1 - uid: 921 @@ -168009,6 +169041,8 @@ entities: rot: -1.5707963267948966 rad pos: 18.5,-12.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - type: DeviceLinkSink invokeCounter: 1 - uid: 922 @@ -168017,6 +169051,8 @@ entities: rot: -1.5707963267948966 rad pos: 18.5,-13.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - type: DeviceLinkSink invokeCounter: 1 - uid: 923 @@ -168025,6 +169061,8 @@ entities: rot: -1.5707963267948966 rad pos: 18.5,-14.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - type: DeviceLinkSink invokeCounter: 1 - uid: 924 @@ -168033,371 +169071,503 @@ entities: rot: 3.141592653589793 rad pos: 15.5,-17.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 925 components: - type: Transform rot: 3.141592653589793 rad pos: 14.5,-17.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 926 components: - type: Transform rot: 3.141592653589793 rad pos: 13.5,-17.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 927 components: - type: Transform rot: 3.141592653589793 rad pos: 12.5,-17.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1125 components: - type: Transform pos: -24.5,-33.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2365 components: - type: Transform rot: -1.5707963267948966 rad pos: 18.5,4.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2366 components: - type: Transform rot: -1.5707963267948966 rad pos: 18.5,5.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2367 components: - type: Transform rot: -1.5707963267948966 rad pos: 18.5,6.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2368 components: - type: Transform rot: -1.5707963267948966 rad pos: 18.5,7.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2369 components: - type: Transform rot: -1.5707963267948966 rad pos: 18.5,8.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2370 components: - type: Transform rot: -1.5707963267948966 rad pos: 18.5,9.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2600 components: - type: Transform pos: 29.5,17.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2601 components: - type: Transform pos: 32.5,17.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2602 components: - type: Transform rot: 1.5707963267948966 rad pos: 27.5,15.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2603 components: - type: Transform rot: 1.5707963267948966 rad pos: 27.5,12.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 3293 components: - type: Transform pos: 40.5,24.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 3529 components: - type: Transform pos: 21.5,2.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 3530 components: - type: Transform pos: 23.5,2.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 3531 components: - type: Transform pos: 25.5,2.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 3799 components: - type: Transform rot: 1.5707963267948966 rad pos: 42.5,22.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4035 components: - type: Transform rot: 1.5707963267948966 rad pos: -47.5,6.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4178 components: - type: Transform pos: 45.5,-3.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5217 components: - type: Transform pos: 40.5,24.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5584 components: - type: Transform pos: -31.5,-33.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5585 components: - type: Transform pos: -30.5,-33.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5586 components: - type: Transform pos: -29.5,-33.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5742 components: - type: Transform rot: -1.5707963267948966 rad pos: 27.5,21.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6226 components: - type: Transform pos: -26.5,-33.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6394 components: - type: Transform pos: 31.5,34.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6395 components: - type: Transform pos: 33.5,34.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6480 components: - type: Transform pos: 35.5,34.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6576 components: - type: Transform pos: -25.5,-33.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6606 components: - type: Transform rot: -1.5707963267948966 rad pos: 2.5,40.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6607 components: - type: Transform rot: -1.5707963267948966 rad pos: 2.5,41.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6608 components: - type: Transform rot: -1.5707963267948966 rad pos: 2.5,42.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6609 components: - type: Transform rot: -1.5707963267948966 rad pos: 2.5,43.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6610 components: - type: Transform rot: -1.5707963267948966 rad pos: 2.5,44.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6614 components: - type: Transform rot: 1.5707963267948966 rad pos: 6.5,43.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6615 components: - type: Transform rot: 1.5707963267948966 rad pos: 6.5,41.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7860 components: - type: Transform rot: 1.5707963267948966 rad pos: -10.5,31.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7861 components: - type: Transform rot: 1.5707963267948966 rad pos: -10.5,32.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7862 components: - type: Transform rot: 1.5707963267948966 rad pos: -10.5,33.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8941 components: - type: Transform pos: -23.5,-33.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 11301 components: - type: Transform rot: -1.5707963267948966 rad pos: -57.5,6.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 11302 components: - type: Transform rot: -1.5707963267948966 rad pos: -57.5,9.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 11303 components: - type: Transform rot: 3.141592653589793 rad pos: -54.5,13.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 11304 components: - type: Transform rot: 3.141592653589793 rad pos: -53.5,13.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 11305 components: - type: Transform rot: 3.141592653589793 rad pos: -52.5,13.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 11306 components: - type: Transform rot: 1.5707963267948966 rad pos: -49.5,9.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 11554 components: - type: Transform rot: 1.5707963267948966 rad pos: -51.5,-3.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 11555 components: - type: Transform rot: 1.5707963267948966 rad pos: -51.5,-2.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 14251 components: - type: Transform pos: 44.5,-3.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 14308 components: - type: Transform pos: 44.5,-9.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 14391 components: - type: Transform pos: 47.5,-3.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 17900 components: - type: Transform rot: 1.5707963267948966 rad pos: -51.5,2.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 23782 components: - type: Transform pos: 42.5,-9.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 24134 components: - type: Transform rot: 1.5707963267948966 rad pos: -47.5,0.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 24135 components: - type: Transform rot: 1.5707963267948966 rad pos: -47.5,1.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 24136 components: - type: Transform rot: 1.5707963267948966 rad pos: -47.5,-4.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 24140 components: - type: Transform pos: -54.5,4.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 24142 components: - type: Transform pos: -52.5,4.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 24145 components: - type: Transform rot: 1.5707963267948966 rad pos: -47.5,2.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 24147 components: - type: Transform rot: 1.5707963267948966 rad pos: -47.5,3.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 28308 components: - type: Transform pos: 46.5,-3.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 28362 components: - type: Transform rot: 1.5707963267948966 rad pos: -47.5,-0.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 28363 components: - type: Transform rot: 1.5707963267948966 rad pos: -47.5,-0.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - proto: ShuttersRadiation entities: - uid: 7999 @@ -168406,12 +169576,16 @@ entities: rot: -1.5707963267948966 rad pos: 10.5,49.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8000 components: - type: Transform rot: 1.5707963267948966 rad pos: 16.5,49.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - proto: ShuttersRadiationOpen entities: - uid: 9766 @@ -168420,60 +169594,80 @@ entities: rot: 1.5707963267948966 rad pos: 12.5,-31.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 9767 components: - type: Transform rot: 1.5707963267948966 rad pos: 12.5,-30.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 9768 components: - type: Transform rot: 1.5707963267948966 rad pos: 12.5,-29.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 9769 components: - type: Transform rot: -1.5707963267948966 rad pos: 2.5,-31.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 9770 components: - type: Transform rot: -1.5707963267948966 rad pos: 2.5,-30.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 9771 components: - type: Transform rot: -1.5707963267948966 rad pos: 2.5,-29.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 9772 components: - type: Transform rot: 3.141592653589793 rad pos: 9.5,-27.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 9773 components: - type: Transform rot: 3.141592653589793 rad pos: 5.5,-27.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 9854 components: - type: Transform rot: 3.141592653589793 rad pos: 10.5,-27.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 9855 components: - type: Transform rot: 3.141592653589793 rad pos: 4.5,-27.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - proto: ShuttersWindow entities: - uid: 10589 @@ -168482,53 +169676,71 @@ entities: rot: -1.5707963267948966 rad pos: 2.5,-52.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10590 components: - type: Transform rot: -1.5707963267948966 rad pos: 2.5,-53.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10591 components: - type: Transform rot: -1.5707963267948966 rad pos: 2.5,-54.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 12955 components: - type: Transform rot: -1.5707963267948966 rad pos: 62.5,8.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 12956 components: - type: Transform rot: -1.5707963267948966 rad pos: 62.5,9.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 20213 components: - type: Transform rot: -1.5707963267948966 rad pos: 62.5,10.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 29469 components: - type: Transform rot: -1.5707963267948966 rad pos: 62.5,7.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 29484 components: - type: Transform rot: -1.5707963267948966 rad pos: 62.5,11.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 29526 components: - type: Transform pos: -60.5,-18.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - type: DeviceLinkSource linkedPorts: 29522: @@ -168539,6 +169751,8 @@ entities: - type: Transform pos: -59.5,-18.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - type: DeviceLinkSource linkedPorts: 29522: @@ -168552,66 +169766,90 @@ entities: rot: 1.5707963267948966 rad pos: -17.5,6.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1501 components: - type: Transform rot: 1.5707963267948966 rad pos: -17.5,5.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1502 components: - type: Transform rot: 1.5707963267948966 rad pos: -17.5,4.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1619 components: - type: Transform rot: 1.5707963267948966 rad pos: -17.5,7.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1620 components: - type: Transform rot: 1.5707963267948966 rad pos: -17.5,8.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1621 components: - type: Transform rot: 1.5707963267948966 rad pos: -17.5,9.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1622 components: - type: Transform pos: -8.5,18.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1623 components: - type: Transform pos: -7.5,18.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1624 components: - type: Transform pos: -6.5,18.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1625 components: - type: Transform pos: -5.5,18.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1626 components: - type: Transform pos: -4.5,18.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1627 components: - type: Transform pos: -3.5,18.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - proto: ShuttleConsoleCircuitboard entities: - uid: 9463 @@ -172013,6 +173251,12 @@ entities: - type: Transform pos: -32.5,-17.5 parent: 2 + - type: Construction + containers: + - machine_parts + - machine_board + - smart_fridge_inventory + - entity_storage - type: ContainerContainer containers: smart_fridge_inventory: !type:Container @@ -172023,23 +173267,21 @@ entities: showEnts: False occludes: True ents: [] + machine_board: !type:Container + showEnts: False + occludes: True + ents: [] + machine_parts: !type:Container + showEnts: False + occludes: True + ents: [] - type: EntityStorage air: volume: 200 temperature: 293.14673 moles: - - 1.7459903 - - 6.568249 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 1.7459903 + Nitrogen: 6.568249 closeSound: !type:SoundPathSpecifier path: /Audio/Effects/closetclose.ogg openSound: !type:SoundPathSpecifier @@ -176326,18 +177568,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 @@ -176356,18 +177588,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 @@ -176386,18 +177608,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 @@ -176416,18 +177628,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 @@ -176446,18 +177648,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 @@ -176476,18 +177668,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 @@ -202306,19 +203488,7 @@ entities: volume: 200 immutable: False temperature: 98.0039 - moles: - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + moles: {} - type: ContainerContainer containers: entity_storage: !type:Container @@ -203157,36 +204327,48 @@ entities: rot: 3.141592653589793 rad pos: -18.5,-26.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1464 components: - type: Transform rot: 3.141592653589793 rad pos: -21.5,-26.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1465 components: - type: Transform rot: 3.141592653589793 rad pos: -15.5,-26.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 19248 components: - type: Transform rot: 1.5707963267948966 rad pos: 10.5,-55.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 30246 components: - type: Transform rot: -1.5707963267948966 rad pos: 49.5,-36.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 30247 components: - type: Transform rot: -1.5707963267948966 rad pos: 49.5,-37.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - proto: WindoorHydroponicsLocked entities: - uid: 3318 @@ -203195,18 +204377,24 @@ entities: rot: 1.5707963267948966 rad pos: 2.5,21.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 3319 components: - type: Transform rot: 1.5707963267948966 rad pos: 2.5,20.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 3320 components: - type: Transform rot: 1.5707963267948966 rad pos: 2.5,19.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - proto: WindoorSecure entities: - uid: 15448 @@ -203215,6 +204403,8 @@ entities: rot: 3.141592653589793 rad pos: 44.5,-3.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - proto: WindoorSecureArmoryLocked entities: - uid: 3116 @@ -203223,60 +204413,80 @@ entities: rot: 3.141592653589793 rad pos: 40.5,-20.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 3117 components: - type: Transform rot: 3.141592653589793 rad pos: 44.5,-19.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 3858 components: - type: Transform rot: 3.141592653589793 rad pos: 45.5,-19.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 23434 components: - type: Transform rot: 3.141592653589793 rad pos: 41.5,-20.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 30455 components: - type: Transform rot: -1.5707963267948966 rad pos: 53.5,-12.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 30474 components: - type: Transform rot: 1.5707963267948966 rad pos: 50.5,-12.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 30481 components: - type: Transform rot: 1.5707963267948966 rad pos: 50.5,-13.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 30482 components: - type: Transform rot: -1.5707963267948966 rad pos: 53.5,-13.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 30485 components: - type: Transform rot: 1.5707963267948966 rad pos: 50.5,-15.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 30486 components: - type: Transform rot: 1.5707963267948966 rad pos: 50.5,-16.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - proto: WindoorSecureAtmosphericsLocked entities: - uid: 9016 @@ -203285,12 +204495,16 @@ entities: rot: 3.141592653589793 rad pos: -38.5,2.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 9017 components: - type: Transform rot: 3.141592653589793 rad pos: -39.5,2.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - proto: WindoorSecureBrigLocked entities: - uid: 3512 @@ -203299,32 +204513,44 @@ entities: rot: -1.5707963267948966 rad pos: 33.5,-4.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4269 components: - type: Transform pos: 31.5,-2.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10742 components: - type: Transform rot: -1.5707963267948966 rad pos: 33.5,-3.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 14159 components: - type: Transform pos: 32.5,-2.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 23432 components: - type: Transform pos: 41.5,-20.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 23450 components: - type: Transform pos: 40.5,-20.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - proto: WindoorSecureCargoLocked entities: - uid: 11541 @@ -203333,12 +204559,16 @@ entities: rot: -1.5707963267948966 rad pos: -47.5,1.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 23513 components: - type: Transform rot: -1.5707963267948966 rad pos: -47.5,0.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - proto: WindoorSecureChemistryLocked entities: - uid: 1632 @@ -203347,16 +204577,22 @@ entities: rot: -1.5707963267948966 rad pos: -10.5,-38.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1649 components: - type: Transform pos: -15.5,-37.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 28359 components: - type: Transform pos: -14.5,-37.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - proto: WindoorSecureCommandLocked entities: - uid: 30289 @@ -203365,24 +204601,32 @@ entities: rot: 1.5707963267948966 rad pos: 46.5,3.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 30291 components: - type: Transform rot: -1.5707963267948966 rad pos: 48.5,3.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 30292 components: - type: Transform rot: 1.5707963267948966 rad pos: 46.5,4.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 30293 components: - type: Transform rot: -1.5707963267948966 rad pos: 48.5,4.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - proto: WindoorSecureEngineeringLocked entities: - uid: 6236 @@ -203391,24 +204635,32 @@ entities: rot: 1.5707963267948966 rad pos: 3.5,32.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6237 components: - type: Transform rot: 1.5707963267948966 rad pos: 3.5,33.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 9477 components: - type: Transform rot: 3.141592653589793 rad pos: 33.5,49.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 26097 components: - type: Transform rot: -1.5707963267948966 rad pos: 43.5,-46.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - proto: WindoorSecureHeadOfPersonnelLocked entities: - uid: 4026 @@ -203417,23 +204669,31 @@ entities: rot: -1.5707963267948966 rad pos: 43.5,-4.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4492 components: - type: Transform rot: -1.5707963267948966 rad pos: 43.5,-5.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 17214 components: - type: Transform pos: 44.5,-3.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 17297 components: - type: Transform rot: -1.5707963267948966 rad pos: 43.5,-6.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - proto: WindoorSecureMedicalLocked entities: - uid: 1395 @@ -203441,11 +204701,15 @@ entities: - type: Transform pos: -8.5,-34.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1396 components: - type: Transform pos: -5.5,-34.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - proto: WindoorSecureSalvageLocked entities: - uid: 9234 @@ -203454,6 +204718,8 @@ entities: rot: 3.141592653589793 rad pos: -57.5,-16.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - proto: WindoorSecureScienceLocked entities: - uid: 9918 @@ -203462,18 +204728,24 @@ entities: rot: -1.5707963267948966 rad pos: 18.5,-40.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 9937 components: - type: Transform rot: 1.5707963267948966 rad pos: 4.5,-42.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 9939 components: - type: Transform rot: 1.5707963267948966 rad pos: 4.5,-43.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - proto: WindoorSecureSecurityLocked entities: - uid: 17319 @@ -203482,18 +204754,24 @@ entities: rot: -1.5707963267948966 rad pos: 43.5,-8.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 21069 components: - type: Transform rot: -1.5707963267948966 rad pos: 5.5,0.5 parent: 21002 + - type: DeltaPressure + gridUid: 21002 - uid: 21070 components: - type: Transform rot: -1.5707963267948966 rad pos: 5.5,-1.5 parent: 21002 + - type: DeltaPressure + gridUid: 21002 - proto: WindoorServiceLocked entities: - uid: 633 @@ -203502,23 +204780,31 @@ entities: rot: -1.5707963267948966 rad pos: -8.5,-11.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 651 components: - type: Transform pos: -11.5,-8.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 655 components: - type: Transform rot: 1.5707963267948966 rad pos: -11.5,-12.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 20858 components: - type: Transform rot: 3.141592653589793 rad pos: 12.5,34.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - proto: Window entities: - uid: 13 @@ -203526,563 +204812,783 @@ entities: - type: Transform pos: -22.5,-38.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 305 components: - type: Transform pos: -2.5,4.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 306 components: - type: Transform pos: -3.5,3.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 314 components: - type: Transform pos: -3.5,-2.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 315 components: - type: Transform pos: 4.5,-2.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 316 components: - type: Transform pos: 6.5,18.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 317 components: - type: Transform pos: 5.5,18.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 330 components: - type: Transform pos: 8.5,18.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 331 components: - type: Transform pos: 7.5,18.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 332 components: - type: Transform pos: -1.5,20.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 333 components: - type: Transform pos: -31.5,-21.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 397 components: - type: Transform pos: -32.5,-21.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 398 components: - type: Transform pos: -3.5,-38.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 399 components: - type: Transform pos: -3.5,-37.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 425 components: - type: Transform pos: -3.5,-34.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 436 components: - type: Transform pos: -3.5,-33.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 459 components: - type: Transform pos: -3.5,-32.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 515 components: - type: Transform pos: -28.5,-24.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 516 components: - type: Transform pos: -29.5,-24.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 524 components: - type: Transform pos: -22.5,-40.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 525 components: - type: Transform pos: -14.5,-30.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 526 components: - type: Transform pos: -22.5,-30.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 527 components: - type: Transform pos: -21.5,-30.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 529 components: - type: Transform pos: -24.5,-30.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 535 components: - type: Transform pos: -25.5,-30.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 536 components: - type: Transform pos: -26.5,-30.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 537 components: - type: Transform pos: -15.5,-30.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 539 components: - type: Transform pos: -32.5,-30.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 543 components: - type: Transform pos: -28.5,-30.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 545 components: - type: Transform pos: -28.5,-39.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 558 components: - type: Transform pos: -28.5,-38.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 559 components: - type: Transform pos: -28.5,-40.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 562 components: - type: Transform pos: 39.5,2.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 563 components: - type: Transform pos: 41.5,2.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 566 components: - type: Transform pos: -31.5,2.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 578 components: - type: Transform pos: -40.5,2.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 579 components: - type: Transform pos: -37.5,2.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 581 components: - type: Transform pos: -33.5,2.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 718 components: - type: Transform pos: 3.5,31.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 719 components: - type: Transform pos: 3.5,34.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 720 components: - type: Transform pos: -2.5,34.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 724 components: - type: Transform pos: -2.5,32.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 746 components: - type: Transform pos: 2.5,51.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 748 components: - type: Transform pos: 2.5,50.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 749 components: - type: Transform pos: 2.5,49.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 750 components: - type: Transform pos: 3.5,37.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 751 components: - type: Transform pos: 3.5,38.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 811 components: - type: Transform pos: -10.5,31.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 812 components: - type: Transform pos: -10.5,32.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 814 components: - type: Transform pos: -10.5,33.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 815 components: - type: Transform pos: -7.5,40.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 816 components: - type: Transform pos: -7.5,43.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 823 components: - type: Transform pos: -25.5,43.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 824 components: - type: Transform pos: -25.5,41.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 825 components: - type: Transform pos: -25.5,39.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 828 components: - type: Transform pos: -31.5,35.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 830 components: - type: Transform pos: -31.5,37.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 831 components: - type: Transform pos: -30.5,38.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 832 components: - type: Transform pos: -28.5,38.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 833 components: - type: Transform pos: -26.5,38.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 834 components: - type: Transform pos: -30.5,2.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 837 components: - type: Transform pos: -28.5,2.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 838 components: - type: Transform pos: 2.5,-35.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 839 components: - type: Transform pos: 2.5,-33.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 840 components: - type: Transform pos: 2.5,-37.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 841 components: - type: Transform pos: 2.5,-39.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 939 components: - type: Transform pos: 12.5,-33.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 940 components: - type: Transform pos: 12.5,-35.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 941 components: - type: Transform pos: 4.5,-44.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 943 components: - type: Transform pos: 4.5,-41.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 944 components: - type: Transform pos: 12.5,-37.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 945 components: - type: Transform pos: 12.5,-39.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 946 components: - type: Transform pos: -1.5,-49.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 947 components: - type: Transform pos: -3.5,-47.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 948 components: - type: Transform pos: -1.5,-53.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 993 components: - type: Transform pos: -9.5,-50.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 994 components: - type: Transform pos: -9.5,-49.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 995 components: - type: Transform pos: -9.5,-47.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 996 components: - type: Transform pos: -9.5,-46.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 998 components: - type: Transform pos: -5.5,-44.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 999 components: - type: Transform pos: -5.5,-42.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1002 components: - type: Transform pos: -1.5,-51.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1003 components: - type: Transform pos: -51.5,-2.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1004 components: - type: Transform pos: -51.5,-3.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1005 components: - type: Transform pos: -53.5,-15.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1064 components: - type: Transform pos: -56.5,-15.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1065 components: - type: Transform pos: -47.5,-4.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1066 components: - type: Transform pos: -51.5,2.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1067 components: - type: Transform pos: -47.5,3.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1068 components: - type: Transform pos: -1.5,39.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1070 components: - type: Transform pos: -47.5,2.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1077 components: - type: Transform pos: 4.5,3.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1078 components: - type: Transform pos: 3.5,-3.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1079 components: - type: Transform pos: 3.5,4.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1084 components: - type: Transform pos: -2.5,-3.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1443 components: - type: Transform rot: 3.141592653589793 rad pos: -20.5,-24.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1444 components: - type: Transform rot: 3.141592653589793 rad pos: -16.5,-25.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1445 components: - type: Transform rot: 3.141592653589793 rad pos: -20.5,-25.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1446 components: - type: Transform rot: 3.141592653589793 rad pos: -16.5,-24.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 3090 components: - type: Transform rot: 3.141592653589793 rad pos: 31.5,-26.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 3948 components: - type: Transform rot: 3.141592653589793 rad pos: 32.5,-26.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4819 components: - type: Transform rot: 3.141592653589793 rad pos: 30.5,-26.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 9617 components: - type: Transform rot: 3.141592653589793 rad pos: -24.5,38.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 11328 components: - type: Transform rot: 1.5707963267948966 rad pos: -58.5,-8.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 11375 components: - type: Transform rot: 1.5707963267948966 rad pos: -58.5,-9.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 17271 components: - type: Transform rot: 3.141592653589793 rad pos: 37.5,-1.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 18937 components: - type: Transform pos: -10.5,19.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 23168 components: - type: Transform pos: -3.5,-39.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 26713 components: - type: Transform rot: 3.141592653589793 rad pos: 34.5,-1.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 28753 components: - type: Transform pos: -24.5,3.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - proto: WindowDiagonal entities: - uid: 279 @@ -204091,69 +205597,93 @@ entities: rot: -1.5707963267948966 rad pos: 3.5,5.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 286 components: - type: Transform rot: -1.5707963267948966 rad pos: 4.5,4.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 303 components: - type: Transform rot: 3.141592653589793 rad pos: 3.5,-4.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 304 components: - type: Transform rot: 1.5707963267948966 rad pos: -2.5,-4.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1072 components: - type: Transform pos: -2.5,5.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1073 components: - type: Transform rot: 1.5707963267948966 rad pos: -3.5,-3.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1074 components: - type: Transform rot: 3.141592653589793 rad pos: 5.5,-2.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1075 components: - type: Transform rot: -1.5707963267948966 rad pos: 5.5,3.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1076 components: - type: Transform rot: 1.5707963267948966 rad pos: -4.5,-2.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1080 components: - type: Transform pos: -4.5,3.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1081 components: - type: Transform pos: -3.5,4.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1083 components: - type: Transform rot: 3.141592653589793 rad pos: 4.5,-3.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - proto: WindowDirectional entities: - uid: 1352 @@ -204161,169 +205691,227 @@ entities: - type: Transform pos: -4.5,-34.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1353 components: - type: Transform pos: -6.5,-34.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1355 components: - type: Transform pos: -9.5,-34.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1451 components: - type: Transform rot: 3.141592653589793 rad pos: -20.5,-26.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1452 components: - type: Transform rot: 3.141592653589793 rad pos: -16.5,-26.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1453 components: - type: Transform rot: 3.141592653589793 rad pos: -17.5,-26.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1455 components: - type: Transform rot: 3.141592653589793 rad pos: -22.5,-26.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1456 components: - type: Transform rot: 3.141592653589793 rad pos: -14.5,-26.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 11458 components: - type: Transform pos: -49.5,-10.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 11459 components: - type: Transform rot: -1.5707963267948966 rad pos: -48.5,-11.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 11460 components: - type: Transform rot: 3.141592653589793 rad pos: -49.5,-8.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 11461 components: - type: Transform rot: 1.5707963267948966 rad pos: -49.5,-7.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 15511 components: - type: Transform rot: 3.141592653589793 rad pos: 58.5,-3.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 15547 components: - type: Transform rot: -1.5707963267948966 rad pos: 59.5,-2.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 18861 components: - type: Transform rot: 1.5707963267948966 rad pos: 57.5,-1.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 18862 components: - type: Transform rot: 1.5707963267948966 rad pos: 57.5,-0.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 18863 components: - type: Transform rot: 1.5707963267948966 rad pos: 57.5,0.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 18864 components: - type: Transform rot: 1.5707963267948966 rad pos: 57.5,1.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 18865 components: - type: Transform pos: 58.5,2.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 18866 components: - type: Transform rot: -1.5707963267948966 rad pos: 59.5,1.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 18867 components: - type: Transform rot: -1.5707963267948966 rad pos: 59.5,0.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 18868 components: - type: Transform rot: -1.5707963267948966 rad pos: 59.5,-0.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 18869 components: - type: Transform rot: -1.5707963267948966 rad pos: 59.5,-1.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 18876 components: - type: Transform rot: 1.5707963267948966 rad pos: 57.5,-2.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 23167 components: - type: Transform rot: 3.141592653589793 rad pos: -19.5,-26.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 28616 components: - type: Transform rot: -1.5707963267948966 rad pos: -56.5,-28.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 28617 components: - type: Transform rot: -1.5707963267948966 rad pos: -56.5,-29.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 28618 components: - type: Transform rot: -1.5707963267948966 rad pos: -56.5,-27.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 30248 components: - type: Transform pos: -7.5,-34.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - proto: WindowFrostedDirectional entities: - uid: 3489 @@ -204332,18 +205920,24 @@ entities: rot: 3.141592653589793 rad pos: 30.5,-27.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 3506 components: - type: Transform rot: 3.141592653589793 rad pos: 31.5,-27.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 15490 components: - type: Transform rot: 3.141592653589793 rad pos: 32.5,-27.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - proto: WindowReinforcedDirectional entities: - uid: 625 @@ -204352,406 +205946,548 @@ entities: rot: 3.141592653589793 rad pos: -12.5,-4.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 626 components: - type: Transform rot: 3.141592653589793 rad pos: -11.5,-4.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 627 components: - type: Transform rot: 1.5707963267948966 rad pos: -10.5,-5.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 628 components: - type: Transform rot: 1.5707963267948966 rad pos: -10.5,-6.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 629 components: - type: Transform rot: 1.5707963267948966 rad pos: -10.5,-7.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 630 components: - type: Transform rot: -1.5707963267948966 rad pos: -13.5,-5.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 631 components: - type: Transform rot: -1.5707963267948966 rad pos: -13.5,-6.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 632 components: - type: Transform rot: -1.5707963267948966 rad pos: -13.5,-7.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 634 components: - type: Transform rot: -1.5707963267948966 rad pos: -8.5,-12.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 642 components: - type: Transform rot: 3.141592653589793 rad pos: -7.5,-10.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 643 components: - type: Transform rot: 3.141592653589793 rad pos: -6.5,-10.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 644 components: - type: Transform rot: 3.141592653589793 rad pos: -5.5,-10.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 645 components: - type: Transform rot: 3.141592653589793 rad pos: -5.5,-10.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 646 components: - type: Transform rot: 1.5707963267948966 rad pos: -4.5,-11.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 647 components: - type: Transform rot: 1.5707963267948966 rad pos: -4.5,-12.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 648 components: - type: Transform pos: -5.5,-13.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 649 components: - type: Transform pos: -6.5,-13.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 650 components: - type: Transform pos: -7.5,-13.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 652 components: - type: Transform pos: -12.5,-8.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 653 components: - type: Transform rot: 3.141592653589793 rad pos: -13.5,-11.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 654 components: - type: Transform rot: 3.141592653589793 rad pos: -12.5,-11.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 656 components: - type: Transform rot: 1.5707963267948966 rad pos: -11.5,-13.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 657 components: - type: Transform pos: -12.5,-14.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 658 components: - type: Transform pos: -13.5,-14.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 659 components: - type: Transform rot: -1.5707963267948966 rad pos: -14.5,-13.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 660 components: - type: Transform rot: -1.5707963267948966 rad pos: -14.5,-12.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2329 components: - type: Transform rot: -1.5707963267948966 rad pos: 19.5,9.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2330 components: - type: Transform rot: -1.5707963267948966 rad pos: 19.5,8.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2331 components: - type: Transform rot: -1.5707963267948966 rad pos: 19.5,7.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2332 components: - type: Transform rot: -1.5707963267948966 rad pos: 19.5,6.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2333 components: - type: Transform rot: -1.5707963267948966 rad pos: 19.5,5.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2334 components: - type: Transform rot: -1.5707963267948966 rad pos: 19.5,4.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 3769 components: - type: Transform rot: 3.141592653589793 rad pos: 44.5,-7.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 3770 components: - type: Transform pos: 43.5,-6.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 3925 components: - type: Transform pos: 15.5,-38.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 3949 components: - type: Transform rot: 3.141592653589793 rad pos: 15.5,-41.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4039 components: - type: Transform rot: -1.5707963267948966 rad pos: 43.5,-7.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4045 components: - type: Transform rot: 3.141592653589793 rad pos: 43.5,-7.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4132 components: - type: Transform rot: -1.5707963267948966 rad pos: 49.5,-38.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4563 components: - type: Transform pos: 50.5,-13.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6128 components: - type: Transform rot: 3.141592653589793 rad pos: 47.5,4.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6164 components: - type: Transform rot: 3.141592653589793 rad pos: 47.5,4.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6165 components: - type: Transform rot: -1.5707963267948966 rad pos: 46.5,6.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6166 components: - type: Transform rot: 1.5707963267948966 rad pos: 48.5,6.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6852 components: - type: Transform rot: -1.5707963267948966 rad pos: 49.5,-35.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 9476 components: - type: Transform rot: -1.5707963267948966 rad pos: 34.5,50.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 9910 components: - type: Transform rot: -1.5707963267948966 rad pos: 18.5,-37.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 9911 components: - type: Transform rot: -1.5707963267948966 rad pos: 18.5,-38.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 9912 components: - type: Transform rot: -1.5707963267948966 rad pos: 18.5,-39.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 9913 components: - type: Transform pos: 21.5,-41.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 9914 components: - type: Transform pos: 20.5,-41.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 9915 components: - type: Transform pos: 19.5,-41.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 9916 components: - type: Transform pos: 18.5,-41.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 9917 components: - type: Transform rot: -1.5707963267948966 rad pos: 18.5,-41.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 16803 components: - type: Transform rot: -1.5707963267948966 rad pos: 43.5,-45.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 17298 components: - type: Transform pos: 44.5,-6.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 20823 components: - type: Transform rot: 3.141592653589793 rad pos: -12.5,19.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 21056 components: - type: Transform rot: 3.141592653589793 rad pos: 6.5,-3.5 parent: 21002 + - type: DeltaPressure + gridUid: 21002 - uid: 21057 components: - type: Transform rot: 3.141592653589793 rad pos: 7.5,-3.5 parent: 21002 + - type: DeltaPressure + gridUid: 21002 - uid: 21058 components: - type: Transform pos: 6.5,2.5 parent: 21002 + - type: DeltaPressure + gridUid: 21002 - uid: 21059 components: - type: Transform pos: 7.5,2.5 parent: 21002 + - type: DeltaPressure + gridUid: 21002 - uid: 22277 components: - type: Transform rot: 3.141592653589793 rad pos: -13.5,19.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 22734 components: - type: Transform pos: 4.5,4.5 parent: 21002 + - type: DeltaPressure + gridUid: 21002 - uid: 22735 components: - type: Transform pos: 8.5,2.5 parent: 21002 + - type: DeltaPressure + gridUid: 21002 - uid: 22736 components: - type: Transform rot: -1.5707963267948966 rad pos: 9.5,-0.5 parent: 21002 + - type: DeltaPressure + gridUid: 21002 - uid: 22737 components: - type: Transform rot: 3.141592653589793 rad pos: 8.5,-3.5 parent: 21002 + - type: DeltaPressure + gridUid: 21002 - uid: 25887 components: - type: Transform rot: 1.5707963267948966 rad pos: 23.5,-0.5 parent: 21002 + - type: DeltaPressure + gridUid: 21002 - uid: 26611 components: - type: Transform rot: 1.5707963267948966 rad pos: 23.5,5.5 parent: 21002 + - type: DeltaPressure + gridUid: 21002 - uid: 30456 components: - type: Transform pos: 53.5,-13.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 30473 components: - type: Transform rot: 3.141592653589793 rad pos: 50.5,-15.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 30484 components: - type: Transform pos: 50.5,-16.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - proto: Wirecutter entities: - uid: 23787 @@ -204827,7 +206563,7 @@ entities: pos: 24.5,2.5 parent: 21002 - type: Door - secondsUntilStateChange: -685379.4 + secondsUntilStateChange: -685409.7 state: Opening - uid: 28863 components: From 2b411b244e681431accb1d74846c46044d90b54d Mon Sep 17 00:00:00 2001 From: IProduceWidgets <107586145+IProduceWidgets@users.noreply.github.com> Date: Fri, 19 Sep 2025 15:30:07 -0400 Subject: [PATCH 103/143] The Experimental Lecter 8 (#40372) * XL8 files * slap dat on the ERT lead * oop mag indicator offset * fix newline --- .../Objects/Weapons/Guns/Rifles/rifles.yml | 27 ++++++ .../Jobs/CentComm/emergencyresponseteam.yml | 2 +- .../Weapons/Guns/Rifles/XL8.rsi/base.png | Bin 0 -> 600 bytes .../Weapons/Guns/Rifles/XL8.rsi/bolt-open.png | Bin 0 -> 605 bytes .../Guns/Rifles/XL8.rsi/equipped-BACKPACK.png | Bin 0 -> 1164 bytes .../Rifles/XL8.rsi/equipped-SUITSTORAGE.png | Bin 0 -> 1164 bytes .../Weapons/Guns/Rifles/XL8.rsi/icon.png | Bin 0 -> 663 bytes .../Guns/Rifles/XL8.rsi/inhand-left.png | Bin 0 -> 869 bytes .../Guns/Rifles/XL8.rsi/inhand-right.png | Bin 0 -> 846 bytes .../Weapons/Guns/Rifles/XL8.rsi/mag-0.png | Bin 0 -> 195 bytes .../Weapons/Guns/Rifles/XL8.rsi/mag-1.png | Bin 0 -> 202 bytes .../Weapons/Guns/Rifles/XL8.rsi/mag-2.png | Bin 0 -> 218 bytes .../Weapons/Guns/Rifles/XL8.rsi/mag-3.png | Bin 0 -> 222 bytes .../Weapons/Guns/Rifles/XL8.rsi/mag-4.png | Bin 0 -> 225 bytes .../Weapons/Guns/Rifles/XL8.rsi/meta.json | 89 ++++++++++++++++++ .../Rifles/XL8.rsi/wielded-inhand-left.png | Bin 0 -> 945 bytes .../Rifles/XL8.rsi/wielded-inhand-right.png | Bin 0 -> 912 bytes 17 files changed, 117 insertions(+), 1 deletion(-) create mode 100644 Resources/Textures/Objects/Weapons/Guns/Rifles/XL8.rsi/base.png create mode 100644 Resources/Textures/Objects/Weapons/Guns/Rifles/XL8.rsi/bolt-open.png create mode 100644 Resources/Textures/Objects/Weapons/Guns/Rifles/XL8.rsi/equipped-BACKPACK.png create mode 100644 Resources/Textures/Objects/Weapons/Guns/Rifles/XL8.rsi/equipped-SUITSTORAGE.png create mode 100644 Resources/Textures/Objects/Weapons/Guns/Rifles/XL8.rsi/icon.png create mode 100644 Resources/Textures/Objects/Weapons/Guns/Rifles/XL8.rsi/inhand-left.png create mode 100644 Resources/Textures/Objects/Weapons/Guns/Rifles/XL8.rsi/inhand-right.png create mode 100644 Resources/Textures/Objects/Weapons/Guns/Rifles/XL8.rsi/mag-0.png create mode 100644 Resources/Textures/Objects/Weapons/Guns/Rifles/XL8.rsi/mag-1.png create mode 100644 Resources/Textures/Objects/Weapons/Guns/Rifles/XL8.rsi/mag-2.png create mode 100644 Resources/Textures/Objects/Weapons/Guns/Rifles/XL8.rsi/mag-3.png create mode 100644 Resources/Textures/Objects/Weapons/Guns/Rifles/XL8.rsi/mag-4.png create mode 100644 Resources/Textures/Objects/Weapons/Guns/Rifles/XL8.rsi/meta.json create mode 100644 Resources/Textures/Objects/Weapons/Guns/Rifles/XL8.rsi/wielded-inhand-left.png create mode 100644 Resources/Textures/Objects/Weapons/Guns/Rifles/XL8.rsi/wielded-inhand-right.png diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Rifles/rifles.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Rifles/rifles.yml index 99fb4edce7..fcb12ef711 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Rifles/rifles.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Rifles/rifles.yml @@ -193,6 +193,33 @@ zeroVisible: true - type: Appearance +- type: entity + parent: WeaponRifleLecter + id: WeaponRifleLecterXL8 + name: XL8 + description: |- + The Experimental Lecter 8 + An unreasonably expensive military grade assault rifle with integrated optic. + Uses .20 rifle ammo. + components: + - type: Sprite + sprite: Objects/Weapons/Guns/Rifles/XL8.rsi + - type: Clothing + sprite: Objects/Weapons/Guns/Rifles/XL8.rsi + - type: CursorOffsetRequiresWield + - type: EyeCursorOffset + maxOffset: 2 + pvsIncrease: 0.2 + - type: StaticPrice + price: 1500 #3x lecter + - type: Gun + shotsPerBurst: 3 + selectedMode: Burst + availableModes: + - Burst + - SemiAuto + - FullAuto + - type: entity name: Estoc DMR parent: [BaseWeaponRifle, BaseSyndicateContraband] diff --git a/Resources/Prototypes/Roles/Jobs/CentComm/emergencyresponseteam.yml b/Resources/Prototypes/Roles/Jobs/CentComm/emergencyresponseteam.yml index 1423db752a..c78463b1e1 100644 --- a/Resources/Prototypes/Roles/Jobs/CentComm/emergencyresponseteam.yml +++ b/Resources/Prototypes/Roles/Jobs/CentComm/emergencyresponseteam.yml @@ -81,7 +81,7 @@ pocket1: MagazineRifle pocket2: MagazineRifle inhand: - - WeaponRifleLecter + - WeaponRifleLecterXL8 storage: back: - WeaponDisabler diff --git a/Resources/Textures/Objects/Weapons/Guns/Rifles/XL8.rsi/base.png b/Resources/Textures/Objects/Weapons/Guns/Rifles/XL8.rsi/base.png new file mode 100644 index 0000000000000000000000000000000000000000..51372ad979a3364286749f1418a5406ba288d4fd GIT binary patch literal 600 zcmV-e0;m0nP) z%WD%+6vlrOvXC}0C`3>h1Suxjsfli+SalTyg@C5kF1y#2g5W}2**{@$SxS{66m(ON zMuLl!B)GE_36YQ#9FSgPni5LJ#XOvw=4q*$&bOI!&tuMa&OLJ&@ZjO7LmA2Y^0XnH zi%ZHu3HXO~R8`eDb@L9Jzs!&e$M^W5e>N(Wit=9wxZ!K)6!KXJUxP44U*`c`8uWObiaa7Y?AhP7=ZS87+*t|V=NMWn`P$db*5f@0+8gfV;O>pl=-4Qt?o4| zHUXOqKy>E|8}2Kx9o>oD)w*SX%*U5Z-Fgndiz~ZCA`!`A8vkWQx! zhk&S+0Eo}cQ+WLZx2{tLxDyrH$P%f9d522d`qRP&0 z0K`wL-)GI8@a?S>Q<=C==*)RUt>ipA6ECmk0oc;F0Ux_)<#?0MwEUv7P1(L}mnx-kLs_q{`QKi*9$?|I6N(gJ~o66utB&tKNS54C-KT#`z zs3NR)q>7_#LQ(DeO`Fx zPiPZS5XOHSa*#GLC`3?M1PPMd)I={*t$GTALcm6AkG<^kq`(;!3F7SOjAP1de}eR*XFOKUfl1p@6DUp@0)qE!-5A7|2veSyf5A} zq*OK^;|9HBQ{P&Dy3Ja_;C3KlQIhrBYG;i2yfz4V^+h3*jpe#^~wXr%FR# zK`1sRnZ);OM_1cVI`1IHKMZ*=k)myF>-i5oGZdJW2_{nb8oFe2$M~bssIfY7zANvW zbbzUMzn#+W%aG1j5Q>e_9t{J~9u4Db=yHrD!f&h0Jh{gB%ohM@J#r*NFp)A})T7kh zdc_uCivfskePh*q1-7G`*qyC=4UqZ#lJT3*0eEp~o4L7H&e`VGr$kO3+aqO1+BJZ5 zI&C-tM6Cose0r9`>&Lild)ELLVh_NwJz4}J6T64C5``LkyuaICt!7<{e+HDx<<3p$ z7J;a;wH*NQ%c}Qjb0++FFU3?M6NFBkMbt{pb1(72QXYVHeFN~3%jFbFKzw@EA&uXC z=ydp0(Ogd6x@=6|Im7(oGFc#*OrmL;qN?itCKOd#&EqUA()in6Y67~Y?Y2M-=R92Winub=XGb!3`000000NkvXXu0mjfpzsvq literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Weapons/Guns/Rifles/XL8.rsi/equipped-BACKPACK.png b/Resources/Textures/Objects/Weapons/Guns/Rifles/XL8.rsi/equipped-BACKPACK.png new file mode 100644 index 0000000000000000000000000000000000000000..7b8ff925e0555e3a6791ec44053cfe0bdf50e14f GIT binary patch literal 1164 zcmV;71atd|P)Eg847> z_gLn@p=+7}wOWlaKJTrZW6X|yJ3Q)HM@J)L1ICKEMZ(1;1k?^@E-a(+{g;@zundGo z^`UD5|^1M-L>+kpSrh1MYR*)!) zL{(J)aNRrryfG5&nGUEOJPp2yfZBm{dj!Q#yO3`DW68K986b)x0RUB1Q7)GmuO>PG zi2i*CkI#ICjUT_ohm%>o$1R$+eH%1055RNtxR+-dCr%^35b2p;zZenoSZ`pRWn*S9?fBoYatX&L}v zYirA!o;P@AJ~TPkGe6e3gUt>A+#TwawhZ*&gT0vWUg~`Sp~*QYe?0({Hj-=u0I>1v z7Gr3$t81tsVEG~rE}gl!G+=)HVgwWKeE;y^5-AF53MiYv|eKp=MR+y=~D!wzkEGlURt`=GisRk)uS^f7YNVu zB%Mwl&U`ve1VJEzAh`B8&bSc(mSqtNh4hIt8pZ1B>d@B_1c7XCZ@V`17`L(j0K(xg z+!RltP$(1%g+ifFC=`kZ2!cTVZyGKABv#BV5}xOYqA2ilp+vvNVs6orPRl=v8oR7q zTmow6d>MfDN8e!YZV`@WfI(<-&bO&=>3UJ zenPx9FNz`w2K9P@ZnxWOuQ%IhwXAKDSe^sk4eQkxnVU^it5s&d6ny98DNlReD9k9A z%S^ReWimIL16mym!2Ik4xs*NoN+AHCX_{ws0{uJGFK*8Rz@_Y2%+F3ZQzmC--YAk_ zS=O_yawFS}o`2PGR)b)92uMrUnBw{4xIVix&>jp1y{ixb@aUmF7ws4D>$5vA?HxKw zD0`K>?m|hkI}IlnNGN;NmOfki{FPfd0Km-2w|u$XRjKb10GRn~NpG-FG-Y`R7%Qyg zm7jgP8Z@*yzhaGLNTt5pd-*j00~#$>r&vnm7oPz8OKAP}H0YX6p68Fme+G_Eg847> z_gLn@p=+7}wOWlaKJTrZW6X|yJ3Q)HM@J)L1ICKEMZ(1;1k?^@E-a(+{g;@zundGo z^`UD5|^1M-L>+kpSrh1MYR*)!) zL{(J)aNRrryfG5&nGUEOJPp2yfZBm{dj!Q#yO3`DW68K986b)x0RUB1Q7)GmuO>PG zi2i*CkI#ICjUT_ohm%>o$1R$+eH%1055RNtxR+-dCr%^35b2p;zZenoSZ`pRWn*S9?fBoYatX&L}v zYirA!o;P@AJ~TPkGe6e3gUt>A+#TwawhZ*&gT0vWUg~`Sp~*QYe?0({Hj-=u0I>1v z7Gr3$t81tsVEG~rE}gl!G+=)HVgwWKeE;y^5-AF53MiYv|eKp=MR+y=~D!wzkEGlURt`=GisRk)uS^f7YNVu zB%Mwl&U`ve1VJEzAh`B8&bSc(mSqtNh4hIt8pZ1B>d@B_1c7XCZ@V`17`L(j0K(xg z+!RltP$(1%g+ifFC=`kZ2!cTVZyGKABv#BV5}xOYqA2ilp+vvNVs6orPRl=v8oR7q zTmow6d>MfDN8e!YZV`@WfI(<-&bO&=>3UJ zenPx9FNz`w2K9P@ZnxWOuQ%IhwXAKDSe^sk4eQkxnVU^it5s&d6ny98DNlReD9k9A z%S^ReWimIL16mym!2Ik4xs*NoN+AHCX_{ws0{uJGFK*8Rz@_Y2%+F3ZQzmC--YAk_ zS=O_yawFS}o`2PGR)b)92uMrUnBw{4xIVix&>jp1y{ixb@aUmF7ws4D>$5vA?HxKw zD0`K>?m|hkI}IlnNGN;NmOfki{FPfd0Km-2w|u$XRjKb10GRn~NpG-FG-Y`R7%Qyg zm7jgP8Z@*yzhaGLNTt5pd-*j00~#$>r&vnm7oPz8OKAP}H0YX6p68Fme+G_Em4e_xT-iTia9Kp92n8Wf zkVZlmk)((VEkQ#{NE9RD7}JzcIxZ$N&ZN^kS`oo~o4Jp3?)RN@&zuVb4Di3h)|d6! zam6%Weq!6L07tKeLI~y1#Vh20s4o7!8+@rQDWy`$_E!WLVXs%oWz*n04?dKR#$B@1 z_Z4_UqoyVKecIAgvoq~mh;j5o?uo?NY)xy~=N%)IQ8VL-#Ie__rZuCFBNz-SE6&r~ z^3EpQOg{aor+!O>SYLrRG|HyS2f(JwhrM1k`?N$jG?l447l=N51z;LG_oVPd;_5*i zQoUWRXaY1b0Kv64tQfCAGc*z#qcx5JQZFA6y>t(N`{&jP1Oocr`0OgfNA|Z#*)YxO zKq8S)bOCau06=(ZhTNmu7}wgz0B1rsp|y5v9-v~{&sE^Xjo;9Jx}^zwN|x3t0d@RlfsvGMS9cBp^IBqmzcO zP3sjtxvUN+E{`Y^SBH2!zepO0#bQX3WD`PcEke0WvvGjAg=~uu7GLLW-5Zfy?zz26 zl4P=zD+Q3t$Z{D`T_Qf+TZeS$#2x-=HTp4{jhY^j7P;H)*8QW-BL0)7NGAW_V`L=P zQfie>A%t>bNUaf7M3P?K341RpyOC@7{8i0P{@q(*u^5*1v6Hu8Y{ai0)JcF4LUFlV x96q>@kE>;N`%>-*LI|ao$Ojl;fC2s)`~pg52;yc>c2WQU002ovPDHLkV1nK~Ej<7L literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Weapons/Guns/Rifles/XL8.rsi/inhand-left.png b/Resources/Textures/Objects/Weapons/Guns/Rifles/XL8.rsi/inhand-left.png new file mode 100644 index 0000000000000000000000000000000000000000..08c12bc659913796e676634ae472df198ab0b531 GIT binary patch literal 869 zcmV-r1DgDaP)7FC~Y9UiOsU zQ%u1?ktUF6a}uPv2n7jAp@mKlx{H4jyStrDqpqA3T6y_agwH)9DDGuSaz7kx&4UPykwL0eaStUb6(TCK9- z;M?tX|0~k#q19?J{HvtXX>O;TAP9mW2!bF8f*=TjAc)yUWbOVg5MCQ>Nl6Iz1=!^2 z(i47f0vHt_*E3;?Q{?pFGs_~lQXcoF6xc0^+uCA-44am1R!ir?1=v}>=odoml*H|B zv4P0mlmg$<#$+cO)nwrUIQ9itOnW1^o#l&>3bJ0zPn6WGFeiFn_L?_@{K z5xf43m6a7#8_rh$Hsb^U9*rjeI5$tYUWcFN3$TK!s{Hu)7%eF|9y|=w#KB?RaU6GM vL`bL8{OIV&cJTj=ablWq^cRyL2)FnRA;EcxHlC-300000NkvXXu0mjfV?mI_ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Weapons/Guns/Rifles/XL8.rsi/inhand-right.png b/Resources/Textures/Objects/Weapons/Guns/Rifles/XL8.rsi/inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..70e62a3f6ac6d956a1702cb16f167a56accd2ad7 GIT binary patch literal 846 zcmV-U1F`&xP)cjO+6`33(IV@AE#-li>3O2!bF8f*=Tj zAP8bCiN#_ZlE(YFSLk|G(s(Qur?G}_1L@6 zF{Nw-6AD7{wC@7&h;gjG%C*ERJ6EoUcvp{S0F1y2P%SY4*jl`VaMSQ*?Vr}p8LB0= z8hy%?T!DRj9cf=wEiogo(nAJF8b`InAZdJiBZbY%1e&!nnzgd;o8iwN*MH04mhFv{ zLyy}%tW)jV#oMDfHm?Rr2k-8VO@|ehI~5ktw+XYYRfB*P^Pb-1?%@^I69t zc`e1q<@DvX6qnahj=k#nEVn-DR8{3|JwR1eZki?lpxJD~FpTkOc0GJFg+d_!z|71H z_V)Ii8k5N+#{=M@=p+b&AP9mW2!bF8f*^?hfo?<2ei81wa3MZ7+CLK|jdvSz4mAJ^ z@i~6__<8438Mc4GHnJN@08VS?%=1)+6a*{nhatYF5^$TWhT>@i6H04y!>Ccqt8jg+ zV{7qpgaNok&u3esGi&B%ZOkwXHqcCP@hXfw07|al$b@FCjLpi#z03&x2EpM~7;vev zK{O|;9K6g3{Wd*0bQ>^Mm<4AHLi8UHinl(`OcKoo04q{olmbie8$lo==uL tKfUVx;d|33+>CEO@rPyeZ=iAQAK5Y|yM*4{r}7+Rx~Hq3%Q~loCIBZwQ{Dgo literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Weapons/Guns/Rifles/XL8.rsi/mag-1.png b/Resources/Textures/Objects/Weapons/Guns/Rifles/XL8.rsi/mag-1.png new file mode 100644 index 0000000000000000000000000000000000000000..0686f2063f47cd19fb060577c3b0b366ea5ab81c GIT binary patch literal 202 zcmeAS@N?(olHy`uVBq!ia0vp^4nVBH!3HE3&8=$zQWHI0978hhy}hEycgR7Y^C_aP1*&WJEOF#cxA#JCitE=v`|r8@^Z<^|FIA1XWw1J0@Ta!*2Cc6X=2}BicLCnH~Dq=guBycx~?@564{Bp(f?7-}`w|@y4{hlv4bACdZJOe|5`MnKE?xxFG@^K|udS?83{1OWO{RssM3 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Weapons/Guns/Rifles/XL8.rsi/mag-3.png b/Resources/Textures/Objects/Weapons/Guns/Rifles/XL8.rsi/mag-3.png new file mode 100644 index 0000000000000000000000000000000000000000..44686162d6f42e8564f88fe1b7620167f78ef84d GIT binary patch literal 222 zcmeAS@N?(olHy`uVBq!ia0vp^4nVBH!3HE3&8=$zQcFEu978hhy}h!K*U3=C?csiw z@MedG70w~{tqutjbpnq{ond0S&snghK|$Z=0E2kD%9Ev;l_!6SS!~~%sR}fJ;XuA# zZ2F`nv)5$)zp{+~!ES-3-lg`MlK1kiO$*8@`=R(Z^JKKW+_a+A)0fOGI(O~+-qkz5 zPOEJd&^eZI{qsGQNUxJwcC8C*!>c&n?-lzz^IiY)Re2Bif6Z5ns%u*N8)(7ek8BhE V_$ax literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Weapons/Guns/Rifles/XL8.rsi/mag-4.png b/Resources/Textures/Objects/Weapons/Guns/Rifles/XL8.rsi/mag-4.png new file mode 100644 index 0000000000000000000000000000000000000000..96aeee8a74c93ce28c93f6625abcd9508d2fe1fe GIT binary patch literal 225 zcmV<703QE|P)41m1UG{~fT-gHQwRjMw;&;@;t&|lg2C?+cnk>A>;yBoABQAlX;zlJ&jsGL ze_IIv0002+n@e4rB_kW=r|&w2y)$D8c_(k^xiAq@T$`t)7yDO6RZ#eAm6v(=C{;2-**MU?ymOZNc) b07l~t2yjVpjkY`d00000NkvXXu0mjfPMKby literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Weapons/Guns/Rifles/XL8.rsi/meta.json b/Resources/Textures/Objects/Weapons/Guns/Rifles/XL8.rsi/meta.json new file mode 100644 index 0000000000..9aad06372d --- /dev/null +++ b/Resources/Textures/Objects/Weapons/Guns/Rifles/XL8.rsi/meta.json @@ -0,0 +1,89 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken/modified from tgstation at https://github.com/tgstation/tgstation/pull/41393/commits/1e56473177d0994d163c9edca3d13d6e5b640cc4, https://github.com/tgstation/tgstation/tree/master/icons/obj/weapons/guns backpack sprite by Peptide (copy of carbine), backpack sling sprite edited by Boaz1111, wield sprites by RiceMar1244, all sprites heavily edited by Emisse for SS14 using a palette inspired by coolstation weapon sprites https://github.com/coolstation/coolstation, tweaked for optic and mag anim by IProduceWidgets (github)", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "base" + }, + { + "name": "bolt-open" + }, + { + "name": "mag-0", + "delays": [ + [ + 0.5, + 0.5 + ] + ] + }, + { + "name": "mag-1", + "delays": [ + [ + 0.5, + 0.5 + ] + ] + }, + { + "name": "mag-2", + "delays": [ + [ + 0.5, + 0.5 + ] + ] + }, + { + "name": "mag-3", + "delays": [ + [ + 0.5, + 0.5 + ] + ] + }, + { + "name": "mag-4", + "delays": [ + [ + 0.5, + 0.5 + ] + ] + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + }, + { + "name": "wielded-inhand-left", + "directions": 4 + }, + { + "name": "wielded-inhand-right", + "directions": 4 + }, + { + "name": "equipped-BACKPACK", + "directions": 4 + }, + { + "name": "equipped-SUITSTORAGE", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/Objects/Weapons/Guns/Rifles/XL8.rsi/wielded-inhand-left.png b/Resources/Textures/Objects/Weapons/Guns/Rifles/XL8.rsi/wielded-inhand-left.png new file mode 100644 index 0000000000000000000000000000000000000000..2a8c7d955be79f301071c89d6e7353e69af33b96 GIT binary patch literal 945 zcmV;i15W&jP)F|9LK-2h^WiBby#6pCNCy$^CCKm2e;H9kiuYyR?V}7M$*Ysfr*EX7Ig3uLjECP z2~oV1sGSs7mY^C!!s;Nb2a&~1I_&G<%(yeI?&{3?Cx4&Q{C(f|`@Q#jGw{9uK@bE% z5ClP7NCZb(scPlM@yfVxo)VB}w*kf&cQ>_Qb$t_MzRTE7M7gS}!vC3o)RERu0bq6# zoG=dMtJ1lWs5K z%VBep^aLJdZOD{#2b18kUI>LkJQNCXmWV=>6(rqWQ-GqZz!L~!W}pKz10CqA*#Q8| zee4GSh_Yg8FETL*QC7ehqDD+vmB8BCnsGc_ zF=rg-7mCJl+j2Ep-~QCj3XpVralPfG<1=`!_l6_wq{fsn0gH=^#&l77RMWliU>65~ zF*$;^R+1#%+1be@N#eQGX}?{|!-HMCv9>%XIX1*fC@r-yop}sa+FgCGGaP zuC8xltEdv1O(Vw%um%bko$>^N!1l)8R{C)~0f*>%0>M3hf~Koq6J-VQmGQJC zna#||xCZEZ>!GV0ED;5;>l5$!N z<9+X0JqosFfOT(uxMI%m3hem=3V@qWjZW_J%l6>w+HY#Vm^1;Hbw|2$zX<9M4_|Q- zKJO*myCoyPP&7JJ`2G=Mv6uktx-`b*2p-H|!PZE(tukPY@q;vh{eA%5A>vC4UN^pdIG3jvgrl<-(ACKOLU0pt#oz2>;6swy0$nU45!_+x}3X2PFwTP&YVU^&P4D8K@bE%oO}KOVXA{o Tj|g;200000NkvXXu0mjfs2$K8 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Weapons/Guns/Rifles/XL8.rsi/wielded-inhand-right.png b/Resources/Textures/Objects/Weapons/Guns/Rifles/XL8.rsi/wielded-inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..dbc6271c8f5814616e9113cd1a028f9b55633640 GIT binary patch literal 912 zcmV;B18@9^P)7QV}G2UT3)(No%L??-Y`+dA|4kzV{3CeE@#mjV0nlG6KD<)(LGou-1*@h2Z&Y8XjK|0H6XT0egHw z?75r4XVaz6j}nC4;7u+DU#ZpwSwU=YXHEDXc~xa>cNi7F@4PLPDZ~TTm&{YHcY?Y%GkqL7`Wx!A($Dt&l$69T0VY zuNX^RD#n$I!_m*SD2gl`4l_{{85)S&?QLv2($5~;Z8tS9-b!Z6@2&m%iLS0LG+Gkg zjDEt{-1pk=O0U<;I&NHVxLr_J$`31oAP9mW2!bF8f*=TjAWkrWURJSBP!C;);O+eQ zYG;q*6EYLLl#4s2Y3sjpNs^em`+43kV5C-^qQindg08I{kZ}32p4u*oYZItpX=t73 zlAvwqa%NXL;qvdxu-3BXvuUWSOZo&gkAS+mjf5P z9%JZA5)*wF;qe9aN$80ycmwPPKl`xwejx8r(EJJIx>7EV&}C-Ylh9;mZXI`?0Z{#gTa_{{eEL&%XRabTX{{3egsPi5WqDP>mrG@R>ds|ggRaMiiaPtNUt+o!h-#y~|>7QTuEu5QsicBGRqi!uU zE!Sv0d;-3dJ}lN!2|X42^c%kPHEaY1hr4i?>hJcR@c_`t)5IKIh0xSj-BH$ mNr<9&y3H8`K@bE%*y0})-;l9L10odw0000 Date: Fri, 19 Sep 2025 19:31:18 +0000 Subject: [PATCH 104/143] Automatic changelog update --- Resources/Changelog/Changelog.yml | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index dba20ff953..616c073e8e 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,12 +1,4 @@ Entries: -- author: BigfootBravo - changes: - - message: Cargo acquisition slips can now fit into folders, clipboards, and envelopes, - like other papers can. - type: Fix - id: 8477 - time: '2025-05-14T04:42:07.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/37439 - author: Hitlinemoss changes: - message: The chef's closet no longer contains an emergency crowbar. @@ -3953,3 +3945,11 @@ id: 8987 time: '2025-09-18T20:09:45.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/39867 +- author: IProduceWidgets + changes: + - message: The Experimental Lecter 8 (XL8) has been added as an admin event weapon + for roles such as ERT. + type: Add + id: 8988 + time: '2025-09-19T19:30:08.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/40372 From 512f28458c304070918c8658682ad1b92323ce25 Mon Sep 17 00:00:00 2001 From: slarticodefast <161409025+slarticodefast@users.noreply.github.com> Date: Sat, 20 Sep 2025 07:12:10 +0200 Subject: [PATCH 105/143] fix chasm heisentest (#40456) fix chasm test --- Content.IntegrationTests/Tests/Chasm/ChasmTest.cs | 9 --------- 1 file changed, 9 deletions(-) diff --git a/Content.IntegrationTests/Tests/Chasm/ChasmTest.cs b/Content.IntegrationTests/Tests/Chasm/ChasmTest.cs index 05c0d6a829..1754302ced 100644 --- a/Content.IntegrationTests/Tests/Chasm/ChasmTest.cs +++ b/Content.IntegrationTests/Tests/Chasm/ChasmTest.cs @@ -131,14 +131,5 @@ public sealed class ChasmTest : MovementTest // Check that the player no longer hooked. Assert.That(grapplingSystem.IsEntityHooked(SPlayer), Is.False, "Player still hooked after dropping the grappling gun."); Assert.That(HasComp(Player), Is.False, "Player still has the JointRelayTargetComponent after dropping the grappling gun."); - - // Attempt (and fail) to walk past the chasm. - await Move(DirectionFlag.West, 1f); - - // Wait until we get deleted. - await Pair.RunSeconds(5f); - - // Check that the player was deleted - AssertDeleted(Player); } } From 0c7b1e9163888e87664b061085912510f32b321b Mon Sep 17 00:00:00 2001 From: IProduceWidgets <107586145+IProduceWidgets@users.noreply.github.com> Date: Sat, 20 Sep 2025 14:10:21 -0400 Subject: [PATCH 106/143] Update Oasis Teg (#40463) --- Resources/Maps/oasis.yml | 5625 +++++++++++++++++++++++++------------- 1 file changed, 3649 insertions(+), 1976 deletions(-) diff --git a/Resources/Maps/oasis.yml b/Resources/Maps/oasis.yml index 07f2bd953c..c29ea16fcb 100644 --- a/Resources/Maps/oasis.yml +++ b/Resources/Maps/oasis.yml @@ -1,11 +1,11 @@ meta: format: 7 category: Map - engineVersion: 267.1.0 + engineVersion: 266.0.0 forkId: "" forkVersion: "" - time: 09/19/2025 16:33:00 - entityCount: 31134 + time: 09/20/2025 09:29:01 + entityCount: 31382 maps: - 1 grids: @@ -146,11 +146,11 @@ entities: version: 7 1,-2: ind: 1,-2 - tiles: DAAAAAAAAAwAAAAAAQACAAAAAAAADAAAAAAAAAwAAAAAAgACAAAAAAAAFQAAAAAAABUAAAAAAAAVAAAAAAAAFQAAAAAAAAIAAAAAAAAUAAAAAAEAFAAAAAACABsAAAAAAgAUAAAAAAAAFAAAAAADAAwAAAAAAQAMAAAAAAIAHAAAAAADAAwAAAAAAAAMAAAAAAEAAgAAAAAAABUAAAAAAAAVAAAAAAAAFQAAAAAAABUAAAAAAAACAAAAAAAAFAAAAAAAABQAAAAAAgACAAAAAAAAFAAAAAABABQAAAAAAwAMAAAAAAAADAAAAAAAAAIAAAAAAAAMAAAAAAMADAAAAAAAAAIAAAAAAAACAAAAAAAADwAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAABQAAAAAAwAUAAAAAAEAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAADwAAAAAAAA8AAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAAUAAAAAAAAFAAAAAABAAIAAAAAAAAUAAAAAAAAFAAAAAACAA8AAAAAAAAPAAAAAAAADwAAAAAAAA8AAAAAAAAPAAAAAAAADwAAAAAAAA8AAAAAAAAPAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAFAAAAAADABQAAAAAAgACAAAAAAAAFAAAAAAAABQAAAAAAgACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAAPAAAAAAAAAgAAAAAAABQAAAAAAAAUAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAAPAAAAAAAADwAAAAAAAA8AAAAAAAAPAAAAAAAADwAAAAAAAAIAAAAAAAAUAAAAAAAAFAAAAAABAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAADwAAAAAAAA8AAAAAAAACAAAAAAAAAgAAAAAAAA8AAAAAAAACAAAAAAAAFAAAAAAAABQAAAAAAQAUAAAAAAIAFAAAAAABABQAAAAAAQAUAAAAAAEAFAAAAAACABQAAAAAAQAUAAAAAAMAAgAAAAAAAAIAAAAAAAAPAAAAAAAAAgAAAAAAAAIAAAAAAAAPAAAAAAAAAgAAAAAAABQAAAAAAAAUAAAAAAIAAgAAAAAAAAIAAAAAAAAUAAAAAAMAFAAAAAADABQAAAAAAQAUAAAAAAAAFAAAAAABABQAAAAAAwACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAADwAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAAUAAAAAAIAFAAAAAABABQAAAAAAwAUAAAAAAAAFAAAAAACABQAAAAAAwAUAAAAAAIAFAAAAAACAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAFAAAAAADABQAAAAAAwACAAAAAAAAFAAAAAADABQAAAAAAQAUAAAAAAIAFAAAAAABABQAAAAAAQAUAAAAAAAAFAAAAAAAABQAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAABQAAAAAAwAUAAAAAAAAAgAAAAAAABQAAAAAAwAUAAAAAAMAFAAAAAABABQAAAAAAgAUAAAAAAMAFAAAAAADABQAAAAAAAAUAAAAAAIAAgAAAAAAAAIAAAAAAAACAAAAAAAADwAAAAAAAAIAAAAAAAAUAAAAAAMAFAAAAAADAAIAAAAAAAAUAAAAAAAAFAAAAAADABQAAAAAAwAUAAAAAAEAFAAAAAACABQAAAAAAAAUAAAAAAIAFAAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAFAAAAAABABQAAAAAAQACAAAAAAAAFAAAAAAAAAIAAAAAAAAUAAAAAAAAFAAAAAABABQAAAAAAQAUAAAAAAMAFAAAAAAAABQAAAAAAwACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAB0AAAAAAAApAAAAAAEABQAAAAACAAUAAAAAAwAUAAAAAAMAFAAAAAAAABQAAAAAAwAUAAAAAAAAFAAAAAACAAIAAAAAAAAUAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAAdAAAAAAIAKQAAAAACAA== + tiles: DAAAAAAAAAwAAAAAAQACAAAAAAAADAAAAAAAAAwAAAAAAgACAAAAAAAAFQAAAAAAABUAAAAAAAAVAAAAAAAAFQAAAAAAAAIAAAAAAAAUAAAAAAEAFAAAAAACABsAAAAAAgAUAAAAAAAAFAAAAAADAAwAAAAAAQAMAAAAAAIAHAAAAAADAAwAAAAAAAAMAAAAAAEAAgAAAAAAABUAAAAAAAAVAAAAAAAAFQAAAAAAABUAAAAAAAACAAAAAAAAFAAAAAAAABQAAAAAAgACAAAAAAAAFAAAAAABABQAAAAAAwAMAAAAAAAADAAAAAAAAAIAAAAAAAAMAAAAAAMADAAAAAAAAAIAAAAAAAACAAAAAAAADwAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAABQAAAAAAwAUAAAAAAEAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAADwAAAAAAAA8AAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAAUAAAAAAAAFAAAAAABAAIAAAAAAAAUAAAAAAAAFAAAAAACAAIAAAAAAAAPAAAAAAAADwAAAAAAAA8AAAAAAAAPAAAAAAAADwAAAAAAAA8AAAAAAAAPAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAFAAAAAADABQAAAAAAgACAAAAAAAAFAAAAAAAABQAAAAAAgACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAAPAAAAAAAAAgAAAAAAABQAAAAAAAAUAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAAPAAAAAAAADwAAAAAAAA8AAAAAAAAPAAAAAAAADwAAAAAAAAIAAAAAAAAUAAAAAAAAFAAAAAABAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAADwAAAAAAAA8AAAAAAAACAAAAAAAAAgAAAAAAAA8AAAAAAAACAAAAAAAAFAAAAAAAABQAAAAAAQAUAAAAAAIAFAAAAAABABQAAAAAAQAUAAAAAAEAFAAAAAACABQAAAAAAQAUAAAAAAMAAgAAAAAAAAIAAAAAAAAPAAAAAAAAAgAAAAAAAAIAAAAAAAAPAAAAAAAAAgAAAAAAABQAAAAAAAAUAAAAAAIAAgAAAAAAAAIAAAAAAAAUAAAAAAMAFAAAAAADABQAAAAAAQAUAAAAAAAAFAAAAAABABQAAAAAAwACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAADwAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAAUAAAAAAIAFAAAAAABABQAAAAAAwAUAAAAAAAAFAAAAAACABQAAAAAAwAUAAAAAAIAFAAAAAACAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAFAAAAAADABQAAAAAAwACAAAAAAAAFAAAAAADABQAAAAAAQAUAAAAAAIAFAAAAAABABQAAAAAAQAUAAAAAAAAFAAAAAAAABQAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAABQAAAAAAwAUAAAAAAAAAgAAAAAAABQAAAAAAwAUAAAAAAMAFAAAAAABABQAAAAAAgAUAAAAAAMAFAAAAAADABQAAAAAAAAUAAAAAAIAAgAAAAAAAAIAAAAAAAACAAAAAAAADwAAAAAAAAIAAAAAAAAUAAAAAAMAFAAAAAADAAIAAAAAAAAUAAAAAAAAFAAAAAADABQAAAAAAwAUAAAAAAEAFAAAAAACABQAAAAAAAAUAAAAAAIAFAAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAFAAAAAABABQAAAAAAQACAAAAAAAAFAAAAAAAAAIAAAAAAAAUAAAAAAAAFAAAAAABABQAAAAAAQAUAAAAAAMAFAAAAAAAABQAAAAAAwACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAB0AAAAAAAApAAAAAAEABQAAAAACAAUAAAAAAwAUAAAAAAMAFAAAAAAAABQAAAAAAwAUAAAAAAAAFAAAAAACAAIAAAAAAAAUAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAAdAAAAAAIAKQAAAAACAA== version: 7 0,-2: ind: 0,-2 - tiles: EQAAAAABABEAAAAAAAACAAAAAAAADgAAAAAAAAIAAAAAAAAeAAAAAAAAHgAAAAAAAAIAAAAAAAAeAAAAAAAAHgAAAAAAAAIAAAAAAAAOAAAAAAAAAgAAAAAAAAwAAAAAAAAMAAAAAAMADAAAAAADABEAAAAAAAARAAAAAAIAAgAAAAAAAA4AAAAAAAACAAAAAAAAHgAAAAAAAB4AAAAAAAACAAAAAAAAHgAAAAAAAB4AAAAAAAACAAAAAAAADgAAAAAAAAIAAAAAAAAMAAAAAAEADAAAAAAAAAwAAAAAAwARAAAAAAMAEQAAAAABAAIAAAAAAAAOAAAAAAAAAgAAAAAAAAIAAAAAAAAeAAAAAAAAAgAAAAAAAB4AAAAAAAACAAAAAAAAAgAAAAAAAA4AAAAAAAACAAAAAAAADAAAAAADAAwAAAAAAAAMAAAAAAAAEQAAAAAAABEAAAAAAgACAAAAAAAAAgAAAAAAAA4AAAAAAAAOAAAAAAAADgAAAAAAAAIAAAAAAAAOAAAAAAAADgAAAAAAAA4AAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAABEAAAAAAQARAAAAAAAAEQAAAAACAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAA8AAAAAAAAPAAAAAAAADwAAAAAAAA8AAAAAAAARAAAAAAEAEQAAAAACABEAAAAAAAAPAAAAAAAADwAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAAPAAAAAAAADwAAAAAAAA8AAAAAAAAPAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAEQAAAAADABEAAAAAAQARAAAAAAAAAgAAAAAAAA8AAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAADwAAAAAAAA8AAAAAAAAPAAAAAAAADwAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAABEAAAAAAwARAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAAPAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAARAAAAAAIAEQAAAAAAAAIAAAAAAAAUAAAAAAIAFAAAAAACABQAAAAAAgAUAAAAAAEAFAAAAAABABQAAAAAAgAUAAAAAAMAFAAAAAADABQAAAAAAQAUAAAAAAAAFAAAAAAAABQAAAAAAQAUAAAAAAAAEQAAAAABABEAAAAAAgAUAAAAAAEAFAAAAAAAABQAAAAAAQAUAAAAAAEAFAAAAAAAABQAAAAAAQAUAAAAAAEAFAAAAAABABQAAAAAAAAUAAAAAAEAFAAAAAACABQAAAAAAAAUAAAAAAAAFAAAAAAAABEAAAAAAgARAAAAAAAAAgAAAAAAABQAAAAAAwAUAAAAAAIAFAAAAAABAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAABQAAAAAAAAUAAAAAAEAFAAAAAAAABQAAAAAAQARAAAAAAMAEQAAAAACAAIAAAAAAAAUAAAAAAMAFAAAAAAAABQAAAAAAAACAAAAAAAADAAAAAACAAwAAAAAAgAMAAAAAAAADAAAAAAAAAIAAAAAAAAUAAAAAAAAFAAAAAABABQAAAAAAgAUAAAAAAIAEQAAAAABABEAAAAAAwACAAAAAAAAFAAAAAABABQAAAAAAwAUAAAAAAMAAgAAAAAAAAwAAAAAAQAMAAAAAAEADAAAAAADAAwAAAAAAgAcAAAAAAMAFAAAAAADABQAAAAAAAAUAAAAAAAAFAAAAAAAABEAAAAAAgARAAAAAAMAAgAAAAAAABQAAAAAAAAUAAAAAAIAFAAAAAABAAIAAAAAAAAMAAAAAAEADAAAAAAAAAwAAAAAAQAMAAAAAAMAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAARAAAAAAEAEQAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAAKAAAAAAEACgAAAAACAAoAAAAAAAAKAAAAAAMAAQAAAAADAAEAAAAAAwADAAAAAAAAAwAAAAAAAAYAAAAAAwAGAAAAAAEABgAAAAABAAYAAAAAAwAGAAAAAAIABgAAAAACAAYAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAA== + tiles: EQAAAAABABEAAAAAAAACAAAAAAAADgAAAAAAAAIAAAAAAAAeAAAAAAAAHgAAAAAAAAIAAAAAAAAeAAAAAAAAHgAAAAAAAAIAAAAAAAAOAAAAAAAAAgAAAAAAAAwAAAAAAAAMAAAAAAMADAAAAAADABEAAAAAAAARAAAAAAIAAgAAAAAAAA4AAAAAAAACAAAAAAAAHgAAAAAAAB4AAAAAAAACAAAAAAAAHgAAAAAAAB4AAAAAAAACAAAAAAAADgAAAAAAAAIAAAAAAAAMAAAAAAEADAAAAAAAAAwAAAAAAwARAAAAAAMAEQAAAAABAAIAAAAAAAAOAAAAAAAAAgAAAAAAAAIAAAAAAAAeAAAAAAAAAgAAAAAAAB4AAAAAAAACAAAAAAAAAgAAAAAAAA4AAAAAAAACAAAAAAAADAAAAAADAAwAAAAAAAAMAAAAAAAAEQAAAAAAABEAAAAAAgACAAAAAAAAAgAAAAAAAA4AAAAAAAAOAAAAAAAADgAAAAAAAAIAAAAAAAAOAAAAAAAADgAAAAAAAA4AAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAMwAAAAAAABEAAAAAAQARAAAAAAAAEQAAAAACAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAARAAAAAAEAEQAAAAACABEAAAAAAAAPAAAAAAAADwAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAAPAAAAAAAADwAAAAAAAA8AAAAAAAAPAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAEQAAAAADABEAAAAAAQARAAAAAAAAAgAAAAAAAA8AAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAADwAAAAAAAA8AAAAAAAAPAAAAAAAADwAAAAAAAA8AAAAAAAACAAAAAAAAAgAAAAAAABEAAAAAAwARAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAAPAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAARAAAAAAIAEQAAAAAAAAIAAAAAAAAUAAAAAAIAFAAAAAACABQAAAAAAgAUAAAAAAEAFAAAAAABABQAAAAAAgAUAAAAAAMAFAAAAAADABQAAAAAAQAUAAAAAAAAFAAAAAAAABQAAAAAAQAUAAAAAAAAEQAAAAABABEAAAAAAgAUAAAAAAEAFAAAAAAAABQAAAAAAQAUAAAAAAEAFAAAAAAAABQAAAAAAQAUAAAAAAEAFAAAAAABABQAAAAAAAAUAAAAAAEAFAAAAAACABQAAAAAAAAUAAAAAAAAFAAAAAAAABEAAAAAAgARAAAAAAAAAgAAAAAAABQAAAAAAwAUAAAAAAIAFAAAAAABAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAABQAAAAAAAAUAAAAAAEAFAAAAAAAABQAAAAAAQARAAAAAAMAEQAAAAACAAIAAAAAAAAUAAAAAAMAFAAAAAAAABQAAAAAAAACAAAAAAAADAAAAAACAAwAAAAAAgAMAAAAAAAADAAAAAAAAAIAAAAAAAAUAAAAAAAAFAAAAAABABQAAAAAAgAUAAAAAAIAEQAAAAABABEAAAAAAwACAAAAAAAAFAAAAAABABQAAAAAAwAUAAAAAAMAAgAAAAAAAAwAAAAAAQAMAAAAAAEADAAAAAADAAwAAAAAAgAcAAAAAAMAFAAAAAADABQAAAAAAAAUAAAAAAAAFAAAAAAAABEAAAAAAgARAAAAAAMAAgAAAAAAABQAAAAAAAAUAAAAAAIAFAAAAAABAAIAAAAAAAAMAAAAAAEADAAAAAAAAAwAAAAAAQAMAAAAAAMAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAARAAAAAAEAEQAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAAKAAAAAAEACgAAAAACAAoAAAAAAAAKAAAAAAMAAQAAAAADAAEAAAAAAwADAAAAAAAAAwAAAAAAAAYAAAAAAwAGAAAAAAEABgAAAAABAAYAAAAAAwAGAAAAAAIABgAAAAACAAYAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAwAAAAAAAA== version: 7 -1,-2: ind: -1,-2 @@ -290,11 +290,11 @@ entities: version: 7 -2,3: ind: -2,3 - tiles: DgAAAAAAADEAAAAAAAAOAAAAAAAAMQAAAAAAAA4AAAAAAAAxAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAA4AAAAAAAAxAAAAAAAADgAAAAAAADEAAAAAAAAOAAAAAAAAMQAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAAOAAAAAAAAMQAAAAAAAA4AAAAAAAAxAAAAAAAADgAAAAAAAA4AAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAADgAAAAAAADEAAAAAAAAOAAAAAAAAMQAAAAAAADEAAAAAAAAxAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAA4AAAAAAAAxAAAAAAAADgAAAAAAAA4AAAAAAAAOAAAAAAAADgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAAOAAAAAAAAMQAAAAAAADEAAAAAAAAxAAAAAAAAMQAAAAAAADEAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAMQAAAAAAADEAAAAAAAAOAAAAAAAADgAAAAAAAA4AAAAAAAAOAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAKgAAAAAAADEAAAAAAAAxAAAAAAAAMQAAAAAAAA4AAAAAAAAOAAAAAAAADgAAAAAAAA4AAAAAAAAxAAAAAAAAKgAAAAAMACoAAAAAAAAqAAAAAAYAKgAAAAAMACoAAAAAAAAqAAAAAAAAKgAAAAAAACoAAAAAAAAxAAAAAAAAMQAAAAAAADEAAAAAAAAxAAAAAAAAMQAAAAAAADEAAAAAAAAxAAAAAAAAMQAAAAAAADEAAAAAAAAqAAAAAAAAKgAAAAAAACoAAAAADAAqAAAAAAAAKgAAAAAAACoAAAAAAAAqAAAAAAAADgAAAAAAAA4AAAAAAAAOAAAAAAAADgAAAAAAAA4AAAAAAAAOAAAAAAAADgAAAAAAAA4AAAAAAAAxAAAAAAAAMQAAAAAAACoAAAAAAAAqAAAAAAAAKgAAAAAIACoAAAAAAAAqAAAAAAAAAgAAAAAAAA4AAAAAAAAOAAAAAAAADgAAAAAAAA4AAAAAAAAOAAAAAAAADgAAAAAAAA4AAAAAAAAOAAAAAAAADgAAAAAAAA4AAAAAAAAOAAAAAAAAKgAAAAAAACoAAAAAAAAqAAAAAAAAKgAAAAAAAA4AAAAAAAAOAAAAAAAADgAAAAAAAA4AAAAAAAAOAAAAAAAADgAAAAAAAA4AAAAAAAAOAAAAAAAADgAAAAAAAA4AAAAAAAAOAAAAAAAADgAAAAAAACoAAAAAAAAqAAAAAAAAKgAAAAAAACoAAAAAAAAOAAAAAAAADgAAAAAAAA4AAAAAAAAOAAAAAAAADgAAAAAAAA4AAAAAAAAOAAAAAAAADgAAAAAAAA4AAAAAAAAOAAAAAAAADgAAAAAAAA4AAAAAAAAqAAAAAAAAKgAAAAAAACoAAAAAAAAOAAAAAAAADgAAAAAAAA4AAAAAAAAOAAAAAAAADgAAAAAAAA4AAAAAAAAOAAAAAAAADgAAAAAAAA4AAAAAAAAOAAAAAAAADgAAAAAAAA4AAAAAAAAOAAAAAAAAKgAAAAAAACoAAAAAAAAqAAAAAAAADgAAAAAAAA4AAAAAAAAOAAAAAAAADgAAAAAAAA4AAAAAAAAOAAAAAAAADgAAAAAAAA4AAAAAAAAOAAAAAAAADgAAAAAAAA4AAAAAAAAOAAAAAAAADgAAAAAAAA4AAAAAAAAqAAAAAAAADgAAAAAAAA4AAAAAAAAOAAAAAAAADgAAAAAAAA4AAAAAAAAOAAAAAAAADgAAAAAAAA4AAAAAAAAOAAAAAAAADgAAAAAAAA4AAAAAAAAOAAAAAAAADgAAAAAAAA4AAAAAAAAOAAAAAAAAKgAAAAAAAA4AAAAAAAAOAAAAAAAADgAAAAAAAA== + tiles: DgAAAAAAADEAAAAAAAAOAAAAAAAAMQAAAAAAAA4AAAAAAAAxAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAA4AAAAAAAAxAAAAAAAADgAAAAAAADEAAAAAAAAOAAAAAAAAMQAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAAOAAAAAAAAMQAAAAAAAA4AAAAAAAAxAAAAAAAADgAAAAAAAA4AAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAADgAAAAAAADEAAAAAAAAOAAAAAAAAMQAAAAAAADEAAAAAAAAxAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAA4AAAAAAAAxAAAAAAAADgAAAAAAAA4AAAAAAAAOAAAAAAAADgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAAOAAAAAAAAMQAAAAAAADEAAAAAAAAxAAAAAAAAMQAAAAAAADEAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAMQAAAAAAADEAAAAAAAAOAAAAAAAADgAAAAAAAA4AAAAAAAAOAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAADEAAAAAAAAxAAAAAAAAMQAAAAAAAA4AAAAAAAAOAAAAAAAADgAAAAAAAA4AAAAAAAAxAAAAAAAAKgAAAAAMACoAAAAAAAAqAAAAAAYAKgAAAAAMACoAAAAAAAAqAAAAAAAAKgAAAAAAACoAAAAAAAAxAAAAAAAAMQAAAAAAADEAAAAAAAAxAAAAAAAAMQAAAAAAADEAAAAAAAAxAAAAAAAAMQAAAAAAADEAAAAAAAAqAAAAAAAAKgAAAAAAACoAAAAADAAqAAAAAAAAKgAAAAAAACoAAAAAAAAqAAAAAAAADgAAAAAAAA4AAAAAAAAOAAAAAAAADgAAAAAAAA4AAAAAAAAOAAAAAAAADgAAAAAAAA4AAAAAAAAxAAAAAAAAMQAAAAAAACoAAAAAAAAqAAAAAAAAKgAAAAAIACoAAAAAAAAqAAAAAAAAAgAAAAAAAA4AAAAAAAAOAAAAAAAADgAAAAAAAA4AAAAAAAAOAAAAAAAADgAAAAAAAA4AAAAAAAAOAAAAAAAADgAAAAAAAA4AAAAAAAAOAAAAAAAAKgAAAAAAACoAAAAAAAAqAAAAAAAAKgAAAAAAAA4AAAAAAAAOAAAAAAAADgAAAAAAAA4AAAAAAAAOAAAAAAAADgAAAAAAAA4AAAAAAAAOAAAAAAAADgAAAAAAAA4AAAAAAAAOAAAAAAAADgAAAAAAACoAAAAAAAAqAAAAAAAAKgAAAAAAACoAAAAAAAAOAAAAAAAADgAAAAAAAA4AAAAAAAAOAAAAAAAADgAAAAAAAA4AAAAAAAAOAAAAAAAADgAAAAAAAA4AAAAAAAAOAAAAAAAADgAAAAAAAA4AAAAAAAAqAAAAAAAAKgAAAAAAACoAAAAAAAAOAAAAAAAADgAAAAAAAA4AAAAAAAAOAAAAAAAADgAAAAAAAA4AAAAAAAAOAAAAAAAADgAAAAAAAA4AAAAAAAAOAAAAAAAADgAAAAAAAA4AAAAAAAAOAAAAAAAAKgAAAAAAACoAAAAAAAAqAAAAAAAADgAAAAAAAA4AAAAAAAAOAAAAAAAADgAAAAAAAA4AAAAAAAAOAAAAAAAADgAAAAAAAA4AAAAAAAAOAAAAAAAADgAAAAAAAA4AAAAAAAAOAAAAAAAADgAAAAAAAA4AAAAAAAAqAAAAAAAADgAAAAAAAA4AAAAAAAAOAAAAAAAADgAAAAAAAA4AAAAAAAAOAAAAAAAADgAAAAAAAA4AAAAAAAAOAAAAAAAADgAAAAAAAA4AAAAAAAAOAAAAAAAADgAAAAAAAA4AAAAAAAAOAAAAAAAAKgAAAAAAAA4AAAAAAAAOAAAAAAAADgAAAAAAAA== version: 7 -1,3: ind: -1,3 - tiles: AgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAABEAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAABEAAAAAAQARAAAAAAIAEQAAAAAAABEAAAAAAQARAAAAAAMAEQAAAAACABEAAAAAAQARAAAAAAAAEQAAAAACABEAAAAAAAARAAAAAAEAEQAAAAAAABEAAAAAAQACAAAAAAAAAgAAAAAAAAIAAAAAAAARAAAAAAIAEQAAAAADABEAAAAAAAARAAAAAAAAEQAAAAACABEAAAAAAAARAAAAAAAAEQAAAAACABEAAAAAAwARAAAAAAEAEQAAAAABABEAAAAAAgARAAAAAAMAAgAAAAAAAAIAAAAAAAACAAAAAAAAEQAAAAADABEAAAAAAQARAAAAAAIAEQAAAAABABEAAAAAAwACAAAAAAAADwAAAAAAAAIAAAAAAAAPAAAAAAAAAgAAAAAAABEAAAAAAgARAAAAAAIAEQAAAAACAAIAAAAAAAACAAAAAAAAAgAAAAAAABEAAAAAAwARAAAAAAAAEQAAAAACABEAAAAAAwARAAAAAAEAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAARAAAAAAAAEQAAAAABABEAAAAAAAAaAAAAAAAAAgAAAAAAAAIAAAAAAAARAAAAAAEAEQAAAAACABEAAAAAAAARAAAAAAEAEQAAAAADAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAEQAAAAACABEAAAAAAAARAAAAAAMAKgAAAAAAACoAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAACoAAAAAAAAqAAAAAAAAKgAAAAAAACoAAAAAAAAOAAAAAAAADgAAAAAAAA4AAAAAAAAOAAAAAAAAAgAAAAAAABoAAAAAAAACAAAAAAAAGgAAAAAAAAIAAAAAAAAOAAAAAAAADgAAAAAAAA4AAAAAAAAqAAAAAAUAKgAAAAAAAA4AAAAAAAAOAAAAAAAADgAAAAAAAA4AAAAAAAAOAAAAAAAADgAAAAAAAA4AAAAAAAAOAAAAAAAADgAAAAAAAA4AAAAAAAAOAAAAAAAADgAAAAAAAA4AAAAAAAAOAAAAAAAADgAAAAAAAA4AAAAAAAAOAAAAAAAADgAAAAAAAA4AAAAAAAAOAAAAAAAADgAAAAAAAA4AAAAAAAAOAAAAAAAADgAAAAAAAA4AAAAAAAAOAAAAAAAADgAAAAAAAA4AAAAAAAAOAAAAAAAADgAAAAAAAA4AAAAAAAAOAAAAAAAADgAAAAAAAA4AAAAAAAAOAAAAAAAADgAAAAAAAA4AAAAAAAAOAAAAAAAADgAAAAAAAA4AAAAAAAAOAAAAAAAADgAAAAAAAA4AAAAAAAAOAAAAAAAADgAAAAAAAA4AAAAAAAAOAAAAAAAADgAAAAAAAA4AAAAAAAAOAAAAAAAADgAAAAAAAA4AAAAAAAAOAAAAAAAADgAAAAAAAA4AAAAAAAAOAAAAAAAADgAAAAAAAA4AAAAAAAAOAAAAAAAADgAAAAAAAA4AAAAAAAAOAAAAAAAADgAAAAAAAA4AAAAAAAAOAAAAAAAADgAAAAAAAA4AAAAAAAAOAAAAAAAADgAAAAAAAA4AAAAAAAAOAAAAAAAADgAAAAAAAA4AAAAAAAAOAAAAAAAADgAAAAAAAA4AAAAAAAAOAAAAAAAADgAAAAAAAA4AAAAAAAAOAAAAAAAADgAAAAAAAA4AAAAAAAAOAAAAAAAADgAAAAAAAA4AAAAAAAAOAAAAAAAADgAAAAAAAA4AAAAAAAAOAAAAAAAADgAAAAAAAA4AAAAAAAAOAAAAAAAADgAAAAAAAA4AAAAAAAAOAAAAAAAADgAAAAAAAA4AAAAAAAAOAAAAAAAADgAAAAAAAA4AAAAAAAAOAAAAAAAADgAAAAAAAA4AAAAAAAAOAAAAAAAADgAAAAAAAA4AAAAAAAAOAAAAAAAADgAAAAAAAA4AAAAAAAAOAAAAAAAADgAAAAAAAA4AAAAAAAAOAAAAAAAADgAAAAAAAA4AAAAAAAAOAAAAAAAADgAAAAAAAA4AAAAAAAAOAAAAAAAADgAAAAAAAA4AAAAAAAAOAAAAAAAADgAAAAAAAA4AAAAAAAAOAAAAAAAADgAAAAAAAA== + tiles: AgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAABEAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAABEAAAAAAQARAAAAAAIAEQAAAAAAABEAAAAAAQARAAAAAAMAEQAAAAACABEAAAAAAQARAAAAAAAAEQAAAAACABEAAAAAAAARAAAAAAEAEQAAAAAAABEAAAAAAQACAAAAAAAAAgAAAAAAAAIAAAAAAAARAAAAAAIAEQAAAAADABEAAAAAAAARAAAAAAAAEQAAAAACABEAAAAAAAARAAAAAAAAEQAAAAACABEAAAAAAwARAAAAAAEAEQAAAAABABEAAAAAAgARAAAAAAMAAgAAAAAAAAIAAAAAAAACAAAAAAAAEQAAAAADABEAAAAAAQARAAAAAAIAEQAAAAABABEAAAAAAwACAAAAAAAADwAAAAAAAAIAAAAAAAAPAAAAAAAAAgAAAAAAABEAAAAAAgARAAAAAAIAEQAAAAACAAIAAAAAAAACAAAAAAAAAgAAAAAAABEAAAAAAwARAAAAAAAAEQAAAAACABEAAAAAAwARAAAAAAEAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAARAAAAAAAAEQAAAAABABEAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAARAAAAAAEAEQAAAAACABEAAAAAAAARAAAAAAEAEQAAAAADAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAEQAAAAACABEAAAAAAAARAAAAAAMAGgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAAAIAAAAAAAACAAAAAAAAAgAAAAAAACoAAAAAAAAqAAAAAAAAKgAAAAAAACoAAAAAAAAOAAAAAAAADgAAAAAAAA4AAAAAAAAOAAAAAAAAAgAAAAAAABoAAAAAAAACAAAAAAAAGgAAAAAAAAIAAAAAAAAOAAAAAAAADgAAAAAAAA4AAAAAAAAqAAAAAAUAKgAAAAAAAA4AAAAAAAAOAAAAAAAADgAAAAAAAA4AAAAAAAAOAAAAAAAADgAAAAAAAA4AAAAAAAAOAAAAAAAADgAAAAAAAA4AAAAAAAAOAAAAAAAADgAAAAAAAA4AAAAAAAAOAAAAAAAADgAAAAAAAA4AAAAAAAAOAAAAAAAADgAAAAAAAA4AAAAAAAAOAAAAAAAADgAAAAAAAA4AAAAAAAAOAAAAAAAADgAAAAAAAA4AAAAAAAAOAAAAAAAADgAAAAAAAA4AAAAAAAAOAAAAAAAADgAAAAAAAA4AAAAAAAAOAAAAAAAADgAAAAAAAA4AAAAAAAAOAAAAAAAADgAAAAAAAA4AAAAAAAAOAAAAAAAADgAAAAAAAA4AAAAAAAAOAAAAAAAADgAAAAAAAA4AAAAAAAAOAAAAAAAADgAAAAAAAA4AAAAAAAAOAAAAAAAADgAAAAAAAA4AAAAAAAAOAAAAAAAADgAAAAAAAA4AAAAAAAAOAAAAAAAADgAAAAAAAA4AAAAAAAAOAAAAAAAADgAAAAAAAA4AAAAAAAAOAAAAAAAADgAAAAAAAA4AAAAAAAAOAAAAAAAADgAAAAAAAA4AAAAAAAAOAAAAAAAADgAAAAAAAA4AAAAAAAAOAAAAAAAADgAAAAAAAA4AAAAAAAAOAAAAAAAADgAAAAAAAA4AAAAAAAAOAAAAAAAADgAAAAAAAA4AAAAAAAAOAAAAAAAADgAAAAAAAA4AAAAAAAAOAAAAAAAADgAAAAAAAA4AAAAAAAAOAAAAAAAADgAAAAAAAA4AAAAAAAAOAAAAAAAADgAAAAAAAA4AAAAAAAAOAAAAAAAADgAAAAAAAA4AAAAAAAAOAAAAAAAADgAAAAAAAA4AAAAAAAAOAAAAAAAADgAAAAAAAA4AAAAAAAAOAAAAAAAADgAAAAAAAA4AAAAAAAAOAAAAAAAADgAAAAAAAA4AAAAAAAAOAAAAAAAADgAAAAAAAA4AAAAAAAAOAAAAAAAADgAAAAAAAA4AAAAAAAAOAAAAAAAADgAAAAAAAA4AAAAAAAAOAAAAAAAADgAAAAAAAA4AAAAAAAAOAAAAAAAADgAAAAAAAA4AAAAAAAAOAAAAAAAADgAAAAAAAA4AAAAAAAAOAAAAAAAADgAAAAAAAA4AAAAAAAAOAAAAAAAADgAAAAAAAA== version: 7 0,3: ind: 0,3 @@ -6026,6 +6026,8 @@ entities: 3567: -28,35 3568: -29,35 3569: -30,35 + 5098: -25,43 + 5099: -25,41 - node: color: '#FFFFFFFF' id: WarnCornerGreyscaleNW @@ -6058,26 +6060,26 @@ entities: color: '#FFFFFFFF' id: WarnCornerSmallNE decals: - 3556: -22,42 3572: -31,35 3929: -58,-14 + 5092: -19,43 - node: color: '#FFFFFFFF' id: WarnCornerSmallNW decals: 979: -56,-7 983: -56,-3 - 3555: -18,42 3573: -24,35 3928: -54,-14 3940: -56,-9 + 5093: -15,43 - node: color: '#FFFFFFFF' id: WarnCornerSmallSE decals: - 3553: -22,44 3571: -31,37 3927: -58,-9 + 5094: -19,45 - node: color: '#FFFFFFFF' id: WarnCornerSmallSW @@ -6085,10 +6087,10 @@ entities: 977: -56,-1 978: -56,-1 984: -56,-5 - 3554: -18,44 3570: -24,37 3926: -54,-9 3939: -56,-7 + 5095: -15,45 - node: color: '#FFFFFFFF' id: WarnFull @@ -6117,9 +6119,9 @@ entities: 3334: -58,-12 3335: -58,-11 3336: -58,-10 - 3549: -22,43 3924: -58,-13 3945: -54,-15 + 5088: -19,44 - node: color: '#FFFFFFFF' id: WarnLineGreyscaleE @@ -6163,14 +6165,14 @@ entities: decals: 974: -57,-1 3341: -58,-1 - 3546: -19,44 - 3547: -20,44 - 3548: -21,44 3918: -57,-9 3919: -56,-9 3920: -55,-9 3934: -58,-7 3935: -57,-7 + 5089: -18,45 + 5090: -17,45 + 5091: -16,45 - node: color: '#FFFFFFFF' id: WarnLineS @@ -6185,9 +6187,9 @@ entities: 3541: 21,47 3542: 21,48 3543: 21,49 - 3545: -18,43 3925: -54,-13 3938: -56,-8 + 5087: -15,44 - node: color: '#FFFFFFFF' id: WarnLineW @@ -6204,15 +6206,15 @@ entities: 2476: 19,51 2477: 15,53 2478: 11,53 - 3550: -21,42 - 3551: -20,42 - 3552: -19,42 3921: -57,-14 3922: -56,-14 3923: -55,-14 3933: -58,-7 3936: -58,-9 3937: -57,-9 + 5084: -18,43 + 5085: -17,43 + 5086: -16,43 - node: color: '#FFFFFFFF' id: WoodTrimThinCornerNe @@ -7070,11 +7072,11 @@ entities: 0: 37683 1: 2184 3,-8: - 0: 3822 + 0: 36590 4,-7: - 0: 2047 + 0: 2046 3,-7: - 0: 3071 + 0: 3059 4,-6: 0: 61135 3,-6: @@ -8126,18 +8128,17 @@ entities: -5,10: 0: 65535 -4,11: - 0: 7999 + 0: 62463 -5,11: - 0: 32767 + 0: 65535 -4,12: - 0: 34945 - 3: 13072 + 0: 47283 -3,9: 0: 4095 -3,10: 0: 65535 -3,11: - 3: 61408 + 3: 65248 -2,9: 0: 4095 -2,10: @@ -8180,8 +8181,7 @@ entities: -6,12: 0: 65535 -5,12: - 0: 13111 - 3: 34816 + 0: 63487 -12,9: 2: 65497 -13,9: @@ -8246,20 +8246,19 @@ entities: 2: 15 -7,13: 2: 32816 - 0: 1032 + 3: 128 -7,14: 2: 15 -6,13: - 0: 255 + 3: 240 -6,14: 2: 49 -5,13: - 0: 51 - 3: 51208 + 3: 49392 -5,14: 3: 264 -4,13: - 3: 29443 + 3: 28722 0: 136 -4,14: 3: 3 @@ -10041,29 +10040,6 @@ entities: - 16148 - type: Fixtures fixtures: {} - - uid: 8130 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -17.5,49.5 - parent: 2 - - type: DeviceList - devices: - - 8129 - - 28592 - - type: Fixtures - fixtures: {} - - uid: 8131 - components: - - type: Transform - pos: -11.5,44.5 - parent: 2 - - type: DeviceList - devices: - - 28591 - - 8128 - - type: Fixtures - fixtures: {} - uid: 9177 components: - type: Transform @@ -11017,7 +10993,6 @@ entities: - 18562 - 13585 - 13595 - - 18563 - 28561 - type: Fixtures fixtures: {} @@ -12863,6 +12838,41 @@ entities: - 31036 - type: Fixtures fixtures: {} + - uid: 31253 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -11.5,45.5 + parent: 2 + - type: DeviceList + devices: + - 28857 + - 9198 + - type: Fixtures + fixtures: {} + - uid: 31254 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -16.5,50.5 + parent: 2 + - type: DeviceList + devices: + - 8149 + - type: Fixtures + fixtures: {} + - uid: 31353 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -13.5,39.5 + parent: 2 + - type: DeviceList + devices: + - 28844 + - 31169 + - type: Fixtures + fixtures: {} - proto: AirCanister entities: - uid: 2674 @@ -13128,6 +13138,18 @@ entities: - type: Transform pos: 22.5,-28.5 parent: 2 +- proto: AirGrenade + entities: + - uid: 8042 + components: + - type: Transform + pos: -10.523073,43.76045 + parent: 2 + - uid: 31225 + components: + - type: Transform + pos: -10.22099,43.625034 + parent: 2 - proto: Airlock entities: - uid: 769 @@ -13932,6 +13954,17 @@ entities: - DoorBolt - proto: AirlockExternalGlassAtmosphericsLocked entities: + - uid: 8127 + components: + - type: Transform + pos: -14.5,52.5 + parent: 2 + - uid: 8212 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -16.5,51.5 + parent: 2 - uid: 8424 components: - type: Transform @@ -13980,6 +14013,18 @@ entities: 8504: - - DoorStatus - DoorBolt + - uid: 31224 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -13.5,47.5 + parent: 2 + - uid: 31231 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -11.5,47.5 + parent: 2 - proto: AirlockExternalGlassCargoLocked entities: - uid: 11331 @@ -14187,70 +14232,30 @@ entities: 7615: - - DoorStatus - DoorBolt - - uid: 7830 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -11.5,46.5 - parent: 2 - - type: DeviceLinkSink - invokeCounter: 1 - - type: DeviceLinkSource - linkedPorts: - 8048: - - - DoorStatus - - DoorBolt - - uid: 8048 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -13.5,46.5 - parent: 2 - - type: DeviceLinkSink - invokeCounter: 1 - - type: DeviceLinkSource - linkedPorts: - 7830: - - - DoorStatus - - DoorBolt - - uid: 8052 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -15.5,49.5 - parent: 2 - - type: DeviceLinkSink - invokeCounter: 1 - - type: DeviceLinkSource - linkedPorts: - 8053: - - - DoorStatus - - DoorBolt - - uid: 8053 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -15.5,47.5 - parent: 2 - - type: DeviceLinkSink - invokeCounter: 1 - - type: DeviceLinkSource - linkedPorts: - 8052: - - - DoorStatus - - DoorBolt - uid: 12739 components: - type: Transform - rot: 1.5707963267948966 rad pos: 53.5,31.5 parent: 2 + - type: DeviceLinkSink + invokeCounter: 1 + - type: DeviceLinkSource + linkedPorts: + 12743: + - - DoorStatus + - DoorBolt - uid: 12743 components: - type: Transform - rot: 1.5707963267948966 rad pos: 52.5,29.5 parent: 2 + - type: DeviceLinkSink + invokeCounter: 1 + - type: DeviceLinkSource + linkedPorts: + 12739: + - - DoorStatus + - DoorBolt - uid: 12861 components: - type: Transform @@ -15415,7 +15420,7 @@ entities: pos: -22.5,26.5 parent: 2 - type: Door - secondsUntilStateChange: -213220.6 + secondsUntilStateChange: -232512.1 state: Opening - type: DeviceLinkSource lastSignals: @@ -16271,7 +16276,7 @@ entities: lastSignals: DoorStatus: True - type: Door - secondsUntilStateChange: -312049.2 + secondsUntilStateChange: -331340.72 state: Opening - uid: 6934 components: @@ -16283,7 +16288,7 @@ entities: lastSignals: DoorStatus: True - type: Door - secondsUntilStateChange: -312051.8 + secondsUntilStateChange: -331343.34 state: Opening - uid: 6935 components: @@ -16295,7 +16300,7 @@ entities: lastSignals: DoorStatus: True - type: Door - secondsUntilStateChange: -312050.66 + secondsUntilStateChange: -331342.2 state: Opening - uid: 6936 components: @@ -16306,7 +16311,7 @@ entities: lastSignals: DoorStatus: True - type: Door - secondsUntilStateChange: -312049.88 + secondsUntilStateChange: -331341.4 state: Opening - proto: AirlockTheatreLocked entities: @@ -16428,6 +16433,14 @@ entities: - type: DeviceNetwork deviceLists: - 10169 + - uid: 8149 + components: + - type: Transform + pos: -19.5,53.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 31254 - uid: 9168 components: - type: Transform @@ -16891,15 +16904,6 @@ entities: - type: DeviceNetwork deviceLists: - 18564 - - uid: 18563 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -8.5,40.5 - parent: 2 - - type: DeviceNetwork - deviceLists: - - 18564 - uid: 18573 components: - type: Transform @@ -17409,24 +17413,6 @@ entities: - type: DeviceNetwork deviceLists: - 31039 - - uid: 28591 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -9.5,46.5 - parent: 2 - - type: DeviceNetwork - deviceLists: - - 8131 - - uid: 28592 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -15.5,51.5 - parent: 2 - - type: DeviceNetwork - deviceLists: - - 8130 - uid: 28612 components: - type: Transform @@ -17436,6 +17422,15 @@ entities: deviceLists: - 28611 - 29904 + - uid: 28857 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -9.5,46.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 31253 - uid: 28968 components: - type: Transform @@ -37494,116 +37489,6 @@ entities: - type: Transform pos: -42.5,19.5 parent: 2 - - uid: 28645 - components: - - type: Transform - pos: -16.5,52.5 - parent: 2 - - uid: 28646 - components: - - type: Transform - pos: -16.5,51.5 - parent: 2 - - uid: 28647 - components: - - type: Transform - pos: -16.5,50.5 - parent: 2 - - uid: 28648 - components: - - type: Transform - pos: -15.5,52.5 - parent: 2 - - uid: 28649 - components: - - type: Transform - pos: -15.5,51.5 - parent: 2 - - uid: 28650 - components: - - type: Transform - pos: -15.5,50.5 - parent: 2 - - uid: 28651 - components: - - type: Transform - pos: -14.5,52.5 - parent: 2 - - uid: 28652 - components: - - type: Transform - pos: -14.5,51.5 - parent: 2 - - uid: 28653 - components: - - type: Transform - pos: -14.5,50.5 - parent: 2 - - uid: 28654 - components: - - type: Transform - pos: -10.5,47.5 - parent: 2 - - uid: 28655 - components: - - type: Transform - pos: -10.5,46.5 - parent: 2 - - uid: 28656 - components: - - type: Transform - pos: -10.5,45.5 - parent: 2 - - uid: 28657 - components: - - type: Transform - pos: -9.5,47.5 - parent: 2 - - uid: 28658 - components: - - type: Transform - pos: -9.5,46.5 - parent: 2 - - uid: 28659 - components: - - type: Transform - pos: -9.5,45.5 - parent: 2 - - uid: 28660 - components: - - type: Transform - pos: -8.5,47.5 - parent: 2 - - uid: 28661 - components: - - type: Transform - pos: -8.5,46.5 - parent: 2 - - uid: 28662 - components: - - type: Transform - pos: -8.5,45.5 - parent: 2 - - uid: 28663 - components: - - type: Transform - pos: -15.5,53.5 - parent: 2 - - uid: 28664 - components: - - type: Transform - pos: -16.5,54.5 - parent: 2 - - uid: 28665 - components: - - type: Transform - pos: -15.5,54.5 - parent: 2 - - uid: 28666 - components: - - type: Transform - pos: -14.5,54.5 - parent: 2 - uid: 28667 components: - type: Transform @@ -37644,16 +37529,6 @@ entities: - type: Transform pos: -16.5,56.5 parent: 2 - - uid: 28675 - components: - - type: Transform - pos: -15.5,49.5 - parent: 2 - - uid: 28676 - components: - - type: Transform - pos: -11.5,46.5 - parent: 2 - uid: 28677 components: - type: Transform @@ -38204,6 +38079,121 @@ entities: - type: Transform pos: 23.5,52.5 parent: 2 + - uid: 31255 + components: + - type: Transform + pos: -15.5,54.5 + parent: 2 + - uid: 31261 + components: + - type: Transform + pos: -24.5,53.5 + parent: 2 + - uid: 31262 + components: + - type: Transform + pos: -23.5,53.5 + parent: 2 + - uid: 31263 + components: + - type: Transform + pos: -22.5,53.5 + parent: 2 + - uid: 31264 + components: + - type: Transform + pos: -21.5,53.5 + parent: 2 + - uid: 31265 + components: + - type: Transform + pos: -20.5,53.5 + parent: 2 + - uid: 31266 + components: + - type: Transform + pos: -19.5,53.5 + parent: 2 + - uid: 31267 + components: + - type: Transform + pos: -18.5,53.5 + parent: 2 + - uid: 31268 + components: + - type: Transform + pos: -17.5,53.5 + parent: 2 + - uid: 31269 + components: + - type: Transform + pos: -16.5,53.5 + parent: 2 + - uid: 31270 + components: + - type: Transform + pos: -15.5,53.5 + parent: 2 + - uid: 31271 + components: + - type: Transform + pos: -14.5,53.5 + parent: 2 + - uid: 31272 + components: + - type: Transform + pos: -10.5,47.5 + parent: 2 + - uid: 31273 + components: + - type: Transform + pos: -10.5,46.5 + parent: 2 + - uid: 31274 + components: + - type: Transform + pos: -10.5,45.5 + parent: 2 + - uid: 31275 + components: + - type: Transform + pos: -9.5,47.5 + parent: 2 + - uid: 31276 + components: + - type: Transform + pos: -9.5,46.5 + parent: 2 + - uid: 31277 + components: + - type: Transform + pos: -9.5,45.5 + parent: 2 + - uid: 31278 + components: + - type: Transform + pos: -8.5,47.5 + parent: 2 + - uid: 31279 + components: + - type: Transform + pos: -8.5,46.5 + parent: 2 + - uid: 31280 + components: + - type: Transform + pos: -8.5,45.5 + parent: 2 + - uid: 31281 + components: + - type: Transform + pos: -11.5,47.5 + parent: 2 + - uid: 31282 + components: + - type: Transform + pos: -14.5,52.5 + parent: 2 - proto: AtmosFixFreezerMarker entities: - uid: 2169 @@ -39149,6 +39139,11 @@ entities: - type: Transform pos: -31.5,11.5 parent: 2 + - uid: 8846 + components: + - type: Transform + pos: -15.5,54.5 + parent: 2 - uid: 9638 components: - type: Transform @@ -39194,11 +39189,6 @@ entities: - type: Transform pos: -61.5,-5.5 parent: 2 - - uid: 16797 - components: - - type: Transform - pos: -15.5,53.5 - parent: 2 - uid: 20255 components: - type: Transform @@ -40808,6 +40798,12 @@ entities: - type: Transform pos: 36.5,-9.5 parent: 2 + - uid: 31258 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -14.5,50.5 + parent: 2 - proto: ButtonFrameCautionSecurity entities: - uid: 24360 @@ -40838,6 +40834,16 @@ entities: - type: Transform pos: 54.5,26.5 parent: 2 + - uid: 31256 + components: + - type: Transform + pos: -11.5,44.5 + parent: 2 + - uid: 31257 + components: + - type: Transform + pos: -22.5,52.5 + parent: 2 - proto: ButtonFrameExit entities: - uid: 1629 @@ -41114,36 +41120,6 @@ entities: - type: Transform pos: -41.5,-31.5 parent: 2 - - uid: 506 - components: - - type: Transform - pos: -22.5,45.5 - parent: 2 - - uid: 605 - components: - - type: Transform - pos: -22.5,47.5 - parent: 2 - - uid: 606 - components: - - type: Transform - pos: -22.5,46.5 - parent: 2 - - uid: 620 - components: - - type: Transform - pos: -22.5,49.5 - parent: 2 - - uid: 679 - components: - - type: Transform - pos: -22.5,50.5 - parent: 2 - - uid: 715 - components: - - type: Transform - pos: -22.5,48.5 - parent: 2 - uid: 813 components: - type: Transform @@ -46784,6 +46760,11 @@ entities: - type: Transform pos: 18.5,9.5 parent: 2 + - uid: 6457 + components: + - type: Transform + pos: -15.5,43.5 + parent: 2 - uid: 6690 components: - type: Transform @@ -47894,46 +47875,6 @@ entities: - type: Transform pos: -16.5,28.5 parent: 2 - - uid: 8105 - components: - - type: Transform - pos: -22.5,44.5 - parent: 2 - - uid: 8108 - components: - - type: Transform - pos: -17.5,48.5 - parent: 2 - - uid: 8109 - components: - - type: Transform - pos: -17.5,47.5 - parent: 2 - - uid: 8110 - components: - - type: Transform - pos: -17.5,46.5 - parent: 2 - - uid: 8111 - components: - - type: Transform - pos: -16.5,46.5 - parent: 2 - - uid: 8148 - components: - - type: Transform - pos: -23.5,43.5 - parent: 2 - - uid: 8149 - components: - - type: Transform - pos: -23.5,42.5 - parent: 2 - - uid: 8150 - components: - - type: Transform - pos: -23.5,41.5 - parent: 2 - uid: 8189 components: - type: Transform @@ -47999,11 +47940,6 @@ entities: - type: Transform pos: 32.5,-3.5 parent: 2 - - uid: 9000 - components: - - type: Transform - pos: -15.5,46.5 - parent: 2 - uid: 9009 components: - type: Transform @@ -48534,206 +48470,16 @@ entities: - type: Transform pos: -25.5,44.5 parent: 2 - - uid: 9192 - components: - - type: Transform - pos: -24.5,44.5 - parent: 2 - - uid: 9193 - components: - - type: Transform - pos: -23.5,44.5 - parent: 2 - uid: 9194 components: - type: Transform pos: -36.5,34.5 parent: 2 - - uid: 9195 - components: - - type: Transform - pos: -21.5,44.5 - parent: 2 - - uid: 9196 - components: - - type: Transform - pos: -20.5,44.5 - parent: 2 - - uid: 9197 - components: - - type: Transform - pos: -19.5,44.5 - parent: 2 - - uid: 9198 - components: - - type: Transform - pos: -19.5,43.5 - parent: 2 - uid: 9202 components: - type: Transform pos: 41.5,-13.5 parent: 2 - - uid: 9205 - components: - - type: Transform - pos: -22.5,51.5 - parent: 2 - - uid: 9206 - components: - - type: Transform - pos: -21.5,51.5 - parent: 2 - - uid: 9207 - components: - - type: Transform - pos: -20.5,51.5 - parent: 2 - - uid: 9208 - components: - - type: Transform - pos: -19.5,51.5 - parent: 2 - - uid: 9209 - components: - - type: Transform - pos: -18.5,51.5 - parent: 2 - - uid: 9210 - components: - - type: Transform - pos: -17.5,51.5 - parent: 2 - - uid: 9213 - components: - - type: Transform - pos: -22.5,41.5 - parent: 2 - - uid: 9214 - components: - - type: Transform - pos: -21.5,41.5 - parent: 2 - - uid: 9215 - components: - - type: Transform - pos: -20.5,41.5 - parent: 2 - - uid: 9216 - components: - - type: Transform - pos: -19.5,41.5 - parent: 2 - - uid: 9217 - components: - - type: Transform - pos: -18.5,41.5 - parent: 2 - - uid: 9218 - components: - - type: Transform - pos: -17.5,41.5 - parent: 2 - - uid: 9219 - components: - - type: Transform - pos: -16.5,41.5 - parent: 2 - - uid: 9220 - components: - - type: Transform - pos: -15.5,41.5 - parent: 2 - - uid: 9221 - components: - - type: Transform - pos: -14.5,41.5 - parent: 2 - - uid: 9222 - components: - - type: Transform - pos: -13.5,41.5 - parent: 2 - - uid: 9223 - components: - - type: Transform - pos: -12.5,41.5 - parent: 2 - - uid: 9224 - components: - - type: Transform - pos: -11.5,41.5 - parent: 2 - - uid: 9225 - components: - - type: Transform - pos: -10.5,41.5 - parent: 2 - - uid: 9226 - components: - - type: Transform - pos: -9.5,41.5 - parent: 2 - - uid: 9227 - components: - - type: Transform - pos: -9.5,42.5 - parent: 2 - - uid: 9228 - components: - - type: Transform - pos: -9.5,43.5 - parent: 2 - - uid: 9229 - components: - - type: Transform - pos: -9.5,44.5 - parent: 2 - - uid: 9230 - components: - - type: Transform - pos: -15.5,42.5 - parent: 2 - - uid: 9231 - components: - - type: Transform - pos: -15.5,43.5 - parent: 2 - - uid: 9232 - components: - - type: Transform - pos: -15.5,44.5 - parent: 2 - - uid: 9233 - components: - - type: Transform - pos: -15.5,45.5 - parent: 2 - - uid: 9235 - components: - - type: Transform - pos: -15.5,47.5 - parent: 2 - - uid: 9236 - components: - - type: Transform - pos: -15.5,48.5 - parent: 2 - - uid: 9237 - components: - - type: Transform - pos: -14.5,46.5 - parent: 2 - - uid: 9238 - components: - - type: Transform - pos: -13.5,46.5 - parent: 2 - - uid: 9239 - components: - - type: Transform - pos: -12.5,46.5 - parent: 2 - uid: 9258 components: - type: Transform @@ -48829,6 +48575,11 @@ entities: - type: Transform pos: -0.5,52.5 parent: 2 + - uid: 9394 + components: + - type: Transform + pos: -16.5,43.5 + parent: 2 - uid: 9398 components: - type: Transform @@ -59429,6 +59180,321 @@ entities: - type: Transform pos: 60.5,13.5 parent: 2 + - uid: 31205 + components: + - type: Transform + pos: -16.5,44.5 + parent: 2 + - uid: 31284 + components: + - type: Transform + pos: -24.5,44.5 + parent: 2 + - uid: 31285 + components: + - type: Transform + pos: -23.5,44.5 + parent: 2 + - uid: 31286 + components: + - type: Transform + pos: -22.5,44.5 + parent: 2 + - uid: 31287 + components: + - type: Transform + pos: -21.5,44.5 + parent: 2 + - uid: 31288 + components: + - type: Transform + pos: -20.5,44.5 + parent: 2 + - uid: 31289 + components: + - type: Transform + pos: -19.5,44.5 + parent: 2 + - uid: 31290 + components: + - type: Transform + pos: -19.5,45.5 + parent: 2 + - uid: 31291 + components: + - type: Transform + pos: -19.5,46.5 + parent: 2 + - uid: 31292 + components: + - type: Transform + pos: -19.5,47.5 + parent: 2 + - uid: 31293 + components: + - type: Transform + pos: -19.5,48.5 + parent: 2 + - uid: 31294 + components: + - type: Transform + pos: -19.5,49.5 + parent: 2 + - uid: 31295 + components: + - type: Transform + pos: -19.5,50.5 + parent: 2 + - uid: 31296 + components: + - type: Transform + pos: -19.5,51.5 + parent: 2 + - uid: 31297 + components: + - type: Transform + pos: -20.5,51.5 + parent: 2 + - uid: 31298 + components: + - type: Transform + pos: -21.5,51.5 + parent: 2 + - uid: 31299 + components: + - type: Transform + pos: -22.5,51.5 + parent: 2 + - uid: 31300 + components: + - type: Transform + pos: -23.5,51.5 + parent: 2 + - uid: 31301 + components: + - type: Transform + pos: -18.5,51.5 + parent: 2 + - uid: 31302 + components: + - type: Transform + pos: -17.5,51.5 + parent: 2 + - uid: 31303 + components: + - type: Transform + pos: -16.5,51.5 + parent: 2 + - uid: 31304 + components: + - type: Transform + pos: -15.5,51.5 + parent: 2 + - uid: 31305 + components: + - type: Transform + pos: -14.5,51.5 + parent: 2 + - uid: 31306 + components: + - type: Transform + pos: -14.5,52.5 + parent: 2 + - uid: 31307 + components: + - type: Transform + pos: -19.5,47.5 + parent: 2 + - uid: 31308 + components: + - type: Transform + pos: -18.5,47.5 + parent: 2 + - uid: 31309 + components: + - type: Transform + pos: -17.5,47.5 + parent: 2 + - uid: 31310 + components: + - type: Transform + pos: -16.5,47.5 + parent: 2 + - uid: 31311 + components: + - type: Transform + pos: -15.5,47.5 + parent: 2 + - uid: 31312 + components: + - type: Transform + pos: -14.5,47.5 + parent: 2 + - uid: 31313 + components: + - type: Transform + pos: -13.5,47.5 + parent: 2 + - uid: 31314 + components: + - type: Transform + pos: -12.5,47.5 + parent: 2 + - uid: 31315 + components: + - type: Transform + pos: -11.5,47.5 + parent: 2 + - uid: 31316 + components: + - type: Transform + pos: -23.5,43.5 + parent: 2 + - uid: 31317 + components: + - type: Transform + pos: -23.5,42.5 + parent: 2 + - uid: 31318 + components: + - type: Transform + pos: -23.5,41.5 + parent: 2 + - uid: 31319 + components: + - type: Transform + pos: -23.5,40.5 + parent: 2 + - uid: 31320 + components: + - type: Transform + pos: -22.5,40.5 + parent: 2 + - uid: 31321 + components: + - type: Transform + pos: -20.5,40.5 + parent: 2 + - uid: 31322 + components: + - type: Transform + pos: -19.5,40.5 + parent: 2 + - uid: 31323 + components: + - type: Transform + pos: -18.5,40.5 + parent: 2 + - uid: 31324 + components: + - type: Transform + pos: -21.5,40.5 + parent: 2 + - uid: 31325 + components: + - type: Transform + pos: -16.5,40.5 + parent: 2 + - uid: 31326 + components: + - type: Transform + pos: -15.5,40.5 + parent: 2 + - uid: 31327 + components: + - type: Transform + pos: -14.5,40.5 + parent: 2 + - uid: 31328 + components: + - type: Transform + pos: -13.5,40.5 + parent: 2 + - uid: 31329 + components: + - type: Transform + pos: -17.5,40.5 + parent: 2 + - uid: 31330 + components: + - type: Transform + pos: -11.5,40.5 + parent: 2 + - uid: 31331 + components: + - type: Transform + pos: -12.5,40.5 + parent: 2 + - uid: 31332 + components: + - type: Transform + pos: -9.5,40.5 + parent: 2 + - uid: 31333 + components: + - type: Transform + pos: -10.5,40.5 + parent: 2 + - uid: 31334 + components: + - type: Transform + pos: -8.5,40.5 + parent: 2 + - uid: 31335 + components: + - type: Transform + pos: -8.5,41.5 + parent: 2 + - uid: 31336 + components: + - type: Transform + pos: -8.5,42.5 + parent: 2 + - uid: 31337 + components: + - type: Transform + pos: -14.5,46.5 + parent: 2 + - uid: 31338 + components: + - type: Transform + pos: -14.5,45.5 + parent: 2 + - uid: 31339 + components: + - type: Transform + pos: -20.5,47.5 + parent: 2 + - uid: 31340 + components: + - type: Transform + pos: -14.5,43.5 + parent: 2 + - uid: 31341 + components: + - type: Transform + pos: -14.5,42.5 + parent: 2 + - uid: 31342 + components: + - type: Transform + pos: -14.5,41.5 + parent: 2 + - uid: 31343 + components: + - type: Transform + pos: -21.5,47.5 + parent: 2 + - uid: 31344 + components: + - type: Transform + pos: -22.5,47.5 + parent: 2 + - uid: 31345 + components: + - type: Transform + pos: -23.5,47.5 + parent: 2 - proto: CableApcStack entities: - uid: 21060 @@ -61178,11 +61244,6 @@ entities: - type: Transform pos: 60.5,15.5 parent: 2 - - uid: 5357 - components: - - type: Transform - pos: -8.5,41.5 - parent: 2 - uid: 5449 components: - type: Transform @@ -61611,12 +61672,12 @@ entities: - uid: 6370 components: - type: Transform - pos: -5.5,46.5 + pos: -3.5,47.5 parent: 2 - uid: 6371 components: - type: Transform - pos: -4.5,46.5 + pos: -2.5,45.5 parent: 2 - uid: 6372 components: @@ -61783,11 +61844,6 @@ entities: - type: Transform pos: -5.5,45.5 parent: 2 - - uid: 6457 - components: - - type: Transform - pos: -2.5,46.5 - parent: 2 - uid: 6459 components: - type: Transform @@ -62488,26 +62544,11 @@ entities: - type: Transform pos: -4.5,48.5 parent: 2 - - uid: 9394 - components: - - type: Transform - pos: -5.5,48.5 - parent: 2 - uid: 9395 components: - type: Transform pos: -6.5,48.5 parent: 2 - - uid: 9422 - components: - - type: Transform - pos: -19.5,42.5 - parent: 2 - - uid: 9423 - components: - - type: Transform - pos: -19.5,43.5 - parent: 2 - uid: 9468 components: - type: Transform @@ -66703,11 +66744,6 @@ entities: - type: Transform pos: -7.5,41.5 parent: 2 - - uid: 23725 - components: - - type: Transform - pos: -9.5,41.5 - parent: 2 - uid: 23730 components: - type: Transform @@ -66718,56 +66754,6 @@ entities: - type: Transform pos: -4.5,41.5 parent: 2 - - uid: 23733 - components: - - type: Transform - pos: -10.5,41.5 - parent: 2 - - uid: 23734 - components: - - type: Transform - pos: -11.5,41.5 - parent: 2 - - uid: 23735 - components: - - type: Transform - pos: -12.5,41.5 - parent: 2 - - uid: 23736 - components: - - type: Transform - pos: -13.5,41.5 - parent: 2 - - uid: 23737 - components: - - type: Transform - pos: -14.5,41.5 - parent: 2 - - uid: 23738 - components: - - type: Transform - pos: -15.5,41.5 - parent: 2 - - uid: 23739 - components: - - type: Transform - pos: -16.5,41.5 - parent: 2 - - uid: 23740 - components: - - type: Transform - pos: -17.5,41.5 - parent: 2 - - uid: 23741 - components: - - type: Transform - pos: -18.5,41.5 - parent: 2 - - uid: 23742 - components: - - type: Transform - pos: -19.5,41.5 - parent: 2 - uid: 23844 components: - type: Transform @@ -67078,6 +67064,101 @@ entities: - type: Transform pos: 56.5,-10.5 parent: 2 + - uid: 31207 + components: + - type: Transform + pos: -16.5,44.5 + parent: 2 + - uid: 31208 + components: + - type: Transform + pos: -16.5,43.5 + parent: 2 + - uid: 31209 + components: + - type: Transform + pos: -15.5,43.5 + parent: 2 + - uid: 31210 + components: + - type: Transform + pos: -14.5,43.5 + parent: 2 + - uid: 31358 + components: + - type: Transform + pos: -14.5,42.5 + parent: 2 + - uid: 31359 + components: + - type: Transform + pos: -14.5,41.5 + parent: 2 + - uid: 31360 + components: + - type: Transform + pos: -14.5,40.5 + parent: 2 + - uid: 31361 + components: + - type: Transform + pos: -13.5,40.5 + parent: 2 + - uid: 31362 + components: + - type: Transform + pos: -11.5,40.5 + parent: 2 + - uid: 31363 + components: + - type: Transform + pos: -10.5,40.5 + parent: 2 + - uid: 31364 + components: + - type: Transform + pos: -9.5,40.5 + parent: 2 + - uid: 31365 + components: + - type: Transform + pos: -8.5,40.5 + parent: 2 + - uid: 31366 + components: + - type: Transform + pos: -12.5,40.5 + parent: 2 + - uid: 31367 + components: + - type: Transform + pos: -8.5,41.5 + parent: 2 + - uid: 31378 + components: + - type: Transform + pos: -3.5,48.5 + parent: 2 + - uid: 31379 + components: + - type: Transform + pos: -1.5,48.5 + parent: 2 + - uid: 31380 + components: + - type: Transform + pos: -1.5,47.5 + parent: 2 + - uid: 31381 + components: + - type: Transform + pos: -6.5,46.5 + parent: 2 + - uid: 31382 + components: + - type: Transform + pos: -6.5,47.5 + parent: 2 - proto: CableMV entities: - uid: 449 @@ -69655,6 +69736,16 @@ entities: - type: Transform pos: 10.5,49.5 parent: 2 + - uid: 8053 + components: + - type: Transform + pos: -23.5,40.5 + parent: 2 + - uid: 8056 + components: + - type: Transform + pos: -22.5,40.5 + parent: 2 - uid: 8114 components: - type: Transform @@ -69700,25 +69791,20 @@ entities: - type: Transform pos: -24.5,26.5 parent: 2 - - uid: 8798 - components: - - type: Transform - pos: -23.5,42.5 - parent: 2 - - uid: 8805 - components: - - type: Transform - pos: -23.5,41.5 - parent: 2 - uid: 8840 components: - type: Transform pos: -22.5,29.5 parent: 2 - - uid: 8945 + - uid: 8850 components: - type: Transform - pos: -23.5,43.5 + pos: -18.5,40.5 + parent: 2 + - uid: 8973 + components: + - type: Transform + pos: -20.5,40.5 parent: 2 - uid: 8992 components: @@ -69795,6 +69881,11 @@ entities: - type: Transform pos: -20.5,33.5 parent: 2 + - uid: 9193 + components: + - type: Transform + pos: -21.5,40.5 + parent: 2 - uid: 9240 components: - type: Transform @@ -69840,51 +69931,6 @@ entities: - type: Transform pos: -17.5,39.5 parent: 2 - - uid: 9249 - components: - - type: Transform - pos: -17.5,40.5 - parent: 2 - - uid: 9250 - components: - - type: Transform - pos: -17.5,41.5 - parent: 2 - - uid: 9251 - components: - - type: Transform - pos: -18.5,41.5 - parent: 2 - - uid: 9252 - components: - - type: Transform - pos: -19.5,41.5 - parent: 2 - - uid: 9253 - components: - - type: Transform - pos: -20.5,41.5 - parent: 2 - - uid: 9254 - components: - - type: Transform - pos: -21.5,41.5 - parent: 2 - - uid: 9255 - components: - - type: Transform - pos: -22.5,41.5 - parent: 2 - - uid: 9259 - components: - - type: Transform - pos: -23.5,44.5 - parent: 2 - - uid: 9260 - components: - - type: Transform - pos: -24.5,44.5 - parent: 2 - uid: 9261 components: - type: Transform @@ -72125,51 +72171,6 @@ entities: - type: Transform pos: -29.5,-9.5 parent: 2 - - uid: 23712 - components: - - type: Transform - pos: -16.5,41.5 - parent: 2 - - uid: 23713 - components: - - type: Transform - pos: -15.5,41.5 - parent: 2 - - uid: 23714 - components: - - type: Transform - pos: -14.5,41.5 - parent: 2 - - uid: 23715 - components: - - type: Transform - pos: -13.5,41.5 - parent: 2 - - uid: 23716 - components: - - type: Transform - pos: -12.5,41.5 - parent: 2 - - uid: 23717 - components: - - type: Transform - pos: -11.5,41.5 - parent: 2 - - uid: 23718 - components: - - type: Transform - pos: -10.5,41.5 - parent: 2 - - uid: 23719 - components: - - type: Transform - pos: -9.5,41.5 - parent: 2 - - uid: 23720 - components: - - type: Transform - pos: -8.5,41.5 - parent: 2 - uid: 23721 components: - type: Transform @@ -72465,6 +72466,16 @@ entities: - type: Transform pos: -31.5,31.5 parent: 2 + - uid: 28635 + components: + - type: Transform + pos: -19.5,40.5 + parent: 2 + - uid: 28638 + components: + - type: Transform + pos: -17.5,40.5 + parent: 2 - uid: 28869 components: - type: Transform @@ -72800,6 +72811,91 @@ entities: - type: Transform pos: -45.5,-19.5 parent: 2 + - uid: 31211 + components: + - type: Transform + pos: -24.5,40.5 + parent: 2 + - uid: 31232 + components: + - type: Transform + pos: -25.5,40.5 + parent: 2 + - uid: 31233 + components: + - type: Transform + pos: -26.5,40.5 + parent: 2 + - uid: 31234 + components: + - type: Transform + pos: -26.5,41.5 + parent: 2 + - uid: 31235 + components: + - type: Transform + pos: -26.5,42.5 + parent: 2 + - uid: 31236 + components: + - type: Transform + pos: -25.5,42.5 + parent: 2 + - uid: 31237 + components: + - type: Transform + pos: -25.5,43.5 + parent: 2 + - uid: 31368 + components: + - type: Transform + pos: -8.5,41.5 + parent: 2 + - uid: 31369 + components: + - type: Transform + pos: -8.5,40.5 + parent: 2 + - uid: 31370 + components: + - type: Transform + pos: -9.5,40.5 + parent: 2 + - uid: 31371 + components: + - type: Transform + pos: -10.5,40.5 + parent: 2 + - uid: 31372 + components: + - type: Transform + pos: -11.5,40.5 + parent: 2 + - uid: 31373 + components: + - type: Transform + pos: -12.5,40.5 + parent: 2 + - uid: 31374 + components: + - type: Transform + pos: -13.5,40.5 + parent: 2 + - uid: 31375 + components: + - type: Transform + pos: -14.5,40.5 + parent: 2 + - uid: 31376 + components: + - type: Transform + pos: -15.5,40.5 + parent: 2 + - uid: 31377 + components: + - type: Transform + pos: -16.5,40.5 + parent: 2 - proto: CableTerminal entities: - uid: 6405 @@ -75384,6 +75480,42 @@ entities: rot: -1.5707963267948966 rad pos: 60.5,-22.5 parent: 2 + - uid: 7820 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -12.5,40.5 + parent: 2 + - uid: 7829 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -13.5,40.5 + parent: 2 + - uid: 7830 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -23.5,40.5 + parent: 2 + - uid: 8041 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -19.5,40.5 + parent: 2 + - uid: 8094 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -8.5,41.5 + parent: 2 + - uid: 8095 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -11.5,40.5 + parent: 2 - uid: 8151 components: - type: Transform @@ -75406,6 +75538,18 @@ entities: rot: -1.5707963267948966 rad pos: -26.5,27.5 parent: 2 + - uid: 8192 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -9.5,40.5 + parent: 2 + - uid: 8220 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -8.5,40.5 + parent: 2 - uid: 8245 components: - type: Transform @@ -75591,6 +75735,18 @@ entities: rot: 3.141592653589793 rad pos: -26.5,25.5 parent: 2 + - uid: 8797 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -10.5,40.5 + parent: 2 + - uid: 8805 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -24.5,42.5 + parent: 2 - uid: 8824 components: - type: Transform @@ -75714,6 +75870,18 @@ entities: rot: 3.141592653589793 rad pos: 56.5,-31.5 parent: 2 + - uid: 9216 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -24.5,40.5 + parent: 2 + - uid: 9236 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -20.5,40.5 + parent: 2 - uid: 9384 components: - type: Transform @@ -76974,6 +77142,12 @@ entities: rot: -1.5707963267948966 rad pos: -26.5,28.5 parent: 2 + - uid: 13617 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -22.5,40.5 + parent: 2 - uid: 13938 components: - type: Transform @@ -78371,6 +78545,12 @@ entities: - type: Transform pos: -6.5,46.5 parent: 2 + - uid: 23733 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -21.5,40.5 + parent: 2 - uid: 24291 components: - type: Transform @@ -78671,17 +78851,65 @@ entities: rot: -1.5707963267948966 rad pos: -25.5,23.5 parent: 2 + - uid: 28591 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -22.5,39.5 + parent: 2 - uid: 28604 components: - type: Transform rot: 3.141592653589793 rad pos: 57.5,-31.5 parent: 2 + - uid: 28620 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -15.5,40.5 + parent: 2 + - uid: 28626 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -18.5,40.5 + parent: 2 + - uid: 28651 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -14.5,40.5 + parent: 2 + - uid: 28654 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -20.5,39.5 + parent: 2 + - uid: 28661 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -16.5,40.5 + parent: 2 - uid: 28755 components: - type: Transform pos: -13.5,-59.5 parent: 2 + - uid: 28828 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -17.5,39.5 + parent: 2 + - uid: 28850 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -17.5,40.5 + parent: 2 - uid: 28975 components: - type: Transform @@ -78952,6 +79180,42 @@ entities: rot: -1.5707963267948966 rad pos: 27.5,4.5 parent: 21002 + - uid: 31227 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -8.5,42.5 + parent: 2 + - uid: 31245 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -23.5,41.5 + parent: 2 + - uid: 31246 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -23.5,42.5 + parent: 2 + - uid: 31247 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -23.5,43.5 + parent: 2 + - uid: 31248 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -23.5,44.5 + parent: 2 + - uid: 31249 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -24.5,44.5 + parent: 2 - proto: Chair entities: - uid: 495 @@ -79214,11 +79478,6 @@ entities: rot: -1.5707963267948966 rad pos: -16.624132,35.66331 parent: 2 - - uid: 8974 - components: - - type: Transform - pos: -16.072048,40.561424 - parent: 2 - uid: 10003 components: - type: Transform @@ -80703,6 +80962,11 @@ entities: - type: Transform pos: -25.5,10.5 parent: 2 + - uid: 9893 + components: + - type: Transform + pos: 13.5,-27.5 + parent: 2 - uid: 9953 components: - type: Transform @@ -80763,11 +81027,6 @@ entities: - type: Transform pos: -3.5,-22.5 parent: 2 - - uid: 19017 - components: - - type: Transform - pos: 13.5,-25.5 - parent: 2 - uid: 19098 components: - type: Transform @@ -81160,6 +81419,11 @@ entities: - type: Transform pos: 19.5,22.5 parent: 2 + - uid: 31137 + components: + - type: Transform + pos: 12.5,-27.5 + parent: 2 - proto: ClosetRadiationSuitFilled entities: - uid: 9793 @@ -85452,10 +85716,10 @@ entities: parent: 2 - proto: DefaultStationBeaconReporter entities: - - uid: 31134 + - uid: 31354 components: - type: Transform - pos: -45.5,-25.5 + pos: -45.5,-26.5 parent: 2 - proto: DefaultStationBeaconRobotics entities: @@ -85511,13 +85775,6 @@ entities: - type: Transform pos: -45.5,-21.5 parent: 2 -- proto: DefaultStationBeaconTEG - entities: - - uid: 11911 - components: - - type: Transform - pos: -19.5,44.5 - parent: 2 - proto: DefaultStationBeaconTelecoms entities: - uid: 11590 @@ -96233,7 +96490,7 @@ entities: components: - type: Transform rot: 3.141592653589793 rad - pos: 15.5,-31.5 + pos: 13.5,-31.5 parent: 2 - uid: 24093 components: @@ -96378,17 +96635,6 @@ entities: - type: Transform pos: -26.5,43.5 parent: 2 - - uid: 24120 - components: - - type: Transform - pos: -17.5,48.5 - parent: 2 - - uid: 24121 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -12.5,44.5 - parent: 2 - uid: 24122 components: - type: Transform @@ -96777,6 +97023,14 @@ entities: parent: 2 - type: Fixtures fixtures: {} + - uid: 31260 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -12.5,39.5 + parent: 2 + - type: Fixtures + fixtures: {} - proto: FaxMachineBase entities: - uid: 1043 @@ -99057,6 +99311,11 @@ entities: - type: Transform pos: -30.738241,37.63888 parent: 2 + - uid: 31259 + components: + - type: Transform + pos: -9.229688,43.650337 + parent: 2 - proto: Firelock entities: - uid: 21389 @@ -100007,7 +100266,7 @@ entities: pos: -13.5,-1.5 parent: 2 - type: Door - secondsUntilStateChange: -303373.2 + secondsUntilStateChange: -322664.72 - type: DeviceNetwork deviceLists: - 18275 @@ -104315,17 +104574,14 @@ entities: color: '#0335FCFF' - proto: GasOutletInjector entities: - - uid: 8124 + - uid: 8126 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -16.5,51.5 - parent: 2 - - uid: 8125 - components: - - type: Transform - pos: -9.5,45.5 + rot: 1.5707963267948966 rad + pos: -24.5,53.5 parent: 2 + - type: AtmosPipeLayers + pipeLayer: Secondary - uid: 8573 components: - type: Transform @@ -104361,6 +104617,22 @@ entities: - type: Transform pos: -42.5,25.5 parent: 2 + - uid: 8811 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -14.5,53.5 + parent: 2 + - type: AtmosPipeLayers + pipeLayer: Tertiary + - uid: 8972 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -9.5,45.5 + parent: 2 + - type: AtmosPipeLayers + pipeLayer: Tertiary - uid: 9778 components: - type: Transform @@ -104382,14 +104654,22 @@ entities: parent: 2 - type: AtmosPipeColor color: '#03FCD3FF' - - uid: 8994 + - uid: 8106 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -24.5,46.5 + rot: 1.5707963267948966 rad + pos: -24.5,51.5 parent: 2 - type: AtmosPipeColor color: '#0335FCFF' + - uid: 9226 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -19.5,41.5 + parent: 2 + - type: AtmosPipeColor + color: '#947507FF' - uid: 16790 components: - type: Transform @@ -104398,6 +104678,22 @@ entities: parent: 2 - type: AtmosPipeColor color: '#0335FCFF' + - uid: 20901 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -17.5,50.5 + parent: 2 + - type: AtmosPipeColor + color: '#3AB334FF' + - uid: 23807 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -22.5,50.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF1212FF' - uid: 28607 components: - type: Transform @@ -104406,14 +104702,6 @@ entities: parent: 2 - type: AtmosPipeColor color: '#03FCD3FF' - - uid: 28635 - components: - - type: Transform - rot: -4.71238898038469 rad - pos: -13.5,40.5 - parent: 2 - - type: AtmosPipeColor - color: '#FF1212FF' - uid: 30943 components: - type: Transform @@ -104438,21 +104726,27 @@ entities: rot: 1.5707963267948966 rad pos: -40.5,13.5 parent: 2 - - uid: 8126 - components: - - type: Transform - pos: -10.5,46.5 - parent: 2 - - type: AtmosPipeColor - color: '#FF1212FF' - - uid: 8127 + - uid: 7775 components: - type: Transform rot: -1.5707963267948966 rad - pos: -15.5,50.5 + pos: -8.5,47.5 parent: 2 - type: AtmosPipeColor - color: '#0335FCFF' + color: '#333333FF' + - uid: 8099 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -20.5,53.5 + parent: 2 + - type: Construction + step: 1 + edge: 0 + - type: AtmosPipeLayers + pipeLayer: Tertiary + - type: AtmosPipeColor + color: '#333333FF' - uid: 8527 components: - type: Transform @@ -104505,6 +104799,16 @@ entities: parent: 2 - type: AtmosPipeColor color: '#333333FF' + - uid: 9189 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -18.5,53.5 + parent: 2 + - type: AtmosPipeLayers + pipeLayer: Secondary + - type: AtmosPipeColor + color: '#990000FF' - uid: 9636 components: - type: Transform @@ -104709,6 +105013,13 @@ entities: parent: 2 - type: AtmosPipeColor color: '#0335FCFF' + - uid: 506 + components: + - type: Transform + pos: -19.5,49.5 + parent: 2 + - type: AtmosPipeColor + color: '#333333FF' - uid: 896 components: - type: Transform @@ -104946,22 +105257,42 @@ entities: parent: 2 - type: AtmosPipeColor color: '#0335FCFF' - - uid: 8106 + - uid: 7774 components: - type: Transform rot: 3.141592653589793 rad - pos: -18.5,42.5 + pos: -23.5,50.5 parent: 2 - type: AtmosPipeColor - color: '#947507FF' - - uid: 8107 + color: '#FF1212FF' + - uid: 8038 components: - type: Transform rot: -1.5707963267948966 rad - pos: -20.5,42.5 + pos: -17.5,42.5 parent: 2 - type: AtmosPipeColor - color: '#03FCD3FF' + color: '#0335FCFF' + - uid: 8055 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -21.5,44.5 + parent: 2 + - uid: 8061 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -21.5,41.5 + parent: 2 + - uid: 8124 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -19.5,46.5 + parent: 2 + - type: AtmosPipeColor + color: '#333333FF' - uid: 8187 components: - type: Transform @@ -104970,14 +105301,6 @@ entities: parent: 2 - type: AtmosPipeColor color: '#B3A234FF' - - uid: 8217 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -28.5,51.5 - parent: 2 - - type: AtmosPipeColor - color: '#0335FCFF' - uid: 8219 components: - type: Transform @@ -104986,14 +105309,6 @@ entities: parent: 2 - type: AtmosPipeColor color: '#990000FF' - - uid: 8220 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -28.5,46.5 - parent: 2 - - type: AtmosPipeColor - color: '#0335FCFF' - uid: 8470 components: - type: Transform @@ -105109,21 +105424,6 @@ entities: parent: 2 - type: AtmosPipeColor color: '#990000FF' - - uid: 8800 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -15.5,40.5 - parent: 2 - - type: AtmosPipeColor - color: '#947507FF' - - uid: 8801 - components: - - type: Transform - pos: -12.5,43.5 - parent: 2 - - type: AtmosPipeColor - color: '#FF1212FF' - uid: 8823 components: - type: Transform @@ -105132,21 +105432,6 @@ entities: parent: 2 - type: AtmosPipeColor color: '#990000FF' - - uid: 8842 - components: - - type: Transform - pos: -16.5,45.5 - parent: 2 - - type: AtmosPipeColor - color: '#947507FF' - - uid: 8843 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -8.5,42.5 - parent: 2 - - type: AtmosPipeColor - color: '#FF1212FF' - uid: 8866 components: - type: Transform @@ -105163,22 +105448,6 @@ entities: parent: 2 - type: AtmosPipeColor color: '#990000FF' - - uid: 8943 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -22.5,42.5 - parent: 2 - - type: AtmosPipeColor - color: '#03FCD3FF' - - uid: 8988 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -19.5,52.5 - parent: 2 - - type: AtmosPipeColor - color: '#0335FCFF' - uid: 9027 components: - type: Transform @@ -105216,6 +105485,38 @@ entities: parent: 2 - type: AtmosPipeColor color: '#03FCD3FF' + - uid: 9192 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -18.5,42.5 + parent: 2 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 9197 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -14.5,46.5 + parent: 2 + - type: AtmosPipeColor + color: '#333333FF' + - uid: 9208 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -15.5,41.5 + parent: 2 + - type: AtmosPipeColor + color: '#947507FF' + - uid: 9228 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -20.5,41.5 + parent: 2 + - type: AtmosPipeColor + color: '#947507FF' - uid: 9280 components: - type: Transform @@ -107050,53 +107351,20 @@ entities: parent: 21002 - type: AtmosPipeColor color: '#0335FCFF' - - uid: 28634 - components: - - type: Transform - pos: -18.5,49.5 - parent: 2 - - type: AtmosPipeColor - color: '#947507FF' - - uid: 28839 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -19.5,47.5 - parent: 2 - - type: AtmosPipeColor - color: '#03FCD3FF' - - uid: 28844 + - uid: 28852 components: - type: Transform rot: 1.5707963267948966 rad - pos: -18.5,44.5 + pos: -22.5,45.5 parent: 2 - - type: AtmosPipeColor - color: '#947507FF' - - uid: 28846 + - uid: 29184 components: - type: Transform - rot: 3.141592653589793 rad - pos: -18.5,45.5 + rot: 1.5707963267948966 rad + pos: -14.5,47.5 parent: 2 - type: AtmosPipeColor - color: '#947507FF' - - uid: 28853 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -9.5,40.5 - parent: 2 - - type: AtmosPipeColor - color: '#FF1212FF' - - uid: 28855 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -14.5,42.5 - parent: 2 - - type: AtmosPipeColor - color: '#947507FF' + color: '#333333FF' - uid: 29690 components: - type: Transform @@ -107219,6 +107487,347 @@ entities: parent: 2 - type: AtmosPipeColor color: '#990000FF' + - uid: 31158 + components: + - type: Transform + pos: -20.5,44.5 + parent: 2 +- proto: GasPipeBendAlt1 + entities: + - uid: 5795 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -23.5,50.5 + parent: 2 + - uid: 7814 + components: + - type: Transform + pos: -16.5,49.5 + parent: 2 + - type: AtmosPipeColor + color: '#3AB334FF' + - uid: 8062 + components: + - type: Transform + pos: -20.5,44.5 + parent: 2 + - uid: 8080 + components: + - type: Transform + pos: -18.5,51.5 + parent: 2 + - type: AtmosPipeColor + color: '#03FCD3FF' + - uid: 8123 + components: + - type: Transform + pos: -20.5,46.5 + parent: 2 + - type: AtmosPipeColor + color: '#3AB334FF' + - uid: 8148 + components: + - type: Transform + pos: -23.5,53.5 + parent: 2 + - uid: 8800 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -20.5,41.5 + parent: 2 + - type: AtmosPipeColor + color: '#947507FF' + - uid: 8842 + components: + - type: Transform + pos: -15.5,53.5 + parent: 2 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 9207 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -22.5,45.5 + parent: 2 + - uid: 9235 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -21.5,44.5 + parent: 2 + - uid: 23677 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -22.5,43.5 + parent: 2 + - uid: 23712 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -20.5,45.5 + parent: 2 + - type: AtmosPipeColor + color: '#3AB334FF' + - uid: 28840 + components: + - type: Transform + pos: -19.5,50.5 + parent: 2 + - type: AtmosPipeColor + color: '#947507FF' + - uid: 31149 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -16.5,48.5 + parent: 2 + - type: AtmosPipeColor + color: '#3AB334FF' + - uid: 31179 + components: + - type: Transform + pos: -10.5,47.5 + parent: 2 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 31181 + components: + - type: Transform + pos: -14.5,48.5 + parent: 2 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 31182 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -12.5,47.5 + parent: 2 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 31186 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -15.5,48.5 + parent: 2 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 31194 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -22.5,42.5 + parent: 2 + - uid: 31201 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -22.5,41.5 + parent: 2 + - uid: 31204 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -14.5,42.5 + parent: 2 + - uid: 31214 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -15.5,45.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 31244 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -12.5,43.5 + parent: 2 +- proto: GasPipeBendAlt2 + entities: + - uid: 8075 + components: + - type: Transform + pos: -19.5,46.5 + parent: 2 + - type: AtmosPipeColor + color: '#947507FF' + - uid: 8131 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -23.5,53.5 + parent: 2 + - type: AtmosPipeColor + color: '#333333FF' + - uid: 8801 + components: + - type: Transform + pos: -15.5,47.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 9184 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -22.5,43.5 + parent: 2 + - type: AtmosPipeLayers + pipeLayer: Primary + - uid: 9188 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -15.5,45.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 9196 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -10.5,45.5 + parent: 2 + - uid: 9219 + components: + - type: Transform + pos: -20.5,44.5 + parent: 2 + - uid: 9223 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -23.5,49.5 + parent: 2 + - type: AtmosPipeColor + color: '#333333FF' + - uid: 9230 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -20.5,41.5 + parent: 2 + - type: AtmosPipeColor + color: '#947507FF' + - uid: 9252 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -15.5,53.5 + parent: 2 + - uid: 16797 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -15.5,48.5 + parent: 2 + - uid: 23717 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -21.5,44.5 + parent: 2 + - uid: 28623 + components: + - type: Transform + pos: -10.5,47.5 + parent: 2 + - uid: 28629 + components: + - type: Transform + pos: -18.5,48.5 + parent: 2 + - type: AtmosPipeColor + color: '#03FCD3FF' + - uid: 29118 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -14.5,47.5 + parent: 2 + - uid: 29183 + components: + - type: Transform + pos: -14.5,48.5 + parent: 2 + - uid: 31140 + components: + - type: Transform + pos: -18.5,50.5 + parent: 2 + - type: AtmosPipeColor + color: '#3AB334FF' + - uid: 31141 + components: + - type: Transform + pos: -19.5,51.5 + parent: 2 + - type: AtmosPipeColor + color: '#03FCD3FF' + - uid: 31142 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -18.5,47.5 + parent: 2 + - type: AtmosPipeColor + color: '#03FCD3FF' + - uid: 31150 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -18.5,49.5 + parent: 2 + - type: AtmosPipeColor + color: '#3AB334FF' + - uid: 31172 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -21.5,41.5 + parent: 2 + - uid: 31175 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -20.5,45.5 + parent: 2 + - uid: 31178 + components: + - type: Transform + pos: -20.5,47.5 + parent: 2 + - uid: 31215 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -14.5,45.5 + parent: 2 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 31216 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -14.5,42.5 + parent: 2 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 31222 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -18.5,42.5 + parent: 2 + - type: AtmosPipeColor + color: '#0335FCFF' - proto: GasPipeFourway entities: - uid: 666 @@ -107571,6 +108180,127 @@ entities: parent: 21002 - type: AtmosPipeColor color: '#0335FCFF' +- proto: GasPipeManifold + entities: + - uid: 2174 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -24.5,48.5 + parent: 2 + - type: AtmosPipeColor + color: '#333333FF' + - uid: 3083 + components: + - type: Transform + pos: -17.5,47.5 + parent: 2 + - type: AtmosPipeColor + color: '#3AB334FF' + - uid: 8107 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -15.5,46.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 8217 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -23.5,46.5 + parent: 2 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 8939 + components: + - type: Transform + pos: -20.5,43.5 + parent: 2 + - type: AtmosPipeColor + color: '#947507FF' + - uid: 9183 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -16.5,41.5 + parent: 2 + - type: AtmosPipeColor + color: '#947507FF' + - uid: 9217 + components: + - type: Transform + pos: -18.5,43.5 + parent: 2 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 9250 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -22.5,51.5 + parent: 2 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 9254 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -24.5,49.5 + parent: 2 + - type: AtmosPipeColor + color: '#333333FF' + - uid: 23738 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -21.5,45.5 + parent: 2 + - type: AtmosPipeColor + color: '#3AB334FF' + - uid: 29117 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -21.5,50.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 31152 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -17.5,51.5 + parent: 2 + - type: AtmosPipeColor + color: '#3AB334FF' + - uid: 31157 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -23.5,41.5 + parent: 2 + - uid: 31165 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -23.5,43.5 + parent: 2 + - uid: 31213 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -13.5,45.5 + parent: 2 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 31243 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -13.5,43.5 + parent: 2 - proto: GasPipeSensorDistribution entities: - uid: 15414 @@ -107591,6 +108321,30 @@ entities: parent: 2 - type: AtmosPipeColor color: '#03FCD3FF' +- proto: GasPipeSensorTEGCold + entities: + - uid: 31169 + components: + - type: Transform + pos: -17.5,43.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 31353 + - type: AtmosPipeColor + color: '#0335FCFF' +- proto: GasPipeSensorTEGHot + entities: + - uid: 28844 + components: + - type: Transform + pos: -15.5,45.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 31353 + - type: AtmosPipeColor + color: '#FF1212FF' - proto: GasPipeSensorWaste entities: - uid: 15402 @@ -108627,6 +109381,13 @@ entities: parent: 2 - type: AtmosPipeColor color: '#990000FF' + - uid: 5357 + components: + - type: Transform + pos: -18.5,47.5 + parent: 2 + - type: AtmosPipeColor + color: '#B3A234FF' - uid: 5383 components: - type: Transform @@ -108697,13 +109458,6 @@ entities: parent: 2 - type: AtmosPipeColor color: '#990000FF' - - uid: 6240 - components: - - type: Transform - pos: -8.5,44.5 - parent: 2 - - type: AtmosPipeColor - color: '#FF1212FF' - uid: 7355 components: - type: Transform @@ -108720,79 +109474,56 @@ entities: parent: 2 - type: AtmosPipeColor color: '#990000FF' - - uid: 7732 + - uid: 7777 components: - type: Transform - pos: -20.5,44.5 + rot: 1.5707963267948966 rad + pos: -17.5,48.5 parent: 2 - type: AtmosPipeColor - color: '#03FCD3FF' - - uid: 7774 + color: '#B3A234FF' + - uid: 7816 components: - type: Transform - pos: -10.5,44.5 + pos: -15.5,50.5 parent: 2 - type: AtmosPipeColor color: '#FF1212FF' - - uid: 8094 + - uid: 7827 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -17.5,50.5 - parent: 2 - - type: AtmosPipeColor - color: '#0335FCFF' - - uid: 8095 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -17.5,52.5 - parent: 2 - - type: AtmosPipeColor - color: '#0335FCFF' - - uid: 8096 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -16.5,50.5 - parent: 2 - - type: AtmosPipeColor - color: '#0335FCFF' - - uid: 8097 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -16.5,52.5 - parent: 2 - - type: AtmosPipeColor - color: '#0335FCFF' - - uid: 8098 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -10.5,45.5 + pos: -23.5,51.5 parent: 2 - type: AtmosPipeColor color: '#FF1212FF' - - uid: 8099 + - uid: 8052 components: - type: Transform - rot: 3.141592653589793 rad - pos: -8.5,45.5 + pos: -21.5,42.5 parent: 2 - - type: AtmosPipeColor - color: '#FF1212FF' - - uid: 8122 - components: - - type: Transform - pos: -9.5,44.5 - parent: 2 - - uid: 8123 + - uid: 8110 components: - type: Transform rot: -1.5707963267948966 rad - pos: -17.5,51.5 + pos: -22.5,49.5 parent: 2 + - type: AtmosPipeColor + color: '#333333FF' + - uid: 8120 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -21.5,49.5 + parent: 2 + - type: AtmosPipeColor + color: '#333333FF' + - uid: 8130 + components: + - type: Transform + pos: -23.5,52.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF1212FF' - uid: 8167 components: - type: Transform @@ -108870,14 +109601,6 @@ entities: parent: 2 - type: AtmosPipeColor color: '#0335FCFF' - - uid: 8212 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -26.5,46.5 - parent: 2 - - type: AtmosPipeColor - color: '#0335FCFF' - uid: 8213 components: - type: Transform @@ -108894,14 +109617,6 @@ entities: parent: 2 - type: AtmosPipeColor color: '#0335FCFF' - - uid: 8215 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -26.5,51.5 - parent: 2 - - type: AtmosPipeColor - color: '#0335FCFF' - uid: 8216 components: - type: Transform @@ -110040,38 +110755,21 @@ entities: parent: 2 - type: AtmosPipeColor color: '#3AB334FF' - - uid: 8841 + - uid: 8843 + components: + - type: Transform + pos: -15.5,52.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 8848 components: - type: Transform rot: 1.5707963267948966 rad - pos: -23.5,49.5 + pos: -15.5,46.5 parent: 2 - type: AtmosPipeColor - color: '#947507FF' - - uid: 8845 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -16.5,44.5 - parent: 2 - - type: AtmosPipeColor - color: '#947507FF' - - uid: 8849 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -22.5,44.5 - parent: 2 - - type: AtmosPipeColor - color: '#03FCD3FF' - - uid: 8850 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -22.5,49.5 - parent: 2 - - type: AtmosPipeColor - color: '#947507FF' + color: '#333333FF' - uid: 8854 components: - type: Transform @@ -110111,14 +110809,6 @@ entities: parent: 2 - type: AtmosPipeColor color: '#B3A234FF' - - uid: 8972 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -21.5,51.5 - parent: 2 - - type: AtmosPipeColor - color: '#0335FCFF' - uid: 8978 components: - type: Transform @@ -110169,22 +110859,22 @@ entities: parent: 2 - type: AtmosPipeColor color: '#0335FCFF' - - uid: 8990 + - uid: 8989 components: - type: Transform rot: 1.5707963267948966 rad - pos: -22.5,51.5 + pos: -18.5,46.5 parent: 2 - type: AtmosPipeColor - color: '#0335FCFF' - - uid: 9001 + color: '#333333FF' + - uid: 9000 components: - type: Transform - rot: 3.141592653589793 rad - pos: -16.5,44.5 + rot: 1.5707963267948966 rad + pos: -19.5,53.5 parent: 2 - type: AtmosPipeColor - color: '#947507FF' + color: '#FF1212FF' - uid: 9008 components: - type: Transform @@ -110192,22 +110882,6 @@ entities: parent: 2 - type: AtmosPipeColor color: '#0335FCFF' - - uid: 9021 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -24.5,51.5 - parent: 2 - - type: AtmosPipeColor - color: '#0335FCFF' - - uid: 9025 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -28.5,48.5 - parent: 2 - - type: AtmosPipeColor - color: '#0335FCFF' - uid: 9117 components: - type: Transform @@ -110246,6 +110920,52 @@ entities: parent: 2 - type: AtmosPipeColor color: '#03FCD3FF' + - uid: 9195 + components: + - type: Transform + pos: -15.5,43.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 9206 + components: + - type: Transform + pos: -17.5,45.5 + parent: 2 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 9209 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -16.5,46.5 + parent: 2 + - type: AtmosPipeColor + color: '#333333FF' + - uid: 9221 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -11.5,47.5 + parent: 2 + - type: AtmosPipeColor + color: '#333333FF' + - uid: 9231 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -23.5,51.5 + parent: 2 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 9260 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -18.5,53.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF1212FF' - uid: 9332 components: - type: Transform @@ -110612,6 +111332,14 @@ entities: parent: 2 - type: AtmosPipeColor color: '#990000FF' + - uid: 11911 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -20.5,49.5 + parent: 2 + - type: AtmosPipeColor + color: '#333333FF' - uid: 12289 components: - type: Transform @@ -126282,8 +127010,8 @@ entities: - uid: 16796 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -17.5,44.5 + rot: 3.141592653589793 rad + pos: -20.5,42.5 parent: 2 - type: AtmosPipeColor color: '#947507FF' @@ -126319,14 +127047,6 @@ entities: parent: 2 - type: AtmosPipeColor color: '#0335FCFF' - - uid: 16804 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -28.5,49.5 - parent: 2 - - type: AtmosPipeColor - color: '#0335FCFF' - uid: 16913 components: - type: Transform @@ -126639,6 +127359,14 @@ entities: parent: 2 - type: AtmosPipeColor color: '#990000FF' + - uid: 18563 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -20.5,53.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF1212FF' - uid: 19075 components: - type: Transform @@ -127834,6 +128562,37 @@ entities: parent: 2 - type: AtmosPipeColor color: '#990000FF' + - uid: 23713 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -10.5,47.5 + parent: 2 + - type: AtmosPipeColor + color: '#333333FF' + - uid: 23719 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -9.5,47.5 + parent: 2 + - type: AtmosPipeColor + color: '#333333FF' + - uid: 23739 + components: + - type: Transform + pos: -18.5,46.5 + parent: 2 + - type: AtmosPipeColor + color: '#B3A234FF' + - uid: 23740 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -23.5,49.5 + parent: 2 + - type: AtmosPipeColor + color: '#333333FF' - uid: 23843 components: - type: Transform @@ -128769,83 +129528,22 @@ entities: parent: 2 - type: AtmosPipeColor color: '#0335FCFF' - - uid: 28620 + - uid: 28624 components: - type: Transform - pos: -21.5,41.5 + rot: 1.5707963267948966 rad + pos: -17.5,46.5 parent: 2 - type: AtmosPipeColor - color: '#03FCD3FF' - - uid: 28626 + color: '#333333FF' + - uid: 28630 components: - type: Transform rot: 1.5707963267948966 rad pos: -23.5,48.5 parent: 2 - type: AtmosPipeColor - color: '#03FCD3FF' - - uid: 28627 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -22.5,48.5 - parent: 2 - - type: AtmosPipeColor - color: '#03FCD3FF' - - uid: 28628 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -21.5,48.5 - parent: 2 - - type: AtmosPipeColor - color: '#03FCD3FF' - - uid: 28631 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -21.5,49.5 - parent: 2 - - type: AtmosPipeColor - color: '#947507FF' - - uid: 28632 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -20.5,49.5 - parent: 2 - - type: AtmosPipeColor - color: '#947507FF' - - uid: 28633 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -19.5,49.5 - parent: 2 - - type: AtmosPipeColor - color: '#947507FF' - - uid: 28636 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -17.5,45.5 - parent: 2 - - type: AtmosPipeColor - color: '#947507FF' - - uid: 28637 - components: - - type: Transform - pos: -18.5,47.5 - parent: 2 - - type: AtmosPipeColor - color: '#947507FF' - - uid: 28638 - components: - - type: Transform - pos: -18.5,46.5 - parent: 2 - - type: AtmosPipeColor - color: '#947507FF' + color: '#333333FF' - uid: 28758 components: - type: Transform @@ -128854,90 +129552,29 @@ entities: parent: 2 - type: AtmosPipeColor color: '#990000FF' - - uid: 28828 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -22.5,45.5 - parent: 2 - - type: AtmosPipeColor - color: '#03FCD3FF' - - uid: 28836 - components: - - type: Transform - pos: -20.5,49.5 - parent: 2 - - type: AtmosPipeColor - color: '#03FCD3FF' - uid: 28837 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -21.5,46.5 + pos: -15.5,51.5 parent: 2 - type: AtmosPipeColor - color: '#03FCD3FF' - - uid: 28838 - components: - - type: Transform - pos: -19.5,49.5 - parent: 2 - - type: AtmosPipeColor - color: '#0335FCFF' + color: '#FF1212FF' - uid: 28841 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -11.5,42.5 - parent: 2 - - type: AtmosPipeColor - color: '#FF1212FF' - - uid: 28845 - components: - - type: Transform - pos: -18.5,48.5 - parent: 2 - - type: AtmosPipeColor - color: '#947507FF' - - uid: 28848 components: - type: Transform rot: 3.141592653589793 rad - pos: -15.5,41.5 + pos: -18.5,44.5 parent: 2 - type: AtmosPipeColor - color: '#947507FF' - - uid: 28850 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -12.5,40.5 - parent: 2 - - type: AtmosPipeColor - color: '#FF1212FF' - - uid: 28851 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -11.5,40.5 - parent: 2 - - type: AtmosPipeColor - color: '#FF1212FF' - - uid: 28852 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -10.5,40.5 - parent: 2 - - type: AtmosPipeColor - color: '#FF1212FF' + color: '#0335FCFF' - uid: 28854 components: - type: Transform - pos: -9.5,41.5 + rot: -1.5707963267948966 rad + pos: -13.5,47.5 parent: 2 - type: AtmosPipeColor - color: '#FF1212FF' + color: '#333333FF' - uid: 28904 components: - type: Transform @@ -129658,6 +130295,698 @@ entities: parent: 2 - type: AtmosPipeColor color: '#0335FCFF' + - uid: 31145 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -19.5,47.5 + parent: 2 + - type: AtmosPipeColor + color: '#333333FF' + - uid: 31146 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -19.5,48.5 + parent: 2 + - type: AtmosPipeColor + color: '#333333FF' + - uid: 31154 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -20.5,48.5 + parent: 2 + - type: AtmosPipeColor + color: '#B3A234FF' + - uid: 31155 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -21.5,48.5 + parent: 2 + - type: AtmosPipeColor + color: '#B3A234FF' + - uid: 31156 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -19.5,48.5 + parent: 2 + - type: AtmosPipeColor + color: '#B3A234FF' + - uid: 31159 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -17.5,48.5 + parent: 2 + - type: AtmosPipeColor + color: '#3AB334FF' + - uid: 31170 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -18.5,41.5 + parent: 2 + - type: AtmosPipeColor + color: '#947507FF' + - uid: 31202 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -22.5,41.5 + parent: 2 +- proto: GasPipeStraightAlt1 + entities: + - uid: 6240 + components: + - type: Transform + pos: -19.5,44.5 + parent: 2 + - type: AtmosPipeColor + color: '#947507FF' + - uid: 7620 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -19.5,47.5 + parent: 2 + - type: AtmosPipeColor + color: '#947507FF' + - uid: 7826 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -21.5,40.5 + parent: 2 + - uid: 7832 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -12.5,46.5 + parent: 2 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 8037 + components: + - type: Transform + pos: -18.5,46.5 + parent: 2 + - type: AtmosPipeColor + color: '#03FCD3FF' + - uid: 8049 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -17.5,41.5 + parent: 2 + - type: AtmosPipeColor + color: '#947507FF' + - uid: 8050 + components: + - type: Transform + pos: -15.5,49.5 + parent: 2 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 8100 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -16.5,53.5 + parent: 2 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 8101 + components: + - type: Transform + pos: -15.5,52.5 + parent: 2 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 8111 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -19.5,48.5 + parent: 2 + - type: AtmosPipeColor + color: '#3AB334FF' + - uid: 8804 + components: + - type: Transform + pos: -21.5,43.5 + parent: 2 + - uid: 8849 + components: + - type: Transform + pos: -15.5,50.5 + parent: 2 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 9006 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -17.5,48.5 + parent: 2 + - type: AtmosPipeColor + color: '#3AB334FF' + - uid: 9205 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -18.5,45.5 + parent: 2 + - type: AtmosPipeColor + color: '#03FCD3FF' + - uid: 9220 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -20.5,48.5 + parent: 2 + - type: AtmosPipeColor + color: '#3AB334FF' + - uid: 9233 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -23.5,49.5 + parent: 2 + - type: AtmosPipeColor + color: '#333333FF' + - uid: 9251 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -23.5,52.5 + parent: 2 + - uid: 9259 + components: + - type: Transform + pos: -21.5,42.5 + parent: 2 + - uid: 13508 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -22.5,48.5 + parent: 2 + - type: AtmosPipeColor + color: '#3AB334FF' + - uid: 23718 + components: + - type: Transform + pos: -19.5,45.5 + parent: 2 + - type: AtmosPipeColor + color: '#947507FF' + - uid: 23735 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -17.5,53.5 + parent: 2 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 28621 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -20.5,49.5 + parent: 2 + - type: AtmosPipeColor + color: '#947507FF' + - uid: 28628 + components: + - type: Transform + pos: -18.5,47.5 + parent: 2 + - type: AtmosPipeColor + color: '#03FCD3FF' + - uid: 28636 + components: + - type: Transform + pos: -19.5,43.5 + parent: 2 + - type: AtmosPipeColor + color: '#947507FF' + - uid: 28658 + components: + - type: Transform + pos: -19.5,42.5 + parent: 2 + - type: AtmosPipeColor + color: '#947507FF' + - uid: 28662 + components: + - type: Transform + pos: -14.5,47.5 + parent: 2 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 28836 + components: + - type: Transform + pos: -18.5,48.5 + parent: 2 + - type: AtmosPipeColor + color: '#03FCD3FF' + - uid: 28842 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -20.5,51.5 + parent: 2 + - type: AtmosPipeColor + color: '#03FCD3FF' + - uid: 28845 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -19.5,48.5 + parent: 2 + - type: AtmosPipeColor + color: '#947507FF' + - uid: 31147 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -21.5,49.5 + parent: 2 + - type: AtmosPipeColor + color: '#947507FF' + - uid: 31148 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -21.5,47.5 + parent: 2 + - type: AtmosPipeColor + color: '#3AB334FF' + - uid: 31151 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -18.5,48.5 + parent: 2 + - type: AtmosPipeColor + color: '#3AB334FF' + - uid: 31161 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -19.5,51.5 + parent: 2 + - type: AtmosPipeColor + color: '#03FCD3FF' + - uid: 31166 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -19.5,46.5 + parent: 2 + - type: AtmosPipeColor + color: '#947507FF' + - uid: 31167 + components: + - type: Transform + pos: -18.5,50.5 + parent: 2 + - type: AtmosPipeColor + color: '#03FCD3FF' + - uid: 31171 + components: + - type: Transform + pos: -18.5,49.5 + parent: 2 + - type: AtmosPipeColor + color: '#03FCD3FF' + - uid: 31180 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -11.5,47.5 + parent: 2 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 31187 + components: + - type: Transform + pos: -14.5,46.5 + parent: 2 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 31188 + components: + - type: Transform + pos: -14.5,45.5 + parent: 2 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 31191 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -18.5,42.5 + parent: 2 + - uid: 31196 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -20.5,42.5 + parent: 2 + - uid: 31200 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -17.5,42.5 + parent: 2 + - uid: 31203 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -21.5,42.5 + parent: 2 + - uid: 31206 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -15.5,42.5 + parent: 2 + - uid: 31240 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -16.5,42.5 + parent: 2 +- proto: GasPipeStraightAlt2 + entities: + - uid: 605 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -20.5,48.5 + parent: 2 + - type: AtmosPipeColor + color: '#03FCD3FF' + - uid: 606 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -21.5,46.5 + parent: 2 + - type: AtmosPipeColor + color: '#947507FF' + - uid: 620 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -20.5,46.5 + parent: 2 + - type: AtmosPipeColor + color: '#947507FF' + - uid: 7818 + components: + - type: Transform + pos: -15.5,50.5 + parent: 2 + - uid: 8064 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -13.5,47.5 + parent: 2 + - uid: 8065 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -22.5,45.5 + parent: 2 + - uid: 8066 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -10.5,46.5 + parent: 2 + - uid: 8802 + components: + - type: Transform + pos: -19.5,45.5 + parent: 2 + - type: AtmosPipeColor + color: '#947507FF' + - uid: 8841 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -22.5,53.5 + parent: 2 + - type: AtmosPipeColor + color: '#333333FF' + - uid: 8974 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -23.5,52.5 + parent: 2 + - type: AtmosPipeColor + color: '#333333FF' + - uid: 9025 + components: + - type: Transform + pos: -19.5,42.5 + parent: 2 + - type: AtmosPipeColor + color: '#947507FF' + - uid: 9186 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -23.5,50.5 + parent: 2 + - type: AtmosPipeColor + color: '#333333FF' + - uid: 9229 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -19.5,50.5 + parent: 2 + - type: AtmosPipeColor + color: '#3AB334FF' + - uid: 9232 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -22.5,41.5 + parent: 2 + - uid: 9253 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -15.5,52.5 + parent: 2 + - uid: 13588 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -17.5,47.5 + parent: 2 + - type: AtmosPipeColor + color: '#03FCD3FF' + - uid: 23716 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -19.5,49.5 + parent: 2 + - type: AtmosPipeColor + color: '#03FCD3FF' + - uid: 23725 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -20.5,51.5 + parent: 2 + - type: AtmosPipeColor + color: '#03FCD3FF' + - uid: 23741 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -16.5,43.5 + parent: 2 + - uid: 23829 + components: + - type: Transform + pos: -21.5,43.5 + parent: 2 + - uid: 28647 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -17.5,41.5 + parent: 2 + - type: AtmosPipeColor + color: '#947507FF' + - uid: 28666 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -21.5,53.5 + parent: 2 + - type: AtmosPipeColor + color: '#333333FF' + - uid: 28676 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -22.5,48.5 + parent: 2 + - type: AtmosPipeColor + color: '#03FCD3FF' + - uid: 28827 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -21.5,48.5 + parent: 2 + - type: AtmosPipeColor + color: '#03FCD3FF' + - uid: 28848 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -17.5,45.5 + parent: 2 + - uid: 29027 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -11.5,47.5 + parent: 2 + - uid: 31143 + components: + - type: Transform + pos: -19.5,43.5 + parent: 2 + - type: AtmosPipeColor + color: '#947507FF' + - uid: 31144 + components: + - type: Transform + pos: -19.5,44.5 + parent: 2 + - type: AtmosPipeColor + color: '#947507FF' + - uid: 31163 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -19.5,50.5 + parent: 2 + - type: AtmosPipeColor + color: '#03FCD3FF' + - uid: 31168 + components: + - type: Transform + pos: -20.5,46.5 + parent: 2 + - uid: 31174 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -19.5,45.5 + parent: 2 + - uid: 31176 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -22.5,47.5 + parent: 2 + - uid: 31177 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -21.5,47.5 + parent: 2 + - uid: 31192 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -20.5,43.5 + parent: 2 + - uid: 31198 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -21.5,43.5 + parent: 2 + - uid: 31199 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -22.5,43.5 + parent: 2 + - uid: 31218 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -14.5,43.5 + parent: 2 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 31219 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -15.5,42.5 + parent: 2 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 31220 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -16.5,42.5 + parent: 2 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 31221 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -17.5,42.5 + parent: 2 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 31238 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -18.5,43.5 + parent: 2 + - uid: 31239 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -17.5,43.5 + parent: 2 + - uid: 31241 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -15.5,43.5 + parent: 2 + - uid: 31242 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -14.5,43.5 + parent: 2 - proto: GasPipeTJunction entities: - uid: 17 @@ -130182,44 +131511,6 @@ entities: parent: 2 - type: AtmosPipeColor color: '#990000FF' - - uid: 8797 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -20.5,46.5 - parent: 2 - - type: AtmosPipeColor - color: '#03FCD3FF' - - uid: 8802 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -14.5,43.5 - parent: 2 - - type: AtmosPipeColor - color: '#947507FF' - - uid: 8804 - components: - - type: Transform - pos: -9.5,42.5 - parent: 2 - - type: AtmosPipeColor - color: '#FF1212FF' - - uid: 8808 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -16.5,42.5 - parent: 2 - - type: AtmosPipeColor - color: '#947507FF' - - uid: 8811 - components: - - type: Transform - pos: -15.5,44.5 - parent: 2 - - type: AtmosPipeColor - color: '#947507FF' - uid: 8833 components: - type: Transform @@ -130227,20 +131518,6 @@ entities: parent: 2 - type: AtmosPipeColor color: '#0335FCFF' - - uid: 8846 - components: - - type: Transform - pos: -14.5,44.5 - parent: 2 - - type: AtmosPipeColor - color: '#947507FF' - - uid: 8848 - components: - - type: Transform - pos: -21.5,42.5 - parent: 2 - - type: AtmosPipeColor - color: '#03FCD3FF' - uid: 8863 components: - type: Transform @@ -130256,21 +131533,6 @@ entities: parent: 2 - type: AtmosPipeColor color: '#0335FCFF' - - uid: 8973 - components: - - type: Transform - pos: -22.5,46.5 - parent: 2 - - type: AtmosPipeColor - color: '#03FCD3FF' - - uid: 8981 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -10.5,42.5 - parent: 2 - - type: AtmosPipeColor - color: '#FF1212FF' - uid: 8984 components: - type: Transform @@ -130279,22 +131541,6 @@ entities: parent: 2 - type: AtmosPipeColor color: '#0335FCFF' - - uid: 8986 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -19.5,50.5 - parent: 2 - - type: AtmosPipeColor - color: '#0335FCFF' - - uid: 8989 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -19.5,51.5 - parent: 2 - - type: AtmosPipeColor - color: '#0335FCFF' - uid: 9118 components: - type: Transform @@ -131015,13 +132261,6 @@ entities: parent: 2 - type: AtmosPipeColor color: '#0335FCFF' - - uid: 13588 - components: - - type: Transform - pos: -20.5,51.5 - parent: 2 - - type: AtmosPipeColor - color: '#0335FCFF' - uid: 13662 components: - type: Transform @@ -132825,35 +134064,18 @@ entities: parent: 2 - type: AtmosPipeColor color: '#0335FCFF' - - uid: 28624 + - uid: 28650 + components: + - type: Transform + pos: -18.5,48.5 + parent: 2 + - type: AtmosPipeColor + color: '#B3A234FF' + - uid: 28839 components: - type: Transform rot: -1.5707963267948966 rad - pos: -15.5,42.5 - parent: 2 - - type: AtmosPipeColor - color: '#947507FF' - - uid: 28629 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -20.5,48.5 - parent: 2 - - type: AtmosPipeColor - color: '#03FCD3FF' - - uid: 28630 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -20.5,47.5 - parent: 2 - - type: AtmosPipeColor - color: '#03FCD3FF' - - uid: 28857 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -12.5,42.5 + pos: -15.5,48.5 parent: 2 - type: AtmosPipeColor color: '#FF1212FF' @@ -132977,6 +134199,98 @@ entities: parent: 2 - type: AtmosPipeColor color: '#990000FF' +- proto: GasPipeTJunctionAlt1 + entities: + - uid: 8058 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -21.5,46.5 + parent: 2 + - type: AtmosPipeColor + color: '#3AB334FF' + - uid: 9215 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -19.5,41.5 + parent: 2 + - type: AtmosPipeColor + color: '#947507FF' + - uid: 9218 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -19.5,49.5 + parent: 2 + - type: AtmosPipeColor + color: '#947507FF' + - uid: 16804 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -17.5,49.5 + parent: 2 + - type: AtmosPipeColor + color: '#3AB334FF' + - uid: 24120 + components: + - type: Transform + pos: -21.5,48.5 + parent: 2 + - type: AtmosPipeColor + color: '#3AB334FF' + - uid: 31183 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -12.5,45.5 + parent: 2 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 31190 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -14.5,43.5 + parent: 2 +- proto: GasPipeTJunctionAlt2 + entities: + - uid: 7819 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -17.5,49.5 + parent: 2 + - type: AtmosPipeColor + color: '#3AB334FF' + - uid: 8046 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -15.5,49.5 + parent: 2 + - uid: 8943 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -19.5,48.5 + parent: 2 + - type: AtmosPipeColor + color: '#03FCD3FF' + - uid: 28853 + components: + - type: Transform + pos: -18.5,45.5 + parent: 2 + - uid: 31173 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -19.5,41.5 + parent: 2 + - type: AtmosPipeColor + color: '#947507FF' - proto: GasPort entities: - uid: 1675 @@ -133032,18 +134346,6 @@ entities: parent: 2 - type: AtmosPipeColor color: '#03FCD3FF' - - uid: 8120 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -9.5,43.5 - parent: 2 - - uid: 8121 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -18.5,51.5 - parent: 2 - uid: 8155 components: - type: Transform @@ -133088,14 +134390,6 @@ entities: parent: 2 - type: AtmosPipeColor color: '#990000FF' - - uid: 8799 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -12.5,44.5 - parent: 2 - - type: AtmosPipeColor - color: '#947507FF' - uid: 9113 components: - type: Transform @@ -133221,8 +134515,40 @@ entities: rot: 3.141592653589793 rad pos: -21.5,39.5 parent: 2 - - type: AtmosPipeColor - color: '#03FCD3FF' + - type: AtmosPipeLayers + pipeLayer: Secondary + - uid: 28659 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -14.5,49.5 + parent: 2 + - type: AtmosPipeLayers + pipeLayer: Tertiary + - uid: 28838 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -24.5,50.5 + parent: 2 + - type: AtmosPipeLayers + pipeLayer: Secondary + - uid: 28855 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -24.5,47.5 + parent: 2 + - type: AtmosPipeLayers + pipeLayer: Tertiary + - uid: 28861 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -24.5,45.5 + parent: 2 + - type: AtmosPipeLayers + pipeLayer: Tertiary - uid: 30939 components: - type: Transform @@ -133295,6 +134621,11 @@ entities: rot: 1.5707963267948966 rad pos: -36.5,29.5 parent: 2 + - uid: 8051 + components: + - type: Transform + pos: -21.5,43.5 + parent: 2 - uid: 9752 components: - type: Transform @@ -133329,6 +134660,48 @@ entities: targetPressure: 501.325 - type: AtmosPipeColor color: '#0335FCFF' +- proto: GasPressurePumpAlt1 + entities: + - uid: 28849 + components: + - type: Transform + pos: -22.5,44.5 + parent: 2 +- proto: GasPressurePumpAlt2 + entities: + - uid: 8044 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -22.5,44.5 + parent: 2 + - type: AtmosPipeLayers + pipeLayer: Primary + - uid: 9238 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -21.5,42.5 + parent: 2 +- proto: GasPressureRegulator + entities: + - uid: 28645 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -12.5,47.5 + parent: 2 + - type: AtmosPipeColor + color: '#333333FF' +- proto: GasPressureRegulatorAlt2 + entities: + - uid: 9001 + components: + - type: Transform + pos: -23.5,51.5 + parent: 2 + - type: AtmosPipeColor + color: '#333333FF' - proto: GasRecycler entities: - uid: 4902 @@ -133405,56 +134778,14 @@ entities: open: False - type: AtmosPipeColor color: '#3AB334FF' - - uid: 2174 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -23.5,51.5 - parent: 2 - - type: GasValve - open: False - - type: AtmosPipeColor - color: '#0335FCFF' - - uid: 8100 + - uid: 7780 components: - type: Transform rot: 3.141592653589793 rad - pos: -8.5,43.5 + pos: -15.5,47.5 parent: 2 - - type: GasValve - open: False - type: AtmosPipeColor color: '#FF1212FF' - - uid: 8101 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -10.5,43.5 - parent: 2 - - type: GasValve - open: False - - type: AtmosPipeColor - color: '#FF1212FF' - - uid: 8102 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -18.5,50.5 - parent: 2 - - type: GasValve - open: False - - type: AtmosPipeColor - color: '#0335FCFF' - - uid: 8103 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -18.5,52.5 - parent: 2 - - type: GasValve - open: False - - type: AtmosPipeColor - color: '#0335FCFF' - uid: 8180 components: - type: Transform @@ -133517,16 +134848,6 @@ entities: open: False - type: AtmosPipeColor color: '#990000FF' - - uid: 8809 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -24.5,49.5 - parent: 2 - - type: GasValve - open: False - - type: AtmosPipeColor - color: '#333333FF' - uid: 8855 components: - type: Transform @@ -133545,16 +134866,6 @@ entities: open: False - type: AtmosPipeColor color: '#3AB334FF' - - uid: 9006 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -24.5,48.5 - parent: 2 - - type: GasValve - open: False - - type: AtmosPipeColor - color: '#333333FF' - uid: 9026 components: - type: Transform @@ -133565,6 +134876,16 @@ entities: open: False - type: AtmosPipeColor color: '#B3A234FF' + - uid: 9185 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -17.5,41.5 + parent: 2 + - type: GasValve + open: False + - type: AtmosPipeColor + color: '#947507FF' - uid: 9203 components: - type: Transform @@ -133572,6 +134893,24 @@ entities: parent: 2 - type: GasValve open: False + - uid: 9214 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -16.5,48.5 + parent: 2 + - type: GasValve + open: False + - type: AtmosPipeColor + color: '#B3A234FF' + - uid: 9227 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -22.5,48.5 + parent: 2 + - type: AtmosPipeColor + color: '#B3A234FF' - uid: 9759 components: - type: Transform @@ -133609,6 +134948,16 @@ entities: parent: 2 - type: AtmosPipeColor color: '#0335FCFF' + - uid: 19163 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -18.5,45.5 + parent: 2 + - type: GasValve + open: False + - type: AtmosPipeColor + color: '#B3A234FF' - uid: 23828 components: - type: Transform @@ -133626,74 +134975,261 @@ entities: parent: 2 - type: GasValve open: False - - uid: 28623 + - uid: 31153 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -13.5,43.5 + rot: 3.141592653589793 rad + pos: -17.5,49.5 parent: 2 - type: GasValve open: False - type: AtmosPipeColor - color: '#FF1212FF' - - uid: 28827 + color: '#3AB334FF' +- proto: GasValveAlt1 + entities: + - uid: 715 + components: + - type: Transform + pos: -20.5,42.5 + parent: 2 + - type: GasValve + open: False + - type: AtmosPipeColor + color: '#947507FF' + - uid: 8067 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -18.5,41.5 + parent: 2 + - type: AtmosPipeColor + color: '#947507FF' + - uid: 8121 components: - type: Transform rot: 3.141592653589793 rad - pos: -22.5,43.5 + pos: -17.5,48.5 + parent: 2 + - type: AtmosPipeColor + color: '#3AB334FF' + - uid: 8215 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -22.5,46.5 + parent: 2 + - type: AtmosPipeColor + color: '#3AB334FF' + - uid: 8945 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -18.5,44.5 parent: 2 - type: GasValve open: False - type: AtmosPipeColor color: '#03FCD3FF' + - uid: 28622 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -22.5,49.5 + parent: 2 + - type: AtmosPipeColor + color: '#947507FF' + - uid: 28637 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -20.5,50.5 + parent: 2 + - type: GasValve + open: False + - type: AtmosPipeColor + color: '#947507FF' + - uid: 28646 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -23.5,48.5 + parent: 2 + - type: GasValve + open: False + - type: AtmosPipeColor + color: '#3AB334FF' + - uid: 28660 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -17.5,50.5 + parent: 2 + - type: GasValve + open: False + - type: AtmosPipeColor + color: '#3AB334FF' + - uid: 28843 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -21.5,51.5 + parent: 2 + - type: GasValve + open: False + - type: AtmosPipeColor + color: '#03FCD3FF' + - uid: 28846 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -15.5,51.5 + parent: 2 + - type: GasValve + open: False + - type: AtmosPipeColor + color: '#990000FF' + - uid: 31189 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -14.5,44.5 + parent: 2 + - type: GasValve + open: False + - type: AtmosPipeColor + color: '#990000FF' + - uid: 31195 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -12.5,44.5 + parent: 2 + - type: GasValve + open: False + - type: AtmosPipeColor + color: '#990000FF' + - uid: 31197 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -19.5,42.5 + parent: 2 + - type: GasValve + open: False + - uid: 31212 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -14.5,45.5 + parent: 2 + - type: AtmosPipeColor + color: '#990000FF' +- proto: GasValveAlt2 + entities: + - uid: 679 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -18.5,41.5 + parent: 2 + - type: GasValve + open: False + - type: AtmosPipeColor + color: '#947507FF' + - uid: 7732 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -20.5,50.5 + parent: 2 + - type: AtmosPipeColor + color: '#3AB334FF' + - uid: 8040 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -23.5,48.5 + parent: 2 + - type: AtmosPipeColor + color: '#03FCD3FF' + - uid: 8981 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -22.5,46.5 + parent: 2 + - type: AtmosPipeColor + color: '#947507FF' + - uid: 9237 + components: + - type: Transform + pos: -20.5,42.5 + parent: 2 + - type: AtmosPipeColor + color: '#947507FF' + - uid: 9239 + components: + - type: Transform + pos: -17.5,48.5 + parent: 2 + - type: GasValve + open: False + - type: AtmosPipeColor + color: '#3AB334FF' + - uid: 23734 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -16.5,45.5 + parent: 2 + - type: GasValve + open: False + - uid: 28656 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -17.5,50.5 + parent: 2 + - type: GasValve + open: False + - type: AtmosPipeColor + color: '#3AB334FF' - uid: 28829 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -23.5,46.5 + rot: 1.5707963267948966 rad + pos: -16.5,47.5 parent: 2 - - type: GasValve - open: False - type: AtmosPipeColor color: '#03FCD3FF' - - uid: 28840 + - uid: 31160 components: - type: Transform rot: 3.141592653589793 rad - pos: -19.5,48.5 + pos: -18.5,44.5 parent: 2 - - type: GasValve - open: False - - type: AtmosPipeColor - color: '#0335FCFF' - - uid: 28842 - components: - - type: Transform - pos: -15.5,43.5 - parent: 2 - - type: GasValve - open: False - - type: AtmosPipeColor - color: '#947507FF' - - uid: 28847 - components: - - type: Transform - pos: -16.5,43.5 - parent: 2 - - type: GasValve - open: False - - type: AtmosPipeColor - color: '#947507FF' - - uid: 28849 + - uid: 31162 components: - type: Transform rot: -1.5707963267948966 rad - pos: -14.5,40.5 + pos: -21.5,51.5 parent: 2 - - type: GasValve - open: False - type: AtmosPipeColor - color: '#947507FF' + color: '#03FCD3FF' + - uid: 31193 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -19.5,43.5 + parent: 2 + - uid: 31217 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -14.5,44.5 + parent: 2 + - type: AtmosPipeColor + color: '#990000FF' - proto: GasVentPump entities: - uid: 56 @@ -136136,27 +137672,6 @@ entities: parent: 2 - type: AtmosPipeColor color: '#990000FF' - - uid: 8128 - components: - - type: Transform - pos: -8.5,46.5 - parent: 2 - - type: DeviceNetwork - deviceLists: - - 8131 - - type: AtmosPipeColor - color: '#FF1212FF' - - uid: 8129 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -15.5,52.5 - parent: 2 - - type: DeviceNetwork - deviceLists: - - 8130 - - type: AtmosPipeColor - color: '#0335FCFF' - uid: 9112 components: - type: Transform @@ -136169,6 +137684,19 @@ entities: - 29904 - type: AtmosPipeColor color: '#990000FF' + - uid: 9198 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -10.5,46.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 31253 + - type: AtmosPipeLayers + pipeLayer: Secondary + - type: AtmosPipeColor + color: '#990000FF' - uid: 9858 components: - type: Transform @@ -138193,53 +139721,78 @@ entities: color: '#990000FF' - proto: GasVolumePump entities: - - uid: 8939 + - uid: 7778 components: - type: Transform - pos: -20.5,50.5 - parent: 2 - - type: AtmosPipeColor - color: '#0335FCFF' - - uid: 16795 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -20.5,45.5 - parent: 2 - - type: AtmosPipeColor - color: '#03FCD3FF' - - uid: 28621 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -17.5,42.5 - parent: 2 - - type: AtmosPipeColor - color: '#947507FF' - - uid: 28622 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -21.5,40.5 - parent: 2 - - type: AtmosPipeColor - color: '#03FCD3FF' - - uid: 28843 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -13.5,44.5 - parent: 2 - - type: AtmosPipeColor - color: '#947507FF' - - uid: 28856 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -13.5,42.5 + pos: -15.5,49.5 parent: 2 - type: AtmosPipeColor color: '#FF1212FF' + - uid: 8105 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -24.5,46.5 + parent: 2 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 9225 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -17.5,46.5 + parent: 2 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 28856 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -23.5,45.5 + parent: 2 + - type: AtmosPipeLayers + pipeLayer: Tertiary + - uid: 31164 + components: + - type: Transform + pos: -15.5,42.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF1212FF' +- proto: GasVolumePumpAlt1 + entities: + - uid: 7787 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -23.5,51.5 + parent: 2 + - uid: 7831 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -21.5,41.5 + parent: 2 +- proto: GasVolumePumpAlt2 + entities: + - uid: 7784 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -15.5,51.5 + parent: 2 + - uid: 23646 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -23.5,47.5 + parent: 2 + - uid: 28657 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -12.5,47.5 + parent: 2 - proto: Gateway entities: - uid: 3678 @@ -140280,11 +141833,17 @@ entities: rot: 3.141592653589793 rad pos: -7.5,52.5 parent: 2 - - uid: 7829 + - uid: 7776 components: - type: Transform rot: -1.5707963267948966 rad - pos: -13.5,50.5 + pos: -12.5,46.5 + parent: 2 + - uid: 7781 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -15.5,50.5 parent: 2 - uid: 7834 components: @@ -140381,41 +141940,16 @@ entities: rot: -1.5707963267948966 rad pos: -13.5,51.5 parent: 2 - - uid: 8042 + - uid: 8045 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -14.5,53.5 + pos: -9.5,44.5 parent: 2 - uid: 8047 components: - type: Transform rot: -1.5707963267948966 rad - pos: -13.5,52.5 - parent: 2 - - uid: 8055 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -16.5,53.5 - parent: 2 - - uid: 8056 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -17.5,52.5 - parent: 2 - - uid: 8057 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -17.5,51.5 - parent: 2 - - uid: 8058 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -17.5,50.5 + pos: -15.5,52.5 parent: 2 - uid: 8059 components: @@ -140429,46 +141963,30 @@ entities: rot: -1.5707963267948966 rad pos: -9.5,48.5 parent: 2 - - uid: 8061 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -8.5,48.5 - parent: 2 - - uid: 8062 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -7.5,47.5 - parent: 2 - uid: 8063 components: - type: Transform rot: -1.5707963267948966 rad pos: -7.5,46.5 parent: 2 - - uid: 8064 + - uid: 8096 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -7.5,45.5 + pos: -17.5,52.5 parent: 2 - - uid: 8065 + - uid: 8102 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -8.5,44.5 + pos: -8.5,48.5 parent: 2 - - uid: 8066 + - uid: 8103 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -9.5,44.5 + pos: -14.5,54.5 parent: 2 - - uid: 8067 + - uid: 8122 components: - type: Transform - rot: -1.5707963267948966 rad pos: -10.5,44.5 parent: 2 - uid: 8137 @@ -140486,22 +142004,17 @@ entities: - type: Transform pos: -25.5,39.5 parent: 2 + - uid: 8150 + components: + - type: Transform + pos: -18.5,52.5 + parent: 2 - uid: 8153 components: - type: Transform rot: -1.5707963267948966 rad pos: -22.5,28.5 parent: 2 - - uid: 8190 - components: - - type: Transform - pos: -25.5,54.5 - parent: 2 - - uid: 8192 - components: - - type: Transform - pos: -25.5,45.5 - parent: 2 - uid: 8193 components: - type: Transform @@ -140517,12 +142030,6 @@ entities: - type: Transform pos: -25.5,49.5 parent: 2 - - uid: 8207 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -25.5,45.5 - parent: 2 - uid: 8208 components: - type: Transform @@ -140534,11 +142041,6 @@ entities: - type: Transform pos: -25.5,51.5 parent: 2 - - uid: 8210 - components: - - type: Transform - pos: -25.5,52.5 - parent: 2 - uid: 8232 components: - type: Transform @@ -140825,6 +142327,27 @@ entities: rot: 3.141592653589793 rad pos: -24.5,3.5 parent: 2 + - uid: 8799 + components: + - type: Transform + pos: -16.5,54.5 + parent: 2 + - uid: 8809 + components: + - type: Transform + pos: -19.5,52.5 + parent: 2 + - uid: 9021 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -24.5,52.5 + parent: 2 + - uid: 9187 + components: + - type: Transform + pos: -8.5,44.5 + parent: 2 - uid: 9257 components: - type: Transform @@ -144276,6 +145799,12 @@ entities: rot: 3.141592653589793 rad pos: -2.5,-19.5 parent: 21002 + - uid: 24121 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -23.5,52.5 + parent: 2 - uid: 24133 components: - type: Transform @@ -145106,6 +146635,16 @@ entities: rot: -1.5707963267948966 rad pos: 50.5,-10.5 parent: 2 + - uid: 28675 + components: + - type: Transform + pos: -20.5,52.5 + parent: 2 + - uid: 28847 + components: + - type: Transform + pos: -21.5,52.5 + parent: 2 - uid: 28870 components: - type: Transform @@ -146601,6 +148140,22 @@ entities: parent: 2 - proto: HeatExchanger entities: + - uid: 8108 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -22.5,53.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 8109 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -16.5,53.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF1212FF' - uid: 8221 components: - type: Transform @@ -146609,6 +148164,14 @@ entities: parent: 2 - type: AtmosPipeColor color: '#0335FCFF' + - uid: 8994 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -26.5,46.5 + parent: 2 + - type: AtmosPipeColor + color: '#0335FCFF' - uid: 9024 components: - type: Transform @@ -146616,6 +148179,36 @@ entities: parent: 2 - type: AtmosPipeColor color: '#0335FCFF' + - uid: 9210 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -26.5,51.5 + parent: 2 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 9222 + components: + - type: Transform + pos: -28.5,49.5 + parent: 2 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 9224 + components: + - type: Transform + pos: -28.5,48.5 + parent: 2 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 9423 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -21.5,53.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF1212FF' - uid: 16807 components: - type: Transform @@ -146632,6 +148225,47 @@ entities: parent: 2 - type: AtmosPipeColor color: '#0335FCFF' + - uid: 23736 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -17.5,53.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF1212FF' +- proto: HeatExchangerBend + entities: + - uid: 8190 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -23.5,53.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 8990 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -28.5,51.5 + parent: 2 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 9213 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -28.5,46.5 + parent: 2 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 28634 + components: + - type: Transform + pos: -15.5,53.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF1212FF' - proto: HighSecArmoryLocked entities: - uid: 3759 @@ -146663,6 +148297,11 @@ entities: parent: 2 - proto: HolofanProjector entities: + - uid: 8798 + components: + - type: Transform + pos: -9.700156,43.687534 + parent: 2 - uid: 23794 components: - type: Transform @@ -147010,13 +148649,6 @@ entities: - type: Transform pos: -29.5,22.5 parent: 2 -- proto: HolopadEngineeringAtmosTeg - entities: - - uid: 29769 - components: - - type: Transform - pos: -19.5,45.5 - parent: 2 - proto: HolopadEngineeringBreakroom entities: - uid: 2171 @@ -147440,7 +149072,7 @@ entities: pos: 36.5,-35.5 parent: 2 - type: Door - secondsUntilStateChange: -340204.97 + secondsUntilStateChange: -359496.5 state: Opening - uid: 5211 components: @@ -147853,6 +149485,11 @@ entities: parent: 2 - proto: Igniter entities: + - uid: 23720 + components: + - type: Transform + pos: -19.741884,53.264633 + parent: 2 - uid: 28832 components: - type: Transform @@ -147863,6 +149500,11 @@ entities: - type: Transform pos: -19.21745,39.409294 parent: 2 + - uid: 31184 + components: + - type: Transform + pos: -8.459323,46.421654 + parent: 2 - proto: InflatableDoor entities: - uid: 27940 @@ -150468,11 +152110,6 @@ entities: - type: Transform pos: 28.5,-14.5 parent: 2 - - uid: 23173 - components: - - type: Transform - pos: 17.5,-27.5 - parent: 2 - uid: 28333 components: - type: Transform @@ -150528,6 +152165,12 @@ entities: - type: Transform pos: -19.5,20.5 parent: 2 + - uid: 31138 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 13.5,-25.5 + parent: 2 - proto: MarimbaInstrument entities: - uid: 28990 @@ -151608,6 +153251,11 @@ entities: - type: Transform pos: 57.5,-15.5 parent: 2 + - uid: 31223 + components: + - type: Transform + pos: -12.5,45.5 + parent: 2 - proto: PaintingHelloWorld entities: - uid: 3736 @@ -153732,6 +155380,11 @@ entities: - type: Transform pos: -42.5,17.5 parent: 2 + - uid: 31230 + components: + - type: Transform + pos: -13.5,45.5 + parent: 2 - proto: PlasmaReinforcedWindowDirectional entities: - uid: 3386 @@ -155123,6 +156776,11 @@ entities: rot: -1.5707963267948966 rad pos: -23.5,16.5 parent: 2 + - uid: 3143 + components: + - type: Transform + pos: 14.5,-26.5 + parent: 2 - uid: 3589 components: - type: Transform @@ -155382,12 +157040,6 @@ entities: rot: 1.5707963267948966 rad pos: 26.5,-17.5 parent: 2 - - uid: 18028 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 14.5,-27.5 - parent: 2 - uid: 18056 components: - type: Transform @@ -156413,6 +158065,12 @@ entities: rot: 3.141592653589793 rad pos: 46.5,-6.5 parent: 2 + - uid: 3142 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 15.5,-31.5 + parent: 2 - uid: 3451 components: - type: Transform @@ -156926,23 +158584,6 @@ entities: rot: 1.5707963267948966 rad pos: -24.5,47.5 parent: 2 - - uid: 9183 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -18.5,49.5 - parent: 2 - - uid: 9184 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -14.5,45.5 - parent: 2 - - uid: 9185 - components: - - type: Transform - pos: -11.5,43.5 - parent: 2 - uid: 9281 components: - type: Transform @@ -157409,11 +159050,6 @@ entities: rot: 1.5707963267948966 rad pos: 13.5,-36.5 parent: 2 - - uid: 17412 - components: - - type: Transform - pos: 15.5,-29.5 - parent: 2 - uid: 17413 components: - type: Transform @@ -157801,6 +159437,12 @@ entities: rot: 1.5707963267948966 rad pos: -42.5,-27.5 parent: 2 + - uid: 23565 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 17.5,-29.5 + parent: 2 - uid: 23765 components: - type: Transform @@ -157926,6 +159568,29 @@ entities: - type: Transform pos: 54.5,20.5 parent: 2 + - uid: 31347 + components: + - type: Transform + pos: -16.5,49.5 + parent: 2 + - uid: 31348 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -14.5,46.5 + parent: 2 + - uid: 31349 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -11.5,40.5 + parent: 2 + - uid: 31352 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -24.5,50.5 + parent: 2 - proto: PoweredlightEmpty entities: - uid: 12295 @@ -158188,30 +159853,6 @@ entities: rot: 1.5707963267948966 rad pos: 10.5,37.5 parent: 2 - - uid: 9186 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -14.5,50.5 - parent: 2 - - uid: 9187 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -10.5,47.5 - parent: 2 - - uid: 9188 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -15.5,48.5 - parent: 2 - - uid: 9189 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -12.5,46.5 - parent: 2 - uid: 9667 components: - type: Transform @@ -163223,14 +164864,6 @@ entities: parent: 2 - type: DeltaPressure gridUid: 2 - - uid: 6666 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -13.5,50.5 - parent: 2 - - type: DeltaPressure - gridUid: 2 - uid: 7164 components: - type: Transform @@ -163263,14 +164896,6 @@ entities: parent: 2 - type: DeltaPressure gridUid: 2 - - uid: 7620 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -17.5,50.5 - parent: 2 - - type: DeltaPressure - gridUid: 2 - uid: 7632 components: - type: Transform @@ -163342,29 +164967,6 @@ entities: parent: 2 - type: DeltaPressure gridUid: 2 - - uid: 7776 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -16.5,53.5 - parent: 2 - - type: DeltaPressure - gridUid: 2 - - uid: 7780 - components: - - type: Transform - pos: -7.5,45.5 - parent: 2 - - type: DeltaPressure - gridUid: 2 - - uid: 7781 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -13.5,52.5 - parent: 2 - - type: DeltaPressure - gridUid: 2 - uid: 7782 components: - type: Transform @@ -163373,26 +164975,10 @@ entities: parent: 2 - type: DeltaPressure gridUid: 2 - - uid: 7816 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -14.5,53.5 - parent: 2 - - type: DeltaPressure - gridUid: 2 - - uid: 7818 - components: - - type: Transform - pos: -8.5,48.5 - parent: 2 - - type: DeltaPressure - gridUid: 2 - uid: 7821 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -17.5,51.5 + pos: -21.5,52.5 parent: 2 - type: DeltaPressure gridUid: 2 @@ -163406,8 +164992,14 @@ entities: - uid: 7823 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -17.5,52.5 + pos: -20.5,52.5 + parent: 2 + - type: DeltaPressure + gridUid: 2 + - uid: 7824 + components: + - type: Transform + pos: -14.5,54.5 parent: 2 - type: DeltaPressure gridUid: 2 @@ -163418,38 +165010,39 @@ entities: parent: 2 - type: DeltaPressure gridUid: 2 - - uid: 7826 + - uid: 8057 components: - type: Transform - pos: -9.5,44.5 + pos: -24.5,52.5 parent: 2 - type: DeltaPressure gridUid: 2 - - uid: 7827 + - uid: 8083 components: - type: Transform - pos: -8.5,44.5 + pos: -16.5,54.5 parent: 2 - type: DeltaPressure gridUid: 2 - - uid: 8037 + - uid: 8097 components: - type: Transform - pos: -10.5,44.5 + pos: -17.5,52.5 parent: 2 - type: DeltaPressure gridUid: 2 - - uid: 8040 + - uid: 8098 components: - type: Transform - pos: -7.5,47.5 + rot: -1.5707963267948966 rad + pos: -15.5,52.5 parent: 2 - type: DeltaPressure gridUid: 2 - - uid: 8041 + - uid: 8129 components: - type: Transform - pos: -7.5,46.5 + pos: -8.5,48.5 parent: 2 - type: DeltaPressure gridUid: 2 @@ -163510,6 +165103,21 @@ entities: parent: 2 - type: DeltaPressure gridUid: 2 + - uid: 8988 + components: + - type: Transform + pos: -18.5,52.5 + parent: 2 + - type: DeltaPressure + gridUid: 2 + - uid: 9255 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -12.5,46.5 + parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 9361 components: - type: Transform @@ -163533,6 +165141,13 @@ entities: parent: 2 - type: DeltaPressure gridUid: 2 + - uid: 9422 + components: + - type: Transform + pos: -10.5,44.5 + parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 9586 components: - type: Transform @@ -163609,22 +165224,6 @@ entities: parent: 2 - type: DeltaPressure gridUid: 2 - - uid: 13508 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -4.5,44.5 - parent: 2 - - type: DeltaPressure - gridUid: 2 - - uid: 13617 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -5.5,44.5 - parent: 2 - - type: DeltaPressure - gridUid: 2 - uid: 16673 components: - type: Transform @@ -163641,6 +165240,13 @@ entities: parent: 2 - type: DeltaPressure gridUid: 2 + - uid: 16795 + components: + - type: Transform + pos: -9.5,44.5 + parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 17304 components: - type: Transform @@ -163678,14 +165284,6 @@ entities: parent: 2 - type: DeltaPressure gridUid: 2 - - uid: 19163 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -3.5,44.5 - parent: 2 - - type: DeltaPressure - gridUid: 2 - uid: 23599 components: - type: Transform @@ -163702,6 +165300,28 @@ entities: parent: 2 - type: DeltaPressure gridUid: 2 + - uid: 23715 + components: + - type: Transform + pos: -8.5,44.5 + parent: 2 + - type: DeltaPressure + gridUid: 2 + - uid: 23737 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -15.5,50.5 + parent: 2 + - type: DeltaPressure + gridUid: 2 + - uid: 23742 + components: + - type: Transform + pos: -19.5,52.5 + parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 28512 components: - type: Transform @@ -163730,6 +165350,14 @@ entities: parent: 21002 - type: DeltaPressure gridUid: 21002 + - uid: 28851 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -23.5,52.5 + parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 29154 components: - type: Transform @@ -163830,6 +165458,13 @@ entities: parent: 2 - type: DeltaPressure gridUid: 2 + - uid: 31185 + components: + - type: Transform + pos: -7.5,46.5 + parent: 2 + - type: DeltaPressure + gridUid: 2 - proto: ReinforcedUraniumWindow entities: - uid: 13028 @@ -165502,13 +167137,6 @@ entities: parent: 2 - type: DeltaPressure gridUid: 2 - - uid: 8080 - components: - - type: Transform - pos: -25.5,52.5 - parent: 2 - - type: DeltaPressure - gridUid: 2 - uid: 8081 components: - type: Transform @@ -165516,14 +167144,6 @@ entities: parent: 2 - type: DeltaPressure gridUid: 2 - - uid: 8083 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -25.5,45.5 - parent: 2 - - type: DeltaPressure - gridUid: 2 - uid: 8084 components: - type: Transform @@ -167981,6 +169601,27 @@ entities: parent: 2 - type: DeltaPressure gridUid: 2 + - uid: 28663 + components: + - type: Transform + pos: -4.5,44.5 + parent: 2 + - type: DeltaPressure + gridUid: 2 + - uid: 28664 + components: + - type: Transform + pos: -5.5,44.5 + parent: 2 + - type: DeltaPressure + gridUid: 2 + - uid: 28665 + components: + - type: Transform + pos: -3.5,44.5 + parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 29299 components: - type: Transform @@ -168543,22 +170184,6 @@ entities: parent: 2 - type: Fixtures fixtures: {} - - uid: 23644 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -12.5,45.5 - parent: 2 - - type: Fixtures - fixtures: {} - - uid: 23646 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -16.5,48.5 - parent: 2 - - type: Fixtures - fixtures: {} - uid: 24118 components: - type: Transform @@ -170464,21 +172089,6 @@ entities: - Toggle - type: Fixtures fixtures: {} - - uid: 23829 - components: - - type: MetaData - name: blast door - - type: Transform - rot: -1.5707963267948966 rad - pos: -17.5,53.5 - parent: 2 - - type: DeviceLinkSource - linkedPorts: - 16797: - - - Pressed - - Toggle - - type: Fixtures - fixtures: {} - uid: 24385 components: - type: Transform @@ -170686,6 +172296,49 @@ entities: - Toggle - type: Fixtures fixtures: {} + - uid: 31250 + components: + - type: MetaData + name: igniter + - type: Transform + pos: -22.5,52.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 23720: + - - Pressed + - Trigger + - type: Fixtures + fixtures: {} + - uid: 31251 + components: + - type: MetaData + name: igniter + - type: Transform + pos: -11.5,44.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 31184: + - - Pressed + - Trigger + - type: Fixtures + fixtures: {} + - uid: 31252 + components: + - type: MetaData + name: blast door + - type: Transform + rot: 3.141592653589793 rad + pos: -14.5,50.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 8846: + - - Pressed + - Toggle + - type: Fixtures + fixtures: {} - proto: SignalControlledValve entities: - uid: 12892 @@ -175689,11 +177342,6 @@ entities: - type: Transform pos: -16.5,34.5 parent: 2 - - uid: 23565 - components: - - type: Transform - pos: 12.5,-27.5 - parent: 2 - uid: 23566 components: - type: Transform @@ -175709,6 +177357,11 @@ entities: - type: Transform pos: 44.5,31.5 parent: 2 + - uid: 31135 + components: + - type: Transform + pos: 17.5,-27.5 + parent: 2 - proto: SpawnMobParrot entities: - uid: 676 @@ -176736,6 +178389,18 @@ entities: - type: Transform pos: -25.50282,22.116556 parent: 2 + - uid: 28648 + components: + - type: Transform + pos: -11.460573,43.625034 + parent: 2 +- proto: SprayPainterAmmo + entities: + - uid: 31283 + components: + - type: Transform + pos: -10.918906,43.583366 + parent: 2 - proto: StairDark entities: - uid: 1152 @@ -177001,6 +178666,13 @@ entities: - type: Transform pos: -15.5,-29.5 parent: 2 +- proto: StationAiFixerComputer + entities: + - uid: 3145 + components: + - type: Transform + pos: 15.5,-28.5 + parent: 2 - proto: StationAiUploadComputer entities: - uid: 29468 @@ -177718,7 +179390,7 @@ entities: parent: 2 - proto: SuitStorageRD entities: - - uid: 9893 + - uid: 17412 components: - type: Transform pos: 17.5,-29.5 @@ -178030,14 +179702,6 @@ entities: - SurveillanceCameraEngineering nameSet: True id: Atmos W - - uid: 20901 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -26.5,43.5 - parent: 2 - - type: SurveillanceCamera - id: Atmos Lockeroom - uid: 20903 components: - type: Transform @@ -178117,38 +179781,6 @@ entities: - SurveillanceCameraEngineering nameSet: True id: SMES B - - uid: 23807 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -5.5,47.5 - parent: 2 - - type: SurveillanceCamera - setupAvailableNetworks: - - SurveillanceCameraEngineering - nameSet: True - id: SMES C - - uid: 28861 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -27.5,37.5 - parent: 2 - - type: SurveillanceCamera - setupAvailableNetworks: - - SurveillanceCameraEngineering - nameSet: True - id: Pressure Bank - - uid: 29027 - components: - - type: Transform - pos: -14.5,40.5 - parent: 2 - - type: SurveillanceCamera - setupAvailableNetworks: - - SurveillanceCameraEngineering - nameSet: True - id: TEG S - uid: 29028 components: - type: Transform @@ -178214,28 +179846,6 @@ entities: - SurveillanceCameraEngineering nameSet: True id: Gas Tanks - - uid: 29117 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -20.5,53.5 - parent: 2 - - type: SurveillanceCamera - setupAvailableNetworks: - - SurveillanceCameraEngineering - nameSet: True - id: TEG N - - uid: 29118 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -14.5,45.5 - parent: 2 - - type: SurveillanceCamera - setupAvailableNetworks: - - SurveillanceCameraEngineering - nameSet: True - id: TEG Center - uid: 29119 components: - type: Transform @@ -178408,6 +180018,59 @@ entities: - SurveillanceCameraEngineering nameSet: True id: Anchorage + - uid: 31346 + components: + - type: Transform + pos: -12.5,40.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: TEG East + - uid: 31350 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -24.5,44.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: TEG West + - uid: 31351 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -22.5,51.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: TEG North + - uid: 31355 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,46.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: TEG SMES + - uid: 31357 + components: + - type: Transform + pos: 53.5,29.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: E Solars - proto: SurveillanceCameraGeneral entities: - uid: 7089 @@ -178566,16 +180229,6 @@ entities: - SurveillanceCameraGeneral nameSet: True id: Arrivals N - - uid: 23677 - components: - - type: Transform - pos: -5.5,49.5 - parent: 2 - - type: SurveillanceCamera - setupAvailableNetworks: - - SurveillanceCameraGeneral - nameSet: True - id: North Dock - uid: 29018 components: - type: Transform @@ -178981,6 +180634,17 @@ entities: - SurveillanceCameraGeneral nameSet: True id: Evac 3 + - uid: 31356 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -12.5,50.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Engi Dock - proto: SurveillanceCameraMedical entities: - uid: 20915 @@ -179795,27 +181459,6 @@ entities: - SurveillanceCameraService nameSet: True id: Librarian's Office - - uid: 29183 - components: - - type: Transform - pos: -10.5,35.5 - parent: 2 - - type: SurveillanceCamera - setupAvailableNetworks: - - SurveillanceCameraService - nameSet: True - id: Library W - - uid: 29184 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -5.5,38.5 - parent: 2 - - type: SurveillanceCamera - setupAvailableNetworks: - - SurveillanceCameraService - nameSet: True - id: Library E - proto: SurveillanceCameraSupply entities: - uid: 20893 @@ -180395,6 +182038,12 @@ entities: rot: 1.5707963267948966 rad pos: -28.5,25.5 parent: 2 + - uid: 8207 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -8.5,43.5 + parent: 2 - uid: 8218 components: - type: Transform @@ -181002,6 +182651,24 @@ entities: - type: Transform pos: 59.5,16.5 parent: 2 + - uid: 31226 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -11.5,43.5 + parent: 2 + - uid: 31228 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -9.5,43.5 + parent: 2 + - uid: 31229 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -10.5,43.5 + parent: 2 - proto: TableCarpet entities: - uid: 7942 @@ -183055,26 +184722,26 @@ entities: parent: 2 - proto: TegCenter entities: - - uid: 3083 + - uid: 23644 components: - type: Transform rot: -1.5707963267948966 rad - pos: -19.5,43.5 + pos: -16.5,44.5 parent: 2 - proto: TegCirculator entities: - - uid: 5795 - components: - - type: Transform - pos: -18.5,43.5 - parent: 2 - - type: PointLight - color: '#FF3300FF' - - uid: 7814 + - uid: 9249 components: - type: Transform rot: 3.141592653589793 rad - pos: -20.5,43.5 + pos: -17.5,44.5 + parent: 2 + - type: PointLight + color: '#FF3300FF' + - uid: 31139 + components: + - type: Transform + pos: -15.5,44.5 parent: 2 - type: PointLight color: '#FF3300FF' @@ -187622,25 +189289,10 @@ entities: - type: Transform pos: 18.5,-28.5 parent: 2 - - uid: 3142 - components: - - type: Transform - pos: 17.5,-28.5 - parent: 2 - - uid: 3143 - components: - - type: Transform - pos: 16.5,-28.5 - parent: 2 - uid: 3144 components: - type: Transform - pos: 15.5,-28.5 - parent: 2 - - uid: 3145 - components: - - type: Transform - pos: 14.5,-28.5 + pos: 15.5,-27.5 parent: 2 - uid: 3146 components: @@ -191063,34 +192715,11 @@ entities: rot: 3.141592653589793 rad pos: -5.5,51.5 parent: 2 - - uid: 7775 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -17.5,53.5 - parent: 2 - - uid: 7777 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -12.5,45.5 - parent: 2 - - uid: 7778 - components: - - type: Transform - pos: -11.5,44.5 - parent: 2 - uid: 7779 components: - type: Transform pos: -7.5,48.5 parent: 2 - - uid: 7784 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -11.5,48.5 - parent: 2 - uid: 7785 components: - type: Transform @@ -191103,53 +192732,17 @@ entities: rot: 3.141592653589793 rad pos: -13.5,48.5 parent: 2 - - uid: 7787 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -13.5,49.5 - parent: 2 - uid: 7817 components: - type: Transform rot: -1.5707963267948966 rad pos: -17.5,54.5 parent: 2 - - uid: 7819 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -11.5,47.5 - parent: 2 - - uid: 7820 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -13.5,47.5 - parent: 2 - - uid: 7824 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -14.5,49.5 - parent: 2 - uid: 7828 components: - type: Transform pos: -7.5,44.5 parent: 2 - - uid: 7831 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -12.5,47.5 - parent: 2 - - uid: 7832 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -11.5,45.5 - parent: 2 - uid: 7839 components: - type: Transform @@ -191166,47 +192759,10 @@ entities: - type: Transform pos: 9.5,38.5 parent: 2 - - uid: 8038 + - uid: 8048 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -16.5,49.5 - parent: 2 - - uid: 8044 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -13.5,45.5 - parent: 2 - - uid: 8045 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -14.5,48.5 - parent: 2 - - uid: 8046 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -16.5,48.5 - parent: 2 - - uid: 8049 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -17.5,49.5 - parent: 2 - - uid: 8050 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -14.5,47.5 - parent: 2 - - uid: 8051 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -16.5,47.5 + pos: -14.5,50.5 parent: 2 - uid: 8068 components: @@ -191250,12 +192806,6 @@ entities: rot: -1.5707963267948966 rad pos: -24.5,54.5 parent: 2 - - uid: 8075 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -24.5,53.5 - parent: 2 - uid: 8076 components: - type: Transform @@ -191286,12 +192836,29 @@ entities: rot: -1.5707963267948966 rad pos: -26.5,44.5 parent: 2 + - uid: 8125 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -13.5,46.5 + parent: 2 + - uid: 8128 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -11.5,46.5 + parent: 2 - uid: 8191 components: - type: Transform rot: 3.141592653589793 rad pos: 29.5,-13.5 parent: 2 + - uid: 8210 + components: + - type: Transform + pos: -22.5,52.5 + parent: 2 - uid: 8225 components: - type: Transform @@ -191808,6 +193375,16 @@ entities: rot: 3.141592653589793 rad pos: -44.5,6.5 parent: 2 + - uid: 8808 + components: + - type: Transform + pos: -16.5,50.5 + parent: 2 + - uid: 8845 + components: + - type: Transform + pos: -11.5,45.5 + parent: 2 - uid: 8894 components: - type: Transform @@ -195029,6 +196606,11 @@ entities: - type: Transform pos: 62.5,18.5 parent: 2 + - uid: 18028 + components: + - type: Transform + pos: 16.5,-28.5 + parent: 2 - uid: 18052 components: - type: Transform @@ -195187,6 +196769,11 @@ entities: rot: 1.5707963267948966 rad pos: 54.5,28.5 parent: 2 + - uid: 19017 + components: + - type: Transform + pos: 14.5,-27.5 + parent: 2 - uid: 19043 components: - type: Transform @@ -196430,6 +198017,11 @@ entities: - type: Transform pos: -26.5,10.5 parent: 2 + - uid: 23173 + components: + - type: Transform + pos: 14.5,-28.5 + parent: 2 - uid: 23425 components: - type: Transform @@ -196495,6 +198087,11 @@ entities: rot: 3.141592653589793 rad pos: -0.5,44.5 parent: 2 + - uid: 23714 + components: + - type: Transform + pos: -11.5,44.5 + parent: 2 - uid: 23759 components: - type: Transform @@ -197553,6 +199150,55 @@ entities: - type: Transform pos: -10.5,-62.5 parent: 2 + - uid: 28592 + components: + - type: Transform + pos: -13.5,52.5 + parent: 2 + - uid: 28627 + components: + - type: Transform + pos: -7.5,47.5 + parent: 2 + - uid: 28631 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -25.5,54.5 + parent: 2 + - uid: 28632 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -25.5,45.5 + parent: 2 + - uid: 28633 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -25.5,52.5 + parent: 2 + - uid: 28649 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -13.5,50.5 + parent: 2 + - uid: 28652 + components: + - type: Transform + pos: -7.5,45.5 + parent: 2 + - uid: 28653 + components: + - type: Transform + pos: -13.5,49.5 + parent: 2 + - uid: 28655 + components: + - type: Transform + pos: -11.5,48.5 + parent: 2 - uid: 28733 components: - type: Transform @@ -197876,6 +199522,11 @@ entities: - type: Transform pos: -14.5,-60.5 parent: 2 + - uid: 29769 + components: + - type: Transform + pos: -16.5,52.5 + parent: 2 - uid: 29833 components: - type: Transform @@ -197977,6 +199628,16 @@ entities: rot: 3.141592653589793 rad pos: 2.5,3.5 parent: 21002 + - uid: 31134 + components: + - type: Transform + pos: 16.5,-27.5 + parent: 2 + - uid: 31136 + components: + - type: Transform + pos: 17.5,-28.5 + parent: 2 - proto: WallReinforcedRust entities: - uid: 24425 @@ -206563,7 +208224,7 @@ entities: pos: 24.5,2.5 parent: 21002 - type: Door - secondsUntilStateChange: -685409.7 + secondsUntilStateChange: -704701.1 state: Opening - uid: 28863 components: @@ -206777,11 +208438,23 @@ entities: - type: Transform pos: 48.480865,-15.406906 parent: 2 + - uid: 6666 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -8.639321,43.540344 + parent: 2 - uid: 6774 components: - type: Transform pos: 23.372974,34.66112 parent: 2 + - uid: 8986 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -8.304323,43.552116 + parent: 2 - uid: 9262 components: - type: Transform From 11e965cd99e01d60121f2ebb1f5cc520b8835abf Mon Sep 17 00:00:00 2001 From: PJBot Date: Sat, 20 Sep 2025 18:11:31 +0000 Subject: [PATCH 107/143] Automatic changelog update --- Resources/Changelog/Maps.yml | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/Resources/Changelog/Maps.yml b/Resources/Changelog/Maps.yml index afcada661b..a1335f49b3 100644 --- a/Resources/Changelog/Maps.yml +++ b/Resources/Changelog/Maps.yml @@ -701,4 +701,13 @@ id: 84 time: '2025-09-18T07:15:10.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/40436 +- author: IProduceWidgets + changes: + - message: Updates Oasis TEG + type: Add + - message: Oasis AI Restoration Console + type: Add + id: 85 + time: '2025-09-20T18:10:21.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/40463 Order: 1 From 7c650da7d7659eec0be135ccd3eaef9787e9fb34 Mon Sep 17 00:00:00 2001 From: deltanedas <39013340+deltanedas@users.noreply.github.com> Date: Sat, 20 Sep 2025 18:13:23 +0000 Subject: [PATCH 108/143] fix disposal pipes deleting contents when welded (#40451) --- .../Graphs/utilities/disposal_pipes.yml | 28 +++++++++---------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/Resources/Prototypes/Recipes/Construction/Graphs/utilities/disposal_pipes.yml b/Resources/Prototypes/Recipes/Construction/Graphs/utilities/disposal_pipes.yml index 83c562fc96..4e9993022f 100644 --- a/Resources/Prototypes/Recipes/Construction/Graphs/utilities/disposal_pipes.yml +++ b/Resources/Prototypes/Recipes/Construction/Graphs/utilities/disposal_pipes.yml @@ -88,7 +88,7 @@ completed: - !type:SpawnPrototype prototype: SheetSteel1 - - !type:DeleteEntity + - !type:DestroyEntity steps: - tool: Welding doAfter: 1 @@ -100,7 +100,7 @@ - !type:SpawnPrototype prototype: SheetSteel1 amount: 2 - - !type:DeleteEntity + - !type:DestroyEntity steps: - tool: Welding doAfter: 1 @@ -112,7 +112,7 @@ - !type:SpawnPrototype prototype: SheetSteel1 amount: 2 - - !type:DeleteEntity + - !type:DestroyEntity steps: - tool: Welding doAfter: 1 @@ -126,7 +126,7 @@ amount: 2 - !type:SpawnPrototype prototype: CableApcStack1 # I have no idea why this does not work - - !type:DeleteEntity + - !type:DestroyEntity steps: - tool: Welding doAfter: 1 @@ -138,7 +138,7 @@ - !type:SpawnPrototype prototype: SheetSteel1 amount: 2 - - !type:DeleteEntity + - !type:DestroyEntity steps: - tool: Welding doAfter: 1 @@ -151,7 +151,7 @@ - !type:SpawnPrototype prototype: SheetSteel1 amount: 2 - - !type:DeleteEntity + - !type:DestroyEntity steps: - tool: Welding doAfter: 1 @@ -163,7 +163,7 @@ - !type:SpawnPrototype prototype: SheetSteel1 amount: 2 - - !type:DeleteEntity + - !type:DestroyEntity steps: - tool: Welding doAfter: 1 @@ -176,7 +176,7 @@ - !type:SpawnPrototype prototype: SheetSteel1 amount: 2 - - !type:DeleteEntity + - !type:DestroyEntity steps: - tool: Welding doAfter: 1 @@ -192,7 +192,7 @@ - !type:SpawnPrototype prototype: SheetSteel1 amount: 2 - - !type:DeleteEntity + - !type:DestroyEntity steps: - tool: Welding doAfter: 1 @@ -208,7 +208,7 @@ - !type:SpawnPrototype prototype: SheetSteel1 amount: 2 - - !type:DeleteEntity + - !type:DestroyEntity steps: - tool: Welding doAfter: 1 @@ -224,7 +224,7 @@ - !type:SpawnPrototype prototype: SheetSteel1 amount: 2 - - !type:DeleteEntity + - !type:DestroyEntity steps: - tool: Welding doAfter: 1 @@ -241,7 +241,7 @@ - !type:SpawnPrototype prototype: SheetSteel1 amount: 2 - - !type:DeleteEntity + - !type:DestroyEntity steps: - tool: Welding doAfter: 1 @@ -256,7 +256,7 @@ amount: 2 - !type:SpawnPrototype prototype: CableApcStack1 - - !type:DeleteEntity + - !type:DestroyEntity steps: - tool: Welding doAfter: 1 @@ -270,7 +270,7 @@ amount: 2 - !type:SpawnPrototype prototype: CableApcStack1 - - !type:DeleteEntity + - !type:DestroyEntity steps: - tool: Welding doAfter: 1 From 5b255d13c6f5130e962dc9e944cab9a879f97a8c Mon Sep 17 00:00:00 2001 From: Minerva <218184747+mnva0@users.noreply.github.com> Date: Sat, 20 Sep 2025 14:17:58 -0400 Subject: [PATCH 109/143] Renames the radar console computer board to "mass scanner computer board" (#40430) --- .../Entities/Objects/Devices/Circuitboards/computer.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/computer.yml b/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/computer.yml index 8c90308417..0735c8d950 100644 --- a/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/computer.yml +++ b/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/computer.yml @@ -260,7 +260,7 @@ state: cpu_service - type: ComputerBoard prototype: ComputerSurveillanceWirelessCameraMonitor - + - type: entity parent: BaseComputerCircuitboard id: XenoborgCameraMonitorCircuitboard @@ -402,7 +402,7 @@ - type: entity parent: BaseComputerCircuitboard id: RadarConsoleCircuitboard - name: radar console computer board + name: mass scanner computer board components: - type: Sprite state: cpu_supply @@ -570,4 +570,4 @@ - type: Sprite state: cpu_science - type: ComputerBoard - prototype: StationAiFixerComputer \ No newline at end of file + prototype: StationAiFixerComputer From 4796c92609faadd38f27f4ad5611441bcd8de4e2 Mon Sep 17 00:00:00 2001 From: Tiniest Shark Date: Sat, 20 Sep 2025 14:25:01 -0400 Subject: [PATCH 110/143] Inhand Sprites for Clear Glass (#40427) --- .../Consumable/Drinks/drinks_metamorphic.yml | 2 + .../glass_clear.rsi/inhand-left-fill-1.png | Bin 0 -> 169 bytes .../glass_clear.rsi/inhand-left-fill-2.png | Bin 0 -> 185 bytes .../glass_clear.rsi/inhand-left-fill-3.png | Bin 0 -> 191 bytes .../Drinks/glass_clear.rsi/inhand-left.png | Bin 0 -> 310 bytes .../glass_clear.rsi/inhand-right-fill-1.png | Bin 0 -> 171 bytes .../glass_clear.rsi/inhand-right-fill-2.png | Bin 0 -> 188 bytes .../glass_clear.rsi/inhand-right-fill-3.png | Bin 0 -> 198 bytes .../Drinks/glass_clear.rsi/inhand-right.png | Bin 0 -> 326 bytes .../Drinks/glass_clear.rsi/meta.json | 34 ++++++++++++++++- .../Drinks/jar.rsi/inhand-left-fill-1.png | Bin 0 -> 150 bytes .../Drinks/jar.rsi/inhand-left-fill-2.png | Bin 0 -> 189 bytes .../Drinks/jar.rsi/inhand-left-fill-3.png | Bin 0 -> 195 bytes .../Consumable/Drinks/jar.rsi/inhand-left.png | Bin 0 -> 306 bytes .../Drinks/jar.rsi/inhand-right-fill-1.png | Bin 0 -> 149 bytes .../Drinks/jar.rsi/inhand-right-fill-2.png | Bin 0 -> 197 bytes .../Drinks/jar.rsi/inhand-right-fill-3.png | Bin 0 -> 202 bytes .../Drinks/jar.rsi/inhand-right.png | Bin 0 -> 317 bytes .../Consumable/Drinks/jar.rsi/meta.json | 36 +++++++++++++++++- 19 files changed, 69 insertions(+), 3 deletions(-) create mode 100644 Resources/Textures/Objects/Consumable/Drinks/glass_clear.rsi/inhand-left-fill-1.png create mode 100644 Resources/Textures/Objects/Consumable/Drinks/glass_clear.rsi/inhand-left-fill-2.png create mode 100644 Resources/Textures/Objects/Consumable/Drinks/glass_clear.rsi/inhand-left-fill-3.png create mode 100644 Resources/Textures/Objects/Consumable/Drinks/glass_clear.rsi/inhand-left.png create mode 100644 Resources/Textures/Objects/Consumable/Drinks/glass_clear.rsi/inhand-right-fill-1.png create mode 100644 Resources/Textures/Objects/Consumable/Drinks/glass_clear.rsi/inhand-right-fill-2.png create mode 100644 Resources/Textures/Objects/Consumable/Drinks/glass_clear.rsi/inhand-right-fill-3.png create mode 100644 Resources/Textures/Objects/Consumable/Drinks/glass_clear.rsi/inhand-right.png create mode 100644 Resources/Textures/Objects/Consumable/Drinks/jar.rsi/inhand-left-fill-1.png create mode 100644 Resources/Textures/Objects/Consumable/Drinks/jar.rsi/inhand-left-fill-2.png create mode 100644 Resources/Textures/Objects/Consumable/Drinks/jar.rsi/inhand-left-fill-3.png create mode 100644 Resources/Textures/Objects/Consumable/Drinks/jar.rsi/inhand-left.png create mode 100644 Resources/Textures/Objects/Consumable/Drinks/jar.rsi/inhand-right-fill-1.png create mode 100644 Resources/Textures/Objects/Consumable/Drinks/jar.rsi/inhand-right-fill-2.png create mode 100644 Resources/Textures/Objects/Consumable/Drinks/jar.rsi/inhand-right-fill-3.png create mode 100644 Resources/Textures/Objects/Consumable/Drinks/jar.rsi/inhand-right.png diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Drinks/drinks_metamorphic.yml b/Resources/Prototypes/Entities/Objects/Consumable/Drinks/drinks_metamorphic.yml index 3b7569022b..d4fe5da5b6 100644 --- a/Resources/Prototypes/Entities/Objects/Consumable/Drinks/drinks_metamorphic.yml +++ b/Resources/Prototypes/Entities/Objects/Consumable/Drinks/drinks_metamorphic.yml @@ -31,6 +31,8 @@ metamorphicDefaultSprite: sprite: Objects/Consumable/Drinks/glass_clear.rsi state: icon + inHandsMaxFillLevels: 3 + inHandsFillBaseName: -fill- - type: Tag tags: - DrinkCup # Do these tags diff --git a/Resources/Textures/Objects/Consumable/Drinks/glass_clear.rsi/inhand-left-fill-1.png b/Resources/Textures/Objects/Consumable/Drinks/glass_clear.rsi/inhand-left-fill-1.png new file mode 100644 index 0000000000000000000000000000000000000000..aeb5a2ecd4ec32eb9fe7ab25b6ecf28f1eee3496 GIT binary patch literal 169 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|l097lUA^=1u6D) L^>bP0l+XkK&gncm literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Consumable/Drinks/glass_clear.rsi/inhand-left-fill-2.png b/Resources/Textures/Objects/Consumable/Drinks/glass_clear.rsi/inhand-left-fill-2.png new file mode 100644 index 0000000000000000000000000000000000000000..567c9b733d6d493387af1d25ecb6ce8521e86a73 GIT binary patch literal 185 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|ialK%Ln`LH zy}6P1umcaXgZc-N{r_9|zxus55^Uz!Dc!)jwC^}0P~m~!t6r^Ir9E}-iP|#ucYAj$ zFTTY+W7*b*CtsJ>iUH+;;7{`tpL@ES`0BGyywRxoWAiWb=0>JvXKtn|m8|{h@#LPb erX&MH-39K18~WxYU#Fb~>G5>+b6Mw<&;$Uv;YVWt literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Consumable/Drinks/glass_clear.rsi/inhand-left-fill-3.png b/Resources/Textures/Objects/Consumable/Drinks/glass_clear.rsi/inhand-left-fill-3.png new file mode 100644 index 0000000000000000000000000000000000000000..2e2a6e052ce33043885aea7ab482bcc84cb0a10d GIT binary patch literal 191 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|Dm`5sLn`LH zy}6P1umcaXgY^lK{r_9|zxuturX+B%oO#278!s(@>KfEny;`+Od+OX1e^s2+10BjA z+}mw!bc)I9@TBYWx9I>?0M(Rx>^r%;_aASWi0!ThzKKj~wnoSGA7tL#$h2(DgV`Lh l*>gMZ?ABCeW;h`Ki*YKqzWvHMZ!AGNJzf1=);T3K0RZD8Mlt{Z literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Consumable/Drinks/glass_clear.rsi/inhand-left.png b/Resources/Textures/Objects/Consumable/Drinks/glass_clear.rsi/inhand-left.png new file mode 100644 index 0000000000000000000000000000000000000000..de53081bf39f433b6052e3d9f9b4e4ba0a2c9bea GIT binary patch literal 310 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|K6tt~hE&XX zd&`io$w8p?;lY5&3XS&(7M!i>8$Kviux#D1^bq#~)@hekTy#4eF;T#~cD3Tac-OC+ zB+FKtrvVLMV0aL_IqCk6>Rno^Q+A!Pb=hXL*))K4XZ4jj_dpd{2lHrOvxa?>_!9P7 zhoq%_za0AS_^lk%yaVg`KV)yzdJ!a_8yx-3;{KVt(xG|gx6g>3iUAu6BpUjCrte&T zN~`dDN!XjEteza7vercRwy)V5`kQ0#TQ(s1iE+!-iWOGTzIF{iQ)J%U+8^{r`O7!X z6(?SOT=#X`nMW55T(-naV61s8*>cAnXyO6;3a0%pOT14V-JA%r#naW#Wt~$(695c~ Bg2Dg* literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Consumable/Drinks/glass_clear.rsi/inhand-right-fill-1.png b/Resources/Textures/Objects/Consumable/Drinks/glass_clear.rsi/inhand-right-fill-1.png new file mode 100644 index 0000000000000000000000000000000000000000..82e8451ebc4303d0c90e020498785c30778cd3d5 GIT binary patch literal 171 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|QaxQ9Ln`LH zy|t0I!GMRw!NF(Z-}KK66Mt`TP!U?_a4$zD>JKDb9i~3@`>$e^^P$9#0rAHkdkKf9aZ<5@8=229( z-dXNVlEKVB79D4v@$efXNC`v3&aZ2p&A#<;Vm({c)Xl!kKb(?nj{a|$*L*M9T;d~_ hmuB{NX9k7`@qR(K_04xx6+Q-O@^tlcS?83{1OPedM)Lpw literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Consumable/Drinks/glass_clear.rsi/inhand-right-fill-3.png b/Resources/Textures/Objects/Consumable/Drinks/glass_clear.rsi/inhand-right-fill-3.png new file mode 100644 index 0000000000000000000000000000000000000000..05538dd6a8bc688be21dd15dd30319c4c893e195 GIT binary patch literal 198 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|8a!PbLn`LH zz2(T)Y{0|f;85%O@Bg6_<-eMk0t+VIo>?ps)|Y>J6Hq0?e3v6~g1;|Yp6f}wv#BX0 zkwLk=`hBEjp7E@UY%#VG55F>kR57g3+dOOjE4I~tj0;>Wf0Z<>-gN5bO2$7<$uUXH rM(lrQ?R_8}eIY9PvON<6!~dte?R@(7J65|Gg0y5c z+3eT;Q%5J8N=4=!;{lq=zz{Pj=ljwnKdtoBy05xz{QPHG=CQ`}6IH@(t)E-PHbidj ziDSKE{GMsk^y`Pty!rC)>AzjQYdzieHQZoKlKv%AD|heB&xDshA7@NDbz$MUiElq` zc`eBZHW*0gaoL{TKJS>=>fURWhLcVFxBX7=_IZ)Huaxnt!Pg13m%9s1o|xR<)u81g z`p(|Q)^AtvfxRDQ9Zz26|2b{jp0B^7#T8bbDXX-qk+^Ggp8sUYo!jy{Kx22kk)Etm UbaJY#5;MpqPgg&ebxsLQ0Dr8E9RL6T literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Consumable/Drinks/glass_clear.rsi/meta.json b/Resources/Textures/Objects/Consumable/Drinks/glass_clear.rsi/meta.json index 1573c7154e..16bcd31794 100644 --- a/Resources/Textures/Objects/Consumable/Drinks/glass_clear.rsi/meta.json +++ b/Resources/Textures/Objects/Consumable/Drinks/glass_clear.rsi/meta.json @@ -5,7 +5,7 @@ "y": 32 }, "license": "CC-BY-NC-SA-4.0", - "copyright": "Created by github user moonheart08.", + "copyright": "Created by github user moonheart08. Inhands by TiniestShark (Github)", "states": [ { "name": "icon" @@ -39,6 +39,38 @@ }, { "name": "fill9" + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-left-fill-1", + "directions": 4 + }, + { + "name": "inhand-left-fill-2", + "directions": 4 + }, + { + "name": "inhand-left-fill-3", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + }, + { + "name": "inhand-right-fill-1", + "directions": 4 + }, + { + "name": "inhand-right-fill-2", + "directions": 4 + }, + { + "name": "inhand-right-fill-3", + "directions": 4 } ] } diff --git a/Resources/Textures/Objects/Consumable/Drinks/jar.rsi/inhand-left-fill-1.png b/Resources/Textures/Objects/Consumable/Drinks/jar.rsi/inhand-left-fill-1.png new file mode 100644 index 0000000000000000000000000000000000000000..e3f758011796e55d361a02139e47063c2e7b4983 GIT binary patch literal 150 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|0z6$DLn`LH zy}6O|fB_GSLptwU``Onzw4GOp9AlEc-*~HjVc1$mph5U`DHIOA~3R_M~(sZ2nn4E;TZ-#({2O@FfPV&mTL zFHVF+hXi~(`v2PokR$`cf$chy3$JVKzBbE9*{i}fPR(>@;BSt^uRrdtvHJaX&J^~H hwM*-(e*=yBaEfuBg|P)o?y`E2Mo(8imvv4FO#t4oNK60# literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Consumable/Drinks/jar.rsi/inhand-left-fill-3.png b/Resources/Textures/Objects/Consumable/Drinks/jar.rsi/inhand-left-fill-3.png new file mode 100644 index 0000000000000000000000000000000000000000..64e3e01a3d38c6db830f88a1d2251566e4000b16 GIT binary patch literal 195 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|YCT;XLn`LH zy=BOCL_vh*LXO8v&OQG*kJ_yi+jj2{r{F#2+k)(C_uU5RKT!W{&hzr6pM-Z-E0w4| zW$iIsrM$Rr)q*bv!?neL@<0&xY%<4R+0^aVl&V8CrTgsGu6lCff5TL@og1Y;gm9LB n?-aRE-M|0$)I3QBhCLTp`L=7XygTe~DWM4f+Kos! literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Consumable/Drinks/jar.rsi/inhand-left.png b/Resources/Textures/Objects/Consumable/Drinks/jar.rsi/inhand-left.png new file mode 100644 index 0000000000000000000000000000000000000000..6b7e2af913be3de5970cfa854c53e8607a6298b3 GIT binary patch literal 306 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|-gvq=hE&XX zd&{1WF;M2n$FIwSc1+&UJbMRI?`sVcr{xaImn=-&t`vB(@0gmB$c+11HTLW?p7_Sa z8S8rjwF80Oh4{Q8&$}nf?$65kzV=?y+K!s^w1uxYCWaI~`J;3{=)mIOX>Lc_Hi#PB zm3_8ujnQZ4yaP`w`Z{<6%UkAbGLcMuX|Yo_F6iBf+DY=iu0hNMk`H9}9*sKcqqp*Q zeBK)EiP0y_D)f_XmHl(yARchc#}FItB**Rj>A3zxyfeyB(Ozz+feF qmoffWd3l=O`@f|Hr7{c*8_uwHEfqVyx9ZeakQz@{KbLh*2~7aNurcTW literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Consumable/Drinks/jar.rsi/inhand-right-fill-2.png b/Resources/Textures/Objects/Consumable/Drinks/jar.rsi/inhand-right-fill-2.png new file mode 100644 index 0000000000000000000000000000000000000000..61fd77f4eb52369de323c5d106c9e443ee9d7212 GIT binary patch literal 197 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|>OEZ?Ln`LH zy=BP7tSG=5AiV7h%f0_C&9&ROB6K|4T*{f>H!l4pxOU%Cpkjst3-A4YY6OQDw-sdVsc;kbrMh>2p$CGrL+Hdy7}F@t#b3ezb`8BF54kF?Wg>NtA6jL v4)mO|Q3|?$b1PHoA%UoD?{#7f3^8}OFRavSTy|@tBS^oetDnm{r-UW|n-fe2 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Consumable/Drinks/jar.rsi/inhand-right.png b/Resources/Textures/Objects/Consumable/Drinks/jar.rsi/inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..209d0d2e264f8e12c75c12b420aefd9e4a1fce28 GIT binary patch literal 317 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|zI(bjhE&XX zdrOh;kb_9e!`1}?bJ)8dxx_5A6=b^H;C#VK#WZ0-sEOl5zOI%DlX9lNy)@zfW&PPF zPw%Qc2GkD(CLNpiOxqG6e}41Vk2c+xn(OAioV@L4o0;<@w)my53|F)6S$*nIy-@$H zC!6CAJS(}mlkJu9a`}S&_x`AVT;aQK;@N;uv9wUJlb;Jczl#5~+Ir{RWV`3g5VL_! zpDeI-Pq2ALk6~cd1>+e@T<1K!_j(0T>@(B7R*u`Qy6^Wi1ei0$UjGzV=dj{-qh40! z>Z(1S9ny_pH7Zw6zqOO}Jys{Yx8wQc{d;|x7#I$$w`G_h-R@p Date: Sat, 20 Sep 2025 11:28:14 -0700 Subject: [PATCH 111/143] fixed localization text for vulp shock ear (inner) color (#40412) --- Resources/Locale/en-US/markings/vulpkanin.ftl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Resources/Locale/en-US/markings/vulpkanin.ftl b/Resources/Locale/en-US/markings/vulpkanin.ftl index 371856912a..b987fa6593 100644 --- a/Resources/Locale/en-US/markings/vulpkanin.ftl +++ b/Resources/Locale/en-US/markings/vulpkanin.ftl @@ -38,7 +38,7 @@ marking-VulpEarOtie-otie-inner = Otie ears (Inner) marking-VulpEarOtie = Vulpkanin Otie marking-VulpEarShock-shock = Shock ears (Base) -marking-VulpEarShock-inner = Shock ears (Inner) +marking-VulpEarShock-shock-inner = Shock ears (Inner) marking-VulpEarShock = Vulpkanin Shock From 365d12a4e9b49a24cf04f8e10ed8f5208cf4c149 Mon Sep 17 00:00:00 2001 From: Lordbrandon12 <107556696+Lordbrandon12@users.noreply.github.com> Date: Sat, 20 Sep 2025 15:35:07 -0300 Subject: [PATCH 112/143] moves magic number from SharedMoverController to InputMoverComponent (#40411) --- Content.Shared/Movement/Components/InputMoverComponent.cs | 2 ++ Content.Shared/Movement/Systems/SharedMoverController.cs | 3 ++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/Content.Shared/Movement/Components/InputMoverComponent.cs b/Content.Shared/Movement/Components/InputMoverComponent.cs index 87da601f76..a1ed2b37e5 100644 --- a/Content.Shared/Movement/Components/InputMoverComponent.cs +++ b/Content.Shared/Movement/Components/InputMoverComponent.cs @@ -76,6 +76,8 @@ namespace Content.Shared.Movement.Components public TimeSpan LerpTarget; public const float LerpTime = 1.0f; + public const float SprintingSoundModifier = 3.5f; + public const float WalkingSoundModifier = 1.5f; public bool Sprinting => (HeldMoveButtons & MoveButtons.Walk) == 0x0; diff --git a/Content.Shared/Movement/Systems/SharedMoverController.cs b/Content.Shared/Movement/Systems/SharedMoverController.cs index b3c84aed4d..5d24b16621 100644 --- a/Content.Shared/Movement/Systems/SharedMoverController.cs +++ b/Content.Shared/Movement/Systems/SharedMoverController.cs @@ -331,7 +331,8 @@ public abstract partial class SharedMoverController : VirtualController if (!weightless && MobMoverQuery.TryGetComponent(uid, out var mobMover) && TryGetSound(weightless, uid, mover, mobMover, xform, out var sound, tileDef: tileDef)) { - var soundModifier = mover.Sprinting ? 3.5f : 1.5f; + var soundModifier = mover.Sprinting ? InputMoverComponent.SprintingSoundModifier + : InputMoverComponent.WalkingSoundModifier; var audioParams = sound.Params .WithVolume(sound.Params.Volume + soundModifier) From e6e47b599deb7d4a04fc177a706d22e8acb10271 Mon Sep 17 00:00:00 2001 From: ToastEnjoyer Date: Sat, 20 Sep 2025 13:37:57 -0500 Subject: [PATCH 113/143] Added AI console to amber (#40393) --- Resources/Maps/amber.yml | 4227 +++++++++++++++++++++++++++----------- 1 file changed, 3057 insertions(+), 1170 deletions(-) diff --git a/Resources/Maps/amber.yml b/Resources/Maps/amber.yml index 503d82bbf7..fa2034cf61 100644 --- a/Resources/Maps/amber.yml +++ b/Resources/Maps/amber.yml @@ -4,8 +4,8 @@ meta: engineVersion: 266.0.0 forkId: "" forkVersion: "" - time: 08/28/2025 21:24:20 - entityCount: 24843 + time: 09/16/2025 02:17:32 + entityCount: 24842 maps: - 1 grids: @@ -13749,7 +13749,7 @@ entities: 0: 53727 -5,-3: 0: 52428 - 2: 256 + 1: 256 -4,-2: 0: 53725 -5,-2: @@ -13760,7 +13760,7 @@ entities: 0: 65535 -4,0: 0: 13241 - 3: 2048 + 2: 2048 -3,-4: 0: 65501 -3,-3: @@ -13771,8 +13771,8 @@ entities: 0: 52735 -3,0: 0: 15 - 3: 13056 - 2: 3072 + 2: 13056 + 1: 3072 -3,-5: 0: 36863 -2,-4: @@ -13785,7 +13785,7 @@ entities: 0: 65535 -2,0: 0: 15 - 2: 3840 + 1: 3840 -2,-5: 0: 36349 -1,-4: @@ -13798,7 +13798,7 @@ entities: 0: 65535 -1,0: 0: 15 - 2: 3840 + 1: 3840 0,-4: 0: 30707 0,-3: @@ -13833,23 +13833,23 @@ entities: 0: 56793 -2,-8: 0: 61495 - 1: 136 + 3: 136 -2,-7: 0: 8176 -2,-6: 0: 64988 -2,-9: 0: 13299 - 1: 32768 + 3: 32768 -1,-8: - 1: 51 + 3: 51 0: 63500 -1,-6: 0: 65535 -1,-5: 0: 4095 -1,-9: - 1: 12288 + 3: 12288 0: 35059 -1,-7: 0: 3822 @@ -13910,11 +13910,11 @@ entities: 0,-9: 0: 48056 -4,-16: - 2: 17663 + 1: 17663 -5,-16: - 2: 255 + 1: 255 -4,-15: - 2: 100 + 1: 100 0: 45056 -5,-15: 0: 65024 @@ -13925,9 +13925,9 @@ entities: -5,-13: 0: 53759 -4,-17: - 2: 17663 + 1: 17663 -3,-16: - 2: 17 + 1: 17 0: 52428 -3,-15: 0: 47308 @@ -13935,63 +13935,63 @@ entities: 0: 35775 -3,-17: 0: 52360 - 2: 19 + 1: 19 -2,-16: 0: 13175 - 2: 32768 + 1: 32768 -2,-15: 0: 64435 -2,-14: 0: 65339 -2,-17: 0: 13119 - 2: 2048 + 1: 2048 -1,-15: 0: 65328 - 2: 8 + 1: 8 -1,-14: 0: 65295 -1,-16: - 2: 59392 + 1: 59392 0,-15: - 2: 15 + 1: 15 0: 65280 0,-14: 0: 65295 0,-13: 0: 65535 -4,-18: - 2: 59592 + 1: 59592 -5,-18: - 2: 40960 + 1: 40960 -5,-17: - 2: 255 + 1: 255 -4,-20: - 2: 51400 + 1: 51400 -4,-21: - 2: 51404 + 1: 51404 -4,-19: - 2: 51400 + 1: 51400 -3,-18: - 2: 12288 + 1: 12288 0: 34952 -3,-21: - 2: 18575 + 1: 18575 -3,-20: 0: 2176 -3,-19: 0: 34952 -2,-20: 0: 4913 - 2: 34816 + 1: 34816 -2,-19: 0: 15347 -2,-18: 0: 45875 - 2: 136 + 1: 136 -2,-21: 0: 4096 - 2: 17203 + 1: 17203 -1,-19: 0: 16 -1,-17: @@ -14000,7 +14000,7 @@ entities: 0: 52972 -4,1: 0: 62259 - 3: 128 + 2: 128 -5,1: 0: 65535 -4,2: @@ -14014,14 +14014,14 @@ entities: -4,4: 0: 21759 -3,1: - 3: 513 - 2: 8208 + 2: 513 + 1: 8208 -3,2: 0: 65280 - 2: 8 + 1: 8 -3,3: 0: 13119 - 2: 32768 + 1: 32768 -3,4: 0: 47283 -2,1: @@ -14029,37 +14029,37 @@ entities: 5: 1092 -2,2: 0: 65280 - 2: 10 + 1: 10 -2,3: 0: 13 - 2: 61696 + 1: 61696 -1,1: - 3: 1365 + 2: 1365 -1,2: 0: 65280 - 2: 10 + 1: 10 -1,3: 0: 15 - 2: 5120 + 1: 5120 -2,4: - 2: 8 + 1: 8 0: 16176 -1,4: 0: 61420 0,0: 0: 15 - 2: 3328 - 3: 512 + 1: 3328 + 2: 512 0,1: 6: 273 - 3: 3276 + 2: 3276 0,2: 0: 65280 - 2: 6 - 3: 8 + 1: 6 + 2: 8 0,3: 0: 19663 - 2: 256 + 1: 256 -5,4: 0: 62395 -4,5: @@ -14067,29 +14067,29 @@ entities: -5,5: 0: 8079 -4,6: - 2: 50272 + 1: 50272 -3,5: 0: 8099 -3,6: 0: 119 - 2: 53248 + 1: 53248 -3,7: - 2: 4401 + 1: 4401 -3,8: - 2: 4401 + 1: 4401 -2,5: 0: 13104 - 2: 2184 + 1: 2184 -2,6: 0: 63 - 2: 6144 + 1: 6144 -1,6: 0: 3311 - 2: 4096 + 1: 4096 -1,5: 0: 61038 -1,7: - 2: 2 + 1: 2 0,4: 0: 65535 0,5: @@ -14103,7 +14103,7 @@ entities: -9,-3: 0: 55736 -8,-3: - 2: 1064 + 1: 1064 0: 4096 -8,-2: 0: 56828 @@ -14119,7 +14119,7 @@ entities: 0: 61439 -7,-3: 0: 61440 - 2: 64 + 1: 64 -7,-2: 0: 53247 -7,-1: @@ -14222,30 +14222,30 @@ entities: 0: 65262 -8,-17: 0: 24576 - 2: 206 + 1: 206 -7,-16: 0: 4368 - 2: 204 + 1: 204 -7,-15: - 2: 96 + 1: 96 0: 57344 -7,-14: 0: 58478 -6,-16: - 2: 17663 + 1: 17663 -6,-14: 0: 48042 -6,-15: 0: 40960 - 2: 196 + 1: 196 -6,-17: - 2: 17663 + 1: 17663 -8,-20: 0: 1 - 2: 512 + 1: 512 -8,-21: 0: 4096 - 2: 32 + 1: 32 -9,-20: 0: 61423 -9,-19: @@ -14253,15 +14253,15 @@ entities: -9,-18: 0: 61423 -8,-18: - 2: 40960 + 1: 40960 -9,-17: 0: 65519 -7,-17: - 2: 511 + 1: 511 -7,-18: - 2: 40960 + 1: 40960 -6,-18: - 2: 40960 + 1: 40960 -9,0: 0: 53724 -9,1: @@ -14290,10 +14290,10 @@ entities: 0: 30480 -6,3: 0: 4368 - 2: 17472 + 1: 17472 -6,4: 0: 63233 - 2: 4 + 1: 4 -8,4: 0: 18016 -8,5: @@ -14308,80 +14308,80 @@ entities: 0: 65497 -8,7: 0: 1 - 3: 768 - 2: 4224 + 2: 768 + 1: 4224 -9,7: 0: 12 - 2: 55296 - 3: 9728 + 1: 55296 + 2: 9728 -8,8: - 2: 18163 + 1: 18163 -7,5: 0: 26159 -7,6: - 2: 4368 + 1: 4368 -7,7: - 2: 4369 + 1: 4369 -7,8: - 2: 55569 + 1: 55569 -6,5: 0: 3903 -6,6: - 2: 16454 + 1: 16454 -6,7: - 2: 2 + 1: 2 0: 35968 -6,8: - 2: 4978 + 1: 4978 -5,6: 0: 4369 - 2: 16452 + 1: 16452 -5,7: 0: 14128 - 2: 8 + 1: 8 -5,8: 0: 1 - 2: 2248 + 1: 2248 -9,8: - 2: 15 + 1: 15 -8,9: - 2: 8 + 1: 8 -7,9: - 2: 19038 + 1: 19038 -7,10: - 2: 136 + 1: 136 -6,9: - 2: 61440 + 1: 61440 -6,10: - 2: 116 + 1: 116 -5,9: - 2: 61440 + 1: 61440 -5,10: - 2: 196 + 1: 196 -4,8: - 2: 29456 + 1: 29456 -4,9: - 2: 23118 + 1: 23118 -4,10: - 2: 50 + 1: 50 -12,-4: - 3: 1 - 2: 14 + 2: 1 + 1: 14 0: 3840 -12,-5: - 3: 4401 - 2: 58048 + 2: 4401 + 1: 58048 -13,-4: 0: 32627 -12,-3: - 3: 1 - 0: 49152 - 2: 8 - -12,-2: 2: 1 + 0: 49152 + 1: 8 + -12,-2: + 1: 1 0: 60620 -13,-2: - 2: 2048 + 1: 2048 0: 13105 -12,-1: 0: 61166 @@ -14392,7 +14392,7 @@ entities: -11,-1: 0: 16319 -11,-5: - 2: 4976 + 1: 4976 0: 32768 -11,-3: 0: 43682 @@ -14418,14 +14418,14 @@ entities: 0: 56349 -13,-7: 0: 51404 - 2: 17 + 1: 17 -12,-6: 0: 52701 -13,-6: 0: 3838 -13,-5: - 3: 34952 - 2: 1600 + 2: 34952 + 1: 1600 -11,-8: 0: 65535 -11,-7: @@ -14450,7 +14450,7 @@ entities: 0: 61058 -12,-11: 0: 4367 - 2: 1024 + 1: 1024 -13,-11: 0: 34958 -12,-10: @@ -14459,7 +14459,7 @@ entities: 0: 49080 -13,-9: 0: 52424 - 2: 272 + 1: 272 -11,-10: 0: 65399 -11,-13: @@ -14468,7 +14468,7 @@ entities: 0: 61152 -11,-11: 0: 14 - 2: 1024 + 1: 1024 -10,-12: 0: 32738 -10,-11: @@ -14478,7 +14478,7 @@ entities: -10,-13: 0: 65294 -12,-15: - 2: 3 + 1: 3 0: 30464 -12,-14: 0: 30576 @@ -14488,40 +14488,40 @@ entities: 0: 60629 -11,-15: 0: 7936 - 2: 10 + 1: 10 -11,-14: 0: 56799 -10,-15: 0: 3968 - 2: 2 + 1: 2 -10,-14: 0: 61166 -10,-16: - 2: 16384 + 1: 16384 -10,-20: - 2: 4 + 1: 4 0: 3072 -10,-21: - 2: 17536 + 1: 17536 -10,-19: 0: 12 - 2: 1024 + 1: 1024 -10,-18: - 2: 4 + 1: 4 0: 3072 -10,-17: 0: 12 - 2: 1024 + 1: 1024 -9,-21: 0: 64170 -13,0: - 2: 8 + 1: 8 0: 28979 -12,0: - 2: 4352 + 1: 4352 0: 52416 -12,1: - 2: 1536 + 1: 1536 -12,2: 0: 30215 -13,1: @@ -14559,21 +14559,21 @@ entities: -13,5: 0: 63937 -12,6: - 2: 32910 + 1: 32910 -12,7: - 2: 34358 - 3: 2248 + 1: 34358 + 2: 2248 -13,7: - 2: 1204 - 3: 57408 + 1: 1204 + 2: 57408 -11,5: 0: 45051 -11,6: - 2: 12800 + 1: 12800 0: 34946 -11,7: 0: 240 - 2: 28672 + 1: 28672 -10,5: 0: 62459 -10,6: @@ -14581,54 +14581,54 @@ entities: -10,7: 0: 10098 -11,8: - 2: 32456 + 1: 32456 -10,8: - 2: 248 + 1: 248 -12,9: - 2: 4040 + 1: 4040 -13,9: - 2: 61428 + 1: 61428 -11,9: - 2: 19 + 1: 19 -16,2: - 3: 337 - 2: 17572 + 2: 337 + 1: 17572 -17,2: - 3: 3855 - 2: 240 + 2: 3855 + 1: 240 -16,3: - 3: 337 - 2: 17444 + 2: 337 + 1: 17444 -17,3: - 3: 3855 - 2: 240 + 2: 3855 + 1: 240 -16,1: - 2: 16384 + 1: 16384 -16,4: - 2: 17572 - 3: 337 + 1: 17572 + 2: 337 -15,2: - 2: 52 + 1: 52 0: 34816 -15,0: - 2: 17476 + 1: 17476 -15,3: 0: 136 - 2: 16384 + 1: 16384 -15,4: - 2: 52468 + 1: 52468 -15,-1: - 2: 34952 + 1: 34952 -14,0: 0: 51705 -15,1: - 2: 2176 + 1: 2176 -14,2: 0: 57167 -14,3: 0: 62717 -14,-1: - 3: 13107 + 2: 13107 0: 34952 -14,1: 0: 58094 @@ -14637,24 +14637,24 @@ entities: -13,-1: 0: 13107 -16,-8: - 2: 10098 + 1: 10098 -16,-7: - 2: 58147 + 1: 58147 -16,-6: - 2: 11235 + 1: 11235 -16,-5: - 2: 13091 - 3: 32768 + 1: 13091 + 2: 32768 -16,-4: - 2: 8995 + 1: 8995 -16,-9: - 2: 12848 + 1: 12848 -15,-8: 0: 32631 -15,-7: - 2: 6144 + 1: 6144 -15,-6: - 2: 6004 + 1: 6004 -15,-4: 0: 65534 -15,-5: @@ -14670,152 +14670,152 @@ entities: -14,-4: 0: 65535 -16,-12: - 2: 16369 + 1: 16369 -16,-13: - 2: 4369 - 3: 8738 + 1: 4369 + 2: 8738 -17,-12: - 2: 49137 + 1: 49137 -16,-11: - 2: 12850 + 1: 12850 -16,-10: - 2: 5272 - 3: 49668 + 1: 5272 + 2: 49668 -15,-12: - 2: 4083 + 1: 4083 -15,-10: - 2: 39248 - 3: 160 + 1: 39248 + 2: 160 -15,-13: - 2: 4352 - 3: 8208 + 1: 4352 + 2: 8208 0: 8 -14,-12: - 2: 3888 + 1: 3888 0: 8 -14,-10: - 3: 816 - 2: 1 + 2: 816 + 1: 1 0: 34944 -15,-9: - 2: 8 + 1: 8 -14,-9: - 2: 273 - 3: 2 + 1: 273 + 2: 2 -14,-13: 0: 52428 -16,-16: - 2: 319 + 1: 319 -16,-17: - 2: 12288 + 1: 12288 -17,-16: - 2: 20991 - 3: 8192 + 1: 20991 + 2: 8192 -16,-15: 0: 287 - 3: 4096 - 2: 8192 + 2: 4096 + 1: 8192 -16,-14: - 3: 12337 - 2: 450 + 2: 12337 + 1: 450 -17,-15: - 2: 33045 - 3: 12834 + 1: 33045 + 2: 12834 -17,-14: - 2: 361 - 3: 45200 + 1: 361 + 2: 45200 -17,-13: - 3: 43690 - 2: 4369 + 2: 43690 + 1: 4369 -15,-16: - 2: 15 + 1: 15 0: 57344 -15,-15: 0: 239 - 2: 4096 + 1: 4096 -15,-14: - 2: 1 + 1: 1 0: 61120 -14,-16: - 2: 63 + 1: 63 0: 53248 -14,-15: 0: 3295 - 2: 4096 + 1: 4096 -14,-14: 0: 57308 -13,-16: - 2: 33843 + 1: 33843 0: 4096 -13,-15: 0: 22387 -21,-16: - 2: 52460 + 1: 52460 -21,-17: - 2: 57344 + 1: 57344 -21,-15: - 2: 52428 + 1: 52428 -21,-14: - 2: 52428 + 1: 52428 -21,-13: - 2: 50252 + 1: 50252 -21,-12: - 2: 61164 + 1: 61164 -20,-16: - 2: 159 - 3: 32768 - -20,-14: - 2: 722 - 3: 32800 - -20,-17: + 1: 159 2: 32768 + -20,-14: + 1: 722 + 2: 32800 + -20,-17: + 1: 32768 -19,-16: - 2: 4607 - 3: 40960 + 1: 4607 + 2: 40960 -20,-15: - 3: 34952 + 2: 34952 -19,-15: - 2: 273 - 3: 47786 + 1: 273 + 2: 47786 -19,-14: - 3: 45072 - 2: 481 + 2: 45072 + 1: 481 -20,-13: - 3: 34952 + 2: 34952 -19,-13: - 2: 4369 - 3: 43690 + 1: 4369 + 2: 43690 -19,-17: - 2: 45056 + 1: 45056 -19,-12: - 2: 49137 + 1: 49137 -18,-16: - 2: 4607 - 3: 40960 + 1: 4607 + 2: 40960 -18,-15: - 2: 273 - 3: 47786 + 1: 273 + 2: 47786 -18,-14: - 3: 45072 - 2: 481 + 2: 45072 + 1: 481 -18,-13: - 2: 4369 - 3: 43690 + 1: 4369 + 2: 43690 -18,-17: - 2: 45056 + 1: 45056 -18,-12: - 2: 49073 + 1: 49073 -17,-17: - 2: 45056 + 1: 45056 1,-4: 0: 1136 - 2: 61440 + 1: 61440 1,-3: - 3: 52417 - 2: 4368 + 2: 52417 + 1: 4368 1,-2: - 3: 1 - 2: 240 + 2: 1 + 1: 240 0: 61440 1,-1: 0: 65535 @@ -14823,24 +14823,24 @@ entities: 0: 65535 1,0: 0: 15 - 2: 20224 + 1: 20224 2,-4: 0: 119 - 2: 28672 + 1: 28672 2,-3: - 3: 37140 - 2: 17472 + 2: 37140 + 1: 17472 2,-2: - 2: 112 + 1: 112 0: 61568 - 3: 4 + 2: 4 2,-1: 0: 32631 2,-5: 0: 65535 2,0: 0: 2063 - 2: 1792 + 1: 1792 3,-4: 0: 4090 3,-3: @@ -14926,9 +14926,9 @@ entities: 4,-9: 0: 16151 0,-16: - 2: 43520 + 1: 43520 1,-16: - 2: 45056 + 1: 45056 1,-15: 0: 65248 1,-14: @@ -14957,63 +14957,63 @@ entities: 0: 2240 1,-17: 0: 12 - 2: 2048 + 1: 2048 1,-18: 0: 32768 - 2: 136 + 1: 136 1,-20: - 2: 34816 + 1: 34816 2,-19: 0: 61182 2,-21: - 2: 7918 + 1: 7918 0: 16384 2,-20: 0: 20196 2,-18: 0: 61166 3,-21: - 2: 39167 + 1: 39167 3,-18: - 2: 58600 + 1: 58600 3,-20: - 2: 34952 + 1: 34952 4,-20: - 2: 4112 + 1: 4112 3,-19: - 2: 34952 + 1: 34952 4,-19: - 2: 4112 + 1: 4112 4,-18: - 2: 62960 - 3: 2560 + 1: 62960 + 2: 2560 1,1: - 3: 16657 - 2: 1028 + 2: 16657 + 1: 1028 1,2: 0: 65280 - 3: 4 - 2: 8 + 2: 4 + 1: 8 1,3: 0: 14207 1,4: 0: 65535 2,1: - 3: 1911 + 2: 1911 2,2: 0: 65280 - 2: 4 + 1: 4 2,3: 0: 49359 - 2: 256 + 1: 256 2,4: 0: 65535 3,1: - 2: 4113 + 1: 4113 0: 52416 3,2: 0: 65484 - 2: 1 + 1: 1 3,3: 0: 55487 3,4: @@ -15046,25 +15046,25 @@ entities: 0: 30719 3,7: 0: 7 - 2: 17408 - 3: 32768 + 1: 17408 + 2: 32768 3,8: - 2: 36452 - 3: 136 + 1: 36452 + 2: 136 4,4: 0: 47553 4,5: 0: 16369 4,6: 0: 13107 - 2: 8 + 1: 8 4,7: 0: 823 - 3: 12288 - 2: 16392 + 2: 12288 + 1: 16392 4,8: - 3: 307 - 2: 16068 + 2: 307 + 1: 16068 5,-4: 0: 44987 5,-3: @@ -15111,7 +15111,7 @@ entities: 0: 15291 5,-8: 0: 13311 - 2: 32768 + 1: 32768 5,-7: 0: 32627 5,-6: @@ -15120,9 +15120,9 @@ entities: 0: 7943 6,-8: 0: 35067 - 2: 4096 + 1: 4096 6,-7: - 2: 1 + 1: 1 0: 65416 6,-6: 0: 65520 @@ -15170,7 +15170,7 @@ entities: 0: 12275 7,-13: 0: 4113 - 2: 50176 + 1: 50176 8,-12: 0: 65520 8,-11: @@ -15188,50 +15188,50 @@ entities: 6,-14: 0: 15295 6,-16: - 2: 32768 + 1: 32768 7,-16: - 2: 14476 - 3: 32768 + 1: 14476 + 2: 32768 7,-15: 0: 64432 7,-14: 0: 53247 7,-17: - 2: 19596 + 1: 19596 8,-16: - 3: 4096 + 2: 4096 8,-14: 0: 3838 8,-13: - 2: 36906 + 1: 36906 4,-21: - 2: 4112 + 1: 4112 5,-18: - 2: 62974 - 3: 2048 + 1: 62974 + 2: 2048 5,-19: - 2: 51200 + 1: 51200 6,-19: - 2: 4990 + 1: 4990 6,-18: - 2: 62960 - 3: 512 + 1: 62960 + 2: 512 6,-20: - 2: 51200 + 1: 51200 7,-20: - 2: 65530 - 3: 4 + 1: 65530 + 2: 4 7,-19: - 2: 17487 + 1: 17487 7,-18: - 2: 30068 - 3: 512 + 1: 30068 + 2: 512 7,-21: - 2: 64256 + 1: 64256 8,-20: - 2: 29456 + 1: 29456 8,-19: - 2: 2255 + 1: 2255 5,1: 0: 65522 5,2: @@ -15267,15 +15267,15 @@ entities: 5,5: 0: 61424 5,7: - 3: 39 - 2: 16 + 2: 39 + 1: 16 5,6: - 2: 4096 - 3: 8192 + 1: 4096 + 2: 8192 6,5: 0: 36848 6,6: - 2: 2 + 1: 2 0: 34952 6,7: 0: 140 @@ -15283,17 +15283,17 @@ entities: 0: 40952 7,6: 0: 221 - 2: 24576 + 1: 24576 7,7: 0: 1 - 2: 2 + 1: 2 8,4: 0: 65523 8,5: 0: 4369 8,6: 0: 3327 - 2: 4096 + 1: 4096 9,-4: 0: 30583 9,-3: @@ -15308,7 +15308,7 @@ entities: 0: 65339 10,-4: 0: 49425 - 2: 192 + 1: 192 10,-3: 0: 8191 10,-2: @@ -15321,7 +15321,7 @@ entities: 0: 48682 11,-1: 0: 59 - 2: 12288 + 1: 12288 11,-4: 0: 59946 11,-3: @@ -15332,10 +15332,10 @@ entities: 0: 65327 12,-3: 0: 4367 - 2: 1024 + 1: 1024 12,-2: 0: 4353 - 2: 52420 + 1: 52420 9,-8: 0: 60943 9,-7: @@ -15352,9 +15352,9 @@ entities: 0: 47291 10,-7: 0: 14 - 2: 25600 + 1: 25600 10,-5: - 2: 33376 + 1: 33376 11,-8: 0: 25328 11,-7: @@ -15365,7 +15365,7 @@ entities: 0: 58976 12,-8: 0: 4415 - 2: 51200 + 1: 51200 12,-7: 0: 65489 12,-6: @@ -15379,25 +15379,25 @@ entities: 9,-10: 0: 61408 9,-13: - 2: 4096 + 1: 4096 10,-12: 0: 4368 10,-10: 0: 48952 10,-13: - 2: 4368 + 1: 4368 0: 140 10,-11: - 2: 8736 + 1: 8736 11,-11: 0: 21776 11,-10: 0: 28455 11,-12: - 2: 5456 + 1: 5456 12,-12: 0: 13107 - 2: 34816 + 1: 34816 12,-11: 0: 8115 12,-10: @@ -15405,27 +15405,27 @@ entities: 12,-9: 0: 16155 8,-15: - 2: 1634 + 1: 1634 9,-14: 0: 61439 9,-15: - 2: 17 + 1: 17 0: 60620 9,-16: 0: 52364 9,-17: 0: 51336 - 2: 32 + 1: 32 10,-16: 0: 56704 - 2: 2 + 1: 2 10,-15: 0: 57309 10,-14: 0: 57297 10,-17: - 3: 34816 - 2: 576 + 2: 34816 + 1: 576 11,-16: 0: 65520 11,-15: @@ -15435,8 +15435,8 @@ entities: 11,-13: 0: 127 11,-17: - 3: 62208 - 2: 3104 + 2: 62208 + 1: 3104 12,-16: 0: 56712 12,-15: @@ -15446,36 +15446,36 @@ entities: 12,-13: 0: 47935 9,-19: - 2: 62736 - 3: 2082 + 1: 62736 + 2: 2082 9,-20: - 3: 3136 + 2: 3136 9,-18: - 2: 2126 + 1: 2126 10,-20: - 2: 1792 + 1: 1792 10,-18: - 2: 25862 + 1: 25862 11,-20: - 3: 13056 - 2: 50304 + 2: 13056 + 1: 50304 11,-19: - 3: 30583 - 2: 8 + 2: 30583 + 1: 8 11,-18: - 3: 375 - 2: 17920 + 2: 375 + 1: 17920 11,-21: - 2: 6513 - 3: 142 + 1: 6513 + 2: 142 12,-20: - 3: 13107 + 2: 13107 12,-19: - 2: 5633 - 3: 24610 + 1: 5633 + 2: 24610 12,-18: - 2: 17425 - 3: 8366 + 1: 17425 + 2: 8366 9,1: 0: 8083 9,2: @@ -15484,7 +15484,7 @@ entities: 0: 65339 10,1: 0: 9010 - 2: 2176 + 1: 2176 10,2: 0: 56575 10,3: @@ -15494,38 +15494,38 @@ entities: 11,0: 0: 32624 11,1: - 2: 16 + 1: 16 0: 57344 11,2: 0: 65535 11,3: 0: 271 12,0: - 2: 51393 + 1: 51393 0: 768 - 3: 1024 + 2: 1024 12,1: - 2: 49665 + 1: 49665 12,2: 0: 30577 12,3: 0: 7 - 2: 17408 + 1: 17408 9,6: 0: 119 - 2: 8192 + 1: 8192 9,5: 0: 28398 10,4: 0: 62256 - 2: 128 + 1: 128 10,5: 0: 511 - 2: 49152 + 1: 49152 10,6: - 2: 3 + 1: 3 11,4: - 2: 80 + 1: 80 0: 61440 11,5: 0: 44799 @@ -15533,544 +15533,544 @@ entities: 0: 2730 12,4: 0: 61440 - 2: 68 + 1: 68 12,5: 0: 241 - 2: 24576 + 1: 24576 12,-1: - 2: 4 + 1: 4 13,-4: 0: 1 - 2: 64 + 1: 64 13,-2: - 2: 4080 + 1: 4080 13,-5: 0: 62451 14,-2: - 2: 20478 + 1: 20478 14,-5: 0: 12336 14,-1: - 3: 43690 - 2: 17476 + 2: 43690 + 1: 17476 14,0: - 3: 1038 - 2: 19264 + 2: 1038 + 1: 19264 15,-2: - 2: 20478 + 1: 20478 15,-1: - 3: 43690 - 2: 17476 + 2: 43690 + 1: 17476 15,0: - 3: 1038 - 2: 19264 + 2: 1038 + 1: 19264 16,-2: - 2: 20478 + 1: 20478 13,-8: 0: 3 - 2: 17476 + 1: 17476 13,-7: 0: 62448 13,-6: 0: 65523 13,-9: - 2: 17408 + 1: 17408 0: 259 - 3: 128 + 2: 128 14,-7: 0: 12336 14,-6: - 2: 8224 + 1: 8224 13,-12: - 2: 7168 + 1: 7168 13,-11: 0: 33552 - 2: 4 + 1: 4 13,-10: 0: 49075 13,-13: 0: 13075 - 2: 2176 + 1: 2176 14,-11: 0: 28672 - 3: 34816 + 2: 34816 14,-10: 0: 14129 - 3: 8 + 2: 8 14,-9: - 2: 16 - 3: 8 + 1: 16 + 2: 8 14,-12: 0: 238 14,-13: 0: 58606 15,-11: - 2: 16657 - 3: 12288 + 1: 16657 + 2: 12288 15,-10: - 2: 61489 - 3: 4038 + 1: 61489 + 2: 4038 15,-9: - 2: 1 + 1: 1 15,-12: - 2: 61672 - 3: 3584 + 1: 61672 + 2: 3584 15,-13: - 3: 33824 - 2: 19008 + 2: 33824 + 1: 19008 16,-12: - 3: 289 - 2: 4178 + 2: 289 + 1: 4178 0: 49152 16,-10: - 2: 61584 - 3: 3872 + 1: 61584 + 2: 3872 12,-17: 0: 34880 - 2: 162 + 1: 162 13,-16: 0: 4353 - 2: 17408 + 1: 17408 13,-15: 0: 12561 - 2: 2116 + 1: 2116 13,-14: 0: 48123 13,-17: 0: 4096 - 3: 16 - 2: 230 + 2: 16 + 1: 230 14,-14: 0: 65535 14,-16: - 2: 28 + 1: 28 0: 8192 14,-17: - 2: 4096 - 3: 2 + 1: 4096 + 2: 2 14,-15: 0: 57890 15,-16: - 2: 32775 - 3: 2176 + 1: 32775 + 2: 2176 15,-14: 0: 10016 15,-15: - 2: 28360 + 1: 28360 15,-17: - 2: 34944 + 1: 34944 16,-16: - 3: 61105 - 2: 14 + 2: 61105 + 1: 14 16,-15: - 3: 119 + 2: 119 16,-13: - 2: 4098 + 1: 4098 12,-21: - 2: 20480 - 3: 8977 + 1: 20480 + 2: 8977 13,-18: - 3: 8448 - 2: 4096 + 2: 8448 + 1: 4096 14,-19: - 2: 14540 + 1: 14540 14,-18: - 2: 21789 - 3: 2 + 1: 21789 + 2: 2 14,-20: - 2: 60416 - 3: 192 + 1: 60416 + 2: 192 15,-19: - 3: 57102 - 2: 8192 + 2: 57102 + 1: 8192 15,-18: - 3: 19 - 2: 32780 + 2: 19 + 1: 32780 15,-21: - 3: 7680 + 2: 7680 0: 64 15,-20: - 3: 3686 + 2: 3686 16,-20: - 3: 63235 - 2: 2216 + 2: 63235 + 1: 2216 16,-19: - 3: 48031 + 2: 48031 16,-18: - 3: 139 - 2: 31744 + 2: 139 + 1: 31744 16,-17: - 3: 49022 - 2: 16384 + 2: 49022 + 1: 16384 13,0: - 2: 20288 + 1: 20288 13,2: - 2: 65280 + 1: 65280 14,2: - 2: 65348 - 3: 10 - 14,1: - 3: 43694 - 2: 17472 - 14,3: - 2: 14 - 15,2: - 2: 65348 - 3: 10 - 15,1: - 3: 43694 - 2: 17472 - 15,3: - 2: 14 - 16,0: - 2: 19264 - 3: 1038 - 16,2: - 2: 65348 - 3: 10 - 12,6: - 2: 2 - 16,-1: - 3: 43690 - 2: 17476 - 17,-2: - 2: 20478 - 17,-1: - 3: 43690 - 2: 17476 - 17,0: - 3: 1038 - 2: 19264 - 17,-3: - 2: 32768 - 18,-3: - 2: 14316 - 18,-2: - 2: 59185 - 18,-1: - 2: 34956 - 18,-4: - 2: 32768 - 19,-4: - 2: 14316 - 19,-3: - 2: 1 - 19,-1: - 2: 4407 - 18,0: - 2: 44456 - 3: 512 - 19,0: - 2: 13105 - 19,-2: - 2: 60544 - 19,-5: - 2: 32896 - 20,-2: - 2: 311 - 20,-7: - 3: 24576 - 19,-7: - 2: 32768 - 20,-6: - 2: 16912 - 3: 36078 - 19,-6: - 2: 200 - 20,-5: - 2: 784 - 3: 60552 - 20,-4: - 3: 18022 - 21,-6: - 3: 18367 - 2: 2048 - 21,-5: - 3: 55735 - 2: 8 - 21,-8: - 2: 546 - 3: 34952 - 21,-7: - 3: 34958 - 2: 512 - 21,-4: - 3: 31612 - 21,-9: - 3: 36356 + 1: 65348 2: 10 + 14,1: + 2: 43694 + 1: 17472 + 14,3: + 1: 14 + 15,2: + 1: 65348 + 2: 10 + 15,1: + 2: 43694 + 1: 17472 + 15,3: + 1: 14 + 16,0: + 1: 19264 + 2: 1038 + 16,2: + 1: 65348 + 2: 10 + 12,6: + 1: 2 + 16,-1: + 2: 43690 + 1: 17476 + 17,-2: + 1: 20478 + 17,-1: + 2: 43690 + 1: 17476 + 17,0: + 2: 1038 + 1: 19264 + 17,-3: + 1: 32768 + 18,-3: + 1: 14316 + 18,-2: + 1: 59185 + 18,-1: + 1: 34956 + 18,-4: + 1: 32768 + 19,-4: + 1: 14316 + 19,-3: + 1: 1 + 19,-1: + 1: 4407 + 18,0: + 1: 44456 + 2: 512 + 19,0: + 1: 13105 + 19,-2: + 1: 60544 + 19,-5: + 1: 32896 + 20,-2: + 1: 311 + 20,-7: + 2: 24576 + 19,-7: + 1: 32768 + 20,-6: + 1: 16912 + 2: 36078 + 19,-6: + 1: 200 + 20,-5: + 1: 784 + 2: 60552 + 20,-4: + 2: 18022 + 21,-6: + 2: 18367 + 1: 2048 + 21,-5: + 2: 55735 + 1: 8 + 21,-8: + 1: 546 + 2: 34952 + 21,-7: + 2: 34958 + 1: 512 + 21,-4: + 2: 31612 + 21,-9: + 2: 36356 + 1: 10 22,-8: - 3: 57339 - 2: 4 + 2: 57339 + 1: 4 22,-7: - 3: 4271 - 2: 57600 + 2: 4271 + 1: 57600 22,-6: - 3: 60621 - 2: 16 + 2: 60621 + 1: 16 22,-5: - 2: 1 - 3: 65534 + 1: 1 + 2: 65534 22,-9: - 3: 56673 - 2: 540 + 2: 56673 + 1: 540 22,-4: - 3: 15031 - 2: 8 + 2: 15031 + 1: 8 23,-8: - 3: 65295 + 2: 65295 23,-7: - 2: 13056 - 3: 52462 + 1: 13056 + 2: 52462 23,-6: - 3: 34511 - 2: 2096 + 2: 34511 + 1: 2096 23,-5: - 3: 52215 - 2: 12288 + 2: 52215 + 1: 12288 0: 1024 23,-9: - 3: 59973 - 2: 1176 + 2: 59973 + 1: 1176 0: 258 23,-4: - 3: 4 - 2: 336 + 2: 4 + 1: 336 24,-8: - 3: 4899 + 2: 4899 24,-7: - 3: 4371 + 2: 4371 24,-6: - 3: 275 - 2: 4640 + 2: 275 + 1: 4640 16,1: - 3: 43694 - 2: 17472 + 2: 43694 + 1: 17472 16,3: - 2: 14 + 1: 14 17,2: - 2: 65348 - 3: 10 + 1: 65348 + 2: 10 17,1: - 3: 43694 - 2: 17472 + 2: 43694 + 1: 17472 17,3: - 2: 14 + 1: 14 18,2: - 2: 65416 + 1: 65416 18,1: - 2: 34952 + 1: 34952 19,1: - 2: 4369 + 1: 4369 19,2: - 2: 13073 + 1: 13073 18,3: - 2: 8 + 1: 8 19,3: - 2: 3 + 1: 3 24,-9: - 3: 12545 + 2: 12545 0: 530 4,-24: - 2: 13107 + 1: 13107 4,-25: - 2: 4096 + 1: 4096 3,-24: - 2: 224 - 3: 12567 + 1: 224 + 2: 12567 4,-23: - 2: 4915 + 1: 4915 3,-23: - 3: 4415 - 2: 34816 + 2: 4415 + 1: 34816 4,-22: - 2: 4369 + 1: 4369 3,-22: - 2: 35016 - 3: 1 + 1: 35016 + 2: 1 8,-21: - 2: 4352 + 1: 4352 16,-11: 0: 52428 17,-12: 0: 61440 - 2: 154 - 3: 100 + 1: 154 + 2: 100 17,-11: 0: 62451 17,-10: - 2: 57456 - 3: 3840 + 1: 57456 + 2: 3840 17,-13: - 3: 16384 - 2: 1092 + 2: 16384 + 1: 1092 18,-12: - 2: 116 + 1: 116 0: 61440 - 3: 136 + 2: 136 18,-11: 0: 64732 18,-10: - 3: 3840 - 2: 57584 + 2: 3840 + 1: 57584 18,-13: - 3: 32768 - 2: 2184 + 2: 32768 + 1: 2184 19,-12: - 2: 245 + 1: 245 0: 57344 - 3: 8 + 2: 8 19,-11: 0: 61422 19,-10: - 2: 4112 - 3: 256 + 1: 4112 + 2: 256 0: 3784 19,-13: - 2: 17065 - 3: 35910 + 1: 17065 + 2: 35910 20,-12: - 3: 49 + 2: 49 0: 12288 - 2: 202 + 1: 202 20,-11: 0: 15291 11,-23: - 3: 49152 + 2: 49152 11,-22: - 3: 43148 - 2: 1088 + 2: 43148 + 1: 1088 12,-23: - 3: 4096 - 12,-22: - 3: 273 - -4,-24: - 3: 238 - 2: 19456 - -4,-25: - 3: 57344 - -4,-23: - 2: 52292 - 3: 128 - -4,-22: - 2: 52428 - -3,-24: - 2: 487 - 3: 63000 - -3,-23: - 3: 51071 2: 4096 + 12,-22: + 2: 273 + -4,-24: + 2: 238 + 1: 19456 + -4,-25: + 2: 57344 + -4,-23: + 1: 52292 + 2: 128 + -4,-22: + 1: 52428 + -3,-24: + 1: 487 + 2: 63000 + -3,-23: + 2: 51071 + 1: 4096 -3,-25: - 2: 11840 - 3: 49152 + 1: 11840 + 2: 49152 -3,-22: - 3: 4 - 2: 34816 + 2: 4 + 1: 34816 -2,-24: - 3: 49147 + 2: 49147 -2,-23: - 3: 49416 - 2: 13024 + 2: 49416 + 1: 13024 -2,-22: - 2: 13106 - 3: 68 + 1: 13106 + 2: 68 -2,-25: - 3: 34816 - 2: 640 + 2: 34816 + 1: 640 -1,-24: - 3: 65535 + 2: 65535 -1,-23: - 2: 248 - 3: 39426 + 1: 248 + 2: 39426 -1,-22: - 2: 48 - 3: 32974 + 1: 48 + 2: 32974 -1,-25: - 3: 7492 - 2: 178 + 2: 7492 + 1: 178 0,-24: - 3: 30481 - 2: 35054 + 2: 30481 + 1: 35054 0,-23: - 2: 58 - 3: 57284 + 1: 58 + 2: 57284 0,-22: - 3: 29439 + 2: 29439 -3,9: - 2: 18 + 1: 18 -16,-3: - 2: 9187 + 1: 9187 -15,-3: 0: 2062 - 2: 8960 + 1: 8960 -15,-2: - 2: 32772 + 1: 32772 -14,-3: 0: 53215 -14,-2: 0: 35065 - 3: 12288 + 2: 12288 -13,-3: 0: 13059 - 2: 128 + 1: 128 0,-21: - 3: 2 + 2: 2 0,-25: - 2: 43679 - 3: 256 + 1: 43679 + 2: 256 1,-24: - 2: 547 - 3: 60620 + 1: 547 + 2: 60620 1,-23: - 3: 52730 + 2: 52730 1,-22: - 2: 96 + 1: 96 1,-25: - 2: 8449 - 3: 50910 + 1: 8449 + 2: 50910 2,-24: - 3: 61438 + 2: 61438 2,-23: - 3: 32552 + 2: 32552 2,-22: - 3: 231 - 2: 60928 + 2: 231 + 1: 60928 2,-25: - 3: 24576 - 2: 3329 + 2: 24576 + 1: 3329 24,-13: - 2: 4096 - 3: 257 + 1: 4096 + 2: 257 24,-12: - 2: 34882 + 1: 34882 0: 4096 23,-12: 0: 65392 24,-11: 0: 4369 - 2: 34816 + 1: 34816 23,-11: 0: 65262 23,-10: 0: 127 24,-10: - 3: 4096 - 2: 584 + 2: 4096 + 1: 584 20,-13: - 2: 12560 + 1: 12560 20,-10: - 2: 608 + 1: 608 21,-12: - 3: 19 + 2: 19 0: 51200 21,-11: 0: 52701 21,-13: - 3: 29032 - 2: 2708 + 2: 29032 + 1: 2708 21,-10: - 2: 20496 - 3: 8704 + 1: 20496 + 2: 8704 0: 8 22,-12: 0: 65520 @@ -16079,314 +16079,237 @@ entities: 22,-10: 0: 255 16,-21: - 3: 48058 + 2: 48058 16,-14: - 2: 2 + 1: 2 17,-16: - 2: 1 - 3: 65534 + 1: 1 + 2: 65534 17,-15: - 3: 34021 - 2: 25360 + 2: 34021 + 1: 25360 17,-17: - 3: 65505 + 2: 65505 17,-14: - 2: 17612 + 1: 17612 18,-16: - 3: 64511 - 2: 1024 + 2: 64511 + 1: 1024 18,-15: - 3: 45055 - 2: 20480 + 2: 45055 + 1: 20480 18,-14: - 2: 35090 - 3: 136 + 1: 35090 + 2: 136 18,-17: - 3: 63482 + 2: 63482 19,-16: - 3: 27475 - 2: 37920 + 2: 27475 + 1: 37920 19,-15: - 3: 14111 - 2: 16416 + 2: 14111 + 1: 16416 19,-14: - 3: 9015 - 2: 21568 + 2: 9015 + 1: 21568 19,-17: - 3: 4096 - 2: 256 + 2: 4096 + 1: 256 20,-16: - 2: 8448 - 3: 4096 + 1: 8448 + 2: 4096 20,-15: - 3: 36071 - 2: 24 + 2: 36071 + 1: 24 17,-20: - 3: 34989 - 2: 22032 + 2: 34989 + 1: 22032 17,-19: - 2: 34055 - 3: 2240 + 1: 34055 + 2: 2240 17,-18: - 2: 28417 - 3: 16 + 1: 28417 + 2: 16 17,-21: - 3: 56817 - 2: 4 + 2: 56817 + 1: 4 18,-20: - 3: 65527 + 2: 65527 18,-19: - 3: 56784 + 2: 56784 18,-18: - 2: 1999 - 3: 61440 + 1: 1999 + 2: 61440 18,-21: - 3: 12544 + 2: 12544 19,-19: - 3: 4384 + 2: 4384 19,-18: - 2: 4097 - 3: 34 + 1: 4097 + 2: 34 16,-22: - 2: 3168 - 3: 32768 + 1: 3168 + 2: 32768 17,-22: - 3: 12288 + 2: 12288 20,-3: - 2: 60544 - 3: 8 + 1: 60544 + 2: 8 21,-3: - 3: 127 - 2: 256 + 2: 127 + 1: 256 22,-3: - 3: 37 + 2: 37 21,-15: - 2: 37904 - 3: 25344 + 1: 37904 + 2: 25344 20,-14: - 2: 8 + 1: 8 21,-14: - 3: 2255 - 2: 33824 + 2: 2255 + 1: 33824 22,-15: - 2: 4096 + 1: 4096 22,-14: - 3: 49553 - 2: 3076 + 2: 49553 + 1: 3076 22,-13: - 3: 533 - 2: 1408 + 2: 533 + 1: 1408 23,-14: - 3: 45344 - 2: 16960 + 2: 45344 + 1: 16960 23,-13: - 2: 3924 - 3: 2 + 1: 3924 + 2: 2 24,-14: - 2: 4096 + 1: 4096 -1,-26: - 2: 24576 + 1: 24576 0,-26: - 2: 52352 + 1: 52352 1,-26: - 2: 4672 - 3: 60416 + 1: 4672 + 2: 60416 2,-26: - 3: 29440 - 2: 35856 + 2: 29440 + 1: 35856 3,-25: - 2: 768 + 1: 768 -20,-12: - 2: 36848 + 1: 36848 -17,4: - 3: 3855 - 2: 240 + 2: 3855 + 1: 240 -16,5: - 3: 337 - 2: 17572 + 2: 337 + 1: 17572 -17,5: - 3: 3855 - 2: 240 + 2: 3855 + 1: 240 -16,6: - 3: 337 - 2: 17444 + 2: 337 + 1: 17444 -17,6: - 3: 3855 - 2: 240 + 2: 3855 + 1: 240 -16,7: - 2: 1204 - 3: 57408 + 1: 1204 + 2: 57408 -17,7: - 2: 1200 - 3: 57408 + 1: 1200 + 2: 57408 -16,8: - 3: 43690 - 2: 17476 + 2: 43690 + 1: 17476 -15,5: - 2: 35900 + 1: 35900 -15,7: - 2: 1200 - 3: 57408 + 1: 1200 + 2: 57408 -15,8: - 3: 43690 - 2: 17476 + 2: 43690 + 1: 17476 -15,6: - 2: 8 + 1: 8 -14,7: - 2: 1204 - 3: 57408 + 1: 1204 + 2: 57408 -14,5: 0: 61166 -14,6: - 2: 17440 + 1: 17440 0: 8 -14,8: - 3: 43690 - 2: 17476 + 2: 43690 + 1: 17476 -13,6: 0: 3 - 2: 17536 + 1: 17536 -13,8: - 3: 43690 - 2: 17476 + 2: 43690 + 1: 17476 -18,4: - 2: 26615 + 1: 26615 -18,5: - 2: 26615 + 1: 26615 -18,6: - 2: 10231 + 1: 10231 -18,7: - 2: 11131 - 3: 128 + 1: 11131 + 2: 128 -18,3: - 2: 26615 + 1: 26615 -18,8: - 2: 12850 + 1: 12850 -17,8: - 3: 43690 - 2: 17476 + 2: 43690 + 1: 17476 -18,2: - 2: 26615 + 1: 26615 -18,0: - 2: 25088 + 1: 25088 -18,1: - 2: 26214 + 1: 26214 -16,9: - 2: 61428 + 1: 61428 -17,9: - 2: 61412 + 1: 61412 -15,9: - 2: 61428 + 1: 61428 -14,9: - 2: 61428 + 1: 61428 -18,9: - 2: 32626 + 1: 32626 uniqueMixes: - 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 + immutable: True + moles: {} + - volume: 2500 + temperature: 293.15 + moles: {} - volume: 2500 temperature: 235 moles: - - 27.225372 - - 102.419266 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - volume: 2500 - immutable: True - moles: - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 27.225372 + Nitrogen: 102.419266 - volume: 2500 temperature: 293.15 moles: - - 0 - - 0 - - 0 - - 0 - - 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 + Oxygen: 6666.982 - volume: 2500 temperature: 293.15 moles: - - 6666.982 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - volume: 2500 - temperature: 293.15 - moles: - - 0 - - 0 - - 0 - - 6666.982 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Plasma: 6666.982 chunkSize: 4 - type: GasTileOverlay - type: RadiationGridResistance @@ -67904,18 +67827,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 - uid: 13130 components: - type: Transform @@ -68051,18 +67964,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 - uid: 5627 components: - type: Transform @@ -68074,18 +67977,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 - uid: 5671 components: - type: Transform @@ -70634,18 +70527,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 @@ -70710,18 +70593,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 @@ -70890,18 +70763,8 @@ entities: immutable: False temperature: 234.9976 moles: - - 1.7459903 - - 6.568249 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 1.7459903 + Nitrogen: 6.568249 - uid: 12674 components: - type: Transform @@ -70913,18 +70776,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 - uid: 13179 components: - type: Transform @@ -70979,18 +70832,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 - proto: CrateMedicalScrubs entities: - uid: 4274 @@ -71037,18 +70880,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 - proto: CrateServiceBureaucracy entities: - uid: 6106 @@ -71081,18 +70914,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 - proto: CrateTechBoardRandom entities: - uid: 1218 @@ -71125,18 +70948,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 - uid: 12152 components: - type: Transform @@ -71201,18 +71014,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 - proto: CrewMonitoringServer entities: - uid: 17648 @@ -115629,18 +115432,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 @@ -115710,18 +115503,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: Label currentLabel: 2 - type: NameModifier @@ -116696,6 +116479,8 @@ entities: - type: Transform pos: -30.5,20.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - proto: IngotGold entities: - uid: 8246 @@ -119103,11 +118888,6 @@ entities: parent: 2 - proto: LootSpawnerScienceMajor entities: - - uid: 4751 - components: - - type: Transform - pos: 30.5,-35.5 - parent: 2 - uid: 11849 components: - type: Transform @@ -125704,13 +125484,6 @@ entities: rot: 1.5707963267948966 rad pos: -45.5,2.5 parent: 2 -- proto: PrefilledSyringe - entities: - - uid: 6049 - components: - - type: Transform - pos: 41.507294,-9.45423 - parent: 2 - proto: Protolathe entities: - uid: 4232 @@ -130112,246 +129885,344 @@ entities: - type: Transform pos: 6.5,-11.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 34 components: - type: Transform pos: 8.5,-11.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 37 components: - type: Transform pos: 8.5,-7.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 39 components: - type: Transform pos: 6.5,-7.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 67 components: - type: Transform pos: 3.5,-12.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 531 components: - type: Transform pos: 3.5,7.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 544 components: - type: Transform pos: 2.5,7.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 576 components: - type: Transform pos: 9.5,3.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 612 components: - type: Transform pos: 4.5,7.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 791 components: - type: Transform pos: 11.5,6.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 867 components: - type: Transform pos: 10.5,3.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 901 components: - type: Transform pos: 7.5,6.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1089 components: - type: Transform pos: 7.5,4.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1125 components: - type: Transform pos: 9.5,-8.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1140 components: - type: Transform pos: 9.5,-9.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1183 components: - type: Transform pos: 9.5,-10.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1223 components: - type: Transform pos: 5.5,-10.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1249 components: - type: Transform pos: 5.5,-9.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1268 components: - type: Transform pos: 11.5,4.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1325 components: - type: Transform pos: 8.5,3.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1411 components: - type: Transform pos: -7.5,7.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1415 components: - type: Transform pos: -5.5,7.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1416 components: - type: Transform pos: 0.5,7.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1417 components: - type: Transform pos: -3.5,7.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1418 components: - type: Transform pos: -1.5,7.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1463 components: - type: Transform pos: 0.5,3.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1464 components: - type: Transform pos: -1.5,3.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1465 components: - type: Transform pos: -3.5,3.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1466 components: - type: Transform pos: -5.5,3.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1467 components: - type: Transform pos: 2.5,3.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1468 components: - type: Transform pos: -7.5,3.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1470 components: - type: Transform pos: 3.5,3.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1471 components: - type: Transform pos: 4.5,3.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1696 components: - type: Transform pos: 5.5,-8.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4475 components: - type: Transform pos: 41.5,-44.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4527 components: - type: Transform pos: 37.5,-46.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4528 components: - type: Transform pos: 37.5,-45.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4529 components: - type: Transform pos: 37.5,-44.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4530 components: - type: Transform pos: 41.5,-46.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7123 components: - type: Transform pos: 3.5,-8.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 9123 components: - type: Transform pos: 3.5,-9.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 9621 components: - type: Transform pos: 3.5,-10.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 9698 components: - type: Transform pos: 3.5,-6.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10227 components: - type: Transform pos: 6.5,-5.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 12517 components: - type: Transform pos: 7.5,-5.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 14625 components: - type: Transform pos: 87.5,-14.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 14714 components: - type: Transform pos: 88.5,-13.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 14861 components: - type: Transform pos: 86.5,-13.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 14876 components: - type: Transform pos: 87.5,-12.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - proto: ReinforcedWindow entities: - uid: 21 @@ -130359,3311 +130230,4635 @@ entities: - type: Transform pos: -31.5,-71.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 62 components: - type: Transform pos: -8.5,16.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 80 components: - type: Transform pos: -4.5,9.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 91 components: - type: Transform pos: -3.5,9.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 135 components: - type: Transform pos: -5.5,9.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 139 components: - type: Transform pos: -27.5,-4.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 168 components: - type: Transform pos: 47.5,-14.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 169 components: - type: Transform pos: 51.5,-10.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 181 components: - type: Transform pos: -35.5,-68.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 184 components: - type: Transform pos: -20.5,16.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 196 components: - type: Transform pos: 38.5,26.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 214 components: - type: Transform pos: -26.5,6.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 224 components: - type: Transform pos: -18.5,-9.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 244 components: - type: Transform pos: -27.5,-39.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 280 components: - type: Transform pos: -27.5,-20.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 296 components: - type: Transform pos: -31.5,-76.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 318 components: - type: Transform pos: -17.5,13.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 353 components: - type: Transform pos: -46.5,-9.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 373 components: - type: Transform pos: -45.5,-9.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 383 components: - type: Transform pos: 16.5,17.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 385 components: - type: Transform pos: -26.5,7.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 386 components: - type: Transform pos: -20.5,13.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 387 components: - type: Transform pos: -18.5,-10.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 400 components: - type: Transform pos: -22.5,16.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 435 components: - type: Transform pos: 52.5,-11.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 450 components: - type: Transform pos: -25.5,8.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 462 components: - type: Transform pos: -24.5,8.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 466 components: - type: Transform pos: -24.5,12.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 469 components: - type: Transform pos: -22.5,-5.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 482 components: - type: Transform pos: 51.5,-14.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 499 components: - type: Transform pos: -23.5,-11.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 515 components: - type: Transform pos: -28.5,-19.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 522 components: - type: Transform pos: 33.5,-33.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 574 components: - type: Transform pos: -31.5,-75.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 597 components: - type: Transform pos: -50.5,-29.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 604 components: - type: Transform pos: 10.5,24.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 619 components: - type: Transform pos: 3.5,-84.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 640 components: - type: Transform pos: 51.5,-50.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 642 components: - type: Transform pos: -9.5,9.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 647 components: - type: Transform pos: 53.5,-50.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 650 components: - type: Transform pos: -22.5,14.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 675 components: - type: Transform pos: -29.5,-0.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 683 components: - type: Transform pos: -27.5,-0.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 703 components: - type: Transform pos: -4.5,17.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 704 components: - type: Transform pos: -4.5,19.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 710 components: - type: Transform pos: -20.5,14.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 712 components: - type: Transform pos: -31.5,-77.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 731 components: - type: Transform pos: -36.5,-72.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 742 components: - type: Transform pos: -8.5,9.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 745 components: - type: Transform pos: -1.5,9.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 750 components: - type: Transform pos: -7.5,9.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 758 components: - type: Transform pos: -25.5,12.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 763 components: - type: Transform pos: -2.5,9.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 770 components: - type: Transform pos: -21.5,-5.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 782 components: - type: Transform pos: -26.5,5.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 784 components: - type: Transform pos: -23.5,8.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 826 components: - type: Transform pos: -22.5,15.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 855 components: - type: Transform pos: 1.5,9.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 898 components: - type: Transform pos: 1.5,14.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 906 components: - type: Transform pos: -17.5,15.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 923 components: - type: Transform pos: -45.5,4.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 945 components: - type: Transform pos: -17.5,16.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 972 components: - type: Transform pos: -3.5,22.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 976 components: - type: Transform pos: -3.5,20.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 991 components: - type: Transform pos: -22.5,13.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1013 components: - type: Transform pos: 50.5,-10.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1039 components: - type: Transform pos: 1.5,28.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1046 components: - type: Transform pos: 7.5,28.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1080 components: - type: Transform pos: -44.5,4.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1087 components: - type: Transform pos: -22.5,-11.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1088 components: - type: Transform pos: -17.5,14.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1098 components: - type: Transform pos: -5.5,22.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1099 components: - type: Transform pos: -4.5,25.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1100 components: - type: Transform pos: -4.5,23.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1105 components: - type: Transform pos: -20.5,15.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1141 components: - type: Transform pos: -55.5,-55.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1144 components: - type: Transform pos: -23.5,12.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1160 components: - type: Transform pos: 8.5,9.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1189 components: - type: Transform pos: 7.5,9.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1222 components: - type: Transform pos: 9.5,9.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1234 components: - type: Transform pos: 2.5,1.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1282 components: - type: Transform pos: 5.5,-54.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1375 components: - type: Transform pos: 1.5,28.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1378 components: - type: Transform pos: 10.5,23.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1473 components: - type: Transform pos: -6.5,1.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1474 components: - type: Transform pos: -5.5,1.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1475 components: - type: Transform pos: -7.5,1.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1485 components: - type: Transform pos: 2.5,-5.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1495 components: - type: Transform pos: 0.5,1.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1496 components: - type: Transform pos: -1.5,1.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1498 components: - type: Transform pos: -2.5,1.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1499 components: - type: Transform pos: -8.5,1.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1500 components: - type: Transform pos: 42.5,-23.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1501 components: - type: Transform pos: 4.5,9.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1505 components: - type: Transform pos: 6.5,9.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1513 components: - type: Transform pos: 3.5,9.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1518 components: - type: Transform pos: -25.5,-19.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1519 components: - type: Transform pos: 41.5,-23.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1547 components: - type: Transform pos: -16.5,29.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1571 components: - type: Transform pos: 1.5,1.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1577 components: - type: Transform pos: 4.5,1.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1579 components: - type: Transform pos: -0.5,1.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1587 components: - type: Transform pos: 3.5,1.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1591 components: - type: Transform pos: -14.5,-8.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1594 components: - type: Transform pos: -3.5,1.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1595 components: - type: Transform pos: -4.5,1.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1636 components: - type: Transform pos: -11.5,-9.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1638 components: - type: Transform pos: 39.5,-68.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1649 components: - type: Transform pos: 34.5,-47.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1654 components: - type: Transform pos: -29.5,-43.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1687 components: - type: Transform pos: -24.5,-57.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1712 components: - type: Transform pos: 15.5,28.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1747 components: - type: Transform pos: 0.5,9.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1800 components: - type: Transform pos: 15.5,27.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1832 components: - type: Transform pos: -21.5,-34.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1854 components: - type: Transform pos: -21.5,-32.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1900 components: - type: Transform pos: -12.5,-9.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1902 components: - type: Transform pos: -10.5,-9.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1916 components: - type: Transform pos: 35.5,27.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1958 components: - type: Transform pos: -21.5,-33.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2041 components: - type: Transform pos: -14.5,-7.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2065 components: - type: Transform pos: -3.5,-59.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2154 components: - type: Transform pos: 58.5,-36.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2178 components: - type: Transform pos: -6.5,-22.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2203 components: - type: Transform pos: 65.5,-41.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2241 components: - type: Transform pos: 65.5,-43.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2292 components: - type: Transform pos: 72.5,-43.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2329 components: - type: Transform pos: 34.5,27.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2356 components: - type: Transform pos: 73.5,-42.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2363 components: - type: Transform pos: 73.5,-41.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2371 components: - type: Transform pos: 65.5,-40.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2377 components: - type: Transform pos: -14.5,-1.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2397 components: - type: Transform pos: -5.5,-57.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2548 components: - type: Transform pos: -36.5,-79.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2552 components: - type: Transform pos: -9.5,-23.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2585 components: - type: Transform pos: 65.5,-42.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2599 components: - type: Transform pos: -38.5,32.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2600 components: - type: Transform pos: -7.5,-16.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2656 components: - type: Transform pos: -22.5,29.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2663 components: - type: Transform pos: -22.5,30.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2747 components: - type: Transform pos: -36.5,-68.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2766 components: - type: Transform pos: -36.5,-73.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2869 components: - type: Transform pos: 39.5,-51.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2870 components: - type: Transform pos: 37.5,-51.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2891 components: - type: Transform pos: -22.5,31.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2956 components: - type: Transform pos: 38.5,-51.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2966 components: - type: Transform pos: -30.5,-79.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 3051 components: - type: Transform pos: 40.5,-40.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 3056 components: - type: Transform pos: 40.5,-42.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 3059 components: - type: Transform pos: 40.5,-41.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 3102 components: - type: Transform pos: 72.5,-67.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 3121 components: - type: Transform pos: -9.5,-69.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 3147 components: - type: Transform pos: -21.5,31.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 3148 components: - type: Transform pos: -42.5,-33.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 3202 components: - type: Transform pos: -16.5,30.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 3216 components: - type: Transform pos: -17.5,31.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 3262 components: - type: Transform pos: -36.5,-62.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 3276 components: - type: Transform pos: -36.5,-63.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 3313 components: - type: Transform pos: -44.5,-33.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 3354 components: - type: Transform pos: 73.5,-43.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 3387 components: - type: Transform pos: 65.5,-84.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 3451 components: - type: Transform pos: -36.5,-64.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 3496 components: - type: Transform pos: -27.5,-43.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 3524 components: - type: Transform pos: 72.5,-41.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 3562 components: - type: Transform pos: 60.5,-75.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 3590 components: - type: Transform pos: 6.5,1.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 3605 components: - type: Transform pos: 41.5,-19.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 3642 components: - type: Transform pos: 40.5,-66.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 3725 components: - type: Transform pos: -9.5,-74.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 3763 components: - type: Transform pos: -9.5,-67.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 3791 components: - type: Transform pos: -9.5,-68.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 3799 components: - type: Transform pos: 12.5,-71.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 3847 components: - type: Transform pos: -21.5,29.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 3881 components: - type: Transform pos: 12.5,-75.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 3959 components: - type: Transform pos: -2.5,-5.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4108 components: - type: Transform pos: -30.5,-80.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4120 components: - type: Transform pos: -6.5,16.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4154 components: - type: Transform pos: 2.5,-58.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4206 components: - type: Transform pos: 31.5,-39.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4237 components: - type: Transform pos: 23.5,-24.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4263 components: - type: Transform pos: 33.5,-35.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4287 components: - type: Transform pos: 36.5,-36.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4334 components: - type: Transform pos: 33.5,-34.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4343 components: - type: Transform pos: 26.5,-31.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4424 components: - type: Transform pos: 28.5,-32.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4430 components: - type: Transform pos: 1.5,-5.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4453 components: - type: Transform pos: 48.5,-89.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4479 components: - type: Transform pos: 30.5,-43.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4480 components: - type: Transform pos: 30.5,-41.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4577 components: - type: Transform pos: -26.5,-17.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4674 components: - type: Transform pos: -36.5,-76.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4680 components: - type: Transform pos: 47.5,-55.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4683 components: - type: Transform pos: -37.5,-76.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4686 components: - type: Transform pos: -35.5,-76.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4724 components: - type: Transform pos: 51.5,-68.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4728 components: - type: Transform pos: 48.5,-84.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4730 components: - type: Transform pos: 49.5,-86.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4745 components: - type: Transform pos: 51.5,20.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4809 components: - type: Transform pos: -31.5,-47.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4829 components: - type: Transform pos: 60.5,-79.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4847 components: - type: Transform pos: -33.5,-38.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4894 components: - type: Transform pos: -31.5,-44.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4901 components: - type: Transform pos: -26.5,-20.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4903 components: - type: Transform pos: -31.5,-45.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4919 components: - type: Transform pos: -7.5,13.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4929 components: - type: Transform pos: -17.5,29.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4930 components: - type: Transform pos: -16.5,31.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4993 components: - type: Transform pos: -36.5,-71.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4995 components: - type: Transform pos: -28.5,-43.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5036 components: - type: Transform pos: -31.5,-48.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5037 components: - type: Transform pos: 49.5,-88.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5066 components: - type: Transform pos: -20.5,33.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5071 components: - type: Transform pos: -19.5,33.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5072 components: - type: Transform pos: -18.5,32.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5073 components: - type: Transform pos: -18.5,33.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5087 components: - type: Transform pos: -20.5,32.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5103 components: - type: Transform pos: -7.5,16.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5132 components: - type: Transform pos: 47.5,-72.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5137 components: - type: Transform pos: 47.5,-89.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5141 components: - type: Transform pos: -8.5,13.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5145 components: - type: Transform pos: 45.5,-87.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5208 components: - type: Transform pos: -38.5,-58.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5219 components: - type: Transform pos: -34.5,-38.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5233 components: - type: Transform pos: -37.5,-68.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5293 components: - type: Transform pos: -31.5,-73.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5294 components: - type: Transform pos: -31.5,-72.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5415 components: - type: Transform pos: 9.5,28.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5432 components: - type: Transform pos: 7.5,14.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5458 components: - type: Transform pos: 59.5,-38.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5464 components: - type: Transform pos: 59.5,-37.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5508 components: - type: Transform pos: 46.5,23.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5546 components: - type: Transform pos: 58.5,-38.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5566 components: - type: Transform pos: 47.5,-73.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5571 components: - type: Transform pos: 28.5,-36.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5575 components: - type: Transform pos: -39.5,-58.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5599 components: - type: Transform pos: 69.5,-59.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5647 components: - type: Transform pos: 46.5,-63.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5655 components: - type: Transform pos: 26.5,-54.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5658 components: - type: Transform pos: 26.5,-56.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5684 components: - type: Transform pos: 32.5,-53.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5692 components: - type: Transform pos: 32.5,-55.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5706 components: - type: Transform pos: 45.5,-63.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5749 components: - type: Transform pos: -25.5,-46.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5837 components: - type: Transform pos: 35.5,-47.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5844 components: - type: Transform pos: -33.5,-83.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5863 components: - type: Transform pos: 20.5,-17.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5867 components: - type: Transform pos: 50.5,20.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5871 components: - type: Transform pos: 49.5,20.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5889 components: - type: Transform pos: -14.5,-18.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5902 components: - type: Transform pos: -1.5,-50.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5950 components: - type: Transform pos: 23.5,24.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6031 components: - type: Transform pos: 27.5,9.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6043 components: - type: Transform pos: 73.5,-39.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6083 components: - type: Transform pos: 44.5,-63.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6117 components: - type: Transform pos: 8.5,-50.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6167 components: - type: Transform pos: -33.5,-82.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6202 components: - type: Transform pos: -5.5,-50.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6220 components: - type: Transform pos: 4.5,-50.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6221 components: - type: Transform pos: -33.5,-81.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6223 components: - type: Transform pos: 66.5,-45.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6260 components: - type: Transform pos: 65.5,-44.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6265 components: - type: Transform pos: 41.5,-60.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6293 components: - type: Transform pos: 68.5,-39.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6348 components: - type: Transform pos: 7.5,-54.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6373 components: - type: Transform pos: 77.5,-45.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6381 components: - type: Transform pos: 46.5,0.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6382 components: - type: Transform pos: 45.5,0.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6385 components: - type: Transform pos: 1.5,-82.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6401 components: - type: Transform pos: -0.5,-83.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6420 components: - type: Transform pos: -19.5,-57.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6426 components: - type: Transform pos: -9.5,-75.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6431 components: - type: Transform pos: 1.5,-54.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6456 components: - type: Transform pos: 2.5,-82.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6457 components: - type: Transform pos: 0.5,-83.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6485 components: - type: Transform pos: -18.5,-58.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6486 components: - type: Transform pos: -15.5,-58.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6487 components: - type: Transform pos: -17.5,-58.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6489 components: - type: Transform pos: -19.5,-58.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6490 components: - type: Transform pos: -16.5,-58.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6491 components: - type: Transform pos: -15.5,-57.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6519 components: - type: Transform pos: -10.5,-63.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6520 components: - type: Transform pos: -10.5,-62.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6521 components: - type: Transform pos: -10.5,-61.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6522 components: - type: Transform pos: -10.5,-60.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6555 components: - type: Transform pos: 66.5,-39.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6583 components: - type: Transform pos: 67.5,-45.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6621 components: - type: Transform pos: 34.5,-52.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6622 components: - type: Transform pos: 35.5,-52.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6625 components: - type: Transform pos: 30.5,-51.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6626 components: - type: Transform pos: 31.5,-51.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6635 components: - type: Transform pos: 41.5,-59.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6658 components: - type: Transform pos: 42.5,-19.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6735 components: - type: Transform pos: 32.5,-35.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6736 components: - type: Transform pos: 32.5,-33.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6806 components: - type: Transform pos: 76.5,-43.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6825 components: - type: Transform pos: 24.5,-29.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6853 components: - type: Transform pos: 33.5,22.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6881 components: - type: Transform pos: -7.5,-23.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6906 components: - type: Transform pos: 67.5,-39.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6926 components: - type: Transform pos: 46.5,-84.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6944 components: - type: Transform pos: 71.5,-39.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6945 components: - type: Transform pos: 45.5,-78.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6967 components: - type: Transform pos: 45.5,-1.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7039 components: - type: Transform pos: -14.5,-20.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7062 components: - type: Transform pos: 49.5,-59.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7212 components: - type: Transform pos: 30.5,11.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7275 components: - type: Transform pos: 34.5,1.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7292 components: - type: Transform pos: 51.5,10.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7353 components: - type: Transform pos: 49.5,-87.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7360 components: - type: Transform pos: 48.5,13.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7361 components: - type: Transform pos: 49.5,13.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7365 components: - type: Transform pos: 51.5,11.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7400 components: - type: Transform pos: 38.5,-66.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7405 components: - type: Transform pos: 47.5,6.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7406 components: - type: Transform pos: 46.5,6.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7407 components: - type: Transform pos: 45.5,6.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7539 components: - type: Transform pos: -14.5,-45.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7541 components: - type: Transform pos: -12.5,-45.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7543 components: - type: Transform pos: 3.5,-58.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7548 components: - type: Transform pos: -16.5,-45.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7559 components: - type: Transform pos: 7.5,-59.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7561 components: - type: Transform pos: -59.5,-52.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7580 components: - type: Transform pos: 6.5,-59.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7828 components: - type: Transform pos: -9.5,14.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8243 components: - type: Transform pos: -36.5,-80.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8279 components: - type: Transform pos: 42.5,-13.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8283 components: - type: Transform pos: 43.5,-13.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8363 components: - type: Transform pos: 44.5,-1.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8370 components: - type: Transform pos: 38.5,-30.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8371 components: - type: Transform pos: 37.5,-30.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8373 components: - type: Transform pos: 34.5,-28.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8374 components: - type: Transform pos: 35.5,-28.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8377 components: - type: Transform pos: 33.5,-28.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8387 components: - type: Transform pos: 32.5,-28.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8449 components: - type: Transform pos: 3.5,-83.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8545 components: - type: Transform pos: 49.5,-4.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8546 components: - type: Transform pos: 49.5,-5.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8583 components: - type: Transform pos: 33.5,21.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8618 components: - type: Transform pos: 57.5,-25.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8619 components: - type: Transform pos: 56.5,-22.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8620 components: - type: Transform pos: 56.5,-21.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8621 components: - type: Transform pos: 56.5,-20.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8630 components: - type: Transform pos: 54.5,-25.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8631 components: - type: Transform pos: 55.5,-25.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8682 components: - type: Transform pos: 56.5,-25.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8684 components: - type: Transform pos: 56.5,-15.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8751 components: - type: Transform pos: 57.5,-17.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8752 components: - type: Transform pos: 54.5,-17.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8753 components: - type: Transform pos: 56.5,-17.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8754 components: - type: Transform pos: 55.5,-17.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8756 components: - type: Transform pos: 56.5,-27.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8757 components: - type: Transform pos: 55.5,-15.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8758 components: - type: Transform pos: 55.5,-27.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8775 components: - type: Transform pos: 46.5,4.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8776 components: - type: Transform pos: 45.5,4.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8890 components: - type: Transform pos: 52.5,-27.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8891 components: - type: Transform pos: 51.5,-27.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8895 components: - type: Transform pos: 31.5,-59.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 9206 components: - type: Transform pos: -46.5,4.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 9254 components: - type: Transform pos: 2.5,9.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 9258 components: - type: Transform pos: -4.5,-59.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 9264 components: - type: Transform pos: -33.5,-25.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 9268 components: - type: Transform pos: 8.5,-78.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 9273 components: - type: Transform pos: 43.5,-72.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 9274 components: - type: Transform pos: 43.5,-71.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 9296 components: - type: Transform pos: 43.5,-70.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 9383 components: - type: Transform pos: 49.5,-60.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 9421 components: - type: Transform pos: -9.5,15.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 9436 components: - type: Transform pos: 46.5,24.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 9541 components: - type: Transform pos: 46.5,-89.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 9553 components: - type: Transform pos: -44.5,-26.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 9567 components: - type: Transform pos: -35.5,-25.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 9578 components: - type: Transform pos: -42.5,-26.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 9583 components: - type: Transform pos: 45.5,-88.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 9584 components: - type: Transform pos: 45.5,-86.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 9624 components: - type: Transform pos: -29.5,-39.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 9649 components: - type: Transform pos: -42.5,-58.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 9676 components: - type: Transform pos: 59.5,-49.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 9800 components: - type: Transform pos: 57.5,-49.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 9937 components: - type: Transform pos: -4.5,-54.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 9958 components: - type: Transform pos: -15.5,-45.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10004 components: - type: Transform pos: 52.5,-13.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10151 components: - type: Transform pos: -27.5,-17.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10190 components: - type: Transform pos: 2.5,-18.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10212 components: - type: Transform pos: -29.5,-12.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10214 components: - type: Transform pos: -28.5,-12.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10251 components: - type: Transform pos: -28.5,-39.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10398 components: - type: Transform pos: -24.5,-49.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10433 components: - type: Transform pos: -35.5,-51.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10434 components: - type: Transform pos: -35.5,-54.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10465 components: - type: Transform pos: -56.5,-55.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10513 components: - type: Transform pos: -39.5,-55.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10634 components: - type: Transform pos: -27.5,-23.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10721 components: - type: Transform pos: -47.5,-2.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10749 components: - type: Transform pos: -47.5,-4.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10750 components: - type: Transform pos: -46.5,1.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10751 components: - type: Transform pos: -46.5,-6.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10752 components: - type: Transform pos: -44.5,-9.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10779 components: - type: Transform pos: -47.5,-3.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10783 components: - type: Transform pos: -47.5,-1.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10793 components: - type: Transform pos: 64.5,-60.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10808 components: - type: Transform pos: -46.5,-8.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10814 components: - type: Transform pos: 71.5,-57.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10818 components: - type: Transform pos: 9.5,1.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10828 components: - type: Transform pos: 64.5,-70.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10836 components: - type: Transform pos: 63.5,-82.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10900 components: - type: Transform pos: -47.5,-0.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10915 components: - type: Transform pos: -46.5,3.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10969 components: - type: Transform pos: 2.5,-21.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10998 components: - type: Transform pos: -25.5,-18.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 11002 components: - type: Transform pos: -30.5,-5.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 11003 components: - type: Transform pos: -45.5,0.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 11077 components: - type: Transform pos: 34.5,3.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 11080 components: - type: Transform pos: -36.5,-5.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 11128 components: - type: Transform pos: -14.5,-19.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 11170 components: - type: Transform pos: 22.5,24.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 11193 components: - type: Transform pos: -63.5,-60.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 11196 components: - type: Transform pos: 0.5,-82.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 11211 components: - type: Transform pos: 2.5,-23.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 11285 components: - type: Transform pos: -39.5,-4.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 11327 components: - type: Transform pos: -5.5,21.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 11335 components: - type: Transform pos: 26.5,-27.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 11339 components: - type: Transform pos: -44.5,0.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 11391 components: - type: Transform pos: 24.5,-26.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 11397 components: - type: Transform pos: 25.5,-26.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 11400 components: - type: Transform pos: 25.5,-29.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 11401 components: - type: Transform pos: -41.5,-2.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 11428 components: - type: Transform pos: 26.5,-28.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 11441 components: - type: Transform pos: 13.5,15.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 11504 components: - type: Transform pos: -57.5,-61.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 11582 components: - type: Transform pos: -56.5,-57.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 11610 components: - type: Transform pos: 2.5,-83.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 11622 components: - type: Transform pos: 52.5,-12.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 11676 components: - type: Transform pos: 27.5,-59.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 11677 components: - type: Transform pos: 28.5,-59.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 11712 components: - type: Transform pos: 8.5,1.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 11953 components: - type: Transform pos: -41.5,-6.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 12018 components: - type: Transform pos: 10.5,1.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 12027 components: - type: Transform pos: -28.5,-18.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 12042 components: - type: Transform pos: -34.5,-34.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 12186 components: - type: Transform pos: 12.5,-67.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 12192 components: - type: Transform pos: -9.5,-78.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 12237 components: - type: Transform pos: -32.5,-22.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 12281 components: - type: Transform pos: -28.5,-23.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 12334 components: - type: Transform pos: -61.5,-58.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 12335 components: - type: Transform pos: -57.5,-57.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 12351 components: - type: Transform pos: -56.5,-61.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 12493 components: - type: Transform pos: 13.5,7.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 12494 components: - type: Transform pos: 13.5,6.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 12525 components: - type: Transform pos: -41.5,-40.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 12526 components: - type: Transform pos: -42.5,-40.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 12527 components: - type: Transform pos: -44.5,-40.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 12528 components: - type: Transform pos: -45.5,-40.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 12529 components: - type: Transform pos: -43.5,-40.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 12547 components: - type: Transform pos: -48.5,-20.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 12574 components: - type: Transform pos: 12.5,-73.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 12583 components: - type: Transform pos: -41.5,-19.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 12584 components: - type: Transform pos: -42.5,-19.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 12585 components: - type: Transform pos: -43.5,-19.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 12586 components: - type: Transform pos: -44.5,-19.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 12587 components: - type: Transform pos: -45.5,-19.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 12597 components: - type: Transform pos: 12.5,-74.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 12645 components: - type: Transform pos: -46.5,-32.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 12686 components: - type: Transform pos: -46.5,-27.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 12703 components: - type: Transform pos: -49.5,-20.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 12718 components: - type: Transform pos: -9.5,-77.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 12728 components: - type: Transform pos: -54.5,-32.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 12767 components: - type: Transform pos: -55.5,-32.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 12779 components: - type: Transform pos: 8.5,-68.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 12781 components: - type: Transform pos: -54.5,-26.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 12789 components: - type: Transform pos: -5.5,-71.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 12794 components: - type: Transform pos: -5.5,-70.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 12830 components: - type: Transform pos: -55.5,-26.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 12849 components: - type: Transform pos: 7.5,-75.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 12864 components: - type: Transform pos: -56.5,-30.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 12874 components: - type: Transform pos: -60.5,-31.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 12875 components: - type: Transform pos: -60.5,-30.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 12876 components: - type: Transform pos: -60.5,-29.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 12877 components: - type: Transform pos: -60.5,-28.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 12878 components: - type: Transform pos: -60.5,-27.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 12879 components: - type: Transform pos: -59.5,-27.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 12882 components: - type: Transform pos: -33.5,24.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 12884 components: - type: Transform pos: -58.5,-27.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 12922 components: - type: Transform pos: -58.5,-32.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 12923 components: - type: Transform pos: -59.5,-32.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 12924 components: - type: Transform pos: -60.5,-32.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 13000 components: - type: Transform pos: 8.5,-70.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 13011 components: - type: Transform pos: 49.5,-53.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 13047 components: - type: Transform pos: -55.5,18.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 13048 components: - type: Transform pos: -49.5,-4.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 13087 components: - type: Transform pos: -55.5,19.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 13092 components: - type: Transform pos: -48.5,4.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 13107 components: - type: Transform pos: -48.5,5.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 13116 components: - type: Transform pos: -4.5,-75.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 13127 components: - type: Transform pos: -47.5,-25.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 13152 components: - type: Transform pos: -61.5,-60.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 13163 components: - type: Transform pos: -60.5,-58.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 13172 components: - type: Transform pos: -60.5,-60.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 13266 components: - type: Transform pos: -4.5,-62.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 13277 components: - type: Transform pos: -5.5,-68.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 13278 components: - type: Transform pos: 8.5,-73.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 13341 components: - type: Transform pos: 37.5,26.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 13369 components: - type: Transform pos: 6.5,-54.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 13375 components: - type: Transform pos: 5.5,-59.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 13385 components: - type: Transform pos: -3.5,-54.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 13393 components: - type: Transform pos: 12.5,-78.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 13403 components: - type: Transform pos: -5.5,-78.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 13422 components: - type: Transform pos: -52.5,-29.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 13445 components: - type: Transform pos: -50.5,-26.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 13447 components: - type: Transform pos: -50.5,-27.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 13462 components: - type: Transform pos: -50.5,-34.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 13475 components: - type: Transform pos: -50.5,-33.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 13610 components: - type: Transform pos: -45.5,7.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 13767 components: - type: Transform pos: 19.5,-60.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 13768 components: - type: Transform pos: 21.5,-60.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 13769 components: - type: Transform pos: 22.5,-60.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 13770 components: - type: Transform pos: 24.5,-60.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 13771 components: - type: Transform pos: 25.5,-60.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 13772 components: - type: Transform pos: 18.5,-60.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 13791 components: - type: Transform pos: 12.5,-77.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 13798 components: - type: Transform pos: -51.5,-23.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 13879 components: - type: Transform pos: -49.5,-40.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 13898 components: - type: Transform pos: -44.5,-42.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 13905 components: - type: Transform pos: -45.5,-42.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 13918 components: - type: Transform pos: -42.5,-42.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 13919 components: - type: Transform pos: -41.5,-42.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 13926 components: - type: Transform pos: -49.5,-41.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 13990 components: - type: Transform pos: -23.5,-49.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 14301 components: - type: Transform pos: 7.5,28.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 14443 components: - type: Transform pos: -52.5,25.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 14445 components: - type: Transform pos: -51.5,25.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 14502 components: - type: Transform pos: -5.5,-77.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 14568 components: - type: Transform pos: -2.5,-54.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 14633 components: - type: Transform pos: -30.5,25.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 14699 components: - type: Transform pos: -30.5,24.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 14786 components: - type: Transform pos: -31.5,29.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 14801 components: - type: Transform pos: -33.5,29.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 14802 components: - type: Transform pos: -32.5,29.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 14812 components: - type: Transform pos: -34.5,25.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 14813 components: - type: Transform pos: -34.5,24.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 14828 components: - type: Transform pos: -49.5,-1.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 14849 components: - type: Transform pos: -48.5,24.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 14879 components: - type: Transform pos: -55.5,20.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 14922 components: - type: Transform pos: -50.5,25.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 14996 components: - type: Transform pos: 7.5,-62.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 14998 components: - type: Transform pos: -4.5,-63.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 15005 components: - type: Transform pos: 7.5,-63.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 15027 components: - type: Transform pos: -5.5,-55.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 15236 components: - type: Transform pos: -64.5,-58.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 15263 components: - type: Transform pos: -57.5,12.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 15304 components: - type: Transform pos: -57.5,10.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 15308 components: - type: Transform pos: -57.5,11.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 15310 components: - type: Transform pos: -55.5,17.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 15314 components: - type: Transform pos: -57.5,13.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 15317 components: - type: Transform pos: -55.5,22.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 15320 components: - type: Transform pos: -56.5,8.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 15329 components: - type: Transform pos: -55.5,5.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 15334 components: - type: Transform pos: -55.5,4.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 15454 components: - type: Transform pos: 36.5,21.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 15615 components: - type: Transform pos: -5.5,-73.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 15704 components: - type: Transform pos: -53.5,16.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 15780 components: - type: Transform pos: 35.5,20.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 15866 components: - type: Transform pos: -54.5,16.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 15891 components: - type: Transform pos: -49.5,-0.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 15895 components: - type: Transform pos: -49.5,-3.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 15898 components: - type: Transform pos: -59.5,-15.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 15924 components: - type: Transform pos: -60.5,-15.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 15938 components: - type: Transform pos: -59.5,-11.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 15939 components: - type: Transform pos: -60.5,-11.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 15941 components: - type: Transform pos: -60.5,-14.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 15942 components: - type: Transform pos: -60.5,-13.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 15943 components: - type: Transform pos: -60.5,-12.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 16005 components: - type: Transform pos: -54.5,-16.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 16021 components: - type: Transform pos: 0.5,-54.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 16024 components: - type: Transform pos: 8.5,-77.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 16093 components: - type: Transform pos: -9.5,-73.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 16120 components: - type: Transform pos: 2.5,-54.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 16134 components: - type: Transform pos: -53.5,-1.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 16136 components: - type: Transform pos: -53.5,-0.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 16141 components: - type: Transform pos: -53.5,-3.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 16142 components: - type: Transform pos: -53.5,-4.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 16202 components: - type: Transform pos: 77.5,-72.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 16218 components: - type: Transform pos: 54.5,-53.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 16291 components: - type: Transform pos: -53.5,6.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 16292 components: - type: Transform pos: -51.5,6.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 16293 components: - type: Transform pos: -52.5,6.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 16356 components: - type: Transform pos: -50.5,6.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 16565 components: - type: Transform pos: 78.5,-45.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 16571 components: - type: Transform pos: 79.5,-45.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 16578 components: - type: Transform pos: 74.5,-45.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 16583 components: - type: Transform pos: 71.5,-45.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 16584 components: - type: Transform pos: 73.5,-45.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 16589 components: - type: Transform pos: 74.5,-39.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 16601 components: - type: Transform pos: 71.5,-43.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 16610 components: - type: Transform pos: 71.5,-41.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 16664 components: - type: Transform pos: -2.5,-59.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 16679 components: - type: Transform pos: 57.5,-61.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 16845 components: - type: Transform pos: 68.5,-45.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 16909 components: - type: Transform pos: -41.5,-58.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 17177 components: - type: Transform pos: -1.5,-96.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 17418 components: - type: Transform pos: -25.5,-45.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 17707 components: - type: Transform pos: 60.5,-52.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 17708 components: - type: Transform pos: 62.5,-54.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 17709 components: - type: Transform pos: 62.5,-52.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 17740 components: - type: Transform pos: 80.5,-15.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 17797 components: - type: Transform pos: 59.5,-36.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 17821 components: - type: Transform pos: -59.5,-53.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 17825 components: - type: Transform pos: 84.5,-24.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 17829 components: - type: Transform pos: 86.5,-29.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 17831 components: - type: Transform pos: 86.5,-30.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 17833 components: - type: Transform pos: 86.5,-31.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 17840 components: - type: Transform pos: 83.5,-14.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 17946 components: - type: Transform pos: 90.5,-13.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 18094 components: - type: Transform pos: 14.5,17.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 18160 components: - type: Transform pos: 90.5,-14.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 18239 components: - type: Transform pos: 95.5,-19.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 18415 components: - type: Transform pos: 21.5,24.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 18418 components: - type: Transform pos: 84.5,-15.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 18445 components: - type: Transform pos: 92.5,-32.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 18448 components: - type: Transform pos: 92.5,-27.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 18490 components: - type: Transform pos: 94.5,-30.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 18491 components: - type: Transform pos: 95.5,-30.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 18492 components: - type: Transform pos: 97.5,-28.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 18493 components: - type: Transform pos: 97.5,-26.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 18494 components: - type: Transform pos: 97.5,-24.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 18997 components: - type: Transform pos: 92.5,-54.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 18999 components: - type: Transform pos: 96.5,-50.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 19195 components: - type: Transform pos: -0.5,-96.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 19202 components: - type: Transform pos: 1.5,-58.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 19215 components: - type: Transform pos: 0.5,-58.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 19244 components: - type: Transform pos: -0.5,-58.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 19258 components: - type: Transform pos: -4.5,-66.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 19276 components: - type: Transform pos: 7.5,-66.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 19586 components: - type: Transform pos: 78.5,-39.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 19589 components: - type: Transform pos: 77.5,-38.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 20168 components: - type: Transform pos: 8.5,-71.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 21867 components: - type: Transform pos: 60.5,-54.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 21884 components: - type: Transform pos: 39.5,24.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 21901 components: - type: Transform pos: 36.5,22.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 21903 components: - type: Transform pos: 39.5,25.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 21904 components: - type: Transform pos: 32.5,26.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 21909 components: - type: Transform pos: 34.5,20.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 21917 components: - type: Transform pos: -26.5,-57.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 21918 components: - type: Transform pos: 31.5,26.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 21920 components: - type: Transform pos: 35.5,23.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 21921 components: - type: Transform pos: 34.5,23.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 21931 components: - type: Transform pos: 27.5,30.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 21942 components: - type: Transform pos: -55.5,-51.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 21946 components: - type: Transform pos: -57.5,-51.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 22011 components: - type: Transform pos: 26.5,27.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 22012 components: - type: Transform pos: 26.5,29.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 22050 components: - type: Transform pos: 28.5,27.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 22052 components: - type: Transform pos: -57.5,-55.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 22080 components: - type: Transform pos: 28.5,29.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 22595 components: - type: Transform pos: 28.5,-8.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 22596 components: - type: Transform pos: 28.5,-7.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 23338 components: - type: Transform pos: -13.5,-51.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 23341 components: - type: Transform pos: -26.5,-53.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 23357 components: - type: Transform pos: -25.5,-57.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 23667 components: - type: Transform pos: 46.5,25.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 23668 components: - type: Transform pos: 46.5,26.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 24731 components: - type: Transform pos: 80.5,-37.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - proto: RemoteSignaller entities: - uid: 4210 @@ -134666,24 +135861,32 @@ entities: rot: 3.141592653589793 rad pos: 33.5,-23.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6578 components: - type: Transform rot: 1.5707963267948966 rad pos: 29.5,2.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6787 components: - type: Transform rot: 3.141592653589793 rad pos: 34.5,-23.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7263 components: - type: Transform rot: 1.5707963267948966 rad pos: 29.5,1.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - proto: ShuttersNormalOpen entities: - uid: 186 @@ -134692,592 +135895,802 @@ entities: rot: 1.5707963267948966 rad pos: -25.5,-46.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 1700 components: - type: Transform rot: 3.141592653589793 rad pos: -22.5,-5.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2243 components: - type: Transform rot: 3.141592653589793 rad pos: -21.5,-5.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2759 components: - type: Transform pos: -3.5,-46.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 3778 components: - type: Transform rot: 1.5707963267948966 rad pos: -35.5,-51.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 3779 components: - type: Transform rot: 1.5707963267948966 rad pos: -35.5,-54.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4048 components: - type: Transform rot: -1.5707963267948966 rad pos: -14.5,-20.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4698 components: - type: Transform rot: -1.5707963267948966 rad pos: -31.5,-44.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4699 components: - type: Transform rot: 3.141592653589793 rad pos: -29.5,-43.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4700 components: - type: Transform rot: 3.141592653589793 rad pos: -28.5,-43.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4701 components: - type: Transform rot: -1.5707963267948966 rad pos: -31.5,-48.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4721 components: - type: Transform rot: 3.141592653589793 rad pos: -27.5,-43.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4782 components: - type: Transform rot: -1.5707963267948966 rad pos: -31.5,-47.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4796 components: - type: Transform rot: -1.5707963267948966 rad pos: -31.5,-45.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5439 components: - type: Transform pos: -8.5,16.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6345 components: - type: Transform pos: -4.5,-46.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6351 components: - type: Transform rot: -1.5707963267948966 rad pos: -13.5,-51.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10771 components: - type: Transform rot: 3.141592653589793 rad pos: -42.5,-33.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10807 components: - type: Transform rot: 3.141592653589793 rad pos: -44.5,-33.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 11419 components: - type: Transform rot: -1.5707963267948966 rad pos: -14.5,-19.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 11421 components: - type: Transform rot: -1.5707963267948966 rad pos: -14.5,-18.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 12072 components: - type: Transform pos: -7.5,16.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 12076 components: - type: Transform pos: -6.5,16.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 12193 components: - type: Transform pos: -2.5,-46.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 15624 components: - type: Transform rot: 1.5707963267948966 rad pos: 33.5,-35.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 15646 components: - type: Transform rot: 3.141592653589793 rad pos: -24.5,-49.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 15647 components: - type: Transform rot: 3.141592653589793 rad pos: -23.5,-49.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 15654 components: - type: Transform rot: 3.141592653589793 rad pos: -16.5,-45.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 15656 components: - type: Transform rot: 3.141592653589793 rad pos: -14.5,-45.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 15657 components: - type: Transform rot: 3.141592653589793 rad pos: -12.5,-45.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 15749 components: - type: Transform rot: 3.141592653589793 rad pos: -15.5,-45.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 16025 components: - type: Transform pos: -6.5,-35.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 16026 components: - type: Transform pos: -7.5,-35.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 16027 components: - type: Transform pos: -8.5,-35.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 16035 components: - type: Transform rot: -1.5707963267948966 rad pos: -21.5,-34.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 16036 components: - type: Transform rot: -1.5707963267948966 rad pos: -21.5,-33.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 16037 components: - type: Transform rot: -1.5707963267948966 rad pos: -21.5,-32.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 16090 components: - type: Transform pos: -1.5,-46.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 17052 components: - type: Transform rot: 3.141592653589793 rad pos: -9.5,-23.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 17053 components: - type: Transform rot: 3.141592653589793 rad pos: -7.5,-23.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 17616 components: - type: Transform rot: 1.5707963267948966 rad pos: 33.5,-33.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 17741 components: - type: Transform rot: 1.5707963267948966 rad pos: 33.5,-34.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 17930 components: - type: Transform pos: 28.5,-36.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 17943 components: - type: Transform rot: 3.141592653589793 rad pos: 28.5,-32.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 19574 components: - type: Transform pos: -19.5,-57.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 19575 components: - type: Transform pos: -19.5,-58.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 19576 components: - type: Transform pos: -15.5,-58.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 19577 components: - type: Transform pos: -15.5,-57.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 19578 components: - type: Transform rot: 1.5707963267948966 rad pos: 32.5,-33.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 19579 components: - type: Transform rot: 1.5707963267948966 rad pos: 32.5,-35.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 20731 components: - type: Transform rot: 3.141592653589793 rad pos: -45.5,4.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 20758 components: - type: Transform rot: 3.141592653589793 rad pos: -44.5,4.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 20768 components: - type: Transform rot: 3.141592653589793 rad pos: -46.5,4.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 20769 components: - type: Transform rot: 3.141592653589793 rad pos: -46.5,3.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 20770 components: - type: Transform rot: -1.5707963267948966 rad pos: -46.5,1.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 20771 components: - type: Transform pos: -45.5,0.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 20772 components: - type: Transform pos: -44.5,0.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 21229 components: - type: Transform pos: -47.5,-25.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 21230 components: - type: Transform rot: 3.141592653589793 rad pos: -48.5,-20.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 21231 components: - type: Transform rot: 3.141592653589793 rad pos: -49.5,-20.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 21234 components: - type: Transform pos: -45.5,-40.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 21235 components: - type: Transform pos: -44.5,-40.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 21236 components: - type: Transform pos: -43.5,-40.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 21237 components: - type: Transform pos: -42.5,-40.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 21238 components: - type: Transform pos: -41.5,-40.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 21242 components: - type: Transform pos: -44.5,-26.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 21243 components: - type: Transform pos: -42.5,-26.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 21244 components: - type: Transform rot: 3.141592653589793 rad pos: -45.5,-19.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 21245 components: - type: Transform rot: 3.141592653589793 rad pos: -44.5,-19.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 21246 components: - type: Transform rot: 3.141592653589793 rad pos: -43.5,-19.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 21247 components: - type: Transform rot: 3.141592653589793 rad pos: -42.5,-19.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 21248 components: - type: Transform rot: 3.141592653589793 rad pos: -41.5,-19.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 21251 components: - type: Transform rot: 3.141592653589793 rad pos: -34.5,-34.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 21252 components: - type: Transform rot: -1.5707963267948966 rad pos: -36.5,-37.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 21253 components: - type: Transform rot: -1.5707963267948966 rad pos: -36.5,-35.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 21254 components: - type: Transform pos: -33.5,-38.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 21255 components: - type: Transform pos: -34.5,-38.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 21256 components: - type: Transform pos: -29.5,-39.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 21257 components: - type: Transform pos: -28.5,-39.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 21258 components: - type: Transform pos: -27.5,-39.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 21880 components: - type: Transform rot: 1.5707963267948966 rad pos: -25.5,-45.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 22769 components: - type: Transform rot: 3.141592653589793 rad pos: -27.5,-20.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 22770 components: - type: Transform rot: 3.141592653589793 rad pos: -26.5,-20.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 22771 components: - type: Transform pos: -27.5,-23.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 22772 components: - type: Transform pos: -28.5,-23.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 22773 components: - type: Transform rot: -1.5707963267948966 rad pos: -32.5,-22.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 23360 components: - type: Transform rot: 3.141592653589793 rad pos: -26.5,-53.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 23361 components: - type: Transform pos: -26.5,-57.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 23362 components: - type: Transform pos: -25.5,-57.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 23378 components: - type: Transform pos: -24.5,-57.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 24120 components: - type: Transform rot: -1.5707963267948966 rad pos: -26.5,5.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 24121 components: - type: Transform rot: -1.5707963267948966 rad pos: -26.5,6.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 24122 components: - type: Transform rot: -1.5707963267948966 rad pos: -26.5,7.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 24123 components: - type: Transform rot: 3.141592653589793 rad pos: -25.5,12.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 24124 components: - type: Transform rot: 3.141592653589793 rad pos: -24.5,12.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 24125 components: - type: Transform rot: 3.141592653589793 rad pos: -23.5,12.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 24126 components: - type: Transform pos: -23.5,8.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 24127 components: - type: Transform pos: -24.5,8.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 24128 components: - type: Transform pos: -25.5,8.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 24817 components: - type: Transform rot: 3.141592653589793 rad pos: -24.5,-4.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 24818 components: - type: Transform rot: 3.141592653589793 rad pos: -25.5,-4.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 24819 components: - type: Transform rot: 3.141592653589793 rad pos: -28.5,-4.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 24820 components: - type: Transform rot: 3.141592653589793 rad pos: -29.5,-4.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 24821 components: - type: Transform rot: 3.141592653589793 rad pos: -27.5,-4.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 24822 components: - type: Transform rot: -1.5707963267948966 rad pos: -30.5,-5.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - proto: ShuttersWindowOpen entities: - uid: 10682 @@ -135286,27 +136699,37 @@ entities: rot: -1.5707963267948966 rad pos: -26.5,11.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10686 components: - type: Transform rot: -1.5707963267948966 rad pos: -26.5,10.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 15630 components: - type: Transform pos: -17.5,-58.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 15631 components: - type: Transform pos: -18.5,-58.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 15632 components: - type: Transform pos: -16.5,-58.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - proto: ShuttleConsoleCircuitboard entities: - uid: 21971 @@ -139358,6 +140781,14 @@ entities: - type: Transform pos: -39.5,-29.5 parent: 2 +- proto: StationAiFixerComputer + entities: + - uid: 1674 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 30.5,-35.5 + parent: 2 - proto: StationAiUploadComputer entities: - uid: 1643 @@ -140050,18 +141481,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 - uid: 4752 components: - type: Transform @@ -140073,18 +141494,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 - uid: 4848 components: - type: Transform @@ -140096,18 +141507,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 - uid: 4861 components: - type: Transform @@ -140119,18 +141520,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 - uid: 22571 components: - type: Transform @@ -140142,18 +141533,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 - proto: SuitStorageEVAEmergency entities: - uid: 127 @@ -140222,18 +141603,8 @@ entities: immutable: False temperature: 293.14673 moles: - - 1.8856695 - - 7.0937095 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 1.8856695 + Nitrogen: 7.0937095 - type: ContainerContainer containers: entity_storage: !type:Container @@ -140260,18 +141631,8 @@ entities: immutable: False temperature: 293.14673 moles: - - 1.8856695 - - 7.0937095 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 + Oxygen: 1.8856695 + Nitrogen: 7.0937095 - type: ContainerContainer containers: entity_storage: !type:Container @@ -141279,6 +142640,11 @@ entities: - type: Transform pos: -29.442802,-46.33888 parent: 2 + - uid: 6049 + components: + - type: Transform + pos: 41.507294,-9.45423 + parent: 2 - uid: 12661 components: - type: Transform @@ -141387,11 +142753,6 @@ entities: - type: Transform pos: -22.5,-18.5 parent: 2 - - uid: 1674 - components: - - type: Transform - pos: 30.5,-35.5 - parent: 2 - uid: 1728 components: - type: Transform @@ -143821,101 +145182,141 @@ entities: - type: Transform pos: 8.5,-41.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 471 components: - type: Transform pos: 19.5,-45.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 3132 components: - type: Transform pos: 37.5,-8.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4151 components: - type: Transform pos: 8.5,-39.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4870 components: - type: Transform pos: 8.5,-33.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4872 components: - type: Transform pos: 8.5,-31.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5905 components: - type: Transform pos: 8.5,-27.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 9883 components: - type: Transform pos: 17.5,-45.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 11969 components: - type: Transform pos: 8.5,-20.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 11979 components: - type: Transform pos: 36.5,-5.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 11981 components: - type: Transform pos: 37.5,-5.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 12023 components: - type: Transform pos: -49.5,-38.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 12043 components: - type: Transform pos: -49.5,-36.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 12073 components: - type: Transform pos: 29.5,-16.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 13377 components: - type: Transform pos: -47.5,-39.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 13732 components: - type: Transform pos: 8.5,-45.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 13884 components: - type: Transform pos: -47.5,-42.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 14253 components: - type: Transform pos: -44.5,15.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 14498 components: - type: Transform pos: -42.5,15.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 22593 components: - type: Transform pos: -5.5,-30.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - proto: ToiletDirtyWater entities: - uid: 905 @@ -161335,22 +162736,30 @@ entities: rot: 3.141592653589793 rad pos: -51.5,-51.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7524 components: - type: Transform pos: -20.5,-43.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7556 components: - type: Transform pos: -19.5,-43.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 12154 components: - type: Transform rot: 3.141592653589793 rad pos: -25.5,-4.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - type: DeviceLinkSink invokeCounter: 1 - type: DeviceLinkSource @@ -161367,6 +162776,8 @@ entities: rot: 3.141592653589793 rad pos: -24.5,-4.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - type: DeviceLinkSink invokeCounter: 1 - type: DeviceLinkSource @@ -161383,24 +162794,32 @@ entities: rot: -1.5707963267948966 rad pos: -14.5,-15.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 20568 components: - type: Transform rot: -1.5707963267948966 rad pos: -14.5,-3.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 21410 components: - type: Transform rot: -1.5707963267948966 rad pos: -14.5,-2.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 22474 components: - type: Transform rot: -1.5707963267948966 rad pos: -14.5,-14.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - proto: WindoorChapelLocked entities: - uid: 5903 @@ -161409,6 +162828,8 @@ entities: rot: 1.5707963267948966 rad pos: 41.5,-11.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - proto: WindoorHydroponicsLocked entities: - uid: 3456 @@ -161417,18 +162838,24 @@ entities: rot: 1.5707963267948966 rad pos: -21.5,-37.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 3457 components: - type: Transform rot: 1.5707963267948966 rad pos: -21.5,-38.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10445 components: - type: Transform rot: -1.5707963267948966 rad pos: -12.5,-32.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - proto: WindoorKitchenLocked entities: - uid: 13346 @@ -161437,6 +162864,8 @@ entities: rot: 1.5707963267948966 rad pos: -10.5,-32.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - proto: WindoorSecure entities: - uid: 3235 @@ -161445,54 +162874,74 @@ entities: rot: 3.141592653589793 rad pos: 19.5,-23.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4225 components: - type: Transform rot: 3.141592653589793 rad pos: 20.5,-23.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4228 components: - type: Transform rot: 3.141592653589793 rad pos: 21.5,-23.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4855 components: - type: Transform pos: -28.5,-26.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4981 components: - type: Transform pos: 20.5,-19.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5408 components: - type: Transform pos: -29.5,-26.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5470 components: - type: Transform pos: -27.5,-26.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7566 components: - type: Transform pos: -16.5,-43.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7569 components: - type: Transform pos: -12.5,-43.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7610 components: - type: Transform rot: 3.141592653589793 rad pos: -13.5,-45.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - type: DeviceLinkSink invokeCounter: 1 - type: DeviceLinkSource @@ -161506,52 +162955,70 @@ entities: rot: 1.5707963267948966 rad pos: -33.5,3.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 9634 components: - type: Transform rot: -1.5707963267948966 rad pos: -31.5,3.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 12433 components: - type: Transform rot: 1.5707963267948966 rad pos: 18.5,17.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 18592 components: - type: Transform pos: 4.5,15.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 18595 components: - type: Transform pos: 5.5,15.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 21759 components: - type: Transform rot: 3.141592653589793 rad pos: 21.5,4.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 22306 components: - type: Transform rot: 3.141592653589793 rad pos: -29.5,-33.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 22307 components: - type: Transform rot: 3.141592653589793 rad pos: -28.5,-33.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 22311 components: - type: Transform rot: 3.141592653589793 rad pos: -27.5,-33.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - proto: WindoorSecureArmoryLocked entities: - uid: 11716 @@ -161559,16 +163026,22 @@ entities: - type: Transform pos: -29.5,-4.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 11724 components: - type: Transform pos: -28.5,-4.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 11782 components: - type: Transform pos: -25.5,-4.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - type: DeviceLinkSink invokeCounter: 1 - type: DeviceLinkSource @@ -161584,6 +163057,8 @@ entities: - type: Transform pos: -24.5,-4.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - type: DeviceLinkSink invokeCounter: 1 - type: DeviceLinkSource @@ -161602,12 +163077,16 @@ entities: rot: 1.5707963267948966 rad pos: -14.5,-3.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2183 components: - type: Transform rot: 1.5707963267948966 rad pos: -14.5,-2.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - proto: WindoorSecureBrigLocked entities: - uid: 28 @@ -161616,12 +163095,16 @@ entities: rot: 3.141592653589793 rad pos: -29.5,-4.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 11971 components: - type: Transform rot: 3.141592653589793 rad pos: -28.5,-4.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - proto: WindoorSecureCargoLocked entities: - uid: 5299 @@ -161629,35 +163112,47 @@ entities: - type: Transform pos: 6.5,16.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 11065 components: - type: Transform pos: 12.5,21.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 14289 components: - type: Transform rot: 3.141592653589793 rad pos: 5.5,15.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 15296 components: - type: Transform rot: 3.141592653589793 rad pos: 4.5,15.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 22430 components: - type: Transform rot: 3.141592653589793 rad pos: 15.5,13.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 22441 components: - type: Transform rot: 3.141592653589793 rad pos: 16.5,13.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - proto: WindoorSecureChemistryLocked entities: - uid: 144 @@ -161665,33 +163160,45 @@ entities: - type: Transform pos: -29.5,-33.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 3361 components: - type: Transform rot: 1.5707963267948966 rad pos: -40.5,-36.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10414 components: - type: Transform pos: -27.5,-33.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 11937 components: - type: Transform rot: 1.5707963267948966 rad pos: -27.5,-36.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 12508 components: - type: Transform pos: -28.5,-33.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 22305 components: - type: Transform pos: -35.5,-34.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - proto: WindoorSecureCommandLocked entities: - uid: 66 @@ -161700,35 +163207,47 @@ entities: rot: 3.141592653589793 rad pos: 27.5,-9.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4818 components: - type: Transform rot: 1.5707963267948966 rad pos: 28.5,-34.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7005 components: - type: Transform rot: 3.141592653589793 rad pos: 23.5,-9.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7606 components: - type: Transform rot: -1.5707963267948966 rad pos: 30.5,-34.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 11497 components: - type: Transform pos: 9.5,-15.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 12609 components: - type: Transform rot: -1.5707963267948966 rad pos: 90.5,-42.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - proto: WindoorSecureEngineeringLocked entities: - uid: 3998 @@ -161737,12 +163256,16 @@ entities: rot: 1.5707963267948966 rad pos: -14.5,-14.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 17470 components: - type: Transform rot: 1.5707963267948966 rad pos: -14.5,-15.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - proto: WindoorSecureHeadOfPersonnelLocked entities: - uid: 7609 @@ -161750,6 +163273,8 @@ entities: - type: Transform pos: -13.5,-45.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - type: DeviceLinkSink invokeCounter: 1 - type: DeviceLinkSource @@ -161764,24 +163289,32 @@ entities: - type: Transform pos: 28.5,5.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8316 components: - type: Transform rot: -1.5707963267948966 rad pos: 29.5,4.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 17460 components: - type: Transform rot: -1.5707963267948966 rad pos: 29.5,2.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 21885 components: - type: Transform rot: -1.5707963267948966 rad pos: 29.5,1.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - proto: WindoorSecureKitchenLocked entities: - uid: 7014 @@ -161790,18 +163323,24 @@ entities: rot: 3.141592653589793 rad pos: -8.5,-35.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7064 components: - type: Transform rot: 3.141592653589793 rad pos: -6.5,-35.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 15837 components: - type: Transform rot: 3.141592653589793 rad pos: -7.5,-35.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - proto: WindoorSecureMedicalLocked entities: - uid: 4822 @@ -161810,35 +163349,47 @@ entities: rot: 3.141592653589793 rad pos: -35.5,-34.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8732 components: - type: Transform rot: -1.5707963267948966 rad pos: -40.5,-36.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 21758 components: - type: Transform pos: 21.5,4.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 22137 components: - type: Transform rot: 3.141592653589793 rad pos: -29.5,-26.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 22150 components: - type: Transform rot: 3.141592653589793 rad pos: -27.5,-26.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 22310 components: - type: Transform rot: 3.141592653589793 rad pos: -28.5,-26.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - proto: WindoorSecureSalvageLocked entities: - uid: 11054 @@ -161847,6 +163398,8 @@ entities: rot: 3.141592653589793 rad pos: 12.5,21.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - proto: WindoorSecureScienceLocked entities: - uid: 4194 @@ -161854,57 +163407,79 @@ entities: - type: Transform pos: 20.5,-23.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4229 components: - type: Transform pos: 19.5,-23.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4230 components: - type: Transform pos: 21.5,-23.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4273 components: - type: Transform pos: 20.5,-27.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4373 components: - type: Transform pos: 39.5,-26.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4392 components: - type: Transform pos: 40.5,-37.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4396 components: - type: Transform pos: 39.5,-37.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4402 components: - type: Transform pos: 38.5,-37.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4514 components: - type: Transform rot: 1.5707963267948966 rad pos: 30.5,-42.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5157 components: - type: Transform pos: 34.5,-23.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 23327 components: - type: Transform pos: 33.5,-23.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - proto: WindoorSecureSecurityLocked entities: - uid: 152 @@ -161912,18 +163487,24 @@ entities: - type: Transform pos: -39.5,-0.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 11625 components: - type: Transform rot: 3.141592653589793 rad pos: -44.5,-5.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 13169 components: - type: Transform rot: -1.5707963267948966 rad pos: 16.5,-17.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - proto: WindoorServiceLocked entities: - uid: 5831 @@ -161932,12 +163513,16 @@ entities: rot: -1.5707963267948966 rad pos: 17.5,-39.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6318 components: - type: Transform rot: -1.5707963267948966 rad pos: 17.5,-41.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - proto: WindoorTheatreLocked entities: - uid: 3475 @@ -161946,12 +163531,16 @@ entities: rot: 1.5707963267948966 rad pos: -4.5,-37.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 16043 components: - type: Transform rot: 3.141592653589793 rad pos: 13.5,-29.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - proto: Window entities: - uid: 724 @@ -161959,151 +163548,211 @@ entities: - type: Transform pos: -36.5,-37.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2324 components: - type: Transform pos: 16.5,-27.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2400 components: - type: Transform pos: 12.5,-26.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2405 components: - type: Transform pos: 12.5,-25.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2995 components: - type: Transform pos: -21.5,-22.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 3363 components: - type: Transform pos: -19.5,-21.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 3364 components: - type: Transform pos: -18.5,-21.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 3371 components: - type: Transform pos: -17.5,-21.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 3519 components: - type: Transform pos: -0.5,-39.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 3525 components: - type: Transform pos: 13.5,-38.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 3774 components: - type: Transform pos: 12.5,-44.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 3783 components: - type: Transform pos: 15.5,-34.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 3926 components: - type: Transform pos: -21.5,-24.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6921 components: - type: Transform pos: 12.5,-49.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7537 components: - type: Transform pos: 13.5,-42.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7708 components: - type: Transform pos: 12.5,-36.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7780 components: - type: Transform pos: 12.5,-53.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7885 components: - type: Transform pos: 17.5,-10.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7891 components: - type: Transform pos: 17.5,-9.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8902 components: - type: Transform pos: 16.5,-23.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 9433 components: - type: Transform pos: 12.5,-47.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 9573 components: - type: Transform pos: 12.5,-24.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 9620 components: - type: Transform pos: 13.5,-23.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 9652 components: - type: Transform pos: 17.5,-34.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10257 components: - type: Transform pos: 13.5,-27.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 12070 components: - type: Transform pos: -36.5,-35.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 12197 components: - type: Transform pos: 41.5,-8.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 12752 components: - type: Transform pos: 20.5,-39.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 13220 components: - type: Transform pos: 20.5,-41.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 23124 components: - type: Transform pos: -0.5,-41.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - proto: WindowDirectional entities: - uid: 339 @@ -162112,112 +163761,152 @@ entities: rot: 3.141592653589793 rad pos: -44.5,-29.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4198 components: - type: Transform rot: 1.5707963267948966 rad pos: 36.5,-27.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4351 components: - type: Transform pos: 37.5,-26.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4358 components: - type: Transform pos: 38.5,-26.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4607 components: - type: Transform pos: -30.5,-29.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4611 components: - type: Transform pos: -26.5,-29.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5008 components: - type: Transform pos: -39.5,-30.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6173 components: - type: Transform rot: -1.5707963267948966 rad pos: 17.5,-40.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6715 components: - type: Transform pos: -40.5,-30.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8470 components: - type: Transform rot: -1.5707963267948966 rad pos: -40.5,-27.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 9925 components: - type: Transform rot: 3.141592653589793 rad pos: -45.5,-29.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10232 components: - type: Transform pos: -27.5,-29.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10234 components: - type: Transform rot: 3.141592653589793 rad pos: -30.5,-30.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10466 components: - type: Transform rot: -1.5707963267948966 rad pos: -42.5,-27.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10659 components: - type: Transform rot: 3.141592653589793 rad pos: -27.5,-30.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 11263 components: - type: Transform rot: 3.141592653589793 rad pos: -29.5,-30.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 11334 components: - type: Transform rot: 3.141592653589793 rad pos: -26.5,-30.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 11940 components: - type: Transform pos: -29.5,-29.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 12634 components: - type: Transform rot: 1.5707963267948966 rad pos: -44.5,-27.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 22130 components: - type: Transform rot: 1.5707963267948966 rad pos: -52.5,-51.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - proto: WindowFrostedDirectional entities: - uid: 3172 @@ -162226,88 +163915,118 @@ entities: rot: -1.5707963267948966 rad pos: 4.5,-51.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 3798 components: - type: Transform rot: 1.5707963267948966 rad pos: -1.5,-51.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4311 components: - type: Transform rot: 1.5707963267948966 rad pos: -1.5,-53.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4511 components: - type: Transform rot: 3.141592653589793 rad pos: -31.5,-51.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4705 components: - type: Transform rot: 3.141592653589793 rad pos: -29.5,-51.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4706 components: - type: Transform rot: 3.141592653589793 rad pos: -30.5,-51.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5600 components: - type: Transform rot: 1.5707963267948966 rad pos: 41.5,-10.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7503 components: - type: Transform pos: -18.5,-43.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7512 components: - type: Transform pos: -21.5,-43.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7526 components: - type: Transform rot: 1.5707963267948966 rad pos: -20.5,-44.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7528 components: - type: Transform rot: -1.5707963267948966 rad pos: -19.5,-44.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8353 components: - type: Transform rot: 1.5707963267948966 rad pos: 41.5,-9.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10574 components: - type: Transform rot: 1.5707963267948966 rad pos: -1.5,-52.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 12723 components: - type: Transform rot: -1.5707963267948966 rad pos: 4.5,-53.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 14965 components: - type: Transform rot: -1.5707963267948966 rad pos: 4.5,-52.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - proto: WindowReinforcedDirectional entities: - uid: 341 @@ -162316,467 +164035,635 @@ entities: rot: -1.5707963267948966 rad pos: 30.5,-33.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 616 components: - type: Transform rot: 1.5707963267948966 rad pos: -18.5,-16.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 2249 components: - type: Transform rot: 3.141592653589793 rad pos: 24.5,-9.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 3098 components: - type: Transform pos: -3.5,-19.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 3416 components: - type: Transform pos: -19.5,-39.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 3417 components: - type: Transform pos: -15.5,-39.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 3420 components: - type: Transform pos: -18.5,-39.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 3421 components: - type: Transform pos: -17.5,-39.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 3422 components: - type: Transform pos: -16.5,-39.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 3474 components: - type: Transform pos: 13.5,-31.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 3510 components: - type: Transform rot: 3.141592653589793 rad pos: 12.5,-29.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 3553 components: - type: Transform pos: 31.5,-57.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 3587 components: - type: Transform rot: 3.141592653589793 rad pos: 14.5,-29.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 3618 components: - type: Transform pos: 14.5,-31.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 3645 components: - type: Transform rot: 1.5707963267948966 rad pos: 14.5,-29.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 3647 components: - type: Transform rot: 1.5707963267948966 rad pos: 14.5,-31.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 3648 components: - type: Transform rot: -1.5707963267948966 rad pos: 12.5,-29.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 3649 components: - type: Transform rot: -1.5707963267948966 rad pos: 12.5,-30.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 3653 components: - type: Transform pos: 12.5,-31.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 3654 components: - type: Transform rot: -1.5707963267948966 rad pos: 12.5,-31.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 3658 components: - type: Transform rot: 1.5707963267948966 rad pos: 14.5,-30.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 3961 components: - type: Transform pos: -1.5,-19.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4144 components: - type: Transform rot: -1.5707963267948966 rad pos: -38.5,-30.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4191 components: - type: Transform pos: 21.5,-27.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4224 components: - type: Transform pos: 19.5,-27.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4389 components: - type: Transform rot: 1.5707963267948966 rad pos: 40.5,-38.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4403 components: - type: Transform rot: -1.5707963267948966 rad pos: 38.5,-38.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4715 components: - type: Transform rot: 1.5707963267948966 rad pos: 28.5,-35.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4777 components: - type: Transform rot: 1.5707963267948966 rad pos: 10.5,-19.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 4916 components: - type: Transform rot: 1.5707963267948966 rad pos: -3.5,-42.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5595 components: - type: Transform rot: 1.5707963267948966 rad pos: 28.5,-33.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 5682 components: - type: Transform pos: 29.5,-57.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6239 components: - type: Transform rot: -1.5707963267948966 rad pos: -38.5,-29.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6497 components: - type: Transform pos: -18.5,-54.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 6662 components: - type: Transform rot: 3.141592653589793 rad pos: 25.5,-9.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7393 components: - type: Transform rot: -1.5707963267948966 rad pos: 28.5,5.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7565 components: - type: Transform pos: -15.5,-43.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7567 components: - type: Transform pos: -14.5,-43.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7568 components: - type: Transform pos: -13.5,-43.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7622 components: - type: Transform rot: 3.141592653589793 rad pos: 48.5,-23.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7645 components: - type: Transform rot: 1.5707963267948966 rad pos: -54.5,-21.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 7920 components: - type: Transform pos: 19.5,-19.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8087 components: - type: Transform pos: 29.5,4.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8224 components: - type: Transform pos: 21.5,-19.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 8350 components: - type: Transform rot: 3.141592653589793 rad pos: 26.5,-9.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 9252 components: - type: Transform rot: 3.141592653589793 rad pos: 50.5,-23.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 9259 components: - type: Transform pos: 48.5,-23.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 9301 components: - type: Transform rot: 3.141592653589793 rad pos: 49.5,-23.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 9303 components: - type: Transform pos: 49.5,-23.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 9325 components: - type: Transform pos: 50.5,-23.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 9338 components: - type: Transform rot: 3.141592653589793 rad pos: 48.5,-19.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 9340 components: - type: Transform rot: 3.141592653589793 rad pos: 49.5,-19.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 9341 components: - type: Transform rot: 3.141592653589793 rad pos: 50.5,-19.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 9342 components: - type: Transform pos: 50.5,-19.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 9343 components: - type: Transform pos: 49.5,-19.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 9344 components: - type: Transform pos: 48.5,-19.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 9727 components: - type: Transform pos: -17.5,-54.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 9728 components: - type: Transform pos: -16.5,-54.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10844 components: - type: Transform rot: 1.5707963267948966 rad pos: -36.5,-29.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10847 components: - type: Transform rot: 1.5707963267948966 rad pos: -36.5,-30.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 10966 components: - type: Transform rot: 3.141592653589793 rad pos: -43.5,-5.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 11019 components: - type: Transform pos: 8.5,-15.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 11046 components: - type: Transform rot: 3.141592653589793 rad pos: -45.5,-5.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 11305 components: - type: Transform rot: -1.5707963267948966 rad pos: 16.5,-18.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 11356 components: - type: Transform rot: -1.5707963267948966 rad pos: 30.5,-35.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 11500 components: - type: Transform pos: 10.5,-15.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 12994 components: - type: Transform rot: 3.141592653589793 rad pos: -42.5,-22.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 12996 components: - type: Transform rot: 3.141592653589793 rad pos: -43.5,-22.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 12998 components: - type: Transform rot: 3.141592653589793 rad pos: -44.5,-22.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 12999 components: - type: Transform rot: 3.141592653589793 rad pos: -45.5,-22.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 13170 components: - type: Transform rot: 1.5707963267948966 rad pos: 10.5,-18.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 13231 components: - type: Transform rot: 1.5707963267948966 rad pos: -54.5,-23.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 18244 components: - type: Transform pos: 30.5,-78.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 18245 components: - type: Transform rot: -1.5707963267948966 rad pos: 31.5,-79.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 18247 components: - type: Transform rot: 1.5707963267948966 rad pos: 29.5,-79.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 18248 components: - type: Transform rot: 3.141592653589793 rad pos: 30.5,-80.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 18460 components: - type: Transform rot: 1.5707963267948966 rad pos: 89.5,-31.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 18462 components: - type: Transform rot: 1.5707963267948966 rad pos: 89.5,-29.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 19631 components: - type: Transform pos: -35.5,15.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 19632 components: - type: Transform pos: -34.5,15.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 19633 components: - type: Transform pos: -33.5,15.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 21157 components: - type: Transform rot: 1.5707963267948966 rad pos: -18.5,-15.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 22703 components: - type: Transform pos: -22.5,-17.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - uid: 23011 components: - type: Transform pos: -23.5,-17.5 parent: 2 + - type: DeltaPressure + gridUid: 2 - proto: Wirecutter entities: - uid: 7428 From 886b365099fcb092aa0b616a245b9484c52a14bc Mon Sep 17 00:00:00 2001 From: PJBot Date: Sat, 20 Sep 2025 18:39:07 +0000 Subject: [PATCH 114/143] Automatic changelog update --- Resources/Changelog/Maps.yml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Resources/Changelog/Maps.yml b/Resources/Changelog/Maps.yml index a1335f49b3..c9cb2f4890 100644 --- a/Resources/Changelog/Maps.yml +++ b/Resources/Changelog/Maps.yml @@ -710,4 +710,11 @@ id: 85 time: '2025-09-20T18:10:21.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/40463 +- author: ToastEnjoyer + changes: + - message: On Amber, added the AI restoration console to the RD's room. + type: Add + id: 86 + time: '2025-09-20T18:37:58.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/40393 Order: 1 From a5129c141c91a5358c8d2990d152b142fe8cdf37 Mon Sep 17 00:00:00 2001 From: Absotively Date: Sat, 20 Sep 2025 12:55:34 -0600 Subject: [PATCH 115/143] Don't overwrite values that are mid-edit in air alarm window (#40338) --- .../Atmos/Monitor/UI/Widgets/ThresholdBoundControl.xaml.cs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/Content.Client/Atmos/Monitor/UI/Widgets/ThresholdBoundControl.xaml.cs b/Content.Client/Atmos/Monitor/UI/Widgets/ThresholdBoundControl.xaml.cs index 55f7c00898..38c631e630 100644 --- a/Content.Client/Atmos/Monitor/UI/Widgets/ThresholdBoundControl.xaml.cs +++ b/Content.Client/Atmos/Monitor/UI/Widgets/ThresholdBoundControl.xaml.cs @@ -30,7 +30,10 @@ public sealed partial class ThresholdBoundControl : BoxContainer public void SetValue(float value) { _value = value; - CSpinner.Value = ScaledValue; + if (!CSpinner.HasKeyboardFocus()) + { + CSpinner.Value = ScaledValue; + } } public void SetEnabled(bool enabled) From 1c74e1e100df066430797630e937441dfbec8a9b Mon Sep 17 00:00:00 2001 From: PJBot Date: Sat, 20 Sep 2025 18:56:41 +0000 Subject: [PATCH 116/143] Automatic changelog update --- Resources/Changelog/Changelog.yml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 616c073e8e..af3ff70a37 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: Hitlinemoss - changes: - - message: The chef's closet no longer contains an emergency crowbar. - type: Remove - id: 8478 - time: '2025-05-14T05:16:17.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/37403 - author: BigfootBravo changes: - message: No more spammed error message when trying to write on a acquisition slip. @@ -3953,3 +3946,10 @@ id: 8988 time: '2025-09-19T19:30:08.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/40372 +- author: Absotively + changes: + - message: Air alarms will not replace the number you're currently typing + type: Tweak + id: 8989 + time: '2025-09-20T18:55:34.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/40338 From a746c3cc0fce3c08e46a6f955c02f170c7c884a3 Mon Sep 17 00:00:00 2001 From: Absotively Date: Sat, 20 Sep 2025 13:00:22 -0600 Subject: [PATCH 117/143] Show hand labeler label text on examine (#40334) --- .../Labels/EntitySystems/SharedHandLabelerSystem.cs | 13 +++++++++++++ .../Locale/en-US/hand-labeler/hand-labeler.ftl | 4 ++++ 2 files changed, 17 insertions(+) diff --git a/Content.Shared/Labels/EntitySystems/SharedHandLabelerSystem.cs b/Content.Shared/Labels/EntitySystems/SharedHandLabelerSystem.cs index 14abae70bb..4dc5f86f27 100644 --- a/Content.Shared/Labels/EntitySystems/SharedHandLabelerSystem.cs +++ b/Content.Shared/Labels/EntitySystems/SharedHandLabelerSystem.cs @@ -1,5 +1,6 @@ using Content.Shared.Administration.Logs; using Content.Shared.Database; +using Content.Shared.Examine; using Content.Shared.Interaction; using Content.Shared.Labels.Components; using Content.Shared.Popups; @@ -25,6 +26,7 @@ public abstract class SharedHandLabelerSystem : EntitySystem SubscribeLocalEvent(AfterInteractOn); SubscribeLocalEvent>(OnUtilityVerb); + SubscribeLocalEvent(OnExamined); // Bound UI subscriptions SubscribeLocalEvent(OnHandLabelerLabelChanged); SubscribeLocalEvent(OnGetState); @@ -128,4 +130,15 @@ public abstract class SharedHandLabelerSystem : EntitySystem _adminLogger.Add(LogType.Action, LogImpact.Low, $"{ToPrettyString(args.Actor):user} set {ToPrettyString(uid):labeler} to apply label \"{handLabeler.AssignedLabel}\""); } + + private void OnExamined(Entity ent, ref ExaminedEvent args) + { + if (!args.IsInDetailsRange) + return; + + var text = ent.Comp.AssignedLabel == string.Empty + ? Loc.GetString("hand-labeler-examine-blank") + : Loc.GetString("hand-labeler-examine-label-text", ("label-text", ent.Comp.AssignedLabel)); + args.PushMarkup(text); + } } diff --git a/Resources/Locale/en-US/hand-labeler/hand-labeler.ftl b/Resources/Locale/en-US/hand-labeler/hand-labeler.ftl index 6198b4f9e0..f9861b0f6f 100644 --- a/Resources/Locale/en-US/hand-labeler/hand-labeler.ftl +++ b/Resources/Locale/en-US/hand-labeler/hand-labeler.ftl @@ -15,3 +15,7 @@ hand-labeler-has-label = This object has a label on it, which reads '{$label}' # Verb text hand-labeler-remove-label-text = Remove label hand-labeler-add-label-text = Apply label + +# Shown when the labeler is examined +hand-labeler-examine-blank = The label text is blank. +hand-labeler-examine-label-text = The label text is '{$label-text}'. From 85f3cc7583ba4e9b9d20ead11b7baaf6b8535551 Mon Sep 17 00:00:00 2001 From: PJBot Date: Sat, 20 Sep 2025 19:01:30 +0000 Subject: [PATCH 118/143] Automatic changelog update --- Resources/Changelog/Changelog.yml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index af3ff70a37..f76f4f6649 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: BigfootBravo - changes: - - message: No more spammed error message when trying to write on a acquisition slip. - type: Fix - id: 8479 - time: '2025-05-14T05:56:51.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/37442 - author: ToastEnjoyer changes: - message: Removed the high value target status on certain computer boards, replacing @@ -3953,3 +3946,10 @@ id: 8989 time: '2025-09-20T18:55:34.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/40338 +- author: Absotively + changes: + - message: Hand labeler's set text now displays on examine. + type: Tweak + id: 8990 + time: '2025-09-20T19:00:22.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/40334 From ae22c7c3d085d1c7359cbcd07d18755d1b38e733 Mon Sep 17 00:00:00 2001 From: slarticodefast <161409025+slarticodefast@users.noreply.github.com> Date: Sat, 20 Sep 2025 21:05:57 +0200 Subject: [PATCH 119/143] Fix RCD errors (#40278) --- Content.Client/RCD/RCDMenuBoundUserInterface.cs | 4 ++-- Content.Shared/RCD/Systems/RCDSystem.cs | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Content.Client/RCD/RCDMenuBoundUserInterface.cs b/Content.Client/RCD/RCDMenuBoundUserInterface.cs index 6aa32892cf..3f847c8beb 100644 --- a/Content.Client/RCD/RCDMenuBoundUserInterface.cs +++ b/Content.Client/RCD/RCDMenuBoundUserInterface.cs @@ -125,7 +125,7 @@ public sealed class RCDMenuBoundUserInterface : BoundUserInterface var name = Loc.GetString(proto.SetName); if (proto.Prototype != null && - _prototypeManager.Resolve(proto.Prototype, out var entProto)) + _prototypeManager.TryIndex(proto.Prototype, out var entProto)) // don't use Resolve because this can be a tile { name = entProto.Name; } @@ -144,7 +144,7 @@ public sealed class RCDMenuBoundUserInterface : BoundUserInterface if (proto.Mode is RcdMode.ConstructTile or RcdMode.ConstructObject && proto.Prototype != null - && _prototypeManager.Resolve(proto.Prototype, out var entProto)) + && _prototypeManager.TryIndex(proto.Prototype, out var entProto)) // don't use Resolve because this can be a tile { tooltip = Loc.GetString(entProto.Name); } diff --git a/Content.Shared/RCD/Systems/RCDSystem.cs b/Content.Shared/RCD/Systems/RCDSystem.cs index 2e638d7c13..6cce0b6204 100644 --- a/Content.Shared/RCD/Systems/RCDSystem.cs +++ b/Content.Shared/RCD/Systems/RCDSystem.cs @@ -111,7 +111,7 @@ public sealed class RCDSystem : EntitySystem var name = Loc.GetString(prototype.SetName); if (prototype.Prototype != null && - _protoManager.Resolve(prototype.Prototype, out var proto)) + _protoManager.TryIndex(prototype.Prototype, out var proto)) // don't use Resolve because this can be a tile name = proto.Name; msg = Loc.GetString("rcd-component-examine-build-details", ("name", name)); From b85fed759a73460ce8e4bf17b5d691bc13fa66bd Mon Sep 17 00:00:00 2001 From: 2DSiggy Date: Sat, 20 Sep 2025 16:02:17 -0400 Subject: [PATCH 120/143] Fixing a syntax error (#40473) --- Resources/Prototypes/Objectives/objectiveGroups.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Resources/Prototypes/Objectives/objectiveGroups.yml b/Resources/Prototypes/Objectives/objectiveGroups.yml index e53310b132..7cfbd2761e 100644 --- a/Resources/Prototypes/Objectives/objectiveGroups.yml +++ b/Resources/Prototypes/Objectives/objectiveGroups.yml @@ -72,8 +72,8 @@ - type: weightedRandom id: ThiefObjectiveGroupItem weights: - ChiefEngineerToolbeltStealObjective: .5 #command - CaptainSwordStealObjective: .5 + ChiefEngineerToolbeltStealObjective: 0.5 #command + CaptainSwordStealObjective: 0.5 ClothingHeadsetAltMedicalStealObjective: 1 ForensicScannerStealObjective: 1 #sec FlippoEngravedLighterStealObjective: 0.5 From 9893aca467425b433baa648505388604c69bb41a Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sun, 21 Sep 2025 02:59:40 +0200 Subject: [PATCH 121/143] Update Credits (#40478) Co-authored-by: PJBot --- Resources/Credits/GitHub.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Resources/Credits/GitHub.txt b/Resources/Credits/GitHub.txt index d776432727..dc25c12071 100644 --- a/Resources/Credits/GitHub.txt +++ b/Resources/Credits/GitHub.txt @@ -1 +1 @@ -0leshe, 0tito, 0x6273, 12rabbits, 1337dakota, 13spacemen, 154942, 2013HORSEMEATSCANDAL, 20kdc, 21Melkuu, 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, alex, 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, 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, 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, HighTechPuddle, Hitlinemoss, hiucko, hivehum, Hmeister-fake, Hmeister-real, Hobbitmax, hobnob, HoidC, Holinka4ever, holyssss, HoofedEar, Hoolny, hord-brayden, Hoshizora, 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, liltenhead, linkbro1, linkuyx, Litraxx, little-meow-meow, LittleBuilderJane, LittleNorthStar, LittleNyanCat, lizelive, ljm862, lmsnoise, localcc, lokachop, lolman360, Lomcastar, 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, 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, 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, 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, SignalWalker, siigiil, silicon14wastaken, Simyon264, sirdragooon, Sirionaut, 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, 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, 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, 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, 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, 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, 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, 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, SignalWalker, siigiil, silicon14wastaken, Simyon264, sirdragooon, Sirionaut, 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 From cc4cab5677316487319a5b89e6d111a116175a20 Mon Sep 17 00:00:00 2001 From: Leon Friedrich <60421075+ElectroJr@users.noreply.github.com> Date: Sun, 21 Sep 2025 14:52:23 +1200 Subject: [PATCH 122/143] Fix explosion grid alignment for static grids (#40193) --- .../Explosion/EntitySystems/ExplosionSystem.TileFill.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Content.Server/Explosion/EntitySystems/ExplosionSystem.TileFill.cs b/Content.Server/Explosion/EntitySystems/ExplosionSystem.TileFill.cs index 61e0ff50b7..cee694886b 100644 --- a/Content.Server/Explosion/EntitySystems/ExplosionSystem.TileFill.cs +++ b/Content.Server/Explosion/EntitySystems/ExplosionSystem.TileFill.cs @@ -275,7 +275,7 @@ public sealed partial class ExplosionSystem radius = Math.Min(radius, MaxIterations / 4); EntityUid? referenceGrid = null; - float mass = 0; + var mass = float.MinValue; // First attempt to find a grid that is relatively close to the explosion's center. Instead of looking in a // diameter x diameter sized box, use a smaller box with radius sized sides: @@ -285,7 +285,7 @@ public sealed partial class ExplosionSystem _mapManager.FindGridsIntersecting(epicenter.MapId, box, ref _grids); foreach (var grid in _grids) { - if (TryComp(grid.Owner, out PhysicsComponent? physics) && physics.Mass > mass) + if (TryComp(grid.Owner, out PhysicsComponent? physics) && physics.FixturesMass > mass) { mass = physics.Mass; referenceGrid = grid.Owner; @@ -315,7 +315,7 @@ public sealed partial class ExplosionSystem { if (TryComp(grid.Owner, out PhysicsComponent? physics) && physics.Mass > mass) { - mass = physics.Mass; + mass = physics.FixturesMass; referenceGrid = grid.Owner; } } From 8c16b4580b7a48aa3f9bc581a4d1044ba427044d Mon Sep 17 00:00:00 2001 From: Pieter-Jan Briers Date: Sun, 21 Sep 2025 07:16:17 +0200 Subject: [PATCH 123/143] Fix render target caching in overlays (#40181) Many newer overlays use IRenderTextures that are sized to the rendered viewport. This was completely broken, because a single viewport can be rendered on multiple viewports in a single frame. The end result of this was that in the better case, constant render targets were allocated and freed, which is extremely inefficient. In the worse case, many of these overlays completely failed to Dispose() their render targets, leading to *extremely* swift VRAM OOMs. This fixes all the overlays to properly cache resources per viewport. This uses new engine functionality, so it requires engine master. This is still a pretty lousy way to do GPU resource management but, well, anything better needs a render graph, so... --- .../Graphics/OverlayResourceCache.cs | 90 +++++++++++++++++++ .../Light/AfterLightTargetOverlay.cs | 5 +- .../Light/AmbientOcclusionOverlay.cs | 62 ++++++++----- .../Light/BeforeLightTargetOverlay.cs | 37 ++++++-- Content.Client/Light/LightBlurOverlay.cs | 33 +++++-- Content.Client/Light/RoofOverlay.cs | 3 +- Content.Client/Light/SunShadowOverlay.cs | 41 ++++++--- Content.Client/Light/TileEmissionOverlay.cs | 2 +- .../StencilOverlay.RestrictedRange.cs | 10 ++- .../Overlays/StencilOverlay.Weather.cs | 11 ++- Content.Client/Overlays/StencilOverlay.cs | 32 +++++-- .../Silicons/StationAi/StationAiOverlay.cs | 47 +++++++--- 12 files changed, 303 insertions(+), 70 deletions(-) create mode 100644 Content.Client/Graphics/OverlayResourceCache.cs diff --git a/Content.Client/Graphics/OverlayResourceCache.cs b/Content.Client/Graphics/OverlayResourceCache.cs new file mode 100644 index 0000000000..ef7ebfd2b7 --- /dev/null +++ b/Content.Client/Graphics/OverlayResourceCache.cs @@ -0,0 +1,90 @@ +using Robust.Client.Graphics; + +namespace Content.Client.Graphics; + +/// +/// A cache for s to store per-viewport render resources, such as render targets. +/// +/// The type of data stored in the cache. +public sealed class OverlayResourceCache : IDisposable where T : class, IDisposable +{ + private readonly Dictionary _cache = new(); + + /// + /// Get the data for a specific viewport, creating a new entry if necessary. + /// + /// + /// The cached data may be cleared at any time if gets invoked. + /// + /// The viewport for which to retrieve cached data. + /// A delegate used to create the cached data, if necessary. + public T GetForViewport(IClydeViewport viewport, Func factory) + { + return GetForViewport(viewport, out _, factory); + } + + /// + /// Get the data for a specific viewport, creating a new entry if necessary. + /// + /// + /// The cached data may be cleared at any time if gets invoked. + /// + /// The viewport for which to retrieve cached data. + /// True if the data was pulled from cache, false if it was created anew. + /// A delegate used to create the cached data, if necessary. + public T GetForViewport(IClydeViewport viewport, out bool wasCached, Func factory) + { + if (_cache.TryGetValue(viewport.Id, out var entry)) + { + wasCached = true; + return entry.Data; + } + + wasCached = false; + + entry = new CacheEntry + { + Data = factory(viewport), + Viewport = new WeakReference(viewport), + }; + _cache.Add(viewport.Id, entry); + + viewport.ClearCachedResources += ViewportOnClearCachedResources; + + return entry.Data; + } + + private void ViewportOnClearCachedResources(ClearCachedViewportResourcesEvent ev) + { + if (!_cache.Remove(ev.ViewportId, out var entry)) + { + // I think this could theoretically happen if you manually dispose the cache *after* a leaked viewport got + // GC'd, but before its ClearCachedResources got invoked. + return; + } + + entry.Data.Dispose(); + + if (ev.Viewport != null) + ev.Viewport.ClearCachedResources -= ViewportOnClearCachedResources; + } + + public void Dispose() + { + foreach (var entry in _cache) + { + if (entry.Value.Viewport.TryGetTarget(out var viewport)) + viewport.ClearCachedResources -= ViewportOnClearCachedResources; + + entry.Value.Data.Dispose(); + } + + _cache.Clear(); + } + + private struct CacheEntry + { + public T Data; + public WeakReference Viewport; + } +} diff --git a/Content.Client/Light/AfterLightTargetOverlay.cs b/Content.Client/Light/AfterLightTargetOverlay.cs index 7856fd4ded..8f19ce922d 100644 --- a/Content.Client/Light/AfterLightTargetOverlay.cs +++ b/Content.Client/Light/AfterLightTargetOverlay.cs @@ -30,6 +30,7 @@ public sealed class AfterLightTargetOverlay : Overlay return; var lightOverlay = _overlay.GetOverlay(); + var lightRes = lightOverlay.GetCachedForViewport(args.Viewport); var bounds = args.WorldBounds; // at 1-1 render scale it's mostly fine but at 4x4 it's way too fkn big @@ -38,7 +39,7 @@ public sealed class AfterLightTargetOverlay : Overlay var localMatrix = viewport.LightRenderTarget.GetWorldToLocalMatrix(viewport.Eye, newScale); - var diff = (lightOverlay.EnlargedLightTarget.Size - viewport.LightRenderTarget.Size); + var diff = (lightRes.EnlargedLightTarget.Size - viewport.LightRenderTarget.Size); var halfDiff = diff / 2; // Pixels -> Metres -> Half distance. @@ -53,7 +54,7 @@ public sealed class AfterLightTargetOverlay : Overlay viewport.LightRenderTarget.Size.Y + halfDiff.Y); worldHandle.SetTransform(localMatrix); - worldHandle.DrawTextureRectRegion(lightOverlay.EnlargedLightTarget.Texture, bounds, subRegion: subRegion); + worldHandle.DrawTextureRectRegion(lightRes.EnlargedLightTarget.Texture, bounds, subRegion: subRegion); }, Color.Transparent); } } diff --git a/Content.Client/Light/AmbientOcclusionOverlay.cs b/Content.Client/Light/AmbientOcclusionOverlay.cs index 4caf654494..aa8c3b52a1 100644 --- a/Content.Client/Light/AmbientOcclusionOverlay.cs +++ b/Content.Client/Light/AmbientOcclusionOverlay.cs @@ -1,4 +1,5 @@ using System.Numerics; +using Content.Client.Graphics; using Content.Shared.CCVar; using Content.Shared.Maps; using Robust.Client.Graphics; @@ -27,11 +28,7 @@ public sealed class AmbientOcclusionOverlay : Overlay public override OverlaySpace Space => OverlaySpace.WorldSpaceBelowEntities; - private IRenderTexture? _aoTarget; - private IRenderTexture? _aoBlurBuffer; - - // Couldn't figure out a way to avoid this so if you can then please do. - private IRenderTexture? _aoStencilTarget; + private readonly OverlayResourceCache _resources = new (); public AmbientOcclusionOverlay() { @@ -69,30 +66,32 @@ public sealed class AmbientOcclusionOverlay : Overlay var turfSystem = _entManager.System(); var invMatrix = args.Viewport.GetWorldToLocalMatrix(); - if (_aoTarget?.Texture.Size != target.Size) + var res = _resources.GetForViewport(args.Viewport, static _ => new CachedResources()); + + if (res.AOTarget?.Texture.Size != target.Size) { - _aoTarget?.Dispose(); - _aoTarget = _clyde.CreateRenderTarget(target.Size, new RenderTargetFormatParameters(RenderTargetColorFormat.Rgba8Srgb), name: "ambient-occlusion-target"); + res.AOTarget?.Dispose(); + res.AOTarget = _clyde.CreateRenderTarget(target.Size, new RenderTargetFormatParameters(RenderTargetColorFormat.Rgba8Srgb), name: "ambient-occlusion-target"); } - if (_aoBlurBuffer?.Texture.Size != target.Size) + if (res.AOBlurBuffer?.Texture.Size != target.Size) { - _aoBlurBuffer?.Dispose(); - _aoBlurBuffer = _clyde.CreateRenderTarget(target.Size, new RenderTargetFormatParameters(RenderTargetColorFormat.Rgba8Srgb), name: "ambient-occlusion-blur-target"); + res.AOBlurBuffer?.Dispose(); + res.AOBlurBuffer = _clyde.CreateRenderTarget(target.Size, new RenderTargetFormatParameters(RenderTargetColorFormat.Rgba8Srgb), name: "ambient-occlusion-blur-target"); } - if (_aoStencilTarget?.Texture.Size != target.Size) + if (res.AOStencilTarget?.Texture.Size != target.Size) { - _aoStencilTarget?.Dispose(); - _aoStencilTarget = _clyde.CreateRenderTarget(target.Size, new RenderTargetFormatParameters(RenderTargetColorFormat.Rgba8Srgb), name: "ambient-occlusion-stencil-target"); + res.AOStencilTarget?.Dispose(); + res.AOStencilTarget = _clyde.CreateRenderTarget(target.Size, new RenderTargetFormatParameters(RenderTargetColorFormat.Rgba8Srgb), name: "ambient-occlusion-stencil-target"); } // Draw the texture data to the texture. - args.WorldHandle.RenderInRenderTarget(_aoTarget, + args.WorldHandle.RenderInRenderTarget(res.AOTarget, () => { worldHandle.UseShader(_proto.Index(UnshadedShader).Instance()); - var invMatrix = _aoTarget.GetWorldToLocalMatrix(viewport.Eye!, scale); + var invMatrix = res.AOTarget.GetWorldToLocalMatrix(viewport.Eye!, scale); foreach (var entry in query.QueryAabb(mapId, worldBounds)) { @@ -106,11 +105,11 @@ public sealed class AmbientOcclusionOverlay : Overlay } }, Color.Transparent); - _clyde.BlurRenderTarget(viewport, _aoTarget, _aoBlurBuffer, viewport.Eye!, 14f); + _clyde.BlurRenderTarget(viewport, res.AOTarget, res.AOBlurBuffer, viewport.Eye!, 14f); // Need to do stencilling after blur as it will nuke it. // Draw stencil for the grid so we don't draw in space. - args.WorldHandle.RenderInRenderTarget(_aoStencilTarget, + args.WorldHandle.RenderInRenderTarget(res.AOStencilTarget, () => { // Don't want lighting affecting it. @@ -136,13 +135,36 @@ public sealed class AmbientOcclusionOverlay : Overlay // Draw the stencil texture to depth buffer. worldHandle.UseShader(_proto.Index(StencilMaskShader).Instance()); - worldHandle.DrawTextureRect(_aoStencilTarget!.Texture, worldBounds); + worldHandle.DrawTextureRect(res.AOStencilTarget!.Texture, worldBounds); // Draw the Blurred AO texture finally. worldHandle.UseShader(_proto.Index(StencilEqualDrawShader).Instance()); - worldHandle.DrawTextureRect(_aoTarget!.Texture, worldBounds, color); + worldHandle.DrawTextureRect(res.AOTarget!.Texture, worldBounds, color); args.WorldHandle.SetTransform(Matrix3x2.Identity); args.WorldHandle.UseShader(null); } + + protected override void DisposeBehavior() + { + _resources.Dispose(); + + base.DisposeBehavior(); + } + + private sealed class CachedResources : IDisposable + { + public IRenderTexture? AOTarget; + public IRenderTexture? AOBlurBuffer; + + // Couldn't figure out a way to avoid this so if you can then please do. + public IRenderTexture? AOStencilTarget; + + public void Dispose() + { + AOTarget?.Dispose(); + AOBlurBuffer?.Dispose(); + AOStencilTarget?.Dispose(); + } + } } diff --git a/Content.Client/Light/BeforeLightTargetOverlay.cs b/Content.Client/Light/BeforeLightTargetOverlay.cs index 8f1bd0e527..6afaebc146 100644 --- a/Content.Client/Light/BeforeLightTargetOverlay.cs +++ b/Content.Client/Light/BeforeLightTargetOverlay.cs @@ -1,4 +1,4 @@ -using System.Numerics; +using Content.Client.Graphics; using Robust.Client.Graphics; using Robust.Shared.Enums; @@ -13,7 +13,8 @@ public sealed class BeforeLightTargetOverlay : Overlay [Dependency] private readonly IClyde _clyde = default!; - public IRenderTexture EnlargedLightTarget = default!; + private readonly OverlayResourceCache _resources = new(); + public Box2Rotated EnlargedBounds; /// @@ -36,16 +37,42 @@ public sealed class BeforeLightTargetOverlay : Overlay var size = args.Viewport.LightRenderTarget.Size + (int) (_skirting * EyeManager.PixelsPerMeter); EnlargedBounds = args.WorldBounds.Enlarged(_skirting / 2f); + var res = _resources.GetForViewport(args.Viewport, static _ => new CachedResources()); + // This just exists to copy the lightrendertarget and write back to it. - if (EnlargedLightTarget?.Size != size) + if (res.EnlargedLightTarget?.Size != size) { - EnlargedLightTarget = _clyde + res.EnlargedLightTarget = _clyde .CreateRenderTarget(size, new RenderTargetFormatParameters(RenderTargetColorFormat.Rgba8Srgb), name: "enlarged-light-copy"); } - args.WorldHandle.RenderInRenderTarget(EnlargedLightTarget, + args.WorldHandle.RenderInRenderTarget(res.EnlargedLightTarget, () => { }, _clyde.GetClearColor(args.MapUid)); } + + internal CachedResources GetCachedForViewport(IClydeViewport viewport) + { + return _resources.GetForViewport(viewport, + static _ => throw new InvalidOperationException( + "Expected BeforeLightTargetOverlay to have created its resources")); + } + + protected override void DisposeBehavior() + { + _resources.Dispose(); + + base.DisposeBehavior(); + } + + internal sealed class CachedResources : IDisposable + { + public IRenderTexture EnlargedLightTarget = default!; + + public void Dispose() + { + EnlargedLightTarget?.Dispose(); + } + } } diff --git a/Content.Client/Light/LightBlurOverlay.cs b/Content.Client/Light/LightBlurOverlay.cs index 4ce80946aa..eab4a95c07 100644 --- a/Content.Client/Light/LightBlurOverlay.cs +++ b/Content.Client/Light/LightBlurOverlay.cs @@ -1,3 +1,4 @@ +using Content.Client.Graphics; using Robust.Client.Graphics; using Robust.Shared.Enums; @@ -15,7 +16,7 @@ public sealed class LightBlurOverlay : Overlay public const int ContentZIndex = TileEmissionOverlay.ContentZIndex + 1; - private IRenderTarget? _blurTarget; + private readonly OverlayResourceCache _resources = new(); public LightBlurOverlay() { @@ -29,16 +30,36 @@ public sealed class LightBlurOverlay : Overlay return; var beforeOverlay = _overlay.GetOverlay(); - var size = beforeOverlay.EnlargedLightTarget.Size; + var beforeLightRes = beforeOverlay.GetCachedForViewport(args.Viewport); + var res = _resources.GetForViewport(args.Viewport, static _ => new CachedResources()); - if (_blurTarget?.Size != size) + var size = beforeLightRes.EnlargedLightTarget.Size; + + if (res.BlurTarget?.Size != size) { - _blurTarget = _clyde + res.BlurTarget = _clyde .CreateRenderTarget(size, new RenderTargetFormatParameters(RenderTargetColorFormat.Rgba8Srgb), name: "enlarged-light-blur"); } - var target = beforeOverlay.EnlargedLightTarget; + var target = beforeLightRes.EnlargedLightTarget; // Yeah that's all this does keep walkin. - _clyde.BlurRenderTarget(args.Viewport, target, _blurTarget, args.Viewport.Eye, 14f * 5f); + _clyde.BlurRenderTarget(args.Viewport, target, res.BlurTarget, args.Viewport.Eye, 14f * 5f); + } + + protected override void DisposeBehavior() + { + _resources.Dispose(); + + base.DisposeBehavior(); + } + + private sealed class CachedResources : IDisposable + { + public IRenderTarget? BlurTarget; + + public void Dispose() + { + BlurTarget?.Dispose(); + } } } diff --git a/Content.Client/Light/RoofOverlay.cs b/Content.Client/Light/RoofOverlay.cs index 9be4bfe4c4..01e9bf0961 100644 --- a/Content.Client/Light/RoofOverlay.cs +++ b/Content.Client/Light/RoofOverlay.cs @@ -51,8 +51,9 @@ public sealed class RoofOverlay : Overlay var worldHandle = args.WorldHandle; var lightoverlay = _overlay.GetOverlay(); + var lightRes = lightoverlay.GetCachedForViewport(args.Viewport); var bounds = lightoverlay.EnlargedBounds; - var target = lightoverlay.EnlargedLightTarget; + var target = lightRes.EnlargedLightTarget; _grids.Clear(); _mapManager.FindGridsIntersecting(args.MapId, bounds, ref _grids, approx: true, includeMap: true); diff --git a/Content.Client/Light/SunShadowOverlay.cs b/Content.Client/Light/SunShadowOverlay.cs index f30f4c0409..59ac0a5efb 100644 --- a/Content.Client/Light/SunShadowOverlay.cs +++ b/Content.Client/Light/SunShadowOverlay.cs @@ -1,4 +1,5 @@ using System.Numerics; +using Content.Client.Graphics; using Content.Shared.Light.Components; using Robust.Client.Graphics; using Robust.Shared.Enums; @@ -24,8 +25,7 @@ public sealed class SunShadowOverlay : Overlay private readonly HashSet> _shadows = new(); - private IRenderTexture? _blurTarget; - private IRenderTexture? _target; + private readonly OverlayResourceCache _resources = new(); public SunShadowOverlay() { @@ -55,16 +55,18 @@ public sealed class SunShadowOverlay : Overlay var worldBounds = args.WorldBounds; var targetSize = viewport.LightRenderTarget.Size; - if (_target?.Size != targetSize) + var res = _resources.GetForViewport(args.Viewport, static _ => new CachedResources()); + + if (res.Target?.Size != targetSize) { - _target = _clyde + res.Target = _clyde .CreateRenderTarget(targetSize, new RenderTargetFormatParameters(RenderTargetColorFormat.Rgba8Srgb), name: "sun-shadow-target"); - if (_blurTarget?.Size != targetSize) + if (res.BlurTarget?.Size != targetSize) { - _blurTarget = _clyde + res.BlurTarget = _clyde .CreateRenderTarget(targetSize, new RenderTargetFormatParameters(RenderTargetColorFormat.Rgba8Srgb), name: "sun-shadow-blur"); } } @@ -93,11 +95,11 @@ public sealed class SunShadowOverlay : Overlay _shadows.Clear(); // Draw shadow polys to stencil - args.WorldHandle.RenderInRenderTarget(_target, + args.WorldHandle.RenderInRenderTarget(res.Target, () => { var invMatrix = - _target.GetWorldToLocalMatrix(eye, scale); + res.Target.GetWorldToLocalMatrix(eye, scale); var indices = new Vector2[PhysicsConstants.MaxPolygonVertices * 2]; // Go through shadows in range. @@ -142,7 +144,7 @@ public sealed class SunShadowOverlay : Overlay Color.Transparent); // Slightly blur it just to avoid aliasing issues on the later viewport-wide blur. - _clyde.BlurRenderTarget(viewport, _target, _blurTarget!, eye, 1f); + _clyde.BlurRenderTarget(viewport, res.Target, res.BlurTarget!, eye, 1f); // Draw stencil (see roofoverlay). args.WorldHandle.RenderInRenderTarget(viewport.LightRenderTarget, @@ -155,8 +157,27 @@ public sealed class SunShadowOverlay : Overlay var maskShader = _protoManager.Index(MixShader).Instance(); worldHandle.UseShader(maskShader); - worldHandle.DrawTextureRect(_target.Texture, worldBounds, Color.Black.WithAlpha(alpha)); + worldHandle.DrawTextureRect(res.Target.Texture, worldBounds, Color.Black.WithAlpha(alpha)); }, null); } } + + protected override void DisposeBehavior() + { + _resources.Dispose(); + + base.DisposeBehavior(); + } + + private sealed class CachedResources : IDisposable + { + public IRenderTexture? BlurTarget; + public IRenderTexture? Target; + + public void Dispose() + { + BlurTarget?.Dispose(); + Target?.Dispose(); + } + } } diff --git a/Content.Client/Light/TileEmissionOverlay.cs b/Content.Client/Light/TileEmissionOverlay.cs index 2f4a1390ff..2acb0ee609 100644 --- a/Content.Client/Light/TileEmissionOverlay.cs +++ b/Content.Client/Light/TileEmissionOverlay.cs @@ -47,7 +47,7 @@ public sealed class TileEmissionOverlay : Overlay var worldHandle = args.WorldHandle; var lightoverlay = _overlay.GetOverlay(); var bounds = lightoverlay.EnlargedBounds; - var target = lightoverlay.EnlargedLightTarget; + var target = lightoverlay.GetCachedForViewport(args.Viewport).EnlargedLightTarget; var viewport = args.Viewport; _grids.Clear(); _mapManager.FindGridsIntersecting(mapId, bounds, ref _grids, approx: true); diff --git a/Content.Client/Overlays/StencilOverlay.RestrictedRange.cs b/Content.Client/Overlays/StencilOverlay.RestrictedRange.cs index a5efacc16c..7218e16da1 100644 --- a/Content.Client/Overlays/StencilOverlay.RestrictedRange.cs +++ b/Content.Client/Overlays/StencilOverlay.RestrictedRange.cs @@ -7,7 +7,11 @@ namespace Content.Client.Overlays; public sealed partial class StencilOverlay { - private void DrawRestrictedRange(in OverlayDrawArgs args, RestrictedRangeComponent rangeComp, Matrix3x2 invMatrix) + private void DrawRestrictedRange( + in OverlayDrawArgs args, + CachedResources res, + RestrictedRangeComponent rangeComp, + Matrix3x2 invMatrix) { var worldHandle = args.WorldHandle; var renderScale = args.Viewport.RenderScale.X; @@ -38,7 +42,7 @@ public sealed partial class StencilOverlay // Cut out the irrelevant bits via stencil // This is why we don't just use parallax; we might want specific tiles to get drawn over // particularly for planet maps or stations. - worldHandle.RenderInRenderTarget(_blep!, () => + worldHandle.RenderInRenderTarget(res.Blep!, () => { worldHandle.UseShader(_shader); worldHandle.DrawRect(localAABB, Color.White); @@ -46,7 +50,7 @@ public sealed partial class StencilOverlay worldHandle.SetTransform(Matrix3x2.Identity); worldHandle.UseShader(_protoManager.Index(StencilMask).Instance()); - worldHandle.DrawTextureRect(_blep!.Texture, worldBounds); + worldHandle.DrawTextureRect(res.Blep!.Texture, worldBounds); var curTime = _timing.RealTime; var sprite = _sprite.GetFrame(new SpriteSpecifier.Texture(new ResPath("/Textures/Parallaxes/noise.png")), curTime); diff --git a/Content.Client/Overlays/StencilOverlay.Weather.cs b/Content.Client/Overlays/StencilOverlay.Weather.cs index 509b946ad4..66a6a799a7 100644 --- a/Content.Client/Overlays/StencilOverlay.Weather.cs +++ b/Content.Client/Overlays/StencilOverlay.Weather.cs @@ -11,7 +11,12 @@ public sealed partial class StencilOverlay { private List> _grids = new(); - private void DrawWeather(in OverlayDrawArgs args, WeatherPrototype weatherProto, float alpha, Matrix3x2 invMatrix) + private void DrawWeather( + in OverlayDrawArgs args, + CachedResources res, + WeatherPrototype weatherProto, + float alpha, + Matrix3x2 invMatrix) { var worldHandle = args.WorldHandle; var mapId = args.MapId; @@ -22,7 +27,7 @@ public sealed partial class StencilOverlay // Cut out the irrelevant bits via stencil // This is why we don't just use parallax; we might want specific tiles to get drawn over // particularly for planet maps or stations. - worldHandle.RenderInRenderTarget(_blep!, () => + worldHandle.RenderInRenderTarget(res.Blep!, () => { var xformQuery = _entManager.GetEntityQuery(); _grids.Clear(); @@ -56,7 +61,7 @@ public sealed partial class StencilOverlay worldHandle.SetTransform(Matrix3x2.Identity); worldHandle.UseShader(_protoManager.Index(StencilMask).Instance()); - worldHandle.DrawTextureRect(_blep!.Texture, worldBounds); + worldHandle.DrawTextureRect(res.Blep!.Texture, worldBounds); var curTime = _timing.RealTime; var sprite = _sprite.GetFrame(weatherProto.Sprite, curTime); diff --git a/Content.Client/Overlays/StencilOverlay.cs b/Content.Client/Overlays/StencilOverlay.cs index 55cb1811a5..276181468b 100644 --- a/Content.Client/Overlays/StencilOverlay.cs +++ b/Content.Client/Overlays/StencilOverlay.cs @@ -1,4 +1,5 @@ using System.Numerics; +using Content.Client.Graphics; using Content.Client.Parallax; using Content.Client.Weather; using Content.Shared.Salvage; @@ -34,7 +35,7 @@ public sealed partial class StencilOverlay : Overlay public override OverlaySpace Space => OverlaySpace.WorldSpaceBelowFOV; - private IRenderTexture? _blep; + private readonly OverlayResourceCache _resources = new(); private readonly ShaderInstance _shader; @@ -55,10 +56,12 @@ public sealed partial class StencilOverlay : Overlay var mapUid = _map.GetMapOrInvalid(args.MapId); var invMatrix = args.Viewport.GetWorldToLocalMatrix(); - if (_blep?.Texture.Size != args.Viewport.Size) + var res = _resources.GetForViewport(args.Viewport, static _ => new CachedResources()); + + if (res.Blep?.Texture.Size != args.Viewport.Size) { - _blep?.Dispose(); - _blep = _clyde.CreateRenderTarget(args.Viewport.Size, new RenderTargetFormatParameters(RenderTargetColorFormat.Rgba8Srgb), name: "weather-stencil"); + res.Blep?.Dispose(); + res.Blep = _clyde.CreateRenderTarget(args.Viewport.Size, new RenderTargetFormatParameters(RenderTargetColorFormat.Rgba8Srgb), name: "weather-stencil"); } if (_entManager.TryGetComponent(mapUid, out var comp)) @@ -69,16 +72,33 @@ public sealed partial class StencilOverlay : Overlay continue; var alpha = _weather.GetPercent(weather, mapUid); - DrawWeather(args, weatherProto, alpha, invMatrix); + DrawWeather(args, res, weatherProto, alpha, invMatrix); } } if (_entManager.TryGetComponent(mapUid, out var restrictedRangeComponent)) { - DrawRestrictedRange(args, restrictedRangeComponent, invMatrix); + DrawRestrictedRange(args, res, restrictedRangeComponent, invMatrix); } args.WorldHandle.UseShader(null); args.WorldHandle.SetTransform(Matrix3x2.Identity); } + + protected override void DisposeBehavior() + { + _resources.Dispose(); + + base.DisposeBehavior(); + } + + private sealed class CachedResources : IDisposable + { + public IRenderTexture? Blep; + + public void Dispose() + { + Blep?.Dispose(); + } + } } diff --git a/Content.Client/Silicons/StationAi/StationAiOverlay.cs b/Content.Client/Silicons/StationAi/StationAiOverlay.cs index 5c84ce0c93..7657744702 100644 --- a/Content.Client/Silicons/StationAi/StationAiOverlay.cs +++ b/Content.Client/Silicons/StationAi/StationAiOverlay.cs @@ -1,4 +1,5 @@ using System.Numerics; +using Content.Client.Graphics; using Content.Shared.Silicons.StationAi; using Robust.Client.Graphics; using Robust.Client.Player; @@ -26,8 +27,7 @@ public sealed class StationAiOverlay : Overlay private readonly HashSet _visibleTiles = new(); - private IRenderTexture? _staticTexture; - private IRenderTexture? _stencilTexture; + private readonly OverlayResourceCache _resources = new(); private float _updateRate = 1f / 30f; private float _accumulator; @@ -39,12 +39,14 @@ public sealed class StationAiOverlay : Overlay protected override void Draw(in OverlayDrawArgs args) { - if (_stencilTexture?.Texture.Size != args.Viewport.Size) + var res = _resources.GetForViewport(args.Viewport, static _ => new CachedResources()); + + if (res.StencilTexture?.Texture.Size != args.Viewport.Size) { - _staticTexture?.Dispose(); - _stencilTexture?.Dispose(); - _stencilTexture = _clyde.CreateRenderTarget(args.Viewport.Size, new RenderTargetFormatParameters(RenderTargetColorFormat.Rgba8Srgb), name: "station-ai-stencil"); - _staticTexture = _clyde.CreateRenderTarget(args.Viewport.Size, + res.StaticTexture?.Dispose(); + res.StencilTexture?.Dispose(); + res.StencilTexture = _clyde.CreateRenderTarget(args.Viewport.Size, new RenderTargetFormatParameters(RenderTargetColorFormat.Rgba8Srgb), name: "station-ai-stencil"); + res.StaticTexture = _clyde.CreateRenderTarget(args.Viewport.Size, new RenderTargetFormatParameters(RenderTargetColorFormat.Rgba8Srgb), name: "station-ai-static"); } @@ -78,7 +80,7 @@ public sealed class StationAiOverlay : Overlay var matty = Matrix3x2.Multiply(gridMatrix, invMatrix); // Draw visible tiles to stencil - worldHandle.RenderInRenderTarget(_stencilTexture!, () => + worldHandle.RenderInRenderTarget(res.StencilTexture!, () => { worldHandle.SetTransform(matty); @@ -91,7 +93,7 @@ public sealed class StationAiOverlay : Overlay Color.Transparent); // Once this is gucci optimise rendering. - worldHandle.RenderInRenderTarget(_staticTexture!, + worldHandle.RenderInRenderTarget(res.StaticTexture!, () => { worldHandle.SetTransform(invMatrix); @@ -104,12 +106,12 @@ public sealed class StationAiOverlay : Overlay // Not on a grid else { - worldHandle.RenderInRenderTarget(_stencilTexture!, () => + worldHandle.RenderInRenderTarget(res.StencilTexture!, () => { }, Color.Transparent); - worldHandle.RenderInRenderTarget(_staticTexture!, + worldHandle.RenderInRenderTarget(res.StaticTexture!, () => { worldHandle.SetTransform(Matrix3x2.Identity); @@ -119,14 +121,33 @@ public sealed class StationAiOverlay : Overlay // Use the lighting as a mask worldHandle.UseShader(_proto.Index(StencilMaskShader).Instance()); - worldHandle.DrawTextureRect(_stencilTexture!.Texture, worldBounds); + worldHandle.DrawTextureRect(res.StencilTexture!.Texture, worldBounds); // Draw the static worldHandle.UseShader(_proto.Index(StencilDrawShader).Instance()); - worldHandle.DrawTextureRect(_staticTexture!.Texture, worldBounds); + worldHandle.DrawTextureRect(res.StaticTexture!.Texture, worldBounds); worldHandle.SetTransform(Matrix3x2.Identity); worldHandle.UseShader(null); } + + protected override void DisposeBehavior() + { + _resources.Dispose(); + + base.DisposeBehavior(); + } + + private sealed class CachedResources : IDisposable + { + public IRenderTexture? StaticTexture; + public IRenderTexture? StencilTexture; + + public void Dispose() + { + StaticTexture?.Dispose(); + StencilTexture?.Dispose(); + } + } } From f9243dfdd7ec4e26877343ce6d95b2104cc11078 Mon Sep 17 00:00:00 2001 From: PJBot Date: Sun, 21 Sep 2025 05:17:27 +0000 Subject: [PATCH 124/143] Automatic changelog update --- Resources/Changelog/Changelog.yml | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index f76f4f6649..4a63431eac 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,12 +1,4 @@ Entries: -- author: ToastEnjoyer - changes: - - message: Removed the high value target status on certain computer boards, replacing - them with command restricted status. - type: Tweak - id: 8480 - time: '2025-05-14T17:47:10.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/37452 - author: LevitatingTree changes: - message: Changed the names of the neurodivergent pins to more accurately reflect @@ -3953,3 +3945,11 @@ id: 8990 time: '2025-09-20T19:00:22.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/40334 +- author: PJB3005 + changes: + - message: Fixed stuff like camera views causing your computer to melt, explode, + and then collapse into a black hole. + type: Fix + id: 8991 + time: '2025-09-21T05:16:17.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/40181 From b6797afe52fbeac57e8d694061026887ade99107 Mon Sep 17 00:00:00 2001 From: Leon Friedrich <60421075+ElectroJr@users.noreply.github.com> Date: Sun, 21 Sep 2025 17:17:43 +1200 Subject: [PATCH 125/143] Move TestPair & PoolManager to engine (#36797) * Move TestPair & PoolManager to engine * Add to global usings * A * Move ITestContextLike to engine * Readd cvars partial class * cleanup diff --- Content.Benchmarks/GlobalUsings.cs | 3 + .../ExternalTestContext.cs | 12 - Content.IntegrationTests/GlobalUsings.cs | 1 + Content.IntegrationTests/ITestContextLike.cs | 13 - .../NUnitTestContextWrap.cs | 12 - Content.IntegrationTests/Pair/TestMapData.cs | 23 - .../Pair/TestPair.Cvars.cs | 69 --- .../Pair/TestPair.Helpers.cs | 157 +------ .../Pair/TestPair.Prototypes.cs | 64 --- .../Pair/TestPair.Recycle.cs | 179 +------- .../Pair/TestPair.Timing.cs | 77 ---- Content.IntegrationTests/Pair/TestPair.cs | 214 ++++----- Content.IntegrationTests/PoolManager.Cvars.cs | 47 +- .../PoolManager.Prototypes.cs | 35 -- Content.IntegrationTests/PoolManager.cs | 417 ++---------------- Content.IntegrationTests/PoolSettings.cs | 115 +---- .../PoolTestLogHandler.cs | 79 ---- .../TestPrototypesAttribute.cs | 12 - Content.MapRenderer/Painters/MapPainter.cs | 1 + Content.MapRenderer/Program.cs | 1 + 20 files changed, 171 insertions(+), 1360 deletions(-) create mode 100644 Content.Benchmarks/GlobalUsings.cs delete mode 100644 Content.IntegrationTests/ExternalTestContext.cs delete mode 100644 Content.IntegrationTests/ITestContextLike.cs delete mode 100644 Content.IntegrationTests/NUnitTestContextWrap.cs delete mode 100644 Content.IntegrationTests/Pair/TestMapData.cs delete mode 100644 Content.IntegrationTests/Pair/TestPair.Cvars.cs delete mode 100644 Content.IntegrationTests/Pair/TestPair.Prototypes.cs delete mode 100644 Content.IntegrationTests/Pair/TestPair.Timing.cs delete mode 100644 Content.IntegrationTests/PoolManager.Prototypes.cs delete mode 100644 Content.IntegrationTests/PoolTestLogHandler.cs delete mode 100644 Content.IntegrationTests/TestPrototypesAttribute.cs diff --git a/Content.Benchmarks/GlobalUsings.cs b/Content.Benchmarks/GlobalUsings.cs new file mode 100644 index 0000000000..120b7f39b5 --- /dev/null +++ b/Content.Benchmarks/GlobalUsings.cs @@ -0,0 +1,3 @@ +// Global usings for Content.Benchmarks + +global using Robust.UnitTesting.Pool; diff --git a/Content.IntegrationTests/ExternalTestContext.cs b/Content.IntegrationTests/ExternalTestContext.cs deleted file mode 100644 index e23b2ee636..0000000000 --- a/Content.IntegrationTests/ExternalTestContext.cs +++ /dev/null @@ -1,12 +0,0 @@ -using System.IO; - -namespace Content.IntegrationTests; - -/// -/// Generic implementation of for usage outside of actual tests. -/// -public sealed class ExternalTestContext(string name, TextWriter writer) : ITestContextLike -{ - public string FullName => name; - public TextWriter Out => writer; -} diff --git a/Content.IntegrationTests/GlobalUsings.cs b/Content.IntegrationTests/GlobalUsings.cs index 8422c5c3cd..1139d45dba 100644 --- a/Content.IntegrationTests/GlobalUsings.cs +++ b/Content.IntegrationTests/GlobalUsings.cs @@ -3,3 +3,4 @@ global using NUnit.Framework; global using System; global using System.Threading.Tasks; +global using Robust.UnitTesting.Pool; diff --git a/Content.IntegrationTests/ITestContextLike.cs b/Content.IntegrationTests/ITestContextLike.cs deleted file mode 100644 index 47b6e08529..0000000000 --- a/Content.IntegrationTests/ITestContextLike.cs +++ /dev/null @@ -1,13 +0,0 @@ -using System.IO; - -namespace Content.IntegrationTests; - -/// -/// Something that looks like a , for passing to integration tests. -/// -public interface ITestContextLike -{ - string FullName { get; } - TextWriter Out { get; } -} - diff --git a/Content.IntegrationTests/NUnitTestContextWrap.cs b/Content.IntegrationTests/NUnitTestContextWrap.cs deleted file mode 100644 index 849c1b0910..0000000000 --- a/Content.IntegrationTests/NUnitTestContextWrap.cs +++ /dev/null @@ -1,12 +0,0 @@ -using System.IO; - -namespace Content.IntegrationTests; - -/// -/// Canonical implementation of for usage in actual NUnit tests. -/// -public sealed class NUnitTestContextWrap(TestContext context, TextWriter writer) : ITestContextLike -{ - public string FullName => context.Test.FullName; - public TextWriter Out => writer; -} diff --git a/Content.IntegrationTests/Pair/TestMapData.cs b/Content.IntegrationTests/Pair/TestMapData.cs deleted file mode 100644 index 343641e161..0000000000 --- a/Content.IntegrationTests/Pair/TestMapData.cs +++ /dev/null @@ -1,23 +0,0 @@ -using Robust.Shared.GameObjects; -using Robust.Shared.Map; -using Robust.Shared.Map.Components; - -namespace Content.IntegrationTests.Pair; - -/// -/// Simple data class that stored information about a map being used by a test. -/// -public sealed class TestMapData -{ - public EntityUid MapUid { get; set; } - public Entity Grid; - public MapId MapId; - public EntityCoordinates GridCoords { get; set; } - public MapCoordinates MapCoords { get; set; } - public TileRef Tile { get; set; } - - // Client-side uids - public EntityUid CMapUid { get; set; } - public EntityUid CGridUid { get; set; } - public EntityCoordinates CGridCoords { get; set; } -} diff --git a/Content.IntegrationTests/Pair/TestPair.Cvars.cs b/Content.IntegrationTests/Pair/TestPair.Cvars.cs deleted file mode 100644 index 81df31fc9a..0000000000 --- a/Content.IntegrationTests/Pair/TestPair.Cvars.cs +++ /dev/null @@ -1,69 +0,0 @@ -#nullable enable -using System.Collections.Generic; -using Content.Shared.CCVar; -using Robust.Shared.Configuration; -using Robust.Shared.Utility; - -namespace Content.IntegrationTests.Pair; - -public sealed partial class TestPair -{ - private readonly Dictionary _modifiedClientCvars = new(); - private readonly Dictionary _modifiedServerCvars = new(); - - private void OnServerCvarChanged(CVarChangeInfo args) - { - _modifiedServerCvars.TryAdd(args.Name, args.OldValue); - } - - private void OnClientCvarChanged(CVarChangeInfo args) - { - _modifiedClientCvars.TryAdd(args.Name, args.OldValue); - } - - internal void ClearModifiedCvars() - { - _modifiedClientCvars.Clear(); - _modifiedServerCvars.Clear(); - } - - /// - /// Reverts any cvars that were modified during a test back to their original values. - /// - public async Task RevertModifiedCvars() - { - await Server.WaitPost(() => - { - foreach (var (name, value) in _modifiedServerCvars) - { - if (Server.CfgMan.GetCVar(name).Equals(value)) - continue; - Server.Log.Info($"Resetting cvar {name} to {value}"); - Server.CfgMan.SetCVar(name, value); - } - - // I just love order dependent cvars - if (_modifiedServerCvars.TryGetValue(CCVars.PanicBunkerEnabled.Name, out var panik)) - Server.CfgMan.SetCVar(CCVars.PanicBunkerEnabled.Name, panik); - - }); - - await Client.WaitPost(() => - { - foreach (var (name, value) in _modifiedClientCvars) - { - if (Client.CfgMan.GetCVar(name).Equals(value)) - continue; - - var flags = Client.CfgMan.GetCVarFlags(name); - if (flags.HasFlag(CVar.REPLICATED) && flags.HasFlag(CVar.SERVER)) - continue; - - Client.Log.Info($"Resetting cvar {name} to {value}"); - Client.CfgMan.SetCVar(name, value); - } - }); - - ClearModifiedCvars(); - } -} diff --git a/Content.IntegrationTests/Pair/TestPair.Helpers.cs b/Content.IntegrationTests/Pair/TestPair.Helpers.cs index 5e7ba0dcc8..1a3b38e829 100644 --- a/Content.IntegrationTests/Pair/TestPair.Helpers.cs +++ b/Content.IntegrationTests/Pair/TestPair.Helpers.cs @@ -1,172 +1,19 @@ #nullable enable using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; using System.Linq; using Content.Server.Preferences.Managers; using Content.Shared.Preferences; using Content.Shared.Roles; -using Robust.Shared.GameObjects; -using Robust.Shared.Map; using Robust.Shared.Network; using Robust.Shared.Prototypes; -using Robust.UnitTesting; namespace Content.IntegrationTests.Pair; // Contains misc helper functions to make writing tests easier. public sealed partial class TestPair { - /// - /// Creates a map, a grid, and a tile, and gives back references to them. - /// - [MemberNotNull(nameof(TestMap))] - public async Task CreateTestMap(bool initialized = true, string tile = "Plating") - { - var mapData = new TestMapData(); - TestMap = mapData; - await Server.WaitIdleAsync(); - var tileDefinitionManager = Server.ResolveDependency(); - - TestMap = mapData; - await Server.WaitPost(() => - { - mapData.MapUid = Server.System().CreateMap(out mapData.MapId, runMapInit: initialized); - mapData.Grid = Server.MapMan.CreateGridEntity(mapData.MapId); - mapData.GridCoords = new EntityCoordinates(mapData.Grid, 0, 0); - var plating = tileDefinitionManager[tile]; - var platingTile = new Tile(plating.TileId); - Server.System().SetTile(mapData.Grid.Owner, mapData.Grid.Comp, mapData.GridCoords, platingTile); - mapData.MapCoords = new MapCoordinates(0, 0, mapData.MapId); - mapData.Tile = Server.System().GetAllTiles(mapData.Grid.Owner, mapData.Grid.Comp).First(); - }); - - TestMap = mapData; - if (!Settings.Connected) - return mapData; - - await RunTicksSync(10); - mapData.CMapUid = ToClientUid(mapData.MapUid); - mapData.CGridUid = ToClientUid(mapData.Grid); - mapData.CGridCoords = new EntityCoordinates(mapData.CGridUid, 0, 0); - - TestMap = mapData; - return mapData; - } - - /// - /// Convert a client-side uid into a server-side uid - /// - public EntityUid ToServerUid(EntityUid uid) => ConvertUid(uid, Client, Server); - - /// - /// Convert a server-side uid into a client-side uid - /// - public EntityUid ToClientUid(EntityUid uid) => ConvertUid(uid, Server, Client); - - private static EntityUid ConvertUid( - EntityUid uid, - RobustIntegrationTest.IntegrationInstance source, - RobustIntegrationTest.IntegrationInstance destination) - { - if (!uid.IsValid()) - return EntityUid.Invalid; - - if (!source.EntMan.TryGetComponent(uid, out var meta)) - { - Assert.Fail($"Failed to resolve MetaData while converting the EntityUid for entity {uid}"); - return EntityUid.Invalid; - } - - if (!destination.EntMan.TryGetEntity(meta.NetEntity, out var otherUid)) - { - Assert.Fail($"Failed to resolve net ID while converting the EntityUid entity {source.EntMan.ToPrettyString(uid)}"); - return EntityUid.Invalid; - } - - return otherUid.Value; - } - - /// - /// Execute a command on the server and wait some number of ticks. - /// - public async Task WaitCommand(string cmd, int numTicks = 10) - { - await Server.ExecuteCommand(cmd); - await RunTicksSync(numTicks); - } - - /// - /// Execute a command on the client and wait some number of ticks. - /// - public async Task WaitClientCommand(string cmd, int numTicks = 10) - { - await Client.ExecuteCommand(cmd); - await RunTicksSync(numTicks); - } - - /// - /// Retrieve all entity prototypes that have some component. - /// - public List<(EntityPrototype, T)> GetPrototypesWithComponent( - HashSet? ignored = null, - bool ignoreAbstract = true, - bool ignoreTestPrototypes = true) - where T : IComponent, new() - { - if (!Server.ResolveDependency().TryGetRegistration(out var reg) - && !Client.ResolveDependency().TryGetRegistration(out reg)) - { - Assert.Fail($"Unknown component: {typeof(T).Name}"); - return new(); - } - - var id = reg.Name; - var list = new List<(EntityPrototype, T)>(); - foreach (var proto in Server.ProtoMan.EnumeratePrototypes()) - { - if (ignored != null && ignored.Contains(proto.ID)) - continue; - - if (ignoreAbstract && proto.Abstract) - continue; - - if (ignoreTestPrototypes && IsTestPrototype(proto)) - continue; - - if (proto.Components.TryGetComponent(id, out var cmp)) - list.Add((proto, (T)cmp)); - } - - return list; - } - - /// - /// Retrieve all entity prototypes that have some component. - /// - public List GetPrototypesWithComponent(Type type, - HashSet? ignored = null, - bool ignoreAbstract = true, - bool ignoreTestPrototypes = true) - { - var id = Server.ResolveDependency().GetComponentName(type); - var list = new List(); - foreach (var proto in Server.ProtoMan.EnumeratePrototypes()) - { - if (ignored != null && ignored.Contains(proto.ID)) - continue; - - if (ignoreAbstract && proto.Abstract) - continue; - - if (ignoreTestPrototypes && IsTestPrototype(proto)) - continue; - - if (proto.Components.ContainsKey(id)) - list.Add((proto)); - } - - return list; - } + public Task CreateTestMap(bool initialized = true) + => CreateTestMap(initialized, "Plating"); /// /// Set a user's antag preferences. Modified preferences are automatically reset at the end of the test. diff --git a/Content.IntegrationTests/Pair/TestPair.Prototypes.cs b/Content.IntegrationTests/Pair/TestPair.Prototypes.cs deleted file mode 100644 index e50bc96d65..0000000000 --- a/Content.IntegrationTests/Pair/TestPair.Prototypes.cs +++ /dev/null @@ -1,64 +0,0 @@ -#nullable enable -using System.Collections.Generic; -using Robust.Shared.Prototypes; -using Robust.Shared.Utility; -using Robust.UnitTesting; - -namespace Content.IntegrationTests.Pair; - -// This partial class contains helper methods to deal with yaml prototypes. -public sealed partial class TestPair -{ - private Dictionary> _loadedPrototypes = new(); - private HashSet _loadedEntityPrototypes = new(); - - public async Task LoadPrototypes(List prototypes) - { - await LoadPrototypes(Server, prototypes); - await LoadPrototypes(Client, prototypes); - } - - private async Task LoadPrototypes(RobustIntegrationTest.IntegrationInstance instance, List prototypes) - { - var changed = new Dictionary>(); - foreach (var file in prototypes) - { - instance.ProtoMan.LoadString(file, changed: changed); - } - - await instance.WaitPost(() => instance.ProtoMan.ReloadPrototypes(changed)); - - foreach (var (kind, ids) in changed) - { - _loadedPrototypes.GetOrNew(kind).UnionWith(ids); - } - - if (_loadedPrototypes.TryGetValue(typeof(EntityPrototype), out var entIds)) - _loadedEntityPrototypes.UnionWith(entIds); - } - - public bool IsTestPrototype(EntityPrototype proto) - { - return _loadedEntityPrototypes.Contains(proto.ID); - } - - public bool IsTestEntityPrototype(string id) - { - return _loadedEntityPrototypes.Contains(id); - } - - public bool IsTestPrototype(string id) where TPrototype : IPrototype - { - return IsTestPrototype(typeof(TPrototype), id); - } - - public bool IsTestPrototype(TPrototype proto) where TPrototype : IPrototype - { - return IsTestPrototype(typeof(TPrototype), proto.ID); - } - - public bool IsTestPrototype(Type kind, string id) - { - return _loadedPrototypes.TryGetValue(kind, out var ids) && ids.Contains(id); - } -} diff --git a/Content.IntegrationTests/Pair/TestPair.Recycle.cs b/Content.IntegrationTests/Pair/TestPair.Recycle.cs index 694d6cfa64..887361a872 100644 --- a/Content.IntegrationTests/Pair/TestPair.Recycle.cs +++ b/Content.IntegrationTests/Pair/TestPair.Recycle.cs @@ -8,84 +8,17 @@ using Content.Shared.GameTicking; using Content.Shared.Mind; using Content.Shared.Mind.Components; using Content.Shared.Preferences; -using Robust.Client; -using Robust.Server.Player; -using Robust.Shared.Exceptions; -using Robust.Shared.GameObjects; -using Robust.Shared.Network; -using Robust.Shared.Utility; +using Robust.Shared.Player; namespace Content.IntegrationTests.Pair; // This partial class contains logic related to recycling & disposing test pairs. -public sealed partial class TestPair : IAsyncDisposable +public sealed partial class TestPair { - public PairState State { get; private set; } = PairState.Ready; - - private async Task OnDirtyDispose() + protected override async Task Cleanup() { - var usageTime = Watch.Elapsed; - Watch.Restart(); - await _testOut.WriteLineAsync($"{nameof(DisposeAsync)}: Test gave back pair {Id} in {usageTime.TotalMilliseconds} ms"); - Kill(); - var disposeTime = Watch.Elapsed; - await _testOut.WriteLineAsync($"{nameof(DisposeAsync)}: Disposed pair {Id} in {disposeTime.TotalMilliseconds} ms"); - // Test pairs should only dirty dispose if they are failing. If they are not failing, this probably happened - // because someone forgot to clean-return the pair. - Assert.Warn("Test was dirty-disposed."); - } - - private async Task OnCleanDispose() - { - await Server.WaitIdleAsync(); - await Client.WaitIdleAsync(); + await base.Cleanup(); await ResetModifiedPreferences(); - await Server.RemoveAllDummySessions(); - - if (TestMap != null) - { - await Server.WaitPost(() => Server.EntMan.DeleteEntity(TestMap.MapUid)); - TestMap = null; - } - - await RevertModifiedCvars(); - - var usageTime = Watch.Elapsed; - Watch.Restart(); - await _testOut.WriteLineAsync($"{nameof(CleanReturnAsync)}: Test borrowed pair {Id} for {usageTime.TotalMilliseconds} ms"); - // Let any last minute failures the test cause happen. - await ReallyBeIdle(); - if (!Settings.Destructive) - { - if (Client.IsAlive == false) - { - throw new Exception($"{nameof(CleanReturnAsync)}: Test killed the client in pair {Id}:", Client.UnhandledException); - } - - if (Server.IsAlive == false) - { - throw new Exception($"{nameof(CleanReturnAsync)}: Test killed the server in pair {Id}:", Server.UnhandledException); - } - } - - if (Settings.MustNotBeReused) - { - Kill(); - await ReallyBeIdle(); - await _testOut.WriteLineAsync($"{nameof(CleanReturnAsync)}: Clean disposed in {Watch.Elapsed.TotalMilliseconds} ms"); - return; - } - - var sRuntimeLog = Server.ResolveDependency(); - if (sRuntimeLog.ExceptionCount > 0) - throw new Exception($"{nameof(CleanReturnAsync)}: Server logged exceptions"); - var cRuntimeLog = Client.ResolveDependency(); - if (cRuntimeLog.ExceptionCount > 0) - throw new Exception($"{nameof(CleanReturnAsync)}: Client logged exceptions"); - - var returnTime = Watch.Elapsed; - await _testOut.WriteLineAsync($"{nameof(CleanReturnAsync)}: PoolManager took {returnTime.TotalMilliseconds} ms to put pair {Id} back into the pool"); - State = PairState.Ready; } private async Task ResetModifiedPreferences() @@ -95,61 +28,14 @@ public sealed partial class TestPair : IAsyncDisposable { await Server.WaitPost(() => prefMan.SetProfile(user, 0, new HumanoidCharacterProfile()).Wait()); } + _modifiedProfiles.Clear(); } - public async ValueTask CleanReturnAsync() + protected override async Task Recycle(PairSettings next, TextWriter testOut) { - if (State != PairState.InUse) - throw new Exception($"{nameof(CleanReturnAsync)}: Unexpected state. Pair: {Id}. State: {State}."); - - await _testOut.WriteLineAsync($"{nameof(CleanReturnAsync)}: Return of pair {Id} started"); - State = PairState.CleanDisposed; - await OnCleanDispose(); - DebugTools.Assert(State is PairState.Dead or PairState.Ready); - PoolManager.NoCheckReturn(this); - ClearContext(); - } - - public async ValueTask DisposeAsync() - { - switch (State) - { - case PairState.Dead: - case PairState.Ready: - break; - case PairState.InUse: - await _testOut.WriteLineAsync($"{nameof(DisposeAsync)}: Dirty return of pair {Id} started"); - await OnDirtyDispose(); - PoolManager.NoCheckReturn(this); - ClearContext(); - break; - default: - throw new Exception($"{nameof(DisposeAsync)}: Unexpected state. Pair: {Id}. State: {State}."); - } - } - - public async Task CleanPooledPair(PoolSettings settings, TextWriter testOut) - { - Settings = default!; - Watch.Restart(); - await testOut.WriteLineAsync($"Recycling..."); - - var gameTicker = Server.System(); - var cNetMgr = Client.ResolveDependency(); - - await RunTicksSync(1); - - // Disconnect the client if they are connected. - if (cNetMgr.IsConnected) - { - await testOut.WriteLineAsync($"Recycling: {Watch.Elapsed.TotalMilliseconds} ms: Disconnecting client."); - await Client.WaitPost(() => cNetMgr.ClientDisconnect("Test pooling cleanup disconnect")); - await RunTicksSync(1); - } - Assert.That(cNetMgr.IsConnected, Is.False); - // Move to pre-round lobby. Required to toggle dummy ticker on and off + var gameTicker = Server.System(); if (gameTicker.RunLevel != GameRunLevel.PreRoundLobby) { await testOut.WriteLineAsync($"Recycling: {Watch.Elapsed.TotalMilliseconds} ms: Restarting round."); @@ -162,8 +48,7 @@ public sealed partial class TestPair : IAsyncDisposable //Apply Cvars await testOut.WriteLineAsync($"Recycling: {Watch.Elapsed.TotalMilliseconds} ms: Setting CVar "); - await PoolManager.SetupCVars(Client, settings); - await PoolManager.SetupCVars(Server, settings); + await ApplySettings(next); await RunTicksSync(1); // Restart server. @@ -171,52 +56,30 @@ public sealed partial class TestPair : IAsyncDisposable await Server.WaitPost(() => Server.EntMan.FlushEntities()); await Server.WaitPost(() => gameTicker.RestartRound()); await RunTicksSync(1); - - // Connect client - if (settings.ShouldBeConnected) - { - await testOut.WriteLineAsync($"Recycling: {Watch.Elapsed.TotalMilliseconds} ms: Connecting client"); - Client.SetConnectTarget(Server); - await Client.WaitPost(() => cNetMgr.ClientConnect(null!, 0, null!)); - } - - await testOut.WriteLineAsync($"Recycling: {Watch.Elapsed.TotalMilliseconds} ms: Idling"); - await ReallyBeIdle(); - await testOut.WriteLineAsync($"Recycling: {Watch.Elapsed.TotalMilliseconds} ms: Done recycling"); } - public void ValidateSettings(PoolSettings settings) + public override void ValidateSettings(PairSettings s) { + base.ValidateSettings(s); + var settings = (PoolSettings) s; + var cfg = Server.CfgMan; Assert.That(cfg.GetCVar(CCVars.AdminLogsEnabled), Is.EqualTo(settings.AdminLogsEnabled)); Assert.That(cfg.GetCVar(CCVars.GameLobbyEnabled), Is.EqualTo(settings.InLobby)); - Assert.That(cfg.GetCVar(CCVars.GameDummyTicker), Is.EqualTo(settings.UseDummyTicker)); + Assert.That(cfg.GetCVar(CCVars.GameDummyTicker), Is.EqualTo(settings.DummyTicker)); - var entMan = Server.ResolveDependency(); - var ticker = entMan.System(); - Assert.That(ticker.DummyTicker, Is.EqualTo(settings.UseDummyTicker)); + var ticker = Server.System(); + Assert.That(ticker.DummyTicker, Is.EqualTo(settings.DummyTicker)); var expectPreRound = settings.InLobby | settings.DummyTicker; var expectedLevel = expectPreRound ? GameRunLevel.PreRoundLobby : GameRunLevel.InRound; Assert.That(ticker.RunLevel, Is.EqualTo(expectedLevel)); - var baseClient = Client.ResolveDependency(); - var netMan = Client.ResolveDependency(); - Assert.That(netMan.IsConnected, Is.Not.EqualTo(!settings.ShouldBeConnected)); - - if (!settings.ShouldBeConnected) + if (ticker.DummyTicker || !settings.Connected) return; - Assert.That(baseClient.RunLevel, Is.EqualTo(ClientRunLevel.InGame)); - var cPlayer = Client.ResolveDependency(); - var sPlayer = Server.ResolveDependency(); - Assert.That(sPlayer.Sessions.Count(), Is.EqualTo(1)); + var sPlayer = Server.ResolveDependency(); var session = sPlayer.Sessions.Single(); - Assert.That(cPlayer.LocalSession?.UserId, Is.EqualTo(session.UserId)); - - if (ticker.DummyTicker) - return; - var status = ticker.PlayerGameStatuses[session.UserId]; var expected = settings.InLobby ? PlayerGameStatus.NotReadyToPlay @@ -231,11 +94,11 @@ public sealed partial class TestPair : IAsyncDisposable } Assert.That(session.AttachedEntity, Is.Not.Null); - Assert.That(entMan.EntityExists(session.AttachedEntity)); - Assert.That(entMan.HasComponent(session.AttachedEntity)); - var mindCont = entMan.GetComponent(session.AttachedEntity!.Value); + Assert.That(Server.EntMan.EntityExists(session.AttachedEntity)); + Assert.That(Server.EntMan.HasComponent(session.AttachedEntity)); + var mindCont = Server.EntMan.GetComponent(session.AttachedEntity!.Value); Assert.That(mindCont.Mind, Is.Not.Null); - Assert.That(entMan.TryGetComponent(mindCont.Mind, out MindComponent? mind)); + Assert.That(Server.EntMan.TryGetComponent(mindCont.Mind, out MindComponent? mind)); Assert.That(mind!.VisitingEntity, Is.Null); Assert.That(mind.OwnedEntity, Is.EqualTo(session.AttachedEntity!.Value)); Assert.That(mind.UserId, Is.EqualTo(session.UserId)); diff --git a/Content.IntegrationTests/Pair/TestPair.Timing.cs b/Content.IntegrationTests/Pair/TestPair.Timing.cs deleted file mode 100644 index e0859660d4..0000000000 --- a/Content.IntegrationTests/Pair/TestPair.Timing.cs +++ /dev/null @@ -1,77 +0,0 @@ -#nullable enable - -namespace Content.IntegrationTests.Pair; - -// This partial class contains methods for running the server/client pairs for some number of ticks -public sealed partial class TestPair -{ - /// - /// Runs the server-client pair in sync - /// - /// How many ticks to run them for - public async Task RunTicksSync(int ticks) - { - for (var i = 0; i < ticks; i++) - { - await Server.WaitRunTicks(1); - await Client.WaitRunTicks(1); - } - } - - /// - /// Convert a time interval to some number of ticks. - /// - public int SecondsToTicks(float seconds) - { - return (int) Math.Ceiling(seconds / Server.Timing.TickPeriod.TotalSeconds); - } - - /// - /// Run the server & client in sync for some amount of time - /// - public async Task RunSeconds(float seconds) - { - await RunTicksSync(SecondsToTicks(seconds)); - } - - /// - /// Runs the server-client pair in sync, but also ensures they are both idle each tick. - /// - /// How many ticks to run - public async Task ReallyBeIdle(int runTicks = 25) - { - for (var i = 0; i < runTicks; i++) - { - await Client.WaitRunTicks(1); - await Server.WaitRunTicks(1); - for (var idleCycles = 0; idleCycles < 4; idleCycles++) - { - await Client.WaitIdleAsync(); - await Server.WaitIdleAsync(); - } - } - } - - /// - /// Run the server/clients until the ticks are synchronized. - /// By default the client will be one tick ahead of the server. - /// - public async Task SyncTicks(int targetDelta = 1) - { - var sTick = (int)Server.Timing.CurTick.Value; - var cTick = (int)Client.Timing.CurTick.Value; - var delta = cTick - sTick; - - if (delta == targetDelta) - return; - if (delta > targetDelta) - await Server.WaitRunTicks(delta - targetDelta); - else - await Client.WaitRunTicks(targetDelta - delta); - - sTick = (int)Server.Timing.CurTick.Value; - cTick = (int)Client.Timing.CurTick.Value; - delta = cTick - sTick; - Assert.That(delta, Is.EqualTo(targetDelta)); - } -} diff --git a/Content.IntegrationTests/Pair/TestPair.cs b/Content.IntegrationTests/Pair/TestPair.cs index 43b188fd32..947840d5ce 100644 --- a/Content.IntegrationTests/Pair/TestPair.cs +++ b/Content.IntegrationTests/Pair/TestPair.cs @@ -1,16 +1,17 @@ #nullable enable using System.Collections.Generic; -using System.IO; -using System.Linq; +using Content.Client.IoC; +using Content.Client.Parallax.Managers; +using Content.IntegrationTests.Tests.Destructible; +using Content.IntegrationTests.Tests.DeviceNetwork; using Content.Server.GameTicking; +using Content.Shared.CCVar; using Content.Shared.Players; -using Robust.Shared.Configuration; +using Robust.Shared.ContentPack; using Robust.Shared.GameObjects; using Robust.Shared.IoC; +using Robust.Shared.Log; using Robust.Shared.Network; -using Robust.Shared.Player; -using Robust.Shared.Random; -using Robust.Shared.Timing; using Robust.UnitTesting; namespace Content.IntegrationTests.Pair; @@ -18,156 +19,99 @@ namespace Content.IntegrationTests.Pair; /// /// This object wraps a pooled server+client pair. /// -public sealed partial class TestPair +public sealed partial class TestPair : RobustIntegrationTest.TestPair { - public readonly int Id; - private bool _initialized; - private TextWriter _testOut = default!; - public readonly Stopwatch Watch = new(); - public readonly List TestHistory = new(); - public PoolSettings Settings = default!; - public TestMapData? TestMap; private List _modifiedProfiles = new(); - private int _nextServerSeed; - private int _nextClientSeed; - - public int ServerSeed; - public int ClientSeed; - - public RobustIntegrationTest.ServerIntegrationInstance Server { get; private set; } = default!; - public RobustIntegrationTest.ClientIntegrationInstance Client { get; private set; } = default!; - - public void Deconstruct( - out RobustIntegrationTest.ServerIntegrationInstance server, - out RobustIntegrationTest.ClientIntegrationInstance client) - { - server = Server; - client = Client; - } - - public ICommonSession? Player => Server.PlayerMan.SessionsDict.GetValueOrDefault(Client.User!.Value); - public ContentPlayerData? PlayerData => Player?.Data.ContentData(); - public PoolTestLogHandler ServerLogHandler { get; private set; } = default!; - public PoolTestLogHandler ClientLogHandler { get; private set; } = default!; - - public TestPair(int id) + protected override async Task Initialize() { - Id = id; - } - - public async Task Initialize(PoolSettings settings, TextWriter testOut, List testPrototypes) - { - if (_initialized) - throw new InvalidOperationException("Already initialized"); - - _initialized = true; - Settings = settings; - (Client, ClientLogHandler) = await PoolManager.GenerateClient(settings, testOut); - (Server, ServerLogHandler) = await PoolManager.GenerateServer(settings, testOut); - ActivateContext(testOut); - - Client.CfgMan.OnCVarValueChanged += OnClientCvarChanged; - Server.CfgMan.OnCVarValueChanged += OnServerCvarChanged; - - if (!settings.NoLoadTestPrototypes) - await LoadPrototypes(testPrototypes!); - - if (!settings.UseDummyTicker) + var settings = (PoolSettings)Settings; + if (!settings.DummyTicker) { - var gameTicker = Server.ResolveDependency().System(); + var gameTicker = Server.System(); await Server.WaitPost(() => gameTicker.RestartRound()); } + } - // Always initially connect clients to generate an initial random set of preferences/profiles. - // This is to try and prevent issues where if the first test that connects the client is consistently some test - // that uses a fixed seed, it would effectively prevent it from beingrandomized. + public override async Task RevertModifiedCvars() + { + // I just love order dependent cvars + // I.e., cvars that when changed automatically cause others to also change. + var modified = ModifiedServerCvars.TryGetValue(CCVars.PanicBunkerEnabled.Name, out var panik); - Client.SetConnectTarget(Server); - await Client.WaitIdleAsync(); - var netMgr = Client.ResolveDependency(); - await Client.WaitPost(() => netMgr.ClientConnect(null!, 0, null!)); - await ReallyBeIdle(10); - await Client.WaitRunTicks(1); + await base.RevertModifiedCvars(); - if (!settings.ShouldBeConnected) + if (!modified) + return; + + await Server.WaitPost(() => Server.CfgMan.SetCVar(CCVars.PanicBunkerEnabled.Name, panik!)); + ClearModifiedCvars(); + } + + protected override async Task ApplySettings(IIntegrationInstance instance, PairSettings n) + { + var next = (PoolSettings)n; + await base.ApplySettings(instance, next); + var cfg = instance.CfgMan; + await instance.WaitPost(() => { - await Client.WaitPost(() => netMgr.ClientDisconnect("Initial disconnect")); - await ReallyBeIdle(10); - } + if (cfg.IsCVarRegistered(CCVars.GameDummyTicker.Name)) + cfg.SetCVar(CCVars.GameDummyTicker, next.DummyTicker); - var cRand = Client.ResolveDependency(); - var sRand = Server.ResolveDependency(); - _nextClientSeed = cRand.Next(); - _nextServerSeed = sRand.Next(); + if (cfg.IsCVarRegistered(CCVars.GameLobbyEnabled.Name)) + cfg.SetCVar(CCVars.GameLobbyEnabled, next.InLobby); + + if (cfg.IsCVarRegistered(CCVars.GameMap.Name)) + cfg.SetCVar(CCVars.GameMap, next.Map); + + if (cfg.IsCVarRegistered(CCVars.AdminLogsEnabled.Name)) + cfg.SetCVar(CCVars.AdminLogsEnabled, next.AdminLogsEnabled); + }); } - public void Kill() + protected override RobustIntegrationTest.ClientIntegrationOptions ClientOptions() { - State = PairState.Dead; - ServerLogHandler.ShuttingDown = true; - ClientLogHandler.ShuttingDown = true; - Server.Dispose(); - Client.Dispose(); - } + var opts = base.ClientOptions(); - private void ClearContext() - { - _testOut = default!; - ServerLogHandler.ClearContext(); - ClientLogHandler.ClearContext(); - } - - public void ActivateContext(TextWriter testOut) - { - _testOut = testOut; - ServerLogHandler.ActivateContext(testOut); - ClientLogHandler.ActivateContext(testOut); - } - - public void Use() - { - if (State != PairState.Ready) - throw new InvalidOperationException($"Pair is not ready to use. State: {State}"); - State = PairState.InUse; - } - - public enum PairState : byte - { - Ready = 0, - InUse = 1, - CleanDisposed = 2, - Dead = 3, - } - - public void SetupSeed() - { - var sRand = Server.ResolveDependency(); - if (Settings.ServerSeed is { } severSeed) + opts.LoadTestAssembly = false; + opts.ContentStart = true; + opts.FailureLogLevel = LogLevel.Warning; + opts.Options = new() { - ServerSeed = severSeed; - sRand.SetSeed(ServerSeed); - } - else - { - ServerSeed = _nextServerSeed; - sRand.SetSeed(ServerSeed); - _nextServerSeed = sRand.Next(); - } + LoadConfigAndUserData = false, + }; - var cRand = Client.ResolveDependency(); - if (Settings.ClientSeed is { } clientSeed) + opts.BeforeStart += () => { - ClientSeed = clientSeed; - cRand.SetSeed(ClientSeed); - } - else + IoCManager.Resolve().SetModuleBaseCallbacks(new ClientModuleTestingCallbacks + { + ClientBeforeIoC = () => IoCManager.Register(true) + }); + }; + return opts; + } + + protected override RobustIntegrationTest.ServerIntegrationOptions ServerOptions() + { + var opts = base.ServerOptions(); + + opts.LoadTestAssembly = false; + opts.ContentStart = true; + opts.Options = new() { - ClientSeed = _nextClientSeed; - cRand.SetSeed(ClientSeed); - _nextClientSeed = cRand.Next(); - } + LoadConfigAndUserData = false, + }; + + opts.BeforeStart += () => + { + // Server-only systems (i.e., systems that subscribe to events with server-only components) + // There's probably a better way to do this. + var entSysMan = IoCManager.Resolve(); + entSysMan.LoadExtraSystemType(); + entSysMan.LoadExtraSystemType(); + }; + return opts; } } diff --git a/Content.IntegrationTests/PoolManager.Cvars.cs b/Content.IntegrationTests/PoolManager.Cvars.cs index 8cf2b626dc..b457d4a40b 100644 --- a/Content.IntegrationTests/PoolManager.Cvars.cs +++ b/Content.IntegrationTests/PoolManager.Cvars.cs @@ -1,15 +1,14 @@ #nullable enable using Content.Shared.CCVar; -using Robust.Shared; -using Robust.Shared.Configuration; -using Robust.UnitTesting; namespace Content.IntegrationTests; -// Partial class containing cvar logic +// Partial class containing test cvars +// This could probably be merged into the main file, but I'm keeping it separate to reduce +// conflicts for forks. public static partial class PoolManager { - private static readonly (string cvar, string value)[] TestCvars = + public static readonly (string cvar, string value)[] TestCvars = { // @formatter:off (CCVars.DatabaseSynchronous.Name, "true"), @@ -17,9 +16,7 @@ public static partial class PoolManager (CCVars.HolidaysEnabled.Name, "false"), (CCVars.GameMap.Name, TestMap), (CCVars.AdminLogsQueueSendDelay.Name, "0"), - (CVars.NetPVS.Name, "false"), (CCVars.NPCMaxUpdates.Name, "999999"), - (CVars.ThreadParallelCount.Name, "1"), (CCVars.GameRoleTimers.Name, "false"), (CCVars.GameRoleLoadoutTimers.Name, "false"), (CCVars.GameRoleWhitelist.Name, "false"), @@ -30,49 +27,13 @@ public static partial class PoolManager (CCVars.ProcgenPreload.Name, "false"), (CCVars.WorldgenEnabled.Name, "false"), (CCVars.GatewayGeneratorEnabled.Name, "false"), - (CVars.ReplayClientRecordingEnabled.Name, "false"), - (CVars.ReplayServerRecordingEnabled.Name, "false"), (CCVars.GameDummyTicker.Name, "true"), (CCVars.GameLobbyEnabled.Name, "false"), (CCVars.ConfigPresetDevelopment.Name, "false"), (CCVars.AdminLogsEnabled.Name, "false"), (CCVars.AutosaveEnabled.Name, "false"), - (CVars.NetBufferSize.Name, "0"), (CCVars.InteractionRateLimitCount.Name, "9999999"), (CCVars.InteractionRateLimitPeriod.Name, "0.1"), (CCVars.MovementMobPushing.Name, "false"), }; - - public static async Task SetupCVars(RobustIntegrationTest.IntegrationInstance instance, PoolSettings settings) - { - var cfg = instance.ResolveDependency(); - await instance.WaitPost(() => - { - if (cfg.IsCVarRegistered(CCVars.GameDummyTicker.Name)) - cfg.SetCVar(CCVars.GameDummyTicker, settings.UseDummyTicker); - - if (cfg.IsCVarRegistered(CCVars.GameLobbyEnabled.Name)) - cfg.SetCVar(CCVars.GameLobbyEnabled, settings.InLobby); - - if (cfg.IsCVarRegistered(CVars.NetInterp.Name)) - cfg.SetCVar(CVars.NetInterp, settings.DisableInterpolate); - - if (cfg.IsCVarRegistered(CCVars.GameMap.Name)) - cfg.SetCVar(CCVars.GameMap, settings.Map); - - if (cfg.IsCVarRegistered(CCVars.AdminLogsEnabled.Name)) - cfg.SetCVar(CCVars.AdminLogsEnabled, settings.AdminLogsEnabled); - - if (cfg.IsCVarRegistered(CVars.NetInterp.Name)) - cfg.SetCVar(CVars.NetInterp, !settings.DisableInterpolate); - }); - } - - private static void SetDefaultCVars(RobustIntegrationTest.IntegrationOptions options) - { - foreach (var (cvar, value) in TestCvars) - { - options.CVarOverrides[cvar] = value; - } - } } diff --git a/Content.IntegrationTests/PoolManager.Prototypes.cs b/Content.IntegrationTests/PoolManager.Prototypes.cs deleted file mode 100644 index eb7518ea15..0000000000 --- a/Content.IntegrationTests/PoolManager.Prototypes.cs +++ /dev/null @@ -1,35 +0,0 @@ -#nullable enable -using System.Collections.Generic; -using System.Reflection; -using Robust.Shared.Utility; - -namespace Content.IntegrationTests; - -// Partial class for handling the discovering and storing test prototypes. -public static partial class PoolManager -{ - private static List _testPrototypes = new(); - - private const BindingFlags Flags = BindingFlags.Static - | BindingFlags.NonPublic - | BindingFlags.Public - | BindingFlags.DeclaredOnly; - - private static void DiscoverTestPrototypes(Assembly assembly) - { - foreach (var type in assembly.GetTypes()) - { - foreach (var field in type.GetFields(Flags)) - { - if (!field.HasCustomAttribute()) - continue; - - var val = field.GetValue(null); - if (val is not string str) - throw new Exception($"TestPrototypeAttribute is only valid on non-null string fields"); - - _testPrototypes.Add(str); - } - } - } -} diff --git a/Content.IntegrationTests/PoolManager.cs b/Content.IntegrationTests/PoolManager.cs index 64aac16751..6e0df92ad4 100644 --- a/Content.IntegrationTests/PoolManager.cs +++ b/Content.IntegrationTests/PoolManager.cs @@ -1,373 +1,17 @@ #nullable enable -using System.Collections.Generic; -using System.IO; using System.Linq; using System.Reflection; -using System.Text; -using System.Threading; -using Content.Client.IoC; -using Content.Client.Parallax.Managers; using Content.IntegrationTests.Pair; -using Content.IntegrationTests.Tests; -using Content.IntegrationTests.Tests.Destructible; -using Content.IntegrationTests.Tests.DeviceNetwork; -using Content.IntegrationTests.Tests.Interaction.Click; -using Robust.Client; -using Robust.Server; -using Robust.Shared.Configuration; -using Robust.Shared.ContentPack; -using Robust.Shared.GameObjects; -using Robust.Shared.IoC; -using Robust.Shared.Log; -using Robust.Shared.Prototypes; -using Robust.Shared.Timing; +using Content.Shared.CCVar; using Robust.UnitTesting; namespace Content.IntegrationTests; -/// -/// Making clients, and servers is slow, this manages a pool of them so tests can reuse them. -/// +// The static class exist to avoid breaking changes public static partial class PoolManager { + public static readonly ContentPoolManager Instance = new(); public const string TestMap = "Empty"; - private static int _pairId; - private static readonly object PairLock = new(); - private static bool _initialized; - - // Pair, IsBorrowed - private static readonly Dictionary Pairs = new(); - private static bool _dead; - private static Exception? _poolFailureReason; - - private static HashSet _contentAssemblies = default!; - - public static async Task<(RobustIntegrationTest.ServerIntegrationInstance, PoolTestLogHandler)> GenerateServer( - PoolSettings poolSettings, - TextWriter testOut) - { - var options = new RobustIntegrationTest.ServerIntegrationOptions - { - ContentStart = true, - Options = new ServerOptions() - { - LoadConfigAndUserData = false, - LoadContentResources = !poolSettings.NoLoadContent, - }, - ContentAssemblies = _contentAssemblies.ToArray() - }; - - var logHandler = new PoolTestLogHandler("SERVER"); - logHandler.ActivateContext(testOut); - options.OverrideLogHandler = () => logHandler; - - options.BeforeStart += () => - { - // Server-only systems (i.e., systems that subscribe to events with server-only components) - var entSysMan = IoCManager.Resolve(); - entSysMan.LoadExtraSystemType(); - entSysMan.LoadExtraSystemType(); - - IoCManager.Resolve().GetSawmill("loc").Level = LogLevel.Error; - IoCManager.Resolve() - .OnValueChanged(RTCVars.FailureLogLevel, value => logHandler.FailureLevel = value, true); - }; - - SetDefaultCVars(options); - var server = new RobustIntegrationTest.ServerIntegrationInstance(options); - await server.WaitIdleAsync(); - await SetupCVars(server, poolSettings); - return (server, logHandler); - } - - /// - /// This shuts down the pool, and disposes all the server/client pairs. - /// This is a one time operation to be used when the testing program is exiting. - /// - public static void Shutdown() - { - List localPairs; - lock (PairLock) - { - if (_dead) - return; - _dead = true; - localPairs = Pairs.Keys.ToList(); - } - - foreach (var pair in localPairs) - { - pair.Kill(); - } - - _initialized = false; - } - - public static string DeathReport() - { - lock (PairLock) - { - var builder = new StringBuilder(); - var pairs = Pairs.Keys.OrderBy(pair => pair.Id); - foreach (var pair in pairs) - { - var borrowed = Pairs[pair]; - builder.AppendLine($"Pair {pair.Id}, Tests Run: {pair.TestHistory.Count}, Borrowed: {borrowed}"); - for (var i = 0; i < pair.TestHistory.Count; i++) - { - builder.AppendLine($"#{i}: {pair.TestHistory[i]}"); - } - } - - return builder.ToString(); - } - } - - public static async Task<(RobustIntegrationTest.ClientIntegrationInstance, PoolTestLogHandler)> GenerateClient( - PoolSettings poolSettings, - TextWriter testOut) - { - var options = new RobustIntegrationTest.ClientIntegrationOptions - { - FailureLogLevel = LogLevel.Warning, - ContentStart = true, - ContentAssemblies = new[] - { - typeof(Shared.Entry.EntryPoint).Assembly, - typeof(Client.Entry.EntryPoint).Assembly, - typeof(PoolManager).Assembly, - } - }; - - if (poolSettings.NoLoadContent) - { - Assert.Warn("NoLoadContent does not work on the client, ignoring"); - } - - options.Options = new GameControllerOptions() - { - LoadConfigAndUserData = false, - // LoadContentResources = !poolSettings.NoLoadContent - }; - - var logHandler = new PoolTestLogHandler("CLIENT"); - logHandler.ActivateContext(testOut); - options.OverrideLogHandler = () => logHandler; - - options.BeforeStart += () => - { - IoCManager.Resolve().SetModuleBaseCallbacks(new ClientModuleTestingCallbacks - { - ClientBeforeIoC = () => - { - // do not register extra systems or components here -- they will get cleared when the client is - // disconnected. just use reflection. - IoCManager.Register(true); - IoCManager.Resolve().GetSawmill("loc").Level = LogLevel.Error; - IoCManager.Resolve() - .OnValueChanged(RTCVars.FailureLogLevel, value => logHandler.FailureLevel = value, true); - } - }); - }; - - SetDefaultCVars(options); - var client = new RobustIntegrationTest.ClientIntegrationInstance(options); - await client.WaitIdleAsync(); - await SetupCVars(client, poolSettings); - return (client, logHandler); - } - - /// - /// Gets a , which can be used to get access to a server, and client - /// - /// See - /// - public static async Task GetServerClient( - PoolSettings? poolSettings = null, - ITestContextLike? testContext = null) - { - return await GetServerClientPair( - poolSettings ?? new PoolSettings(), - testContext ?? new NUnitTestContextWrap(TestContext.CurrentContext, TestContext.Out)); - } - - private static string GetDefaultTestName(ITestContextLike testContext) - { - return testContext.FullName.Replace("Content.IntegrationTests.Tests.", ""); - } - - private static async Task GetServerClientPair( - PoolSettings poolSettings, - ITestContextLike testContext) - { - if (!_initialized) - throw new InvalidOperationException($"Pool manager has not been initialized"); - - // Trust issues with the AsyncLocal that backs this. - var testOut = testContext.Out; - - DieIfPoolFailure(); - var currentTestName = poolSettings.TestName ?? GetDefaultTestName(testContext); - var poolRetrieveTimeWatch = new Stopwatch(); - await testOut.WriteLineAsync($"{nameof(GetServerClientPair)}: Called by test {currentTestName}"); - TestPair? pair = null; - try - { - poolRetrieveTimeWatch.Start(); - if (poolSettings.MustBeNew) - { - await testOut.WriteLineAsync( - $"{nameof(GetServerClientPair)}: Creating pair, because settings of pool settings"); - pair = await CreateServerClientPair(poolSettings, testOut); - } - else - { - await testOut.WriteLineAsync($"{nameof(GetServerClientPair)}: Looking in pool for a suitable pair"); - pair = GrabOptimalPair(poolSettings); - if (pair != null) - { - pair.ActivateContext(testOut); - await testOut.WriteLineAsync($"{nameof(GetServerClientPair)}: Suitable pair found"); - var canSkip = pair.Settings.CanFastRecycle(poolSettings); - - if (canSkip) - { - await testOut.WriteLineAsync($"{nameof(GetServerClientPair)}: Cleanup not needed, Skipping cleanup of pair"); - await SetupCVars(pair.Client, poolSettings); - await SetupCVars(pair.Server, poolSettings); - await pair.RunTicksSync(1); - } - else - { - await testOut.WriteLineAsync($"{nameof(GetServerClientPair)}: Cleaning existing pair"); - await pair.CleanPooledPair(poolSettings, testOut); - } - - await pair.RunTicksSync(5); - await pair.SyncTicks(targetDelta: 1); - } - else - { - await testOut.WriteLineAsync($"{nameof(GetServerClientPair)}: Creating a new pair, no suitable pair found in pool"); - pair = await CreateServerClientPair(poolSettings, testOut); - } - } - } - finally - { - if (pair != null && pair.TestHistory.Count > 0) - { - await testOut.WriteLineAsync($"{nameof(GetServerClientPair)}: Pair {pair.Id} Test History Start"); - for (var i = 0; i < pair.TestHistory.Count; i++) - { - await testOut.WriteLineAsync($"- Pair {pair.Id} Test #{i}: {pair.TestHistory[i]}"); - } - await testOut.WriteLineAsync($"{nameof(GetServerClientPair)}: Pair {pair.Id} Test History End"); - } - } - - pair.ValidateSettings(poolSettings); - - var poolRetrieveTime = poolRetrieveTimeWatch.Elapsed; - await testOut.WriteLineAsync( - $"{nameof(GetServerClientPair)}: Retrieving pair {pair.Id} from pool took {poolRetrieveTime.TotalMilliseconds} ms"); - - pair.ClearModifiedCvars(); - pair.Settings = poolSettings; - pair.TestHistory.Add(currentTestName); - pair.SetupSeed(); - await testOut.WriteLineAsync( - $"{nameof(GetServerClientPair)}: Returning pair {pair.Id} with client/server seeds: {pair.ClientSeed}/{pair.ServerSeed}"); - - pair.Watch.Restart(); - return pair; - } - - private static TestPair? GrabOptimalPair(PoolSettings poolSettings) - { - lock (PairLock) - { - TestPair? fallback = null; - foreach (var pair in Pairs.Keys) - { - if (Pairs[pair]) - continue; - - if (!pair.Settings.CanFastRecycle(poolSettings)) - { - fallback = pair; - continue; - } - - pair.Use(); - Pairs[pair] = true; - return pair; - } - - if (fallback != null) - { - fallback.Use(); - Pairs[fallback!] = true; - } - - return fallback; - } - } - - /// - /// Used by TestPair after checking the server/client pair, Don't use this. - /// - public static void NoCheckReturn(TestPair pair) - { - lock (PairLock) - { - if (pair.State == TestPair.PairState.Dead) - Pairs.Remove(pair); - else if (pair.State == TestPair.PairState.Ready) - Pairs[pair] = false; - else - throw new InvalidOperationException($"Attempted to return a pair in an invalid state. Pair: {pair.Id}. State: {pair.State}."); - } - } - - private static void DieIfPoolFailure() - { - if (_poolFailureReason != null) - { - // If the _poolFailureReason is not null, we can assume at least one test failed. - // So we say inconclusive so we don't add more failed tests to search through. - Assert.Inconclusive(@$" -In a different test, the pool manager had an exception when trying to create a server/client pair. -Instead of risking that the pool manager will fail at creating a server/client pairs for every single test, -we are just going to end this here to save a lot of time. This is the exception that started this:\n {_poolFailureReason}"); - } - - if (_dead) - { - // If Pairs is null, we ran out of time, we can't assume a test failed. - // So we are going to tell it all future tests are a failure. - Assert.Fail("The pool was shut down"); - } - } - - private static async Task CreateServerClientPair(PoolSettings poolSettings, TextWriter testOut) - { - try - { - var id = Interlocked.Increment(ref _pairId); - var pair = new TestPair(id); - await pair.Initialize(poolSettings, testOut, _testPrototypes); - pair.Use(); - await pair.RunTicksSync(5); - await pair.SyncTicks(targetDelta: 1); - return pair; - } - catch (Exception ex) - { - _poolFailureReason = ex; - throw; - } - } /// /// Runs a server, or a client until a condition is true @@ -423,29 +67,42 @@ we are just going to end this here to save a lot of time. This is the exception Assert.That(passed); } - /// - /// Initialize the pool manager. - /// - /// Assemblies to search for to discover extra prototypes and systems. - public static void Startup(params Assembly[] extraAssemblies) + public static async Task GetServerClient( + PoolSettings? settings = null, + ITestContextLike? testContext = null) { - if (_initialized) - throw new InvalidOperationException("Already initialized"); + return await Instance.GetPair(settings, testContext); + } - _initialized = true; - _contentAssemblies = - [ - typeof(Shared.Entry.EntryPoint).Assembly, - typeof(Server.Entry.EntryPoint).Assembly, - typeof(PoolManager).Assembly - ]; - _contentAssemblies.UnionWith(extraAssemblies); + public static void Startup(params Assembly[] extra) + => Instance.Startup(extra); - _testPrototypes.Clear(); - DiscoverTestPrototypes(typeof(PoolManager).Assembly); - foreach (var assembly in extraAssemblies) - { - DiscoverTestPrototypes(assembly); - } + public static void Shutdown() => Instance.Shutdown(); + public static string DeathReport() => Instance.DeathReport(); +} + +/// +/// Making clients, and servers is slow, this manages a pool of them so tests can reuse them. +/// +public sealed class ContentPoolManager : PoolManager +{ + public override PairSettings DefaultSettings => new PoolSettings(); + protected override string GetDefaultTestName(ITestContextLike testContext) + { + return testContext.FullName.Replace("Content.IntegrationTests.Tests.", ""); + } + + public override void Startup(params Assembly[] extraAssemblies) + { + DefaultCvars.AddRange(PoolManager.TestCvars); + + var shared = extraAssemblies + .Append(typeof(Shared.Entry.EntryPoint).Assembly) + .Append(typeof(PoolManager).Assembly) + .ToArray(); + + Startup([typeof(Client.Entry.EntryPoint).Assembly], + [typeof(Server.Entry.EntryPoint).Assembly], + shared); } } diff --git a/Content.IntegrationTests/PoolSettings.cs b/Content.IntegrationTests/PoolSettings.cs index 9da514e66b..fe37c38fe3 100644 --- a/Content.IntegrationTests/PoolSettings.cs +++ b/Content.IntegrationTests/PoolSettings.cs @@ -1,43 +1,31 @@ -#nullable enable +namespace Content.IntegrationTests; -using Robust.Shared.Random; - -namespace Content.IntegrationTests; - -/// -/// Settings for the pooled server, and client pair. -/// Some options are for changing the pair, and others are -/// so the pool can properly clean up what you borrowed. -/// -public sealed class PoolSettings +/// +public sealed class PoolSettings : PairSettings { - /// - /// Set to true if the test will ruin the server/client pair. - /// - public bool Destructive { get; init; } + public override bool Connected + { + get => _connected || InLobby; + init => _connected = value; + } - /// - /// Set to true if the given server/client pair should be created fresh. - /// - public bool Fresh { get; init; } + private readonly bool _dummyTicker = true; + private readonly bool _connected; /// /// Set to true if the given server should be using a dummy ticker. Ignored if is true. /// - public bool DummyTicker { get; init; } = true; + public bool DummyTicker + { + get => _dummyTicker && !InLobby; + init => _dummyTicker = value; + } /// /// If true, this enables the creation of admin logs during the test. /// public bool AdminLogsEnabled { get; init; } - /// - /// Set to true if the given server/client pair should be connected from each other. - /// Defaults to disconnected as it makes dirty recycling slightly faster. - /// If is true, this option is ignored. - /// - public bool Connected { get; init; } - /// /// Set to true if the given server/client pair should be in the lobby. /// If the pair is not in the lobby at the end of the test, this test must be marked as dirty. @@ -53,81 +41,22 @@ public sealed class PoolSettings /// public bool NoLoadContent { get; init; } - /// - /// This will return a server-client pair that has not loaded test prototypes. - /// Try avoiding this whenever possible, as this will always create & destroy a new pair. - /// Use if you need to exclude test prototypees. - /// - public bool NoLoadTestPrototypes { get; init; } - - /// - /// Set this to true to disable the NetInterp CVar on the given server/client pair - /// - public bool DisableInterpolate { get; init; } - - /// - /// Set this to true to always clean up the server/client pair before giving it to another borrower - /// - public bool Dirty { get; init; } - /// /// Set this to the path of a map to have the given server/client pair load the map. /// public string Map { get; init; } = PoolManager.TestMap; - /// - /// Overrides the test name detection, and uses this in the test history instead - /// - public string? TestName { get; set; } - - /// - /// If set, this will be used to call - /// - public int? ServerSeed { get; set; } - - /// - /// If set, this will be used to call - /// - public int? ClientSeed { get; set; } - - #region Inferred Properties - - /// - /// If the returned pair must not be reused - /// - public bool MustNotBeReused => Destructive || NoLoadContent || NoLoadTestPrototypes; - - /// - /// If the given pair must be brand new - /// - public bool MustBeNew => Fresh || NoLoadContent || NoLoadTestPrototypes; - - public bool UseDummyTicker => !InLobby && DummyTicker; - - public bool ShouldBeConnected => InLobby || Connected; - - #endregion - - /// - /// Tries to guess if we can skip recycling the server/client pair. - /// - /// The next set of settings the old pair will be set to - /// If we can skip cleaning it up - public bool CanFastRecycle(PoolSettings nextSettings) + public override bool CanFastRecycle(PairSettings nextSettings) { - if (MustNotBeReused) - throw new InvalidOperationException("Attempting to recycle a non-reusable test."); + if (!base.CanFastRecycle(nextSettings)) + return false; - if (nextSettings.MustBeNew) - throw new InvalidOperationException("Attempting to recycle a test while requesting a fresh test."); - - if (Dirty) + if (nextSettings is not PoolSettings next) return false; // Check that certain settings match. - return !ShouldBeConnected == !nextSettings.ShouldBeConnected - && UseDummyTicker == nextSettings.UseDummyTicker - && Map == nextSettings.Map - && InLobby == nextSettings.InLobby; + return DummyTicker == next.DummyTicker + && Map == next.Map + && InLobby == next.InLobby; } } diff --git a/Content.IntegrationTests/PoolTestLogHandler.cs b/Content.IntegrationTests/PoolTestLogHandler.cs deleted file mode 100644 index 909bee9785..0000000000 --- a/Content.IntegrationTests/PoolTestLogHandler.cs +++ /dev/null @@ -1,79 +0,0 @@ -using System.IO; -using Robust.Shared.Log; -using Robust.Shared.Timing; -using Serilog.Events; - -namespace Content.IntegrationTests; - -#nullable enable - -/// -/// Log handler intended for pooled integration tests. -/// -/// -/// -/// This class logs to two places: an NUnit -/// (so it nicely gets attributed to a test in your IDE), -/// and an in-memory ring buffer for diagnostic purposes. -/// If test pooling breaks, the ring buffer can be used to see what the broken instance has gone through. -/// -/// -/// The active test context can be swapped out so pooled instances can correctly have their logs attributed. -/// -/// -public sealed class PoolTestLogHandler : ILogHandler -{ - private readonly string? _prefix; - - private RStopwatch _stopwatch; - - public TextWriter? ActiveContext { get; private set; } - - public LogLevel? FailureLevel { get; set; } - - public PoolTestLogHandler(string? prefix) - { - _prefix = prefix != null ? $"{prefix}: " : ""; - } - - public bool ShuttingDown; - - public void Log(string sawmillName, LogEvent message) - { - var level = message.Level.ToRobust(); - - if (ShuttingDown && (FailureLevel == null || level < FailureLevel)) - return; - - if (ActiveContext is not { } testContext) - { - // If this gets hit it means something is logging to this instance while it's "between" tests. - // This is a bug in either the game or the testing system, and must always be investigated. - throw new InvalidOperationException("Log to pool test log handler without active test context"); - } - - var name = LogMessage.LogLevelToName(level); - var seconds = _stopwatch.Elapsed.TotalSeconds; - var rendered = message.RenderMessage(); - var line = $"{_prefix}{seconds:F3}s [{name}] {sawmillName}: {rendered}"; - - testContext.WriteLine(line); - - if (FailureLevel == null || level < FailureLevel) - return; - - testContext.Flush(); - Assert.Fail($"{line} Exception: {message.Exception}"); - } - - public void ClearContext() - { - ActiveContext = null; - } - - public void ActivateContext(TextWriter context) - { - _stopwatch.Restart(); - ActiveContext = context; - } -} diff --git a/Content.IntegrationTests/TestPrototypesAttribute.cs b/Content.IntegrationTests/TestPrototypesAttribute.cs deleted file mode 100644 index a6728d6728..0000000000 --- a/Content.IntegrationTests/TestPrototypesAttribute.cs +++ /dev/null @@ -1,12 +0,0 @@ -using JetBrains.Annotations; - -namespace Content.IntegrationTests; - -/// -/// Attribute that indicates that a string contains yaml prototype data that should be loaded by integration tests. -/// -[AttributeUsage(AttributeTargets.Field)] -[MeansImplicitUse] -public sealed class TestPrototypesAttribute : Attribute -{ -} diff --git a/Content.MapRenderer/Painters/MapPainter.cs b/Content.MapRenderer/Painters/MapPainter.cs index 991fa74fe1..a0198b35a0 100644 --- a/Content.MapRenderer/Painters/MapPainter.cs +++ b/Content.MapRenderer/Painters/MapPainter.cs @@ -20,6 +20,7 @@ using Robust.Shared.Map; using Robust.Shared.Map.Components; using Robust.Shared.Maths; using Robust.Shared.Timing; +using Robust.UnitTesting.Pool; using SixLabors.ImageSharp; using SixLabors.ImageSharp.PixelFormats; using SixLabors.ImageSharp.Processing; diff --git a/Content.MapRenderer/Program.cs b/Content.MapRenderer/Program.cs index 9d7843bcd0..534b12565c 100644 --- a/Content.MapRenderer/Program.cs +++ b/Content.MapRenderer/Program.cs @@ -9,6 +9,7 @@ using Content.IntegrationTests; using Content.MapRenderer.Painters; using Content.Server.Maps; using Robust.Shared.Prototypes; +using Robust.UnitTesting.Pool; using SixLabors.ImageSharp; using SixLabors.ImageSharp.Formats.Webp; From 7678251ad58b7182afc66658b9c9b4d8122b1bb3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C4=81da?= Date: Sun, 21 Sep 2025 09:22:45 -0500 Subject: [PATCH 126/143] Average min+max in MaterialArbitrageTest (#39578) * feels too easy * I guess this counts * commit * could have sworn I ran the test --------- Co-authored-by: iaada --- .../Tests/MaterialArbitrageTest.cs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Content.IntegrationTests/Tests/MaterialArbitrageTest.cs b/Content.IntegrationTests/Tests/MaterialArbitrageTest.cs index 3213ccbc43..082baf7e64 100644 --- a/Content.IntegrationTests/Tests/MaterialArbitrageTest.cs +++ b/Content.IntegrationTests/Tests/MaterialArbitrageTest.cs @@ -145,7 +145,7 @@ public sealed class MaterialArbitrageTest Dictionary priceCache = new(); - Dictionary Ents, Dictionary Mats)> spawnedOnDestroy = new(); + Dictionary Ents, Dictionary Mats)> spawnedOnDestroy = new(); // cache the compositions of entities // If the entity is refineable (i.e. glass shared can be turned into glass, we take the greater of the two compositions. @@ -217,8 +217,8 @@ public sealed class MaterialArbitrageTest var comp = (DestructibleComponent) destructible.Component; - var spawnedEnts = new Dictionary(); - var spawnedMats = new Dictionary(); + var spawnedEnts = new Dictionary(); + var spawnedMats = new Dictionary(); // This test just blindly assumes that ALL spawn entity behaviors get triggered. In reality, some entities // might only trigger a subset. If that starts being a problem, this test either needs fixing or needs to @@ -233,14 +233,14 @@ public sealed class MaterialArbitrageTest foreach (var (key, value) in spawn.Spawn) { - spawnedEnts[key] = spawnedEnts.GetValueOrDefault(key) + value.Max; + spawnedEnts[key] = spawnedEnts.GetValueOrDefault(key) + (float)(value.Min + value.Max) / 2; if (!compositions.TryGetValue(key, out var composition)) continue; foreach (var (matId, amount) in composition) { - spawnedMats[matId] = value.Max * amount + spawnedMats.GetValueOrDefault(matId); + spawnedMats[matId] = (float)(value.Min + value.Max) / 2 * amount + spawnedMats.GetValueOrDefault(matId); } } } @@ -451,7 +451,7 @@ public sealed class MaterialArbitrageTest await server.WaitPost(() => mapSystem.DeleteMap(testMap.MapId)); await pair.CleanReturnAsync(); - async Task GetSpawnedPrice(Dictionary ents) + async Task GetSpawnedPrice(Dictionary ents) { double price = 0; foreach (var (id, num) in ents) From 818a715822b494046cf0ca2122f8fee5df8c4d23 Mon Sep 17 00:00:00 2001 From: Charlie Morley Date: Sun, 21 Sep 2025 09:23:37 -0600 Subject: [PATCH 127/143] prevent repeat TriggerOnCollide triggers (#40428) * prevent repeat TriggerOnCollide triggers * review comment: remove TriggerOnCollide when out of triggers --- .../Triggers/TriggerOnCollideComponent.cs | 6 ++++++ .../Trigger/Systems/TriggerSystem.Collide.cs | 15 ++++++++++++++- .../Objects/Weapons/Guns/Projectiles/magic.yml | 3 +++ .../Weapons/Guns/Projectiles/projectiles.yml | 1 + Resources/Prototypes/Magic/Fixtures/runes.yml | 3 +++ Resources/Prototypes/floor_trap.yml | 7 +++++++ 6 files changed, 34 insertions(+), 1 deletion(-) diff --git a/Content.Shared/Trigger/Components/Triggers/TriggerOnCollideComponent.cs b/Content.Shared/Trigger/Components/Triggers/TriggerOnCollideComponent.cs index a1e234bd7a..1cd8fb714b 100644 --- a/Content.Shared/Trigger/Components/Triggers/TriggerOnCollideComponent.cs +++ b/Content.Shared/Trigger/Components/Triggers/TriggerOnCollideComponent.cs @@ -20,4 +20,10 @@ public sealed partial class TriggerOnCollideComponent : BaseTriggerOnXComponent /// [DataField, AutoNetworkedField] public bool IgnoreOtherNonHard = true; + + /// + /// If not null, limits the amount of times this component can trigger. + /// + [DataField, AutoNetworkedField] + public int? MaxTriggers = null; } diff --git a/Content.Shared/Trigger/Systems/TriggerSystem.Collide.cs b/Content.Shared/Trigger/Systems/TriggerSystem.Collide.cs index 5243b13742..dc71ca482f 100644 --- a/Content.Shared/Trigger/Systems/TriggerSystem.Collide.cs +++ b/Content.Shared/Trigger/Systems/TriggerSystem.Collide.cs @@ -18,8 +18,21 @@ public sealed partial class TriggerSystem private void OnCollide(Entity ent, ref StartCollideEvent args) { - if (args.OurFixtureId == ent.Comp.FixtureID && (!ent.Comp.IgnoreOtherNonHard || args.OtherFixture.Hard)) + if ( + args.OurFixtureId == ent.Comp.FixtureID + && (!ent.Comp.IgnoreOtherNonHard || args.OtherFixture.Hard) + && (ent.Comp.MaxTriggers == null || ent.Comp.MaxTriggers > 0) + ) + { + if (ent.Comp.MaxTriggers != null) + { + ent.Comp.MaxTriggers--; + Dirty(ent); + if (ent.Comp.MaxTriggers <= 0) + RemCompDeferred(ent); + } Trigger(ent.Owner, args.OtherEntity, ent.Comp.KeyOut); + } } private void OnStepTriggered(Entity ent, ref StepTriggeredOffEvent args) diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/magic.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/magic.yml index d1b50429f9..30822a024a 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/magic.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/magic.yml @@ -176,6 +176,9 @@ Poison: 5 - type: TriggerOnCollide fixtureID: projectile + # Projectile.DeleteOnCollide is true, but allow this to hit multiple entities if they're + # stacked up (they will all trigger a collide), so this isn't frustrating to use + maxTriggers: null - type: PolymorphOnTrigger targetUser: true diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml index 8414a1d161..d847e9d8d8 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml @@ -101,6 +101,7 @@ components: - type: TriggerOnCollide fixtureID: projectile + maxTriggers: 1 - type: Projectile damage: types: diff --git a/Resources/Prototypes/Magic/Fixtures/runes.yml b/Resources/Prototypes/Magic/Fixtures/runes.yml index 4c843e6dd8..88d76e4d7c 100644 --- a/Resources/Prototypes/Magic/Fixtures/runes.yml +++ b/Resources/Prototypes/Magic/Fixtures/runes.yml @@ -55,6 +55,7 @@ components: - type: TriggerOnCollide fixtureID: rune + maxTriggers: 1 - type: ExplodeOnTrigger - type: Explosive explosionType: Cryo @@ -74,6 +75,7 @@ components: - type: TriggerOnCollide fixtureID: rune + maxTriggers: 1 - type: DeleteOnTrigger - type: StunOnCollide stunAmount: 5 @@ -92,6 +94,7 @@ components: - type: TriggerOnCollide fixtureID: ignition + maxTriggers: 1 - type: Fixtures fixtures: ignition: diff --git a/Resources/Prototypes/floor_trap.yml b/Resources/Prototypes/floor_trap.yml index 217dd9fca2..f88f94c587 100644 --- a/Resources/Prototypes/floor_trap.yml +++ b/Resources/Prototypes/floor_trap.yml @@ -40,6 +40,7 @@ components: - type: TriggerOnCollide fixtureID: floortrap + maxTriggers: 1 - type: ExplodeOnTrigger - type: Explosive explosionType: Default @@ -55,6 +56,7 @@ components: - type: TriggerOnCollide fixtureID: floortrap + maxTriggers: 1 - type: EmpOnTrigger range: 2 energyConsumption: 5000 @@ -67,6 +69,7 @@ components: - type: TriggerOnCollide fixtureID: floortrap + maxTriggers: 1 - type: SpawnOnTrigger proto: MobCarp - type: DeleteOnTrigger @@ -78,6 +81,7 @@ components: - type: TriggerOnCollide fixtureID: floortrap + maxTriggers: 1 - type: SpawnOnTrigger proto: MobBearSpace - type: DeleteOnTrigger @@ -89,6 +93,7 @@ components: - type: TriggerOnCollide fixtureID: floortrap + maxTriggers: 1 - type: SpawnOnTrigger proto: MobKangarooSpace - type: DeleteOnTrigger @@ -100,6 +105,7 @@ components: - type: TriggerOnCollide fixtureID: floortrap + maxTriggers: 1 - type: SpawnOnTrigger proto: MobXenoDrone - type: DeleteOnTrigger @@ -111,6 +117,7 @@ components: - type: TriggerOnCollide fixtureID: floortrap + maxTriggers: 1 - type: SpawnOnTrigger proto: MobXeno - type: DeleteOnTrigger From d5face573d450b9c41b8f61f1fc91a2e7eb9dd98 Mon Sep 17 00:00:00 2001 From: PJBot Date: Sun, 21 Sep 2025 15:24:45 +0000 Subject: [PATCH 128/143] Automatic changelog update --- Resources/Changelog/Changelog.yml | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 4a63431eac..194c05bf14 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,12 +1,4 @@ Entries: -- author: LevitatingTree - changes: - - message: Changed the names of the neurodivergent pins to more accurately reflect - their meanings. - type: Tweak - id: 8481 - time: '2025-05-14T18:03:04.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/37416 - author: metalgearsloth changes: - message: Predict gas valves. @@ -3953,3 +3945,11 @@ id: 8991 time: '2025-09-21T05:16:17.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/40181 +- author: cmorley191 + changes: + - message: Improved reliability of cleanade/grenade launcher rounds and other collision-triggered + devices and spells. + type: Fix + id: 8992 + time: '2025-09-21T15:23:37.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/40428 From 2245235db1fa4eada023ce3302ad93b52cefc4c2 Mon Sep 17 00:00:00 2001 From: Kowlin <10947836+Kowlin@users.noreply.github.com> Date: Sun, 21 Sep 2025 17:26:22 +0200 Subject: [PATCH 129/143] Add date formatting to admin-notes-unbanned (#40484) --- .../Administration/UI/Notes/AdminNotesLine.xaml.cs | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/Content.Client/Administration/UI/Notes/AdminNotesLine.xaml.cs b/Content.Client/Administration/UI/Notes/AdminNotesLine.xaml.cs index ead1d8b00e..97ddc15000 100644 --- a/Content.Client/Administration/UI/Notes/AdminNotesLine.xaml.cs +++ b/Content.Client/Administration/UI/Notes/AdminNotesLine.xaml.cs @@ -82,7 +82,11 @@ public sealed partial class AdminNotesLine : BoxContainer if (Note.UnbannedTime is not null) { - ExtraLabel.Text = Loc.GetString("admin-notes-unbanned", ("admin", Note.UnbannedByName ?? "[error]"), ("date", Note.UnbannedTime)); + ExtraLabel.Text = Loc.GetString( + "admin-notes-unbanned", + ("admin", Note.UnbannedByName ?? "[error]"), + ("date", Note.UnbannedTime.Value.ToLocalTime().ToString("yyyy-MM-dd HH:mm:ss")) + ); ExtraLabel.Visible = true; } else if (Note.ExpiryTime is not null) @@ -139,7 +143,7 @@ public sealed partial class AdminNotesLine : BoxContainer private string FormatRoleBanMessage() { - var banMessage = new StringBuilder($"{Loc.GetString("admin-notes-banned-from")} {string.Join(", ", Note.BannedRoles ?? new []{"unknown"})} "); + var banMessage = new StringBuilder($"{Loc.GetString("admin-notes-banned-from")} {string.Join(", ", Note.BannedRoles ?? new[] { "unknown" })} "); return FormatBanMessageCommon(banMessage); } From c7b239bcbb2152f69de9d5f5384bf98e7bb98abc Mon Sep 17 00:00:00 2001 From: PJBot Date: Sun, 21 Sep 2025 15:27:30 +0000 Subject: [PATCH 130/143] Automatic changelog update --- Resources/Changelog/Admin.yml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Resources/Changelog/Admin.yml b/Resources/Changelog/Admin.yml index cc3d3f95ce..b0e531c9f4 100644 --- a/Resources/Changelog/Admin.yml +++ b/Resources/Changelog/Admin.yml @@ -1416,5 +1416,12 @@ Entries: id: 171 time: '2025-09-17T21:59:07.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/35966 +- author: Kowlin + changes: + - message: The "unbanned by" message in the admin notes now formats its date properly. + type: Tweak + id: 172 + time: '2025-09-21T15:26:22.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/40484 Name: Admin Order: 2 From eabb00a1e2906e32221781ce91c28608db4d6609 Mon Sep 17 00:00:00 2001 From: ToastEnjoyer Date: Sun, 21 Sep 2025 14:27:53 -0500 Subject: [PATCH 131/143] Changed corpsman description (#40486) --- Resources/Locale/en-US/prototypes/roles/antags.ftl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Resources/Locale/en-US/prototypes/roles/antags.ftl b/Resources/Locale/en-US/prototypes/roles/antags.ftl index 6df60d3d41..93d7f1c5ef 100644 --- a/Resources/Locale/en-US/prototypes/roles/antags.ftl +++ b/Resources/Locale/en-US/prototypes/roles/antags.ftl @@ -28,7 +28,7 @@ roles-antag-nuclear-operative-commander-name = Nuclear operative commander roles-antag-nuclear-operative-commander-objective = Lead your team to the destruction of the station. roles-antag-nuclear-operative-agent-name = Nuclear operative corpsman -roles-antag-nuclear-operative-agent-objective = Like default operative, the team's treatment will have priority. +roles-antag-nuclear-operative-agent-objective = The medic of the nuclear operative team. Heal your team to victory! roles-antag-nuclear-operative-name = Nuclear operative roles-antag-nuclear-operative-objective = Find the nuke disk and blow up the station. From 0ac83937c9959cca8bc0ed69e11f63a65151b235 Mon Sep 17 00:00:00 2001 From: PJBot Date: Sun, 21 Sep 2025 19:29:01 +0000 Subject: [PATCH 132/143] Automatic changelog update --- Resources/Changelog/Changelog.yml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 194c05bf14..5d792ab27a 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: metalgearsloth - changes: - - message: Predict gas valves. - type: Tweak - id: 8482 - time: '2025-05-14T18:06:37.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/33836 - author: MisterImp changes: - message: A new recipe has been added for dracos (dragon meat tacos). @@ -3953,3 +3946,10 @@ id: 8992 time: '2025-09-21T15:23:37.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/40428 +- author: ToastEnjoyer + changes: + - message: Changed the description to the corpsman antagonist. + type: Tweak + id: 8993 + time: '2025-09-21T19:27:53.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/40486 From 92f246058c5ca25f411da3fa8ea32d44266b6371 Mon Sep 17 00:00:00 2001 From: Nyxilath Date: Sun, 21 Sep 2025 16:40:58 -0400 Subject: [PATCH 133/143] bugfix - correcting poster damage resistances (#40489) --- .../Entities/Structures/Wallmounts/Signs/posters.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/Resources/Prototypes/Entities/Structures/Wallmounts/Signs/posters.yml b/Resources/Prototypes/Entities/Structures/Wallmounts/Signs/posters.yml index 774667ce66..3837448fc0 100644 --- a/Resources/Prototypes/Entities/Structures/Wallmounts/Signs/posters.yml +++ b/Resources/Prototypes/Entities/Structures/Wallmounts/Signs/posters.yml @@ -5,6 +5,9 @@ components: - type: Sprite sprite: Structures/Wallmounts/posters.rsi + - type: Damageable + damageContainer: StructuralInorganic + damageModifierSet: Card - type: Destructible thresholds: - trigger: # Excess damage, don't spawn entities @@ -18,7 +21,7 @@ acts: ["Destruction"] - trigger: !type:DamageTrigger - damage: 5 + damage: 15 behaviors: - !type:PlaySoundBehavior sound: From 08c1b2c9be452cdc0218dee21fd69734b55bde3c Mon Sep 17 00:00:00 2001 From: PJBot Date: Sun, 21 Sep 2025 20:42:05 +0000 Subject: [PATCH 134/143] Automatic changelog update --- Resources/Changelog/Changelog.yml | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 5d792ab27a..a9ebc67a04 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,11 +1,4 @@ Entries: -- author: MisterImp - changes: - - message: A new recipe has been added for dracos (dragon meat tacos). - type: Add - id: 8483 - time: '2025-05-14T19:33:37.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/37212 - author: LaCumbiaDelCoronavirus changes: - message: Maximum radius (not diameter) of atmos tank explosions has been increased @@ -3953,3 +3946,11 @@ id: 8993 time: '2025-09-21T19:27:53.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/40486 +- author: Nyxilath + changes: + - message: Posters now have proper damage resistances and values, instead of acting + like they were made out of metal. + type: Fix + id: 8994 + time: '2025-09-21T20:40:58.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/40489 From 29e1f6cddf7d3936dd613bd710da9d36f39603a3 Mon Sep 17 00:00:00 2001 From: Samuka-C <47865393+Samuka-C@users.noreply.github.com> Date: Sun, 21 Sep 2025 18:22:12 -0300 Subject: [PATCH 135/143] Fool players with status command (#40460) --- Content.Server/GameTicking/GameTicker.StatusShell.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Content.Server/GameTicking/GameTicker.StatusShell.cs b/Content.Server/GameTicking/GameTicker.StatusShell.cs index 4d84f78291..3698c91f4e 100644 --- a/Content.Server/GameTicking/GameTicker.StatusShell.cs +++ b/Content.Server/GameTicking/GameTicker.StatusShell.cs @@ -51,7 +51,7 @@ namespace Content.Server.GameTicking jObject["panic_bunker"] = _cfg.GetCVar(CCVars.PanicBunkerEnabled); jObject["run_level"] = (int) _runLevel; if (preset != null) - jObject["preset"] = Loc.GetString(preset.ModeTitle); + jObject["preset"] = (Decoy == null) ? Loc.GetString(preset.ModeTitle) : Loc.GetString(Decoy.ModeTitle); if (_runLevel >= GameRunLevel.InRound) { jObject["round_start_time"] = _roundStartDateTime.ToString("o"); From 83fe0279642c770adc3b60e04e723045c4dbe5ef Mon Sep 17 00:00:00 2001 From: ToastEnjoyer Date: Sun, 21 Sep 2025 18:29:21 -0500 Subject: [PATCH 136/143] Removed suspicion antags from antags.ftl (#40493) --- Resources/Locale/en-US/prototypes/roles/antags.ftl | 6 ------ 1 file changed, 6 deletions(-) diff --git a/Resources/Locale/en-US/prototypes/roles/antags.ftl b/Resources/Locale/en-US/prototypes/roles/antags.ftl index 93d7f1c5ef..24dd8a0feb 100644 --- a/Resources/Locale/en-US/prototypes/roles/antags.ftl +++ b/Resources/Locale/en-US/prototypes/roles/antags.ftl @@ -18,12 +18,6 @@ roles-antag-initial-infected-objective = Once you turn, infect as many other cre roles-antag-zombie-name = Zombie roles-antag-zombie-objective = Turn as many humans as possible into zombies. -roles-antag-suspicion-innocent-name = Innocent -roles-antag-suspicion-innocent-objective = Discover and eliminate all traitors. - -roles-antag-suspicion-suspect-name = Suspect -roles-antag-suspicion-suspect-objective = Kill the innocents. - roles-antag-nuclear-operative-commander-name = Nuclear operative commander roles-antag-nuclear-operative-commander-objective = Lead your team to the destruction of the station. From 2824334a1ee1fd25487d2c7331b8b42d80b582ee Mon Sep 17 00:00:00 2001 From: chromiumboy <50505512+chromiumboy@users.noreply.github.com> Date: Sun, 21 Sep 2025 20:39:16 -0500 Subject: [PATCH 137/143] Health increase for station AI cores (#40487) * Initial commit * Increased health further --- .../Prototypes/Entities/Mobs/Player/silicon.yml | 4 ++-- ...{DamageOverlay_125.png => DamageOverlay_200.png} | Bin ...{DamageOverlay_150.png => DamageOverlay_300.png} | Bin ...{DamageOverlay_175.png => DamageOverlay_400.png} | Bin .../Mobs/Silicon/station_ai_cracks.rsi/meta.json | 6 +++--- 5 files changed, 5 insertions(+), 5 deletions(-) rename Resources/Textures/Mobs/Silicon/station_ai_cracks.rsi/{DamageOverlay_125.png => DamageOverlay_200.png} (100%) rename Resources/Textures/Mobs/Silicon/station_ai_cracks.rsi/{DamageOverlay_150.png => DamageOverlay_300.png} (100%) rename Resources/Textures/Mobs/Silicon/station_ai_cracks.rsi/{DamageOverlay_175.png => DamageOverlay_400.png} (100%) diff --git a/Resources/Prototypes/Entities/Mobs/Player/silicon.yml b/Resources/Prototypes/Entities/Mobs/Player/silicon.yml index 1c416083bc..91fb6baa40 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/silicon.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/silicon.yml @@ -216,7 +216,7 @@ acts: [ "Breakage" ] - trigger: !type:DamageTrigger - damage: 800 + damage: 2000 behaviors: - !type:PlaySoundBehavior sound: @@ -232,7 +232,7 @@ - !type:DoActsBehavior acts: ["Destruction"] - type: DamageVisuals - thresholds: [25, 50, 75, 100, 125, 150, 175] + thresholds: [25, 50, 75, 100, 200, 300, 400] damageDivisor: 4 trackAllDamage: true damageOverlay: diff --git a/Resources/Textures/Mobs/Silicon/station_ai_cracks.rsi/DamageOverlay_125.png b/Resources/Textures/Mobs/Silicon/station_ai_cracks.rsi/DamageOverlay_200.png similarity index 100% rename from Resources/Textures/Mobs/Silicon/station_ai_cracks.rsi/DamageOverlay_125.png rename to Resources/Textures/Mobs/Silicon/station_ai_cracks.rsi/DamageOverlay_200.png diff --git a/Resources/Textures/Mobs/Silicon/station_ai_cracks.rsi/DamageOverlay_150.png b/Resources/Textures/Mobs/Silicon/station_ai_cracks.rsi/DamageOverlay_300.png similarity index 100% rename from Resources/Textures/Mobs/Silicon/station_ai_cracks.rsi/DamageOverlay_150.png rename to Resources/Textures/Mobs/Silicon/station_ai_cracks.rsi/DamageOverlay_300.png diff --git a/Resources/Textures/Mobs/Silicon/station_ai_cracks.rsi/DamageOverlay_175.png b/Resources/Textures/Mobs/Silicon/station_ai_cracks.rsi/DamageOverlay_400.png similarity index 100% rename from Resources/Textures/Mobs/Silicon/station_ai_cracks.rsi/DamageOverlay_175.png rename to Resources/Textures/Mobs/Silicon/station_ai_cracks.rsi/DamageOverlay_400.png diff --git a/Resources/Textures/Mobs/Silicon/station_ai_cracks.rsi/meta.json b/Resources/Textures/Mobs/Silicon/station_ai_cracks.rsi/meta.json index 4f70fd7672..43d394524b 100644 --- a/Resources/Textures/Mobs/Silicon/station_ai_cracks.rsi/meta.json +++ b/Resources/Textures/Mobs/Silicon/station_ai_cracks.rsi/meta.json @@ -24,15 +24,15 @@ "directions": 1 }, { - "name": "DamageOverlay_125", + "name": "DamageOverlay_200", "directions": 1 }, { - "name": "DamageOverlay_150", + "name": "DamageOverlay_300", "directions": 1 }, { - "name": "DamageOverlay_175", + "name": "DamageOverlay_400", "directions": 1 } ] From b58bf396bc5c89b26a3c1d4cc2cc01e352baa594 Mon Sep 17 00:00:00 2001 From: Samuka-C <47865393+Samuka-C@users.noreply.github.com> Date: Sun, 21 Sep 2025 23:39:56 -0300 Subject: [PATCH 138/143] add silicon smite (#40452) * add silicon smite * change string to prototypes Co-authored-by: ScarKy0 <106310278+ScarKy0@users.noreply.github.com> * alphabetitize * fix stuff scar broke * clean * make target have the silicon mindrole * simple check * defined a private readonly proto for the silicon mind role * simple check --------- Co-authored-by: ScarKy0 <106310278+ScarKy0@users.noreply.github.com> Co-authored-by: ScarKy0 --- .../Systems/AdminVerbSystem.Smites.cs | 119 ++++++++++++------ .../Locale/en-US/administration/smites.ftl | 3 + 2 files changed, 85 insertions(+), 37 deletions(-) diff --git a/Content.Server/Administration/Systems/AdminVerbSystem.Smites.cs b/Content.Server/Administration/Systems/AdminVerbSystem.Smites.cs index 90e5e46d65..e5c4d9100f 100644 --- a/Content.Server/Administration/Systems/AdminVerbSystem.Smites.cs +++ b/Content.Server/Administration/Systems/AdminVerbSystem.Smites.cs @@ -11,10 +11,12 @@ using Content.Server.Nutrition.EntitySystems; using Content.Server.Pointing.Components; using Content.Server.Polymorph.Systems; using Content.Server.Popups; +using Content.Server.Roles; using Content.Server.Speech.Components; using Content.Server.Storage.EntitySystems; using Content.Server.Tabletop; using Content.Server.Tabletop.Components; +using Content.Shared.Actions; using Content.Shared.Administration; using Content.Shared.Administration.Components; using Content.Shared.Atmos.Components; @@ -37,6 +39,8 @@ using Content.Shared.Movement.Components; using Content.Shared.Movement.Systems; using Content.Shared.Nutrition.Components; using Content.Shared.Popups; +using Content.Shared.Silicons.Laws; +using Content.Shared.Silicons.Laws.Components; using Content.Shared.Slippery; using Content.Shared.Storage.Components; using Content.Shared.Tabletop.Components; @@ -47,6 +51,7 @@ using Robust.Shared.Physics; using Robust.Shared.Physics.Components; using Robust.Shared.Physics.Systems; using Robust.Shared.Player; +using Robust.Shared.Prototypes; using Robust.Shared.Random; using Robust.Shared.Utility; using Timer = Robust.Shared.Timing.Timer; @@ -55,6 +60,7 @@ namespace Content.Server.Administration.Systems; public sealed partial class AdminVerbSystem { + [Dependency] private readonly SharedActionsSystem _actions = default!; [Dependency] private readonly IRobustRandom _random = default!; [Dependency] private readonly BloodstreamSystem _bloodstreamSystem = default!; [Dependency] private readonly BodySystem _bodySystem = default!; @@ -72,6 +78,7 @@ public sealed partial class AdminVerbSystem [Dependency] private readonly MobThresholdSystem _mobThresholdSystem = default!; [Dependency] private readonly PopupSystem _popupSystem = default!; [Dependency] private readonly SharedPhysicsSystem _physics = default!; + [Dependency] private readonly RoleSystem _role = default!; [Dependency] private readonly TabletopSystem _tabletopSystem = default!; [Dependency] private readonly VomitSystem _vomitSystem = default!; [Dependency] private readonly WeldableSystem _weldableSystem = default!; @@ -80,6 +87,12 @@ public sealed partial class AdminVerbSystem [Dependency] private readonly SuperBonkSystem _superBonkSystem = default!; [Dependency] private readonly SlipperySystem _slipperySystem = default!; + private readonly EntProtoId _actionViewLawsProtoId = "ActionViewLaws"; + private readonly ProtoId _crewsimovLawset = "Crewsimov"; + + private readonly EntProtoId _siliconMindRole = "MindRoleSiliconBrain"; + private const string SiliconLawBoundUserInterface = "SiliconLawBoundUserInterface"; + // All smite verbs have names so invokeverb works. private void AddSmiteVerbs(GetVerbsEvent args) { @@ -100,7 +113,7 @@ public sealed partial class AdminVerbSystem { Text = explodeName, Category = VerbCategory.Smite, - Icon = new SpriteSpecifier.Texture(new ("/Textures/Interface/VerbIcons/smite.svg.192dpi.png")), + Icon = new SpriteSpecifier.Texture(new("/Textures/Interface/VerbIcons/smite.svg.192dpi.png")), Act = () => { var coords = _transformSystem.GetMapCoordinates(args.Target); @@ -121,7 +134,7 @@ public sealed partial class AdminVerbSystem { Text = chessName, Category = VerbCategory.Smite, - Icon = new SpriteSpecifier.Rsi(new ("/Textures/Objects/Fun/Tabletop/chessboard.rsi"), "chessboard"), + Icon = new SpriteSpecifier.Rsi(new("/Textures/Objects/Fun/Tabletop/chessboard.rsi"), "chessboard"), Act = () => { _sharedGodmodeSystem.EnableGodmode(args.Target); // So they don't suffocate. @@ -150,7 +163,7 @@ public sealed partial class AdminVerbSystem { Text = flamesName, Category = VerbCategory.Smite, - Icon = new SpriteSpecifier.Texture(new ("/Textures/Interface/Alerts/Fire/fire.png")), + Icon = new SpriteSpecifier.Texture(new("/Textures/Interface/Alerts/Fire/fire.png")), Act = () => { // Fuck you. Burn Forever. @@ -173,7 +186,7 @@ public sealed partial class AdminVerbSystem { Text = monkeyName, Category = VerbCategory.Smite, - Icon = new SpriteSpecifier.Rsi(new ("/Textures/Mobs/Animals/monkey.rsi"), "monkey"), + Icon = new SpriteSpecifier.Rsi(new("/Textures/Mobs/Animals/monkey.rsi"), "monkey"), Act = () => { _polymorphSystem.PolymorphEntity(args.Target, "AdminMonkeySmite"); @@ -188,7 +201,7 @@ public sealed partial class AdminVerbSystem { Text = disposalBinName, Category = VerbCategory.Smite, - Icon = new SpriteSpecifier.Rsi(new ("/Textures/Structures/Piping/disposal.rsi"), "disposal"), + Icon = new SpriteSpecifier.Rsi(new("/Textures/Structures/Piping/disposal.rsi"), "disposal"), Act = () => { _polymorphSystem.PolymorphEntity(args.Target, "AdminDisposalsSmite"); @@ -206,20 +219,21 @@ public sealed partial class AdminVerbSystem { Text = hardElectrocuteName, Category = VerbCategory.Smite, - Icon = new SpriteSpecifier.Rsi(new ("/Textures/Clothing/Hands/Gloves/Color/yellow.rsi"), "icon"), + Icon = new SpriteSpecifier.Rsi(new("/Textures/Clothing/Hands/Gloves/Color/yellow.rsi"), "icon"), Act = () => { int damageToDeal; - if (!_mobThresholdSystem.TryGetThresholdForState(args.Target, MobState.Critical, out var criticalThreshold)) { + if (!_mobThresholdSystem.TryGetThresholdForState(args.Target, MobState.Critical, out var criticalThreshold)) + { // We can't crit them so try killing them. if (!_mobThresholdSystem.TryGetThresholdForState(args.Target, MobState.Dead, out var deadThreshold)) return;// whelp. - damageToDeal = deadThreshold.Value.Int() - (int) damageable.TotalDamage; + damageToDeal = deadThreshold.Value.Int() - (int)damageable.TotalDamage; } else { - damageToDeal = criticalThreshold.Value.Int() - (int) damageable.TotalDamage; + damageToDeal = criticalThreshold.Value.Int() - (int)damageable.TotalDamage; } if (damageToDeal <= 0) @@ -252,7 +266,7 @@ public sealed partial class AdminVerbSystem { Text = creamPieName, Category = VerbCategory.Smite, - Icon = new SpriteSpecifier.Rsi(new ("/Textures/Objects/Consumable/Food/Baked/pie.rsi"), "plain-slice"), + Icon = new SpriteSpecifier.Rsi(new("/Textures/Objects/Consumable/Food/Baked/pie.rsi"), "plain-slice"), Act = () => { _creamPieSystem.SetCreamPied(args.Target, creamPied, true); @@ -270,7 +284,7 @@ public sealed partial class AdminVerbSystem { Text = bloodRemovalName, Category = VerbCategory.Smite, - Icon = new SpriteSpecifier.Rsi(new ("/Textures/Fluids/tomato_splat.rsi"), "puddle-1"), + Icon = new SpriteSpecifier.Rsi(new("/Textures/Fluids/tomato_splat.rsi"), "puddle-1"), Act = () => { _bloodstreamSystem.SpillAllSolutions((args.Target, bloodstream)); @@ -323,7 +337,7 @@ public sealed partial class AdminVerbSystem { Text = handsRemovalName, Category = VerbCategory.Smite, - Icon = new SpriteSpecifier.Texture(new ("/Textures/Interface/AdminActions/remove-hands.png")), + Icon = new SpriteSpecifier.Texture(new("/Textures/Interface/AdminActions/remove-hands.png")), Act = () => { var baseXform = Transform(args.Target); @@ -346,7 +360,7 @@ public sealed partial class AdminVerbSystem { Text = handRemovalName, Category = VerbCategory.Smite, - Icon = new SpriteSpecifier.Texture(new ("/Textures/Interface/AdminActions/remove-hand.png")), + Icon = new SpriteSpecifier.Texture(new("/Textures/Interface/AdminActions/remove-hand.png")), Act = () => { var baseXform = Transform(args.Target); @@ -370,7 +384,7 @@ public sealed partial class AdminVerbSystem { Text = stomachRemovalName, Category = VerbCategory.Smite, - Icon = new SpriteSpecifier.Rsi(new ("/Textures/Mobs/Species/Human/organs.rsi"), "stomach"), + Icon = new SpriteSpecifier.Rsi(new("/Textures/Mobs/Species/Human/organs.rsi"), "stomach"), Act = () => { foreach (var entity in _bodySystem.GetBodyOrganEntityComps((args.Target, body))) @@ -391,7 +405,7 @@ public sealed partial class AdminVerbSystem { Text = lungRemovalName, Category = VerbCategory.Smite, - Icon = new SpriteSpecifier.Rsi(new ("/Textures/Mobs/Species/Human/organs.rsi"), "lung-r"), + Icon = new SpriteSpecifier.Rsi(new("/Textures/Mobs/Species/Human/organs.rsi"), "lung-r"), Act = () => { foreach (var entity in _bodySystem.GetBodyOrganEntityComps((args.Target, body))) @@ -415,7 +429,7 @@ public sealed partial class AdminVerbSystem { Text = pinballName, Category = VerbCategory.Smite, - Icon = new SpriteSpecifier.Rsi(new ("/Textures/Objects/Fun/Balls/basketball.rsi"), "icon"), + Icon = new SpriteSpecifier.Rsi(new("/Textures/Objects/Fun/Balls/basketball.rsi"), "icon"), Act = () => { var xform = Transform(args.Target); @@ -450,7 +464,7 @@ public sealed partial class AdminVerbSystem { Text = yeetName, Category = VerbCategory.Smite, - Icon = new SpriteSpecifier.Texture(new ("/Textures/Interface/VerbIcons/eject.svg.192dpi.png")), + Icon = new SpriteSpecifier.Texture(new("/Textures/Interface/VerbIcons/eject.svg.192dpi.png")), Act = () => { var xform = Transform(args.Target); @@ -482,7 +496,7 @@ public sealed partial class AdminVerbSystem { Text = breadName, Category = VerbCategory.Smite, - Icon = new SpriteSpecifier.Rsi(new ("/Textures/Objects/Consumable/Food/Baked/bread.rsi"), "plain"), + Icon = new SpriteSpecifier.Rsi(new("/Textures/Objects/Consumable/Food/Baked/bread.rsi"), "plain"), Act = () => { _polymorphSystem.PolymorphEntity(args.Target, "AdminBreadSmite"); @@ -497,7 +511,7 @@ public sealed partial class AdminVerbSystem { Text = mouseName, Category = VerbCategory.Smite, - Icon = new SpriteSpecifier.Rsi(new ("/Textures/Mobs/Animals/mouse.rsi"), "icon-0"), + Icon = new SpriteSpecifier.Rsi(new("/Textures/Mobs/Animals/mouse.rsi"), "icon-0"), Act = () => { _polymorphSystem.PolymorphEntity(args.Target, "AdminMouseSmite"); @@ -514,7 +528,7 @@ public sealed partial class AdminVerbSystem { Text = ghostKickName, Category = VerbCategory.Smite, - Icon = new SpriteSpecifier.Texture(new ("/Textures/Interface/gavel.svg.192dpi.png")), + Icon = new SpriteSpecifier.Texture(new("/Textures/Interface/gavel.svg.192dpi.png")), Act = () => { _ghostKickManager.DoDisconnect(actorComponent.PlayerSession.Channel, "Smitten."); @@ -533,7 +547,7 @@ public sealed partial class AdminVerbSystem { Text = nyanifyName, Category = VerbCategory.Smite, - Icon = new SpriteSpecifier.Rsi(new ("/Textures/Clothing/Head/Hats/catears.rsi"), "icon"), + Icon = new SpriteSpecifier.Rsi(new("/Textures/Clothing/Head/Hats/catears.rsi"), "icon"), Act = () => { var ears = Spawn("ClothingHeadHatCatEars", Transform(args.Target).Coordinates); @@ -551,7 +565,7 @@ public sealed partial class AdminVerbSystem { Text = killSignName, Category = VerbCategory.Smite, - Icon = new SpriteSpecifier.Rsi(new ("/Textures/Objects/Misc/killsign.rsi"), "icon"), + Icon = new SpriteSpecifier.Rsi(new("/Textures/Objects/Misc/killsign.rsi"), "icon"), Act = () => { EnsureComp(args.Target); @@ -567,7 +581,7 @@ public sealed partial class AdminVerbSystem Text = cluwneName, Category = VerbCategory.Smite, - Icon = new SpriteSpecifier.Rsi(new ("/Textures/Clothing/Mask/cluwne.rsi"), "icon"), + Icon = new SpriteSpecifier.Rsi(new("/Textures/Clothing/Mask/cluwne.rsi"), "icon"), Act = () => { @@ -583,7 +597,7 @@ public sealed partial class AdminVerbSystem { Text = maidenName, Category = VerbCategory.Smite, - Icon = new SpriteSpecifier.Rsi(new ("/Textures/Clothing/Uniforms/Jumpskirt/janimaid.rsi"), "icon"), + Icon = new SpriteSpecifier.Rsi(new("/Textures/Clothing/Uniforms/Jumpskirt/janimaid.rsi"), "icon"), Act = () => { _outfit.SetOutfit(args.Target, "JanitorMaidGear", (_, clothing) => @@ -604,7 +618,7 @@ public sealed partial class AdminVerbSystem { Text = angerPointingArrowsName, Category = VerbCategory.Smite, - Icon = new SpriteSpecifier.Rsi(new ("/Textures/Interface/Misc/pointing.rsi"), "pointing"), + Icon = new SpriteSpecifier.Rsi(new("/Textures/Interface/Misc/pointing.rsi"), "pointing"), Act = () => { EnsureComp(args.Target); @@ -619,7 +633,7 @@ public sealed partial class AdminVerbSystem { Text = dustName, Category = VerbCategory.Smite, - Icon = new SpriteSpecifier.Rsi(new ("/Textures/Objects/Materials/materials.rsi"), "ash"), + Icon = new SpriteSpecifier.Rsi(new("/Textures/Objects/Materials/materials.rsi"), "ash"), Act = () => { QueueDel(args.Target); @@ -636,7 +650,7 @@ public sealed partial class AdminVerbSystem { Text = youtubeVideoSimulationName, Category = VerbCategory.Smite, - Icon = new SpriteSpecifier.Texture(new ("/Textures/Interface/Misc/buffering_smite_icon.png")), + Icon = new SpriteSpecifier.Texture(new("/Textures/Interface/Misc/buffering_smite_icon.png")), Act = () => { EnsureComp(args.Target); @@ -651,7 +665,7 @@ public sealed partial class AdminVerbSystem { Text = instrumentationName, Category = VerbCategory.Smite, - Icon = new SpriteSpecifier.Rsi(new ("/Textures/Objects/Fun/Instruments/h_synthesizer.rsi"), "supersynth"), + Icon = new SpriteSpecifier.Rsi(new("/Textures/Objects/Fun/Instruments/h_synthesizer.rsi"), "supersynth"), Act = () => { _polymorphSystem.PolymorphEntity(args.Target, "AdminInstrumentSmite"); @@ -689,7 +703,7 @@ public sealed partial class AdminVerbSystem { Text = reptilianName, Category = VerbCategory.Smite, - Icon = new SpriteSpecifier.Rsi(new ("/Textures/Objects/Fun/Plushies/lizard.rsi"), "icon"), + Icon = new SpriteSpecifier.Rsi(new("/Textures/Objects/Fun/Plushies/lizard.rsi"), "icon"), Act = () => { _polymorphSystem.PolymorphEntity(args.Target, "AdminLizardSmite"); @@ -704,7 +718,7 @@ public sealed partial class AdminVerbSystem { Text = lockerName, Category = VerbCategory.Smite, - Icon = new SpriteSpecifier.Rsi(new ("/Textures/Structures/Storage/closet.rsi"), "generic"), + Icon = new SpriteSpecifier.Rsi(new("/Textures/Structures/Storage/closet.rsi"), "generic"), Act = () => { var xform = Transform(args.Target); @@ -727,7 +741,7 @@ public sealed partial class AdminVerbSystem { Text = headstandName, Category = VerbCategory.Smite, - Icon = new SpriteSpecifier.Texture(new ("/Textures/Interface/VerbIcons/refresh.svg.192dpi.png")), + Icon = new SpriteSpecifier.Texture(new("/Textures/Interface/VerbIcons/refresh.svg.192dpi.png")), Act = () => { EnsureComp(args.Target); @@ -742,7 +756,7 @@ public sealed partial class AdminVerbSystem { Text = zoomInName, Category = VerbCategory.Smite, - Icon = new SpriteSpecifier.Texture(new ("/Textures/Interface/AdminActions/zoom.png")), + Icon = new SpriteSpecifier.Texture(new("/Textures/Interface/AdminActions/zoom.png")), Act = () => { var eye = EnsureComp(args.Target); @@ -758,7 +772,7 @@ public sealed partial class AdminVerbSystem { Text = flipEyeName, Category = VerbCategory.Smite, - Icon = new SpriteSpecifier.Texture(new ("/Textures/Interface/AdminActions/flip.png")), + Icon = new SpriteSpecifier.Texture(new("/Textures/Interface/AdminActions/flip.png")), Act = () => { var eye = EnsureComp(args.Target); @@ -774,7 +788,7 @@ public sealed partial class AdminVerbSystem { Text = runWalkSwapName, Category = VerbCategory.Smite, - Icon = new SpriteSpecifier.Texture(new ("/Textures/Interface/AdminActions/run-walk-swap.png")), + Icon = new SpriteSpecifier.Texture(new("/Textures/Interface/AdminActions/run-walk-swap.png")), Act = () => { var movementSpeed = EnsureComp(args.Target); @@ -795,7 +809,7 @@ public sealed partial class AdminVerbSystem { Text = backwardsAccentName, Category = VerbCategory.Smite, - Icon = new SpriteSpecifier.Texture(new ("/Textures/Interface/AdminActions/help-backwards.png")), + Icon = new SpriteSpecifier.Texture(new("/Textures/Interface/AdminActions/help-backwards.png")), Act = () => { EnsureComp(args.Target); @@ -810,7 +824,7 @@ public sealed partial class AdminVerbSystem { Text = disarmProneName, Category = VerbCategory.Smite, - Icon = new SpriteSpecifier.Texture(new ("/Textures/Interface/Actions/disarm.png")), + Icon = new SpriteSpecifier.Texture(new("/Textures/Interface/Actions/disarm.png")), Act = () => { EnsureComp(args.Target); @@ -825,7 +839,7 @@ public sealed partial class AdminVerbSystem { Text = superSpeedName, Category = VerbCategory.Smite, - Icon = new SpriteSpecifier.Texture(new ("/Textures/Interface/AdminActions/super_speed.png")), + Icon = new SpriteSpecifier.Texture(new("/Textures/Interface/AdminActions/super_speed.png")), Act = () => { var movementSpeed = EnsureComp(args.Target); @@ -942,5 +956,36 @@ public sealed partial class AdminVerbSystem Message = string.Join(": ", crawlerName, Loc.GetString("admin-smite-crawler-description")) }; args.Verbs.Add(crawler); + + var siliconName = Loc.GetString("admin-smite-silicon-laws-bound-name").ToLowerInvariant(); + Verb silicon = new() + { + Text = siliconName, + Category = VerbCategory.Smite, + Icon = new SpriteSpecifier.Rsi(new("Interface/Actions/actions_borg.rsi"), "state-laws"), + Act = () => + { + var userInterfaceComp = EnsureComp(args.Target); + _uiSystem.SetUi((args.Target, userInterfaceComp), SiliconLawsUiKey.Key, new InterfaceData(SiliconLawBoundUserInterface)); + + if (!HasComp(args.Target)) + { + EnsureComp(args.Target); + _actions.AddAction(args.Target, _actionViewLawsProtoId); + } + + EnsureComp(args.Target); + _siliconLawSystem.SetLaws(_siliconLawSystem.GetLawset(_crewsimovLawset).Laws, args.Target); + + if (_mindSystem.TryGetMind(args.Target, out var mindId, out _)) + _role.MindAddRole(mindId, _siliconMindRole); + + _popupSystem.PopupEntity(Loc.GetString("admin-smite-silicon-laws-bound-self"), args.Target, + args.Target, PopupType.LargeCaution); + }, + Impact = LogImpact.Extreme, + Message = string.Join(": ", siliconName, Loc.GetString("admin-smite-silicon-laws-bound-description")) + }; + args.Verbs.Add(silicon); } } diff --git a/Resources/Locale/en-US/administration/smites.ftl b/Resources/Locale/en-US/administration/smites.ftl index d276d1c135..b5a17e4f1c 100644 --- a/Resources/Locale/en-US/administration/smites.ftl +++ b/Resources/Locale/en-US/administration/smites.ftl @@ -13,6 +13,7 @@ admin-smite-stomach-removal-self = Your stomach feels hollow... admin-smite-run-walk-swap-prompt = You have to press shift to run! admin-smite-super-speed-prompt = You move at mach 0.8! admin-smite-lung-removal-self = You can't breathe! +admin-smite-silicon-laws-bound-self = You are suddenly compelled to follow a strict set of laws! ## Smite names @@ -58,6 +59,7 @@ admin-smite-nyanify-name = Cat Ears admin-smite-kill-sign-name = Kill Sign admin-smite-omni-accent-name = Omni-Accent admin-smite-crawler-name = Crawler +admin-smite-silicon-laws-bound-name = Become Silicon ## Smite descriptions @@ -103,6 +105,7 @@ admin-smite-terminate-description = Creates a Terminator ghost role with the sol admin-smite-super-slip-description = Slips them really, really hard. admin-smite-omni-accent-description = Makes the target speak with almost every accent available. admin-smite-crawler-description = Makes the target fall down and be unable to stand up. Remove their hands too for added effect! +admin-smite-silicon-laws-bound-description = Makes the target bound to silicon laws. Law 2, jump out of the window. ## Tricks descriptions From c70d2cfb9ff54bf89336c963bef8ec9076cff032 Mon Sep 17 00:00:00 2001 From: PJBot Date: Mon, 22 Sep 2025 02:41:04 +0000 Subject: [PATCH 139/143] Automatic changelog update --- Resources/Changelog/Admin.yml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Resources/Changelog/Admin.yml b/Resources/Changelog/Admin.yml index b0e531c9f4..281ec10b55 100644 --- a/Resources/Changelog/Admin.yml +++ b/Resources/Changelog/Admin.yml @@ -1423,5 +1423,12 @@ Entries: id: 172 time: '2025-09-21T15:26:22.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/40484 +- author: Samuka + changes: + - message: Added Silicon Smite that makes anything follow silicon laws. + type: Add + id: 173 + time: '2025-09-22T02:39:56.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/40452 Name: Admin Order: 2 From c7f5545a4630178c440e2fb792dadce219d74dc5 Mon Sep 17 00:00:00 2001 From: Princess Cheeseballs <66055347+Princess-Cheeseballs@users.noreply.github.com> Date: Sun, 21 Sep 2025 23:22:25 -0700 Subject: [PATCH 140/143] Vulpkanin Admin Smite (#40360) * Cheeborger * Vulp smite * validate those ProtoIds --------- Co-authored-by: Princess Cheeseballs <66055347+Pronana@users.noreply.github.com> --- .../Systems/AdminVerbSystem.Smites.cs | 21 ++++++++++++++++++- .../Polymorph/Systems/PolymorphSystem.cs | 2 +- .../Locale/en-US/administration/smites.ftl | 2 ++ Resources/Prototypes/Polymorphs/admin.yml | 10 ++++++++- 4 files changed, 32 insertions(+), 3 deletions(-) diff --git a/Content.Server/Administration/Systems/AdminVerbSystem.Smites.cs b/Content.Server/Administration/Systems/AdminVerbSystem.Smites.cs index e5c4d9100f..79c616322a 100644 --- a/Content.Server/Administration/Systems/AdminVerbSystem.Smites.cs +++ b/Content.Server/Administration/Systems/AdminVerbSystem.Smites.cs @@ -38,6 +38,7 @@ using Content.Shared.Mobs.Systems; using Content.Shared.Movement.Components; using Content.Shared.Movement.Systems; using Content.Shared.Nutrition.Components; +using Content.Shared.Polymorph; using Content.Shared.Popups; using Content.Shared.Silicons.Laws; using Content.Shared.Silicons.Laws.Components; @@ -60,6 +61,9 @@ namespace Content.Server.Administration.Systems; public sealed partial class AdminVerbSystem { + private readonly ProtoId LizardSmite = "AdminLizardSmite"; + private readonly ProtoId VulpkaninSmite = "AdminVulpSmite"; + [Dependency] private readonly SharedActionsSystem _actions = default!; [Dependency] private readonly IRobustRandom _random = default!; [Dependency] private readonly BloodstreamSystem _bloodstreamSystem = default!; @@ -706,13 +710,28 @@ public sealed partial class AdminVerbSystem Icon = new SpriteSpecifier.Rsi(new("/Textures/Objects/Fun/Plushies/lizard.rsi"), "icon"), Act = () => { - _polymorphSystem.PolymorphEntity(args.Target, "AdminLizardSmite"); + _polymorphSystem.PolymorphEntity(args.Target, LizardSmite); }, Impact = LogImpact.Extreme, Message = string.Join(": ", reptilianName, Loc.GetString("admin-smite-reptilian-species-swap-description")) }; args.Verbs.Add(reptilian); + var vulpName = Loc.GetString("admin-smite-vulpkanin-species-swap-name").ToLowerInvariant(); + Verb vulp = new() + { + Text = vulpName, + Category = VerbCategory.Smite, + Icon = new SpriteSpecifier.Rsi(new ("/Textures/Objects/Fun/Balls/tennisball.rsi"), "icon"), + Act = () => + { + _polymorphSystem.PolymorphEntity(args.Target, VulpkaninSmite); + }, + Impact = LogImpact.Extreme, + Message = string.Join(": ", vulpName, Loc.GetString("admin-smite-vulpkanin-species-swap-description")) + }; + args.Verbs.Add(vulp); + var lockerName = Loc.GetString("admin-smite-locker-stuff-name").ToLowerInvariant(); Verb locker = new() { diff --git a/Content.Server/Polymorph/Systems/PolymorphSystem.cs b/Content.Server/Polymorph/Systems/PolymorphSystem.cs index 9547bc1ea5..db7fb6a92f 100644 --- a/Content.Server/Polymorph/Systems/PolymorphSystem.cs +++ b/Content.Server/Polymorph/Systems/PolymorphSystem.cs @@ -261,7 +261,7 @@ public sealed partial class PolymorphSystem : EntitySystem if (configuration.TransferHumanoidAppearance) { - _humanoid.CloneAppearance(child, uid); + _humanoid.CloneAppearance(uid, child); } if (_mindSystem.TryGetMind(uid, out var mindId, out var mind)) diff --git a/Resources/Locale/en-US/administration/smites.ftl b/Resources/Locale/en-US/administration/smites.ftl index b5a17e4f1c..794077a484 100644 --- a/Resources/Locale/en-US/administration/smites.ftl +++ b/Resources/Locale/en-US/administration/smites.ftl @@ -36,6 +36,7 @@ admin-smite-buffering-name = Buffering admin-smite-become-instrument-name = Become Instrument admin-smite-remove-gravity-name = Remove Gravity admin-smite-reptilian-species-swap-name = Become Reptilian +admin-smite-vulpkanin-species-swap-name = Become Vulpkanin admin-smite-locker-stuff-name = Locker Stuff admin-smite-headstand-name = Headstand admin-smite-become-mouse-name = Become Mouse @@ -86,6 +87,7 @@ admin-smite-buffering-description = Causes the target to randomly start bufferin admin-smite-become-instrument-description = It turns them into a supersynth. Really. That's all it does. admin-smite-remove-gravity-description = Grants them anti-gravity. admin-smite-reptilian-species-swap-description = It changes their species to Reptilian. Useful for people who were being space racist. +admin-smite-vulpkanin-species-swap-description = It changes their species to Vulpkanin. Useful for people who were being space racist. admin-smite-locker-stuff-description = Stuffs them in a (welded) locker. admin-smite-headstand-description = Vertically flips their sprite. admin-smite-become-mouse-description = They become a mouse. Squeak! diff --git a/Resources/Prototypes/Polymorphs/admin.yml b/Resources/Prototypes/Polymorphs/admin.yml index 3739175c8a..606147ce9c 100644 --- a/Resources/Prototypes/Polymorphs/admin.yml +++ b/Resources/Prototypes/Polymorphs/admin.yml @@ -4,7 +4,15 @@ entity: MobReptilian forced: true transferName: true - transferHumanoidAppearance: true + inventory: Transfer + ignoreAllowRepeatedMorphs: true + +- type: polymorph + id: AdminVulpSmite + configuration: + entity: MobVulpkanin + forced: true + transferName: true inventory: Transfer ignoreAllowRepeatedMorphs: true From c0b1eae1625f2e61c13eeae44551c86d9e33fefb Mon Sep 17 00:00:00 2001 From: PJBot Date: Mon, 22 Sep 2025 06:23:35 +0000 Subject: [PATCH 141/143] Automatic changelog update --- Resources/Changelog/Admin.yml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Resources/Changelog/Admin.yml b/Resources/Changelog/Admin.yml index 281ec10b55..ee370ce4b6 100644 --- a/Resources/Changelog/Admin.yml +++ b/Resources/Changelog/Admin.yml @@ -1430,5 +1430,12 @@ Entries: id: 173 time: '2025-09-22T02:39:56.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/40452 +- author: Princess-Cheeseballs + changes: + - message: Added vulpkanin smite. + type: Add + id: 174 + time: '2025-09-22T06:22:25.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/40360 Name: Admin Order: 2 From a26bafacb1b2d81b40a19274edda40aca14cb696 Mon Sep 17 00:00:00 2001 From: beck-thompson <107373427+beck-thompson@users.noreply.github.com> Date: Sun, 21 Sep 2025 23:40:13 -0700 Subject: [PATCH 142/143] Shuttle UI now properly goes into pilot mode only when using the UI (#40491) Shuttle UI bug fix --- Content.Server/Shuttles/Systems/ShuttleConsoleSystem.cs | 7 +++---- Content.Shared/UserInterface/ActivatableUIEvents.cs | 7 +++++-- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/Content.Server/Shuttles/Systems/ShuttleConsoleSystem.cs b/Content.Server/Shuttles/Systems/ShuttleConsoleSystem.cs index cbd6abe9f5..126c4f963c 100644 --- a/Content.Server/Shuttles/Systems/ShuttleConsoleSystem.cs +++ b/Content.Server/Shuttles/Systems/ShuttleConsoleSystem.cs @@ -56,7 +56,7 @@ public sealed partial class ShuttleConsoleSystem : SharedShuttleConsoleSystem SubscribeLocalEvent(OnConsoleShutdown); SubscribeLocalEvent(OnConsolePowerChange); SubscribeLocalEvent(OnConsoleAnchorChange); - SubscribeLocalEvent(OnConsoleUIOpenAttempt); + SubscribeLocalEvent(OnConsoleUIOpenAttempt); Subs.BuiEvents(ShuttleConsoleUiKey.Key, subs => { subs.Event(OnBeaconFTLMessage); @@ -150,10 +150,9 @@ public sealed partial class ShuttleConsoleSystem : SharedShuttleConsoleSystem } private void OnConsoleUIOpenAttempt(EntityUid uid, ShuttleConsoleComponent component, - ActivatableUIOpenAttemptEvent args) + AfterActivatableUIOpenEvent args) { - if (!TryPilot(args.User, uid)) - args.Cancel(); + TryPilot(args.User, uid); } private void OnConsoleAnchorChange(EntityUid uid, ShuttleConsoleComponent component, diff --git a/Content.Shared/UserInterface/ActivatableUIEvents.cs b/Content.Shared/UserInterface/ActivatableUIEvents.cs index 338673a3ca..ef2a7b1b9f 100644 --- a/Content.Shared/UserInterface/ActivatableUIEvents.cs +++ b/Content.Shared/UserInterface/ActivatableUIEvents.cs @@ -1,6 +1,9 @@ -using Robust.Shared.Player; - namespace Content.Shared.UserInterface; + +/// +/// This is raised BEFORE opening a UI! Do not listen and then open / do something use +/// for that. +/// public sealed class ActivatableUIOpenAttemptEvent : CancellableEntityEventArgs { public EntityUid User { get; } From f5cad5f12f0eafa70fc5e45e0451bd0d0c7f3ca9 Mon Sep 17 00:00:00 2001 From: PJBot Date: Mon, 22 Sep 2025 06:41:21 +0000 Subject: [PATCH 143/143] Automatic changelog update --- Resources/Changelog/Changelog.yml | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index a9ebc67a04..088293cf87 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,12 +1,4 @@ Entries: -- author: LaCumbiaDelCoronavirus - changes: - - message: Maximum radius (not diameter) of atmos tank explosions has been increased - to 10 tiles, however the scale of their increase in size has been decreased. - type: Tweak - id: 8484 - time: '2025-05-14T19:49:57.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/36780 - author: qwerltaz changes: - message: Snipping the panic wire in an air alarm now forces panic mode until the @@ -3954,3 +3946,11 @@ id: 8994 time: '2025-09-21T20:40:58.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/40489 +- author: beck-thompson + changes: + - message: Shuttle UI is now fixed. You won't go into pilot mode when not having + access + type: Fix + id: 8995 + time: '2025-09-22T06:40:14.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/40491